import { writeFileSync, unlinkSync } from 'node:fs'
import { spawnSync } from 'node:child_process'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
const root = join(dirname(fileURLToPath(import.meta.url)), '..')
const src = join(root, 'src', '_pure-check.ts')
writeFileSync(
src,
`
import { resolveAuthMode, resolveMetaIntegration, resolveSystemUserSecret } from './accounts.ts'
import { GRAPH_API_VERSION, buildMetaConnectUrl, inferRequiredScopes, systemUserSecretUrl } from './scopes.ts'
import { boundedLimit, stripSecrets } from './validation.ts'
function assert(cond: unknown, msg: string) {
if (!cond) throw new Error(msg)
}
assert(resolveMetaIntegration() === 'meta', 'default integration')
assert(resolveMetaIntegration({ account: 'work' }) === 'meta-work', 'account alias')
assert(resolveMetaIntegration({ integration: 'meta-personal' }) === 'meta-personal', 'explicit integration')
assert(resolveSystemUserSecret() === 'metaSystemUserToken', 'default secret')
assert(resolveSystemUserSecret({ account: 'work' }) === 'metaSystemUserToken-work', 'secret alias')
assert(resolveAuthMode({ tokenSecret: 'metaSystemUserToken' }) === 'system-user', 'tokenSecret implies system-user')
assert(resolveAuthMode({}) === 'oauth', 'default oauth')
const pageWrite = inferRequiredScopes('POST', '/123/feed')
assert(pageWrite.scopes.includes('pages_manage_posts'), 'page publish scope')
const waSend = inferRequiredScopes('POST', '/123456789/messages')
assert(waSend.scopes.includes('whatsapp_business_messaging'), 'wa send scope')
const igPub = inferRequiredScopes('POST', '/1784/media_publish')
assert(igPub.scopes.includes('instagram_content_publish'), 'ig publish scope')
const connect = buildMetaConnectUrl({ provider: 'meta-work', scopes: ['public_profile'] })
assert(connect.includes('provider=meta-work'), 'connect provider')
assert(connect.includes('www.facebook.com'), 'authorize host')
assert(connect.includes('graph.facebook.com'), 'token host')
assert(!connect.toLowerCase().includes('kent'), 'no personal alias')
assert(GRAPH_API_VERSION === 'v26.0', 'graph version')
const secretUrl = systemUserSecretUrl('metaSystemUserToken-work')
assert(secretUrl.includes('name=metaSystemUserToken-work'), 'secret name')
assert(secretUrl.includes('allowedHosts='), 'secret hosts')
const stripped = stripSecrets({ id: '1', access_token: 'SECRET', child: { page_access_token: 'SECRET' } })
assert(stripped.id === '1', 'kept id')
assert(!('access_token' in stripped), 'stripped token')
assert(!('page_access_token' in (stripped.child as object)), 'stripped nested token')
assert(boundedLimit(undefined) === 10, 'default limit')
console.log('pure-check ok')
`,
)
const result = spawnSync(process.execPath, ['--experimental-strip-types', '--no-warnings', src], {
cwd: root,
encoding: 'utf8',
})
unlinkSync(src)
process.stdout.write(result.stdout)
process.stderr.write(result.stderr)
process.exit(result.status ?? 1)