Skip to content

src/secret-status.ts

31 lines · 961 B · TypeScript
Raw
import {
	buildHostApprovalUrl,
	listWakeSecretsForStatus,
	WEBHOOK_HOST,
	type WakeSecretMeta,
} from './registry.ts'

/**
 * Return grokBotWake secret metadata (names, scopes, allowed hosts). Never values.
 *
 * Call via `import secretStatus from 'kody:@kentcdodds/grok-bot/secret-status'`.
 * Uses direct `secretList` / stamp-optimistic package-bucket fallbacks only —
 * no subscription dispatch.
 */
export default async function secretStatus(): Promise<{
	secrets: WakeSecretMeta[]
	needsHostApproval: Array<{ name: string; scope: string; approvalUrl: string }>
}> {
	const secrets = (await listWakeSecretsForStatus()) ?? []
	const needsHostApproval = secrets
		.filter((secret) => !secret.allowed_hosts.includes(WEBHOOK_HOST))
		.map((secret) => ({
			name: secret.name,
			scope: secret.scope,
			approvalUrl: buildHostApprovalUrl({
				scope: secret.scope || 'user',
				secretName: secret.name,
			}),
		}))
	return { secrets, needsHostApproval }
}