@workflow/core 5.0.0-beta.4 → 5.0.0-beta.5
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/capture-stack.d.ts +16 -0
- package/dist/capture-stack.d.ts.map +1 -0
- package/dist/capture-stack.js +21 -0
- package/dist/classify-error.d.ts +7 -0
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +25 -4
- package/dist/context-errors.d.ts +27 -0
- package/dist/context-errors.d.ts.map +1 -0
- package/dist/context-errors.js +101 -0
- package/dist/context-violation-error.d.ts +97 -0
- package/dist/context-violation-error.d.ts.map +1 -0
- package/dist/context-violation-error.js +147 -0
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +4 -3
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +20 -5
- package/dist/describe-error.d.ts +70 -0
- package/dist/describe-error.d.ts.map +1 -0
- package/dist/describe-error.js +119 -0
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +4 -20
- package/dist/events-consumer.d.ts +7 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +9 -2
- package/dist/flushable-stream.d.ts +10 -10
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +13 -12
- package/dist/global.d.ts +4 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +8 -2
- package/dist/log-format.d.ts +25 -0
- package/dist/log-format.d.ts.map +1 -0
- package/dist/log-format.js +250 -0
- package/dist/logger.d.ts +28 -30
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +77 -31
- package/dist/private.js +3 -3
- package/dist/runtime/get-port-lazy.d.ts +10 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -0
- package/dist/runtime/get-port-lazy.js +30 -0
- package/dist/runtime/get-world-lazy.d.ts +32 -0
- package/dist/runtime/get-world-lazy.d.ts.map +1 -0
- package/dist/runtime/get-world-lazy.js +56 -0
- package/dist/runtime/helpers.d.ts +38 -5
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +67 -18
- package/dist/runtime/resume-hook.js +4 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +31 -6
- package/dist/runtime/start.js +3 -3
- package/dist/runtime/step-executor.d.ts +40 -0
- package/dist/runtime/step-executor.d.ts.map +1 -0
- package/dist/runtime/step-executor.js +480 -0
- package/dist/runtime/step-handler.d.ts.map +1 -1
- package/dist/runtime/step-handler.js +209 -111
- package/dist/runtime/suspension-handler.d.ts +22 -4
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +86 -73
- package/dist/runtime/world-init.d.ts +75 -0
- package/dist/runtime/world-init.d.ts.map +1 -0
- package/dist/runtime/world-init.js +75 -0
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +47 -18
- package/dist/runtime.d.ts +8 -7
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +649 -292
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +1 -1
- package/dist/serialization/client.d.ts +17 -0
- package/dist/serialization/client.d.ts.map +1 -0
- package/dist/serialization/client.js +44 -0
- package/dist/serialization/codec-devalue.d.ts +14 -0
- package/dist/serialization/codec-devalue.d.ts.map +1 -0
- package/dist/serialization/codec-devalue.js +98 -0
- package/dist/serialization/codec.d.ts +90 -0
- package/dist/serialization/codec.d.ts.map +1 -0
- package/dist/serialization/codec.js +17 -0
- package/dist/serialization/encryption.d.ts +32 -0
- package/dist/serialization/encryption.d.ts.map +1 -0
- package/dist/serialization/encryption.js +51 -0
- package/dist/serialization/errors.d.ts +21 -0
- package/dist/serialization/errors.d.ts.map +1 -0
- package/dist/serialization/errors.js +41 -0
- package/dist/serialization/format.d.ts +60 -0
- package/dist/serialization/format.d.ts.map +1 -0
- package/dist/serialization/format.js +97 -0
- package/dist/serialization/index.d.ts +18 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/serialization/index.js +20 -0
- package/dist/serialization/reducers/class.d.ts +11 -0
- package/dist/serialization/reducers/class.d.ts.map +1 -0
- package/dist/serialization/reducers/class.js +68 -0
- package/dist/serialization/reducers/common.d.ts +16 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -0
- package/dist/serialization/reducers/common.js +362 -0
- package/dist/serialization/reducers/step-function.d.ts +35 -0
- package/dist/serialization/reducers/step-function.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function.js +88 -0
- package/dist/serialization/step.d.ts +17 -0
- package/dist/serialization/step.d.ts.map +1 -0
- package/dist/serialization/step.js +44 -0
- package/dist/serialization/types.d.ts +201 -0
- package/dist/serialization/types.d.ts.map +1 -0
- package/dist/serialization/types.js +21 -0
- package/dist/serialization/workflow.d.ts +29 -0
- package/dist/serialization/workflow.d.ts.map +1 -0
- package/dist/serialization/workflow.js +54 -0
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +77 -3
- package/dist/serialization.d.ts +202 -226
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +773 -633
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +3 -2
- package/dist/step/get-closure-vars.d.ts.map +1 -1
- package/dist/step/get-closure-vars.js +3 -2
- package/dist/step/get-step-metadata.d.ts.map +1 -1
- package/dist/step/get-step-metadata.js +3 -2
- package/dist/step/get-workflow-metadata.d.ts.map +1 -1
- package/dist/step/get-workflow-metadata.js +3 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +3 -2
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +83 -16
- package/dist/symbols.d.ts +4 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +5 -1
- package/dist/telemetry/semantic-conventions.d.ts +2 -2
- package/dist/telemetry/semantic-conventions.js +1 -1
- package/dist/util.d.ts +18 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +28 -5
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +3 -2
- package/dist/workflow/abort-controller.d.ts +65 -0
- package/dist/workflow/abort-controller.d.ts.map +1 -0
- package/dist/workflow/abort-controller.js +245 -0
- package/dist/workflow/create-hook.d.ts.map +1 -1
- package/dist/workflow/create-hook.js +3 -2
- package/dist/workflow/define-hook.d.ts +1 -1
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +8 -4
- package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
- package/dist/workflow/get-workflow-metadata.js +14 -3
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +4 -3
- package/dist/workflow/world-init-stub.d.ts +15 -0
- package/dist/workflow/world-init-stub.d.ts.map +1 -0
- package/dist/workflow/world-init-stub.js +15 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +71 -28
- package/docs/foundations/cancellation.mdx +460 -0
- package/docs/foundations/errors-and-retries.mdx +7 -3
- package/docs/foundations/meta.json +1 -0
- package/docs/foundations/serialization.mdx +77 -41
- package/docs/how-it-works/cancellation.mdx +287 -0
- package/docs/how-it-works/meta.json +2 -1
- package/package.json +15 -6
package/dist/define-hook.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { throwNotInWorkflowContext } from './context-errors.js';
|
|
1
2
|
import { resumeHook } from './runtime/resume-hook.js';
|
|
2
3
|
/**
|
|
3
4
|
* Defines a typed hook for type-safe hook creation and resumption.
|
|
@@ -31,10 +32,14 @@ import { resumeHook } from './runtime/resume-hook.js';
|
|
|
31
32
|
* ```
|
|
32
33
|
*/
|
|
33
34
|
export function defineHook({ schema, } = {}) {
|
|
35
|
+
function create(_options) {
|
|
36
|
+
// NOTE: `create` is referenced by name (not `this.create`) so the stack
|
|
37
|
+
// strip still works if the caller destructured the hook (`const { create }
|
|
38
|
+
// = defineHook(); create()`) — in that case `this` is undefined.
|
|
39
|
+
throwNotInWorkflowContext('defineHook().create()', 'https://workflow-sdk.dev/docs/api-reference/workflow/define-hook', create);
|
|
40
|
+
}
|
|
34
41
|
return {
|
|
35
|
-
create
|
|
36
|
-
throw new Error('`defineHook().create()` can only be called inside a workflow function.');
|
|
37
|
-
},
|
|
42
|
+
create,
|
|
38
43
|
async resume(token, payload) {
|
|
39
44
|
if (!schema?.['~standard']) {
|
|
40
45
|
return await resumeHook(token, payload);
|
|
@@ -45,10 +50,20 @@ export function defineHook({ schema, } = {}) {
|
|
|
45
50
|
}
|
|
46
51
|
// if the `issues` field exists, the validation failed
|
|
47
52
|
if (result.issues) {
|
|
48
|
-
|
|
53
|
+
const lines = result.issues.map((issue) => {
|
|
54
|
+
const path = issue.path
|
|
55
|
+
?.map((segment) => typeof segment === 'object' && segment !== null
|
|
56
|
+
? String(segment.key)
|
|
57
|
+
: String(segment))
|
|
58
|
+
.join('.');
|
|
59
|
+
return path
|
|
60
|
+
? ` at "${path}": ${issue.message}`
|
|
61
|
+
: ` ${issue.message}`;
|
|
62
|
+
});
|
|
63
|
+
throw new Error(`Hook payload did not match the defined schema:\n${lines.join('\n')}`);
|
|
49
64
|
}
|
|
50
65
|
return await resumeHook(token, result.value);
|
|
51
66
|
},
|
|
52
67
|
};
|
|
53
68
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmaW5lLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBbUN0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBMkIsRUFDbkQsTUFBTSxNQUdKLEVBQUU7SUFDSixTQUFTLE1BQU0sQ0FBQyxRQUFzQjtRQUNwQyx3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSx5QkFBeUIsQ0FDdkIsdUJBQXVCLEVBQ3ZCLGtFQUFrRSxFQUNsRSxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTTtRQUNOLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYSxFQUFFLE9BQWU7WUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELElBQUksTUFBTSxZQUFZLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUM7WUFDeEIsQ0FBQztZQUVELHNEQUFzRDtZQUN0RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUk7d0JBQ3JCLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDaEIsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxJQUFJO3dCQUM3QyxDQUFDLENBQUMsTUFBTSxDQUFFLE9BQWdDLENBQUMsR0FBRyxDQUFDO3dCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUNwQjt5QkFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2IsT0FBTyxJQUFJO3dCQUNULENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFO3dCQUNwQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQ2IsbURBQW1ELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLE1BQU0sVUFBVSxDQUFVLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGFuZGFyZFNjaGVtYVYxIH0gZnJvbSAnQHN0YW5kYXJkLXNjaGVtYS9zcGVjJztcbmltcG9ydCB0eXBlIHsgSG9vayBhcyBIb29rRW50aXR5IH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgSG9vaywgSG9va09wdGlvbnMgfSBmcm9tICcuL2NyZWF0ZS1ob29rLmpzJztcbmltcG9ydCB7IHJlc3VtZUhvb2sgfSBmcm9tICcuL3J1bnRpbWUvcmVzdW1lLWhvb2suanMnO1xuXG4vKipcbiAqIEEgdHlwZWQgaG9vayBpbnRlcmZhY2UgZm9yIHR5cGUtc2FmZSBob29rIGNyZWF0aW9uIGFuZCByZXN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkSG9vazxUSW5wdXQsIFRPdXRwdXQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaG9vayB3aXRoIHRoZSBkZWZpbmVkIG91dHB1dCB0eXBlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlIGluIHJ1bnRpbWUgYnVuZGxlcy4gVXNlIGl0IGZyb20gd29ya2Zsb3cgY29udGV4dHMgb25seS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBob29rIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQSBIb29rIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRlZmluZWQgb3V0cHV0IHR5cGVcbiAgICovXG4gIGNyZWF0ZShvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFRPdXRwdXQ+O1xuICAvKipcbiAgICogUmVzdW1lcyBhIGhvb2sgYnkgc2VuZGluZyBhIHBheWxvYWQgd2l0aCB0aGUgZGVmaW5lZCBpbnB1dCB0eXBlLlxuICAgKiBUaGlzIGlzIGEgdHlwZS1zYWZlIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmVzdW1lSG9va2AgcnVudGltZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHVuaXF1ZSB0b2tlbiBpZGVudGlmeWluZyB0aGUgaG9va1xuICAgKiBAcGFyYW0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkIHRvIHNlbmQ7IGlmIGEgYHNjaGVtYWAgaXMgY29uZmlndXJlZCBpdCBpcyB2YWxpZGF0ZWQvdHJhbnNmb3JtZWQgYmVmb3JlIHJlc3VtaW5nXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBob29rIGVudGl0eVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBob29rIGlzIG5vdCBmb3VuZCBvciBpZiB0aGVyZSdzIGFuIGVycm9yIGR1cmluZyB0aGUgcHJvY2Vzc1xuICAgKi9cbiAgcmVzdW1lKHRva2VuOiBzdHJpbmcsIHBheWxvYWQ6IFRJbnB1dCk6IFByb21pc2U8SG9va0VudGl0eT47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgVHlwZWRIb29rIHtcbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBpbnB1dCB0eXBlIGZyb20gYSB7QGxpbmsgVHlwZWRIb29rfVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSW5wdXQ8VCBleHRlbmRzIFR5cGVkSG9vazxhbnksIGFueT4+ID1cbiAgICBUIGV4dGVuZHMgVHlwZWRIb29rPGluZmVyIEksIGFueT4gPyBJIDogbmV2ZXI7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIHR5cGVkIGhvb2sgZm9yIHR5cGUtc2FmZSBob29rIGNyZWF0aW9uIGFuZCByZXN1bXB0aW9uLlxuICpcbiAqIFRoaXMgaGVscGVyIHByb3ZpZGVzIHR5cGUgc2FmZXR5IGJ5IGFsbG93aW5nIHlvdSB0byBkZWZpbmUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXNcbiAqIGZvciB0aGUgaG9vaydzIHBheWxvYWQsIHdpdGggb3B0aW9uYWwgdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb24gdmlhIGEgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBzY2hlbWEgLSBTY2hlbWEgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBpbnB1dCBwYXlsb2FkIGJlZm9yZSByZXN1bWluZ1xuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYGNyZWF0ZWAgYW5kIGByZXN1bWVgIGZ1bmN0aW9ucyBwcmUtdHlwZWQgd2l0aCB0aGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIC8vIERlZmluZSBhIGhvb2sgd2l0aCBhIHNwZWNpZmljIHBheWxvYWQgdHlwZVxuICogY29uc3QgYXBwcm92YWxIb29rID0gZGVmaW5lSG9vazx7IGFwcHJvdmVkOiBib29sZWFuOyBjb21tZW50OiBzdHJpbmcgfT4oKTtcbiAqXG4gKiAvLyBJbiBhIHdvcmtmbG93XG4gKiBleHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dXaXRoQXBwcm92YWwoKSB7XG4gKiAgIFwidXNlIHdvcmtmbG93XCI7XG4gKlxuICogICBjb25zdCBob29rID0gYXBwcm92YWxIb29rLmNyZWF0ZSgpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCBob29rOyAvLyBGdWxseSB0eXBlZCBhcyB7IGFwcHJvdmVkOiBib29sZWFuOyBjb21tZW50OiBzdHJpbmc7IH1cbiAqIH1cbiAqXG4gKiAvLyBJbiBhbiBBUEkgcm91dGVcbiAqIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBQT1NUKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAqICAgY29uc3QgeyB0b2tlbiwgYXBwcm92ZWQsIGNvbW1lbnQgfSA9IGF3YWl0IHJlcXVlc3QuanNvbigpO1xuICogICBhd2FpdCBhcHByb3ZhbEhvb2sucmVzdW1lKHRva2VuLCB7IGFwcHJvdmVkLCBjb21tZW50IH0pOyAvLyBJbnB1dCB0eXBlXG4gKiAgIHJldHVybiBSZXNwb25zZS5qc29uKHsgc3VjY2VzczogdHJ1ZSB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lSG9vazxUSW5wdXQsIFRPdXRwdXQgPSBUSW5wdXQ+KHtcbiAgc2NoZW1hLFxufToge1xuICBzY2hlbWE/OiBTdGFuZGFyZFNjaGVtYVYxPFRJbnB1dCwgVE91dHB1dD47XG59ID0ge30pOiBUeXBlZEhvb2s8VElucHV0LCBUT3V0cHV0PiB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShfb3B0aW9ucz86IEhvb2tPcHRpb25zKTogSG9vazxUT3V0cHV0PiB7XG4gICAgLy8gTk9URTogYGNyZWF0ZWAgaXMgcmVmZXJlbmNlZCBieSBuYW1lIChub3QgYHRoaXMuY3JlYXRlYCkgc28gdGhlIHN0YWNrXG4gICAgLy8gc3RyaXAgc3RpbGwgd29ya3MgaWYgdGhlIGNhbGxlciBkZXN0cnVjdHVyZWQgdGhlIGhvb2sgKGBjb25zdCB7IGNyZWF0ZSB9XG4gICAgLy8gPSBkZWZpbmVIb29rKCk7IGNyZWF0ZSgpYCkg4oCUIGluIHRoYXQgY2FzZSBgdGhpc2AgaXMgdW5kZWZpbmVkLlxuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnZGVmaW5lSG9vaygpLmNyZWF0ZSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2RlZmluZS1ob29rJyxcbiAgICAgIGNyZWF0ZVxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZSxcbiAgICBhc3luYyByZXN1bWUodG9rZW46IHN0cmluZywgcGF5bG9hZDogVElucHV0KTogUHJvbWlzZTxIb29rRW50aXR5PiB7XG4gICAgICBpZiAoIXNjaGVtYT8uWyd+c3RhbmRhcmQnXSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdW1lSG9vayh0b2tlbiwgcGF5bG9hZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQgPSBzY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHBheWxvYWQpO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgYGlzc3Vlc2AgZmllbGQgZXhpc3RzLCB0aGUgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGlmIChyZXN1bHQuaXNzdWVzKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGhcbiAgICAgICAgICAgID8ubWFwKChzZWdtZW50KSA9PlxuICAgICAgICAgICAgICB0eXBlb2Ygc2VnbWVudCA9PT0gJ29iamVjdCcgJiYgc2VnbWVudCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gU3RyaW5nKChzZWdtZW50IGFzIHsga2V5OiBQcm9wZXJ0eUtleSB9KS5rZXkpXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcoc2VnbWVudClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcuJyk7XG4gICAgICAgICAgcmV0dXJuIHBhdGhcbiAgICAgICAgICAgID8gYCAgYXQgXCIke3BhdGh9XCI6ICR7aXNzdWUubWVzc2FnZX1gXG4gICAgICAgICAgICA6IGAgICR7aXNzdWUubWVzc2FnZX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBIb29rIHBheWxvYWQgZGlkIG5vdCBtYXRjaCB0aGUgZGVmaW5lZCBzY2hlbWE6XFxuJHtsaW5lcy5qb2luKCdcXG4nKX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN1bWVIb29rPFRPdXRwdXQ+KHRva2VuLCByZXN1bHQudmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type RunErrorCode } from '@workflow/errors';
|
|
2
|
+
/**
|
|
3
|
+
* Attribution of a workflow/step failure for presentation.
|
|
4
|
+
*
|
|
5
|
+
* - `user`: the error came from customer code (a step or workflow function
|
|
6
|
+
* threw, or a value they passed across a boundary wasn't serializable).
|
|
7
|
+
* - `sdk`: the SDK produced the error itself — an internal invariant broke,
|
|
8
|
+
* or a runtime guard rejected the call. These should be rare; when they
|
|
9
|
+
* happen we want to frame the terminal output as "this is us, not you."
|
|
10
|
+
*/
|
|
11
|
+
export type ErrorAttribution = 'user' | 'sdk';
|
|
12
|
+
export interface ErrorDescription {
|
|
13
|
+
attribution: ErrorAttribution;
|
|
14
|
+
errorCode: RunErrorCode;
|
|
15
|
+
/**
|
|
16
|
+
* Short, class-aware hint to help a user understand what the error means.
|
|
17
|
+
* Only set for well-known SDK error classes (SerializationError,
|
|
18
|
+
* WorkflowRuntimeError, context-violation errors); `undefined` for plain
|
|
19
|
+
* user errors, where the stack is already the most useful thing to show.
|
|
20
|
+
*/
|
|
21
|
+
hint?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Error signal fields carried on persisted failure events (e.g.
|
|
25
|
+
* `run_failed` / `step_failed`). The shape is intentionally loose:
|
|
26
|
+
*
|
|
27
|
+
* - `errorCode` is typed as `string` rather than `RunErrorCode` because
|
|
28
|
+
* the value comes from stored JSON/CBOR and may predate the current
|
|
29
|
+
* enum — callers should not narrow on it blindly. Values that don't
|
|
30
|
+
* match a known `RUN_ERROR_CODES` entry fall through to USER_ERROR.
|
|
31
|
+
* - `errorName` is the thrown `Error#name`. It is not universally
|
|
32
|
+
* persisted today; callers that have access to it (either via an
|
|
33
|
+
* in-memory throw or a richer payload) can pass it in to sharpen
|
|
34
|
+
* the attribution and hint. When absent, `describeRunError` still
|
|
35
|
+
* returns a sensible attribution from `errorCode` alone.
|
|
36
|
+
*/
|
|
37
|
+
export interface PersistedErrorSignal {
|
|
38
|
+
errorCode?: string;
|
|
39
|
+
errorName?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Data-driven variant of {@link describeError} that works from persisted
|
|
43
|
+
* event fields instead of a live `Error` instance. Intended for CLI/web
|
|
44
|
+
* renderers that read failure events and no longer have the original
|
|
45
|
+
* thrown object.
|
|
46
|
+
*/
|
|
47
|
+
export declare function describeRunError(signal: PersistedErrorSignal): ErrorDescription;
|
|
48
|
+
/**
|
|
49
|
+
* Describe an error for user-facing presentation. Purely informational —
|
|
50
|
+
* does not change any persisted event data or error classification used by
|
|
51
|
+
* the runtime.
|
|
52
|
+
*
|
|
53
|
+
* The attribution here is more nuanced than `classifyRunError`:
|
|
54
|
+
*
|
|
55
|
+
* - `SerializationError` is technically raised by the SDK, but it almost
|
|
56
|
+
* always points at something the caller did (passed a non-serializable
|
|
57
|
+
* value, didn't register a class). We attribute it to the user.
|
|
58
|
+
* - Context-violation errors (`NotInWorkflowContextError`, etc.) likewise
|
|
59
|
+
* describe a user mistake.
|
|
60
|
+
* - `WorkflowRuntimeError` (and subclasses like `StepNotRegisteredError`)
|
|
61
|
+
* indicates an internal SDK invariant broke — surface that as `sdk`.
|
|
62
|
+
*
|
|
63
|
+
* @param err The error value thrown by the workflow / step.
|
|
64
|
+
* @param errorCode Optional precomputed error code. Callers that already
|
|
65
|
+
* know the code (e.g. `REPLAY_TIMEOUT` or `MAX_DELIVERIES_EXCEEDED`, which
|
|
66
|
+
* `classifyRunError` can't derive from the error alone) should pass it so
|
|
67
|
+
* the attribution and hint reflect the actual failure category.
|
|
68
|
+
*/
|
|
69
|
+
export declare function describeError(err: unknown, errorCode?: RunErrorCode): ErrorDescription;
|
|
70
|
+
//# sourceMappingURL=describe-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-error.d.ts","sourceRoot":"","sources":["../src/describe-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,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;AAuCD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,oBAAoB,GAC3B,gBAAgB,CAuBlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE,YAAY,GACvB,gBAAgB,CA4ClB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { RUN_ERROR_CODES, SerializationError, WorkflowRuntimeError, } from '@workflow/errors';
|
|
2
|
+
import { classifyRunError } from './classify-error.js';
|
|
3
|
+
import { NotInStepContextError, NotInWorkflowContextError, NotInWorkflowOrStepContextError, UnavailableInWorkflowContextError, } from './context-errors.js';
|
|
4
|
+
const CONTEXT_ERROR_NAMES = new Set([
|
|
5
|
+
'NotInWorkflowContextError',
|
|
6
|
+
'NotInStepContextError',
|
|
7
|
+
'NotInWorkflowOrStepContextError',
|
|
8
|
+
'UnavailableInWorkflowContextError',
|
|
9
|
+
]);
|
|
10
|
+
function isContextViolationError(err) {
|
|
11
|
+
return (err instanceof NotInWorkflowContextError ||
|
|
12
|
+
err instanceof NotInStepContextError ||
|
|
13
|
+
err instanceof NotInWorkflowOrStepContextError ||
|
|
14
|
+
err instanceof UnavailableInWorkflowContextError);
|
|
15
|
+
}
|
|
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
|
+
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
|
+
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 REPLAY_TIMEOUT_HINT = 'The workflow replay took too long. This usually means the event log is unusually large or the workflow function is doing heavy synchronous work between step boundaries.';
|
|
20
|
+
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.';
|
|
21
|
+
function normalizeErrorCode(code) {
|
|
22
|
+
// Values read back from persisted events are `string | undefined` — we
|
|
23
|
+
// only trust codes that match a known entry in `RUN_ERROR_CODES`.
|
|
24
|
+
const known = Object.values(RUN_ERROR_CODES);
|
|
25
|
+
if (code && known.includes(code)) {
|
|
26
|
+
return code;
|
|
27
|
+
}
|
|
28
|
+
return RUN_ERROR_CODES.USER_ERROR;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Data-driven variant of {@link describeError} that works from persisted
|
|
32
|
+
* event fields instead of a live `Error` instance. Intended for CLI/web
|
|
33
|
+
* renderers that read failure events and no longer have the original
|
|
34
|
+
* thrown object.
|
|
35
|
+
*/
|
|
36
|
+
export function describeRunError(signal) {
|
|
37
|
+
const errorCode = normalizeErrorCode(signal.errorCode);
|
|
38
|
+
const name = signal.errorName;
|
|
39
|
+
if (name === 'SerializationError') {
|
|
40
|
+
return { attribution: 'user', errorCode, hint: SERIALIZATION_ERROR_HINT };
|
|
41
|
+
}
|
|
42
|
+
if (name && CONTEXT_ERROR_NAMES.has(name)) {
|
|
43
|
+
return { attribution: 'user', errorCode, hint: CONTEXT_ERROR_HINT };
|
|
44
|
+
}
|
|
45
|
+
if (name === 'WorkflowRuntimeError' || name === 'StepNotRegisteredError') {
|
|
46
|
+
return { attribution: 'sdk', errorCode, hint: RUNTIME_ERROR_HINT };
|
|
47
|
+
}
|
|
48
|
+
if (errorCode === RUN_ERROR_CODES.REPLAY_TIMEOUT) {
|
|
49
|
+
return { attribution: 'sdk', errorCode, hint: REPLAY_TIMEOUT_HINT };
|
|
50
|
+
}
|
|
51
|
+
if (errorCode === RUN_ERROR_CODES.MAX_DELIVERIES_EXCEEDED) {
|
|
52
|
+
return { attribution: 'sdk', errorCode, hint: MAX_DELIVERIES_HINT };
|
|
53
|
+
}
|
|
54
|
+
if (errorCode === RUN_ERROR_CODES.RUNTIME_ERROR) {
|
|
55
|
+
return { attribution: 'sdk', errorCode, hint: RUNTIME_ERROR_HINT };
|
|
56
|
+
}
|
|
57
|
+
return { attribution: 'user', errorCode };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Describe an error for user-facing presentation. Purely informational —
|
|
61
|
+
* does not change any persisted event data or error classification used by
|
|
62
|
+
* the runtime.
|
|
63
|
+
*
|
|
64
|
+
* The attribution here is more nuanced than `classifyRunError`:
|
|
65
|
+
*
|
|
66
|
+
* - `SerializationError` is technically raised by the SDK, but it almost
|
|
67
|
+
* always points at something the caller did (passed a non-serializable
|
|
68
|
+
* value, didn't register a class). We attribute it to the user.
|
|
69
|
+
* - Context-violation errors (`NotInWorkflowContextError`, etc.) likewise
|
|
70
|
+
* describe a user mistake.
|
|
71
|
+
* - `WorkflowRuntimeError` (and subclasses like `StepNotRegisteredError`)
|
|
72
|
+
* indicates an internal SDK invariant broke — surface that as `sdk`.
|
|
73
|
+
*
|
|
74
|
+
* @param err The error value thrown by the workflow / step.
|
|
75
|
+
* @param errorCode Optional precomputed error code. Callers that already
|
|
76
|
+
* know the code (e.g. `REPLAY_TIMEOUT` or `MAX_DELIVERIES_EXCEEDED`, which
|
|
77
|
+
* `classifyRunError` can't derive from the error alone) should pass it so
|
|
78
|
+
* the attribution and hint reflect the actual failure category.
|
|
79
|
+
*/
|
|
80
|
+
export function describeError(err, errorCode) {
|
|
81
|
+
const effectiveCode = errorCode ?? classifyRunError(err);
|
|
82
|
+
if (SerializationError.is(err)) {
|
|
83
|
+
return {
|
|
84
|
+
attribution: 'user',
|
|
85
|
+
errorCode: effectiveCode,
|
|
86
|
+
hint: SERIALIZATION_ERROR_HINT,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (isContextViolationError(err)) {
|
|
90
|
+
return {
|
|
91
|
+
attribution: 'user',
|
|
92
|
+
errorCode: effectiveCode,
|
|
93
|
+
hint: CONTEXT_ERROR_HINT,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (err instanceof WorkflowRuntimeError) {
|
|
97
|
+
return {
|
|
98
|
+
attribution: 'sdk',
|
|
99
|
+
errorCode: effectiveCode,
|
|
100
|
+
hint: RUNTIME_ERROR_HINT,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (effectiveCode === RUN_ERROR_CODES.REPLAY_TIMEOUT) {
|
|
104
|
+
return {
|
|
105
|
+
attribution: 'sdk',
|
|
106
|
+
errorCode: effectiveCode,
|
|
107
|
+
hint: REPLAY_TIMEOUT_HINT,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (effectiveCode === RUN_ERROR_CODES.MAX_DELIVERIES_EXCEEDED) {
|
|
111
|
+
return {
|
|
112
|
+
attribution: 'sdk',
|
|
113
|
+
errorCode: effectiveCode,
|
|
114
|
+
hint: MAX_DELIVERIES_HINT,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return { attribution: 'user', errorCode: effectiveCode };
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpYmUtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVzY3JpYmUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFFZixrQkFBa0IsRUFDbEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLGlDQUFpQyxHQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBNEM3QixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLDJCQUEyQjtJQUMzQix1QkFBdUI7SUFDdkIsaUNBQWlDO0lBQ2pDLG1DQUFtQztDQUNwQyxDQUFDLENBQUM7QUFFSCxTQUFTLHVCQUF1QixDQUFDLEdBQVk7SUFDM0MsT0FBTyxDQUNMLEdBQUcsWUFBWSx5QkFBeUI7UUFDeEMsR0FBRyxZQUFZLHFCQUFxQjtRQUNwQyxHQUFHLFlBQVksK0JBQStCO1FBQzlDLEdBQUcsWUFBWSxpQ0FBaUMsQ0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHdCQUF3QixHQUM1QiwySkFBMkosQ0FBQztBQUM5SixNQUFNLGtCQUFrQixHQUN0Qix3SUFBd0ksQ0FBQztBQUMzSSxNQUFNLGtCQUFrQixHQUN0Qiw2SUFBNkksQ0FBQztBQUNoSixNQUFNLG1CQUFtQixHQUN2QiwwS0FBMEssQ0FBQztBQUM3SyxNQUFNLG1CQUFtQixHQUN2Qix5S0FBeUssQ0FBQztBQUU1SyxTQUFTLGtCQUFrQixDQUFDLElBQXdCO0lBQ2xELHVFQUF1RTtJQUN2RSxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQXNCLENBQUM7SUFDbEUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEs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RUQsSUFBSSxhQUFhLEtBQUssZUFBZSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDOUQsT0FBTztZQUNMLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLElBQUksRUFBRSxtQkFBbUI7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJVTl9FUlJPUl9DT0RFUyxcbiAgdHlwZSBSdW5FcnJvckNvZGUsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgV29ya2Zsb3dSdW50aW1lRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgY2xhc3NpZnlSdW5FcnJvciB9IGZyb20gJy4vY2xhc3NpZnktZXJyb3IuanMnO1xuaW1wb3J0IHtcbiAgTm90SW5TdGVwQ29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yLFxuICBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yLFxuICBVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3IsXG59IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuXG4vKipcbiAqIEF0dHJpYnV0aW9uIG9mIGEgd29ya2Zsb3cvc3RlcCBmYWlsdXJlIGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogLSBgdXNlcmA6IHRoZSBlcnJvciBjYW1lIGZyb20gY3VzdG9tZXIgY29kZSAoYSBzdGVwIG9yIHdvcmtmbG93IGZ1bmN0aW9uXG4gKiAgIHRocmV3LCBvciBhIHZhbHVlIHRoZXkgcGFzc2VkIGFjcm9zcyBhIGJvdW5kYXJ5IHdhc24ndCBzZXJpYWxpemFibGUpLlxuICogLSBgc2RrYDogdGhlIFNESyBwcm9kdWNlZCB0aGUgZXJyb3IgaXRzZWxmIOKAlCBhbiBpbnRlcm5hbCBpbnZhcmlhbnQgYnJva2UsXG4gKiAgIG9yIGEgcnVudGltZSBndWFyZCByZWplY3RlZCB0aGUgY2FsbC4gVGhlc2Ugc2hvdWxkIGJlIHJhcmU7IHdoZW4gdGhleVxuICogICBoYXBwZW4gd2Ugd2FudCB0byBmcmFtZSB0aGUgdGVybWluYWwgb3V0cHV0IGFzIFwidGhpcyBpcyB1cywgbm90IHlvdS5cIlxuICovXG5leHBvcnQgdHlwZSBFcnJvckF0dHJpYnV0aW9uID0gJ3VzZXInIHwgJ3Nkayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGF0dHJpYnV0aW9uOiBFcnJvckF0dHJpYnV0aW9uO1xuICBlcnJvckNvZGU6IFJ1bkVycm9yQ29kZTtcbiAgLyoqXG4gICAqIFNob3J0LCBjbGFzcy1hd2FyZSBoaW50IHRvIGhlbHAgYSB1c2VyIHVuZGVyc3RhbmQgd2hhdCB0aGUgZXJyb3IgbWVhbnMuXG4gICAqIE9ubHkgc2V0IGZvciB3ZWxsLWtub3duIFNESyBlcnJvciBjbGFzc2VzIChTZXJpYWxpemF0aW9uRXJyb3IsXG4gICAqIFdvcmtmbG93UnVudGltZUVycm9yLCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMpOyBgdW5kZWZpbmVkYCBmb3IgcGxhaW5cbiAgICogdXNlciBlcnJvcnMsIHdoZXJlIHRoZSBzdGFjayBpcyBhbHJlYWR5IHRoZSBtb3N0IHVzZWZ1bCB0aGluZyB0byBzaG93LlxuICAgKi9cbiAgaGludD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFcnJvciBzaWduYWwgZmllbGRzIGNhcnJpZWQgb24gcGVyc2lzdGVkIGZhaWx1cmUgZXZlbnRzIChlLmcuXG4gKiBgcnVuX2ZhaWxlZGAgLyBgc3RlcF9mYWlsZWRgKS4gVGhlIHNoYXBlIGlzIGludGVudGlvbmFsbHkgbG9vc2U6XG4gKlxuICogLSBgZXJyb3JDb2RlYCBpcyB0eXBlZCBhcyBgc3RyaW5nYCByYXRoZXIgdGhhbiBgUnVuRXJyb3JDb2RlYCBiZWNhdXNlXG4gKiAgIHRoZSB2YWx1ZSBjb21lcyBmcm9tIHN0b3JlZCBKU09OL0NCT1IgYW5kIG1heSBwcmVkYXRlIHRoZSBjdXJyZW50XG4gKiAgIGVudW0g4oCUIGNhbGxlcnMgc2hvdWxkIG5vdCBuYXJyb3cgb24gaXQgYmxpbmRseS4gVmFsdWVzIHRoYXQgZG9uJ3RcbiAqICAgbWF0Y2ggYSBrbm93biBgUlVOX0VSUk9SX0NPREVTYCBlbnRyeSBmYWxsIHRocm91Z2ggdG8gVVNFUl9FUlJPUi5cbiAqIC0gYGVycm9yTmFtZWAgaXMgdGhlIHRocm93biBgRXJyb3IjbmFtZWAuIEl0IGlzIG5vdCB1bml2ZXJzYWxseVxuICogICBwZXJzaXN0ZWQgdG9kYXk7IGNhbGxlcnMgdGhhdCBoYXZlIGFjY2VzcyB0byBpdCAoZWl0aGVyIHZpYSBhblxuICogICBpbi1tZW1vcnkgdGhyb3cgb3IgYSByaWNoZXIgcGF5bG9hZCkgY2FuIHBhc3MgaXQgaW4gdG8gc2hhcnBlblxuICogICB0aGUgYXR0cmlidXRpb24gYW5kIGhpbnQuIFdoZW4gYWJzZW50LCBgZGVzY3JpYmVSdW5FcnJvcmAgc3RpbGxcbiAqICAgcmV0dXJucyBhIHNlbnNpYmxlIGF0dHJpYnV0aW9uIGZyb20gYGVycm9yQ29kZWAgYWxvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkRXJyb3JTaWduYWwge1xuICBlcnJvckNvZGU/OiBzdHJpbmc7XG4gIGVycm9yTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgQ09OVEVYVF9FUlJPUl9OQU1FUyA9IG5ldyBTZXQoW1xuICAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcicsXG4gICdOb3RJblN0ZXBDb250ZXh0RXJyb3InLFxuICAnTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcicsXG4gICdVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0RXJyb3InLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJblN0ZXBDb250ZXh0RXJyb3IgfHxcbiAgICBlcnIgaW5zdGFuY2VvZiBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIHx8XG4gICAgZXJyIGluc3RhbmNlb2YgVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yXG4gICk7XG59XG5cbmNvbnN0IFNFUklBTElaQVRJT05fRVJST1JfSElOVCA9XG4gICdBIHZhbHVlIHBhc3NlZCBhY3Jvc3MgYSB3b3JrZmxvdy9zdGVwIGJvdW5kYXJ5IGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLiBTZWUgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBvZmZlbmRpbmcgcGF0aCBhbmQgdGhlIExlYXJuIE1vcmUgbGluayBmb3IgZGV0YWlscy4nO1xuY29uc3QgQ09OVEVYVF9FUlJPUl9ISU5UID1cbiAgJ0Egd29ya2Zsb3ctb25seSBvciBzdGVwLW9ubHkgQVBJIHdhcyBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgY29udGV4dC4gVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4YWN0IEFQSSBhbmQgaG93IHRvIG1vdmUgdGhlIGNhbGwuJztcbmNvbnN0IFJVTlRJTUVfRVJST1JfSElOVCA9XG4gICdUaGlzIGlzIGFuIGludGVybmFsIHdvcmtmbG93IFNESyBlcnJvciwgbm90IGEgYnVnIGluIHlvdXIgY29kZS4gSWYgaXQga2VlcHMgaGFwcGVuaW5nLCBwbGVhc2UgcmVwb3J0IGl0IHdpdGggdGhlIHN0YWNrIHRyYWNlIGFuZCB0aGUgcnVuSWQuJztcbmNvbnN0IFJFUExBWV9USU1FT1VUX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHJlcGxheSB0b29rIHRvbyBsb25nLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhlIGV2ZW50IGxvZyBpcyB1bnVzdWFsbHkgbGFyZ2Ugb3IgdGhlIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGRvaW5nIGhlYXZ5IHN5bmNocm9ub3VzIHdvcmsgYmV0d2VlbiBzdGVwIGJvdW5kYXJpZXMuJztcbmNvbnN0IE1BWF9ERUxJVkVSSUVTX0hJTlQgPVxuICAnVGhlIHdvcmtmbG93IHF1ZXVlIGV4Y2VlZGVkIGl0cyBtYXgtZGVsaXZlcnkgYnVkZ2V0LiBUaGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgcGVyc2lzdGVudCBydW50aW1lIGZhaWx1cmUg4oCUIGNoZWNrIHRoZSBtb3N0IHJlY2VudCBzdGFjayB0cmFjZXMgZm9yIHRoZSB1bmRlcmx5aW5nIGNhdXNlLic7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVycm9yQ29kZShjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSdW5FcnJvckNvZGUge1xuICAvLyBWYWx1ZXMgcmVhZCBiYWNrIGZyb20gcGVyc2lzdGVkIGV2ZW50cyBhcmUgYHN0cmluZyB8IHVuZGVmaW5lZGAg4oCUIHdlXG4gIC8vIG9ubHkgdHJ1c3QgY29kZXMgdGhhdCBtYXRjaCBhIGtub3duIGVudHJ5IGluIGBSVU5fRVJST1JfQ09ERVNgLlxuICBjb25zdCBrbm93biA9IE9iamVjdC52YWx1ZXMoUlVOX0VSUk9SX0NPREVTKSBhcyByZWFkb25seSBzdHJpbmdbXTtcbiAgaWYgKGNvZGUgJiYga25vd24uaW5jbHVkZXMoY29kZSkpIHtcbiAgICByZXR1cm4gY29kZSBhcyBSdW5FcnJvckNvZGU7XG4gIH1cbiAgcmV0dXJuIFJVTl9FUlJPUl9DT0RFUy5VU0VSX0VSUk9SO1xufVxuXG4vKipcbiAqIERhdGEtZHJpdmVuIHZhcmlhbnQgb2Yge0BsaW5rIGRlc2NyaWJlRXJyb3J9IHRoYXQgd29ya3MgZnJvbSBwZXJzaXN0ZWRcbiAqIGV2ZW50IGZpZWxkcyBpbnN0ZWFkIG9mIGEgbGl2ZSBgRXJyb3JgIGluc3RhbmNlLiBJbnRlbmRlZCBmb3IgQ0xJL3dlYlxuICogcmVuZGVyZXJzIHRoYXQgcmVhZCBmYWlsdXJlIGV2ZW50cyBhbmQgbm8gbG9uZ2VyIGhhdmUgdGhlIG9yaWdpbmFsXG4gKiB0aHJvd24gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVSdW5FcnJvcihcbiAgc2lnbmFsOiBQZXJzaXN0ZWRFcnJvclNpZ25hbFxuKTogRXJyb3JEZXNjcmlwdGlvbiB7XG4gIGNvbnN0IGVycm9yQ29kZSA9IG5vcm1hbGl6ZUVycm9yQ29kZShzaWduYWwuZXJyb3JDb2RlKTtcbiAgY29uc3QgbmFtZSA9IHNpZ25hbC5lcnJvck5hbWU7XG5cbiAgaWYgKG5hbWUgPT09ICdTZXJpYWxpemF0aW9uRXJyb3InKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICd1c2VyJywgZXJyb3JDb2RlLCBoaW50OiBTRVJJQUxJWkFUSU9OX0VSUk9SX0hJTlQgfTtcbiAgfVxuICBpZiAobmFtZSAmJiBDT05URVhUX0VSUk9SX05BTUVTLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZSwgaGludDogQ09OVEVYVF9FUlJPUl9ISU5UIH07XG4gIH1cbiAgaWYgKG5hbWUgPT09ICdXb3JrZmxvd1J1bnRpbWVFcnJvcicgfHwgbmFtZSA9PT0gJ1N0ZXBOb3RSZWdpc3RlcmVkRXJyb3InKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IFJVTlRJTUVfRVJST1JfSElOVCB9O1xuICB9XG4gIGlmIChlcnJvckNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCkge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSRVBMQVlfVElNRU9VVF9ISU5UIH07XG4gIH1cbiAgaWYgKGVycm9yQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHsgYXR0cmlidXRpb246ICdzZGsnLCBlcnJvckNvZGUsIGhpbnQ6IE1BWF9ERUxJVkVSSUVTX0hJTlQgfTtcbiAgfVxuICBpZiAoZXJyb3JDb2RlID09PSBSVU5fRVJST1JfQ09ERVMuUlVOVElNRV9FUlJPUikge1xuICAgIHJldHVybiB7IGF0dHJpYnV0aW9uOiAnc2RrJywgZXJyb3JDb2RlLCBoaW50OiBSVU5USU1FX0VSUk9SX0hJTlQgfTtcbiAgfVxuICByZXR1cm4geyBhdHRyaWJ1dGlvbjogJ3VzZXInLCBlcnJvckNvZGUgfTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBlcnJvciBmb3IgdXNlci1mYWNpbmcgcHJlc2VudGF0aW9uLiBQdXJlbHkgaW5mb3JtYXRpb25hbCDigJRcbiAqIGRvZXMgbm90IGNoYW5nZSBhbnkgcGVyc2lzdGVkIGV2ZW50IGRhdGEgb3IgZXJyb3IgY2xhc3NpZmljYXRpb24gdXNlZCBieVxuICogdGhlIHJ1bnRpbWUuXG4gKlxuICogVGhlIGF0dHJpYnV0aW9uIGhlcmUgaXMgbW9yZSBudWFuY2VkIHRoYW4gYGNsYXNzaWZ5UnVuRXJyb3JgOlxuICpcbiAqIC0gYFNlcmlhbGl6YXRpb25FcnJvcmAgaXMgdGVjaG5pY2FsbHkgcmFpc2VkIGJ5IHRoZSBTREssIGJ1dCBpdCBhbG1vc3RcbiAqICAgYWx3YXlzIHBvaW50cyBhdCBzb21ldGhpbmcgdGhlIGNhbGxlciBkaWQgKHBhc3NlZCBhIG5vbi1zZXJpYWxpemFibGVcbiAqICAgdmFsdWUsIGRpZG4ndCByZWdpc3RlciBhIGNsYXNzKS4gV2UgYXR0cmlidXRlIGl0IHRvIHRoZSB1c2VyLlxuICogLSBDb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMgKGBOb3RJbldvcmtmbG93Q29udGV4dEVycm9yYCwgZXRjLikgbGlrZXdpc2VcbiAqICAgZGVzY3JpYmUgYSB1c2VyIG1pc3Rha2UuXG4gKiAtIGBXb3JrZmxvd1J1bnRpbWVFcnJvcmAgKGFuZCBzdWJjbGFzc2VzIGxpa2UgYFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3JgKVxuICogICBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgU0RLIGludmFyaWFudCBicm9rZSDigJQgc3VyZmFjZSB0aGF0IGFzIGBzZGtgLlxuICpcbiAqIEBwYXJhbSBlcnIgVGhlIGVycm9yIHZhbHVlIHRocm93biBieSB0aGUgd29ya2Zsb3cgLyBzdGVwLlxuICogQHBhcmFtIGVycm9yQ29kZSBPcHRpb25hbCBwcmVjb21wdXRlZCBlcnJvciBjb2RlLiBDYWxsZXJzIHRoYXQgYWxyZWFkeVxuICogICBrbm93IHRoZSBjb2RlIChlLmcuIGBSRVBMQVlfVElNRU9VVGAgb3IgYE1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEYCwgd2hpY2hcbiAqICAgYGNsYXNzaWZ5UnVuRXJyb3JgIGNhbid0IGRlcml2ZSBmcm9tIHRoZSBlcnJvciBhbG9uZSkgc2hvdWxkIHBhc3MgaXQgc29cbiAqICAgdGhlIGF0dHJpYnV0aW9uIGFuZCBoaW50IHJlZmxlY3QgdGhlIGFjdHVhbCBmYWlsdXJlIGNhdGVnb3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBlcnJvckNvZGU/OiBSdW5FcnJvckNvZGVcbik6IEVycm9yRGVzY3JpcHRpb24ge1xuICBjb25zdCBlZmZlY3RpdmVDb2RlID0gZXJyb3JDb2RlID8/IGNsYXNzaWZ5UnVuRXJyb3IoZXJyKTtcblxuICBpZiAoU2VyaWFsaXphdGlvbkVycm9yLmlzKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFNFUklBTElaQVRJT05fRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzQ29udGV4dFZpb2xhdGlvbkVycm9yKGVycikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRpb246ICd1c2VyJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IENPTlRFWFRfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVyciBpbnN0YW5jZW9mIFdvcmtmbG93UnVudGltZUVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IFJVTlRJTUVfRVJST1JfSElOVCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGVmZmVjdGl2ZUNvZGUgPT09IFJVTl9FUlJPUl9DT0RFUy5SRVBMQVlfVElNRU9VVCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGlvbjogJ3NkaycsXG4gICAgICBlcnJvckNvZGU6IGVmZmVjdGl2ZUNvZGUsXG4gICAgICBoaW50OiBSRVBMQVlfVElNRU9VVF9ISU5ULFxuICAgIH07XG4gIH1cblxuICBpZiAoZWZmZWN0aXZlQ29kZSA9PT0gUlVOX0VSUk9SX0NPREVTLk1BWF9ERUxJVkVSSUVTX0VYQ0VFREVEKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0aW9uOiAnc2RrJyxcbiAgICAgIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSxcbiAgICAgIGhpbnQ6IE1BWF9ERUxJVkVSSUVTX0hJTlQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGF0dHJpYnV0aW9uOiAndXNlcicsIGVycm9yQ29kZTogZWZmZWN0aXZlQ29kZSB9O1xufVxuIl19
|
package/dist/encryption.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"
|
|
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;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,UAAU,iDAU9C;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
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Browser-compatible AES-256-GCM encryption module.
|
|
3
|
-
*
|
|
4
|
-
* Uses the Web Crypto API (`globalThis.crypto.subtle`) which works in
|
|
5
|
-
* both modern browsers and Node.js 20+. This module is intentionally
|
|
6
|
-
* free of Node.js-specific imports so it can be bundled for the browser.
|
|
7
|
-
*
|
|
8
|
-
* The World interface (`getEncryptionKeyForRun`) returns a raw 32-byte
|
|
9
|
-
* AES-256 key. Callers should use `importKey()` once to convert it to a
|
|
10
|
-
* `CryptoKey`, then pass that to `encrypt()`/`decrypt()` for all
|
|
11
|
-
* operations within the same run. This avoids repeated `importKey()`
|
|
12
|
-
* calls on every encrypt/decrypt invocation.
|
|
13
|
-
*
|
|
14
|
-
* Wire format: `[nonce (12 bytes)][ciphertext + auth tag]`
|
|
15
|
-
* The `encr` format prefix is NOT part of this module — it's added/stripped
|
|
16
|
-
* by the serialization layer in `maybeEncrypt`/`maybeDecrypt`.
|
|
17
|
-
*/
|
|
1
|
+
import { WorkflowRuntimeError } from '@workflow/errors';
|
|
18
2
|
const NONCE_LENGTH = 12;
|
|
19
3
|
const TAG_LENGTH = 128; // bits
|
|
20
4
|
const KEY_LENGTH = 32; // bytes (AES-256)
|
|
@@ -29,7 +13,7 @@ const KEY_LENGTH = 32; // bytes (AES-256)
|
|
|
29
13
|
*/
|
|
30
14
|
export async function importKey(raw) {
|
|
31
15
|
if (raw.byteLength !== KEY_LENGTH) {
|
|
32
|
-
throw new
|
|
16
|
+
throw new WorkflowRuntimeError(`Encryption key must be exactly ${KEY_LENGTH} bytes, got ${raw.byteLength}`);
|
|
33
17
|
}
|
|
34
18
|
return globalThis.crypto.subtle.importKey('raw', raw, 'AES-GCM', false, [
|
|
35
19
|
'encrypt',
|
|
@@ -61,11 +45,11 @@ export async function encrypt(key, data) {
|
|
|
61
45
|
export async function decrypt(key, data) {
|
|
62
46
|
const minLength = NONCE_LENGTH + TAG_LENGTH / 8; // nonce + auth tag
|
|
63
47
|
if (data.byteLength < minLength) {
|
|
64
|
-
throw new
|
|
48
|
+
throw new WorkflowRuntimeError(`Encrypted data too short: expected at least ${minLength} bytes, got ${data.byteLength}`);
|
|
65
49
|
}
|
|
66
50
|
const nonce = data.subarray(0, NONCE_LENGTH);
|
|
67
51
|
const ciphertext = data.subarray(NONCE_LENGTH);
|
|
68
52
|
const plaintext = await globalThis.crypto.subtle.decrypt({ name: 'AES-GCM', iv: nonce, tagLength: TAG_LENGTH }, key, ciphertext);
|
|
69
53
|
return new Uint8Array(plaintext);
|
|
70
54
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNyeXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUJ4RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTztBQUMvQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7QUFFekM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFlO0lBQzdDLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksb0JBQW9CLENBQzVCLGtDQUFrQyxVQUFVLGVBQWUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUM1RSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtRQUN0RSxTQUFTO1FBQ1QsU0FBUztLQUNWLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FDM0IsR0FBYyxFQUNkLElBQWdCO0lBRWhCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDOUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3ZELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDckQsR0FBRyxFQUNILElBQUksQ0FDTCxDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FDM0IsR0FBYyxFQUNkLElBQWdCO0lBRWhCLE1BQU0sU0FBUyxHQUFHLFlBQVksR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQ3BFLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksb0JBQW9CLENBQzVCLCtDQUErQyxTQUFTLGVBQWUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUN6RixDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3RELEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDckQsR0FBRyxFQUNILFVBQVUsQ0FDWCxDQUFDO0lBQ0YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV29ya2Zsb3dSdW50aW1lRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcblxuLyoqXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgQUVTLTI1Ni1HQ00gZW5jcnlwdGlvbiBtb2R1bGUuXG4gKlxuICogVXNlcyB0aGUgV2ViIENyeXB0byBBUEkgKGBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGVgKSB3aGljaCB3b3JrcyBpblxuICogYm90aCBtb2Rlcm4gYnJvd3NlcnMgYW5kIE5vZGUuanMgMjArLiBUaGlzIG1vZHVsZSBpcyBpbnRlbnRpb25hbGx5XG4gKiBmcmVlIG9mIE5vZGUuanMtc3BlY2lmaWMgaW1wb3J0cyBzbyBpdCBjYW4gYmUgYnVuZGxlZCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogVGhlIFdvcmxkIGludGVyZmFjZSAoYGdldEVuY3J5cHRpb25LZXlGb3JSdW5gKSByZXR1cm5zIGEgcmF3IDMyLWJ5dGVcbiAqIEFFUy0yNTYga2V5LiBDYWxsZXJzIHNob3VsZCB1c2UgYGltcG9ydEtleSgpYCBvbmNlIHRvIGNvbnZlcnQgaXQgdG8gYVxuICogYENyeXB0b0tleWAsIHRoZW4gcGFzcyB0aGF0IHRvIGBlbmNyeXB0KClgL2BkZWNyeXB0KClgIGZvciBhbGxcbiAqIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHJ1bi4gVGhpcyBhdm9pZHMgcmVwZWF0ZWQgYGltcG9ydEtleSgpYFxuICogY2FsbHMgb24gZXZlcnkgZW5jcnlwdC9kZWNyeXB0IGludm9jYXRpb24uXG4gKlxuICogV2lyZSBmb3JtYXQ6IGBbbm9uY2UgKDEyIGJ5dGVzKV1bY2lwaGVydGV4dCArIGF1dGggdGFnXWBcbiAqIFRoZSBgZW5jcmAgZm9ybWF0IHByZWZpeCBpcyBOT1QgcGFydCBvZiB0aGlzIG1vZHVsZSDigJQgaXQncyBhZGRlZC9zdHJpcHBlZFxuICogYnkgdGhlIHNlcmlhbGl6YXRpb24gbGF5ZXIgaW4gYG1heWJlRW5jcnlwdGAvYG1heWJlRGVjcnlwdGAuXG4gKi9cblxuLy8gQ3J5cHRvS2V5IGlzIGEgZ2xvYmFsIHR5cGUgaW4gYnJvd3NlcnMgYW5kIE5vZGUuanMgMjArLCBidXQgVHlwZVNjcmlwdCdzXG4vLyBgZXMyMDIyYCBsaWIgZG9lc24ndCBpbmNsdWRlIGl0LiBSZS1leHBvcnQgaXQgZnJvbSB0aGUgbm9kZTpjcnlwdG8gdHlwZXNcbi8vIHNvIGNvbnN1bWVycyBjYW4gcmVmZXJlbmNlIGl0IHdpdGhvdXQgYWRkaW5nIGBkb21gIGxpYi5cbmV4cG9ydCB0eXBlIENyeXB0b0tleSA9IGltcG9ydCgnbm9kZTpjcnlwdG8nKS53ZWJjcnlwdG8uQ3J5cHRvS2V5O1xuXG5jb25zdCBOT05DRV9MRU5HVEggPSAxMjtcbmNvbnN0IFRBR19MRU5HVEggPSAxMjg7IC8vIGJpdHNcbmNvbnN0IEtFWV9MRU5HVEggPSAzMjsgLy8gYnl0ZXMgKEFFUy0yNTYpXG5cbi8qKlxuICogSW1wb3J0IGEgcmF3IEFFUy0yNTYga2V5IGFzIGEgYENyeXB0b0tleWAgZm9yIHVzZSB3aXRoIGBlbmNyeXB0KClgL2BkZWNyeXB0KClgLlxuICpcbiAqIENhbGxlcnMgc2hvdWxkIGNhbGwgdGhpcyBvbmNlIHBlciBydW4gKGFmdGVyIGBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuKClgKVxuICogYW5kIHBhc3MgdGhlIHJlc3VsdGluZyBgQ3J5cHRvS2V5YCB0byBhbGwgc3Vic2VxdWVudCBlbmNyeXB0L2RlY3J5cHQgY2FsbHMuXG4gKlxuICogQHBhcmFtIHJhdyAtIFJhdyAzMi1ieXRlIEFFUy0yNTYga2V5IChmcm9tIFdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4pXG4gKiBAcmV0dXJucyBDcnlwdG9LZXkgcmVhZHkgZm9yIEFFUy1HQ00gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1wb3J0S2V5KHJhdzogVWludDhBcnJheSkge1xuICBpZiAocmF3LmJ5dGVMZW5ndGggIT09IEtFWV9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICBgRW5jcnlwdGlvbiBrZXkgbXVzdCBiZSBleGFjdGx5ICR7S0VZX0xFTkdUSH0gYnl0ZXMsIGdvdCAke3Jhdy5ieXRlTGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCdyYXcnLCByYXcsICdBRVMtR0NNJywgZmFsc2UsIFtcbiAgICAnZW5jcnlwdCcsXG4gICAgJ2RlY3J5cHQnLFxuICBdKTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0IGRhdGEgdXNpbmcgQUVTLTI1Ni1HQ00uXG4gKlxuICogQHBhcmFtIGtleSAtIENyeXB0b0tleSBmcm9tIGBpbXBvcnRLZXkoKWBcbiAqIEBwYXJhbSBkYXRhIC0gUGxhaW50ZXh0IHRvIGVuY3J5cHRcbiAqIEByZXR1cm5zIGBbbm9uY2UgKDEyIGJ5dGVzKV1bY2lwaGVydGV4dCArIEdDTSBhdXRoIHRhZ11gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0KFxuICBrZXk6IENyeXB0b0tleSxcbiAgZGF0YTogVWludDhBcnJheVxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IG5vbmNlID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KE5PTkNFX0xFTkdUSCkpO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUdDTScsIGl2OiBub25jZSwgdGFnTGVuZ3RoOiBUQUdfTEVOR1RIIH0sXG4gICAga2V5LFxuICAgIGRhdGFcbiAgKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoTk9OQ0VfTEVOR1RIICsgY2lwaGVydGV4dC5ieXRlTGVuZ3RoKTtcbiAgcmVzdWx0LnNldChub25jZSwgMCk7XG4gIHJlc3VsdC5zZXQobmV3IFVpbnQ4QXJyYXkoY2lwaGVydGV4dCksIE5PTkNFX0xFTkdUSCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGVjcnlwdCBkYXRhIHVzaW5nIEFFUy0yNTYtR0NNLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBDcnlwdG9LZXkgZnJvbSBgaW1wb3J0S2V5KClgXG4gKiBAcGFyYW0gZGF0YSAtIGBbbm9uY2UgKDEyIGJ5dGVzKV1bY2lwaGVydGV4dCArIEdDTSBhdXRoIHRhZ11gXG4gKiBAcmV0dXJucyBEZWNyeXB0ZWQgcGxhaW50ZXh0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0KFxuICBrZXk6IENyeXB0b0tleSxcbiAgZGF0YTogVWludDhBcnJheVxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IG1pbkxlbmd0aCA9IE5PTkNFX0xFTkdUSCArIFRBR19MRU5HVEggLyA4OyAvLyBub25jZSArIGF1dGggdGFnXG4gIGlmIChkYXRhLmJ5dGVMZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICBgRW5jcnlwdGVkIGRhdGEgdG9vIHNob3J0OiBleHBlY3RlZCBhdCBsZWFzdCAke21pbkxlbmd0aH0gYnl0ZXMsIGdvdCAke2RhdGEuYnl0ZUxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICBjb25zdCBub25jZSA9IGRhdGEuc3ViYXJyYXkoMCwgTk9OQ0VfTEVOR1RIKTtcbiAgY29uc3QgY2lwaGVydGV4dCA9IGRhdGEuc3ViYXJyYXkoTk9OQ0VfTEVOR1RIKTtcbiAgY29uc3QgcGxhaW50ZXh0ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAgeyBuYW1lOiAnQUVTLUdDTScsIGl2OiBub25jZSwgdGFnTGVuZ3RoOiBUQUdfTEVOR1RIIH0sXG4gICAga2V5LFxuICAgIGNpcGhlcnRleHRcbiAgKTtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBsYWludGV4dCk7XG59XG4iXX0=
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { Event } from '@workflow/world';
|
|
2
|
+
/**
|
|
3
|
+
* Delay before firing the deferred unconsumed-event check after the promise
|
|
4
|
+
* queue has drained. Must be long enough for cross-VM microtask chains to
|
|
5
|
+
* propagate (resolve in host → workflow code in VM → subscribe call back
|
|
6
|
+
* in host). Any subscribe() arriving during this window cancels the check.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFERRED_CHECK_DELAY_MS = 100;
|
|
2
9
|
export declare enum EventConsumerResult {
|
|
3
10
|
/**
|
|
4
11
|
* Callback consumed the event, but should not be removed from the callbacks list
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAM;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAO3D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,OAAO,CA+Db;CACH"}
|
|
1
|
+
{"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAM;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAO3D;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,OAAO,CA+Db;CACH"}
|
package/dist/events-consumer.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { eventsLogger } from './logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Delay before firing the deferred unconsumed-event check after the promise
|
|
4
|
+
* queue has drained. Must be long enough for cross-VM microtask chains to
|
|
5
|
+
* propagate (resolve in host → workflow code in VM → subscribe call back
|
|
6
|
+
* in host). Any subscribe() arriving during this window cancels the check.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFERRED_CHECK_DELAY_MS = 100;
|
|
2
9
|
export var EventConsumerResult;
|
|
3
10
|
(function (EventConsumerResult) {
|
|
4
11
|
/**
|
|
@@ -108,9 +115,9 @@ export class EventsConsumer {
|
|
|
108
115
|
this.pendingUnconsumedCheck = null;
|
|
109
116
|
this.onUnconsumedEvent(currentEvent);
|
|
110
117
|
}
|
|
111
|
-
},
|
|
118
|
+
}, DEFERRED_CHECK_DELAY_MS);
|
|
112
119
|
});
|
|
113
120
|
}
|
|
114
121
|
};
|
|
115
122
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUFzQkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxpQkFBaUIsQ0FBeUI7SUFDMUMsZUFBZSxDQUFzQjtJQUNyQyxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3BELHdCQUF3QixHQUF5QyxJQUFJLENBQUM7SUFDdEUsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQVksTUFBZSxFQUFFLE9BQThCO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrRkFBa0Y7UUFDbEYsOEVBQThFO1FBQzlFLDREQUE0RDtRQUM1RCxJQUFJLElBQUksQ0FBQyxzQkFBc0Is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LENBQUMsc0JBQXNCLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDVixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZXZlbnRzTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5leHBvcnQgZW51bSBFdmVudENvbnN1bWVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGNvbnN1bWVkIHRoZSBldmVudCwgYnV0IHNob3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKi9cbiAgQ29uc3VtZWQsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBkaWQgbm90IGNvbnN1bWUgdGhlIGV2ZW50LCBzbyBpdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGNhbGxiYWNrXG4gICAqL1xuICBOb3RDb25zdW1lZCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGNvbnN1bWVkIHRoZSBldmVudCwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGNhbGxiYWNrcyBsaXN0XG4gICAqL1xuICBGaW5pc2hlZCxcbn1cblxudHlwZSBFdmVudENvbnN1bWVyQ2FsbGJhY2sgPSAoZXZlbnQ6IEV2ZW50IHwgbnVsbCkgPT4gRXZlbnRDb25zdW1lclJlc3VsdDtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudHNDb25zdW1lck9wdGlvbnMge1xuICAvKipcbiAgICogQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGEgbm9uLW51bGwgZXZlbnQgY2Fubm90IGJlIGNvbnN1bWVkIGJ5IGFueSByZWdpc3RlcmVkXG4gICAqIGNhbGxiYWNrLCBpbmRpY2F0aW5nIGFuIG9ycGhhbmVkIG9yIGludmFsaWQgZXZlbnQgaW4gdGhlIGV2ZW50IGxvZy4gVGhlXG4gICAqIGNoZWNrIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyIHRoZSBwcm9taXNlIHF1ZXVlIGhhcyBkcmFpbmVkLCBlbnN1cmluZyB0aGF0XG4gICAqIGFueSBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uKSBjb21wbGV0ZXMgYW5kXG4gICAqIGRvd25zdHJlYW0gc3Vic2NyaWJlKCkgY2FsbHMgaGF2ZSBhIGNoYW5jZSB0byBjYW5jZWwgdGhlIGNoZWNrIGZpcnN0LlxuICAgKi9cbiAgb25VbmNvbnN1bWVkRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHByb21pc2UgcXVldWUuIFRoZSB1bmNvbnN1bWVkIGV2ZW50IGNoZWNrIGlzIGNoYWluZWRcbiAgICogb250byB0aGlzIHF1ZXVlIHNvIGl0IG9ubHkgZmlyZXMgYWZ0ZXIgYWxsIHBlbmRpbmcgYXN5bmMgd29yayAoZS5nLixcbiAgICogZGVzZXJpYWxpemF0aW9uKSBoYXMgY29tcGxldGVkLiBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyB3aGVuIGFzeW5jXG4gICAqIGRlc2VyaWFsaXphdGlvbiBkZWxheXMgdGhlIHJlc29sdmUoKSB0aGF0IHRyaWdnZXJzIHRoZSBuZXh0IHN1YnNjcmliZSgpLlxuICAgKi9cbiAgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRzQ29uc3VtZXIge1xuICBldmVudEluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGV2ZW50czogRXZlbnRbXSA9IFtdO1xuICByZWFkb25seSBjYWxsYmFja3M6IEV2ZW50Q29uc3VtZXJDYWxsYmFja1tdID0gW107XG4gIHByaXZhdGUgb25VbmNvbnN1bWVkRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgZ2V0UHJvbWlzZVF1ZXVlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHBlbmRpbmdVbmNvbnN1bWVkQ2hlY2s6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdW5jb25zdW1lZENoZWNrVmVyc2lvbiA9IDA7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRzOiBFdmVudFtdLCBvcHRpb25zOiBFdmVudHNDb25zdW1lck9wdGlvbnMpIHtcbiAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcbiAgICB0aGlzLmV2ZW50SW5kZXggPSAwO1xuICAgIHRoaXMub25VbmNvbnN1bWVkRXZlbnQgPSBvcHRpb25zLm9uVW5jb25zdW1lZEV2ZW50O1xuICAgIHRoaXMuZ2V0UHJvbWlzZVF1ZXVlID0gb3B0aW9ucy5nZXRQcm9taXNlUXVldWU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGFuIGV2ZW50IGhhcyBiZWVuIGNvbnN1bWVkXG4gICAqIGJ5IGEgZGlmZmVyZW50IGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgY2FuIHJldHVybjpcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWRgIHRoZSBldmVudCBpcyBjb25zaWRlcmVkIGNvbnN1bWVkIGFuZCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gYW55IG90aGVyIGNhbGxiYWNrLCBidXQgdGhlIGNhbGxiYWNrIHdpbGwgcmVtYWluIGluIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKiAgLSBgRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZGAgdGhlIGV2ZW50IGlzIHBhc3NlZCB0byB0aGUgbmV4dCBjYWxsYmFja1xuICAgKiAgLSBgRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZGAgdGhlIGV2ZW50IGlzIGNvbnNpZGVyZWQgY29uc3VtZWQgYW5kIHRoZSBjYWxsYmFjayBpcyByZW1vdmVkIGZyb20gdGhlIGNhbGxiYWNrcyBsaXN0XG4gICAqXG4gICAqIEBwYXJhbSBmbiAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byByZWdpc3Rlci5cbiAgICovXG4gIHN1YnNjcmliZShmbjogRXZlbnRDb25zdW1lckNhbGxiYWNrKSB7XG4gICAgdGhpcy5jYWxsYmFja3MucHVzaChmbik7XG4gICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHVuY29uc3VtZWQgY2hlY2sgc2luY2UgYSBuZXcgY2FsbGJhY2sgbWF5IGNvbnN1bWUgdGhlIGV2ZW50LlxuICAgIC8vIEluY3JlbWVudGluZyB0aGUgdmVyc2lvbiBjYXVzZXMgYW55IGluLWZsaWdodCBwcm9taXNlIGNoYWluIGNoZWNrIHRvIG5vLW9wLlxuICAgIC8vIEFsc28gY2xlYXIgdGhlIHBlbmRpbmcgc2V0VGltZW91dCBpZiBpdCBoYXNuJ3QgZmlyZWQgeWV0LlxuICAgIGlmICh0aGlzLnBlbmRpbmdVbmNvbnN1bWVkQ2hlY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbisrO1xuICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQpO1xuICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3MubmV4dFRpY2sodGhpcy5jb25zdW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZSA9ICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50RXZlbnQgPSB0aGlzLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhdID8/IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1tpXTtcbiAgICAgIGxldCBoYW5kbGVkID0gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZWQgPSBjYWxsYmFjayhjdXJyZW50RXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXZlbnRzTG9nZ2VyLmVycm9yKCdFdmVudENvbnN1bWVyIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yJywgeyBlcnJvciB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaGFuZGxlZCA9PT0gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZCB8fFxuICAgICAgICBoYW5kbGVkID09PSBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkXG4gICAgICApIHtcbiAgICAgICAgLy8gY29uc3VtZXIgaGFuZGxlZCB0aGlzIGV2ZW50LCBzbyBpbmNyZWFzZSB0aGUgZXZlbnQgaW5kZXhcbiAgICAgICAgdGhpcy5ldmVudEluZGV4Kys7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBjYWxsYmFjayBpZiBpdCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKGhhbmRsZWQgPT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQpIHtcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb250aW51ZSB0byB0aGUgbmV4dCBldmVudFxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMuY29uc3VtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBhbGwgY2FsbGJhY2tzIHJldHVybmVkIE5vdENvbnN1bWVkLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGV2ZW50IGlzIG5vbi1udWxsIChhIHJlYWwgZXZlbnQsIG5vdCBlbmQtb2YtZXZlbnRzKSxcbiAgICAvLyBzY2hlZHVsZSBhIGRlZmVycmVkIGNoZWNrLiBXZSBjaGFpbiBvbnRvIHRoZSBwcm9taXNlUXVldWUgc28gdGhhdCBhbnlcbiAgICAvLyBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sIGRlc2VyaWFsaXphdGlvbi9kZWNyeXB0aW9uIHRoYXQgdHJpZ2dlcnNcbiAgICAvLyByZXNvbHZlKCkg4oaSIHVzZXIgY29kZSDihpIgc3Vic2NyaWJlKCkpIGNvbXBsZXRlcyBmaXJzdC4gSWYgdGhlIGV2ZW50XG4gICAgLy8gaXMgc3RpbGwgdW5jb25zdW1lZCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLCBpdCdzIHRydWx5IG9ycGhhbmVkLlxuICAgIGlmIChjdXJyZW50RXZlbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNoZWNrVmVyc2lvbiA9ICsrdGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uO1xuICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gdGhpcy5nZXRQcm9taXNlUXVldWUoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAvLyBZaWVsZCBvbmNlIGFmdGVyIHRoZSBmaXJzdCBxdWV1ZSBkcmFpbiBzbyBwcm9taXNlIGNoYWlucyByZXN1bWVkIGJ5XG4gICAgICAgICAgLy8gdGhhdCBkcmFpbiBjYW4gcnVuIGFjcm9zcyB0aGUgVk0gYm91bmRhcnkgYW5kIGFwcGVuZCBhbnkgZm9sbG93LXVwXG4gICAgICAgICAgLy8gYXN5bmMgd29yayAoZm9yIGV4YW1wbGU6IHN0ZXBfY29tcGxldGVkIHJlc29sdmVzIC0+IGZvci1hd2FpdCBsb29wXG4gICAgICAgICAgLy8gcmVzdW1lcyAtPiB0aGUgbmV4dCBob29rIHBheWxvYWQgc3RhcnRzIGh5ZHJhdGluZykuXG4gICAgICAgICAgKCkgPT4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRQcm9taXNlUXVldWUoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIFVzZSBhIGRlbGF5ZWQgc2V0VGltZW91dCBhZnRlciB0aGUgcXVldWUgZHJhaW5zLiBUaGUgZGVsYXkgbXVzdCBiZVxuICAgICAgICAgIC8vIGxvbmcgZW5vdWdoIGZvciBwcm9taXNlIGNoYWlucyB0byBwcm9wYWdhdGUgYWNyb3NzIHRoZSBWTSBib3VuZGFyeVxuICAgICAgICAgIC8vIChmcm9tIHJlc29sdmUoKSBpbiB0aGUgaG9zdCBjb250ZXh0IHRocm91Z2ggdG8gdGhlIHdvcmtmbG93IGNvZGVcbiAgICAgICAgICAvLyBjYWxsaW5nIHN1YnNjcmliZSgpIGluIHRoZSBWTSBjb250ZXh0KS4gTm9kZS5qcyBkb2VzIG5vdCBndWFyYW50ZWVcbiAgICAgICAgICAvLyB0aGF0IHNldFRpbWVvdXQoMCkgZmlyZXMgYWZ0ZXIgYWxsIGNyb3NzLWNvbnRleHQgbWljcm90YXNrcyBzZXR0bGUsXG4gICAgICAgICAgLy8gc28gd2UgdXNlIGEgc21hbGwgYnV0IG5vbi16ZXJvIGRlbGF5LiBBbnkgc3Vic2NyaWJlKCkgY2FsbCB0aGF0XG4gICAgICAgICAgLy8gYXJyaXZlcyBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCBjYW5jZWwgdGhlIGNoZWNrIHZpYSB2ZXJzaW9uXG4gICAgICAgICAgLy8gaW52YWxpZGF0aW9uICsgY2xlYXJUaW1lb3V0LlxuICAgICAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy51bmNvbnN1bWVkQ2hlY2tWZXJzaW9uID09PSBjaGVja1ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5vblVuY29uc3VtZWRFdmVudChjdXJyZW50RXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbnN1bWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V2ZW50cy1jb25zdW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLE1BQU0sQ0FBTixJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCwyRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCxxRUFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWJXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFhOUI7QUFzQkQsTUFBTSxPQUFPLGNBQWM7SUFDekIsVUFBVSxDQUFTO0lBQ1YsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLEdBQTRCLEVBQUUsQ0FBQztJQUN6QyxpQkFBaUIsQ0FBeUI7SUFDMUMsZUFBZSxDQUFzQjtJQUNyQyxzQkFBc0IsR0FBeUIsSUFBSSxDQUFDO0lBQ3BELHdCQUF3QixHQUF5QyxJQUFJLENBQUM7SUFDdEUsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLFlBQVksTUFBZSxFQUFFLE9BQThCO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsQ0FBQyxFQUF5QjtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixrRkFB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RTtvQkFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztvQkFDckMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgZXZlbnRzTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuXG4vKipcbiAqIERlbGF5IGJlZm9yZSBmaXJpbmcgdGhlIGRlZmVycmVkIHVuY29uc3VtZWQtZXZlbnQgY2hlY2sgYWZ0ZXIgdGhlIHByb21pc2VcbiAqIHF1ZXVlIGhhcyBkcmFpbmVkLiBNdXN0IGJlIGxvbmcgZW5vdWdoIGZvciBjcm9zcy1WTSBtaWNyb3Rhc2sgY2hhaW5zIHRvXG4gKiBwcm9wYWdhdGUgKHJlc29sdmUgaW4gaG9zdCDihpIgd29ya2Zsb3cgY29kZSBpbiBWTSDihpIgc3Vic2NyaWJlIGNhbGwgYmFja1xuICogaW4gaG9zdCkuIEFueSBzdWJzY3JpYmUoKSBhcnJpdmluZyBkdXJpbmcgdGhpcyB3aW5kb3cgY2FuY2VscyB0aGUgY2hlY2suXG4gKi9cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9DSEVDS19ERUxBWV9NUyA9IDEwMDtcblxuZXhwb3J0IGVudW0gRXZlbnRDb25zdW1lclJlc3VsdCB7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGJ1dCBzaG91bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICovXG4gIENvbnN1bWVkLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZGlkIG5vdCBjb25zdW1lIHRoZSBldmVudCwgc28gaXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgbmV4dCBjYWxsYmFja1xuICAgKi9cbiAgTm90Q29uc3VtZWQsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjb25zdW1lZCB0aGUgZXZlbnQsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKi9cbiAgRmluaXNoZWQsXG59XG5cbnR5cGUgRXZlbnRDb25zdW1lckNhbGxiYWNrID0gKGV2ZW50OiBFdmVudCB8IG51bGwpID0+IEV2ZW50Q29uc3VtZXJSZXN1bHQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRzQ29uc3VtZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGludm9rZWQgd2hlbiBhIG5vbi1udWxsIGV2ZW50IGNhbm5vdCBiZSBjb25zdW1lZCBieSBhbnkgcmVnaXN0ZXJlZFxuICAgKiBjYWxsYmFjaywgaW5kaWNhdGluZyBhbiBvcnBoYW5lZCBvciBpbnZhbGlkIGV2ZW50IGluIHRoZSBldmVudCBsb2cuIFRoZVxuICAgKiBjaGVjayBpcyBkZWZlcnJlZCB1bnRpbCBhZnRlciB0aGUgcHJvbWlzZSBxdWV1ZSBoYXMgZHJhaW5lZCwgZW5zdXJpbmcgdGhhdFxuICAgKiBhbnkgcGVuZGluZyBhc3luYyB3b3JrIChlLmcuLCBkZXNlcmlhbGl6YXRpb24vZGVjcnlwdGlvbikgY29tcGxldGVzIGFuZFxuICAgKiBkb3duc3RyZWFtIHN1YnNjcmliZSgpIGNhbGxzIGhhdmUgYSBjaGFuY2UgdG8gY2FuY2VsIHRoZSBjaGVjayBmaXJzdC5cbiAgICovXG4gIG9uVW5jb25zdW1lZEV2ZW50OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBwcm9taXNlIHF1ZXVlLiBUaGUgdW5jb25zdW1lZCBldmVudCBjaGVjayBpcyBjaGFpbmVkXG4gICAqIG9udG8gdGhpcyBxdWV1ZSBzbyBpdCBvbmx5IGZpcmVzIGFmdGVyIGFsbCBwZW5kaW5nIGFzeW5jIHdvcmsgKGUuZy4sXG4gICAqIGRlc2VyaWFsaXphdGlvbikgaGFzIGNvbXBsZXRlZC4gVGhpcyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgd2hlbiBhc3luY1xuICAgKiBkZXNlcmlhbGl6YXRpb24gZGVsYXlzIHRoZSByZXNvbHZlKCkgdGhhdCB0cmlnZ2VycyB0aGUgbmV4dCBzdWJzY3JpYmUoKS5cbiAgICovXG4gIGdldFByb21pc2VRdWV1ZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50c0NvbnN1bWVyIHtcbiAgZXZlbnRJbmRleDogbnVtYmVyO1xuICByZWFkb25seSBldmVudHM6IEV2ZW50W10gPSBbXTtcbiAgcmVhZG9ubHkgY2FsbGJhY2tzOiBFdmVudENvbnN1bWVyQ2FsbGJhY2tbXSA9IFtdO1xuICBwcml2YXRlIG9uVW5jb25zdW1lZEV2ZW50OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIGdldFByb21pc2VRdWV1ZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBwZW5kaW5nVW5jb25zdW1lZENoZWNrOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVuY29uc3VtZWRDaGVja1ZlcnNpb24gPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50czogRXZlbnRbXSwgb3B0aW9uczogRXZlbnRzQ29uc3VtZXJPcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgdGhpcy5ldmVudEluZGV4ID0gMDtcbiAgICB0aGlzLm9uVW5jb25zdW1lZEV2ZW50ID0gb3B0aW9ucy5vblVuY29uc3VtZWRFdmVudDtcbiAgICB0aGlzLmdldFByb21pc2VRdWV1ZSA9IG9wdGlvbnMuZ2V0UHJvbWlzZVF1ZXVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciBhbiBldmVudCBoYXMgYmVlbiBjb25zdW1lZFxuICAgKiBieSBhIGRpZmZlcmVudCBjYWxsYmFjay4gVGhlIGNhbGxiYWNrIGNhbiByZXR1cm46XG4gICAqICAtIGBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkYCB0aGUgZXZlbnQgaXMgY29uc2lkZXJlZCBjb25zdW1lZCBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIGFueSBvdGhlciBjYWxsYmFjaywgYnV0IHRoZSBjYWxsYmFjayB3aWxsIHJlbWFpbiBpbiB0aGUgY2FsbGJhY2tzIGxpc3RcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWRgIHRoZSBldmVudCBpcyBwYXNzZWQgdG8gdGhlIG5leHQgY2FsbGJhY2tcbiAgICogIC0gYEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWRgIHRoZSBldmVudCBpcyBjb25zaWRlcmVkIGNvbnN1bWVkIGFuZCB0aGUgY2FsbGJhY2sgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWxsYmFja3MgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gZm4gLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBzdWJzY3JpYmUoZm46IEV2ZW50Q29uc3VtZXJDYWxsYmFjaykge1xuICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZm4pO1xuICAgIC8vIENhbmNlbCBhbnkgcGVuZGluZyB1bmNvbnN1bWVkIGNoZWNrIHNpbmNlIGEgbmV3IGNhbGxiYWNrIG1heSBjb25zdW1lIHRoZSBldmVudC5cbiAgICAvLyBJbmNyZW1lbnRpbmcgdGhlIHZlcnNpb24gY2F1c2VzIGFueSBpbi1mbGlnaHQgcHJvbWlzZSBjaGFpbiBjaGVjayB0byBuby1vcC5cbiAgICAvLyBBbHNvIGNsZWFyIHRoZSBwZW5kaW5nIHNldFRpbWVvdXQgaWYgaXQgaGFzbid0IGZpcmVkIHlldC5cbiAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZENoZWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVuY29uc3VtZWRDaGVja1ZlcnNpb24rKztcbiAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IG51bGw7XG4gICAgICBpZiAodGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGVuZGluZ1VuY29uc3VtZWRUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzLm5leHRUaWNrKHRoaXMuY29uc3VtZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEV2ZW50ID0gdGhpcy5ldmVudHNbdGhpcy5ldmVudEluZGV4XSA/PyBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja3NbaV07XG4gICAgICBsZXQgaGFuZGxlZCA9IEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVkID0gY2FsbGJhY2soY3VycmVudEV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGV2ZW50c0xvZ2dlci5lcnJvcignRXZlbnRDb25zdW1lciBjYWxsYmFjayB0aHJldyBhbiBlcnJvcicsIHsgZXJyb3IgfSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhbmRsZWQgPT09IEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQgfHxcbiAgICAgICAgaGFuZGxlZCA9PT0gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZFxuICAgICAgKSB7XG4gICAgICAgIC8vIGNvbnN1bWVyIGhhbmRsZWQgdGhpcyBldmVudCwgc28gaW5jcmVhc2UgdGhlIGV2ZW50IGluZGV4XG4gICAgICAgIHRoaXMuZXZlbnRJbmRleCsrO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgY2FsbGJhY2sgaWYgaXQgaGFzIGZpbmlzaGVkXG4gICAgICAgIGlmIChoYW5kbGVkID09PSBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29udGludWUgdG8gdGhlIG5leHQgZXZlbnRcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayh0aGlzLmNvbnN1bWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgYWxsIGNhbGxiYWNrcyByZXR1cm5lZCBOb3RDb25zdW1lZC5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBldmVudCBpcyBub24tbnVsbCAoYSByZWFsIGV2ZW50LCBub3QgZW5kLW9mLWV2ZW50cyksXG4gICAgLy8gc2NoZWR1bGUgYSBkZWZlcnJlZCBjaGVjay4gV2UgY2hhaW4gb250byB0aGUgcHJvbWlzZVF1ZXVlIHNvIHRoYXQgYW55XG4gICAgLy8gcGVuZGluZyBhc3luYyB3b3JrIChlLmcuLCBkZXNlcmlhbGl6YXRpb24vZGVjcnlwdGlvbiB0aGF0IHRyaWdnZXJzXG4gICAgLy8gcmVzb2x2ZSgpIOKGkiB1c2VyIGNvZGUg4oaSIHN1YnNjcmliZSgpKSBjb21wbGV0ZXMgZmlyc3QuIElmIHRoZSBldmVudFxuICAgIC8vIGlzIHN0aWxsIHVuY29uc3VtZWQgYWZ0ZXIgdGhlIHF1ZXVlIGRyYWlucywgaXQncyB0cnVseSBvcnBoYW5lZC5cbiAgICBpZiAoY3VycmVudEV2ZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjaGVja1ZlcnNpb24gPSArK3RoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbjtcbiAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IHRoaXMuZ2V0UHJvbWlzZVF1ZXVlKClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgLy8gWWllbGQgb25jZSBhZnRlciB0aGUgZmlyc3QgcXVldWUgZHJhaW4gc28gcHJvbWlzZSBjaGFpbnMgcmVzdW1lZCBieVxuICAgICAgICAgIC8vIHRoYXQgZHJhaW4gY2FuIHJ1biBhY3Jvc3MgdGhlIFZNIGJvdW5kYXJ5IGFuZCBhcHBlbmQgYW55IGZvbGxvdy11cFxuICAgICAgICAgIC8vIGFzeW5jIHdvcmsgKGZvciBleGFtcGxlOiBzdGVwX2NvbXBsZXRlZCByZXNvbHZlcyAtPiBmb3ItYXdhaXQgbG9vcFxuICAgICAgICAgIC8vIHJlc3VtZXMgLT4gdGhlIG5leHQgaG9vayBwYXlsb2FkIHN0YXJ0cyBoeWRyYXRpbmcpLlxuICAgICAgICAgICgpID0+IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuZ2V0UHJvbWlzZVF1ZXVlKCkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBVc2UgYSBkZWxheWVkIHNldFRpbWVvdXQgYWZ0ZXIgdGhlIHF1ZXVlIGRyYWlucy4gVGhlIGRlbGF5IG11c3QgYmVcbiAgICAgICAgICAvLyBsb25nIGVub3VnaCBmb3IgcHJvbWlzZSBjaGFpbnMgdG8gcHJvcGFnYXRlIGFjcm9zcyB0aGUgVk0gYm91bmRhcnlcbiAgICAgICAgICAvLyAoZnJvbSByZXNvbHZlKCkgaW4gdGhlIGhvc3QgY29udGV4dCB0aHJvdWdoIHRvIHRoZSB3b3JrZmxvdyBjb2RlXG4gICAgICAgICAgLy8gY2FsbGluZyBzdWJzY3JpYmUoKSBpbiB0aGUgVk0gY29udGV4dCkuIE5vZGUuanMgZG9lcyBub3QgZ3VhcmFudGVlXG4gICAgICAgICAgLy8gdGhhdCBzZXRUaW1lb3V0KDApIGZpcmVzIGFmdGVyIGFsbCBjcm9zcy1jb250ZXh0IG1pY3JvdGFza3Mgc2V0dGxlLFxuICAgICAgICAgIC8vIHNvIHdlIHVzZSBhIHNtYWxsIGJ1dCBub24temVybyBkZWxheS4gQW55IHN1YnNjcmliZSgpIGNhbGwgdGhhdFxuICAgICAgICAgIC8vIGFycml2ZXMgZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgY2FuY2VsIHRoZSBjaGVjayB2aWEgdmVyc2lvblxuICAgICAgICAgIC8vIGludmFsaWRhdGlvbiArIGNsZWFyVGltZW91dC5cbiAgICAgICAgICB0aGlzLnBlbmRpbmdVbmNvbnN1bWVkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVW5jb25zdW1lZFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMudW5jb25zdW1lZENoZWNrVmVyc2lvbiA9PT0gY2hlY2tWZXJzaW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ1VuY29uc3VtZWRDaGVjayA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMub25VbmNvbnN1bWVkRXZlbnQoY3VycmVudEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBERUZFUlJFRF9DSEVDS19ERUxBWV9NUyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -7,17 +7,17 @@ import { type PromiseWithResolvers } from '@workflow/utils';
|
|
|
7
7
|
* to acquire a reader/writer. For that reason we use polling instead of a
|
|
8
8
|
* fully event-driven approach here.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* is
|
|
10
|
+
* 10ms is chosen so the polling tick almost never sits on the critical path:
|
|
11
|
+
* the V2 step-executor's `opsSettled` race waits for this state to resolve
|
|
12
|
+
* after each step body returns, so a coarser interval (the previous 100ms)
|
|
13
|
+
* adds visible per-step latency to streaming workflows. With a uniformly
|
|
14
|
+
* distributed offset between step return and the next tick, the expected
|
|
15
|
+
* wait is half the interval — so 10ms means ~5ms average wait per step
|
|
16
|
+
* instead of ~50ms. The per-tick work is `writable.locked` plus a
|
|
17
|
+
* `getWriter()`/`releaseLock()` probe, both microsecond-scale; 10× more
|
|
18
|
+
* ticks during a stream's lifetime is not measurable in practice.
|
|
19
19
|
*/
|
|
20
|
-
export declare const LOCK_POLL_INTERVAL_MS =
|
|
20
|
+
export declare const LOCK_POLL_INTERVAL_MS = 10;
|
|
21
21
|
/**
|
|
22
22
|
* State tracker for flushable stream operations.
|
|
23
23
|
* Resolves when either:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flushable-stream.d.ts","sourceRoot":"","sources":["../src/flushable-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,iBAAiB,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB,CAAC,IAAI,CAAC;IACtE,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACzD,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;CAC1D;AAED,wBAAgB,oBAAoB,IAAI,oBAAoB,CAO3D;AA2DD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,oBAAoB,GAC1B,IAAI,CAwBN;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoEf"}
|