Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/origin

src/rate-limit.ts

38 lines · 1.1 KB · TypeScript
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