@trigger.dev/core 3.0.0-beta.45 → 3.0.0-beta.47

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 (67) hide show
  1. package/dist/{catalog-mlNxCacM.d.ts → catalog-N-X0Te3W.d.mts} +5 -23
  2. package/dist/{catalog-QcLmPVsr.d.mts → catalog-NxVZnWZh.d.ts} +5 -23
  3. package/dist/{common-55Mqj8JP.d.mts → common-fIyU5pmz.d.mts} +13 -0
  4. package/dist/{common-55Mqj8JP.d.ts → common-fIyU5pmz.d.ts} +13 -0
  5. package/dist/{manager-6NRInm7C.d.ts → manager-2ZQ3_twq.d.ts} +1 -1
  6. package/dist/{manager-2AqSY67c.d.mts → manager-X_HrWQ7_.d.mts} +1 -1
  7. package/dist/{messages-EJX0bMsF.d.mts → messages-Sggr4tid.d.mts} +233 -70
  8. package/dist/{messages-EJX0bMsF.d.ts → messages-Sggr4tid.d.ts} +233 -70
  9. package/dist/{schemas-Sb0sJcEt.d.mts → schemas-Zy7mGFgD.d.mts} +22 -0
  10. package/dist/{schemas-Sb0sJcEt.d.ts → schemas-Zy7mGFgD.d.ts} +22 -0
  11. package/dist/tracer-N0p2Fuuv.d.mts +23 -0
  12. package/dist/tracer-N0p2Fuuv.d.ts +23 -0
  13. package/dist/v3/dev/index.d.mts +2 -2
  14. package/dist/v3/dev/index.d.ts +2 -2
  15. package/dist/v3/dev/index.js.map +1 -1
  16. package/dist/v3/dev/index.mjs.map +1 -1
  17. package/dist/v3/index.d.mts +50 -38
  18. package/dist/v3/index.d.ts +50 -38
  19. package/dist/v3/index.js +503 -343
  20. package/dist/v3/index.js.map +1 -1
  21. package/dist/v3/index.mjs +499 -344
  22. package/dist/v3/index.mjs.map +1 -1
  23. package/dist/v3/otel/index.js +15 -5
  24. package/dist/v3/otel/index.js.map +1 -1
  25. package/dist/v3/otel/index.mjs +15 -5
  26. package/dist/v3/otel/index.mjs.map +1 -1
  27. package/dist/v3/prod/index.d.mts +4 -4
  28. package/dist/v3/prod/index.d.ts +4 -4
  29. package/dist/v3/prod/index.js +7 -131
  30. package/dist/v3/prod/index.js.map +1 -1
  31. package/dist/v3/prod/index.mjs +7 -131
  32. package/dist/v3/prod/index.mjs.map +1 -1
  33. package/dist/v3/schemas/index.d.mts +16 -4
  34. package/dist/v3/schemas/index.d.ts +16 -4
  35. package/dist/v3/schemas/index.js +35 -40
  36. package/dist/v3/schemas/index.js.map +1 -1
  37. package/dist/v3/schemas/index.mjs +35 -41
  38. package/dist/v3/schemas/index.mjs.map +1 -1
  39. package/dist/v3/utils/timers.d.mts +6 -0
  40. package/dist/v3/utils/timers.d.ts +6 -0
  41. package/dist/v3/utils/timers.js +31 -0
  42. package/dist/v3/utils/timers.js.map +1 -0
  43. package/dist/v3/utils/timers.mjs +28 -0
  44. package/dist/v3/utils/timers.mjs.map +1 -0
  45. package/dist/v3/workers/index.d.mts +7 -6
  46. package/dist/v3/workers/index.d.ts +7 -6
  47. package/dist/v3/workers/index.js +251 -96
  48. package/dist/v3/workers/index.js.map +1 -1
  49. package/dist/v3/workers/index.mjs +251 -96
  50. package/dist/v3/workers/index.mjs.map +1 -1
  51. package/dist/v3/zodNamespace.js +41 -18
  52. package/dist/v3/zodNamespace.js.map +1 -1
  53. package/dist/v3/zodNamespace.mjs +42 -19
  54. package/dist/v3/zodNamespace.mjs.map +1 -1
  55. package/dist/v3/zodSocket.d.mts +8 -3
  56. package/dist/v3/zodSocket.d.ts +8 -3
  57. package/dist/v3/zodSocket.js +56 -25
  58. package/dist/v3/zodSocket.js.map +1 -1
  59. package/dist/v3/zodSocket.mjs +57 -26
  60. package/dist/v3/zodSocket.mjs.map +1 -1
  61. package/dist/v3/zodfetch.d.mts +15 -2
  62. package/dist/v3/zodfetch.d.ts +15 -2
  63. package/dist/v3/zodfetch.js +248 -28
  64. package/dist/v3/zodfetch.js.map +1 -1
  65. package/dist/v3/zodfetch.mjs +246 -29
  66. package/dist/v3/zodfetch.mjs.map +1 -1
  67. package/package.json +10 -2
@@ -24,10 +24,34 @@ var __privateMethod = (obj, member, method) => {
24
24
  return method;
25
25
  };
26
26
 
27
+ // src/v3/utils/retries.ts
28
+ var defaultRetryOptions = {
29
+ maxAttempts: 3,
30
+ factor: 2,
31
+ minTimeoutInMs: 1e3,
32
+ maxTimeoutInMs: 6e4,
33
+ randomize: true
34
+ };
35
+ function calculateNextRetryDelay(options, attempt) {
36
+ const opts = {
37
+ ...defaultRetryOptions,
38
+ ...options
39
+ };
40
+ if (attempt >= opts.maxAttempts) {
41
+ return;
42
+ }
43
+ const { factor, minTimeoutInMs, maxTimeoutInMs, randomize } = opts;
44
+ const random = randomize ? Math.random() + 1 : 1;
45
+ const timeout = Math.min(maxTimeoutInMs, random * minTimeoutInMs * Math.pow(factor, attempt - 1));
46
+ return Math.round(timeout);
47
+ }
48
+ __name(calculateNextRetryDelay, "calculateNextRetryDelay");
49
+
27
50
  // src/v3/apiClient/errors.ts
28
51
  var _ApiError = class _ApiError extends Error {
29
52
  constructor(status, error, message, headers) {
30
53
  super(`${_ApiError.makeMessage(status, error, message)}`);
54
+ this.name = "TriggerApiError";
31
55
  this.status = status;
32
56
  this.headers = headers;
33
57
  const data = error;
@@ -148,6 +172,16 @@ var _RateLimitError = class _RateLimitError extends ApiError {
148
172
  super(...arguments);
149
173
  __publicField(this, "status", 429);
150
174
  }
175
+ get millisecondsUntilReset() {
176
+ const resetAtUnixEpochMs = (this.headers ?? {})["x-ratelimit-reset"];
177
+ if (typeof resetAtUnixEpochMs === "string") {
178
+ const resetAtUnixEpoch = parseInt(resetAtUnixEpochMs, 10);
179
+ if (isNaN(resetAtUnixEpoch)) {
180
+ return;
181
+ }
182
+ return Math.max(resetAtUnixEpoch - Date.now() + Math.floor(Math.random() * 2e3), 0);
183
+ }
184
+ }
151
185
  };
152
186
  __name(_RateLimitError, "RateLimitError");
153
187
  var RateLimitError = _RateLimitError;
@@ -162,28 +196,122 @@ function castToError(err) {
162
196
  }
163
197
  __name(castToError, "castToError");
164
198
 
165
- // src/v3/utils/retries.ts
166
- var defaultRetryOptions = {
167
- maxAttempts: 3,
168
- factor: 2,
169
- minTimeoutInMs: 1e3,
170
- maxTimeoutInMs: 6e4,
171
- randomize: true
199
+ // src/v3/semanticInternalAttributes.ts
200
+ var SemanticInternalAttributes = {
201
+ ENVIRONMENT_ID: "ctx.environment.id",
202
+ ENVIRONMENT_TYPE: "ctx.environment.type",
203
+ ORGANIZATION_ID: "ctx.organization.id",
204
+ ORGANIZATION_SLUG: "ctx.organization.slug",
205
+ ORGANIZATION_NAME: "ctx.organization.name",
206
+ PROJECT_ID: "ctx.project.id",
207
+ PROJECT_REF: "ctx.project.ref",
208
+ PROJECT_NAME: "ctx.project.title",
209
+ PROJECT_DIR: "project.dir",
210
+ ATTEMPT_ID: "ctx.attempt.id",
211
+ ATTEMPT_NUMBER: "ctx.attempt.number",
212
+ RUN_ID: "ctx.run.id",
213
+ RUN_IS_TEST: "ctx.run.isTest",
214
+ BATCH_ID: "ctx.batch.id",
215
+ TASK_SLUG: "ctx.task.id",
216
+ TASK_PATH: "ctx.task.filePath",
217
+ TASK_EXPORT_NAME: "ctx.task.exportName",
218
+ QUEUE_NAME: "ctx.queue.name",
219
+ QUEUE_ID: "ctx.queue.id",
220
+ MACHINE_PRESET_NAME: "ctx.machine.name",
221
+ MACHINE_PRESET_CPU: "ctx.machine.cpu",
222
+ MACHINE_PRESET_MEMORY: "ctx.machine.memory",
223
+ MACHINE_PRESET_CENTS_PER_MS: "ctx.machine.centsPerMs",
224
+ SPAN_PARTIAL: "$span.partial",
225
+ SPAN_ID: "$span.span_id",
226
+ OUTPUT: "$output",
227
+ OUTPUT_TYPE: "$mime_type_output",
228
+ STYLE: "$style",
229
+ STYLE_ICON: "$style.icon",
230
+ STYLE_VARIANT: "$style.variant",
231
+ STYLE_ACCESSORY: "$style.accessory",
232
+ METADATA: "$metadata",
233
+ TRIGGER: "$trigger",
234
+ PAYLOAD: "$payload",
235
+ PAYLOAD_TYPE: "$mime_type_payload",
236
+ SHOW: "$show",
237
+ SHOW_ACTIONS: "$show.actions",
238
+ WORKER_ID: "worker.id",
239
+ WORKER_VERSION: "worker.version",
240
+ CLI_VERSION: "cli.version",
241
+ SDK_VERSION: "sdk.version",
242
+ SDK_LANGUAGE: "sdk.language",
243
+ RETRY_AT: "retry.at",
244
+ RETRY_DELAY: "retry.delay",
245
+ RETRY_COUNT: "retry.count",
246
+ LINK_TITLE: "$link.title",
247
+ IDEMPOTENCY_KEY: "ctx.run.idempotencyKey",
248
+ USAGE_DURATION_MS: "$usage.durationMs",
249
+ USAGE_COST_IN_CENTS: "$usage.costInCents",
250
+ RATE_LIMIT_LIMIT: "response.rateLimit.limit",
251
+ RATE_LIMIT_REMAINING: "response.rateLimit.remaining",
252
+ RATE_LIMIT_RESET: "response.rateLimit.reset"
172
253
  };
173
- function calculateNextRetryDelay(options, attempt) {
174
- const opts = {
175
- ...defaultRetryOptions,
176
- ...options
177
- };
178
- if (attempt >= opts.maxAttempts) {
179
- return;
254
+
255
+ // src/v3/utils/flattenAttributes.ts
256
+ var NULL_SENTINEL = "$@null((";
257
+ function flattenAttributes(obj, prefix) {
258
+ const result = {};
259
+ if (obj === void 0) {
260
+ return result;
261
+ }
262
+ if (obj === null) {
263
+ result[prefix || ""] = NULL_SENTINEL;
264
+ return result;
265
+ }
266
+ if (typeof obj === "string") {
267
+ result[prefix || ""] = obj;
268
+ return result;
269
+ }
270
+ if (typeof obj === "number") {
271
+ result[prefix || ""] = obj;
272
+ return result;
273
+ }
274
+ if (typeof obj === "boolean") {
275
+ result[prefix || ""] = obj;
276
+ return result;
277
+ }
278
+ for (const [key, value] of Object.entries(obj)) {
279
+ const newPrefix = `${prefix ? `${prefix}.` : ""}${Array.isArray(obj) ? `[${key}]` : key}`;
280
+ if (Array.isArray(value)) {
281
+ for (let i = 0; i < value.length; i++) {
282
+ if (typeof value[i] === "object" && value[i] !== null) {
283
+ Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));
284
+ } else {
285
+ if (value[i] === null) {
286
+ result[`${newPrefix}.[${i}]`] = NULL_SENTINEL;
287
+ } else {
288
+ result[`${newPrefix}.[${i}]`] = value[i];
289
+ }
290
+ }
291
+ }
292
+ } else if (isRecord(value)) {
293
+ Object.assign(result, flattenAttributes(value, newPrefix));
294
+ } else {
295
+ if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
296
+ result[newPrefix] = value;
297
+ } else if (value === null) {
298
+ result[newPrefix] = NULL_SENTINEL;
299
+ }
300
+ }
180
301
  }
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);
302
+ return result;
185
303
  }
186
- __name(calculateNextRetryDelay, "calculateNextRetryDelay");
304
+ __name(flattenAttributes, "flattenAttributes");
305
+ function isRecord(value) {
306
+ return value !== null && typeof value === "object" && !Array.isArray(value);
307
+ }
308
+ __name(isRecord, "isRecord");
309
+
310
+ // src/v3/utils/styleAttributes.ts
311
+ function accessoryAttributes(accessory) {
312
+ return flattenAttributes(accessory, SemanticInternalAttributes.STYLE_ACCESSORY);
313
+ }
314
+ __name(accessoryAttributes, "accessoryAttributes");
187
315
 
188
316
  // src/v3/apiClient/pagination.ts
189
317
  var _CursorPage = class _CursorPage {
@@ -293,6 +421,12 @@ var defaultRetryOptions2 = {
293
421
  maxTimeoutInMs: 6e4,
294
422
  randomize: false
295
423
  };
424
+ var requestOptionsKeys = {
425
+ retry: true
426
+ };
427
+ var isRequestOptions = /* @__PURE__ */ __name((obj) => {
428
+ return typeof obj === "object" && obj !== null && !isEmptyObj(obj) && Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k));
429
+ }, "isRequestOptions");
296
430
  function zodfetch(schema, url, requestInit, options) {
297
431
  return new ApiPromise(_doZodFetch(schema, url, requestInit, options));
298
432
  }
@@ -343,16 +477,47 @@ function zodfetchOffsetLimitPage(schema, url, params, requestInit, options) {
343
477
  return new OffsetLimitPagePromise(fetchResult, schema, url, params, requestInit, options);
344
478
  }
345
479
  __name(zodfetchOffsetLimitPage, "zodfetchOffsetLimitPage");
346
- async function _doZodFetch(schema, url, requestInit, options, attempt = 1) {
480
+ async function traceZodFetch(params, callback) {
481
+ if (!params.options?.tracer) {
482
+ return callback();
483
+ }
484
+ const url = new URL(params.url);
485
+ const method = params.requestInit?.method ?? "GET";
486
+ const name = params.options.name ?? `${method} ${url.pathname}`;
487
+ return await params.options.tracer.startActiveSpan(name, async (span) => {
488
+ return await callback(span);
489
+ }, {
490
+ attributes: {
491
+ [SemanticInternalAttributes.STYLE_ICON]: params.options?.icon ?? "api",
492
+ ...params.options.attributes
493
+ }
494
+ });
495
+ }
496
+ __name(traceZodFetch, "traceZodFetch");
497
+ async function _doZodFetch(schema, url, requestInit, options) {
498
+ const $requestInit = await requestInit;
499
+ return traceZodFetch({
500
+ url,
501
+ requestInit: $requestInit,
502
+ options
503
+ }, async (span) => {
504
+ const result = await _doZodFetchWithRetries(schema, url, $requestInit, options);
505
+ if (options?.onResponseBody && span) {
506
+ options.onResponseBody(result.data, span);
507
+ }
508
+ return result;
509
+ });
510
+ }
511
+ __name(_doZodFetch, "_doZodFetch");
512
+ async function _doZodFetchWithRetries(schema, url, requestInit, options, attempt = 1) {
347
513
  try {
348
- const $requestInit = await requestInit;
349
- const response = await fetch(url, requestInitWithCache($requestInit));
514
+ const response = await fetch(url, requestInitWithCache(requestInit));
350
515
  const responseHeaders = createResponseHeaders(response.headers);
351
516
  if (!response.ok) {
352
517
  const retryResult = shouldRetry(response, attempt, options?.retry);
353
518
  if (retryResult.retry) {
354
- await new Promise((resolve) => setTimeout(resolve, retryResult.delay));
355
- return await _doZodFetch(schema, url, requestInit, options, attempt + 1);
519
+ await waitForRetry(url, attempt + 1, retryResult.delay, options, requestInit, response);
520
+ return await _doZodFetchWithRetries(schema, url, requestInit, options, attempt + 1);
356
521
  } else {
357
522
  const errText = await response.text().catch((e) => castToError2(e).message);
358
523
  const errJSON = safeJsonParse(errText);
@@ -380,8 +545,8 @@ async function _doZodFetch(schema, url, requestInit, options, attempt = 1) {
380
545
  };
381
546
  const delay = calculateNextRetryDelay(retry, attempt);
382
547
  if (delay) {
383
- await new Promise((resolve) => setTimeout(resolve, delay));
384
- return await _doZodFetch(schema, url, requestInit, options, attempt + 1);
548
+ await waitForRetry(url, attempt + 1, delay, options, requestInit);
549
+ return await _doZodFetchWithRetries(schema, url, requestInit, options, attempt + 1);
385
550
  }
386
551
  }
387
552
  throw new ApiConnectionError({
@@ -389,7 +554,7 @@ async function _doZodFetch(schema, url, requestInit, options, attempt = 1) {
389
554
  });
390
555
  }
391
556
  }
392
- __name(_doZodFetch, "_doZodFetch");
557
+ __name(_doZodFetchWithRetries, "_doZodFetchWithRetries");
393
558
  function castToError2(err) {
394
559
  if (err instanceof Error)
395
560
  return err;
@@ -426,8 +591,25 @@ function shouldRetry(response, attempt, retryOptions) {
426
591
  return shouldRetryForOptions();
427
592
  if (response.status === 409)
428
593
  return shouldRetryForOptions();
429
- if (response.status === 429)
594
+ if (response.status === 429) {
595
+ if (attempt >= (typeof retryOptions?.maxAttempts === "number" ? retryOptions?.maxAttempts : 3)) {
596
+ return {
597
+ retry: false
598
+ };
599
+ }
600
+ const resetAtUnixEpochMs = response.headers.get("x-ratelimit-reset");
601
+ if (resetAtUnixEpochMs) {
602
+ const resetAtUnixEpoch = parseInt(resetAtUnixEpochMs, 10);
603
+ const delay = resetAtUnixEpoch - Date.now() + Math.floor(Math.random() * 1e3);
604
+ if (delay > 0) {
605
+ return {
606
+ retry: true,
607
+ delay
608
+ };
609
+ }
610
+ }
430
611
  return shouldRetryForOptions();
612
+ }
431
613
  if (response.status >= 500)
432
614
  return shouldRetryForOptions();
433
615
  return {
@@ -590,6 +772,41 @@ fetchPage_fn2 = /* @__PURE__ */ __name(function(params1) {
590
772
  }, "#fetchPage");
591
773
  __name(_OffsetLimitPagePromise, "OffsetLimitPagePromise");
592
774
  var OffsetLimitPagePromise = _OffsetLimitPagePromise;
775
+ async function waitForRetry(url, attempt, delay, options, requestInit, response) {
776
+ if (options?.tracer) {
777
+ const method = requestInit?.method ?? "GET";
778
+ return options.tracer.startActiveSpan(response ? `wait after ${response.status}` : `wait after error`, async (span) => {
779
+ await new Promise((resolve) => setTimeout(resolve, delay));
780
+ }, {
781
+ attributes: {
782
+ [SemanticInternalAttributes.STYLE_ICON]: "wait",
783
+ ...accessoryAttributes({
784
+ items: [
785
+ {
786
+ text: `retrying ${options?.name ?? method.toUpperCase()} in ${delay}ms`,
787
+ variant: "normal"
788
+ }
789
+ ],
790
+ style: "codepath"
791
+ })
792
+ }
793
+ });
794
+ }
795
+ await new Promise((resolve) => setTimeout(resolve, delay));
796
+ }
797
+ __name(waitForRetry, "waitForRetry");
798
+ function isEmptyObj(obj) {
799
+ if (!obj)
800
+ return true;
801
+ for (const _k in obj)
802
+ return false;
803
+ return true;
804
+ }
805
+ __name(isEmptyObj, "isEmptyObj");
806
+ function hasOwn(obj, key) {
807
+ return Object.prototype.hasOwnProperty.call(obj, key);
808
+ }
809
+ __name(hasOwn, "hasOwn");
593
810
 
594
811
  exports.ApiConnectionError = ApiConnectionError;
595
812
  exports.ApiError = ApiError;
@@ -607,6 +824,9 @@ exports.PermissionDeniedError = PermissionDeniedError;
607
824
  exports.RateLimitError = RateLimitError;
608
825
  exports.UnprocessableEntityError = UnprocessableEntityError;
609
826
  exports.defaultRetryOptions = defaultRetryOptions2;
827
+ exports.hasOwn = hasOwn;
828
+ exports.isEmptyObj = isEmptyObj;
829
+ exports.isRequestOptions = isRequestOptions;
610
830
  exports.zodfetch = zodfetch;
611
831
  exports.zodfetchCursorPage = zodfetchCursorPage;
612
832
  exports.zodfetchOffsetLimitPage = zodfetchOffsetLimitPage;
@@ -1 +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"]}
1
+ {"version":3,"sources":["../../src/v3/apiClient/core.ts","../../src/v3/utils/retries.ts","../../src/v3/apiClient/errors.ts","../../src/v3/semanticInternalAttributes.ts","../../src/v3/utils/flattenAttributes.ts","../../src/v3/utils/styleAttributes.ts","../../src/v3/apiClient/pagination.ts"],"names":["z","fromZodError","defaultRetryOptions","maxAttempts","factor","minTimeoutInMs","maxTimeoutInMs","randomize","defaultFetchRetryOptions","byStatus","strategy","connectionError","timeout","calculateNextRetryDelay","options","attempt","opts","random","Math","min","pow","round","ApiError","Error","constructor","status","error","message","headers","makeMessage","name","data","code","param","type","msg","JSON","stringify","generate","errorResponse","ApiConnectionError","cause","castToError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","undefined","millisecondsUntilReset","resetAtUnixEpochMs","resetAtUnixEpoch","parseInt","isNaN","max","Date","now","floor","err","SemanticInternalAttributes","ENVIRONMENT_ID","ENVIRONMENT_TYPE","ORGANIZATION_ID","ORGANIZATION_SLUG","ORGANIZATION_NAME","PROJECT_ID","PROJECT_REF","PROJECT_NAME","PROJECT_DIR","ATTEMPT_ID","ATTEMPT_NUMBER","RUN_ID","RUN_IS_TEST","BATCH_ID","TASK_SLUG","TASK_PATH","TASK_EXPORT_NAME","QUEUE_NAME","QUEUE_ID","MACHINE_PRESET_NAME","MACHINE_PRESET_CPU","MACHINE_PRESET_MEMORY","MACHINE_PRESET_CENTS_PER_MS","SPAN_PARTIAL","SPAN_ID","OUTPUT","OUTPUT_TYPE","STYLE","STYLE_ICON","STYLE_VARIANT","STYLE_ACCESSORY","METADATA","TRIGGER","PAYLOAD","PAYLOAD_TYPE","SHOW","SHOW_ACTIONS","WORKER_ID","WORKER_VERSION","CLI_VERSION","SDK_VERSION","SDK_LANGUAGE","RETRY_AT","RETRY_DELAY","RETRY_COUNT","LINK_TITLE","IDEMPOTENCY_KEY","USAGE_DURATION_MS","USAGE_COST_IN_CENTS","RATE_LIMIT_LIMIT","RATE_LIMIT_REMAINING","RATE_LIMIT_RESET","NULL_SENTINEL","flattenAttributes","obj","prefix","result","key","value","Object","entries","newPrefix","Array","isArray","i","length","assign","isRecord","accessoryAttributes","accessory","CursorPage","pagination","pageFetcher","getPaginatedItems","hasNextPage","next","hasPreviousPage","previous","getNextPage","after","getPreviousPage","before","iterPages","page","Symbol","asyncIterator","item","OffsetLimitPage","currentPage","totalPages","requestOptionsKeys","retry","isRequestOptions","isEmptyObj","keys","every","k","hasOwn","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","traceZodFetch","callback","tracer","method","pathname","startActiveSpan","span","attributes","icon","$requestInit","_doZodFetchWithRetries","onResponseBody","response","fetch","requestInitWithCache","responseHeaders","createResponseHeaders","ok","retryResult","shouldRetry","waitForRetry","delay","errText","text","catch","e","errJSON","safeJsonParse","errMessage","jsonBody","json","parsedResult","safeParse","success","retryOptions","shouldRetryForOptions","shouldRetryHeader","get","parse","Proxy","fromEntries","target","toLowerCase","withCache","cache","_","Request","Promise","responsePromise","resolve","asResponse","then","p","withResponse","all","onfulfilled","onrejected","finally","onfinally","bind","_fetchPage","fetchPage_fn","setTimeout","items","toUpperCase","variant","style","_k","prototype","hasOwnProperty","call"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { fromZodError } from \"zod-validation-error\";\nimport { RetryOptions } from \"../schemas\";\nimport { calculateNextRetryDelay } from \"../utils/retries\";\nimport { ApiConnectionError, ApiError } from \"./errors\";\n\nimport { Attributes, Span } from \"@opentelemetry/api\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TriggerTracer } from \"../tracer\";\nimport { accessoryAttributes } from \"../utils/styleAttributes\";\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 tracer?: TriggerTracer;\n name?: string;\n attributes?: Attributes;\n icon?: string;\n onResponseBody?: (body: unknown, span: Span) => void;\n};\n\nexport type ApiRequestOptions = Pick<ZodFetchOptions, \"retry\">;\ntype KeysEnum<T> = { [P in keyof Required<T>]: true };\n\n// This is required so that we can determine if a given object matches the ApiRequestOptions\n// type at runtime. While this requires duplication, it is enforced by the TypeScript\n// compiler such that any missing / extraneous keys will cause an error.\nconst requestOptionsKeys: KeysEnum<ApiRequestOptions> = {\n retry: true,\n};\n\nexport const isRequestOptions = (obj: unknown): obj is ApiRequestOptions => {\n return (\n typeof obj === \"object\" &&\n obj !== null &&\n !isEmptyObj(obj) &&\n Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))\n );\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 traceZodFetch<T>(\n params: {\n url: string;\n requestInit?: RequestInit;\n options?: ZodFetchOptions;\n },\n callback: (span?: Span) => Promise<T>\n): Promise<T> {\n if (!params.options?.tracer) {\n return callback();\n }\n\n const url = new URL(params.url);\n const method = params.requestInit?.method ?? \"GET\";\n const name = params.options.name ?? `${method} ${url.pathname}`;\n\n return await params.options.tracer.startActiveSpan(\n name,\n async (span) => {\n return await callback(span);\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: params.options?.icon ?? \"api\",\n ...params.options.attributes,\n },\n }\n );\n}\n\nasync function _doZodFetch<TResponseBodySchema extends z.ZodTypeAny>(\n schema: TResponseBodySchema,\n url: string,\n requestInit?: PromiseOrValue<RequestInit>,\n options?: ZodFetchOptions\n): Promise<ZodFetchResult<z.output<TResponseBodySchema>>> {\n const $requestInit = await requestInit;\n\n return traceZodFetch({ url, requestInit: $requestInit, options }, async (span) => {\n const result = await _doZodFetchWithRetries(schema, url, $requestInit, options);\n\n if (options?.onResponseBody && span) {\n options.onResponseBody(result.data, span);\n }\n\n return result;\n });\n}\n\nasync function _doZodFetchWithRetries<TResponseBodySchema extends z.ZodTypeAny>(\n schema: TResponseBodySchema,\n url: string,\n requestInit?: RequestInit,\n options?: ZodFetchOptions,\n attempt = 1\n): Promise<ZodFetchResult<z.output<TResponseBodySchema>>> {\n try {\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 waitForRetry(url, attempt + 1, retryResult.delay, options, requestInit, response);\n\n return await _doZodFetchWithRetries(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 waitForRetry(url, attempt + 1, delay, options, requestInit);\n\n return await _doZodFetchWithRetries(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) {\n if (\n attempt >= (typeof retryOptions?.maxAttempts === \"number\" ? retryOptions?.maxAttempts : 3)\n ) {\n return { retry: false };\n }\n\n // x-ratelimit-reset is the unix timestamp in milliseconds when the rate limit will reset.\n const resetAtUnixEpochMs = response.headers.get(\"x-ratelimit-reset\");\n\n if (resetAtUnixEpochMs) {\n const resetAtUnixEpoch = parseInt(resetAtUnixEpochMs, 10);\n const delay = resetAtUnixEpoch - Date.now() + Math.floor(Math.random() * 1000);\n\n if (delay > 0) {\n return { retry: true, delay };\n }\n }\n\n return shouldRetryForOptions();\n }\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\nasync function waitForRetry(\n url: string,\n attempt: number,\n delay: number,\n options?: ZodFetchOptions,\n requestInit?: RequestInit,\n response?: Response\n): Promise<void> {\n if (options?.tracer) {\n const method = requestInit?.method ?? \"GET\";\n\n return options.tracer.startActiveSpan(\n response ? `wait after ${response.status}` : `wait after error`,\n async (span) => {\n await new Promise((resolve) => setTimeout(resolve, delay));\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"wait\",\n ...accessoryAttributes({\n items: [\n {\n text: `retrying ${options?.name ?? method.toUpperCase()} in ${delay}ms`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n }\n );\n }\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n}\n\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj: Object | null | undefined): boolean {\n if (!obj) return true;\n for (const _k in obj) return false;\n return true;\n}\n\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj: Object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key);\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 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.name = \"TriggerApiError\";\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 get millisecondsUntilReset(): number | undefined {\n // x-ratelimit-reset is the unix timestamp in milliseconds when the rate limit will reset.\n const resetAtUnixEpochMs = (this.headers ?? {})[\"x-ratelimit-reset\"];\n\n if (typeof resetAtUnixEpochMs === \"string\") {\n const resetAtUnixEpoch = parseInt(resetAtUnixEpochMs, 10);\n\n if (isNaN(resetAtUnixEpoch)) {\n return;\n }\n\n // Add between 0 and 2000ms to the reset time to add jitter\n return Math.max(resetAtUnixEpoch - Date.now() + Math.floor(Math.random() * 2000), 0);\n }\n }\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","export const SemanticInternalAttributes = {\n ENVIRONMENT_ID: \"ctx.environment.id\",\n ENVIRONMENT_TYPE: \"ctx.environment.type\",\n ORGANIZATION_ID: \"ctx.organization.id\",\n ORGANIZATION_SLUG: \"ctx.organization.slug\",\n ORGANIZATION_NAME: \"ctx.organization.name\",\n PROJECT_ID: \"ctx.project.id\",\n PROJECT_REF: \"ctx.project.ref\",\n PROJECT_NAME: \"ctx.project.title\",\n PROJECT_DIR: \"project.dir\",\n ATTEMPT_ID: \"ctx.attempt.id\",\n ATTEMPT_NUMBER: \"ctx.attempt.number\",\n RUN_ID: \"ctx.run.id\",\n RUN_IS_TEST: \"ctx.run.isTest\",\n BATCH_ID: \"ctx.batch.id\",\n TASK_SLUG: \"ctx.task.id\",\n TASK_PATH: \"ctx.task.filePath\",\n TASK_EXPORT_NAME: \"ctx.task.exportName\",\n QUEUE_NAME: \"ctx.queue.name\",\n QUEUE_ID: \"ctx.queue.id\",\n MACHINE_PRESET_NAME: \"ctx.machine.name\",\n MACHINE_PRESET_CPU: \"ctx.machine.cpu\",\n MACHINE_PRESET_MEMORY: \"ctx.machine.memory\",\n MACHINE_PRESET_CENTS_PER_MS: \"ctx.machine.centsPerMs\",\n SPAN_PARTIAL: \"$span.partial\",\n SPAN_ID: \"$span.span_id\",\n OUTPUT: \"$output\",\n OUTPUT_TYPE: \"$mime_type_output\",\n STYLE: \"$style\",\n STYLE_ICON: \"$style.icon\",\n STYLE_VARIANT: \"$style.variant\",\n STYLE_ACCESSORY: \"$style.accessory\",\n METADATA: \"$metadata\",\n TRIGGER: \"$trigger\",\n PAYLOAD: \"$payload\",\n PAYLOAD_TYPE: \"$mime_type_payload\",\n SHOW: \"$show\",\n SHOW_ACTIONS: \"$show.actions\",\n WORKER_ID: \"worker.id\",\n WORKER_VERSION: \"worker.version\",\n CLI_VERSION: \"cli.version\",\n SDK_VERSION: \"sdk.version\",\n SDK_LANGUAGE: \"sdk.language\",\n RETRY_AT: \"retry.at\",\n RETRY_DELAY: \"retry.delay\",\n RETRY_COUNT: \"retry.count\",\n LINK_TITLE: \"$link.title\",\n IDEMPOTENCY_KEY: \"ctx.run.idempotencyKey\",\n USAGE_DURATION_MS: \"$usage.durationMs\",\n USAGE_COST_IN_CENTS: \"$usage.costInCents\",\n RATE_LIMIT_LIMIT: \"response.rateLimit.limit\",\n RATE_LIMIT_REMAINING: \"response.rateLimit.remaining\",\n RATE_LIMIT_RESET: \"response.rateLimit.reset\",\n};\n","import { Attributes } from \"@opentelemetry/api\";\n\nexport const NULL_SENTINEL = \"$@null((\";\n\nexport function flattenAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | null | undefined,\n prefix?: string\n): Attributes {\n const result: Attributes = {};\n\n // Check if obj is null or undefined\n if (obj === undefined) {\n return result;\n }\n\n if (obj === null) {\n result[prefix || \"\"] = NULL_SENTINEL;\n return result;\n }\n\n if (typeof obj === \"string\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"number\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n if (typeof obj === \"boolean\") {\n result[prefix || \"\"] = obj;\n return result;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const newPrefix = `${prefix ? `${prefix}.` : \"\"}${Array.isArray(obj) ? `[${key}]` : key}`;\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n if (typeof value[i] === \"object\" && value[i] !== null) {\n // update null check here as well\n Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));\n } else {\n if (value[i] === null) {\n result[`${newPrefix}.[${i}]`] = NULL_SENTINEL;\n } else {\n result[`${newPrefix}.[${i}]`] = value[i];\n }\n }\n }\n } else if (isRecord(value)) {\n // update null check here\n Object.assign(result, flattenAttributes(value, newPrefix));\n } else {\n if (typeof value === \"number\" || typeof value === \"string\" || typeof value === \"boolean\") {\n result[newPrefix] = value;\n } else if (value === null) {\n result[newPrefix] = NULL_SENTINEL;\n }\n }\n }\n\n return result;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function unflattenAttributes(\n obj: Attributes\n): Record<string, unknown> | string | number | boolean | null | undefined {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return obj;\n }\n\n if (\n typeof obj === \"object\" &&\n obj !== null &&\n Object.keys(obj).length === 1 &&\n Object.keys(obj)[0] === \"\"\n ) {\n return rehydrateNull(obj[\"\"]) as any;\n }\n\n if (Object.keys(obj).length === 0) {\n return;\n }\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const parts = key.split(\".\").reduce((acc, part) => {\n if (part.includes(\"[\")) {\n // Handling nested array indices\n const subparts = part.split(/\\[|\\]/).filter((p) => p !== \"\");\n acc.push(...subparts);\n } else {\n acc.push(part);\n }\n return acc;\n }, [] as string[]);\n\n let current: any = result;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n const nextPart = parts[i + 1];\n const isArray = /^\\d+$/.test(nextPart);\n if (isArray && !Array.isArray(current[part])) {\n current[part] = [];\n } else if (!isArray && current[part] === undefined) {\n current[part] = {};\n }\n current = current[part];\n }\n const lastPart = parts[parts.length - 1];\n current[lastPart] = rehydrateNull(value);\n }\n\n // Convert the result to an array if all top-level keys are numeric indices\n if (Object.keys(result).every((k) => /^\\d+$/.test(k))) {\n const maxIndex = Math.max(...Object.keys(result).map((k) => parseInt(k)));\n const arrayResult = Array(maxIndex + 1);\n for (const key in result) {\n arrayResult[parseInt(key)] = result[key];\n }\n return arrayResult as any;\n }\n\n return result;\n}\n\nexport function primitiveValueOrflattenedAttributes(\n obj: Record<string, unknown> | Array<unknown> | string | boolean | number | undefined,\n prefix: string | undefined\n): Attributes | string | number | boolean | undefined {\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null ||\n obj === undefined\n ) {\n return obj;\n }\n\n const attributes = flattenAttributes(obj, prefix);\n\n if (\n prefix !== undefined &&\n typeof attributes[prefix] !== \"undefined\" &&\n attributes[prefix] !== null\n ) {\n return attributes[prefix] as unknown as Attributes;\n }\n\n return attributes;\n}\n\nfunction rehydrateNull(value: any): any {\n if (value === NULL_SENTINEL) {\n return null;\n }\n\n return value;\n}\n","import { Attributes } from \"@opentelemetry/api\";\nimport { Accessory } from \"../schemas\";\nimport { flattenAttributes } from \"./flattenAttributes\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\n\nexport function accessoryAttributes(accessory: Accessory): Attributes {\n return flattenAttributes(accessory, SemanticInternalAttributes.STYLE_ACCESSORY);\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"]}