import { API_KEY_SETUP_URL, DEFAULT_API_KEY_SECRET, DEFAULT_INTEGRATION_NAME, DEFAULT_OAUTH_SCOPES, KIT_API_KEY_DASHBOARD_URL, KIT_CALLBACK_URL, KIT_OAUTH_APP_URL, KIT_REQUIRED_HOSTS, KIT_SCOPES, OAUTH_CONNECT_URL, apiKeySetupUrl, oauthConnectUrl, } from './setup.ts' import { listKitIntegrationNames, listUserSecretNames, parseAuthInput, requireAuthMode, type ResolvedKitAuth, } from './auth.ts' import { resolveIntegrationName, resolveSecretName } from './setup.ts' import type { KitAuthInput } from './types.ts' import { requireRecord } from './types.ts' export type KitAccountResolution = { integrationName: string secretName: string oauthConnected: boolean apiKeySaved: boolean preferredAuth: ResolvedKitAuth['mode'] | null connectUrl: string apiKeyUrl: string scopes: typeof KIT_SCOPES defaultScopes: Array requiredHosts: Array callbackUrl: string oauthAppUrl: string apiKeyDashboardUrl: string } /** * Resolve which Kit OAuth integration or API key to use. * @example * import { accounts } from 'kody:@kody/kit/accounts' * const info = await accounts({ account: 'work' }) */ export async function accounts(params: KitAuthInput = {}): Promise { const integrationName = resolveIntegrationName(params) const secretName = resolveSecretName(params) const [secrets, integrations] = await Promise.all([ listUserSecretNames(), listKitIntegrationNames(), ]) const oauthConnected = integrations.includes(integrationName) const apiKeySaved = secrets.has(secretName) const forced = requireAuthMode(params.auth) let preferredAuth: KitAccountResolution['preferredAuth'] = null if (forced === 'oauth' && oauthConnected) preferredAuth = 'oauth' else if (forced === 'apiKey' && apiKeySaved) preferredAuth = 'apiKey' else if (apiKeySaved) preferredAuth = 'apiKey' else if (oauthConnected) preferredAuth = 'oauth' return { integrationName, secretName, oauthConnected, apiKeySaved, preferredAuth, connectUrl: oauthConnectUrl(integrationName), apiKeyUrl: apiKeySetupUrl(secretName), scopes: KIT_SCOPES, defaultScopes: [...DEFAULT_OAUTH_SCOPES], requiredHosts: [...KIT_REQUIRED_HOSTS], callbackUrl: KIT_CALLBACK_URL, oauthAppUrl: KIT_OAUTH_APP_URL, apiKeyDashboardUrl: KIT_API_KEY_DASHBOARD_URL, } } export { DEFAULT_INTEGRATION_NAME, DEFAULT_API_KEY_SECRET, OAUTH_CONNECT_URL, API_KEY_SETUP_URL } /** * Resolve which Kit OAuth integration or API key to use. * @example * import accounts from 'kody:@kody/kit/accounts' * const info = await accounts() */ export default async function accountsEntrypoint( params: KitAuthInput & Record = {}, ) { return accounts(parseAuthInput(requireRecord(params, 'accounts'))) }