@workflow/core 5.0.0-beta.6 → 5.0.0-beta.7
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/classify-error.d.ts +4 -3
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +29 -5
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +52 -6
- package/dist/encryption.d.ts +7 -1
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +13 -6
- package/dist/runtime/constants.d.ts +47 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +86 -8
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +10 -2
- package/dist/runtime/replay-budget.d.ts +98 -0
- package/dist/runtime/replay-budget.d.ts.map +1 -0
- package/dist/runtime/replay-budget.js +191 -0
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +2 -1
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +4 -1
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +8 -1
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +10 -1
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +6 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +288 -174
- package/dist/serialization/types.d.ts +7 -0
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +1 -1
- package/dist/serialization.d.ts +1 -0
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +100 -11
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +17 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +15 -4
- package/dist/symbols.d.ts +16 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +17 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +13 -2
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +12 -3
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +22 -3
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +3 -3
- package/package.json +5 -5
package/dist/classify-error.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { type RunErrorCode } from '@workflow/errors';
|
|
1
|
+
import { type RunErrorCode, WorkflowWorldError } from '@workflow/errors';
|
|
2
2
|
/**
|
|
3
3
|
* Classify an error that caused a workflow run to fail.
|
|
4
4
|
*
|
|
5
5
|
* After the structural separation of infrastructure vs user code error
|
|
6
6
|
* handling, the only errors that reach the `run_failed` try/catch are:
|
|
7
7
|
* - User code errors (throws from workflow functions, propagated step failures)
|
|
8
|
-
* - WorkflowRuntimeError and subclasses (
|
|
9
|
-
*
|
|
8
|
+
* - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
|
|
9
|
+
* not registered, corrupted event log, etc.)
|
|
10
10
|
*
|
|
11
11
|
* Uses each subclass's `.is()` static (a name-based duck check) instead of
|
|
12
12
|
* a single `instanceof` check because workflows execute in a separate
|
|
@@ -15,5 +15,6 @@ import { type RunErrorCode } from '@workflow/errors';
|
|
|
15
15
|
* thrown inside the workflow VM and we'd misclassify genuine runtime
|
|
16
16
|
* errors as user errors.
|
|
17
17
|
*/
|
|
18
|
+
export declare function isWorldContractError(err: unknown): err is WorkflowWorldError;
|
|
18
19
|
export declare function classifyRunError(err: unknown): RunErrorCode;
|
|
19
20
|
//# sourceMappingURL=classify-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"classify-error.d.ts","sourceRoot":"","sources":["../src/classify-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAIjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAqB1B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,kBAAkB,CAe5E;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAe3D"}
|
package/dist/classify-error.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { RUN_ERROR_CODES, StepNotRegisteredError, WorkflowNotRegisteredError, WorkflowRuntimeError, } from '@workflow/errors';
|
|
1
|
+
import { CorruptedEventLogError, RUN_ERROR_CODES, StepNotRegisteredError, WorkflowNotRegisteredError, WorkflowRuntimeError, WorkflowWorldError, } from '@workflow/errors';
|
|
2
|
+
const WORLD_CONTRACT_ERROR_CODES = new Set([
|
|
3
|
+
'PARSE_ERROR',
|
|
4
|
+
'SCHEMA_VALIDATION',
|
|
5
|
+
RUN_ERROR_CODES.WORLD_CONTRACT_ERROR,
|
|
6
|
+
]);
|
|
2
7
|
/**
|
|
3
|
-
* Set of error names that should classify as `RUNTIME_ERROR`. Each
|
|
8
|
+
* Set of error names that should classify as generic `RUNTIME_ERROR`. Each
|
|
4
9
|
* `*.is()` static does a name-based duck check, so subclassing alone is
|
|
5
10
|
* not enough — we have to enumerate every concrete subclass we want to
|
|
6
11
|
* recognize. Keep in sync with the `WorkflowRuntimeError` class hierarchy
|
|
@@ -17,8 +22,8 @@ const RUNTIME_ERROR_CHECKS = [
|
|
|
17
22
|
* After the structural separation of infrastructure vs user code error
|
|
18
23
|
* handling, the only errors that reach the `run_failed` try/catch are:
|
|
19
24
|
* - User code errors (throws from workflow functions, propagated step failures)
|
|
20
|
-
* - WorkflowRuntimeError and subclasses (
|
|
21
|
-
*
|
|
25
|
+
* - WorkflowRuntimeError and subclasses (missing timestamps, workflow/step
|
|
26
|
+
* not registered, corrupted event log, etc.)
|
|
22
27
|
*
|
|
23
28
|
* Uses each subclass's `.is()` static (a name-based duck check) instead of
|
|
24
29
|
* a single `instanceof` check because workflows execute in a separate
|
|
@@ -27,7 +32,26 @@ const RUNTIME_ERROR_CHECKS = [
|
|
|
27
32
|
* thrown inside the workflow VM and we'd misclassify genuine runtime
|
|
28
33
|
* errors as user errors.
|
|
29
34
|
*/
|
|
35
|
+
export function isWorldContractError(err) {
|
|
36
|
+
if (!WorkflowWorldError.is(err) || err.status !== undefined) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const cause = 'cause' in err ? err.cause : undefined;
|
|
40
|
+
return ((err.code !== undefined && WORLD_CONTRACT_ERROR_CODES.has(err.code)) ||
|
|
41
|
+
err.message.startsWith('Failed to parse response body for ') ||
|
|
42
|
+
err.message.startsWith('Schema validation failed for ') ||
|
|
43
|
+
(typeof cause === 'object' &&
|
|
44
|
+
cause !== null &&
|
|
45
|
+
'name' in cause &&
|
|
46
|
+
cause.name === 'ZodError'));
|
|
47
|
+
}
|
|
30
48
|
export function classifyRunError(err) {
|
|
49
|
+
if (CorruptedEventLogError.is(err)) {
|
|
50
|
+
return RUN_ERROR_CODES.CORRUPTED_EVENT_LOG;
|
|
51
|
+
}
|
|
52
|
+
if (isWorldContractError(err)) {
|
|
53
|
+
return RUN_ERROR_CODES.WORLD_CONTRACT_ERROR;
|
|
54
|
+
}
|
|
31
55
|
for (const isMatch of RUNTIME_ERROR_CHECKS) {
|
|
32
56
|
if (isMatch(err)) {
|
|
33
57
|
return RUN_ERROR_CODES.RUNTIME_ERROR;
|
|
@@ -35,4 +59,4 @@ export function classifyRunError(err) {
|
|
|
35
59
|
}
|
|
36
60
|
return RUN_ERROR_CODES.USER_ERROR;
|
|
37
61
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xhc3NpZnktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGVBQWUsQ0FBQyxvQkFBb0I7Q0FDckMsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixvQkFBb0IsQ0FBQyxFQUFFO0lBQ3ZCLHNCQUFzQixDQUFDLEVBQUU7SUFDekIsMEJBQTBCLENBQUMsRUFBRTtDQUM5QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVk7SUFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRCxPQUFPLENBQ0wsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLG9DQUFvQyxDQUFDO1FBQzVELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDO1FBQ3ZELENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUTtZQUN4QixLQUFLLEtBQUssSUFBSTtZQUNkLE1BQU0sSUFBSSxLQUFLO1lBQ2YsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBWTtJQUMzQyxJQUFJLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sZUFBZSxDQUFDLG1CQUFtQixDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxlQUFlLENBQUMsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssTUFBTSxPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDLFVBQVUsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29ycnVwdGVkRXZlbnRMb2dFcnJvcixcbiAgUlVOX0VSUk9SX0NPREVTLFxuICB0eXBlIFJ1bkVycm9yQ29kZSxcbiAgU3RlcE5vdFJlZ2lzdGVyZWRFcnJvcixcbiAgV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3IsXG4gIFdvcmtmbG93UnVudGltZUVycm9yLFxuICBXb3JrZmxvd1dvcmxkRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuXG5jb25zdCBXT1JMRF9DT05UUkFDVF9FUlJPUl9DT0RFUyA9IG5ldyBTZXQoW1xuICAnUEFSU0VfRVJST1InLFxuICAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICBSVU5fRVJST1JfQ09ERVMuV09STERfQ09OVFJBQ1RfRVJST1IsXG5dKTtcblxuLyoqXG4gKiBTZXQgb2YgZXJyb3IgbmFtZXMgdGhhdCBzaG91bGQgY2xhc3NpZnkgYXMgZ2VuZXJpYyBgUlVOVElNRV9FUlJPUmAuIEVhY2hcbiAqIGAqLmlzKClgIHN0YXRpYyBkb2VzIGEgbmFtZS1iYXNlZCBkdWNrIGNoZWNrLCBzbyBzdWJjbGFzc2luZyBhbG9uZSBpc1xuICogbm90IGVub3VnaCDigJQgd2UgaGF2ZSB0byBlbnVtZXJhdGUgZXZlcnkgY29uY3JldGUgc3ViY2xhc3Mgd2Ugd2FudCB0b1xuICogcmVjb2duaXplLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUgYFdvcmtmbG93UnVudGltZUVycm9yYCBjbGFzcyBoaWVyYXJjaHlcbiAqIGluIGBAd29ya2Zsb3cvZXJyb3JzYC5cbiAqL1xuY29uc3QgUlVOVElNRV9FUlJPUl9DSEVDS1MgPSBbXG4gIFdvcmtmbG93UnVudGltZUVycm9yLmlzLFxuICBTdGVwTm90UmVnaXN0ZXJlZEVycm9yLmlzLFxuICBXb3JrZmxvd05vdFJlZ2lzdGVyZWRFcnJvci5pcyxcbl07XG5cbi8qKlxuICogQ2xhc3NpZnkgYW4gZXJyb3IgdGhhdCBjYXVzZWQgYSB3b3JrZmxvdyBydW4gdG8gZmFpbC5cbiAqXG4gKiBBZnRlciB0aGUgc3RydWN0dXJhbCBzZXBhcmF0aW9uIG9mIGluZnJhc3RydWN0dXJlIHZzIHVzZXIgY29kZSBlcnJvclxuICogaGFuZGxpbmcsIHRoZSBvbmx5IGVycm9ycyB0aGF0IHJlYWNoIHRoZSBgcnVuX2ZhaWxlZGAgdHJ5L2NhdGNoIGFyZTpcbiAqIC0gVXNlciBjb2RlIGVycm9ycyAodGhyb3dzIGZyb20gd29ya2Zsb3cgZnVuY3Rpb25zLCBwcm9wYWdhdGVkIHN0ZXAgZmFpbHVyZXMpXG4gKiAtIFdvcmtmbG93UnVudGltZUVycm9yIGFuZCBzdWJjbGFzc2VzIChtaXNzaW5nIHRpbWVzdGFtcHMsIHdvcmtmbG93L3N0ZXBcbiAqICAgbm90IHJlZ2lzdGVyZWQsIGNvcnJ1cHRlZCBldmVudCBsb2csIGV0Yy4pXG4gKlxuICogVXNlcyBlYWNoIHN1YmNsYXNzJ3MgYC5pcygpYCBzdGF0aWMgKGEgbmFtZS1iYXNlZCBkdWNrIGNoZWNrKSBpbnN0ZWFkIG9mXG4gKiBhIHNpbmdsZSBgaW5zdGFuY2VvZmAgY2hlY2sgYmVjYXVzZSB3b3JrZmxvd3MgZXhlY3V0ZSBpbiBhIHNlcGFyYXRlXG4gKiBgdm1gIHJlYWxtOiB0aGUgVk0tY29udGV4dCBgV29ya2Zsb3dSdW50aW1lRXJyb3JgIGFuZCB0aGUgaG9zdC1jb250ZXh0XG4gKiBvbmUgYXJlIGRpc3RpbmN0IGNsYXNzZXMsIHNvIGBpbnN0YW5jZW9mYCByZXR1cm5zIGBmYWxzZWAgZm9yIGFueSBlcnJvclxuICogdGhyb3duIGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gYW5kIHdlJ2QgbWlzY2xhc3NpZnkgZ2VudWluZSBydW50aW1lXG4gKiBlcnJvcnMgYXMgdXNlciBlcnJvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dvcmxkQ29udHJhY3RFcnJvcihlcnI6IHVua25vd24pOiBlcnIgaXMgV29ya2Zsb3dXb3JsZEVycm9yIHtcbiAgaWYgKCFXb3JrZmxvd1dvcmxkRXJyb3IuaXMoZXJyKSB8fCBlcnIuc3RhdHVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjYXVzZSA9ICdjYXVzZScgaW4gZXJyID8gZXJyLmNhdXNlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gKFxuICAgIChlcnIuY29kZSAhPT0gdW5kZWZpbmVkICYmIFdPUkxEX0NPTlRSQUNUX0VSUk9SX0NPREVTLmhhcyhlcnIuY29kZSkpIHx8XG4gICAgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnRmFpbGVkIHRvIHBhcnNlIHJlc3BvbnNlIGJvZHkgZm9yICcpIHx8XG4gICAgZXJyLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnU2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkIGZvciAnKSB8fFxuICAgICh0eXBlb2YgY2F1c2UgPT09ICdvYmplY3QnICYmXG4gICAgICBjYXVzZSAhPT0gbnVsbCAmJlxuICAgICAgJ25hbWUnIGluIGNhdXNlICYmXG4gICAgICBjYXVzZS5uYW1lID09PSAnWm9kRXJyb3InKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlSdW5FcnJvcihlcnI6IHVua25vd24pOiBSdW5FcnJvckNvZGUge1xuICBpZiAoQ29ycnVwdGVkRXZlbnRMb2dFcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5DT1JSVVBURURfRVZFTlRfTE9HO1xuICB9XG5cbiAgaWYgKGlzV29ybGRDb250cmFjdEVycm9yKGVycikpIHtcbiAgICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLldPUkxEX0NPTlRSQUNUX0VSUk9SO1xuICB9XG5cbiAgZm9yIChjb25zdCBpc01hdGNoIG9mIFJVTlRJTUVfRVJST1JfQ0hFQ0tTKSB7XG4gICAgaWYgKGlzTWF0Y2goZXJyKSkge1xuICAgICAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5SVU5USU1FX0VSUk9SO1xuICAgIH1cbiAgfVxuICByZXR1cm4gUlVOX0VSUk9SX0NPREVTLlVTRVJfRVJST1I7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../src/describe-error.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../src/describe-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAC;AAS1B;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2CD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,gBAAgB,CA+ClB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,YAAY,GACvB,gBAAgB,CAoElB"}
|
package/dist/describe-error.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RUN_ERROR_CODES, SerializationError, WorkflowRuntimeError, } from '@workflow/errors';
|
|
1
|
+
import { CorruptedEventLogError, RUN_ERROR_CODES, SerializationError, WorkflowRuntimeError, } from '@workflow/errors';
|
|
2
2
|
import { classifyRunError } from './classify-error.js';
|
|
3
3
|
import { NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, UnavailableInWorkflowContextError, } from './context-errors.js';
|
|
4
4
|
const CONTEXT_ERROR_NAMES = new Set([
|
|
@@ -16,8 +16,10 @@ function isContextViolationError(err) {
|
|
|
16
16
|
const SERIALIZATION_ERROR_HINT = 'A value passed across a workflow/step boundary could not be serialized. See the error message for the offending path and the Learn More link for details.';
|
|
17
17
|
const CONTEXT_ERROR_HINT = 'A workflow-only or step-only API was called from the wrong context. The error message includes the exact API and how to move the call.';
|
|
18
18
|
const RUNTIME_ERROR_HINT = 'This is an internal workflow SDK error, not a bug in your code. If it keeps happening, please report it with the stack trace and the runId.';
|
|
19
|
-
const
|
|
19
|
+
const CORRUPTED_EVENT_LOG_HINT = 'The workflow event log contains orphaned or mismatched events and cannot be replayed. This is an internal workflow SDK error; please report it with the runId.';
|
|
20
|
+
const REPLAY_TIMEOUT_HINT = 'The workflow replay between step boundaries took too long. This bounds workflow-VM and event-log replay time only — step bodies (`"use step"` functions) are excluded. This usually means the event log is unusually large or the workflow function is doing heavy synchronous work in workflow code outside of step bodies. Override the default budget via the WORKFLOW_REPLAY_TIMEOUT_MS env var if needed.';
|
|
20
21
|
const MAX_DELIVERIES_HINT = 'The workflow queue exceeded its max-delivery budget. This usually indicates a persistent runtime failure — check the most recent stack traces for the underlying cause.';
|
|
22
|
+
const WORLD_CONTRACT_HINT = 'The workflow backend returned data that violated the SDK contract. This is not retryable; please report it with the stack trace and runId.';
|
|
21
23
|
function normalizeErrorCode(code) {
|
|
22
24
|
// Values read back from persisted events are `string | undefined` — we
|
|
23
25
|
// only trust codes that match a known entry in `RUN_ERROR_CODES`.
|
|
@@ -34,16 +36,22 @@ function normalizeErrorCode(code) {
|
|
|
34
36
|
* thrown object.
|
|
35
37
|
*/
|
|
36
38
|
export function describeRunError(signal) {
|
|
37
|
-
const errorCode = normalizeErrorCode(signal.errorCode);
|
|
38
39
|
const name = signal.errorName;
|
|
40
|
+
const errorCode = name === 'CorruptedEventLogError'
|
|
41
|
+
? RUN_ERROR_CODES.CORRUPTED_EVENT_LOG
|
|
42
|
+
: normalizeErrorCode(signal.errorCode);
|
|
39
43
|
if (name === 'SerializationError') {
|
|
40
44
|
return { attribution: 'user', errorCode, hint: SERIALIZATION_ERROR_HINT };
|
|
41
45
|
}
|
|
42
46
|
if (name && CONTEXT_ERROR_NAMES.has(name)) {
|
|
43
47
|
return { attribution: 'user', errorCode, hint: CONTEXT_ERROR_HINT };
|
|
44
48
|
}
|
|
45
|
-
if (name === '
|
|
46
|
-
return {
|
|
49
|
+
if (name === 'CorruptedEventLogError') {
|
|
50
|
+
return {
|
|
51
|
+
attribution: 'sdk',
|
|
52
|
+
errorCode,
|
|
53
|
+
hint: CORRUPTED_EVENT_LOG_HINT,
|
|
54
|
+
};
|
|
47
55
|
}
|
|
48
56
|
if (errorCode === RUN_ERROR_CODES.REPLAY_TIMEOUT) {
|
|
49
57
|
return { attribution: 'sdk', errorCode, hint: REPLAY_TIMEOUT_HINT };
|
|
@@ -51,6 +59,23 @@ export function describeRunError(signal) {
|
|
|
51
59
|
if (errorCode === RUN_ERROR_CODES.MAX_DELIVERIES_EXCEEDED) {
|
|
52
60
|
return { attribution: 'sdk', errorCode, hint: MAX_DELIVERIES_HINT };
|
|
53
61
|
}
|
|
62
|
+
if (errorCode === RUN_ERROR_CODES.CORRUPTED_EVENT_LOG) {
|
|
63
|
+
return {
|
|
64
|
+
attribution: 'sdk',
|
|
65
|
+
errorCode,
|
|
66
|
+
hint: CORRUPTED_EVENT_LOG_HINT,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (errorCode === RUN_ERROR_CODES.WORLD_CONTRACT_ERROR) {
|
|
70
|
+
return {
|
|
71
|
+
attribution: 'sdk',
|
|
72
|
+
errorCode,
|
|
73
|
+
hint: WORLD_CONTRACT_HINT,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (name === 'WorkflowRuntimeError' || name === 'StepNotRegisteredError') {
|
|
77
|
+
return { attribution: 'sdk', errorCode, hint: RUNTIME_ERROR_HINT };
|
|
78
|
+
}
|
|
54
79
|
if (errorCode === RUN_ERROR_CODES.RUNTIME_ERROR) {
|
|
55
80
|
return { attribution: 'sdk', errorCode, hint: RUNTIME_ERROR_HINT };
|
|
56
81
|
}
|
|
@@ -93,6 +118,13 @@ export function describeError(err, errorCode) {
|
|
|
93
118
|
hint: CONTEXT_ERROR_HINT,
|
|
94
119
|
};
|
|
95
120
|
}
|
|
121
|
+
if (CorruptedEventLogError.is(err)) {
|
|
122
|
+
return {
|
|
123
|
+
attribution: 'sdk',
|
|
124
|
+
errorCode: effectiveCode,
|
|
125
|
+
hint: CORRUPTED_EVENT_LOG_HINT,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
96
128
|
if (err instanceof WorkflowRuntimeError) {
|
|
97
129
|
return {
|
|
98
130
|
attribution: 'sdk',
|
|
@@ -114,6 +146,20 @@ export function describeError(err, errorCode) {
|
|
|
114
146
|
hint: MAX_DELIVERIES_HINT,
|
|
115
147
|
};
|
|
116
148
|
}
|
|
149
|
+
if (effectiveCode === RUN_ERROR_CODES.CORRUPTED_EVENT_LOG) {
|
|
150
|
+
return {
|
|
151
|
+
attribution: 'sdk',
|
|
152
|
+
errorCode: effectiveCode,
|
|
153
|
+
hint: CORRUPTED_EVENT_LOG_HINT,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (effectiveCode === RUN_ERROR_CODES.WORLD_CONTRACT_ERROR) {
|
|
157
|
+
return {
|
|
158
|
+
attribution: 'sdk',
|
|
159
|
+
errorCode: effectiveCode,
|
|
160
|
+
hint: WORLD_CONTRACT_HINT,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
117
163
|
return { attribution: 'user', errorCode: effectiveCode };
|
|
118
164
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpYmUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVzY3JpYmUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFFZixrQkFBa0IsRUFDbEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLGlDQUFpQyxHQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBNEM3QixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLDJCQUEyQjtJQUMzQix1QkFBdUI7SUFDdkIsaUNBQWlDO0lBQ2pDLG1DQUFtQztDQUNwQyxDQUFDLENBQUM7QUFFSCxTQUFTLHVCQUF1QixDQUFDLEdBQVk7SUFDM0MsT0FBTyxDQUNMLEdBQUcsWUFBWSx5QkFBeUI7UUFDeEMsR0FBRyxZQUFZLHFCQUFxQjtRQUNwQyxHQUFHLFlBQVksK0JBQStCO1FBQzlDLEdBQUcsWUFBWSxpQ0FBaUMsQ0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHdCQUF3QixHQUM1QiwySkFBMkosQ0FBQztBQUM5SixNQUFNLGtCQUFrQixHQUN0Qix3SUFBd0ksQ0FBQztBQUMzSSxNQUFNLGtCQUFrQixHQUN0Qiw2SUFBNkksQ0FBQztBQUNoSixNQUFNLG1CQUFtQixHQUN2QiwwS0FBMEssQ0FBQztBQUM3SyxNQUFNLG1CQUFtQixHQUN2Qix5S0FBeUssQ0FBQztBQUU1SyxTQUFTLGtCQUFrQixDQUFDLElBQXdCO0lBQ2xELHVFQUF1RTtJQUN2RSxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQXNCLENBQUM7SUFDbEUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEs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RUQsSUFBSSxhQUFhLEtBQUssZUFBZSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDOUQsT0FBTztZQUNMLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLElBQUksRUFBRSxtQkFBbUI7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJVTl9FUlJPUl9DT0RFUyxcbiAgdHlwZSBSdW5FcnJvckNvZGUsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgY2xhc3NpZnlSdW5FcnJvciB9IGZyb20gJy4vY2xhc3NpZnktZXJyb3IuanMnO1xuaW1wb3J0IHtcbiAgTm90SW5TdGVwQ29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yLFxuICBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG59IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuXG4vKipcbiAqIEF0dHJpYnV0aW9uIG9mIGEgd29ya2Zsb3cvc3RlcCBmYWlsdXJlIGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogLSBgdXNlcmA6IHRoZSBlcnJvciBjYW1lIGZyb20gY3VzdG9tZXIgY29kZSAoYSBzdGVwIG9yIHdvcmtmbG93IGZ1bmN0aW9uXG4gKiAgIHRocmV3LCBvciBhIHZhbHVlIHRoZXkgcGFzc2VkIGFjcm9zcyBhIGJvdW5kYXJ5IHdhc24ndCBzZXJpYWxpemFibGUpLlxuICogLSBgc2RrYDogdGhlIFNESyBwcm9kdWNlZCB0aGUgZXJyb3IgaXRzZWxmIOKAlCBhbiBpbnRlcm5hbCBpbnZhcmlhbnQgYnJva2UsXG4gKiAgIG9yIGEgcnVudGltZSBndWFyZCByZWplY3RlZCB0aGUgY2FsbC4gVGhlc2Ugc2hvdWxkIGJlIHJhcmU7IHdoZW4gdGhleVxuICogICBoYXBwZW4gd2Ugd2FudCB0byBmcmFtZSB0aGUgdGVybWluYWwgb3V0cHV0IGFzIFwidGhpcyBpcyB1cywgbm90IHlvdS5cIlxuICovXG5leHBvcnQgdHlwZSBFcnJvckF0dHJpYnV0aW9uID0gJ3VzZXInIHwgJ3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGF0dHJpYnV0aW9uOiBFcnJvckF0dHJpYnV0aW9uO1xuICBlcnJvckNvZGU6IFJ1bkVycm9yQ29kZTtcbiAgLyoqXG4gICAqIFNob3J0LCBjbGFzcy1hd2FyZSBoaW50IHRvIGhlbHAgYSB1c2VyIHVuZGVyc3RhbmQgd2hhdCB0aGUgZXJyb3IgbWVhbnMuXG4gICAqIE9ubHkgc2V0IGZvciB3ZWxsLWtub3duIFNESyBlcnJvciBjbGFzc2VzIChTZXJpYWxpemF0aW9uRXJyb3IsXG4gICAqIFdvcmtmbG93UnVudGltZUVycm9yLCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMpOyBgdW5kZWZpbmVkYCBmb3IgcGxhaW5cbiAgICogdXNlciBlcnJvcnMsIHdoZXJlIHRoZSBzdGFjayBpcyBhbHJlYWR5IHRoZSBtb3N0IHVzZWZ1bCB0aGluZyB0byBzaG93LlxuICAgKi9cbiAgaGludD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcnJvciBzaWduYWwgZmllbGRzIGNhcnJpZWQgb24gcGVyc2lzdGVkIGZhaWx1cmUgZXZlbnRzIChlLmcuXG4gKiBgcnVuX2ZhaWxlZGAgLyBgc3RlcF9mYWlsZWRgKS4gVGhlIHNoYXBlIGlzIGludGVudGlvbmFsbHkgbG9vc2U6XG4gKlxuICogLSBgZXJyb3JDb2RlYCBpcyB0eXBlZCBhcyBgc3RyaW5nYCByYXRoZXIgdGhhbiBgUnVuRXJyb3JDb2RlYCBiZWNhdXNlXG4gKiAgIHRoZSB2YWx1ZSBjb21lcyBmcm9tIHN0b3JlZCBKU09OL0NCT1IgYW5kIG1heSBwcmVkYXRlIHRoZSBjdXJyZW50XG4gKiAgIGVudW0g4oCUIGNhbGxlcnMgc2hvdWxkIG5vdCBuYXJyb3cgb24gaXQgYmxpbmRseS4gVmFsdWVzIHRoYXQgZG9uJ3RcbiAqICAgbWF0Y2ggYSBrbm93biBgUlVOX0VSUk9SX0NPREVTYCBlbnRyeSBmYWxsIHRocm91Z2ggdG8gVVNFUl9FUlJPUi5cbiAqIC0gYGVycm9yTmFtZWAgaXMgdGhlIHRocm93biBgRXJyb3IjbmFtZWAuIEl0IGlzIG5vdCB1bml2ZXJzYWxseVxuICogICBwZXJzaXN0ZWQgdG9kYXk7IGNhbGxlcnMgdGhhdCBoYXZlIGFjY2VzcyB0byBpdCAoZWl0aGVyIHZpYSBhblxuICogICBpbi1tZW1vcnkgdGhyb3cgb3IgYSByaWNoZXIgcGF5bG9hZCkgY2FuIHBhc3MgaXQgaW4gdG8gc2hhcnBlblxuICogICB0aGUgYXR0cmlidXRpb24gYW5kIGhpbnQuIFdoZW4gYWJzZW50LCBgZGVzY3JpYmVSdW5FcnJvcmAgc3RpbGxcbiAqICAgcmV0dXJucyBhIHNlbnNpYmxlIGF0dHJpYnV0aW9uIGZyb20gYGVycm9yQ29kZWAgYWxvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkRXJyb3JTaWduYWwge1xuICBlcnJvckNvZGU/OiBzdHJpbmc7XG4gIGVycm9yTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgQ09OVEVYVF9FUlJPUl9OQU1FUyA9IG5ldyBTZXQoW1xuICAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcicsXG4gICdOb3RJblN0ZXBDb250ZXh0RXJyb3InLFxuICAnTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcicsXG4gICdVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3InLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJblN0ZXBDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIHx8XG4gICAgZXJyIGluc3RhbmNlb2YgVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yXG4gICk7XG59XG5cbmNvbnN0IFNFUklBTElaQVRJT05fRVJST1JfSElOVCA9XG4gICdBIHZhbHVlIHBhc3NlZCBhY3Jvc3MgYSB3b3JrZmxvdy9zdGVwIGJvdW5kYXJ5IGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLiBTZWUgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBvZmZlbmRpbmcgcGF0aCBhbmQgdGhlIExlYXJuIE1vcmUgbGluayBmb3IgZGV0YWlscy4nO1xuY29uc3QgQ09OVEVYVF9FUlJPUl9ISU5UID1cbiAgJ0Egd29ya2Zsb3ctb25seSBvciBzdGVwLW9ubHkgQVBJIHdhcyBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgY29udGV4dC4gVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4YWN0IEFQSSBhbmQgaG93IHRvIG1vdmUgdGhlIGNhbGwuJztcbmNvbnN0IFJVTlRJTUVfRVJST1JfSElOVCA9XG4gICdUaGlzIGlzIGFuIGludGVybmFsIHdvcmtmbG93IFNESyBlcnJvciwgbm90IGEgYnVnIGluIHlvdXIgY29kZS4gSWYgaXQga2VlcHMgaGFwcGVuaW5nLCBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCB0aGUgcnVuSWQuJztcbmNvbnN0IFJFUExBWV9USU1FT1VUX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHJlcGxheSB0b29rIHRvbyBsb25nLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhlIGV2ZW50IGxvZyBpcyB1bnVzdWFsbHkgbGFyZ2Ugb3IgdGhlIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGRvaW5nIGhlYXZ5IHN5bmNocm9ub3VzIHdvcmsgYmV0d2VlbiBzdGVwIGJvdW5kYXJpZXMuJztcbmNvbnN0IE1BWF9ERUxJVkVSSUVTX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHF1ZXVlIGV4Y2VlZGVkIGl0cyBtYXgtZGVsaXZlcnkgYnVkZ2V0LiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgcGVyc2lzdGVudCBydW50aW1lIGZhaWx1cmUg4oCUIGNoZWNrIHRoZSBtb3N0IHJlY2VudCBzdGFjayB0cmFjZXMgZm9yIHRoZSB1bmRlcmx5aW5nIGNhdXNlLic7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVycm9yQ29kZShjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSdW5FcnJvckNvZGUge1xuICAvLyBWYWx1ZXMgcmVhZCBiYWNrIGZyb20gcGVyc2lzdGVkIGV2ZW50cyBhcmUgYHN0cmluZyB8IHVuZGVmaW5lZGAg4oCUIHdlXG4gIC8vIG9ubHkgdHJ1c3QgY29kZXMgdGhhdCBtYXRjaCBhIGtub3duIGVudHJ5IGluIGBSVU5fRVJST1JfQ09ERVNgLlxuICBjb25zdCBrbm93biA9IE9iamVjdC52YWx1ZXMoUlVOX0VSUk9SX0NPREVTKSBhcyByZWFkb25seSBzdHJpbmdbXTtcbiAgaWYgKGNvZGUgJiYga25vd24uaW5jbHVkZXMoY29kZSkpIHtcbiAgICByZXR1cm4gY29kZSBhcyBSdW5FcnJvckNvZGU7XG4gIH1cbiAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5VU0VSX0VSUk9SO1xufVxuXG4vKipcbiAqIERhdGEtZHJpdmVuIHZhcmlhbnQgb2Yge0BsaW5rIGRlc2NyaWJlRXJyb3J9IHRoYXQgd29ya3MgZnJvbSBwZXJzaXN0ZWRcbiAqIGV2ZW50IGZpZWxkcyBpbnN0ZWFkIG9mIGEgbGl2ZSBgRXJyb3JgIGluc3RhbmNlLiBJbnRlbmRlZCBmb3IgQ0xJL3dlYlxuICogcmVuZGVyZXJzIHRoYXQgcmVhZCBmYWlsdXJlIGV2ZW50cyBhbmQgbm8gbG9uZ2VyIGhhdmUgdGhlIG9yaWdpbmFsXG4gKiB0aHJvd24gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVSdW5FcnJvcihcbiAgc2lnbmFsOiBQZXJzaXN0ZWRFcnJvclNpZ25hbFxuKTogRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGNvbnN0IGVycm9yQ29kZSA9IG5vcm1hbGl6ZUVycm9yQ29kZShzaWduYWwuZXJyb3JDb2RlKTtcbiAgY29uc3QgbmFtZSA9IHNpZ25hbC5lcnJvck5hbWU7XG5cbiAgaWYgKG5hbWUgPT09ICdTZXJpYWxpemF0aW9uRXJyb3InKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlLCBoaW50OiBTRVJJQUxJWkFUSU9OX0VSUk9SX0hJTlQgfTtcbiAgfVxuICBpZiAobmFtZSAmJiBDT05URVhUX0VSUk9SX05BTUVTLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZSwgaGludDogQ09OVEVYVF9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKG5hbWUgPT09ICdXb3JrZmxvd1J1bnRpbWVFcnJvcicgfHwgbmFtZSA9PT0gJ1N0ZXBOb3RSZWdpc3RlcmVkRXJyb3InKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IFJVTlRJTUVfRVJST1JfSElOVCB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSRVBMQVlfVElNRU9VVF9ISU5UIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IE1BWF9ERUxJVkVSSUVTX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUikge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUgfTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBlcnJvciBmb3IgdXNlci1mYWNpbmcgcHJlc2VudGF0aW9uLiBQdXJlbHkgaW5mb3JtYXRpb25hbCDigJRcbiAqIGRvZXMgbm90IGNoYW5nZSBhbnkgcGVyc2lzdGVkIGV2ZW50IGRhdGEgb3IgZXJyb3IgY2xhc3NpZmljYXRpb24gdXNlZCBieVxuICogdGhlIHJ1bnRpbWUuXG4gKlxuICogVGhlIGF0dHJpYnV0aW9uIGhlcmUgaXMgbW9yZSBudWFuY2VkIHRoYW4gYGNsYXNzaWZ5UnVuRXJyb3JgOlxuICpcbiAqIC0gYFNlcmlhbGl6YXRpb25FcnJvcmAgaXMgdGVjaG5pY2FsbHkgcmFpc2VkIGJ5IHRoZSBTREssIGJ1dCBpdCBhbG1vc3RcbiAqICAgYWx3YXlzIHBvaW50cyBhdCBzb21ldGhpbmcgdGhlIGNhbGxlciBkaWQgKHBhc3NlZCBhIG5vbi1zZXJpYWxpemFibGVcbiAqICAgdmFsdWUsIGRpZG4ndCByZWdpc3RlciBhIGNsYXNzKS4gV2UgYXR0cmlidXRlIGl0IHRvIHRoZSB1c2VyLlxuICogLSBDb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMgKGBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yYCwgZXRjLikgbGlrZXdpc2VcbiAqICAgZGVzY3JpYmUgYSB1c2VyIG1pc3Rha2UuXG4gKiAtIGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgKGFuZCBzdWJjbGFzc2VzIGxpa2UgYFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3JgKVxuICogICBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgU0RLIGludmFyaWFudCBicm9rZSDigJQgc3VyZmFjZSB0aGF0IGFzIGBzZGtgLlxuICpcbiAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHZhbHVlIHRocm93biBieSB0aGUgd29ya2Zsb3cgLyBzdGVwLlxuICogQHBhcmFtIGVycm9yQ29kZSBPcHRpb25hbCBwcmVjb21wdXRlZCBlcnJvciBjb2RlLiBDYWxsZXJzIHRoYXQgYWxyZWFkeVxuICogICBrbm93IHRoZSBjb2RlIChlLmcuIGBSRVBMQVlfVElNRU9VVGAgb3IgYE1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEYCwgd2hpY2hcbiAqICAgYGNsYXNzaWZ5UnVuRXJyb3JgIGNhbid0IGRlcml2ZSBmcm9tIHRoZSBlcnJvciBhbG9uZSkgc2hvdWxkIHBhc3MgaXQgc29cbiAqICAgdGhlIGF0dHJpYnV0aW9uIGFuZCBoaW50IHJlZmxlY3QgdGhlIGFjdHVhbCBmYWlsdXJlIGNhdGVnb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBlcnJvckNvZGU/OiBSdW5FcnJvckNvZGVcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBlZmZlY3RpdmVDb2RlID0gZXJyb3JDb2RlID8/IGNsYXNzaWZ5UnVuRXJyb3IoZXJyKTtcblxuICBpZiAoU2VyaWFsaXphdGlvbkVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFNFUklBTElaQVRJT05fRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIFdvcmtmbG93UnVudGltZUVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFJVTlRJTUVfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBSRVBMQVlfVElNRU9VVF9ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZWZmZWN0aXZlQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IE1BWF9ERUxJVkVSSUVTX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSB9O1xufVxuIl19
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpYmUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVzY3JpYmUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLCtCQUErQixFQUMvQixpQ0FBaUMsR0FDbEMsTUFBTSxxQkFBcUIsQ0FBQztBQTRDN0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNsQywyQkFBMkI7SUFDM0IsdUJBQXVCO0lBQ3ZCLGlDQUFpQztJQUNqQyxtQ0FBbUM7Q0FDcEMsQ0FBQyxDQUFDO0FBRUgsU0FBUyx1QkFBdUIsQ0FBQyxHQUFZO0lBQzNDLE9BQU8sQ0FDTCxHQUFHLFlBQVkseUJBQXlCO1FBQ3hDLEdBQUcsWUFBWSxxQkFBcUI7UUFDcEMsR0FBRyxZQUFZLCtCQUErQjtRQUM5QyxHQUFHLFlBQVksaUNBQWlDLENBQ2pELENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FDNUIsMkpBQTJKLENBQUM7QUFDOUosTUFBTSxrQkFBa0IsR0FDdEIsd0lBQXdJLENBQUM7QUFDM0ksTUFBTSxrQkFBa0IsR0FDdEIsNklBQTZJLENBQUM7QUFDaEosTUFBTSx3QkFBd0IsR0FDNUIsZ0tBQWdLLENBQUM7QUFDbkssTUFBTSxtQkFBbUIsR0FDdkIsZ1pBQWdaLENBQUM7QUFDblosTUFBTSxtQkFBbUIsR0FDdkIseUtBQXlLLENBQUM7QUFDNUssTUFBTSxtQkFBbUIsR0FDdkIsNElBQTRJLENBQUM7QUFFL0ksU0FBUyxrQkFBa0IsQ0FBQyxJQUF3QjtJQUNsRCx1RUFBdUU7SUFDdkUsa0VBQWtFO0lBQ2xFLE1B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QUFLO1lBQ2xCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLElBQUksRUFBRSx3QkFBd0I7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGFBQWEsS0FBSyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMzRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLEtBQUs7WUFDbEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsSUFBSSxFQUFFLG1CQUFtQjtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29ycnVwdGVkRXZlbnRMb2dFcnJvcixcbiAgUlVOX0VSUk9SX0NPREVTLFxuICB0eXBlIFJ1bkVycm9yQ29kZSxcbiAgU2VyaWFsaXphdGlvbkVycm9yLFxuICBXb3JrZmxvd1J1bnRpbWVFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBjbGFzc2lmeVJ1bkVycm9yIH0gZnJvbSAnLi9jbGFzc2lmeS1lcnJvci5qcyc7XG5pbXBvcnQge1xuICBOb3RJblN0ZXBDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG4gIE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IsXG4gIFVuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHRFcnJvcixcbn0gZnJvbSAnLi9jb250ZXh0LWVycm9ycy5qcyc7XG5cbi8qKlxuICogQXR0cmlidXRpb24gb2YgYSB3b3JrZmxvdy9zdGVwIGZhaWx1cmUgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiAtIGB1c2VyYDogdGhlIGVycm9yIGNhbWUgZnJvbSBjdXN0b21lciBjb2RlIChhIHN0ZXAgb3Igd29ya2Zsb3cgZnVuY3Rpb25cbiAqICAgdGhyZXcsIG9yIGEgdmFsdWUgdGhleSBwYXNzZWQgYWNyb3NzIGEgYm91bmRhcnkgd2Fzbid0IHNlcmlhbGl6YWJsZSkuXG4gKiAtIGBzZGtgOiB0aGUgU0RLIHByb2R1Y2VkIHRoZSBlcnJvciBpdHNlbGYg4oCUIGFuIGludGVybmFsIGludmFyaWFudCBicm9rZSxcbiAqICAgb3IgYSBydW50aW1lIGd1YXJkIHJlamVjdGVkIHRoZSBjYWxsLiBUaGVzZSBzaG91bGQgYmUgcmFyZTsgd2hlbiB0aGV5XG4gKiAgIGhhcHBlbiB3ZSB3YW50IHRvIGZyYW1lIHRoZSB0ZXJtaW5hbCBvdXRwdXQgYXMgXCJ0aGlzIGlzIHVzLCBub3QgeW91LlwiXG4gKi9cbmV4cG9ydCB0eXBlIEVycm9yQXR0cmlidXRpb24gPSAndXNlcicgfCAnc2RrJztcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckRlc2NyaXB0aW9uIHtcbiAgYXR0cmlidXRpb246IEVycm9yQXR0cmlidXRpb247XG4gIGVycm9yQ29kZTogUnVuRXJyb3JDb2RlO1xuICAvKipcbiAgICogU2hvcnQsIGNsYXNzLWF3YXJlIGhpbnQgdG8gaGVscCBhIHVzZXIgdW5kZXJzdGFuZCB3aGF0IHRoZSBlcnJvciBtZWFucy5cbiAgICogT25seSBzZXQgZm9yIHdlbGwta25vd24gU0RLIGVycm9yIGNsYXNzZXMgKFNlcmlhbGl6YXRpb25FcnJvcixcbiAgICogV29ya2Zsb3dSdW50aW1lRXJyb3IsIGNvbnRleHQtdmlvbGF0aW9uIGVycm9ycyk7IGB1bmRlZmluZWRgIGZvciBwbGFpblxuICAgKiB1c2VyIGVycm9ycywgd2hlcmUgdGhlIHN0YWNrIGlzIGFscmVhZHkgdGhlIG1vc3QgdXNlZnVsIHRoaW5nIHRvIHNob3cuXG4gICAqL1xuICBoaW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVycm9yIHNpZ25hbCBmaWVsZHMgY2FycmllZCBvbiBwZXJzaXN0ZWQgZmFpbHVyZSBldmVudHMgKGUuZy5cbiAqIGBydW5fZmFpbGVkYCAvIGBzdGVwX2ZhaWxlZGApLiBUaGUgc2hhcGUgaXMgaW50ZW50aW9uYWxseSBsb29zZTpcbiAqXG4gKiAtIGBlcnJvckNvZGVgIGlzIHR5cGVkIGFzIGBzdHJpbmdgIHJhdGhlciB0aGFuIGBSdW5FcnJvckNvZGVgIGJlY2F1c2VcbiAqICAgdGhlIHZhbHVlIGNvbWVzIGZyb20gc3RvcmVkIEpTT04vQ0JPUiBhbmQgbWF5IHByZWRhdGUgdGhlIGN1cnJlbnRcbiAqICAgZW51bSDigJQgY2FsbGVycyBzaG91bGQgbm90IG5hcnJvdyBvbiBpdCBibGluZGx5LiBWYWx1ZXMgdGhhdCBkb24ndFxuICogICBtYXRjaCBhIGtub3duIGBSVU5fRVJST1JfQ09ERVNgIGVudHJ5IGZhbGwgdGhyb3VnaCB0byBVU0VSX0VSUk9SLlxuICogLSBgZXJyb3JOYW1lYCBpcyB0aGUgdGhyb3duIGBFcnJvciNuYW1lYC4gSXQgaXMgbm90IHVuaXZlcnNhbGx5XG4gKiAgIHBlcnNpc3RlZCB0b2RheTsgY2FsbGVycyB0aGF0IGhhdmUgYWNjZXNzIHRvIGl0IChlaXRoZXIgdmlhIGFuXG4gKiAgIGluLW1lbW9yeSB0aHJvdyBvciBhIHJpY2hlciBwYXlsb2FkKSBjYW4gcGFzcyBpdCBpbiB0byBzaGFycGVuXG4gKiAgIHRoZSBhdHRyaWJ1dGlvbiBhbmQgaGludC4gV2hlbiBhYnNlbnQsIGBkZXNjcmliZVJ1bkVycm9yYCBzdGlsbFxuICogICByZXR1cm5zIGEgc2Vuc2libGUgYXR0cmlidXRpb24gZnJvbSBgZXJyb3JDb2RlYCBhbG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRFcnJvclNpZ25hbCB7XG4gIGVycm9yQ29kZT86IHN0cmluZztcbiAgZXJyb3JOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBDT05URVhUX0VSUk9SX05BTUVTID0gbmV3IFNldChbXG4gICdOb3RJbldvcmtmbG93Q29udGV4dEVycm9yJyxcbiAgJ05vdEluU3RlcENvbnRleHRFcnJvcicsXG4gICdOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yJyxcbiAgJ1VuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHRFcnJvcicsXG5dKTtcblxuZnVuY3Rpb24gaXNDb250ZXh0VmlvbGF0aW9uRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZXJyIGluc3RhbmNlb2YgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvciB8fFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluU3RlcENvbnRleHRFcnJvciB8fFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3JcbiAgKTtcbn1cblxuY29uc3QgU0VSSUFMSVpBVElPTl9FUlJPUl9ISU5UID1cbiAgJ0EgdmFsdWUgcGFzc2VkIGFjcm9zcyBhIHdvcmtmbG93L3N0ZXAgYm91bmRhcnkgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuIFNlZSB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIG9mZmVuZGluZyBwYXRoIGFuZCB0aGUgTGVhcm4gTW9yZSBsaW5rIGZvciBkZXRhaWxzLic7XG5jb25zdCBDT05URVhUX0VSUk9SX0hJTlQgPVxuICAnQSB3b3JrZmxvdy1vbmx5IG9yIHN0ZXAtb25seSBBUEkgd2FzIGNhbGxlZCBmcm9tIHRoZSB3cm9uZyBjb250ZXh0LiBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhhY3QgQVBJIGFuZCBob3cgdG8gbW92ZSB0aGUgY2FsbC4nO1xuY29uc3QgUlVOVElNRV9FUlJPUl9ISU5UID1cbiAgJ1RoaXMgaXMgYW4gaW50ZXJuYWwgd29ya2Zsb3cgU0RLIGVycm9yLCBub3QgYSBidWcgaW4geW91ciBjb2RlLiBJZiBpdCBrZWVwcyBoYXBwZW5pbmcsIHBsZWFzZSByZXBvcnQgaXQgd2l0aCB0aGUgc3RhY2sgdHJhY2UgYW5kIHRoZSBydW5JZC4nO1xuY29uc3QgQ09SUlVQVEVEX0VWRU5UX0xPR19ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBldmVudCBsb2cgY29udGFpbnMgb3JwaGFuZWQgb3IgbWlzbWF0Y2hlZCBldmVudHMgYW5kIGNhbm5vdCBiZSByZXBsYXllZC4gVGhpcyBpcyBhbiBpbnRlcm5hbCB3b3JrZmxvdyBTREsgZXJyb3I7IHBsZWFzZSByZXBvcnQgaXQgd2l0aCB0aGUgcnVuSWQuJztcbmNvbnN0IFJFUExBWV9USU1FT1VUX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHJlcGxheSBiZXR3ZWVuIHN0ZXAgYm91bmRhcmllcyB0b29rIHRvbyBsb25nLiBUaGlzIGJvdW5kcyB3b3JrZmxvdy1WTSBhbmQgZXZlbnQtbG9nIHJlcGxheSB0aW1lIG9ubHkg4oCUIHN0ZXAgYm9kaWVzIChgXCJ1c2Ugc3RlcFwiYCBmdW5jdGlvbnMpIGFyZSBleGNsdWRlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIHRoZSBldmVudCBsb2cgaXMgdW51c3VhbGx5IGxhcmdlIG9yIHRoZSB3b3JrZmxvdyBmdW5jdGlvbiBpcyBkb2luZyBoZWF2eSBzeW5jaHJvbm91cyB3b3JrIGluIHdvcmtmbG93IGNvZGUgb3V0c2lkZSBvZiBzdGVwIGJvZGllcy4gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnVkZ2V0IHZpYSB0aGUgV09SS0ZMT1dfUkVQTEFZX1RJTUVPVVRfTVMgZW52IHZhciBpZiBuZWVkZWQuJztcbmNvbnN0IE1BWF9ERUxJVkVSSUVTX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHF1ZXVlIGV4Y2VlZGVkIGl0cyBtYXgtZGVsaXZlcnkgYnVkZ2V0LiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgcGVyc2lzdGVudCBydW50aW1lIGZhaWx1cmUg4oCUIGNoZWNrIHRoZSBtb3N0IHJlY2VudCBzdGFjayB0cmFjZXMgZm9yIHRoZSB1bmRlcmx5aW5nIGNhdXNlLic7XG5jb25zdCBXT1JMRF9DT05UUkFDVF9ISU5UID1cbiAgJ1RoZSB3b3JrZmxvdyBiYWNrZW5kIHJldHVybmVkIGRhdGEgdGhhdCB2aW9sYXRlZCB0aGUgU0RLIGNvbnRyYWN0LiBUaGlzIGlzIG5vdCByZXRyeWFibGU7IHBsZWFzZSByZXBvcnQgaXQgd2l0aCB0aGUgc3RhY2sgdHJhY2UgYW5kIHJ1bklkLic7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVycm9yQ29kZShjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSdW5FcnJvckNvZGUge1xuICAvLyBWYWx1ZXMgcmVhZCBiYWNrIGZyb20gcGVyc2lzdGVkIGV2ZW50cyBhcmUgYHN0cmluZyB8IHVuZGVmaW5lZGAg4oCUIHdlXG4gIC8vIG9ubHkgdHJ1c3QgY29kZXMgdGhhdCBtYXRjaCBhIGtub3duIGVudHJ5IGluIGBSVU5fRVJST1JfQ09ERVNgLlxuICBjb25zdCBrbm93biA9IE9iamVjdC52YWx1ZXMoUlVOX0VSUk9SX0NPREVTKSBhcyByZWFkb25seSBzdHJpbmdbXTtcbiAgaWYgKGNvZGUgJiYga25vd24uaW5jbHVkZXMoY29kZSkpIHtcbiAgICByZXR1cm4gY29kZSBhcyBSdW5FcnJvckNvZGU7XG4gIH1cbiAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5VU0VSX0VSUk9SO1xufVxuXG4vKipcbiAqIERhdGEtZHJpdmVuIHZhcmlhbnQgb2Yge0BsaW5rIGRlc2NyaWJlRXJyb3J9IHRoYXQgd29ya3MgZnJvbSBwZXJzaXN0ZWRcbiAqIGV2ZW50IGZpZWxkcyBpbnN0ZWFkIG9mIGEgbGl2ZSBgRXJyb3JgIGluc3RhbmNlLiBJbnRlbmRlZCBmb3IgQ0xJL3dlYlxuICogcmVuZGVyZXJzIHRoYXQgcmVhZCBmYWlsdXJlIGV2ZW50cyBhbmQgbm8gbG9uZ2VyIGhhdmUgdGhlIG9yaWdpbmFsXG4gKiB0aHJvd24gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVSdW5FcnJvcihcbiAgc2lnbmFsOiBQZXJzaXN0ZWRFcnJvclNpZ25hbFxuKTogRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGNvbnN0IG5hbWUgPSBzaWduYWwuZXJyb3JOYW1lO1xuICBjb25zdCBlcnJvckNvZGUgPVxuICAgIG5hbWUgPT09ICdDb3JydXB0ZWRFdmVudExvZ0Vycm9yJ1xuICAgICAgPyBSVU5fRVJST1JfQ09ERVMuQ09SUlVQVEVEX0VWRU5UX0xPR1xuICAgICAgOiBub3JtYWxpemVFcnJvckNvZGUoc2lnbmFsLmVycm9yQ29kZSk7XG5cbiAgaWYgKG5hbWUgPT09ICdTZXJpYWxpemF0aW9uRXJyb3InKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlLCBoaW50OiBTRVJJQUxJWkFUSU9OX0VSUk9SX0hJTlQgfTtcbiAgfVxuICBpZiAobmFtZSAmJiBDT05URVhUX0VSUk9SX05BTUVTLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZSwgaGludDogQ09OVEVYVF9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKG5hbWUgPT09ICdDb3JydXB0ZWRFdmVudExvZ0Vycm9yJykge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGUsXG4gICAgICBoaW50OiBDT1JSVVBURURfRVZFTlRfTE9HX0hJTlQsXG4gICAgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUkVQTEFZX1RJTUVPVVQpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3NkaycsIGVycm9yQ29kZSwgaGludDogUkVQTEFZX1RJTUVPVVRfSElOVCB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5NQVhfREVMSVZFUklFU19FWENFRURFRCkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBNQVhfREVMSVZFUklFU19ISU5UIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLkNPUlJVUFRFRF9FVkVOVF9MT0cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlLFxuICAgICAgaGludDogQ09SUlVQVEVEX0VWRU5UX0xPR19ISU5ULFxuICAgIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLldPUkxEX0NPTlRSQUNUX0VSUk9SKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZSxcbiAgICAgIGhpbnQ6IFdPUkxEX0NPTlRSQUNUX0hJTlQsXG4gICAgfTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ1dvcmtmbG93UnVudGltZUVycm9yJyB8fCBuYW1lID09PSAnU3RlcE5vdFJlZ2lzdGVyZWRFcnJvcicpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3NkaycsIGVycm9yQ29kZSwgaGludDogUlVOVElNRV9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLlJVTlRJTUVfRVJST1IpIHtcbiAgICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3NkaycsIGVycm9yQ29kZSwgaGludDogUlVOVElNRV9FUlJPUl9ISU5UIH07XG4gIH1cbiAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlIH07XG59XG5cbi8qKlxuICogRGVzY3JpYmUgYW4gZXJyb3IgZm9yIHVzZXItZmFjaW5nIHByZXNlbnRhdGlvbi4gUHVyZWx5IGluZm9ybWF0aW9uYWwg4oCUXG4gKiBkb2VzIG5vdCBjaGFuZ2UgYW55IHBlcnNpc3RlZCBldmVudCBkYXRhIG9yIGVycm9yIGNsYXNzaWZpY2F0aW9uIHVzZWQgYnlcbiAqIHRoZSBydW50aW1lLlxuICpcbiAqIFRoZSBhdHRyaWJ1dGlvbiBoZXJlIGlzIG1vcmUgbnVhbmNlZCB0aGFuIGBjbGFzc2lmeVJ1bkVycm9yYDpcbiAqXG4gKiAtIGBTZXJpYWxpemF0aW9uRXJyb3JgIGlzIHRlY2huaWNhbGx5IHJhaXNlZCBieSB0aGUgU0RLLCBidXQgaXQgYWxtb3N0XG4gKiAgIGFsd2F5cyBwb2ludHMgYXQgc29tZXRoaW5nIHRoZSBjYWxsZXIgZGlkIChwYXNzZWQgYSBub24tc2VyaWFsaXphYmxlXG4gKiAgIHZhbHVlLCBkaWRuJ3QgcmVnaXN0ZXIgYSBjbGFzcykuIFdlIGF0dHJpYnV0ZSBpdCB0byB0aGUgdXNlci5cbiAqIC0gQ29udGV4dC12aW9sYXRpb24gZXJyb3JzIChgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcmAsIGV0Yy4pIGxpa2V3aXNlXG4gKiAgIGRlc2NyaWJlIGEgdXNlciBtaXN0YWtlLlxuICogLSBgV29ya2Zsb3dSdW50aW1lRXJyb3JgIChhbmQgc3ViY2xhc3NlcyBsaWtlIGBTdGVwTm90UmVnaXN0ZXJlZEVycm9yYClcbiAqICAgaW5kaWNhdGVzIGFuIGludGVybmFsIFNESyBpbnZhcmlhbnQgYnJva2Ug4oCUIHN1cmZhY2UgdGhhdCBhcyBgc2RrYC5cbiAqXG4gKiBAcGFyYW0gZXJyIFRoZSBlcnJvciB2YWx1ZSB0aHJvd24gYnkgdGhlIHdvcmtmbG93IC8gc3RlcC5cbiAqIEBwYXJhbSBlcnJvckNvZGUgT3B0aW9uYWwgcHJlY29tcHV0ZWQgZXJyb3IgY29kZS4gQ2FsbGVycyB0aGF0IGFscmVhZHlcbiAqICAga25vdyB0aGUgY29kZSAoZS5nLiBgUkVQTEFZX1RJTUVPVVRgIG9yIGBNQVhfREVMSVZFUklFU19FWENFRURFRGAsIHdoaWNoXG4gKiAgIGBjbGFzc2lmeVJ1bkVycm9yYCBjYW4ndCBkZXJpdmUgZnJvbSB0aGUgZXJyb3IgYWxvbmUpIHNob3VsZCBwYXNzIGl0IHNvXG4gKiAgIHRoZSBhdHRyaWJ1dGlvbiBhbmQgaGludCByZWZsZWN0IHRoZSBhY3R1YWwgZmFpbHVyZSBjYXRlZ29yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgZXJyb3JDb2RlPzogUnVuRXJyb3JDb2RlXG4pOiBFcnJvckRlc2NyaXB0aW9uIHtcbiAgY29uc3QgZWZmZWN0aXZlQ29kZSA9IGVycm9yQ29kZSA/PyBjbGFzc2lmeVJ1bkVycm9yKGVycik7XG5cbiAgaWYgKFNlcmlhbGl6YXRpb25FcnJvci5pcyhlcnIpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAndXNlcicsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBTRVJJQUxJWkFUSU9OX0VSUk9SX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpc0NvbnRleHRWaW9sYXRpb25FcnJvcihlcnIpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAndXNlcicsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBDT05URVhUX0VSUk9SX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChDb3JydXB0ZWRFdmVudExvZ0Vycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlOiBlZmZlY3RpdmVDb2RlLFxuICAgICAgaGludDogQ09SUlVQVEVEX0VWRU5UX0xPR19ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZXJyIGluc3RhbmNlb2YgV29ya2Zsb3dSdW50aW1lRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlOiBlZmZlY3RpdmVDb2RlLFxuICAgICAgaGludDogUlVOVElNRV9FUlJPUl9ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZWZmZWN0aXZlQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLlJFUExBWV9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFJFUExBWV9USU1FT1VUX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlZmZlY3RpdmVDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuTUFYX0RFTElWRVJJRVNfRVhDRUVERUQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICdzZGsnLFxuICAgICAgZXJyb3JDb2RlOiBlZmZlY3RpdmVDb2RlLFxuICAgICAgaGludDogTUFYX0RFTElWRVJJRVNfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5DT1JSVVBURURfRVZFTlRfTE9HKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPUlJVUFRFRF9FVkVOVF9MT0dfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5XT1JMRF9DT05UUkFDVF9FUlJPUikge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBXT1JMRF9DT05UUkFDVF9ISU5ULFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUgfTtcbn1cbiJdfQ==
|
package/dist/encryption.d.ts
CHANGED
|
@@ -22,10 +22,16 @@ export type CryptoKey = import('node:crypto').webcrypto.CryptoKey;
|
|
|
22
22
|
* Callers should call this once per run (after `getEncryptionKeyForRun()`)
|
|
23
23
|
* and pass the resulting `CryptoKey` to all subsequent encrypt/decrypt calls.
|
|
24
24
|
*
|
|
25
|
+
* Pass `usages: ['encrypt']` (or `['decrypt']`) for cross-run scenarios
|
|
26
|
+
* where the caller should not be able to perform the inverse operation
|
|
27
|
+
* with the key — for example a child workflow writing into a parent
|
|
28
|
+
* run's forwarded WritableStream only needs to encrypt, never decrypt.
|
|
29
|
+
*
|
|
25
30
|
* @param raw - Raw 32-byte AES-256 key (from World.getEncryptionKeyForRun)
|
|
31
|
+
* @param usages - Key usages. Defaults to `['encrypt', 'decrypt']`.
|
|
26
32
|
* @returns CryptoKey ready for AES-GCM operations
|
|
27
33
|
*/
|
|
28
|
-
export declare function importKey(raw: Uint8Array): Promise<import("crypto").webcrypto.CryptoKey>;
|
|
34
|
+
export declare function importKey(raw: Uint8Array, usages?: ReadonlyArray<'encrypt' | 'decrypt'>): Promise<import("crypto").webcrypto.CryptoKey>;
|
|
29
35
|
/**
|
|
30
36
|
* Encrypt data using AES-256-GCM.
|
|
31
37
|
*
|
package/dist/encryption.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAKH,MAAM,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC;AAMlE
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAKH,MAAM,MAAM,SAAS,GAAG,OAAO,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC;AAMlE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,UAAU,EACf,MAAM,GAAE,aAAa,CAAC,SAAS,GAAG,SAAS,CAA0B,iDAiBtE;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAerB"}
|
package/dist/encryption.js
CHANGED
|
@@ -8,17 +8,24 @@ const KEY_LENGTH = 32; // bytes (AES-256)
|
|
|
8
8
|
* Callers should call this once per run (after `getEncryptionKeyForRun()`)
|
|
9
9
|
* and pass the resulting `CryptoKey` to all subsequent encrypt/decrypt calls.
|
|
10
10
|
*
|
|
11
|
+
* Pass `usages: ['encrypt']` (or `['decrypt']`) for cross-run scenarios
|
|
12
|
+
* where the caller should not be able to perform the inverse operation
|
|
13
|
+
* with the key — for example a child workflow writing into a parent
|
|
14
|
+
* run's forwarded WritableStream only needs to encrypt, never decrypt.
|
|
15
|
+
*
|
|
11
16
|
* @param raw - Raw 32-byte AES-256 key (from World.getEncryptionKeyForRun)
|
|
17
|
+
* @param usages - Key usages. Defaults to `['encrypt', 'decrypt']`.
|
|
12
18
|
* @returns CryptoKey ready for AES-GCM operations
|
|
13
19
|
*/
|
|
14
|
-
export async function importKey(raw) {
|
|
20
|
+
export async function importKey(raw, usages = ['encrypt', 'decrypt']) {
|
|
15
21
|
if (raw.byteLength !== KEY_LENGTH) {
|
|
16
22
|
throw new WorkflowRuntimeError(`Encryption key must be exactly ${KEY_LENGTH} bytes, got ${raw.byteLength}`);
|
|
17
23
|
}
|
|
18
|
-
return globalThis.crypto.subtle.importKey('raw', raw, 'AES-GCM', false,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
]
|
|
24
|
+
return globalThis.crypto.subtle.importKey('raw', raw, 'AES-GCM', false,
|
|
25
|
+
// `KeyUsage` is a DOM-lib type that's not in scope under `es2022`.
|
|
26
|
+
// The `ReadonlyArray<'encrypt' | 'decrypt'>` parameter type matches
|
|
27
|
+
// a strict subset of `KeyUsage[]`, so this cast is sound.
|
|
28
|
+
usages);
|
|
22
29
|
}
|
|
23
30
|
/**
|
|
24
31
|
* Encrypt data using AES-256-GCM.
|
|
@@ -52,4 +59,4 @@ export async function decrypt(key, data) {
|
|
|
52
59
|
const plaintext = await globalThis.crypto.subtle.decrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, ciphertext);
|
|
53
60
|
return new Uint8Array(plaintext);
|
|
54
61
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNyeXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUJ4RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTztBQUMvQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7QUFFekM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsR0FBZSxFQUNmLFNBQStDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUVyRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixrQ0FBa0MsVUFBVSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDdkMsS0FBSyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBQ1QsS0FBSztJQUNMLG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFDcEUsMERBQTBEO0lBQzFELE1BQW1DLENBQ3BDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN2RCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQ3JELEdBQUcsRUFDSCxJQUFJLENBQ0wsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLEdBQWMsRUFDZCxJQUFnQjtJQUVoQixNQUFNLFNBQVMsR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUNwRSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLG9CQUFvQixDQUM1QiwrQ0FBK0MsU0FBUyxlQUFlLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDekYsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN0RCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQ3JELEdBQUcsRUFDSCxVQUFVLENBQ1gsQ0FBQztJQUNGLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5cbi8qKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEFFUy0yNTYtR0NNIGVuY3J5cHRpb24gbW9kdWxlLlxuICpcbiAqIFVzZXMgdGhlIFdlYiBDcnlwdG8gQVBJIChgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlYCkgd2hpY2ggd29ya3MgaW5cbiAqIGJvdGggbW9kZXJuIGJyb3dzZXJzIGFuZCBOb2RlLmpzIDIwKy4gVGhpcyBtb2R1bGUgaXMgaW50ZW50aW9uYWxseVxuICogZnJlZSBvZiBOb2RlLmpzLXNwZWNpZmljIGltcG9ydHMgc28gaXQgY2FuIGJlIGJ1bmRsZWQgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBXb3JsZCBpbnRlcmZhY2UgKGBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuYCkgcmV0dXJucyBhIHJhdyAzMi1ieXRlXG4gKiBBRVMtMjU2IGtleS4gQ2FsbGVycyBzaG91bGQgdXNlIGBpbXBvcnRLZXkoKWAgb25jZSB0byBjb252ZXJ0IGl0IHRvIGFcbiAqIGBDcnlwdG9LZXlgLCB0aGVuIHBhc3MgdGhhdCB0byBgZW5jcnlwdCgpYC9gZGVjcnlwdCgpYCBmb3IgYWxsXG4gKiBvcGVyYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBydW4uIFRoaXMgYXZvaWRzIHJlcGVhdGVkIGBpbXBvcnRLZXkoKWBcbiAqIGNhbGxzIG9uIGV2ZXJ5IGVuY3J5cHQvZGVjcnlwdCBpbnZvY2F0aW9uLlxuICpcbiAqIFdpcmUgZm9ybWF0OiBgW25vbmNlICgxMiBieXRlcyldW2NpcGhlcnRleHQgKyBhdXRoIHRhZ11gXG4gKiBUaGUgYGVuY3JgIGZvcm1hdCBwcmVmaXggaXMgTk9UIHBhcnQgb2YgdGhpcyBtb2R1bGUg4oCUIGl0J3MgYWRkZWQvc3RyaXBwZWRcbiAqIGJ5IHRoZSBzZXJpYWxpemF0aW9uIGxheWVyIGluIGBtYXliZUVuY3J5cHRgL2BtYXliZURlY3J5cHRgLlxuICovXG5cbi8vIENyeXB0b0tleSBpcyBhIGdsb2JhbCB0eXBlIGluIGJyb3dzZXJzIGFuZCBOb2RlLmpzIDIwKywgYnV0IFR5cGVTY3JpcHQnc1xuLy8gYGVzMjAyMmAgbGliIGRvZXNuJ3QgaW5jbHVkZSBpdC4gUmUtZXhwb3J0IGl0IGZyb20gdGhlIG5vZGU6Y3J5cHRvIHR5cGVzXG4vLyBzbyBjb25zdW1lcnMgY2FuIHJlZmVyZW5jZSBpdCB3aXRob3V0IGFkZGluZyBgZG9tYCBsaWIuXG5leHBvcnQgdHlwZSBDcnlwdG9LZXkgPSBpbXBvcnQoJ25vZGU6Y3J5cHRvJykud2ViY3J5cHRvLkNyeXB0b0tleTtcblxuY29uc3QgTk9OQ0VfTEVOR1RIID0gMTI7XG5jb25zdCBUQUdfTEVOR1RIID0gMTI4OyAvLyBiaXRzXG5jb25zdCBLRVlfTEVOR1RIID0gMzI7IC8vIGJ5dGVzIChBRVMtMjU2KVxuXG4vKipcbiAqIEltcG9ydCBhIHJhdyBBRVMtMjU2IGtleSBhcyBhIGBDcnlwdG9LZXlgIGZvciB1c2Ugd2l0aCBgZW5jcnlwdCgpYC9gZGVjcnlwdCgpYC5cbiAqXG4gKiBDYWxsZXJzIHNob3VsZCBjYWxsIHRoaXMgb25jZSBwZXIgcnVuIChhZnRlciBgZ2V0RW5jcnlwdGlvbktleUZvclJ1bigpYClcbiAqIGFuZCBwYXNzIHRoZSByZXN1bHRpbmcgYENyeXB0b0tleWAgdG8gYWxsIHN1YnNlcXVlbnQgZW5jcnlwdC9kZWNyeXB0IGNhbGxzLlxuICpcbiAqIFBhc3MgYHVzYWdlczogWydlbmNyeXB0J11gIChvciBgWydkZWNyeXB0J11gKSBmb3IgY3Jvc3MtcnVuIHNjZW5hcmlvc1xuICogd2hlcmUgdGhlIGNhbGxlciBzaG91bGQgbm90IGJlIGFibGUgdG8gcGVyZm9ybSB0aGUgaW52ZXJzZSBvcGVyYXRpb25cbiAqIHdpdGggdGhlIGtleSDigJQgZm9yIGV4YW1wbGUgYSBjaGlsZCB3b3JrZmxvdyB3cml0aW5nIGludG8gYSBwYXJlbnRcbiAqIHJ1bidzIGZvcndhcmRlZCBXcml0YWJsZVN0cmVhbSBvbmx5IG5lZWRzIHRvIGVuY3J5cHQsIG5ldmVyIGRlY3J5cHQuXG4gKlxuICogQHBhcmFtIHJhdyAtIFJhdyAzMi1ieXRlIEFFUy0yNTYga2V5IChmcm9tIFdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4pXG4gKiBAcGFyYW0gdXNhZ2VzIC0gS2V5IHVzYWdlcy4gRGVmYXVsdHMgdG8gYFsnZW5jcnlwdCcsICdkZWNyeXB0J11gLlxuICogQHJldHVybnMgQ3J5cHRvS2V5IHJlYWR5IGZvciBBRVMtR0NNIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltcG9ydEtleShcbiAgcmF3OiBVaW50OEFycmF5LFxuICB1c2FnZXM6IFJlYWRvbmx5QXJyYXk8J2VuY3J5cHQnIHwgJ2RlY3J5cHQnPiA9IFsnZW5jcnlwdCcsICdkZWNyeXB0J11cbikge1xuICBpZiAocmF3LmJ5dGVMZW5ndGggIT09IEtFWV9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICBgRW5jcnlwdGlvbiBrZXkgbXVzdCBiZSBleGFjdGx5ICR7S0VZX0xFTkdUSH0gYnl0ZXMsIGdvdCAke3Jhdy5ieXRlTGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIHJhdyxcbiAgICAnQUVTLUdDTScsXG4gICAgZmFsc2UsXG4gICAgLy8gYEtleVVzYWdlYCBpcyBhIERPTS1saWIgdHlwZSB0aGF0J3Mgbm90IGluIHNjb3BlIHVuZGVyIGBlczIwMjJgLlxuICAgIC8vIFRoZSBgUmVhZG9ubHlBcnJheTwnZW5jcnlwdCcgfCAnZGVjcnlwdCc+YCBwYXJhbWV0ZXIgdHlwZSBtYXRjaGVzXG4gICAgLy8gYSBzdHJpY3Qgc3Vic2V0IG9mIGBLZXlVc2FnZVtdYCwgc28gdGhpcyBjYXN0IGlzIHNvdW5kLlxuICAgIHVzYWdlcyBhcyAoJ2VuY3J5cHQnIHwgJ2RlY3J5cHQnKVtdXG4gICk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBkYXRhIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBDcnlwdG9LZXkgZnJvbSBgaW1wb3J0S2V5KClgXG4gKiBAcGFyYW0gZGF0YSAtIFBsYWludGV4dCB0byBlbmNyeXB0XG4gKiBAcmV0dXJucyBgW25vbmNlICgxMiBieXRlcyldW2NpcGhlcnRleHQgKyBHQ00gYXV0aCB0YWddYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdChcbiAga2V5OiBDcnlwdG9LZXksXG4gIGRhdGE6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBub25jZSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShOT05DRV9MRU5HVEgpKTtcbiAgY29uc3QgY2lwaGVydGV4dCA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdjogbm9uY2UsIHRhZ0xlbmd0aDogVEFHX0xFTkdUSCB9LFxuICAgIGtleSxcbiAgICBkYXRhXG4gICk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KE5PTkNFX0xFTkdUSCArIGNpcGhlcnRleHQuYnl0ZUxlbmd0aCk7XG4gIHJlc3VsdC5zZXQobm9uY2UsIDApO1xuICByZXN1bHQuc2V0KG5ldyBVaW50OEFycmF5KGNpcGhlcnRleHQpLCBOT05DRV9MRU5HVEgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERlY3J5cHQgZGF0YSB1c2luZyBBRVMtMjU2LUdDTS5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gQ3J5cHRvS2V5IGZyb20gYGltcG9ydEtleSgpYFxuICogQHBhcmFtIGRhdGEgLSBgW25vbmNlICgxMiBieXRlcyldW2NpcGhlcnRleHQgKyBHQ00gYXV0aCB0YWddYFxuICogQHJldHVybnMgRGVjcnlwdGVkIHBsYWludGV4dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdChcbiAga2V5OiBDcnlwdG9LZXksXG4gIGRhdGE6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBtaW5MZW5ndGggPSBOT05DRV9MRU5HVEggKyBUQUdfTEVOR1RIIC8gODsgLy8gbm9uY2UgKyBhdXRoIHRhZ1xuICBpZiAoZGF0YS5ieXRlTGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgYEVuY3J5cHRlZCBkYXRhIHRvbyBzaG9ydDogZXhwZWN0ZWQgYXQgbGVhc3QgJHttaW5MZW5ndGh9IGJ5dGVzLCBnb3QgJHtkYXRhLmJ5dGVMZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgY29uc3Qgbm9uY2UgPSBkYXRhLnN1YmFycmF5KDAsIE5PTkNFX0xFTkdUSCk7XG4gIGNvbnN0IGNpcGhlcnRleHQgPSBkYXRhLnN1YmFycmF5KE5PTkNFX0xFTkdUSCk7XG4gIGNvbnN0IHBsYWludGV4dCA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdjogbm9uY2UsIHRhZ0xlbmd0aDogVEFHX0xFTkdUSCB9LFxuICAgIGtleSxcbiAgICBjaXBoZXJ0ZXh0XG4gICk7XG4gIHJldHVybiBuZXcgVWludDhBcnJheShwbGFpbnRleHQpO1xufVxuIl19
|
|
@@ -1,4 +1,51 @@
|
|
|
1
1
|
export declare const MAX_QUEUE_DELIVERIES = 48;
|
|
2
|
+
/**
|
|
3
|
+
* Default maximum time allowed for the *replay* portion of a single workflow
|
|
4
|
+
* handler invocation (in ms). This budget only covers deterministic-replay
|
|
5
|
+
* and workflow-VM execution between step boundaries — inline step bodies
|
|
6
|
+
* (`"use step"` functions invoked via `executeStep`) do NOT count against
|
|
7
|
+
* it. Step bodies are bounded separately by the platform's function
|
|
8
|
+
* `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
|
|
9
|
+
*
|
|
10
|
+
* If the non-step ("replay") time within a single invocation exceeds this
|
|
11
|
+
* budget, the handler exits so the queue can retry. After
|
|
12
|
+
* `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
|
|
13
|
+
* `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
|
|
14
|
+
*
|
|
15
|
+
* Note that on Vercel Hobby (standard functions), the platform `maxDuration`
|
|
16
|
+
* is 60s — well below this budget, so the platform SIGTERM will fire first
|
|
17
|
+
* and the queue will re-deliver until the visibility window expires. With
|
|
18
|
+
* Fluid Compute on Hobby the per-function ceiling rises to 300s, still
|
|
19
|
+
* under the default budget.
|
|
20
|
+
*
|
|
21
|
+
* Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
|
|
22
|
+
* `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
|
|
23
|
+
*/
|
|
2
24
|
export declare const REPLAY_TIMEOUT_MS = 240000;
|
|
25
|
+
/** Lower bound for the replay-timeout env var override. */
|
|
26
|
+
export declare const MIN_REPLAY_TIMEOUT_MS = 30000;
|
|
27
|
+
/**
|
|
28
|
+
* Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
|
|
29
|
+
* headroom under Vercel Pro Fluid's 800s function ceiling so the handler
|
|
30
|
+
* can write `run_failed` before SIGTERM.
|
|
31
|
+
*/
|
|
32
|
+
export declare const MAX_REPLAY_TIMEOUT_MS = 780000;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the effective replay-timeout budget for the current process.
|
|
35
|
+
*
|
|
36
|
+
* Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
|
|
37
|
+
* deployments can override per invocation. Invalid / out-of-range values
|
|
38
|
+
* fall back to a safe value (no throw — the env var is an escape hatch,
|
|
39
|
+
* not a hard requirement) and emit a one-time warning so misconfiguration
|
|
40
|
+
* is observable.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getReplayTimeoutMs(): number;
|
|
43
|
+
/**
|
|
44
|
+
* Reset the warn-once cache. Test-only — exported so unit tests can
|
|
45
|
+
* exercise the warn path repeatedly without sharing state.
|
|
46
|
+
*
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
49
|
+
export declare function _resetReplayTimeoutWarnCacheForTests(): void;
|
|
3
50
|
export declare const REPLAY_TIMEOUT_MAX_RETRIES = 3;
|
|
4
51
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/runtime/constants.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,SAAU,CAAC;AAEzC,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAgB7C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA6B3C;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAMD,eAAO,MAAM,0BAA0B,IAAI,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runtimeLogger } from '../logger.js';
|
|
1
2
|
// Maximum number of queue delivery attempts before the handler gives up and
|
|
2
3
|
// gracefully fails the run/step. This must be bounded under the VQS message
|
|
3
4
|
// max visibility window (24 hours) so that our handler-side failure path
|
|
@@ -11,17 +12,94 @@
|
|
|
11
12
|
// At 48 attempts the total elapsed time is approximately 20 hours, which is
|
|
12
13
|
// safely under the 24-hour message visibility limit.
|
|
13
14
|
export const MAX_QUEUE_DELIVERIES = 48;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Default maximum time allowed for the *replay* portion of a single workflow
|
|
17
|
+
* handler invocation (in ms). This budget only covers deterministic-replay
|
|
18
|
+
* and workflow-VM execution between step boundaries — inline step bodies
|
|
19
|
+
* (`"use step"` functions invoked via `executeStep`) do NOT count against
|
|
20
|
+
* it. Step bodies are bounded separately by the platform's function
|
|
21
|
+
* `maxDuration` (e.g. 800s on Vercel Pro Fluid) and `NO_INLINE_REPLAY_AFTER_MS`.
|
|
22
|
+
*
|
|
23
|
+
* If the non-step ("replay") time within a single invocation exceeds this
|
|
24
|
+
* budget, the handler exits so the queue can retry. After
|
|
25
|
+
* `REPLAY_TIMEOUT_MAX_RETRIES` exhausted attempts the run is failed with
|
|
26
|
+
* `RUN_ERROR_CODES.REPLAY_TIMEOUT`.
|
|
27
|
+
*
|
|
28
|
+
* Note that on Vercel Hobby (standard functions), the platform `maxDuration`
|
|
29
|
+
* is 60s — well below this budget, so the platform SIGTERM will fire first
|
|
30
|
+
* and the queue will re-deliver until the visibility window expires. With
|
|
31
|
+
* Fluid Compute on Hobby the per-function ceiling rises to 300s, still
|
|
32
|
+
* under the default budget.
|
|
33
|
+
*
|
|
34
|
+
* Override via the `WORKFLOW_REPLAY_TIMEOUT_MS` env var (clamped to
|
|
35
|
+
* `MIN_REPLAY_TIMEOUT_MS`..`MAX_REPLAY_TIMEOUT_MS`).
|
|
36
|
+
*/
|
|
21
37
|
export const REPLAY_TIMEOUT_MS = 240_000;
|
|
38
|
+
/** Lower bound for the replay-timeout env var override. */
|
|
39
|
+
export const MIN_REPLAY_TIMEOUT_MS = 30_000;
|
|
40
|
+
/**
|
|
41
|
+
* Upper bound for the replay-timeout env var override. 780s leaves ≥20s of
|
|
42
|
+
* headroom under Vercel Pro Fluid's 800s function ceiling so the handler
|
|
43
|
+
* can write `run_failed` before SIGTERM.
|
|
44
|
+
*/
|
|
45
|
+
export const MAX_REPLAY_TIMEOUT_MS = 780_000;
|
|
46
|
+
// Track which raw env var values we've already warned about so the warning
|
|
47
|
+
// log only fires once per process (the function may be called many times).
|
|
48
|
+
const warnedReplayTimeoutValues = new Set();
|
|
49
|
+
function warnOnce(raw, message, data) {
|
|
50
|
+
if (warnedReplayTimeoutValues.has(raw))
|
|
51
|
+
return;
|
|
52
|
+
warnedReplayTimeoutValues.add(raw);
|
|
53
|
+
runtimeLogger.warn(message, data);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve the effective replay-timeout budget for the current process.
|
|
57
|
+
*
|
|
58
|
+
* Reads `process.env.WORKFLOW_REPLAY_TIMEOUT_MS` lazily so tests and
|
|
59
|
+
* deployments can override per invocation. Invalid / out-of-range values
|
|
60
|
+
* fall back to a safe value (no throw — the env var is an escape hatch,
|
|
61
|
+
* not a hard requirement) and emit a one-time warning so misconfiguration
|
|
62
|
+
* is observable.
|
|
63
|
+
*/
|
|
64
|
+
export function getReplayTimeoutMs() {
|
|
65
|
+
const raw = process.env.WORKFLOW_REPLAY_TIMEOUT_MS;
|
|
66
|
+
if (!raw)
|
|
67
|
+
return REPLAY_TIMEOUT_MS;
|
|
68
|
+
const parsed = Number(raw);
|
|
69
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
70
|
+
warnOnce(raw, 'Ignoring WORKFLOW_REPLAY_TIMEOUT_MS: not a positive finite number; using default', { raw, defaultMs: REPLAY_TIMEOUT_MS });
|
|
71
|
+
return REPLAY_TIMEOUT_MS;
|
|
72
|
+
}
|
|
73
|
+
if (parsed < MIN_REPLAY_TIMEOUT_MS) {
|
|
74
|
+
warnOnce(raw, 'WORKFLOW_REPLAY_TIMEOUT_MS below minimum; clamped', {
|
|
75
|
+
raw,
|
|
76
|
+
clampedMs: MIN_REPLAY_TIMEOUT_MS,
|
|
77
|
+
minMs: MIN_REPLAY_TIMEOUT_MS,
|
|
78
|
+
});
|
|
79
|
+
return MIN_REPLAY_TIMEOUT_MS;
|
|
80
|
+
}
|
|
81
|
+
if (parsed > MAX_REPLAY_TIMEOUT_MS) {
|
|
82
|
+
warnOnce(raw, 'WORKFLOW_REPLAY_TIMEOUT_MS above maximum; clamped', {
|
|
83
|
+
raw,
|
|
84
|
+
clampedMs: MAX_REPLAY_TIMEOUT_MS,
|
|
85
|
+
maxMs: MAX_REPLAY_TIMEOUT_MS,
|
|
86
|
+
});
|
|
87
|
+
return MAX_REPLAY_TIMEOUT_MS;
|
|
88
|
+
}
|
|
89
|
+
return parsed;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Reset the warn-once cache. Test-only — exported so unit tests can
|
|
93
|
+
* exercise the warn path repeatedly without sharing state.
|
|
94
|
+
*
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
export function _resetReplayTimeoutWarnCacheForTests() {
|
|
98
|
+
warnedReplayTimeoutValues.clear();
|
|
99
|
+
}
|
|
22
100
|
// Number of queue delivery attempts to allow before permanently failing a run
|
|
23
101
|
// due to a replay timeout. On attempts 1 through this value, the timeout
|
|
24
102
|
// handler exits without writing run_failed so the queue retries the message.
|
|
25
103
|
// On the next attempt the run is marked as failed.
|
|
26
104
|
export const REPLAY_TIMEOUT_MAX_RETRIES = 3;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSx5RUFBeUU7QUFDekUsb0RBQW9EO0FBQ3BELEVBQUU7QUFDRixrREFBa0Q7QUFDbEQsMkVBQTJFO0FBQzNFLCtEQUErRDtBQUMvRCx3RUFBd0U7QUFDeEUsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUM7QUFFekMsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztBQUU1Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBRTdDLDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBRXBELFNBQVMsUUFBUSxDQUNmLEdBQVcsRUFDWCxPQUFlLEVBQ2YsSUFBNkI7SUFFN0IsSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTztJQUMvQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVDLFFBQVEsQ0FDTixHQUFHLEVBQ0gsa0ZBQWtGLEVBQ2xGLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUN0QyxDQUFDO1FBQ0YsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxRQUFRLENBQUMsR0FBRyxFQUFFLG1EQUFtRCxFQUFFO1lBQ2pFLEdBQUc7WUFDSCxTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLEtBQUssRUFBRSxxQkFBcUI7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxRQUFRLENBQUMsR0FBRyxFQUFFLG1EQUFtRCxFQUFFO1lBQ2pFLEdBQUc7WUFDSCxTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLEtBQUssRUFBRSxxQkFBcUI7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9DQUFvQztJQUNsRCx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHlFQUF5RTtBQUN6RSw2RUFBNkU7QUFDN0UsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJ1bnRpbWVMb2dnZXIgfSBmcm9tICcuLi9sb2dnZXIuanMnO1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBxdWV1ZSBkZWxpdmVyeSBhdHRlbXB0cyBiZWZvcmUgdGhlIGhhbmRsZXIgZ2l2ZXMgdXAgYW5kXG4vLyBncmFjZWZ1bGx5IGZhaWxzIHRoZSBydW4vc3RlcC4gVGhpcyBtdXN0IGJlIGJvdW5kZWQgdW5kZXIgdGhlIFZRUyBtZXNzYWdlXG4vLyBtYXggdmlzaWJpbGl0eSB3aW5kb3cgKDI0IGhvdXJzKSBzbyB0aGF0IG91ciBoYW5kbGVyLXNpZGUgZmFpbHVyZSBwYXRoXG4vLyByZWxpYWJseSBleGVjdXRlcyBiZWZvcmUgVlFTIGV4cGlyZXMgdGhlIG1lc3NhZ2UuXG4vL1xuLy8gVlFTIHJldHJ5IHNjaGVkdWxlICh3aXRoIHJldHJ5QWZ0ZXJTZWNvbmRzOiA1KTpcbi8vICAgQXR0ZW1wdHMgMeKAkzMyOiAgbGluZWFyIGJhY2tvZmYgYXQgNXMgZWFjaCAg4oaSIDMyIMOXIDVzID0gMTYwcyAofjIuNyBtaW4pXG4vLyAgIEF0dGVtcHRzIDMzKzogICBleHBvbmVudGlhbCBiYWNrb2ZmOiA2MHMgw5cgMl4oYXR0ZW1wdC0zMiksXG4vLyAgICAgICAgICAgICAgICAgICBjYXBwZWQgYXQgNywyMDBzICgyaCksIGZsb29yZWQgYXQgcmV0cnlBZnRlclNlY29uZHNcbi8vXG4vLyBBdCA0OCBhdHRlbXB0cyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lIGlzIGFwcHJveGltYXRlbHkgMjAgaG91cnMsIHdoaWNoIGlzXG4vLyBzYWZlbHkgdW5kZXIgdGhlIDI0LWhvdXIgbWVzc2FnZSB2aXNpYmlsaXR5IGxpbWl0LlxuZXhwb3J0IGNvbnN0IE1BWF9RVUVVRV9ERUxJVkVSSUVTID0gNDg7XG5cbi8qKlxuICogRGVmYXVsdCBtYXhpbXVtIHRpbWUgYWxsb3dlZCBmb3IgdGhlICpyZXBsYXkqIHBvcnRpb24gb2YgYSBzaW5nbGUgd29ya2Zsb3dcbiAqIGhhbmRsZXIgaW52b2NhdGlvbiAoaW4gbXMpLiBUaGlzIGJ1ZGdldCBvbmx5IGNvdmVycyBkZXRlcm1pbmlzdGljLXJlcGxheVxuICogYW5kIHdvcmtmbG93LVZNIGV4ZWN1dGlvbiBiZXR3ZWVuIHN0ZXAgYm91bmRhcmllcyDigJQgaW5saW5lIHN0ZXAgYm9kaWVzXG4gKiAoYFwidXNlIHN0ZXBcImAgZnVuY3Rpb25zIGludm9rZWQgdmlhIGBleGVjdXRlU3RlcGApIGRvIE5PVCBjb3VudCBhZ2FpbnN0XG4gKiBpdC4gU3RlcCBib2RpZXMgYXJlIGJvdW5kZWQgc2VwYXJhdGVseSBieSB0aGUgcGxhdGZvcm0ncyBmdW5jdGlvblxuICogYG1heER1cmF0aW9uYCAoZS5nLiA4MDBzIG9uIFZlcmNlbCBQcm8gRmx1aWQpIGFuZCBgTk9fSU5MSU5FX1JFUExBWV9BRlRFUl9NU2AuXG4gKlxuICogSWYgdGhlIG5vbi1zdGVwIChcInJlcGxheVwiKSB0aW1lIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uIGV4Y2VlZHMgdGhpc1xuICogYnVkZ2V0LCB0aGUgaGFuZGxlciBleGl0cyBzbyB0aGUgcXVldWUgY2FuIHJldHJ5LiBBZnRlclxuICogYFJFUExBWV9USU1FT1VUX01BWF9SRVRSSUVTYCBleGhhdXN0ZWQgYXR0ZW1wdHMgdGhlIHJ1biBpcyBmYWlsZWQgd2l0aFxuICogYFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVGAuXG4gKlxuICogTm90ZSB0aGF0IG9uIFZlcmNlbCBIb2JieSAoc3RhbmRhcmQgZnVuY3Rpb25zKSwgdGhlIHBsYXRmb3JtIGBtYXhEdXJhdGlvbmBcbiAqIGlzIDYwcyDigJQgd2VsbCBiZWxvdyB0aGlzIGJ1ZGdldCwgc28gdGhlIHBsYXRmb3JtIFNJR1RFUk0gd2lsbCBmaXJlIGZpcnN0XG4gKiBhbmQgdGhlIHF1ZXVlIHdpbGwgcmUtZGVsaXZlciB1bnRpbCB0aGUgdmlzaWJpbGl0eSB3aW5kb3cgZXhwaXJlcy4gV2l0aFxuICogRmx1aWQgQ29tcHV0ZSBvbiBIb2JieSB0aGUgcGVyLWZ1bmN0aW9uIGNlaWxpbmcgcmlzZXMgdG8gMzAwcywgc3RpbGxcbiAqIHVuZGVyIHRoZSBkZWZhdWx0IGJ1ZGdldC5cbiAqXG4gKiBPdmVycmlkZSB2aWEgdGhlIGBXT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NU2AgZW52IHZhciAoY2xhbXBlZCB0b1xuICogYE1JTl9SRVBMQVlfVElNRU9VVF9NU2AuLmBNQVhfUkVQTEFZX1RJTUVPVVRfTVNgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFUExBWV9USU1FT1VUX01TID0gMjQwXzAwMDtcblxuLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgcmVwbGF5LXRpbWVvdXQgZW52IHZhciBvdmVycmlkZS4gKi9cbmV4cG9ydCBjb25zdCBNSU5fUkVQTEFZX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5cbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSByZXBsYXktdGltZW91dCBlbnYgdmFyIG92ZXJyaWRlLiA3ODBzIGxlYXZlcyDiiaUyMHMgb2ZcbiAqIGhlYWRyb29tIHVuZGVyIFZlcmNlbCBQcm8gRmx1aWQncyA4MDBzIGZ1bmN0aW9uIGNlaWxpbmcgc28gdGhlIGhhbmRsZXJcbiAqIGNhbiB3cml0ZSBgcnVuX2ZhaWxlZGAgYmVmb3JlIFNJR1RFUk0uXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfUkVQTEFZX1RJTUVPVVRfTVMgPSA3ODBfMDAwO1xuXG4vLyBUcmFjayB3aGljaCByYXcgZW52IHZhciB2YWx1ZXMgd2UndmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQgc28gdGhlIHdhcm5pbmdcbi8vIGxvZyBvbmx5IGZpcmVzIG9uY2UgcGVyIHByb2Nlc3MgKHRoZSBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG1hbnkgdGltZXMpLlxuY29uc3Qgd2FybmVkUmVwbGF5VGltZW91dFZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiB3YXJuT25jZShcbiAgcmF3OiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuICBpZiAod2FybmVkUmVwbGF5VGltZW91dFZhbHVlcy5oYXMocmF3KSkgcmV0dXJuO1xuICB3YXJuZWRSZXBsYXlUaW1lb3V0VmFsdWVzLmFkZChyYXcpO1xuICBydW50aW1lTG9nZ2VyLndhcm4obWVzc2FnZSwgZGF0YSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIHJlcGxheS10aW1lb3V0IGJ1ZGdldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy5cbiAqXG4gKiBSZWFkcyBgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUkVQTEFZX1RJTUVPVVRfTVNgIGxhemlseSBzbyB0ZXN0cyBhbmRcbiAqIGRlcGxveW1lbnRzIGNhbiBvdmVycmlkZSBwZXIgaW52b2NhdGlvbi4gSW52YWxpZCAvIG91dC1vZi1yYW5nZSB2YWx1ZXNcbiAqIGZhbGwgYmFjayB0byBhIHNhZmUgdmFsdWUgKG5vIHRocm93IOKAlCB0aGUgZW52IHZhciBpcyBhbiBlc2NhcGUgaGF0Y2gsXG4gKiBub3QgYSBoYXJkIHJlcXVpcmVtZW50KSBhbmQgZW1pdCBhIG9uZS10aW1lIHdhcm5pbmcgc28gbWlzY29uZmlndXJhdGlvblxuICogaXMgb2JzZXJ2YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcGxheVRpbWVvdXRNcygpOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NUztcbiAgaWYgKCFyYXcpIHJldHVybiBSRVBMQVlfVElNRU9VVF9NUztcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHJhdyk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgfHwgcGFyc2VkIDw9IDApIHtcbiAgICB3YXJuT25jZShcbiAgICAgIHJhdyxcbiAgICAgICdJZ25vcmluZyBXT1JLRkxPV19SRVBMQVlfVElNRU9VVF9NUzogbm90IGEgcG9zaXRpdmUgZmluaXRlIG51bWJlcjsgdXNpbmcgZGVmYXVsdCcsXG4gICAgICB7IHJhdywgZGVmYXVsdE1zOiBSRVBMQVlfVElNRU9VVF9NUyB9XG4gICAgKTtcbiAgICByZXR1cm4gUkVQTEFZX1RJTUVPVVRfTVM7XG4gIH1cbiAgaWYgKHBhcnNlZCA8IE1JTl9SRVBMQVlfVElNRU9VVF9NUykge1xuICAgIHdhcm5PbmNlKHJhdywgJ1dPUktGTE9XX1JFUExBWV9USU1FT1VUX01TIGJlbG93IG1pbmltdW07IGNsYW1wZWQnLCB7XG4gICAgICByYXcsXG4gICAgICBjbGFtcGVkTXM6IE1JTl9SRVBMQVlfVElNRU9VVF9NUyxcbiAgICAgIG1pbk1zOiBNSU5fUkVQTEFZX1RJTUVPVVRfTVMsXG4gICAgfSk7XG4gICAgcmV0dXJuIE1JTl9SRVBMQVlfVElNRU9VVF9NUztcbiAgfVxuICBpZiAocGFyc2VkID4gTUFYX1JFUExBWV9USU1FT1VUX01TKSB7XG4gICAgd2Fybk9uY2UocmF3LCAnV09SS0ZMT1dfUkVQTEFZX1RJTUVPVVRfTVMgYWJvdmUgbWF4aW11bTsgY2xhbXBlZCcsIHtcbiAgICAgIHJhdyxcbiAgICAgIGNsYW1wZWRNczogTUFYX1JFUExBWV9USU1FT1VUX01TLFxuICAgICAgbWF4TXM6IE1BWF9SRVBMQVlfVElNRU9VVF9NUyxcbiAgICB9KTtcbiAgICByZXR1cm4gTUFYX1JFUExBWV9USU1FT1VUX01TO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIHdhcm4tb25jZSBjYWNoZS4gVGVzdC1vbmx5IOKAlCBleHBvcnRlZCBzbyB1bml0IHRlc3RzIGNhblxuICogZXhlcmNpc2UgdGhlIHdhcm4gcGF0aCByZXBlYXRlZGx5IHdpdGhvdXQgc2hhcmluZyBzdGF0ZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFJlcGxheVRpbWVvdXRXYXJuQ2FjaGVGb3JUZXN0cygpOiB2b2lkIHtcbiAgd2FybmVkUmVwbGF5VGltZW91dFZhbHVlcy5jbGVhcigpO1xufVxuXG4vLyBOdW1iZXIgb2YgcXVldWUgZGVsaXZlcnkgYXR0ZW1wdHMgdG8gYWxsb3cgYmVmb3JlIHBlcm1hbmVudGx5IGZhaWxpbmcgYSBydW5cbi8vIGR1ZSB0byBhIHJlcGxheSB0aW1lb3V0LiBPbiBhdHRlbXB0cyAxIHRocm91Z2ggdGhpcyB2YWx1ZSwgdGhlIHRpbWVvdXRcbi8vIGhhbmRsZXIgZXhpdHMgd2l0aG91dCB3cml0aW5nIHJ1bl9mYWlsZWQgc28gdGhlIHF1ZXVlIHJldHJpZXMgdGhlIG1lc3NhZ2UuXG4vLyBPbiB0aGUgbmV4dCBhdHRlbXB0IHRoZSBydW4gaXMgbWFya2VkIGFzIGZhaWxlZC5cbmV4cG9ydCBjb25zdCBSRVBMQVlfVElNRU9VVF9NQVhfUkVUUklFUyA9IDM7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACN,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,kBAAkB,CAAC;AAiB7D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAOzE;AAWD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAYD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,UAAU,GAAG,MAAM,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoGD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA2E5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACN,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,kBAAkB,CAAC;AAiB7D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAOzE;AAWD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAYD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,UAAU,GAAG,MAAM,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoGD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA2E5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAqErD;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAC5C,gBAAgB,CAAC,EAAE,MAAM,GACxB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8BrC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,iBA0BxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE;;cAS/D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,GAAG,MAAM,GAC5B,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAiBtC"}
|