import {
apiTokenSetupUrl,
DEFAULT_API_TOKEN_SECRET,
DEFAULT_WEBHOOK_SECRET,
PLANETSCALE_API_HOST,
PLANETSCALE_TOKEN_DOCS,
webhookSecretSetupUrl,
} from './setup.ts'
import { listUserSecretNames, resolveSecretName } from './auth.ts'
import type { PlanetscaleAuthInput } from './types.ts'
import { requireRecord } from './types.ts'
export type PlanetscaleAccountInfo = {
secretName: string
apiTokenSaved: boolean
webhookSecretSaved: boolean
setupUrl: string
webhookSecretUrl: string
requiredHost: string
tokenDocs: string
}
/**
* Resolve which PlanetScale service-token secret to use.
* @example
* import accounts from 'kody:@kody/planetscale/accounts'
* const info = await accounts()
*/
export async function accounts(params: PlanetscaleAuthInput = {}): Promise<PlanetscaleAccountInfo> {
const secretName = resolveSecretName(params)
const secrets = await listUserSecretNames()
return {
secretName,
apiTokenSaved: secrets.has(secretName),
webhookSecretSaved: secrets.has(DEFAULT_WEBHOOK_SECRET),
setupUrl: apiTokenSetupUrl(secretName),
webhookSecretUrl: webhookSecretSetupUrl(),
requiredHost: PLANETSCALE_API_HOST,
tokenDocs: PLANETSCALE_TOKEN_DOCS,
}
}
export { DEFAULT_API_TOKEN_SECRET }
/**
* Resolve which PlanetScale service-token secret to use.
* @example
* import accounts from 'kody:@kody/planetscale/accounts'
* const info = await accounts({ account: 'work' })
*/
export default async function accountsEntrypoint(
params: PlanetscaleAuthInput & Record<string, unknown> = {},
) {
return accounts(requireRecord(params, 'accounts') as PlanetscaleAuthInput)
}