Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/workos

src/accounts.ts

57 lines · 1.6 KB · TypeScript
import {
	apiKeySetupUrl,
	DEFAULT_API_KEY_SECRET,
	WORKOS_API_HOST,
	WORKOS_DASHBOARD_API_KEYS_URL,
	WORKOS_PORTAL_INTENTS,
} from './setup.ts'
import { listUserSecretNames, resolveSecretName } from './auth.ts'
import type { WorkosAuthInput } from './types.ts'
import { requireRecord } from './types.ts'

export type WorkosAccountInfo = {
	secretName: string
	apiKeySaved: boolean
	setupUrl: string
	requiredHost: string
	dashboardUrl: string
	portalIntents: Array<string>
}

/**
 * Resolve which WorkOS API key secret to use.
 *
 * - `secretName` wins when set
 * - `account: 'work'` → `workosApiKey-work`
 * - `account: 'default'` / `'workos'` / omitted → `workosApiKey`
 *
 * @example
 * import accounts from 'kody:@kody/workos/accounts'
 * const info = await accounts()
 */
export async function accounts(params: WorkosAuthInput = {}): Promise<WorkosAccountInfo> {
	const secretName = resolveSecretName(params)
	const secrets = await listUserSecretNames()
	return {
		secretName,
		apiKeySaved: secrets.has(secretName),
		setupUrl: apiKeySetupUrl(secretName),
		requiredHost: WORKOS_API_HOST,
		dashboardUrl: WORKOS_DASHBOARD_API_KEYS_URL,
		portalIntents: [...WORKOS_PORTAL_INTENTS],
	}
}

export { DEFAULT_API_KEY_SECRET }

/**
 * Resolve which WorkOS API key secret to use.
 * @example
 * import accounts from 'kody:@kody/workos/accounts'
 * const info = await accounts({ account: 'work' })
 */
export default async function accountsEntrypoint(
	params: WorkosAuthInput & Record<string, unknown> = {},
) {
	return accounts(requireRecord(params, 'accounts') as WorkosAuthInput)
}