openai 6.33.0 → 6.35.0

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 (222) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +96 -0
  3. package/auth/index.d.mts +4 -0
  4. package/auth/index.d.mts.map +1 -0
  5. package/auth/index.d.ts +4 -0
  6. package/auth/index.d.ts.map +1 -0
  7. package/auth/index.js +11 -0
  8. package/auth/index.js.map +1 -0
  9. package/auth/index.mjs +3 -0
  10. package/auth/index.mjs.map +1 -0
  11. package/auth/subject-token-providers.d.mts +20 -0
  12. package/auth/subject-token-providers.d.mts.map +1 -0
  13. package/auth/subject-token-providers.d.ts +20 -0
  14. package/auth/subject-token-providers.d.ts.map +1 -0
  15. package/auth/subject-token-providers.js +127 -0
  16. package/auth/subject-token-providers.js.map +1 -0
  17. package/auth/subject-token-providers.mjs +121 -0
  18. package/auth/subject-token-providers.mjs.map +1 -0
  19. package/auth/types.d.mts +23 -0
  20. package/auth/types.d.mts.map +1 -0
  21. package/auth/types.d.ts +23 -0
  22. package/auth/types.d.ts.map +1 -0
  23. package/auth/types.js +3 -0
  24. package/auth/types.js.map +1 -0
  25. package/auth/types.mjs +2 -0
  26. package/auth/types.mjs.map +1 -0
  27. package/auth/workload-identity-auth.d.mts +16 -0
  28. package/auth/workload-identity-auth.d.mts.map +1 -0
  29. package/auth/workload-identity-auth.d.ts +16 -0
  30. package/auth/workload-identity-auth.d.ts.map +1 -0
  31. package/auth/workload-identity-auth.js +92 -0
  32. package/auth/workload-identity-auth.js.map +1 -0
  33. package/auth/workload-identity-auth.mjs +87 -0
  34. package/auth/workload-identity-auth.mjs.map +1 -0
  35. package/azure.d.mts +2 -1
  36. package/azure.d.mts.map +1 -1
  37. package/azure.d.ts +2 -1
  38. package/azure.d.ts.map +1 -1
  39. package/azure.js.map +1 -1
  40. package/azure.mjs.map +1 -1
  41. package/client.d.mts +11 -1
  42. package/client.d.mts.map +1 -1
  43. package/client.d.ts +11 -1
  44. package/client.d.ts.map +1 -1
  45. package/client.js +73 -10
  46. package/client.js.map +1 -1
  47. package/client.mjs +73 -10
  48. package/client.mjs.map +1 -1
  49. package/core/EventEmitter.d.mts +11 -0
  50. package/core/EventEmitter.d.mts.map +1 -1
  51. package/core/EventEmitter.d.ts +11 -0
  52. package/core/EventEmitter.d.ts.map +1 -1
  53. package/core/EventEmitter.js +15 -1
  54. package/core/EventEmitter.js.map +1 -1
  55. package/core/EventEmitter.mjs +13 -0
  56. package/core/EventEmitter.mjs.map +1 -1
  57. package/core/error.d.mts +15 -0
  58. package/core/error.d.mts.map +1 -1
  59. package/core/error.d.ts +15 -0
  60. package/core/error.d.ts.map +1 -1
  61. package/core/error.js +34 -1
  62. package/core/error.js.map +1 -1
  63. package/core/error.mjs +31 -0
  64. package/core/error.mjs.map +1 -1
  65. package/index.d.mts +1 -1
  66. package/index.d.mts.map +1 -1
  67. package/index.d.ts +1 -1
  68. package/index.d.ts.map +1 -1
  69. package/index.js +3 -1
  70. package/index.js.map +1 -1
  71. package/index.mjs +1 -1
  72. package/index.mjs.map +1 -1
  73. package/internal/types.d.mts +6 -6
  74. package/internal/types.d.mts.map +1 -1
  75. package/internal/types.d.ts +6 -6
  76. package/internal/types.d.ts.map +1 -1
  77. package/internal/utils/env.js +2 -2
  78. package/internal/utils/env.js.map +1 -1
  79. package/internal/utils/env.mjs +2 -2
  80. package/internal/utils/env.mjs.map +1 -1
  81. package/internal/ws-adapter-browser.d.mts +34 -0
  82. package/internal/ws-adapter-browser.d.mts.map +1 -0
  83. package/internal/ws-adapter-browser.d.ts +34 -0
  84. package/internal/ws-adapter-browser.d.ts.map +1 -0
  85. package/internal/ws-adapter-browser.js +88 -0
  86. package/internal/ws-adapter-browser.js.map +1 -0
  87. package/internal/ws-adapter-browser.mjs +84 -0
  88. package/internal/ws-adapter-browser.mjs.map +1 -0
  89. package/internal/ws-adapter-node.d.mts +27 -0
  90. package/internal/ws-adapter-node.d.mts.map +1 -0
  91. package/internal/ws-adapter-node.d.ts +27 -0
  92. package/internal/ws-adapter-node.d.ts.map +1 -0
  93. package/internal/ws-adapter-node.js +90 -0
  94. package/internal/ws-adapter-node.js.map +1 -0
  95. package/internal/ws-adapter-node.mjs +86 -0
  96. package/internal/ws-adapter-node.mjs.map +1 -0
  97. package/internal/ws-adapter.d.mts +24 -0
  98. package/internal/ws-adapter.d.mts.map +1 -0
  99. package/internal/ws-adapter.d.ts +24 -0
  100. package/internal/ws-adapter.d.ts.map +1 -0
  101. package/internal/ws-adapter.js +11 -0
  102. package/internal/ws-adapter.js.map +1 -0
  103. package/internal/ws-adapter.mjs +8 -0
  104. package/internal/ws-adapter.mjs.map +1 -0
  105. package/internal/ws.d.mts +80 -0
  106. package/internal/ws.d.mts.map +1 -0
  107. package/internal/ws.d.ts +80 -0
  108. package/internal/ws.d.ts.map +1 -0
  109. package/internal/ws.js +153 -0
  110. package/internal/ws.js.map +1 -0
  111. package/internal/ws.mjs +147 -0
  112. package/internal/ws.mjs.map +1 -0
  113. package/package.json +23 -13
  114. package/resources/audio/speech.d.mts +2 -2
  115. package/resources/audio/speech.d.ts +2 -2
  116. package/resources/audio/speech.js +2 -2
  117. package/resources/audio/speech.mjs +2 -2
  118. package/resources/chat/completions/completions.d.mts +1 -1
  119. package/resources/chat/completions/completions.d.ts +1 -1
  120. package/resources/completions.d.mts +1 -1
  121. package/resources/completions.d.ts +1 -1
  122. package/resources/conversations/conversations.d.mts +7 -0
  123. package/resources/conversations/conversations.d.mts.map +1 -1
  124. package/resources/conversations/conversations.d.ts +7 -0
  125. package/resources/conversations/conversations.d.ts.map +1 -1
  126. package/resources/conversations/conversations.js.map +1 -1
  127. package/resources/conversations/conversations.mjs.map +1 -1
  128. package/resources/realtime/calls.d.mts +3 -2
  129. package/resources/realtime/calls.d.mts.map +1 -1
  130. package/resources/realtime/calls.d.ts +3 -2
  131. package/resources/realtime/calls.d.ts.map +1 -1
  132. package/resources/realtime/client-secrets.d.mts +3 -2
  133. package/resources/realtime/client-secrets.d.mts.map +1 -1
  134. package/resources/realtime/client-secrets.d.ts +3 -2
  135. package/resources/realtime/client-secrets.d.ts.map +1 -1
  136. package/resources/realtime/realtime.d.mts +6 -4
  137. package/resources/realtime/realtime.d.mts.map +1 -1
  138. package/resources/realtime/realtime.d.ts +6 -4
  139. package/resources/realtime/realtime.d.ts.map +1 -1
  140. package/resources/realtime/realtime.js.map +1 -1
  141. package/resources/realtime/realtime.mjs.map +1 -1
  142. package/resources/responses/index.d.mts +2 -0
  143. package/resources/responses/index.d.mts.map +1 -1
  144. package/resources/responses/index.d.ts +2 -0
  145. package/resources/responses/index.d.ts.map +1 -1
  146. package/resources/responses/internal-base.d.mts +24 -2
  147. package/resources/responses/internal-base.d.mts.map +1 -1
  148. package/resources/responses/internal-base.d.ts +24 -2
  149. package/resources/responses/internal-base.d.ts.map +1 -1
  150. package/resources/responses/internal-base.js +5 -9
  151. package/resources/responses/internal-base.js.map +1 -1
  152. package/resources/responses/internal-base.mjs +5 -9
  153. package/resources/responses/internal-base.mjs.map +1 -1
  154. package/resources/responses/responses.d.mts +19 -3
  155. package/resources/responses/responses.d.mts.map +1 -1
  156. package/resources/responses/responses.d.ts +19 -3
  157. package/resources/responses/responses.d.ts.map +1 -1
  158. package/resources/responses/responses.js.map +1 -1
  159. package/resources/responses/responses.mjs.map +1 -1
  160. package/resources/responses/ws-base.d.mts +106 -0
  161. package/resources/responses/ws-base.d.mts.map +1 -0
  162. package/resources/responses/ws-base.d.ts +106 -0
  163. package/resources/responses/ws-base.d.ts.map +1 -0
  164. package/resources/responses/ws-base.js +474 -0
  165. package/resources/responses/ws-base.js.map +1 -0
  166. package/resources/responses/ws-base.mjs +470 -0
  167. package/resources/responses/ws-base.mjs.map +1 -0
  168. package/resources/responses/ws.d.mts +9 -38
  169. package/resources/responses/ws.d.mts.map +1 -1
  170. package/resources/responses/ws.d.ts +9 -38
  171. package/resources/responses/ws.d.ts.map +1 -1
  172. package/resources/responses/ws.js +17 -171
  173. package/resources/responses/ws.js.map +1 -1
  174. package/resources/responses/ws.mjs +17 -171
  175. package/resources/responses/ws.mjs.map +1 -1
  176. package/resources/shared.d.mts +1 -0
  177. package/resources/shared.d.mts.map +1 -1
  178. package/resources/shared.d.ts +1 -0
  179. package/resources/shared.d.ts.map +1 -1
  180. package/resources/vector-stores/file-batches.d.mts +9 -5
  181. package/resources/vector-stores/file-batches.d.mts.map +1 -1
  182. package/resources/vector-stores/file-batches.d.ts +9 -5
  183. package/resources/vector-stores/file-batches.d.ts.map +1 -1
  184. package/resources/vector-stores/files.d.mts +3 -1
  185. package/resources/vector-stores/files.d.mts.map +1 -1
  186. package/resources/vector-stores/files.d.ts +3 -1
  187. package/resources/vector-stores/files.d.ts.map +1 -1
  188. package/src/auth/index.ts +9 -0
  189. package/src/auth/subject-token-providers.ts +185 -0
  190. package/src/auth/types.ts +28 -0
  191. package/src/auth/workload-identity-auth.ts +118 -0
  192. package/src/azure.ts +2 -1
  193. package/src/client.ts +112 -9
  194. package/src/core/EventEmitter.ts +16 -0
  195. package/src/core/error.ts +40 -0
  196. package/src/index.ts +2 -0
  197. package/src/internal/types.ts +6 -8
  198. package/src/internal/utils/env.ts +2 -2
  199. package/src/internal/ws-adapter-browser.ts +123 -0
  200. package/src/internal/ws-adapter-node.ts +105 -0
  201. package/src/internal/ws-adapter.ts +30 -0
  202. package/src/internal/ws.ts +193 -0
  203. package/src/resources/audio/speech.ts +2 -2
  204. package/src/resources/chat/completions/completions.ts +1 -1
  205. package/src/resources/completions.ts +1 -1
  206. package/src/resources/conversations/conversations.ts +8 -0
  207. package/src/resources/realtime/calls.ts +3 -2
  208. package/src/resources/realtime/client-secrets.ts +3 -2
  209. package/src/resources/realtime/realtime.ts +6 -4
  210. package/src/resources/responses/index.ts +2 -0
  211. package/src/resources/responses/internal-base.ts +26 -10
  212. package/src/resources/responses/responses.ts +22 -3
  213. package/src/resources/responses/ws-base.ts +609 -0
  214. package/src/resources/responses/ws.ts +23 -186
  215. package/src/resources/shared.ts +2 -0
  216. package/src/resources/vector-stores/file-batches.ts +9 -5
  217. package/src/resources/vector-stores/files.ts +3 -1
  218. package/src/version.ts +1 -1
  219. package/version.d.mts +1 -1
  220. package/version.d.ts +1 -1
  221. package/version.js +1 -1
  222. package/version.mjs +1 -1
@@ -1,201 +1,38 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  import * as WS from 'ws';
4
- import { ResponsesEmitter, ResponsesStreamMessage, WebSocketError, buildURL } from './internal-base';
5
- import * as ResponsesAPI from './responses';
4
+ import { NodeWebSocket } from '../../internal/ws-adapter-node';
5
+ import { ResponsesWSBase, type ResponsesWSBaseOptions } from './ws-base';
6
6
  import { OpenAI } from '../../client';
7
7
 
8
- export class ResponsesWS extends ResponsesEmitter {
9
- url: URL;
10
- socket: WS.WebSocket;
11
- private client: OpenAI;
8
+ export type { ResponsesWSReconnectOptions } from './ws-base';
12
9
 
13
- constructor(client: OpenAI, options?: WS.ClientOptions | null | undefined) {
14
- super();
15
- this.client = client;
16
- this.url = buildURL(client, {});
17
- this.socket = new WS.WebSocket(this.url, {
18
- ...options,
19
- headers: {
20
- ...this.authHeaders(),
21
- ...options?.headers,
22
- },
23
- });
24
-
25
- this.socket.on('message', (wsEvent) => {
26
- const event = (() => {
27
- try {
28
- return JSON.parse(wsEvent.toString()) as ResponsesAPI.ResponsesServerEvent;
29
- } catch (err) {
30
- this._onError(null, 'could not parse websocket event', err);
31
- return null;
32
- }
33
- })();
34
-
35
- if (event) {
36
- this._emit('event', event);
37
-
38
- if (event.type === 'error') {
39
- this._onError(event);
40
- } else {
41
- // @ts-ignore TS isn't smart enough to get the relationship right here
42
- this._emit(event.type, event);
43
- }
44
- }
45
- });
46
-
47
- this.socket.on('error', (err) => {
48
- this._onError(null, err.message, err);
49
- });
50
- }
10
+ export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSBaseOptions {}
51
11
 
52
- send(event: ResponsesAPI.ResponsesClientEvent) {
53
- try {
54
- this.socket.send(JSON.stringify(event));
55
- } catch (err) {
56
- this._onError(null, 'could not send data', err);
57
- }
58
- }
12
+ export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
13
+ private _wsOptions: WS.ClientOptions | null | undefined;
59
14
 
60
- close(props?: { code: number; reason: string }) {
61
- try {
62
- this.socket.close(props?.code ?? 1000, props?.reason ?? 'OK');
63
- } catch (err) {
64
- this._onError(null, 'could not close the connection', err);
15
+ constructor(client: OpenAI, options?: ResponsesWSClientOptions | null | undefined) {
16
+ if (!WS?.WebSocket) {
17
+ throw new Error(
18
+ 'ResponsesWS from "openai/resources/responses/ws" requires the "ws" package but it could not be loaded.',
19
+ );
65
20
  }
66
- }
67
21
 
68
- /**
69
- * Returns an async iterator over WebSocket lifecycle and message events,
70
- * providing an alternative to the event-based `.on()` API.
71
- * The iterator will exit if the socket closes but breaking out of the iterator
72
- * does not close the socket.
73
- *
74
- * @example
75
- * ```ts
76
- * for await (const event of connection.stream()) {
77
- * switch (event.type) {
78
- * case 'message':
79
- * console.log('received:', event.message);
80
- * break;
81
- * case 'error':
82
- * console.error(event.error);
83
- * break;
84
- * case 'close':
85
- * console.log('connection closed');
86
- * break;
87
- * }
88
- * }
89
- * ```
90
- */
91
- stream(): AsyncIterableIterator<ResponsesStreamMessage> {
92
- return this[Symbol.asyncIterator]();
22
+ const { reconnect, maxQueueSize, ...wsOptions } = options ?? {};
23
+ super(client, { reconnect, maxQueueSize });
24
+ this._wsOptions = wsOptions;
25
+ this._connectInitial();
93
26
  }
94
27
 
95
- [Symbol.asyncIterator](): AsyncIterableIterator<ResponsesStreamMessage> {
96
- // Two-queue async iterator: `queue` buffers incoming messages,
97
- // `resolvers` buffers waiting next() calls. A push wakes the
98
- // oldest next(); a next() drains the oldest message.
99
- const queue: ResponsesStreamMessage[] = [];
100
- const resolvers: (() => void)[] = [];
101
- let done = false;
102
-
103
- const push = (msg: ResponsesStreamMessage) => {
104
- queue.push(msg);
105
- resolvers.shift()?.();
106
- };
107
-
108
- const onEvent = (event: ResponsesAPI.ResponsesServerEvent) => {
109
- if (event.type === 'error') return; // handled by onEmitterError
110
- push({ type: 'message', message: event });
111
- };
112
-
113
- // Catches both API-level and socket-level errors via _onError → _emit('error')
114
- const onEmitterError = (err: WebSocketError) => {
115
- push({ type: 'error', error: err });
116
- };
117
-
118
- const onOpen = () => {
119
- push({ type: 'open' });
120
- };
121
-
122
- const flushResolvers = () => {
123
- for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
124
- resolver();
125
- }
126
- };
127
-
128
- const onClose = () => {
129
- push({ type: 'close' });
130
- done = true;
131
- flushResolvers();
132
- cleanup();
133
- };
134
-
135
- const cleanup = () => {
136
- this.off('event', onEvent);
137
- this.off('error', onEmitterError);
138
- this.socket.off('open', onOpen);
139
- this.socket.off('close', onClose);
140
- };
141
-
142
- this.on('event', onEvent);
143
- this.on('error', onEmitterError);
144
- this.socket.on('open', onOpen);
145
- this.socket.on('close', onClose);
146
-
147
- switch (this.socket.readyState) {
148
- case WS.WebSocket.CONNECTING:
149
- push({ type: 'connecting' });
150
- break;
151
- case WS.WebSocket.OPEN:
152
- push({ type: 'open' });
153
- break;
154
- case WS.WebSocket.CLOSING:
155
- push({ type: 'closing' });
156
- break;
157
- case WS.WebSocket.CLOSED:
158
- push({ type: 'close' });
159
- done = true;
160
- cleanup();
161
- break;
162
- }
163
-
164
- const resolve = (res: (value: IteratorResult<ResponsesStreamMessage>) => void) => {
165
- if (queue.length > 0) {
166
- res({ value: queue.shift()!, done: false });
167
- } else if (done) {
168
- res({ value: undefined, done: true });
169
- } else {
170
- return false;
171
- }
172
- return true;
173
- };
174
-
175
- const next = (): Promise<IteratorResult<ResponsesStreamMessage>> =>
176
- new Promise((res) => {
177
- if (resolve(res)) return;
178
- resolvers.push(() => {
179
- resolve(res);
180
- });
181
- });
182
-
183
- return {
184
- next,
185
- return: (): Promise<IteratorReturnResult<undefined>> => {
186
- done = true;
187
- cleanup();
188
- flushResolvers();
189
- return Promise.resolve({ value: undefined, done: true });
190
- },
191
- [Symbol.asyncIterator]() {
192
- return this;
28
+ protected _createSocket(url: URL, authHeaders: Record<string, string>): NodeWebSocket {
29
+ const ws = new WS.WebSocket(url, {
30
+ ...this._wsOptions,
31
+ headers: {
32
+ ...authHeaders,
33
+ ...this._wsOptions?.headers,
193
34
  },
194
- };
195
- }
196
-
197
- private authHeaders(): Record<string, string> {
198
- return { Authorization: `Bearer ${this.client.apiKey}` };
199
- return {};
35
+ });
36
+ return new NodeWebSocket(ws);
200
37
  }
201
38
  }
@@ -248,6 +248,8 @@ export type FunctionParameters = { [key: string]: unknown };
248
248
  */
249
249
  export type Metadata = { [key: string]: string };
250
250
 
251
+ export type OAuthErrorCode = 'invalid_grant' | 'invalid_subject_token' | (string & {});
252
+
251
253
  /**
252
254
  * **gpt-5 and o-series models only**
253
255
  *
@@ -274,8 +274,9 @@ export interface FileBatchCreateParams {
274
274
  * A list of [File](https://platform.openai.com/docs/api-reference/files) IDs that
275
275
  * the vector store should use. Useful for tools like `file_search` that can access
276
276
  * files. If `attributes` or `chunking_strategy` are provided, they will be applied
277
- * to all files in the batch. The maximum batch size is 2000 files. Mutually
278
- * exclusive with `files`.
277
+ * to all files in the batch. The maximum batch size is 2000 files. This endpoint
278
+ * is recommended for multi-file ingestion and helps reduce per-vector-store write
279
+ * request pressure. Mutually exclusive with `files`.
279
280
  */
280
281
  file_ids?: Array<string>;
281
282
 
@@ -283,8 +284,9 @@ export interface FileBatchCreateParams {
283
284
  * A list of objects that each include a `file_id` plus optional `attributes` or
284
285
  * `chunking_strategy`. Use this when you need to override metadata for specific
285
286
  * files. The global `attributes` or `chunking_strategy` will be ignored and must
286
- * be specified for each file. The maximum batch size is 2000 files. Mutually
287
- * exclusive with `file_ids`.
287
+ * be specified for each file. The maximum batch size is 2000 files. This endpoint
288
+ * is recommended for multi-file ingestion and helps reduce per-vector-store write
289
+ * request pressure. Mutually exclusive with `file_ids`.
288
290
  */
289
291
  files?: Array<FileBatchCreateParams.File>;
290
292
  }
@@ -294,7 +296,9 @@ export namespace FileBatchCreateParams {
294
296
  /**
295
297
  * A [File](https://platform.openai.com/docs/api-reference/files) ID that the
296
298
  * vector store should use. Useful for tools like `file_search` that can access
297
- * files.
299
+ * files. For multi-file ingestion, we recommend
300
+ * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)
301
+ * to minimize per-vector-store write requests.
298
302
  */
299
303
  file_id: string;
300
304
 
@@ -299,7 +299,9 @@ export interface FileCreateParams {
299
299
  /**
300
300
  * A [File](https://platform.openai.com/docs/api-reference/files) ID that the
301
301
  * vector store should use. Useful for tools like `file_search` that can access
302
- * files.
302
+ * files. For multi-file ingestion, we recommend
303
+ * [`file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)
304
+ * to minimize per-vector-store write requests.
303
305
  */
304
306
  file_id: string;
305
307
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '6.33.0'; // x-release-please-version
1
+ export const VERSION = '6.35.0'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "6.33.0";
1
+ export declare const VERSION = "6.35.0";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "6.33.0";
1
+ export declare const VERSION = "6.35.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '6.33.0'; // x-release-please-version
4
+ exports.VERSION = '6.35.0'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '6.33.0'; // x-release-please-version
1
+ export const VERSION = '6.35.0'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map