@trigger.dev/sdk 0.0.0-prerelease-20241023140846 → 0.0.0-prerelease-20241119135607
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.
- package/dist/commonjs/triggers/invokeTrigger.d.ts +1 -1
- package/dist/commonjs/types.d.ts +4 -4
- package/dist/commonjs/v3/auth.d.ts +104 -0
- package/dist/commonjs/v3/auth.js +102 -0
- package/dist/commonjs/v3/auth.js.map +1 -0
- package/dist/commonjs/v3/idempotencyKeys.d.ts +2 -46
- package/dist/commonjs/v3/idempotencyKeys.js +1 -69
- package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
- package/dist/commonjs/v3/index.d.ts +4 -19
- package/dist/commonjs/v3/index.js +18 -35
- package/dist/commonjs/v3/index.js.map +1 -1
- package/dist/commonjs/v3/metadata.d.ts +75 -12
- package/dist/commonjs/v3/metadata.js +93 -53
- package/dist/commonjs/v3/metadata.js.map +1 -1
- package/dist/commonjs/v3/runs.d.ts +33 -756
- package/dist/commonjs/v3/runs.js +12 -1
- package/dist/commonjs/v3/runs.js.map +1 -1
- package/dist/commonjs/v3/shared.d.ts +10 -380
- package/dist/commonjs/v3/shared.js +125 -68
- package/dist/commonjs/v3/shared.js.map +1 -1
- package/dist/commonjs/v3/tasks.d.ts +6 -5
- package/dist/commonjs/v3/tasks.js +4 -5
- package/dist/commonjs/v3/tasks.js.map +1 -1
- package/dist/commonjs/v3/tracer.d.ts +1 -1
- package/dist/commonjs/v3/tracer.js +2 -2
- package/dist/commonjs/v3/tracer.js.map +1 -1
- package/dist/commonjs/v3/waitUntil.d.ts +9 -0
- package/dist/commonjs/v3/waitUntil.js +16 -0
- package/dist/commonjs/v3/waitUntil.js.map +1 -0
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/auth.d.ts +104 -0
- package/dist/esm/v3/auth.js +98 -0
- package/dist/esm/v3/auth.js.map +1 -0
- package/dist/esm/v3/idempotencyKeys.d.ts +2 -46
- package/dist/esm/v3/idempotencyKeys.js +1 -68
- package/dist/esm/v3/idempotencyKeys.js.map +1 -1
- package/dist/esm/v3/index-browser.d.mts +2 -0
- package/dist/esm/v3/index-browser.mjs +3 -0
- package/dist/esm/v3/index.d.ts +4 -19
- package/dist/esm/v3/index.js +4 -22
- package/dist/esm/v3/index.js.map +1 -1
- package/dist/esm/v3/metadata.d.ts +75 -12
- package/dist/esm/v3/metadata.js +94 -54
- package/dist/esm/v3/metadata.js.map +1 -1
- package/dist/esm/v3/runs.d.ts +61 -784
- package/dist/esm/v3/runs.js +12 -1
- package/dist/esm/v3/runs.js.map +1 -1
- package/dist/esm/v3/shared.d.ts +10 -380
- package/dist/esm/v3/shared.js +121 -65
- package/dist/esm/v3/shared.js.map +1 -1
- package/dist/esm/v3/tasks.d.ts +6 -5
- package/dist/esm/v3/tasks.js +4 -4
- package/dist/esm/v3/tasks.js.map +1 -1
- package/dist/esm/v3/tracer.d.ts +1 -1
- package/dist/esm/v3/tracer.js +1 -1
- package/dist/esm/v3/tracer.js.map +1 -1
- package/dist/esm/v3/waitUntil.d.ts +9 -0
- package/dist/esm/v3/waitUntil.js +13 -0
- package/dist/esm/v3/waitUntil.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/package.json +9 -5
- package/dist/browser/apiClient.d.ts +0 -737
- package/dist/browser/apiClient.js +0 -687
- package/dist/browser/apiClient.js.map +0 -1
- package/dist/browser/concurrencyLimit.d.ts +0 -10
- package/dist/browser/concurrencyLimit.js +0 -13
- package/dist/browser/concurrencyLimit.js.map +0 -1
- package/dist/browser/errors.d.ts +0 -66
- package/dist/browser/errors.js +0 -95
- package/dist/browser/errors.js.map +0 -1
- package/dist/browser/httpEndpoint.d.ts +0 -87
- package/dist/browser/httpEndpoint.js +0 -125
- package/dist/browser/httpEndpoint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -23
- package/dist/browser/index.js +0 -35
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/integrations.d.ts +0 -11
- package/dist/browser/integrations.js +0 -2
- package/dist/browser/integrations.js.map +0 -1
- package/dist/browser/io.d.ts +0 -453
- package/dist/browser/io.js +0 -1159
- package/dist/browser/io.js.map +0 -1
- package/dist/browser/ioWithIntegrations.d.ts +0 -4
- package/dist/browser/ioWithIntegrations.js +0 -29
- package/dist/browser/ioWithIntegrations.js.map +0 -1
- package/dist/browser/job.d.ts +0 -96
- package/dist/browser/job.js +0 -206
- package/dist/browser/job.js.map +0 -1
- package/dist/browser/retry.d.ts +0 -20
- package/dist/browser/retry.js +0 -19
- package/dist/browser/retry.js.map +0 -1
- package/dist/browser/runLocalStorage.d.ts +0 -8
- package/dist/browser/runLocalStorage.js +0 -3
- package/dist/browser/runLocalStorage.js.map +0 -1
- package/dist/browser/security.d.ts +0 -18
- package/dist/browser/security.js +0 -34
- package/dist/browser/security.js.map +0 -1
- package/dist/browser/status.d.ts +0 -19
- package/dist/browser/status.js +0 -34
- package/dist/browser/status.js.map +0 -1
- package/dist/browser/store/keyValueStore.d.ts +0 -17
- package/dist/browser/store/keyValueStore.js +0 -134
- package/dist/browser/store/keyValueStore.js.map +0 -1
- package/dist/browser/store/keyValueStoreClient.d.ts +0 -19
- package/dist/browser/store/keyValueStoreClient.js +0 -61
- package/dist/browser/store/keyValueStoreClient.js.map +0 -1
- package/dist/browser/triggerClient.d.ts +0 -300
- package/dist/browser/triggerClient.js +0 -1359
- package/dist/browser/triggerClient.js.map +0 -1
- package/dist/browser/triggers/dynamic.d.ts +0 -56
- package/dist/browser/triggers/dynamic.js +0 -93
- package/dist/browser/triggers/dynamic.js.map +0 -1
- package/dist/browser/triggers/eventTrigger.d.ts +0 -58
- package/dist/browser/triggers/eventTrigger.js +0 -64
- package/dist/browser/triggers/eventTrigger.js.map +0 -1
- package/dist/browser/triggers/externalSource.d.ts +0 -148
- package/dist/browser/triggers/externalSource.js +0 -100
- package/dist/browser/triggers/externalSource.js.map +0 -1
- package/dist/browser/triggers/invokeTrigger.d.ts +0 -39
- package/dist/browser/triggers/invokeTrigger.js +0 -53
- package/dist/browser/triggers/invokeTrigger.js.map +0 -1
- package/dist/browser/triggers/notifications.d.ts +0 -111
- package/dist/browser/triggers/notifications.js +0 -94
- package/dist/browser/triggers/notifications.js.map +0 -1
- package/dist/browser/triggers/scheduled.d.ts +0 -145
- package/dist/browser/triggers/scheduled.js +0 -197
- package/dist/browser/triggers/scheduled.js.map +0 -1
- package/dist/browser/triggers/webhook.d.ts +0 -143
- package/dist/browser/triggers/webhook.js +0 -128
- package/dist/browser/triggers/webhook.js.map +0 -1
- package/dist/browser/typed-emitter.d.ts +0 -37
- package/dist/browser/typed-emitter.js +0 -2
- package/dist/browser/typed-emitter.js.map +0 -1
- package/dist/browser/types.d.ts +0 -204
- package/dist/browser/types.js +0 -19
- package/dist/browser/types.js.map +0 -1
- package/dist/browser/utils/formatSchemaErrors.d.ts +0 -3
- package/dist/browser/utils/formatSchemaErrors.js +0 -7
- package/dist/browser/utils/formatSchemaErrors.js.map +0 -1
- package/dist/browser/utils/typedAsyncLocalStorage.d.ts +0 -6
- package/dist/browser/utils/typedAsyncLocalStorage.js +0 -14
- package/dist/browser/utils/typedAsyncLocalStorage.js.map +0 -1
- package/dist/browser/utils.d.ts +0 -1
- package/dist/browser/utils.js +0 -8
- package/dist/browser/utils.js.map +0 -1
- package/dist/browser/v3/cache.d.ts +0 -28
- package/dist/browser/v3/cache.js +0 -58
- package/dist/browser/v3/cache.js.map +0 -1
- package/dist/browser/v3/config.d.ts +0 -4
- package/dist/browser/v3/config.js +0 -4
- package/dist/browser/v3/config.js.map +0 -1
- package/dist/browser/v3/envvars.d.ts +0 -14
- package/dist/browser/v3/envvars.js +0 -219
- package/dist/browser/v3/envvars.js.map +0 -1
- package/dist/browser/v3/idempotencyKeys.d.ts +0 -44
- package/dist/browser/v3/idempotencyKeys.js +0 -72
- package/dist/browser/v3/idempotencyKeys.js.map +0 -1
- package/dist/browser/v3/index.d.ts +0 -21
- package/dist/browser/v3/index.js +0 -17
- package/dist/browser/v3/metadata.d.ts +0 -87
- package/dist/browser/v3/metadata.js +0 -105
- package/dist/browser/v3/metadata.js.map +0 -1
- package/dist/browser/v3/retry.d.ts +0 -15
- package/dist/browser/v3/retry.js +0 -408
- package/dist/browser/v3/retry.js.map +0 -1
- package/dist/browser/v3/runs.d.ts +0 -180
- package/dist/browser/v3/runs.js +0 -204
- package/dist/browser/v3/runs.js.map +0 -1
- package/dist/browser/v3/schedules/api.d.ts +0 -1
- package/dist/browser/v3/schedules/api.js +0 -2
- package/dist/browser/v3/schedules/api.js.map +0 -1
- package/dist/browser/v3/schedules/index.d.ts +0 -87
- package/dist/browser/v3/schedules/index.js +0 -215
- package/dist/browser/v3/schedules/index.js.map +0 -1
- package/dist/browser/v3/shared.d.ts +0 -90
- package/dist/browser/v3/shared.js +0 -546
- package/dist/browser/v3/shared.js.map +0 -1
- package/dist/browser/v3/tags.d.ts +0 -6
- package/dist/browser/v3/tags.js +0 -43
- package/dist/browser/v3/tags.js.map +0 -1
- package/dist/browser/v3/tasks.d.ts +0 -31
- package/dist/browser/v3/tasks.js +0 -30
- package/dist/browser/v3/tasks.js.map +0 -1
- package/dist/browser/v3/timeout.d.ts +0 -4
- package/dist/browser/v3/timeout.js +0 -7
- package/dist/browser/v3/timeout.js.map +0 -1
- package/dist/browser/v3/tracer.d.ts +0 -2
- package/dist/browser/v3/tracer.js +0 -4
- package/dist/browser/v3/tracer.js.map +0 -1
- package/dist/browser/v3/usage.d.ts +0 -77
- package/dist/browser/v3/usage.js +0 -112
- package/dist/browser/v3/usage.js.map +0 -1
- package/dist/browser/v3/wait.d.ts +0 -22
- package/dist/browser/v3/wait.js +0 -96
- package/dist/browser/v3/wait.js.map +0 -1
- package/dist/browser/version.d.ts +0 -1
- package/dist/browser/version.js +0 -2
- package/dist/browser/version.js.map +0 -1
- /package/dist/{browser → esm}/v3/index-browser.mjs.map +0 -0
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { mergeRequestOptions, runMetadata, } from "@trigger.dev/core/v3";
|
|
2
|
-
import { tracer } from "./tracer.js";
|
|
3
|
-
/**
|
|
4
|
-
* Provides access to run metadata operations.
|
|
5
|
-
* @namespace
|
|
6
|
-
* @property {Function} current - Get the current run's metadata.
|
|
7
|
-
* @property {Function} get - Get a specific key from the current run's metadata.
|
|
8
|
-
* @property {Function} set - Set a key in the current run's metadata.
|
|
9
|
-
* @property {Function} del - Delete a key from the current run's metadata.
|
|
10
|
-
* @property {Function} save - Update the entire metadata object for the current run.
|
|
11
|
-
*/
|
|
12
|
-
export const metadata = {
|
|
13
|
-
current: currentMetadata,
|
|
14
|
-
get: getMetadataKey,
|
|
15
|
-
set: setMetadataKey,
|
|
16
|
-
del: deleteMetadataKey,
|
|
17
|
-
save: saveMetadata,
|
|
18
|
-
replace: replaceMetadata,
|
|
19
|
-
flush: flushMetadata,
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Returns the metadata of the current run if inside a task run.
|
|
23
|
-
* This function allows you to access the entire metadata object for the current run.
|
|
24
|
-
*
|
|
25
|
-
* @returns {RunMetadata | undefined} The current run's metadata or undefined if not in a run context.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* const currentMetadata = metadata.current();
|
|
29
|
-
* console.log(currentMetadata);
|
|
30
|
-
*/
|
|
31
|
-
function currentMetadata() {
|
|
32
|
-
return runMetadata.current();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get a specific key from the metadata of the current run if inside a task run.
|
|
36
|
-
*
|
|
37
|
-
* @param {string} key - The key to retrieve from the metadata.
|
|
38
|
-
* @returns {DeserializedJson | undefined} The value associated with the key, or undefined if not found or not in a run context.
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* const user = metadata.get("user");
|
|
42
|
-
* console.log(user.name); // "Eric"
|
|
43
|
-
* console.log(user.id); // "user_1234"
|
|
44
|
-
*/
|
|
45
|
-
function getMetadataKey(key) {
|
|
46
|
-
return runMetadata.getKey(key);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Set a key in the metadata of the current run if inside a task run.
|
|
50
|
-
* This function allows you to update or add a new key-value pair to the run's metadata.
|
|
51
|
-
*
|
|
52
|
-
* @param {string} key - The key to set in the metadata.
|
|
53
|
-
* @param {DeserializedJson} value - The value to associate with the key.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* metadata.set("progress", 0.5);
|
|
57
|
-
*/
|
|
58
|
-
function setMetadataKey(key, value) {
|
|
59
|
-
runMetadata.setKey(key, value);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Delete a key from the metadata of the current run if inside a task run.
|
|
63
|
-
*
|
|
64
|
-
* @param {string} key - The key to delete from the metadata.
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* metadata.del("progress");
|
|
68
|
-
*/
|
|
69
|
-
function deleteMetadataKey(key) {
|
|
70
|
-
runMetadata.deleteKey(key);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Update the entire metadata object for the current run if inside a task run.
|
|
74
|
-
* This function allows you to replace the entire metadata object with a new one.
|
|
75
|
-
*
|
|
76
|
-
* @param {RunMetadata} metadata - The new metadata object to set for the run.
|
|
77
|
-
* @returns {void}
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* metadata.replace({ progress: 0.6, user: { name: "Alice", id: "user_5678" } });
|
|
81
|
-
*/
|
|
82
|
-
function replaceMetadata(metadata) {
|
|
83
|
-
runMetadata.update(metadata);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* @deprecated Use `metadata.replace()` instead.
|
|
87
|
-
*/
|
|
88
|
-
function saveMetadata(metadata) {
|
|
89
|
-
runMetadata.update(metadata);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Flushes metadata to the Trigger.dev instance
|
|
93
|
-
*
|
|
94
|
-
* @param {ApiRequestOptions} [requestOptions] - Optional request options to customize the API request.
|
|
95
|
-
* @returns {Promise<void>} A promise that resolves when the metadata flush operation is complete.
|
|
96
|
-
*/
|
|
97
|
-
async function flushMetadata(requestOptions) {
|
|
98
|
-
const $requestOptions = mergeRequestOptions({
|
|
99
|
-
tracer,
|
|
100
|
-
name: "metadata.flush()",
|
|
101
|
-
icon: "code-plus",
|
|
102
|
-
}, requestOptions);
|
|
103
|
-
await runMetadata.flush($requestOptions);
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/v3/metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,mBAAmB,EACnB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,aAAa;CACrB,CAAC;AAIF;;;;;;;;;GASG;AACH,SAAS,eAAe;IACtB,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,KAAuB;IAC1D,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,QAAqB;IAC5C,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAqB;IACzC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAC,cAAkC;IAC7D,MAAM,eAAe,GAAG,mBAAmB,CACzC;QACE,MAAM;QACN,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,WAAW;KAClB,EACD,cAAc,CACf,CAAC;IAEF,MAAM,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { FetchRetryOptions, RetryOptions } from "@trigger.dev/core/v3";
|
|
2
|
-
export type { RetryOptions };
|
|
3
|
-
declare function onThrow<T>(fn: (options: {
|
|
4
|
-
attempt: number;
|
|
5
|
-
maxAttempts: number;
|
|
6
|
-
}) => Promise<T>, options: RetryOptions): Promise<T>;
|
|
7
|
-
export interface RetryFetchRequestInit extends RequestInit {
|
|
8
|
-
retry?: FetchRetryOptions;
|
|
9
|
-
timeoutInMs?: number;
|
|
10
|
-
}
|
|
11
|
-
declare function retryFetch(input: RequestInfo | URL, init?: RetryFetchRequestInit | undefined): Promise<Response>;
|
|
12
|
-
export declare const retry: {
|
|
13
|
-
onThrow: typeof onThrow;
|
|
14
|
-
fetch: typeof retryFetch;
|
|
15
|
-
};
|
package/dist/browser/v3/retry.js
DELETED
|
@@ -1,408 +0,0 @@
|
|
|
1
|
-
import { SpanStatusCode, context, trace } from "@opentelemetry/api";
|
|
2
|
-
import { SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_METHOD, SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH, SEMATTRS_HTTP_SCHEME, SEMATTRS_HTTP_STATUS_CODE, SEMATTRS_HTTP_URL, } from "@opentelemetry/semantic-conventions";
|
|
3
|
-
import { SemanticInternalAttributes, accessoryAttributes, calculateNextRetryDelay, calculateResetAt, defaultFetchRetryOptions, defaultRetryOptions, eventFilterMatches, flattenAttributes, runtime, } from "@trigger.dev/core/v3";
|
|
4
|
-
import { tracer } from "./tracer.js";
|
|
5
|
-
function onThrow(fn, options) {
|
|
6
|
-
const opts = {
|
|
7
|
-
...defaultRetryOptions,
|
|
8
|
-
...options,
|
|
9
|
-
};
|
|
10
|
-
return tracer.startActiveSpan(`retry.onThrow()`, async (span) => {
|
|
11
|
-
let attempt = 1;
|
|
12
|
-
while (attempt <= opts.maxAttempts) {
|
|
13
|
-
const innerSpan = tracer.startSpan("retry.fn()", {
|
|
14
|
-
attributes: {
|
|
15
|
-
[SemanticInternalAttributes.STYLE_ICON]: "function",
|
|
16
|
-
...accessoryAttributes({
|
|
17
|
-
items: [
|
|
18
|
-
{
|
|
19
|
-
text: `${attempt}/${opts.maxAttempts}`,
|
|
20
|
-
variant: "normal",
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
style: "codepath",
|
|
24
|
-
}),
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
const contextWithSpanSet = trace.setSpan(context.active(), innerSpan);
|
|
28
|
-
try {
|
|
29
|
-
const result = await context.with(contextWithSpanSet, async () => {
|
|
30
|
-
return fn({ attempt, maxAttempts: opts.maxAttempts });
|
|
31
|
-
});
|
|
32
|
-
innerSpan.end();
|
|
33
|
-
return result;
|
|
34
|
-
}
|
|
35
|
-
catch (e) {
|
|
36
|
-
if (e instanceof Error || typeof e === "string") {
|
|
37
|
-
innerSpan.recordException(e);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
innerSpan.recordException(String(e));
|
|
41
|
-
}
|
|
42
|
-
innerSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
43
|
-
if (e instanceof Error && e.name === "AbortTaskRunError") {
|
|
44
|
-
innerSpan.end();
|
|
45
|
-
throw e;
|
|
46
|
-
}
|
|
47
|
-
const nextRetryDelay = calculateNextRetryDelay(opts, attempt);
|
|
48
|
-
if (!nextRetryDelay) {
|
|
49
|
-
innerSpan.end();
|
|
50
|
-
throw e;
|
|
51
|
-
}
|
|
52
|
-
innerSpan.setAttribute(SemanticInternalAttributes.RETRY_AT, new Date(Date.now() + nextRetryDelay).toISOString());
|
|
53
|
-
innerSpan.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);
|
|
54
|
-
innerSpan.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);
|
|
55
|
-
innerSpan.end();
|
|
56
|
-
await runtime.waitForDuration(nextRetryDelay);
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
attempt++;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
throw new Error("Max attempts reached");
|
|
63
|
-
}, {
|
|
64
|
-
attributes: {
|
|
65
|
-
[SemanticInternalAttributes.STYLE_ICON]: "arrow-capsule",
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
const normalizeUrlFromInput = (input) => {
|
|
70
|
-
if (typeof input === "string") {
|
|
71
|
-
return new URL(input);
|
|
72
|
-
}
|
|
73
|
-
if (input instanceof URL) {
|
|
74
|
-
return input;
|
|
75
|
-
}
|
|
76
|
-
return new URL(input.url);
|
|
77
|
-
};
|
|
78
|
-
const normalizeHttpMethod = (input, init) => {
|
|
79
|
-
if (typeof input === "string" || input instanceof URL) {
|
|
80
|
-
return (init?.method || "GET").toUpperCase();
|
|
81
|
-
}
|
|
82
|
-
return (input.method ?? init?.method ?? "GET").toUpperCase();
|
|
83
|
-
};
|
|
84
|
-
class FetchErrorWithSpan extends Error {
|
|
85
|
-
originalError;
|
|
86
|
-
span;
|
|
87
|
-
constructor(originalError, span) {
|
|
88
|
-
super("Fetch error");
|
|
89
|
-
this.originalError = originalError;
|
|
90
|
-
this.span = span;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const MAX_ATTEMPTS = 10;
|
|
94
|
-
async function retryFetch(input, init) {
|
|
95
|
-
return tracer.startActiveSpan("retry.fetch()", async (span) => {
|
|
96
|
-
let attempt = 1;
|
|
97
|
-
while (true) {
|
|
98
|
-
try {
|
|
99
|
-
const abortController = new AbortController();
|
|
100
|
-
const timeoutId = init?.timeoutInMs
|
|
101
|
-
? setTimeout(() => {
|
|
102
|
-
abortController.abort();
|
|
103
|
-
}, init?.timeoutInMs)
|
|
104
|
-
: undefined;
|
|
105
|
-
init?.signal?.addEventListener("abort", () => {
|
|
106
|
-
abortController.abort();
|
|
107
|
-
});
|
|
108
|
-
const [response, span] = await doFetchRequest(input, { ...(init ?? {}), signal: abortController.signal }, attempt);
|
|
109
|
-
if (timeoutId) {
|
|
110
|
-
clearTimeout(timeoutId);
|
|
111
|
-
}
|
|
112
|
-
if (response.ok) {
|
|
113
|
-
span.setAttributes(createFetchResponseAttributes(response));
|
|
114
|
-
span.end();
|
|
115
|
-
return response;
|
|
116
|
-
}
|
|
117
|
-
const nextRetry = await calculateRetryDelayForResponse(resolveDefaults(init?.retry, "byStatus", defaultFetchRetryOptions.byStatus), response, attempt);
|
|
118
|
-
if (!nextRetry) {
|
|
119
|
-
span.setAttributes(createFetchResponseAttributes(response));
|
|
120
|
-
span.end();
|
|
121
|
-
return response;
|
|
122
|
-
}
|
|
123
|
-
if (attempt >= MAX_ATTEMPTS) {
|
|
124
|
-
span.setAttributes(createFetchResponseAttributes(response));
|
|
125
|
-
span.end();
|
|
126
|
-
return response;
|
|
127
|
-
}
|
|
128
|
-
if (nextRetry.type === "delay") {
|
|
129
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_AT, new Date(Date.now() + nextRetry.value).toISOString());
|
|
130
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);
|
|
131
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetry.value}ms`);
|
|
132
|
-
span.end();
|
|
133
|
-
await runtime.waitForDuration(nextRetry.value);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
const now = Date.now();
|
|
137
|
-
const nextRetryDate = new Date(nextRetry.value);
|
|
138
|
-
const isInFuture = nextRetryDate.getTime() > now;
|
|
139
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_AT, new Date(nextRetry.value).toISOString());
|
|
140
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);
|
|
141
|
-
if (isInFuture) {
|
|
142
|
-
span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetry.value - now}ms`);
|
|
143
|
-
}
|
|
144
|
-
span.end();
|
|
145
|
-
await runtime.waitUntil(new Date(nextRetry.value));
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch (e) {
|
|
149
|
-
if (e instanceof FetchErrorWithSpan && e.originalError instanceof Error) {
|
|
150
|
-
if (e.originalError.name === "AbortError") {
|
|
151
|
-
const nextRetryDelay = calculateNextRetryDelay(resolveDefaults(init?.retry, "timeout", defaultFetchRetryOptions.timeout), attempt);
|
|
152
|
-
if (!nextRetryDelay) {
|
|
153
|
-
e.span.end();
|
|
154
|
-
throw e;
|
|
155
|
-
}
|
|
156
|
-
if (attempt >= MAX_ATTEMPTS) {
|
|
157
|
-
e.span.end();
|
|
158
|
-
throw e;
|
|
159
|
-
}
|
|
160
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_AT, new Date(Date.now() + nextRetryDelay).toISOString());
|
|
161
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);
|
|
162
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);
|
|
163
|
-
e.span.end();
|
|
164
|
-
await runtime.waitForDuration(nextRetryDelay);
|
|
165
|
-
continue; // Move to the next attempt
|
|
166
|
-
}
|
|
167
|
-
else if (e.originalError.name === "TypeError" &&
|
|
168
|
-
"cause" in e.originalError &&
|
|
169
|
-
e.originalError.cause instanceof Error) {
|
|
170
|
-
const nextRetryDelay = calculateNextRetryDelay(resolveDefaults(init?.retry, "connectionError", defaultFetchRetryOptions.connectionError), attempt);
|
|
171
|
-
if (!nextRetryDelay) {
|
|
172
|
-
e.span.end();
|
|
173
|
-
throw e;
|
|
174
|
-
}
|
|
175
|
-
if (attempt >= MAX_ATTEMPTS) {
|
|
176
|
-
e.span.end();
|
|
177
|
-
throw e;
|
|
178
|
-
}
|
|
179
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_AT, new Date(Date.now() + nextRetryDelay).toISOString());
|
|
180
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);
|
|
181
|
-
e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);
|
|
182
|
-
e.span.end();
|
|
183
|
-
await runtime.waitForDuration(nextRetryDelay);
|
|
184
|
-
continue; // Move to the next attempt
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
if (e instanceof FetchErrorWithSpan) {
|
|
188
|
-
e.span.end();
|
|
189
|
-
}
|
|
190
|
-
throw e;
|
|
191
|
-
}
|
|
192
|
-
finally {
|
|
193
|
-
attempt++;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}, {
|
|
197
|
-
attributes: {
|
|
198
|
-
[SemanticInternalAttributes.STYLE_ICON]: "arrow-capsule",
|
|
199
|
-
...createFetchAttributes(input, init),
|
|
200
|
-
...createFetchRetryOptionsAttributes(init?.retry),
|
|
201
|
-
},
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
const doFetchRequest = async (input, init, attemptCount = 0) => {
|
|
205
|
-
const httpMethod = normalizeHttpMethod(input, init);
|
|
206
|
-
const span = tracer.startSpan(`HTTP ${httpMethod}`, {
|
|
207
|
-
attributes: {
|
|
208
|
-
[SemanticInternalAttributes.STYLE_ICON]: "world",
|
|
209
|
-
...(attemptCount > 1 ? { ["http.request.resend_count"]: attemptCount - 1 } : {}),
|
|
210
|
-
...createFetchAttributes(input, init),
|
|
211
|
-
},
|
|
212
|
-
});
|
|
213
|
-
try {
|
|
214
|
-
const response = await fetch(input, {
|
|
215
|
-
...init,
|
|
216
|
-
headers: {
|
|
217
|
-
...init?.headers,
|
|
218
|
-
"x-retry-count": attemptCount.toString(),
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
span.setAttributes(createFetchResponseAttributes(response));
|
|
222
|
-
if (!response.ok) {
|
|
223
|
-
span.recordException(`${response.status}: ${response.statusText}`);
|
|
224
|
-
span.setStatus({
|
|
225
|
-
code: SpanStatusCode.ERROR,
|
|
226
|
-
message: `${response.status}: ${response.statusText}`,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
return [response, span];
|
|
230
|
-
}
|
|
231
|
-
catch (e) {
|
|
232
|
-
if (typeof e === "string" || e instanceof Error) {
|
|
233
|
-
span.recordException(e);
|
|
234
|
-
}
|
|
235
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
236
|
-
span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, 0);
|
|
237
|
-
span.setAttribute("http.status_text", "This operation was aborted.");
|
|
238
|
-
throw new FetchErrorWithSpan(e, span);
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
const calculateRetryDelayForResponse = async (retry, response, attemptCount) => {
|
|
242
|
-
if (!retry) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
const strategy = await getRetryStrategyForResponse(response, retry);
|
|
246
|
-
if (!strategy) {
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
switch (strategy.strategy) {
|
|
250
|
-
case "backoff": {
|
|
251
|
-
const value = calculateNextRetryDelay({ ...defaultRetryOptions, ...strategy }, attemptCount);
|
|
252
|
-
if (value) {
|
|
253
|
-
return { type: "delay", value };
|
|
254
|
-
}
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
case "headers": {
|
|
258
|
-
const resetAt = response.headers.get(strategy.resetHeader);
|
|
259
|
-
if (typeof resetAt === "string") {
|
|
260
|
-
const resetTimestamp = calculateResetAt(resetAt, strategy.resetFormat ?? "unix_timestamp_in_ms");
|
|
261
|
-
if (resetTimestamp) {
|
|
262
|
-
return { type: "timestamp", value: resetTimestamp };
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
break;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return;
|
|
269
|
-
};
|
|
270
|
-
const getRetryStrategyForResponse = async (response, retry) => {
|
|
271
|
-
const statusCodes = Object.keys(retry);
|
|
272
|
-
const clonedResponse = response.clone();
|
|
273
|
-
for (let i = 0; i < statusCodes.length; i++) {
|
|
274
|
-
const statusRange = statusCodes[i];
|
|
275
|
-
if (!statusRange) {
|
|
276
|
-
continue;
|
|
277
|
-
}
|
|
278
|
-
const strategy = retry[statusRange];
|
|
279
|
-
if (!strategy) {
|
|
280
|
-
continue;
|
|
281
|
-
}
|
|
282
|
-
if (isStatusCodeInRange(response.status, statusRange)) {
|
|
283
|
-
if (strategy.bodyFilter) {
|
|
284
|
-
const body = safeJsonParse(await clonedResponse.text());
|
|
285
|
-
if (!body) {
|
|
286
|
-
continue;
|
|
287
|
-
}
|
|
288
|
-
if (eventFilterMatches(body, strategy.bodyFilter)) {
|
|
289
|
-
return strategy;
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
continue;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return strategy;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return;
|
|
299
|
-
};
|
|
300
|
-
/**
|
|
301
|
-
* Checks if a given status code falls within a given range.
|
|
302
|
-
* The range can be a single status code (e.g. "200"),
|
|
303
|
-
* a range of status codes (e.g. "500-599"),
|
|
304
|
-
* a range of status codes with a wildcard (e.g. "4xx" for any 4xx status code),
|
|
305
|
-
* or a list of status codes separated by commas (e.g. "401,403,404,409-412,5xx").
|
|
306
|
-
* Returns `true` if the status code falls within the range, and `false` otherwise.
|
|
307
|
-
*/
|
|
308
|
-
const isStatusCodeInRange = (statusCode, statusRange) => {
|
|
309
|
-
if (statusRange === "all") {
|
|
310
|
-
return true;
|
|
311
|
-
}
|
|
312
|
-
if (statusRange.includes(",")) {
|
|
313
|
-
const statusCodes = statusRange.split(",").map((s) => s.trim());
|
|
314
|
-
return statusCodes.some((s) => isStatusCodeInRange(statusCode, s));
|
|
315
|
-
}
|
|
316
|
-
const [start, end] = statusRange.split("-");
|
|
317
|
-
if (end) {
|
|
318
|
-
return statusCode >= parseInt(start ?? "0", 10) && statusCode <= parseInt(end, 10);
|
|
319
|
-
}
|
|
320
|
-
if (start?.endsWith("xx")) {
|
|
321
|
-
const prefix = start.slice(0, -2);
|
|
322
|
-
const statusCodePrefix = Math.floor(statusCode / 100).toString();
|
|
323
|
-
return statusCodePrefix === prefix;
|
|
324
|
-
}
|
|
325
|
-
if (!start) {
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
328
|
-
const statusCodeString = statusCode.toString();
|
|
329
|
-
const rangePrefix = start.slice(0, -1);
|
|
330
|
-
if (start.endsWith("x") && statusCodeString.startsWith(rangePrefix)) {
|
|
331
|
-
return true;
|
|
332
|
-
}
|
|
333
|
-
return statusCode === parseInt(start, 10);
|
|
334
|
-
};
|
|
335
|
-
const createAttributesFromHeaders = (headers) => {
|
|
336
|
-
const attributes = {};
|
|
337
|
-
const normalizedHeaderKey = (key) => {
|
|
338
|
-
return key.toLowerCase();
|
|
339
|
-
};
|
|
340
|
-
headers.forEach((value, key) => {
|
|
341
|
-
attributes[`http.response.header.${normalizedHeaderKey(key)}`] = value;
|
|
342
|
-
});
|
|
343
|
-
return attributes;
|
|
344
|
-
};
|
|
345
|
-
const safeJsonParse = (json) => {
|
|
346
|
-
try {
|
|
347
|
-
return JSON.parse(json);
|
|
348
|
-
}
|
|
349
|
-
catch (e) {
|
|
350
|
-
return null;
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
// This function will resolve the defaults of a property within an options object.
|
|
354
|
-
// If the options object is undefined, it will return the defaults for that property (passed in as the 3rd arg).
|
|
355
|
-
// if the options object is defined, and the property exists, then it will return the defaults if the value of the property is undefined or null
|
|
356
|
-
const resolveDefaults = (obj, key, defaults) => {
|
|
357
|
-
if (!obj) {
|
|
358
|
-
return defaults;
|
|
359
|
-
}
|
|
360
|
-
if (obj[key] === undefined || obj[key] === null) {
|
|
361
|
-
return defaults;
|
|
362
|
-
}
|
|
363
|
-
return obj[key];
|
|
364
|
-
};
|
|
365
|
-
const createFetchAttributes = (input, init) => {
|
|
366
|
-
const url = normalizeUrlFromInput(input);
|
|
367
|
-
const httpMethod = normalizeHttpMethod(input, init);
|
|
368
|
-
return {
|
|
369
|
-
[SEMATTRS_HTTP_METHOD]: httpMethod,
|
|
370
|
-
[SEMATTRS_HTTP_URL]: url.href,
|
|
371
|
-
[SEMATTRS_HTTP_HOST]: url.hostname,
|
|
372
|
-
["server.host"]: url.hostname,
|
|
373
|
-
["server.port"]: url.port,
|
|
374
|
-
[SEMATTRS_HTTP_SCHEME]: url.protocol.replace(":", ""),
|
|
375
|
-
...accessoryAttributes({
|
|
376
|
-
items: [
|
|
377
|
-
{
|
|
378
|
-
text: url.hostname,
|
|
379
|
-
variant: "normal",
|
|
380
|
-
},
|
|
381
|
-
],
|
|
382
|
-
style: "codepath",
|
|
383
|
-
}),
|
|
384
|
-
};
|
|
385
|
-
};
|
|
386
|
-
const createFetchResponseAttributes = (response) => {
|
|
387
|
-
return {
|
|
388
|
-
[SEMATTRS_HTTP_STATUS_CODE]: response.status,
|
|
389
|
-
"http.status_text": response.statusText,
|
|
390
|
-
[SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH]: response.headers.get("content-length") || "0",
|
|
391
|
-
...createAttributesFromHeaders(response.headers),
|
|
392
|
-
};
|
|
393
|
-
};
|
|
394
|
-
const createFetchRetryOptionsAttributes = (retry) => {
|
|
395
|
-
const byStatus = resolveDefaults(retry, "byStatus", defaultFetchRetryOptions.byStatus);
|
|
396
|
-
const connectionError = resolveDefaults(retry, "connectionError", defaultFetchRetryOptions.connectionError);
|
|
397
|
-
const timeout = resolveDefaults(retry, "timeout", defaultFetchRetryOptions.timeout);
|
|
398
|
-
return {
|
|
399
|
-
...flattenAttributes(byStatus, "retry.byStatus"),
|
|
400
|
-
...flattenAttributes(connectionError, "retry.connectionError"),
|
|
401
|
-
...flattenAttributes(timeout, "retry.timeout"),
|
|
402
|
-
};
|
|
403
|
-
};
|
|
404
|
-
export const retry = {
|
|
405
|
-
onThrow,
|
|
406
|
-
fetch: retryFetch,
|
|
407
|
-
};
|
|
408
|
-
//# sourceMappingURL=retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/v3/retry.ts"],"names":[],"mappings":"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"}
|