// 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 { createMeter, getMeter, listMeters, updateMeter, deleteMeter, queryMeter, queryMeterCsv, } from '../funcs/meters.js' import type { CreateMeterRequest, CreateMeterResponse, GetMeterRequest, GetMeterResponse, ListMetersRequest, ListMetersResponse, UpdateMeterRequest, UpdateMeterResponse, DeleteMeterRequest, DeleteMeterResponse, QueryMeterRequest, QueryMeterResponse, QueryMeterCsvRequest, QueryMeterCsvResponse, } from '../models/operations/meters.js' import type { Meter } from '../models/types.js' export class Meters { constructor(private readonly _client: Client) {} /** * Create meter * * Create a meter. * * POST /openmeter/meters */ async create( request: CreateMeterRequest, options?: RequestOptions, ): Promise { return unwrap(await createMeter(this._client, request, options)) } /** * Get meter * * Get a meter by ID. * * GET /openmeter/meters/{meterId} */ async get( request: GetMeterRequest, options?: RequestOptions, ): Promise { return unwrap(await getMeter(this._client, request, options)) } /** * List meters * * List meters. * * GET /openmeter/meters */ async list( request?: ListMetersRequest, options?: RequestOptions, ): Promise { return unwrap(await listMeters(this._client, request, options)) } /** * List meters * * List meters. * * Iterates every item across all pages, fetching more as the returned iterable is consumed. * * GET /openmeter/meters */ listAll( request?: ListMetersRequest, options?: RequestOptions, ): AsyncIterable { return paginatePages( (req, opts) => listMeters(this._client, req, opts), request ?? {}, options, ) } /** * Update meter * * Update a meter. * * PUT /openmeter/meters/{meterId} */ async update( request: UpdateMeterRequest, options?: RequestOptions, ): Promise { return unwrap(await updateMeter(this._client, request, options)) } /** * Delete meter * * Delete a meter. * * DELETE /openmeter/meters/{meterId} */ async delete( request: DeleteMeterRequest, options?: RequestOptions, ): Promise { return unwrap(await deleteMeter(this._client, request, options)) } /** * Query meter * * Query a meter for usage. * * Set `Accept: application/json` (the default) to get a structured JSON response. * Set `Accept: text/csv` to download the same data as a CSV file suitable for * spreadsheets. The CSV columns, in order, are: * * `from, to, [subject,] [customer_id, customer_key, customer_name,] , value` * * The `subject` column is emitted only when `subject` is in the query's * `group_by_dimensions`. The three `customer_*` columns are emitted together only * when `customer_id` is in the query's `group_by_dimensions`. * * POST /openmeter/meters/{meterId}/query */ async query( request: QueryMeterRequest, options?: RequestOptions, ): Promise { return unwrap(await queryMeter(this._client, request, options)) } /** POST /openmeter/meters/{meterId}/query */ async queryCsv( request: QueryMeterCsvRequest, options?: RequestOptions, ): Promise { return unwrap(await queryMeterCsv(this._client, request, options)) } }