← Public packages
@kody/openapi
Bind an OpenAPI spec and call selected operations with saved integration or secret names.
src/storage.ts
46 lines · 1.3 KB · TypeScriptimport { packageStorage } from 'kody:runtime'
import {
maxOpenApiBindings,
type OpenApiBinding,
} from './selection.ts'
const storeKey = 'bindings'
function asBindingMap(value: unknown): Record<string, OpenApiBinding> {
if (value == null || value === '') return {}
const parsed =
typeof value === 'string'
? (JSON.parse(value) as unknown)
: value
if (typeof parsed !== 'object' || parsed == null || Array.isArray(parsed)) {
throw new Error('Corrupt OpenAPI binding store in packageStorage()')
}
return parsed as Record<string, OpenApiBinding>
}
export async function loadBindings(): Promise<Record<string, OpenApiBinding>> {
return asBindingMap(await packageStorage().get(storeKey))
}
export async function saveBindings(
bindings: Record<string, OpenApiBinding>,
): Promise<void> {
const names = Object.keys(bindings)
if (names.length > maxOpenApiBindings) {
throw new Error(
`At most ${maxOpenApiBindings} OpenAPI bindings per forked copy. Unbind one before adding another.`,
)
}
await packageStorage().set(storeKey, bindings)
}
export async function requireBinding(name: string): Promise<OpenApiBinding> {
const bindings = await loadBindings()
const binding = bindings[name]
if (!binding) {
throw new Error(
`OpenAPI binding "${name}" was not found. Call bind() on this forked package first.`,
)
}
return binding
}