// Code generated by @openmeter/typespec-typescript. DO NOT EDIT. import { type Client, http } from '../core.js' import { type Result, type RequestOptions } from '../lib/types.js' import { request } from '../lib/request.js' import { toURLSearchParams } from '../lib/encodings.js' import { toWire, toPathWire, fromWire, assertValid } from '../lib/wire.js' import * as schemas from '../models/schemas.js' import type { ListBillingProfilesRequest, ListBillingProfilesResponse, CreateBillingProfileRequest, CreateBillingProfileResponse, GetBillingProfileRequest, GetBillingProfileResponse, UpdateBillingProfileRequest, UpdateBillingProfileResponse, DeleteBillingProfileRequest, DeleteBillingProfileResponse, } from '../models/operations/billing.js' /** * List billing profiles * * List billing profiles. * * GET /openmeter/profiles */ export function listBillingProfiles( client: Client, req: ListBillingProfilesRequest = {}, options?: RequestOptions, ): Promise> { return request(() => { const query = toWire( { page: req.page, }, schemas.listBillingProfilesQueryParams, ) if (client._options.validate) { assertValid(schemas.listBillingProfilesQueryParamsWire, query) } const searchParams = toURLSearchParams(query) return http(client) .get('openmeter/profiles', { ...options, searchParams }) .json() .then((data) => { if (client._options.validate) { assertValid(schemas.listBillingProfilesResponseWire, data) } return fromWire(data, schemas.listBillingProfilesResponse) }) }) } /** * Create a new billing profile * * Create a new billing profile. * * Billing profiles contain the settings for billing and controls invoice * generation. An organization can have multiple billing profiles defined. A * billing profile is linked to a specific app. This association is established * during the billing profile's creation and remains immutable. * * POST /openmeter/profiles */ export function createBillingProfile( client: Client, req: CreateBillingProfileRequest, options?: RequestOptions, ): Promise> { return request(() => { const body = toWire(req, schemas.createBillingProfileBody) if (client._options.validate) { assertValid(schemas.createBillingProfileBodyWire, body) } return http(client) .post('openmeter/profiles', { ...options, json: body }) .json() .then((data) => { if (client._options.validate) { assertValid(schemas.createBillingProfileResponseWire, data) } return fromWire(data, schemas.createBillingProfileResponse) }) }) } /** * Get a billing profile * * Get a billing profile. * * GET /openmeter/profiles/{id} */ export function getBillingProfile( client: Client, req: GetBillingProfileRequest, options?: RequestOptions, ): Promise> { return request(() => { const pathParamsInput = { id: req.id, } const pathParams = client._options.validate ? toPathWire(pathParamsInput, schemas.getBillingProfilePathParams) : pathParamsInput if (client._options.validate) { assertValid(schemas.getBillingProfilePathParamsWire, pathParams) } const path = `openmeter/profiles/${(() => { if (pathParams.id === undefined) { throw new Error('missing path parameter: id') } return encodeURIComponent(String(pathParams.id)) })()}` return http(client) .get(path, options) .json() .then((data) => { if (client._options.validate) { assertValid(schemas.getBillingProfileResponseWire, data) } return fromWire(data, schemas.getBillingProfileResponse) }) }) } /** * Update a billing profile * * Update a billing profile. * * PUT /openmeter/profiles/{id} */ export function updateBillingProfile( client: Client, req: UpdateBillingProfileRequest, options?: RequestOptions, ): Promise> { return request(() => { const pathParamsInput = { id: req.id, } const pathParams = client._options.validate ? toPathWire(pathParamsInput, schemas.updateBillingProfilePathParams) : pathParamsInput if (client._options.validate) { assertValid(schemas.updateBillingProfilePathParamsWire, pathParams) } const path = `openmeter/profiles/${(() => { if (pathParams.id === undefined) { throw new Error('missing path parameter: id') } return encodeURIComponent(String(pathParams.id)) })()}` const body = toWire(req.body, schemas.updateBillingProfileBody) if (client._options.validate) { assertValid(schemas.updateBillingProfileBodyWire, body) } return http(client) .put(path, { ...options, json: body }) .json() .then((data) => { if (client._options.validate) { assertValid(schemas.updateBillingProfileResponseWire, data) } return fromWire(data, schemas.updateBillingProfileResponse) }) }) } /** * Delete a billing profile * * Delete a billing profile. * * Only such billing profiles can be deleted that are: * * - not the default profile * - not pinned to any customer using customer overrides * - only have finalized invoices * * DELETE /openmeter/profiles/{id} */ export function deleteBillingProfile( client: Client, req: DeleteBillingProfileRequest, options?: RequestOptions, ): Promise> { return request(async () => { const pathParamsInput = { id: req.id, } const pathParams = client._options.validate ? toPathWire(pathParamsInput, schemas.deleteBillingProfilePathParams) : pathParamsInput if (client._options.validate) { assertValid(schemas.deleteBillingProfilePathParamsWire, pathParams) } const path = `openmeter/profiles/${(() => { if (pathParams.id === undefined) { throw new Error('missing path parameter: id') } return encodeURIComponent(String(pathParams.id)) })()}` await http(client).delete(path, options) }) }