import { originRequest } from './request.ts' import { type OriginRateLimit } from './types.ts' /** * Read Origin API rate-limit remaining using an app JWT (no installation token). * * Cheap smoke test that the Origin App private key and app id are configured. * * @returns `{ limit, remaining, used, reset }` from the Origin `rate_limit` resource. * @example * import getOriginRateLimit from 'kody:@kentcdodds/origin/rate-limit' * const rate = await getOriginRateLimit() * // => { limit: 5000, remaining: 4999, used: 1, reset: 1756400000 } */ export async function getOriginRateLimit(): Promise { const result = await originRequest({ path: '/rate_limit', auth: 'app', }) if (!result.ok) { const message = isRecord(result.body) && typeof result.body.message === 'string' ? result.body.message : `HTTP ${String(result.status)}` throw new Error(`Origin rate_limit failed: ${message}`) } const payload = isRecord(result.body) ? result.body : {} const core = isRecord(payload.resources) ? payload.resources.core : payload.rate const fields = isRecord(core) ? core : {} return { limit: numberField(fields.limit), remaining: numberField(fields.remaining), used: numberField(fields.used), reset: numberField(fields.reset), } } export default getOriginRateLimit function isRecord(value: unknown): value is Record { return value !== null && typeof value === 'object' && !Array.isArray(value) } function numberField(value: unknown): number | null { return typeof value === 'number' && Number.isFinite(value) ? value : null }