File size: 3,144 Bytes
1477a90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// 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 {
  listFeatures,
  createFeature,
  getFeature,
  updateFeature,
  deleteFeature,
  queryFeatureCost,
} from '../funcs/features.js'
import type {
  ListFeaturesRequest,
  ListFeaturesResponse,
  CreateFeatureRequest,
  CreateFeatureResponse,
  GetFeatureRequest,
  GetFeatureResponse,
  UpdateFeatureRequest,
  UpdateFeatureResponse,
  DeleteFeatureRequest,
  DeleteFeatureResponse,
  QueryFeatureCostRequest,
  QueryFeatureCostResponse,
} from '../models/operations/features.js'
import type { Feature } from '../models/types.js'

export class Features {
  constructor(private readonly _client: Client) {}

  /**
   * List features
   *
   * List all features.
   *
   * GET /openmeter/features
   */
  async list(
    request?: ListFeaturesRequest,
    options?: RequestOptions,
  ): Promise<ListFeaturesResponse> {
    return unwrap(await listFeatures(this._client, request, options))
  }

  /**
   * List features
   *
   * List all features.
   *
   * Iterates every item across all pages, fetching more as the returned iterable is consumed.
   *
   * GET /openmeter/features
   */
  listAll(
    request?: ListFeaturesRequest,
    options?: RequestOptions,
  ): AsyncIterable<Feature> {
    return paginatePages(
      (req, opts) => listFeatures(this._client, req, opts),
      request ?? {},
      options,
    )
  }

  /**
   * Create feature
   *
   * Create a feature.
   *
   * POST /openmeter/features
   */
  async create(
    request: CreateFeatureRequest,
    options?: RequestOptions,
  ): Promise<CreateFeatureResponse> {
    return unwrap(await createFeature(this._client, request, options))
  }

  /**
   * Get feature
   *
   * Get a feature by id.
   *
   * GET /openmeter/features/{featureId}
   */
  async get(
    request: GetFeatureRequest,
    options?: RequestOptions,
  ): Promise<GetFeatureResponse> {
    return unwrap(await getFeature(this._client, request, options))
  }

  /**
   * Update feature
   *
   * Update a feature by id. Currently only the unit_cost field can be updated.
   *
   * PATCH /openmeter/features/{featureId}
   */
  async update(
    request: UpdateFeatureRequest,
    options?: RequestOptions,
  ): Promise<UpdateFeatureResponse> {
    return unwrap(await updateFeature(this._client, request, options))
  }

  /**
   * Delete feature
   *
   * Delete a feature by id.
   *
   * DELETE /openmeter/features/{featureId}
   */
  async delete(
    request: DeleteFeatureRequest,
    options?: RequestOptions,
  ): Promise<DeleteFeatureResponse> {
    return unwrap(await deleteFeature(this._client, request, options))
  }

  /**
   * Query feature cost
   *
   * Query the cost of a feature.
   *
   * POST /openmeter/features/{featureId}/cost/query
   */
  async queryCost(
    request: QueryFeatureCostRequest,
    options?: RequestOptions,
  ): Promise<QueryFeatureCostResponse> {
    return unwrap(await queryFeatureCost(this._client, request, options))
  }
}