// Code generated by @openmeter/typespec-typescript. DO NOT EDIT. import { type Client } from '../core.js' import { unwrap, type RequestOptions } from '../lib/types.js' import { paginatePages } from '../lib/paginate.js' import { createSubscription, listSubscriptions, getSubscription, cancelSubscription, unscheduleCancelation, changeSubscription, listSubscriptionAddons, getSubscriptionAddon, } from '../funcs/subscriptions.js' import type { CreateSubscriptionRequest, CreateSubscriptionResponse, ListSubscriptionsRequest, ListSubscriptionsResponse, GetSubscriptionRequest, GetSubscriptionResponse, CancelSubscriptionRequest, CancelSubscriptionResponse, UnscheduleCancelationRequest, UnscheduleCancelationResponse, ChangeSubscriptionRequest, ChangeSubscriptionResponse, ListSubscriptionAddonsRequest, ListSubscriptionAddonsResponse, GetSubscriptionAddonRequest, GetSubscriptionAddonResponse, } from '../models/operations/subscriptions.js' import type { Subscription, SubscriptionAddon } from '../models/types.js' export class Subscriptions { constructor(private readonly _client: Client) {} /** * Create subscription * * POST /openmeter/subscriptions */ async create( request: CreateSubscriptionRequest, options?: RequestOptions, ): Promise { return unwrap(await createSubscription(this._client, request, options)) } /** * List subscriptions * * GET /openmeter/subscriptions */ async list( request?: ListSubscriptionsRequest, options?: RequestOptions, ): Promise { return unwrap(await listSubscriptions(this._client, request, options)) } /** * List subscriptions * * Iterates every item across all pages, fetching more as the returned iterable is consumed. * * GET /openmeter/subscriptions */ listAll( request?: ListSubscriptionsRequest, options?: RequestOptions, ): AsyncIterable { return paginatePages( (req, opts) => listSubscriptions(this._client, req, opts), request ?? {}, options, ) } /** * Get subscription * * GET /openmeter/subscriptions/{subscriptionId} */ async get( request: GetSubscriptionRequest, options?: RequestOptions, ): Promise { return unwrap(await getSubscription(this._client, request, options)) } /** * Cancel subscription * * Cancels the subscription. Will result in a scheduling conflict if there are * other subscriptions scheduled to start after the cancelation time. * * POST /openmeter/subscriptions/{subscriptionId}/cancel */ async cancel( request: CancelSubscriptionRequest, options?: RequestOptions, ): Promise { return unwrap(await cancelSubscription(this._client, request, options)) } /** * Unschedule subscription cancelation * * Unschedules the subscription cancelation. * * POST /openmeter/subscriptions/{subscriptionId}/unschedule-cancelation */ async unscheduleCancelation( request: UnscheduleCancelationRequest, options?: RequestOptions, ): Promise { return unwrap(await unscheduleCancelation(this._client, request, options)) } /** * Change subscription * * Closes a running subscription and starts a new one according to the * specification. Can be used for upgrades, downgrades, and plan changes. * * POST /openmeter/subscriptions/{subscriptionId}/change */ async change( request: ChangeSubscriptionRequest, options?: RequestOptions, ): Promise { return unwrap(await changeSubscription(this._client, request, options)) } /** * List subscription addons * * List the add-ons of a subscription. * * GET /openmeter/subscriptions/{subscriptionId}/addons */ async listAddons( request: ListSubscriptionAddonsRequest, options?: RequestOptions, ): Promise { return unwrap(await listSubscriptionAddons(this._client, request, options)) } /** * List subscription addons * * List the add-ons of a subscription. * * Iterates every item across all pages, fetching more as the returned iterable is consumed. * * GET /openmeter/subscriptions/{subscriptionId}/addons */ listAddonsAll( request: ListSubscriptionAddonsRequest, options?: RequestOptions, ): AsyncIterable { return paginatePages( (req, opts) => listSubscriptionAddons(this._client, req, opts), request, options, ) } /** * Get add-on association for subscription * * Get an add-on association for a subscription. * * GET /openmeter/subscriptions/{subscriptionId}/addons/{subscriptionAddonId} */ async getAddon( request: GetSubscriptionAddonRequest, options?: RequestOptions, ): Promise { return unwrap(await getSubscriptionAddon(this._client, request, options)) } }