import { isRecord, numberField, originErrorMessage } from './http.ts'
import { originRequest } from './request.ts'
import { type OriginAccountInput, type OriginRateLimit } from './types.ts'
/**
* Zero-cost Origin rate-limit smoke test using an app JWT.
*
* @example
* import getOriginRateLimit from 'kody:@kody/origin/rate-limit'
* const budget = await getOriginRateLimit()
*/
export async function getOriginRateLimit(
input: OriginAccountInput = {},
): Promise<OriginRateLimit> {
const result = await originRequest({
...input,
path: '/rate_limit',
auth: 'app',
})
if (!result.ok) {
throw new Error(
`Origin rate_limit failed: ${originErrorMessage(result.body, result.status)}`,
)
}
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