@trigger.dev/core 3.0.0-beta.4 → 3.0.0-beta.40

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 (79) hide show
  1. package/dist/catalog-EP9DGAGm.d.ts +242 -0
  2. package/dist/catalog-Gjy5NtAB.d.mts +242 -0
  3. package/dist/index.d.mts +60 -1
  4. package/dist/index.d.ts +60 -1
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +7 -1
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/manager-S98VaLUy.d.mts +1402 -0
  10. package/dist/manager-S98VaLUy.d.ts +1402 -0
  11. package/dist/messages-xJbR1Vai.d.mts +18953 -0
  12. package/dist/messages-xJbR1Vai.d.ts +18953 -0
  13. package/dist/schemas-Sb0sJcEt.d.mts +2497 -0
  14. package/dist/schemas-Sb0sJcEt.d.ts +2497 -0
  15. package/dist/v3/dev/index.d.mts +28 -0
  16. package/dist/v3/dev/index.d.ts +28 -0
  17. package/dist/v3/dev/index.js +93 -0
  18. package/dist/v3/dev/index.js.map +1 -0
  19. package/dist/v3/dev/index.mjs +91 -0
  20. package/dist/v3/dev/index.mjs.map +1 -0
  21. package/dist/v3/index.d.mts +2140 -17560
  22. package/dist/v3/index.d.ts +2140 -17560
  23. package/dist/v3/index.js +2611 -2886
  24. package/dist/v3/index.js.map +1 -1
  25. package/dist/v3/index.mjs +2563 -2858
  26. package/dist/v3/index.mjs.map +1 -1
  27. package/dist/v3/otel/index.js +106 -50
  28. package/dist/v3/otel/index.js.map +1 -1
  29. package/dist/v3/otel/index.mjs +106 -50
  30. package/dist/v3/otel/index.mjs.map +1 -1
  31. package/dist/v3/prod/index.d.mts +45 -0
  32. package/dist/v3/prod/index.d.ts +45 -0
  33. package/dist/v3/prod/index.js +304 -0
  34. package/dist/v3/prod/index.js.map +1 -0
  35. package/dist/v3/prod/index.mjs +302 -0
  36. package/dist/v3/prod/index.mjs.map +1 -0
  37. package/dist/v3/utils/structuredLogger.d.mts +31 -0
  38. package/dist/v3/utils/structuredLogger.d.ts +31 -0
  39. package/dist/v3/utils/structuredLogger.js +88 -0
  40. package/dist/v3/utils/structuredLogger.js.map +1 -0
  41. package/dist/v3/utils/structuredLogger.mjs +86 -0
  42. package/dist/v3/utils/structuredLogger.mjs.map +1 -0
  43. package/dist/v3/workers/index.d.mts +142 -0
  44. package/dist/v3/workers/index.d.ts +142 -0
  45. package/dist/v3/workers/index.js +3485 -0
  46. package/dist/v3/workers/index.js.map +1 -0
  47. package/dist/v3/workers/index.mjs +3466 -0
  48. package/dist/v3/workers/index.mjs.map +1 -0
  49. package/dist/v3/zodIpc.d.mts +32 -0
  50. package/dist/v3/zodIpc.d.ts +32 -0
  51. package/dist/v3/zodIpc.js +268 -0
  52. package/dist/v3/zodIpc.js.map +1 -0
  53. package/dist/v3/zodIpc.mjs +266 -0
  54. package/dist/v3/zodIpc.mjs.map +1 -0
  55. package/dist/v3/zodMessageHandler.d.mts +69 -0
  56. package/dist/v3/zodMessageHandler.d.ts +69 -0
  57. package/dist/v3/zodMessageHandler.js +168 -0
  58. package/dist/v3/zodMessageHandler.js.map +1 -0
  59. package/dist/v3/zodMessageHandler.mjs +163 -0
  60. package/dist/v3/zodMessageHandler.mjs.map +1 -0
  61. package/dist/v3/zodNamespace.d.mts +3663 -0
  62. package/dist/v3/zodNamespace.d.ts +3663 -0
  63. package/dist/v3/zodNamespace.js +366 -0
  64. package/dist/v3/zodNamespace.js.map +1 -0
  65. package/dist/v3/zodNamespace.mjs +364 -0
  66. package/dist/v3/zodNamespace.mjs.map +1 -0
  67. package/dist/v3/zodSocket.d.mts +88 -0
  68. package/dist/v3/zodSocket.d.ts +88 -0
  69. package/dist/v3/zodSocket.js +319 -0
  70. package/dist/v3/zodSocket.js.map +1 -0
  71. package/dist/v3/zodSocket.mjs +315 -0
  72. package/dist/v3/zodSocket.mjs.map +1 -0
  73. package/dist/v3/zodfetch.d.mts +206 -0
  74. package/dist/v3/zodfetch.d.ts +206 -0
  75. package/dist/v3/zodfetch.js +614 -0
  76. package/dist/v3/zodfetch.js.map +1 -0
  77. package/dist/v3/zodfetch.mjs +594 -0
  78. package/dist/v3/zodfetch.mjs.map +1 -0
  79. package/package.json +79 -5
@@ -0,0 +1,614 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+ var zodValidationError = require('zod-validation-error');
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __publicField = (obj, key, value) => {
10
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
+ return value;
12
+ };
13
+ var __accessCheck = (obj, member, msg) => {
14
+ if (!member.has(obj))
15
+ throw TypeError("Cannot " + msg);
16
+ };
17
+ var __privateAdd = (obj, member, value) => {
18
+ if (member.has(obj))
19
+ throw TypeError("Cannot add the same private member more than once");
20
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
21
+ };
22
+ var __privateMethod = (obj, member, method) => {
23
+ __accessCheck(obj, member, "access private method");
24
+ return method;
25
+ };
26
+
27
+ // src/v3/apiClient/errors.ts
28
+ var _ApiError = class _ApiError extends Error {
29
+ constructor(status, error, message, headers) {
30
+ super(`${_ApiError.makeMessage(status, error, message)}`);
31
+ this.status = status;
32
+ this.headers = headers;
33
+ const data = error;
34
+ this.error = data;
35
+ this.code = data?.["code"];
36
+ this.param = data?.["param"];
37
+ this.type = data?.["type"];
38
+ }
39
+ static makeMessage(status, error, message) {
40
+ const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message;
41
+ if (status && msg) {
42
+ return `${status} ${msg}`;
43
+ }
44
+ if (status) {
45
+ return `${status} status code (no body)`;
46
+ }
47
+ if (msg) {
48
+ return msg;
49
+ }
50
+ return "(no status code or body)";
51
+ }
52
+ static generate(status, errorResponse, message, headers) {
53
+ if (!status) {
54
+ return new ApiConnectionError({
55
+ cause: castToError(errorResponse)
56
+ });
57
+ }
58
+ const error = errorResponse?.["error"];
59
+ if (status === 400) {
60
+ return new BadRequestError(status, error, message, headers);
61
+ }
62
+ if (status === 401) {
63
+ return new AuthenticationError(status, error, message, headers);
64
+ }
65
+ if (status === 403) {
66
+ return new PermissionDeniedError(status, error, message, headers);
67
+ }
68
+ if (status === 404) {
69
+ return new NotFoundError(status, error, message, headers);
70
+ }
71
+ if (status === 409) {
72
+ return new ConflictError(status, error, message, headers);
73
+ }
74
+ if (status === 422) {
75
+ return new UnprocessableEntityError(status, error, message, headers);
76
+ }
77
+ if (status === 429) {
78
+ return new RateLimitError(status, error, message, headers);
79
+ }
80
+ if (status >= 500) {
81
+ return new InternalServerError(status, error, message, headers);
82
+ }
83
+ return new _ApiError(status, error, message, headers);
84
+ }
85
+ };
86
+ __name(_ApiError, "ApiError");
87
+ var ApiError = _ApiError;
88
+ var _ApiConnectionError = class _ApiConnectionError extends ApiError {
89
+ constructor({ message, cause }) {
90
+ super(void 0, void 0, message || "Connection error.", void 0);
91
+ __publicField(this, "status");
92
+ if (cause)
93
+ this.cause = cause;
94
+ }
95
+ };
96
+ __name(_ApiConnectionError, "ApiConnectionError");
97
+ var ApiConnectionError = _ApiConnectionError;
98
+ var _BadRequestError = class _BadRequestError extends ApiError {
99
+ constructor() {
100
+ super(...arguments);
101
+ __publicField(this, "status", 400);
102
+ }
103
+ };
104
+ __name(_BadRequestError, "BadRequestError");
105
+ var BadRequestError = _BadRequestError;
106
+ var _AuthenticationError = class _AuthenticationError extends ApiError {
107
+ constructor() {
108
+ super(...arguments);
109
+ __publicField(this, "status", 401);
110
+ }
111
+ };
112
+ __name(_AuthenticationError, "AuthenticationError");
113
+ var AuthenticationError = _AuthenticationError;
114
+ var _PermissionDeniedError = class _PermissionDeniedError extends ApiError {
115
+ constructor() {
116
+ super(...arguments);
117
+ __publicField(this, "status", 403);
118
+ }
119
+ };
120
+ __name(_PermissionDeniedError, "PermissionDeniedError");
121
+ var PermissionDeniedError = _PermissionDeniedError;
122
+ var _NotFoundError = class _NotFoundError extends ApiError {
123
+ constructor() {
124
+ super(...arguments);
125
+ __publicField(this, "status", 404);
126
+ }
127
+ };
128
+ __name(_NotFoundError, "NotFoundError");
129
+ var NotFoundError = _NotFoundError;
130
+ var _ConflictError = class _ConflictError extends ApiError {
131
+ constructor() {
132
+ super(...arguments);
133
+ __publicField(this, "status", 409);
134
+ }
135
+ };
136
+ __name(_ConflictError, "ConflictError");
137
+ var ConflictError = _ConflictError;
138
+ var _UnprocessableEntityError = class _UnprocessableEntityError extends ApiError {
139
+ constructor() {
140
+ super(...arguments);
141
+ __publicField(this, "status", 422);
142
+ }
143
+ };
144
+ __name(_UnprocessableEntityError, "UnprocessableEntityError");
145
+ var UnprocessableEntityError = _UnprocessableEntityError;
146
+ var _RateLimitError = class _RateLimitError extends ApiError {
147
+ constructor() {
148
+ super(...arguments);
149
+ __publicField(this, "status", 429);
150
+ }
151
+ };
152
+ __name(_RateLimitError, "RateLimitError");
153
+ var RateLimitError = _RateLimitError;
154
+ var _InternalServerError = class _InternalServerError extends ApiError {
155
+ };
156
+ __name(_InternalServerError, "InternalServerError");
157
+ var InternalServerError = _InternalServerError;
158
+ function castToError(err) {
159
+ if (err instanceof Error)
160
+ return err;
161
+ return new Error(err);
162
+ }
163
+ __name(castToError, "castToError");
164
+
165
+ // src/v3/utils/retries.ts
166
+ var defaultRetryOptions = {
167
+ maxAttempts: 3,
168
+ factor: 2,
169
+ minTimeoutInMs: 1e3,
170
+ maxTimeoutInMs: 6e4,
171
+ randomize: true
172
+ };
173
+ function calculateNextRetryDelay(options, attempt) {
174
+ const opts = {
175
+ ...defaultRetryOptions,
176
+ ...options
177
+ };
178
+ if (attempt >= opts.maxAttempts) {
179
+ return;
180
+ }
181
+ const { factor, minTimeoutInMs, maxTimeoutInMs, randomize } = opts;
182
+ const random = randomize ? Math.random() + 1 : 1;
183
+ const timeout = Math.min(maxTimeoutInMs, random * minTimeoutInMs * Math.pow(factor, attempt - 1));
184
+ return Math.round(timeout);
185
+ }
186
+ __name(calculateNextRetryDelay, "calculateNextRetryDelay");
187
+
188
+ // src/v3/apiClient/pagination.ts
189
+ var _CursorPage = class _CursorPage {
190
+ constructor(data, pagination, pageFetcher) {
191
+ this.pageFetcher = pageFetcher;
192
+ this.data = data;
193
+ this.pagination = pagination;
194
+ }
195
+ getPaginatedItems() {
196
+ return this.data ?? [];
197
+ }
198
+ hasNextPage() {
199
+ return !!this.pagination.next;
200
+ }
201
+ hasPreviousPage() {
202
+ return !!this.pagination.previous;
203
+ }
204
+ getNextPage() {
205
+ if (!this.pagination.next) {
206
+ throw new Error("No next page available");
207
+ }
208
+ return this.pageFetcher({
209
+ after: this.pagination.next
210
+ });
211
+ }
212
+ getPreviousPage() {
213
+ if (!this.pagination.previous) {
214
+ throw new Error("No previous page available");
215
+ }
216
+ return this.pageFetcher({
217
+ before: this.pagination.previous
218
+ });
219
+ }
220
+ async *iterPages() {
221
+ let page = this;
222
+ yield page;
223
+ while (page.hasNextPage()) {
224
+ page = await page.getNextPage();
225
+ yield page;
226
+ }
227
+ }
228
+ async *[Symbol.asyncIterator]() {
229
+ for await (const page of this.iterPages()) {
230
+ for (const item of page.getPaginatedItems()) {
231
+ yield item;
232
+ }
233
+ }
234
+ }
235
+ };
236
+ __name(_CursorPage, "CursorPage");
237
+ var CursorPage = _CursorPage;
238
+ var _OffsetLimitPage = class _OffsetLimitPage {
239
+ constructor(data, pagination, pageFetcher) {
240
+ this.pageFetcher = pageFetcher;
241
+ this.data = data;
242
+ this.pagination = pagination;
243
+ }
244
+ getPaginatedItems() {
245
+ return this.data ?? [];
246
+ }
247
+ hasNextPage() {
248
+ return this.pagination.currentPage < this.pagination.totalPages;
249
+ }
250
+ hasPreviousPage() {
251
+ return this.pagination.currentPage > 1;
252
+ }
253
+ getNextPage() {
254
+ if (!this.hasNextPage()) {
255
+ throw new Error("No next page available");
256
+ }
257
+ return this.pageFetcher({
258
+ page: this.pagination.currentPage + 1
259
+ });
260
+ }
261
+ getPreviousPage() {
262
+ if (!this.hasPreviousPage()) {
263
+ throw new Error("No previous page available");
264
+ }
265
+ return this.pageFetcher({
266
+ page: this.pagination.currentPage - 1
267
+ });
268
+ }
269
+ async *iterPages() {
270
+ let page = this;
271
+ yield page;
272
+ while (page.hasNextPage()) {
273
+ page = await page.getNextPage();
274
+ yield page;
275
+ }
276
+ }
277
+ async *[Symbol.asyncIterator]() {
278
+ for await (const page of this.iterPages()) {
279
+ for (const item of page.getPaginatedItems()) {
280
+ yield item;
281
+ }
282
+ }
283
+ }
284
+ };
285
+ __name(_OffsetLimitPage, "OffsetLimitPage");
286
+ var OffsetLimitPage = _OffsetLimitPage;
287
+
288
+ // src/v3/apiClient/core.ts
289
+ var defaultRetryOptions2 = {
290
+ maxAttempts: 3,
291
+ factor: 2,
292
+ minTimeoutInMs: 1e3,
293
+ maxTimeoutInMs: 6e4,
294
+ randomize: false
295
+ };
296
+ function zodfetch(schema, url, requestInit, options) {
297
+ return new ApiPromise(_doZodFetch(schema, url, requestInit, options));
298
+ }
299
+ __name(zodfetch, "zodfetch");
300
+ function zodfetchCursorPage(schema, url, params, requestInit, options) {
301
+ const query = new URLSearchParams(params.query);
302
+ if (params.limit) {
303
+ query.set("page[size]", String(params.limit));
304
+ }
305
+ if (params.after) {
306
+ query.set("page[after]", params.after);
307
+ }
308
+ if (params.before) {
309
+ query.set("page[before]", params.before);
310
+ }
311
+ const cursorPageSchema = zod.z.object({
312
+ data: zod.z.array(schema),
313
+ pagination: zod.z.object({
314
+ next: zod.z.string().optional(),
315
+ previous: zod.z.string().optional()
316
+ })
317
+ });
318
+ const $url = new URL(url);
319
+ $url.search = query.toString();
320
+ const fetchResult = _doZodFetch(cursorPageSchema, $url.href, requestInit, options);
321
+ return new CursorPagePromise(fetchResult, schema, url, params, requestInit, options);
322
+ }
323
+ __name(zodfetchCursorPage, "zodfetchCursorPage");
324
+ function zodfetchOffsetLimitPage(schema, url, params, requestInit, options) {
325
+ const query = new URLSearchParams(params.query);
326
+ if (params.limit) {
327
+ query.set("perPage", String(params.limit));
328
+ }
329
+ if (params.page) {
330
+ query.set("page", String(params.page));
331
+ }
332
+ const offsetLimitPageSchema = zod.z.object({
333
+ data: zod.z.array(schema),
334
+ pagination: zod.z.object({
335
+ currentPage: zod.z.coerce.number(),
336
+ totalPages: zod.z.coerce.number(),
337
+ count: zod.z.coerce.number()
338
+ })
339
+ });
340
+ const $url = new URL(url);
341
+ $url.search = query.toString();
342
+ const fetchResult = _doZodFetch(offsetLimitPageSchema, $url.href, requestInit, options);
343
+ return new OffsetLimitPagePromise(fetchResult, schema, url, params, requestInit, options);
344
+ }
345
+ __name(zodfetchOffsetLimitPage, "zodfetchOffsetLimitPage");
346
+ async function _doZodFetch(schema, url, requestInit, options, attempt = 1) {
347
+ try {
348
+ const $requestInit = await requestInit;
349
+ const response = await fetch(url, requestInitWithCache($requestInit));
350
+ const responseHeaders = createResponseHeaders(response.headers);
351
+ if (!response.ok) {
352
+ const retryResult = shouldRetry(response, attempt, options?.retry);
353
+ if (retryResult.retry) {
354
+ await new Promise((resolve) => setTimeout(resolve, retryResult.delay));
355
+ return await _doZodFetch(schema, url, requestInit, options, attempt + 1);
356
+ } else {
357
+ const errText = await response.text().catch((e) => castToError2(e).message);
358
+ const errJSON = safeJsonParse(errText);
359
+ const errMessage = errJSON ? void 0 : errText;
360
+ throw ApiError.generate(response.status, errJSON, errMessage, responseHeaders);
361
+ }
362
+ }
363
+ const jsonBody = await response.json();
364
+ const parsedResult = schema.safeParse(jsonBody);
365
+ if (parsedResult.success) {
366
+ return {
367
+ data: parsedResult.data,
368
+ response
369
+ };
370
+ }
371
+ throw zodValidationError.fromZodError(parsedResult.error);
372
+ } catch (error) {
373
+ if (error instanceof ApiError) {
374
+ throw error;
375
+ }
376
+ if (options?.retry) {
377
+ const retry = {
378
+ ...defaultRetryOptions2,
379
+ ...options.retry
380
+ };
381
+ const delay = calculateNextRetryDelay(retry, attempt);
382
+ if (delay) {
383
+ await new Promise((resolve) => setTimeout(resolve, delay));
384
+ return await _doZodFetch(schema, url, requestInit, options, attempt + 1);
385
+ }
386
+ }
387
+ throw new ApiConnectionError({
388
+ cause: castToError2(error)
389
+ });
390
+ }
391
+ }
392
+ __name(_doZodFetch, "_doZodFetch");
393
+ function castToError2(err) {
394
+ if (err instanceof Error)
395
+ return err;
396
+ return new Error(err);
397
+ }
398
+ __name(castToError2, "castToError");
399
+ function shouldRetry(response, attempt, retryOptions) {
400
+ function shouldRetryForOptions() {
401
+ const retry = {
402
+ ...defaultRetryOptions2,
403
+ ...retryOptions
404
+ };
405
+ const delay = calculateNextRetryDelay(retry, attempt);
406
+ if (delay) {
407
+ return {
408
+ retry: true,
409
+ delay
410
+ };
411
+ } else {
412
+ return {
413
+ retry: false
414
+ };
415
+ }
416
+ }
417
+ __name(shouldRetryForOptions, "shouldRetryForOptions");
418
+ const shouldRetryHeader = response.headers.get("x-should-retry");
419
+ if (shouldRetryHeader === "true")
420
+ return shouldRetryForOptions();
421
+ if (shouldRetryHeader === "false")
422
+ return {
423
+ retry: false
424
+ };
425
+ if (response.status === 408)
426
+ return shouldRetryForOptions();
427
+ if (response.status === 409)
428
+ return shouldRetryForOptions();
429
+ if (response.status === 429)
430
+ return shouldRetryForOptions();
431
+ if (response.status >= 500)
432
+ return shouldRetryForOptions();
433
+ return {
434
+ retry: false
435
+ };
436
+ }
437
+ __name(shouldRetry, "shouldRetry");
438
+ function safeJsonParse(text) {
439
+ try {
440
+ return JSON.parse(text);
441
+ } catch (e) {
442
+ return void 0;
443
+ }
444
+ }
445
+ __name(safeJsonParse, "safeJsonParse");
446
+ function createResponseHeaders(headers) {
447
+ return new Proxy(Object.fromEntries(
448
+ // @ts-ignore
449
+ headers.entries()
450
+ ), {
451
+ get(target, name) {
452
+ const key = name.toString();
453
+ return target[key.toLowerCase()] || target[key];
454
+ }
455
+ });
456
+ }
457
+ __name(createResponseHeaders, "createResponseHeaders");
458
+ function requestInitWithCache(requestInit) {
459
+ try {
460
+ const withCache = {
461
+ ...requestInit,
462
+ cache: "no-cache"
463
+ };
464
+ const _ = new Request("http://localhost", withCache);
465
+ return withCache;
466
+ } catch (error) {
467
+ return requestInit ?? {};
468
+ }
469
+ }
470
+ __name(requestInitWithCache, "requestInitWithCache");
471
+ var _ApiPromise = class _ApiPromise extends Promise {
472
+ constructor(responsePromise) {
473
+ super((resolve) => {
474
+ resolve(null);
475
+ });
476
+ this.responsePromise = responsePromise;
477
+ }
478
+ /**
479
+ * Gets the raw `Response` instance instead of parsing the response
480
+ * data.
481
+ *
482
+ * If you want to parse the response body but still get the `Response`
483
+ * instance, you can use {@link withResponse()}.
484
+ */
485
+ asResponse() {
486
+ return this.responsePromise.then((p) => p.response);
487
+ }
488
+ /**
489
+ * Gets the parsed response data and the raw `Response` instance.
490
+ *
491
+ * If you just want to get the raw `Response` instance without parsing it,
492
+ * you can use {@link asResponse()}.
493
+ */
494
+ async withResponse() {
495
+ const [data, response] = await Promise.all([
496
+ this.parse(),
497
+ this.asResponse()
498
+ ]);
499
+ return {
500
+ data,
501
+ response
502
+ };
503
+ }
504
+ parse() {
505
+ return this.responsePromise.then((result) => result.data);
506
+ }
507
+ then(onfulfilled, onrejected) {
508
+ return this.parse().then(onfulfilled, onrejected);
509
+ }
510
+ catch(onrejected) {
511
+ return this.parse().catch(onrejected);
512
+ }
513
+ finally(onfinally) {
514
+ return this.parse().finally(onfinally);
515
+ }
516
+ };
517
+ __name(_ApiPromise, "ApiPromise");
518
+ var ApiPromise = _ApiPromise;
519
+ var _fetchPage, fetchPage_fn;
520
+ var _CursorPagePromise = class _CursorPagePromise extends ApiPromise {
521
+ constructor(result, schema, url, params, requestInit, options) {
522
+ super(result.then((result2) => ({
523
+ data: new CursorPage(result2.data.data, result2.data.pagination, __privateMethod(this, _fetchPage, fetchPage_fn).bind(this)),
524
+ response: result2.response
525
+ })));
526
+ __privateAdd(this, _fetchPage);
527
+ this.schema = schema;
528
+ this.url = url;
529
+ this.params = params;
530
+ this.requestInit = requestInit;
531
+ this.options = options;
532
+ }
533
+ /**
534
+ * Allow auto-paginating iteration on an unawaited list call, eg:
535
+ *
536
+ * for await (const item of client.items.list()) {
537
+ * console.log(item)
538
+ * }
539
+ */
540
+ async *[Symbol.asyncIterator]() {
541
+ const page = await this;
542
+ for await (const item of page) {
543
+ yield item;
544
+ }
545
+ }
546
+ };
547
+ _fetchPage = new WeakSet();
548
+ fetchPage_fn = /* @__PURE__ */ __name(function(params) {
549
+ return zodfetchCursorPage(this.schema, this.url, {
550
+ ...this.params,
551
+ ...params
552
+ }, this.requestInit, this.options);
553
+ }, "#fetchPage");
554
+ __name(_CursorPagePromise, "CursorPagePromise");
555
+ var CursorPagePromise = _CursorPagePromise;
556
+ var _fetchPage2, fetchPage_fn2;
557
+ var _OffsetLimitPagePromise = class _OffsetLimitPagePromise extends ApiPromise {
558
+ constructor(result, schema, url, params, requestInit, options) {
559
+ super(result.then((result2) => ({
560
+ data: new OffsetLimitPage(result2.data.data, result2.data.pagination, __privateMethod(this, _fetchPage2, fetchPage_fn2).bind(this)),
561
+ response: result2.response
562
+ })));
563
+ __privateAdd(this, _fetchPage2);
564
+ this.schema = schema;
565
+ this.url = url;
566
+ this.params = params;
567
+ this.requestInit = requestInit;
568
+ this.options = options;
569
+ }
570
+ /**
571
+ * Allow auto-paginating iteration on an unawaited list call, eg:
572
+ *
573
+ * for await (const item of client.items.list()) {
574
+ * console.log(item)
575
+ * }
576
+ */
577
+ async *[Symbol.asyncIterator]() {
578
+ const page = await this;
579
+ for await (const item of page) {
580
+ yield item;
581
+ }
582
+ }
583
+ };
584
+ _fetchPage2 = new WeakSet();
585
+ fetchPage_fn2 = /* @__PURE__ */ __name(function(params1) {
586
+ return zodfetchOffsetLimitPage(this.schema, this.url, {
587
+ ...this.params,
588
+ ...params1
589
+ }, this.requestInit, this.options);
590
+ }, "#fetchPage");
591
+ __name(_OffsetLimitPagePromise, "OffsetLimitPagePromise");
592
+ var OffsetLimitPagePromise = _OffsetLimitPagePromise;
593
+
594
+ exports.ApiConnectionError = ApiConnectionError;
595
+ exports.ApiError = ApiError;
596
+ exports.ApiPromise = ApiPromise;
597
+ exports.AuthenticationError = AuthenticationError;
598
+ exports.BadRequestError = BadRequestError;
599
+ exports.ConflictError = ConflictError;
600
+ exports.CursorPage = CursorPage;
601
+ exports.CursorPagePromise = CursorPagePromise;
602
+ exports.InternalServerError = InternalServerError;
603
+ exports.NotFoundError = NotFoundError;
604
+ exports.OffsetLimitPage = OffsetLimitPage;
605
+ exports.OffsetLimitPagePromise = OffsetLimitPagePromise;
606
+ exports.PermissionDeniedError = PermissionDeniedError;
607
+ exports.RateLimitError = RateLimitError;
608
+ exports.UnprocessableEntityError = UnprocessableEntityError;
609
+ exports.defaultRetryOptions = defaultRetryOptions2;
610
+ exports.zodfetch = zodfetch;
611
+ exports.zodfetchCursorPage = zodfetchCursorPage;
612
+ exports.zodfetchOffsetLimitPage = zodfetchOffsetLimitPage;
613
+ //# sourceMappingURL=out.js.map
614
+ //# sourceMappingURL=zodfetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/v3/apiClient/core.ts","../../src/v3/apiClient/errors.ts","../../src/v3/utils/retries.ts","../../src/v3/apiClient/pagination.ts"],"names":["z","fromZodError","ApiError","Error","constructor","status","error","message","headers","makeMessage","data","code","param","type","msg","JSON","stringify","generate","errorResponse","ApiConnectionError","cause","castToError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","undefined","err","defaultRetryOptions","maxAttempts","factor","minTimeoutInMs","maxTimeoutInMs","randomize","defaultFetchRetryOptions","byStatus","strategy","connectionError","timeout","calculateNextRetryDelay","options","attempt","opts","random","Math","min","pow","round","CursorPage","pagination","pageFetcher","getPaginatedItems","hasNextPage","next","hasPreviousPage","previous","getNextPage","after","getPreviousPage","before","iterPages","page","Symbol","asyncIterator","item","OffsetLimitPage","currentPage","totalPages","zodfetch","schema","url","requestInit","ApiPromise","_doZodFetch","zodfetchCursorPage","params","query","URLSearchParams","limit","set","String","cursorPageSchema","object","array","string","optional","$url","URL","search","toString","fetchResult","href","CursorPagePromise","zodfetchOffsetLimitPage","offsetLimitPageSchema","coerce","number","count","OffsetLimitPagePromise","$requestInit","response","fetch","requestInitWithCache","responseHeaders","createResponseHeaders","ok","retryResult","shouldRetry","retry","Promise","resolve","setTimeout","delay","errText","text","catch","e","errJSON","safeJsonParse","errMessage","jsonBody","json","parsedResult","safeParse","success","retryOptions","shouldRetryForOptions","shouldRetryHeader","get","parse","Proxy","Object","fromEntries","entries","target","name","key","toLowerCase","withCache","cache","_","Request","responsePromise","asResponse","then","p","withResponse","all","result","onfulfilled","onrejected","finally","onfinally","bind","_fetchPage","fetchPage_fn"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { fromZodError } from \"zod-validation-error\";\nimport { ApiConnectionError, ApiError } from \"./errors\";\nimport { RetryOptions } from \"../schemas\";\nimport { calculateNextRetryDelay } from \"../utils/retries\";\n\nimport {\n CursorPage,\n CursorPageParams,\n CursorPageResponse,\n OffsetLimitPage,\n OffsetLimitPageParams,\n OffsetLimitPageResponse,\n} from \"./pagination\";\n\nexport const defaultRetryOptions = {\n maxAttempts: 3,\n factor: 2,\n minTimeoutInMs: 1000,\n maxTimeoutInMs: 60000,\n randomize: false,\n} satisfies RetryOptions;\n\nexport type ZodFetchOptions = {\n retry?: RetryOptions;\n};\n\ninterface FetchCursorPageParams extends CursorPageParams {\n query?: URLSearchParams;\n}\n\ninterface FetchOffsetLimitPageParams extends OffsetLimitPageParams {\n query?: URLSearchParams;\n}\n\nexport function zodfetch<TResponseBodySchema extends z.ZodTypeAny>(\n schema: TResponseBodySchema,\n url: string,\n requestInit?: RequestInit,\n options?: ZodFetchOptions\n): ApiPromise<z.output<TResponseBodySchema>> {\n return new ApiPromise(_doZodFetch(schema, url, requestInit, options));\n}\n\nexport function zodfetchCursorPage<TItemSchema extends z.ZodTypeAny>(\n schema: TItemSchema,\n url: string,\n params: FetchCursorPageParams,\n requestInit?: RequestInit,\n options?: ZodFetchOptions\n) {\n const query = new URLSearchParams(params.query);\n\n if (params.limit) {\n query.set(\"page[size]\", String(params.limit));\n }\n\n if (params.after) {\n query.set(\"page[after]\", params.after);\n }\n\n if (params.before) {\n query.set(\"page[before]\", params.before);\n }\n\n const cursorPageSchema = z.object({\n data: z.array(schema),\n pagination: z.object({\n next: z.string().optional(),\n previous: z.string().optional(),\n }),\n });\n\n const $url = new URL(url);\n $url.search = query.toString();\n\n const fetchResult = _doZodFetch(cursorPageSchema, $url.href, requestInit, options);\n\n return new CursorPagePromise(fetchResult, schema, url, params, requestInit, options);\n}\n\nexport function zodfetchOffsetLimitPage<TItemSchema extends z.ZodTypeAny>(\n schema: TItemSchema,\n url: string,\n params: FetchOffsetLimitPageParams,\n requestInit?: RequestInit,\n options?: ZodFetchOptions\n) {\n const query = new URLSearchParams(params.query);\n\n if (params.limit) {\n query.set(\"perPage\", String(params.limit));\n }\n\n if (params.page) {\n query.set(\"page\", String(params.page));\n }\n\n const offsetLimitPageSchema = z.object({\n data: z.array(schema),\n pagination: z.object({\n currentPage: z.coerce.number(),\n totalPages: z.coerce.number(),\n count: z.coerce.number(),\n }),\n });\n\n const $url = new URL(url);\n $url.search = query.toString();\n\n const fetchResult = _doZodFetch(offsetLimitPageSchema, $url.href, requestInit, options);\n\n return new OffsetLimitPagePromise(fetchResult, schema, url, params, requestInit, options);\n}\n\ntype ZodFetchResult<T> = {\n data: T;\n response: Response;\n};\n\ntype PromiseOrValue<T> = T | Promise<T>;\n\nasync function _doZodFetch<TResponseBodySchema extends z.ZodTypeAny>(\n schema: TResponseBodySchema,\n url: string,\n requestInit?: PromiseOrValue<RequestInit>,\n options?: ZodFetchOptions,\n attempt = 1\n): Promise<ZodFetchResult<z.output<TResponseBodySchema>>> {\n try {\n const $requestInit = await requestInit;\n\n const response = await fetch(url, requestInitWithCache($requestInit));\n\n const responseHeaders = createResponseHeaders(response.headers);\n\n if (!response.ok) {\n const retryResult = shouldRetry(response, attempt, options?.retry);\n\n if (retryResult.retry) {\n await new Promise((resolve) => setTimeout(resolve, retryResult.delay));\n\n return await _doZodFetch(schema, url, requestInit, options, attempt + 1);\n } else {\n const errText = await response.text().catch((e) => castToError(e).message);\n const errJSON = safeJsonParse(errText);\n const errMessage = errJSON ? undefined : errText;\n\n throw ApiError.generate(response.status, errJSON, errMessage, responseHeaders);\n }\n }\n\n const jsonBody = await response.json();\n const parsedResult = schema.safeParse(jsonBody);\n\n if (parsedResult.success) {\n return { data: parsedResult.data, response };\n }\n\n throw fromZodError(parsedResult.error);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n\n if (options?.retry) {\n const retry = { ...defaultRetryOptions, ...options.retry };\n\n const delay = calculateNextRetryDelay(retry, attempt);\n\n if (delay) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n return await _doZodFetch(schema, url, requestInit, options, attempt + 1);\n }\n }\n\n throw new ApiConnectionError({ cause: castToError(error) });\n }\n}\n\nfunction castToError(err: any): Error {\n if (err instanceof Error) return err;\n return new Error(err);\n}\n\ntype ShouldRetryResult =\n | {\n retry: false;\n }\n | {\n retry: true;\n delay: number;\n };\n\nfunction shouldRetry(\n response: Response,\n attempt: number,\n retryOptions?: RetryOptions\n): ShouldRetryResult {\n function shouldRetryForOptions(): ShouldRetryResult {\n const retry = { ...defaultRetryOptions, ...retryOptions };\n\n const delay = calculateNextRetryDelay(retry, attempt);\n\n if (delay) {\n return { retry: true, delay };\n } else {\n return { retry: false };\n }\n }\n\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get(\"x-should-retry\");\n\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === \"true\") return shouldRetryForOptions();\n if (shouldRetryHeader === \"false\") return { retry: false };\n\n // Retry on request timeouts.\n if (response.status === 408) return shouldRetryForOptions();\n\n // Retry on lock timeouts.\n if (response.status === 409) return shouldRetryForOptions();\n\n // Retry on rate limits.\n if (response.status === 429) return shouldRetryForOptions();\n\n // Retry internal errors.\n if (response.status >= 500) return shouldRetryForOptions();\n\n return { retry: false };\n}\n\nfunction safeJsonParse(text: string): any {\n try {\n return JSON.parse(text);\n } catch (e) {\n return undefined;\n }\n}\n\nfunction createResponseHeaders(headers: Response[\"headers\"]): Record<string, string> {\n return new Proxy(\n Object.fromEntries(\n // @ts-ignore\n headers.entries()\n ),\n {\n get(target, name) {\n const key = name.toString();\n return target[key.toLowerCase()] || target[key];\n },\n }\n );\n}\n\nfunction requestInitWithCache(requestInit?: RequestInit): RequestInit {\n try {\n const withCache: RequestInit = {\n ...requestInit,\n cache: \"no-cache\",\n };\n\n const _ = new Request(\"http://localhost\", withCache);\n\n return withCache;\n } catch (error) {\n return requestInit ?? {};\n }\n}\n\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class ApiPromise<T> extends Promise<T> {\n constructor(private responsePromise: Promise<ZodFetchResult<T>>) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null as any);\n });\n }\n\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n */\n asResponse(): Promise<Response> {\n return this.responsePromise.then((p) => p.response);\n }\n\n /**\n * Gets the parsed response data and the raw `Response` instance.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n */\n async withResponse(): Promise<{ data: T; response: Response }> {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response };\n }\n\n private parse(): Promise<T> {\n return this.responsePromise.then((result) => result.data);\n }\n\n override then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null\n ): Promise<TResult1 | TResult2> {\n return this.parse().then(onfulfilled, onrejected);\n }\n\n override catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null\n ): Promise<T | TResult> {\n return this.parse().catch(onrejected);\n }\n\n override finally(onfinally?: (() => void) | undefined | null): Promise<T> {\n return this.parse().finally(onfinally);\n }\n}\n\nexport class CursorPagePromise<TItemSchema extends z.ZodTypeAny>\n extends ApiPromise<CursorPage<z.output<TItemSchema>>>\n implements AsyncIterable<z.output<TItemSchema>>\n{\n constructor(\n result: Promise<ZodFetchResult<CursorPageResponse<z.output<TItemSchema>>>>,\n private schema: TItemSchema,\n private url: string,\n private params: FetchCursorPageParams,\n private requestInit?: RequestInit,\n private options?: ZodFetchOptions\n ) {\n super(\n result.then((result) => ({\n data: new CursorPage(result.data.data, result.data.pagination, this.#fetchPage.bind(this)),\n response: result.response,\n }))\n );\n }\n\n #fetchPage(params: Omit<CursorPageParams, \"limit\">): Promise<CursorPage<z.output<TItemSchema>>> {\n return zodfetchCursorPage(\n this.schema,\n this.url,\n { ...this.params, ...params },\n this.requestInit,\n this.options\n );\n }\n\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n\nexport class OffsetLimitPagePromise<TItemSchema extends z.ZodTypeAny>\n extends ApiPromise<OffsetLimitPage<z.output<TItemSchema>>>\n implements AsyncIterable<z.output<TItemSchema>>\n{\n constructor(\n result: Promise<ZodFetchResult<OffsetLimitPageResponse<z.output<TItemSchema>>>>,\n private schema: TItemSchema,\n private url: string,\n private params: FetchOffsetLimitPageParams,\n private requestInit?: RequestInit,\n private options?: ZodFetchOptions\n ) {\n super(\n result.then((result) => ({\n data: new OffsetLimitPage(\n result.data.data,\n result.data.pagination,\n this.#fetchPage.bind(this)\n ),\n response: result.response,\n }))\n );\n }\n\n #fetchPage(\n params: Omit<FetchOffsetLimitPageParams, \"limit\">\n ): Promise<OffsetLimitPage<z.output<TItemSchema>>> {\n return zodfetchOffsetLimitPage(\n this.schema,\n this.url,\n { ...this.params, ...params },\n this.requestInit,\n this.options\n );\n }\n\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n","export type APIHeaders = Record<string, string | null | undefined>;\n\nexport class ApiError extends Error {\n readonly status: number | undefined;\n readonly headers: APIHeaders | undefined;\n readonly error: Object | undefined;\n\n readonly code: string | null | undefined;\n readonly param: string | null | undefined;\n readonly type: string | undefined;\n\n constructor(\n status: number | undefined,\n error: Object | undefined,\n message: string | undefined,\n headers: APIHeaders | undefined\n ) {\n super(`${ApiError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n\n const data = error as Record<string, any>;\n this.error = data;\n this.code = data?.[\"code\"];\n this.param = data?.[\"param\"];\n this.type = data?.[\"type\"];\n }\n\n private static makeMessage(status: number | undefined, error: any, message: string | undefined) {\n const msg = error?.message\n ? typeof error.message === \"string\"\n ? error.message\n : JSON.stringify(error.message)\n : error\n ? JSON.stringify(error)\n : message;\n\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return \"(no status code or body)\";\n }\n\n static generate(\n status: number | undefined,\n errorResponse: Object | undefined,\n message: string | undefined,\n headers: APIHeaders | undefined\n ) {\n if (!status) {\n return new ApiConnectionError({ cause: castToError(errorResponse) });\n }\n\n const error = (errorResponse as Record<string, any>)?.[\"error\"];\n\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n\n return new ApiError(status, error, message, headers);\n }\n}\n\nexport class ApiConnectionError extends ApiError {\n override readonly status: undefined = undefined;\n\n constructor({ message, cause }: { message?: string; cause?: Error | undefined }) {\n super(undefined, undefined, message || \"Connection error.\", undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause) this.cause = cause;\n }\n}\n\nexport class BadRequestError extends ApiError {\n override readonly status: 400 = 400;\n}\n\nexport class AuthenticationError extends ApiError {\n override readonly status: 401 = 401;\n}\n\nexport class PermissionDeniedError extends ApiError {\n override readonly status: 403 = 403;\n}\n\nexport class NotFoundError extends ApiError {\n override readonly status: 404 = 404;\n}\n\nexport class ConflictError extends ApiError {\n override readonly status: 409 = 409;\n}\n\nexport class UnprocessableEntityError extends ApiError {\n override readonly status: 422 = 422;\n}\n\nexport class RateLimitError extends ApiError {\n override readonly status: 429 = 429;\n}\n\nexport class InternalServerError extends ApiError {}\n\nfunction castToError(err: any): Error {\n if (err instanceof Error) return err;\n return new Error(err);\n}\n","import { calculateResetAt as calculateResetAtInternal } from \"../../retry\";\nimport { FetchRetryOptions, type RetryOptions } from \"../schemas\";\n\nexport const defaultRetryOptions = {\n maxAttempts: 3,\n factor: 2,\n minTimeoutInMs: 1000,\n maxTimeoutInMs: 60000,\n randomize: true,\n} satisfies RetryOptions;\n\nexport const defaultFetchRetryOptions = {\n byStatus: {\n \"429,408,409,5xx\": {\n strategy: \"backoff\",\n ...defaultRetryOptions,\n },\n },\n connectionError: defaultRetryOptions,\n timeout: defaultRetryOptions,\n} satisfies FetchRetryOptions;\n\n/**\n *\n * @param options\n * @param attempt - The current attempt number. If the first attempt has failed, this will be 1.\n * @returns\n */\nexport function calculateNextRetryDelay(options: RetryOptions, attempt: number) {\n const opts = { ...defaultRetryOptions, ...options };\n\n if (attempt >= opts.maxAttempts) {\n return;\n }\n\n const { factor, minTimeoutInMs, maxTimeoutInMs, randomize } = opts;\n\n const random = randomize ? Math.random() + 1 : 1;\n\n const timeout = Math.min(maxTimeoutInMs, random * minTimeoutInMs * Math.pow(factor, attempt - 1));\n\n // Round to the nearest integer\n return Math.round(timeout);\n}\n\nexport function calculateResetAt(\n resets: string | undefined | null,\n format:\n | \"unix_timestamp\"\n | \"iso_8601\"\n | \"iso_8601_duration_openai_variant\"\n | \"unix_timestamp_in_ms\",\n now: number = Date.now()\n): number | undefined {\n const resetAt = calculateResetAtInternal(resets, format, new Date(now));\n\n return resetAt?.getTime();\n}\n","export interface CursorPageParams {\n limit?: number;\n after?: string;\n before?: string;\n}\n\nexport interface OffsetLimitPageParams {\n limit?: number;\n page?: number;\n}\n\nexport interface PageResponse<Item> {\n data: Array<Item>;\n}\n\nexport interface CursorPageResponse<Item> extends PageResponse<Item> {\n pagination: {\n next?: string;\n previous?: string;\n };\n}\n\nexport interface OffsetLimitPageResponse<Item> extends PageResponse<Item> {\n pagination: {\n currentPage: number;\n totalPages: number;\n count: number;\n };\n}\n\nexport interface Page<Item> {\n getPaginatedItems(): Item[];\n hasNextPage(): boolean;\n hasPreviousPage(): boolean;\n}\n\nexport class CursorPage<Item> implements CursorPageResponse<Item>, Page<Item>, AsyncIterable<Item> {\n data: Array<Item>;\n pagination: { next?: string; previous?: string };\n\n constructor(\n data: Array<Item>,\n pagination: { next?: string; previous?: string },\n private pageFetcher: (params: Omit<CursorPageParams, \"limit\">) => Promise<CursorPage<Item>>\n ) {\n this.data = data;\n this.pagination = pagination;\n }\n\n getPaginatedItems(): Item[] {\n return this.data ?? [];\n }\n\n hasNextPage(): boolean {\n return !!this.pagination.next;\n }\n\n hasPreviousPage(): boolean {\n return !!this.pagination.previous;\n }\n\n getNextPage(): Promise<CursorPage<Item>> {\n if (!this.pagination.next) {\n throw new Error(\"No next page available\");\n }\n\n return this.pageFetcher({ after: this.pagination.next });\n }\n\n getPreviousPage(): Promise<CursorPage<Item>> {\n if (!this.pagination.previous) {\n throw new Error(\"No previous page available\");\n }\n\n return this.pageFetcher({ before: this.pagination.previous });\n }\n\n async *iterPages() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let page: CursorPage<Item> = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n\nexport class OffsetLimitPage<Item>\n implements OffsetLimitPageResponse<Item>, Page<Item>, AsyncIterable<Item>\n{\n data: Array<Item>;\n pagination: { currentPage: number; totalPages: number; count: number };\n\n constructor(\n data: Array<Item>,\n pagination: { currentPage: number; totalPages: number; count: number },\n private pageFetcher: (\n params: Omit<OffsetLimitPageParams, \"limit\">\n ) => Promise<OffsetLimitPage<Item>>\n ) {\n this.data = data;\n this.pagination = pagination;\n }\n\n getPaginatedItems(): Item[] {\n return this.data ?? [];\n }\n\n hasNextPage(): boolean {\n return this.pagination.currentPage < this.pagination.totalPages;\n }\n\n hasPreviousPage(): boolean {\n return this.pagination.currentPage > 1;\n }\n\n getNextPage(): Promise<OffsetLimitPage<Item>> {\n if (!this.hasNextPage()) {\n throw new Error(\"No next page available\");\n }\n\n return this.pageFetcher({\n page: this.pagination.currentPage + 1,\n });\n }\n\n getPreviousPage(): Promise<OffsetLimitPage<Item>> {\n if (!this.hasPreviousPage()) {\n throw new Error(\"No previous page available\");\n }\n\n return this.pageFetcher({\n page: this.pagination.currentPage - 1,\n });\n }\n\n async *iterPages() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let page: OffsetLimitPage<Item> = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n"]}