import { discordBotRequest } from './bot.ts' import { discordOauthRequest } from './oauth.ts' import { inputRecord, requiredLane, type InputRecord } from './validation.ts' type DiscordUser = { id?: string username?: string global_name?: string | null discriminator?: string bot?: boolean flags?: number } function projectUser(lane: 'bot' | 'oauth', user: DiscordUser) { return { lane, id: typeof user.id === 'string' ? user.id : null, username: typeof user.username === 'string' ? user.username : null, globalName: typeof user.global_name === 'string' ? user.global_name : null, discriminator: typeof user.discriminator === 'string' ? user.discriminator : null, bot: user.bot === true, } } /** * Read the authenticated Discord identity from GET /users/@me. * * @param params.lane - `bot` (default) uses `secretName`; `oauth` uses `integration`. * @param params.secretName - Bot-token secret; default `discordBotToken`. * @param params.integration - OAuth integration name; default `discord`. */ export default async function getMe(params: Record = {}) { const input: InputRecord = inputRecord(params) const lane = requiredLane(input, 'bot') if (lane === 'oauth') { return projectUser(lane, (await discordOauthRequest('/users/@me', input)) as DiscordUser) } if (lane === 'bot') { return projectUser(lane, (await discordBotRequest('/users/@me', input)) as DiscordUser) } const exhaustive: never = lane throw new Error('Unsupported Discord lane: ' + String(exhaustive)) }