@openmeter/sdk 1.0.0-beta.21 → 1.0.0-beta.211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +38 -150
  2. package/dist/cjs/index.cjs +18 -0
  3. package/dist/cjs/index.d.cts +1 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/src/client/apps.cjs +174 -0
  6. package/dist/cjs/src/client/apps.d.cts +286 -0
  7. package/dist/cjs/src/client/apps.js.map +1 -0
  8. package/dist/cjs/src/client/billing.cjs +309 -0
  9. package/dist/cjs/src/client/billing.d.cts +502 -0
  10. package/dist/cjs/src/client/billing.js.map +1 -0
  11. package/dist/cjs/src/client/common.cjs +47 -0
  12. package/dist/cjs/src/client/common.d.cts +30 -0
  13. package/dist/cjs/src/client/common.js.map +1 -0
  14. package/dist/cjs/src/client/customers.cjs +199 -0
  15. package/dist/cjs/src/client/customers.d.cts +179 -0
  16. package/dist/cjs/src/client/customers.js.map +1 -0
  17. package/dist/cjs/src/client/entitlements.cjs +244 -0
  18. package/dist/cjs/src/client/entitlements.d.cts +472 -0
  19. package/dist/cjs/src/client/entitlements.js.map +1 -0
  20. package/dist/cjs/src/client/events.cjs +66 -0
  21. package/dist/cjs/src/client/events.d.cts +31 -0
  22. package/dist/cjs/src/client/events.js.map +1 -0
  23. package/dist/cjs/src/client/features.cjs +78 -0
  24. package/dist/cjs/src/client/features.d.cts +78 -0
  25. package/dist/cjs/src/client/features.js.map +1 -0
  26. package/dist/cjs/src/client/index.cjs +108 -0
  27. package/dist/cjs/src/client/index.d.cts +45 -0
  28. package/dist/cjs/src/client/index.js.map +1 -0
  29. package/dist/cjs/src/client/meters.cjs +96 -0
  30. package/dist/cjs/src/client/meters.d.cts +99 -0
  31. package/dist/cjs/src/client/meters.js.map +1 -0
  32. package/dist/cjs/src/client/notifications.cjs +249 -0
  33. package/dist/cjs/src/client/notifications.d.cts +219 -0
  34. package/dist/cjs/src/client/notifications.js.map +1 -0
  35. package/dist/cjs/src/client/plans.cjs +127 -0
  36. package/dist/cjs/src/client/plans.d.cts +142 -0
  37. package/dist/cjs/src/client/plans.js.map +1 -0
  38. package/dist/cjs/src/client/portal.cjs +55 -0
  39. package/dist/cjs/src/client/portal.d.cts +48 -0
  40. package/dist/cjs/src/client/portal.js.map +1 -0
  41. package/dist/cjs/src/client/schemas.cjs +3 -0
  42. package/dist/cjs/src/client/schemas.d.cts +22438 -0
  43. package/dist/cjs/src/client/schemas.js.map +1 -0
  44. package/dist/cjs/src/client/subjects.cjs +76 -0
  45. package/dist/cjs/src/client/subjects.d.cts +70 -0
  46. package/dist/cjs/src/client/subjects.js.map +1 -0
  47. package/dist/cjs/src/client/subscriptions.cjs +116 -0
  48. package/dist/cjs/src/client/subscriptions.d.cts +147 -0
  49. package/dist/cjs/src/client/subscriptions.js.map +1 -0
  50. package/dist/cjs/src/client/utils.cjs +69 -0
  51. package/dist/cjs/src/client/utils.d.cts +12 -0
  52. package/dist/cjs/src/client/utils.js.map +1 -0
  53. package/dist/cjs/src/portal/index.cjs +60 -0
  54. package/dist/cjs/src/portal/index.d.cts +43 -0
  55. package/dist/cjs/src/portal/index.js.map +1 -0
  56. package/dist/cjs/src/react/context.cjs +35 -0
  57. package/dist/cjs/src/react/context.d.cts +9 -0
  58. package/dist/cjs/src/react/context.js.map +1 -0
  59. package/dist/cjs/tsconfig.341d9ef4.tsbuildinfo +1 -0
  60. package/dist/cjs/tsconfig.523d9ac8.tsbuildinfo +1 -0
  61. package/dist/index.d.ts +1 -14
  62. package/dist/index.js +2 -15
  63. package/dist/index.js.map +1 -0
  64. package/dist/src/client/apps.d.ts +286 -0
  65. package/dist/src/client/apps.js +168 -0
  66. package/dist/src/client/apps.js.map +1 -0
  67. package/dist/src/client/billing.d.ts +502 -0
  68. package/dist/src/client/billing.js +302 -0
  69. package/dist/src/client/billing.js.map +1 -0
  70. package/dist/src/client/common.d.ts +30 -0
  71. package/dist/src/client/common.js +42 -0
  72. package/dist/src/client/common.js.map +1 -0
  73. package/dist/src/client/customers.d.ts +179 -0
  74. package/dist/src/client/customers.js +193 -0
  75. package/dist/src/client/customers.js.map +1 -0
  76. package/dist/src/client/entitlements.d.ts +472 -0
  77. package/dist/src/client/entitlements.js +239 -0
  78. package/dist/src/client/entitlements.js.map +1 -0
  79. package/dist/src/client/events.d.ts +31 -0
  80. package/dist/src/client/events.js +58 -0
  81. package/dist/src/client/events.js.map +1 -0
  82. package/dist/src/client/features.d.ts +78 -0
  83. package/dist/src/client/features.js +74 -0
  84. package/dist/src/client/features.js.map +1 -0
  85. package/dist/src/client/index.d.ts +45 -0
  86. package/dist/src/client/index.js +68 -0
  87. package/dist/src/client/index.js.map +1 -0
  88. package/dist/src/client/meters.d.ts +99 -0
  89. package/dist/src/client/meters.js +92 -0
  90. package/dist/src/client/meters.js.map +1 -0
  91. package/dist/src/client/notifications.d.ts +219 -0
  92. package/dist/src/client/notifications.js +242 -0
  93. package/dist/src/client/notifications.js.map +1 -0
  94. package/dist/src/client/plans.d.ts +142 -0
  95. package/dist/src/client/plans.js +123 -0
  96. package/dist/src/client/plans.js.map +1 -0
  97. package/dist/src/client/portal.d.ts +48 -0
  98. package/dist/src/client/portal.js +51 -0
  99. package/dist/src/client/portal.js.map +1 -0
  100. package/dist/src/client/schemas.d.ts +22438 -0
  101. package/dist/src/client/schemas.js +2 -0
  102. package/dist/src/client/schemas.js.map +1 -0
  103. package/dist/src/client/subjects.d.ts +70 -0
  104. package/dist/src/client/subjects.js +72 -0
  105. package/dist/src/client/subjects.js.map +1 -0
  106. package/dist/src/client/subscriptions.d.ts +147 -0
  107. package/dist/src/client/subscriptions.js +112 -0
  108. package/dist/src/client/subscriptions.js.map +1 -0
  109. package/dist/src/client/utils.d.ts +12 -0
  110. package/dist/src/client/utils.js +63 -0
  111. package/dist/src/client/utils.js.map +1 -0
  112. package/dist/src/portal/index.d.ts +43 -0
  113. package/dist/src/portal/index.js +53 -0
  114. package/dist/src/portal/index.js.map +1 -0
  115. package/dist/src/react/context.d.ts +9 -0
  116. package/dist/src/react/context.js +16 -0
  117. package/dist/src/react/context.js.map +1 -0
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +75 -35
  120. package/patches/openapi-typescript.patch +73 -0
  121. package/dist/clients/client.d.ts +0 -40
  122. package/dist/clients/client.js +0 -104
  123. package/dist/clients/event.d.ts +0 -79
  124. package/dist/clients/event.js +0 -53
  125. package/dist/clients/meter.d.ts +0 -96
  126. package/dist/clients/meter.js +0 -64
  127. package/dist/clients/portal.d.ts +0 -23
  128. package/dist/clients/portal.js +0 -37
  129. package/dist/next.d.ts +0 -15
  130. package/dist/next.js +0 -46
  131. package/dist/schemas/openapi.d.ts +0 -460
  132. package/dist/schemas/openapi.js +0 -5
  133. package/dist/test/agent.d.ts +0 -2
  134. package/dist/test/agent.js +0 -178
  135. package/dist/test/mocks.d.ts +0 -12
  136. package/dist/test/mocks.js +0 -32
  137. package/index.ts +0 -22
  138. package/next.ts +0 -76
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # OpenMeter Node SDK
1
+ # OpenMeter JavaScript SDK
2
2
 
3
3
  ## Install
4
4
 
@@ -6,174 +6,62 @@
6
6
  npm install --save @openmeter/sdk
7
7
  ```
8
8
 
9
- ## Example
9
+ ## Configuration for accessing the OpenMeter API
10
10
 
11
- ```ts
12
- import { OpenMeter, type Event } from '@openmeter/sdk'
13
-
14
- const openmeter = new OpenMeter({ baseUrl: 'http://localhost:8888' })
15
-
16
- // Ingesting an event
17
- const event: Event = {
18
- specversion: '1.0',
19
- id: 'id-1',
20
- source: 'my-app',
21
- type: 'my-type',
22
- subject: 'my-awesome-user-id',
23
- time: new Date(),
24
- data: {
25
- api_calls: 1,
26
- },
27
- }
28
- await openmeter.events.ingest(event)
29
-
30
- // Fetching a meter
31
- const meter = await openmeter.meters.get('m1')
32
- ```
33
-
34
- ## API
35
-
36
- ### Events
37
-
38
- #### ingest
39
-
40
- ```ts
41
- import { type Event } from '@openmeter/sdk'
42
-
43
- const event: Event = {
44
- specversion: '1.0',
45
- id: 'id-1',
46
- source: 'my-app',
47
- type: 'my-type',
48
- subject: 'my-awesome-user-id',
49
- time: new Date(),
50
- data: {
51
- api_calls: 1,
52
- },
53
- }
54
- await openmeter.events.ingest(event)
55
- ```
56
-
57
- #### list
58
-
59
- Retrieve latest raw events. Useful for debugging.
60
-
61
- ```ts
62
- const events = await openmeter.events.list()
63
- ```
64
-
65
- ### Meters
66
-
67
- #### list
68
-
69
- List meters.
70
-
71
- ```ts
72
- const meters = await openmeter.meters.list()
73
- ```
74
-
75
- #### get
76
-
77
- Get one meter by slug.
11
+ To use the OpenMeter SDK on your backend, you need to configure `baseUrl` and `apiKey` for OpenMeter Cloud:
78
12
 
79
13
  ```ts
80
- const meter = await openmeter.meters.get('m1')
81
- ```
82
-
83
- #### query
84
-
85
- Query meter values.
14
+ import { OpenMeter } from '@openmeter/sdk'
86
15
 
87
- ```ts
88
- import { WindowSize } from '@openmeter/sdk'
89
-
90
- const values = await openmeter.meters.query('my-meter-slug', {
91
- subject: ['user-1'],
92
- groupBy: ['method', 'path'],
93
- from: new Date('2021-01-01'),
94
- to: new Date('2021-01-02'),
95
- windowSize: WindowSize.HOUR,
16
+ const openmeter = new OpenMeter({
17
+ baseUrl: 'https://openmeter.cloud',
18
+ apiKey: 'om_...',
96
19
  })
97
20
  ```
98
21
 
99
- #### subjects
22
+ ## Configuration for accessing the OpenMeter Portal API
100
23
 
101
- List meter subjects.
24
+ To use the OpenMeter Portal SDK on your frontend, you need to configure it use a portal token in your configuration:
102
25
 
103
26
  ```ts
104
- const subjects = await openmeter.meters.subjects('my-meter-slug')
105
- ```
106
-
107
- ### Portal
108
-
109
- #### createToken
110
-
111
- Create subject specific tokens.
112
- Useful to build consumer dashboards.
27
+ import { OpenMeter } from '@openmeter/sdk/portal'
113
28
 
114
- ```ts
115
- const token = await openmeter.portal.createToken({ subject: 'customer-1' })
116
- ```
117
-
118
- #### invalidateTokens
119
-
120
- Invalidate portal tokens for all or specific subjects.
121
-
122
- ```ts
123
- await openmeter.portal.invalidateTokens()
29
+ const openmeter = new OpenMeter({
30
+ baseUrl: 'https://openmeter.cloud',
31
+ portalToken: 'om_portal_...',
32
+ })
124
33
  ```
125
34
 
126
- ## Helpers
127
-
128
- ### Vercel AI SDK / Next.js
35
+ ## Configuration for accessing the OpenMeter React SDK
129
36
 
130
- The OpenAI streaming API used by the Vercel AI SDK doesn't return token usage metadata by default.
131
- The OpenMeter `createOpenAIStreamCallback` helper function decorates the callback with a `onUsage`
132
- callback which you can use to report usage to OpenMeter.
37
+ To use the OpenMeter React SDK for the portal API, you need to configure a Portal Client and a React Context:
133
38
 
134
39
  ```ts
135
- import OpenAI from 'openai'
136
- import { OpenAIStream, StreamingTextResponse } from 'ai'
137
- import { createOpenAIStreamCallback } from '@openmeter/sdk'
138
-
139
- export async function POST(req: Request) {
140
- const { messages } = await req.json()
141
- const model = 'gpt-3.5-turbo'
142
-
143
- const response = await openai.chat.completions.create({
144
- model,
145
- messages,
146
- stream: true,
40
+ import {
41
+ OpenMeter,
42
+ OpenMeterProvider,
43
+ useOpenMeter,
44
+ } from '@openmeter/sdk/react'
45
+
46
+ function App() {
47
+ // get portal token from your backend
48
+ const openmeter = new OpenMeter({
49
+ baseUrl: 'https://openmeter.cloud',
50
+ portalToken,
147
51
  })
148
52
 
149
- const streamCallbacks = await createOpenAIStreamCallback(
150
- {
151
- model,
152
- prompts: messages.map(({ content }) => content),
153
- },
154
- {
155
- // onToken() => {...}
156
- // onFinal() => {...}
157
- async onUsage(usage) {
158
- try {
159
- await openmeter.events.ingest({
160
- source: 'my-app',
161
- type: 'my-event-type',
162
- subject: 'my-customer-id',
163
- data: {
164
- // Usage is { total_tokens, prompt_tokens, completion_tokens }
165
- ...usage,
166
- model,
167
- },
168
- })
169
- } catch (err) {
170
- console.error('failed to ingest usage', err)
171
- }
172
- },
173
- }
53
+ return (
54
+ <OpenMeterProvider value={openmeter}>
55
+ <UsageComponent />
56
+ {/* ... */}
57
+ </OpenMeterProvider>
174
58
  )
59
+ }
60
+
61
+ function UsageComponent() {
62
+ // get openmeter client from context
63
+ const openmeter = useOpenMeter()
175
64
 
176
- const stream = OpenAIStream(response, streamCallbacks)
177
- return new StreamingTextResponse(stream)
65
+ // ...
178
66
  }
179
67
  ```
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./src/client/index.cjs"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ export * from './src/client/index.cjs';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAqC"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppStripe = exports.AppMarketplace = exports.Apps = void 0;
4
+ const utils_js_1 = require("./utils.cjs");
5
+ /**
6
+ * Apps
7
+ * Manage integrations for extending OpenMeter's functionality.
8
+ */
9
+ class Apps {
10
+ client;
11
+ marketplace;
12
+ stripe;
13
+ constructor(client) {
14
+ this.client = client;
15
+ this.marketplace = new AppMarketplace(client);
16
+ this.stripe = new AppStripe(client);
17
+ }
18
+ /**
19
+ * List apps
20
+ * @param query - The query parameters
21
+ * @param signal - An optional abort signal
22
+ * @returns The apps
23
+ */
24
+ async list(query, options) {
25
+ const resp = await this.client.GET('/api/v1/apps', {
26
+ params: { query },
27
+ ...options,
28
+ });
29
+ return (0, utils_js_1.transformResponse)(resp);
30
+ }
31
+ /**
32
+ * Get an app
33
+ * @param id - The ID of the app
34
+ * @param signal - An optional abort signal
35
+ * @returns The app
36
+ */
37
+ async get(id, options) {
38
+ const resp = await this.client.GET('/api/v1/apps/{id}', {
39
+ params: { path: { id } },
40
+ ...options,
41
+ });
42
+ return (0, utils_js_1.transformResponse)(resp);
43
+ }
44
+ /**
45
+ * Update an app
46
+ * @param id - The ID of the app
47
+ * @param body - The body of the request
48
+ * @param signal - An optional abort signal
49
+ * @returns The app
50
+ */
51
+ async update(id, body, options) {
52
+ const resp = await this.client.PUT('/api/v1/apps/{id}', {
53
+ body,
54
+ params: { path: { id } },
55
+ ...options,
56
+ });
57
+ return (0, utils_js_1.transformResponse)(resp);
58
+ }
59
+ /**
60
+ * Uninstall an app
61
+ * @param id - The ID of the app
62
+ * @param signal - An optional abort signal
63
+ * @returns The app
64
+ */
65
+ async uninstall(id, options) {
66
+ const resp = await this.client.DELETE('/api/v1/apps/{id}', {
67
+ params: { path: { id } },
68
+ ...options,
69
+ });
70
+ return (0, utils_js_1.transformResponse)(resp);
71
+ }
72
+ }
73
+ exports.Apps = Apps;
74
+ /**
75
+ * App Marketplace
76
+ * Available apps from the OpenMeter Marketplace.
77
+ */
78
+ class AppMarketplace {
79
+ client;
80
+ constructor(client) {
81
+ this.client = client;
82
+ }
83
+ /**
84
+ * List available apps
85
+ * @param query - The query parameters
86
+ * @param signal - An optional abort signal
87
+ * @returns The apps
88
+ */
89
+ async list(query, options) {
90
+ const resp = await this.client.GET('/api/v1/marketplace/listings', {
91
+ params: { query },
92
+ ...options,
93
+ });
94
+ return (0, utils_js_1.transformResponse)(resp);
95
+ }
96
+ /**
97
+ * Get details for a listing
98
+ * @param type - The type of the listing
99
+ * @param signal - An optional abort signal
100
+ * @returns The listing
101
+ */
102
+ async get(type, options) {
103
+ const resp = await this.client.GET('/api/v1/marketplace/listings/{type}', {
104
+ params: { path: { type } },
105
+ ...options,
106
+ });
107
+ return (0, utils_js_1.transformResponse)(resp);
108
+ }
109
+ /**
110
+ * Install an app via OAuth. Returns a URL to start the OAuth 2.0 flow.
111
+ * @param type - The type of the listing
112
+ * @param signal - An optional abort signal
113
+ * @returns The OAuth2 install URL
114
+ */
115
+ async getOauth2InstallUrl(type, options) {
116
+ const resp = await this.client.GET('/api/v1/marketplace/listings/{type}/install/oauth2', {
117
+ params: { path: { type } },
118
+ ...options,
119
+ });
120
+ return (0, utils_js_1.transformResponse)(resp);
121
+ }
122
+ /**
123
+ * Authorize OAuth2 code. Verifies the OAuth code and exchanges it for a token and refresh token
124
+ * @param type - The type of the listing
125
+ * @param signal - An optional abort signal
126
+ * @returns The authorization URL
127
+ */
128
+ async authorizeOauth2(type, options) {
129
+ const resp = await this.client.GET('/api/v1/marketplace/listings/{type}/install/oauth2/authorize', {
130
+ params: { path: { type } },
131
+ ...options,
132
+ });
133
+ return (0, utils_js_1.transformResponse)(resp);
134
+ }
135
+ /**
136
+ * Install an app via API key.
137
+ * @param type - The type of the listing
138
+ * @param signal - An optional abort signal
139
+ * @returns The installation
140
+ */
141
+ async installWithAPIKey(type, body, options) {
142
+ const resp = await this.client.POST('/api/v1/marketplace/listings/{type}/install/apikey', {
143
+ body,
144
+ params: { path: { type } },
145
+ ...options,
146
+ });
147
+ return (0, utils_js_1.transformResponse)(resp);
148
+ }
149
+ }
150
+ exports.AppMarketplace = AppMarketplace;
151
+ /**
152
+ * Stripe App
153
+ */
154
+ class AppStripe {
155
+ client;
156
+ constructor(client) {
157
+ this.client = client;
158
+ }
159
+ /**
160
+ * Create a checkout session
161
+ * @param body - The body of the request
162
+ * @param signal - An optional abort signal
163
+ * @returns The checkout session
164
+ */
165
+ async createCheckoutSession(body, options) {
166
+ const resp = await this.client.POST('/api/v1/stripe/checkout/sessions', {
167
+ body,
168
+ ...options,
169
+ });
170
+ return (0, utils_js_1.transformResponse)(resp);
171
+ }
172
+ }
173
+ exports.AppStripe = AppStripe;
174
+ //# sourceMappingURL=apps.js.map