@workflow/core 5.0.0-beta.35 → 5.0.0-beta.37
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/capabilities.d.ts +6 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +13 -1
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +5 -2
- package/dist/create-hook.d.ts +41 -22
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +12 -1
- package/dist/encryption.d.ts +15 -2
- package/dist/encryption.d.ts.map +1 -1
- package/dist/encryption.js +28 -7
- package/dist/flushable-stream.d.ts +55 -0
- package/dist/flushable-stream.d.ts.map +1 -1
- package/dist/flushable-stream.js +106 -4
- package/dist/global.d.ts +2 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/log-format.js +3 -3
- package/dist/private.d.ts +82 -50
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +149 -22
- package/dist/replay-payload-cache.d.ts +57 -0
- package/dist/replay-payload-cache.d.ts.map +1 -0
- package/dist/replay-payload-cache.js +143 -0
- package/dist/runtime/constants.d.ts +11 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +26 -1
- package/dist/runtime/count-step-started-events.d.ts +52 -0
- package/dist/runtime/count-step-started-events.d.ts.map +1 -0
- package/dist/runtime/count-step-started-events.js +72 -0
- package/dist/runtime/get-port-lazy.js +4 -4
- package/dist/runtime/helpers.d.ts +47 -16
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +97 -28
- package/dist/runtime/resume-hook.d.ts +6 -3
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +180 -58
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -3
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +5 -3
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +65 -18
- package/dist/runtime/step-executor.d.ts +48 -8
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +90 -20
- package/dist/runtime/suspension-handler.js +3 -3
- package/dist/runtime/world.d.ts +2 -7
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +3 -10
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +398 -184
- package/dist/sealed-box.d.ts +167 -0
- package/dist/sealed-box.d.ts.map +1 -0
- package/dist/sealed-box.js +571 -0
- package/dist/serialization/client.d.ts +3 -3
- package/dist/serialization/client.d.ts.map +1 -1
- package/dist/serialization/client.js +1 -1
- package/dist/serialization/codec.d.ts +6 -4
- package/dist/serialization/codec.d.ts.map +1 -1
- package/dist/serialization/codec.js +1 -1
- package/dist/serialization/encryption.d.ts +118 -17
- package/dist/serialization/encryption.d.ts.map +1 -1
- package/dist/serialization/encryption.js +131 -15
- package/dist/serialization/step.d.ts +4 -4
- package/dist/serialization/step.d.ts.map +1 -1
- package/dist/serialization/step.js +2 -2
- package/dist/serialization/types.d.ts +20 -0
- package/dist/serialization/types.d.ts.map +1 -1
- package/dist/serialization/types.js +11 -1
- package/dist/serialization-format.d.ts +44 -4
- package/dist/serialization-format.d.ts.map +1 -1
- package/dist/serialization-format.js +66 -9
- package/dist/serialization.d.ts +61 -21
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +556 -200
- package/dist/set-attributes.d.ts +2 -7
- package/dist/set-attributes.d.ts.map +1 -1
- package/dist/set-attributes.js +1 -6
- package/dist/step/context-storage.d.ts +2 -2
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +2 -2
- package/dist/step/writable-stream.d.ts.map +1 -1
- package/dist/step/writable-stream.js +14 -3
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +87 -22
- package/dist/symbols.d.ts +26 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +27 -1
- package/dist/telemetry/semantic-conventions.d.ts +4 -4
- package/dist/telemetry/semantic-conventions.js +2 -2
- 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 +76 -9
- package/dist/workflow/abort-controller.d.ts +1 -1
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +38 -3
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +85 -30
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/set-attributes.d.ts +0 -9
- package/dist/workflow/set-attributes.d.ts.map +1 -1
- package/dist/workflow/set-attributes.js +1 -6
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +21 -9
- package/dist/workflow.d.ts +14 -11
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +37 -92
- package/docs/api-reference/create-hook.mdx +43 -2
- package/docs/api-reference/define-hook.mdx +26 -24
- package/docs/api-reference/fatal-error.mdx +29 -7
- package/docs/api-reference/fetch.mdx +3 -4
- package/docs/api-reference/set-attributes.mdx +0 -4
- package/docs/api-reference/sleep.mdx +1 -1
- package/docs/foundations/hooks.mdx +1 -1
- package/docs/foundations/idempotency.mdx +16 -9
- package/docs/how-it-works/cancellation.mdx +2 -2
- package/docs/how-it-works/code-transform.mdx +19 -15
- package/docs/how-it-works/encryption.mdx +3 -3
- package/docs/how-it-works/event-sourcing.mdx +6 -6
- package/docs/how-it-works/framework-integrations.mdx +96 -342
- package/package.json +6 -6
- package/dist/runtime/step-handler.d.ts +0 -2
- package/dist/runtime/step-handler.d.ts.map +0 -1
- package/dist/runtime/step-handler.js +0 -839
- package/dist/step-hydration-cache.d.ts +0 -148
- package/dist/step-hydration-cache.d.ts.map +0 -1
- package/dist/step-hydration-cache.js +0 -171
package/dist/set-attributes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type {
|
|
1
|
+
import type { SetAttributesOptions } from './workflow/set-attributes.js';
|
|
2
|
+
export type { SetAttributesOptions };
|
|
3
3
|
/**
|
|
4
4
|
* Host-side implementation for `setAttributes`. Workflow bodies resolve
|
|
5
5
|
* to `./workflow/set-attributes.ts` via the `workflow` package-exports
|
|
@@ -10,9 +10,4 @@ export type { ExperimentalSetAttributesOptions, SetAttributesOptions };
|
|
|
10
10
|
* a clear `FatalError`.
|
|
11
11
|
*/
|
|
12
12
|
export declare function setAttributes(attrs: Record<string, string | undefined>, options?: SetAttributesOptions): Promise<void>;
|
|
13
|
-
/**
|
|
14
|
-
* @deprecated The feature is no longer experimental — use
|
|
15
|
-
* {@link setAttributes} instead.
|
|
16
|
-
*/
|
|
17
|
-
export declare const experimental_setAttributes: typeof setAttributes;
|
|
18
13
|
//# sourceMappingURL=set-attributes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"set-attributes.d.ts","sourceRoot":"","sources":["../src/set-attributes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACzC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|
package/dist/set-attributes.js
CHANGED
|
@@ -53,9 +53,4 @@ export async function setAttributes(attrs, options = {}) {
|
|
|
53
53
|
},
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
* @deprecated The feature is no longer experimental — use
|
|
58
|
-
* {@link setAttributes} instead.
|
|
59
|
-
*/
|
|
60
|
-
export const experimental_setAttributes = setAttributes;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFRM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDL0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxTQUFTLEVBQUU7WUFDVCxPQUFPO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUk7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vcnVudGltZS9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0IHR5cGUge1xuICBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyxcbiAgU2V0QXR0cmlidXRlc09wdGlvbnMsXG59IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNPcHRpb25zLCBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9O1xuXG4vKipcbiAqIEhvc3Qtc2lkZSBpbXBsZW1lbnRhdGlvbiBmb3IgYHNldEF0dHJpYnV0ZXNgLiBXb3JrZmxvdyBib2RpZXMgcmVzb2x2ZVxuICogdG8gYC4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHNgIHZpYSB0aGUgYHdvcmtmbG93YCBwYWNrYWdlLWV4cG9ydHNcbiAqIGNvbmRpdGlvbjsgc3RlcCBib2RpZXMgcmVzb2x2ZSBoZXJlIGFuZCBjYW4gcGVyZm9ybSB0aGUgd29ybGQgd3JpdGVcbiAqIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBhbHJlYWR5IHJ1biBpbiBob3N0IGNvbnRleHQuXG4gKlxuICogUGxhaW4gYXBwbGljYXRpb24gY29kZSBzdGlsbCBoYXMgbm8gYWN0aXZlIHdvcmtmbG93IHJ1biwgc28gaXQgdGhyb3dzXG4gKiBhIGNsZWFyIGBGYXRhbEVycm9yYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXMoXG4gIGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICBvcHRpb25zOiBTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBjb25zdCBydW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsRXJyb3IoXG4gICAgICBcInNldEF0dHJpYnV0ZXMoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgJ3VzZSB3b3JrZmxvdycgb3IgJ3VzZSBzdGVwJyBmdW5jdGlvbi4gXCIgK1xuICAgICAgICAnQ2FsbGluZyBpdCBmcm9tIHBsYWluIGhvc3QgY29kZSBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMoYXR0cnMsIG9wdGlvbnMpO1xuICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvLyBUdXJibyBvcHRpbWlzdGljIHN0YXJ0IHJ1bnMgdGhlIHN0ZXAgYm9keSBiZWZvcmUgdGhlIGJhY2tncm91bmRlZFxuICAvLyBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGUuIE9yZGVyIHRoaXMgYGF0dHJfc2V0YCBhZnRlciB0aGUgcnVuIGV4aXN0cyBzbyBpdFxuICAvLyBuZXZlciByZWFjaGVzIHRoZSBXb3JsZCBiZWZvcmUgdGhlIHJ1biBkb2VzICh3aGljaCB3b3VsZCBiZSByZWplY3RlZCBhc1xuICAvLyBydW4tbm90LWZvdW5kKS4gQSBuby1vcCBvdXRzaWRlIHR1cmJvIChiYXJyaWVyIHVuZGVmaW5lZCkgYW5kIG9uIHRoZSBhd2FpdFxuICAvLyBwYXRoLiBUaGUgcmVqZWN0aW9uIGlzIHN3YWxsb3dlZCBmb3Igb3JkZXJpbmcgb25seTogaWYgYHJ1bl9zdGFydGVkYCB0cnVseVxuICAvLyBmYWlsZWQgdGhlIHJ1biBkb2VzIG5vdCBleGlzdCwgc28gdGhlIGNyZWF0ZSBiZWxvdyBzdXJmYWNlcyB0aGUgcmVhbCBlcnJvci5cbiAgaWYgKHN0b3JlLnJ1blJlYWR5QmFycmllcikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yZS5ydW5SZWFkeUJhcnJpZXI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpbnRlbnRpb25hbDogb3JkZXJpbmcgYmFycmllciBvbmx5IOKAlCBzZWUgYWJvdmUuXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZExhenkoKTtcbiAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwge1xuICAgIGV2ZW50VHlwZTogJ2F0dHJfc2V0JyxcbiAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgZXZlbnREYXRhOiB7XG4gICAgICBjaGFuZ2VzLFxuICAgICAgd3JpdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgc3RlcElkOiBzdG9yZS5zdGVwTWV0YWRhdGEuc3RlcElkLFxuICAgICAgICBhdHRlbXB0OiBzdG9yZS5zdGVwTWV0YWRhdGEuYXR0ZW1wdCxcbiAgICAgIH0sXG4gICAgICAuLi4ob3B0aW9ucy5hbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9PT0gdHJ1ZVxuICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICAgICAgICA6IHt9KSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGUgZmVhdHVyZSBpcyBubyBsb25nZXIgZXhwZXJpbWVudGFsIOKAlCB1c2VcbiAqIHtAbGluayBzZXRBdHRyaWJ1dGVzfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgZXhwZXJpbWVudGFsX3NldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuIl19
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztJQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksVUFBVSxDQUNsQiwrRUFBK0U7WUFDN0UsbURBQW1ELENBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTztJQUVqQyxvRUFBb0U7SUFDcEUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGtEQUFrRDtRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDL0IsU0FBUyxFQUFFLFVBQVU7UUFDckIsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxTQUFTLEVBQUU7WUFDVCxPQUFPO1lBQ1AsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEM7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUk7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFNQRUNfVkVSU0lPTl9DVVJSRU5UIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vcnVudGltZS9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXRBdHRyaWJ1dGVzT3B0aW9ucyB9IGZyb20gJy4vd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMuanMnO1xuXG5leHBvcnQgdHlwZSB7IFNldEF0dHJpYnV0ZXNPcHRpb25zIH07XG5cbi8qKlxuICogSG9zdC1zaWRlIGltcGxlbWVudGF0aW9uIGZvciBgc2V0QXR0cmlidXRlc2AuIFdvcmtmbG93IGJvZGllcyByZXNvbHZlXG4gKiB0byBgLi93b3JrZmxvdy9zZXQtYXR0cmlidXRlcy50c2AgdmlhIHRoZSBgd29ya2Zsb3dgIHBhY2thZ2UtZXhwb3J0c1xuICogY29uZGl0aW9uOyBzdGVwIGJvZGllcyByZXNvbHZlIGhlcmUgYW5kIGNhbiBwZXJmb3JtIHRoZSB3b3JsZCB3cml0ZVxuICogZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGFscmVhZHkgcnVuIGluIGhvc3QgY29udGV4dC5cbiAqXG4gKiBQbGFpbiBhcHBsaWNhdGlvbiBjb2RlIHN0aWxsIGhhcyBubyBhY3RpdmUgd29ya2Zsb3cgcnVuLCBzbyBpdCB0aHJvd3NcbiAqIGEgY2xlYXIgYEZhdGFsRXJyb3JgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IFNldEF0dHJpYnV0ZXNPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdG9yZSA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGNvbnN0IHJ1bklkID0gc3RvcmU/LndvcmtmbG93TWV0YWRhdGE/LndvcmtmbG93UnVuSWQ7XG4gIGlmICghcnVuSWQpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxFcnJvcihcbiAgICAgIFwic2V0QXR0cmlidXRlcygpIG11c3QgYmUgY2FsbGVkIGZyb20gYSAndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnIGZ1bmN0aW9uLiBcIiArXG4gICAgICAgICdDYWxsaW5nIGl0IGZyb20gcGxhaW4gaG9zdCBjb2RlIGlzIG5vdCBzdXBwb3J0ZWQuJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBjaGFuZ2VzID0gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhhdHRycywgb3B0aW9ucyk7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIC8vIFR1cmJvIG9wdGltaXN0aWMgc3RhcnQgcnVucyB0aGUgc3RlcCBib2R5IGJlZm9yZSB0aGUgYmFja2dyb3VuZGVkXG4gIC8vIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZS4gT3JkZXIgdGhpcyBgYXR0cl9zZXRgIGFmdGVyIHRoZSBydW4gZXhpc3RzIHNvIGl0XG4gIC8vIG5ldmVyIHJlYWNoZXMgdGhlIFdvcmxkIGJlZm9yZSB0aGUgcnVuIGRvZXMgKHdoaWNoIHdvdWxkIGJlIHJlamVjdGVkIGFzXG4gIC8vIHJ1bi1ub3QtZm91bmQpLiBBIG5vLW9wIG91dHNpZGUgdHVyYm8gKGJhcnJpZXIgdW5kZWZpbmVkKSBhbmQgb24gdGhlIGF3YWl0XG4gIC8vIHBhdGguIFRoZSByZWplY3Rpb24gaXMgc3dhbGxvd2VkIGZvciBvcmRlcmluZyBvbmx5OiBpZiBgcnVuX3N0YXJ0ZWRgIHRydWx5XG4gIC8vIGZhaWxlZCB0aGUgcnVuIGRvZXMgbm90IGV4aXN0LCBzbyB0aGUgY3JlYXRlIGJlbG93IHN1cmZhY2VzIHRoZSByZWFsIGVycm9yLlxuICBpZiAoc3RvcmUucnVuUmVhZHlCYXJyaWVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3JlLnJ1blJlYWR5QmFycmllcjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGludGVudGlvbmFsOiBvcmRlcmluZyBiYXJyaWVyIG9ubHkg4oCUIHNlZSBhYm92ZS5cbiAgICB9XG4gIH1cblxuICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkTGF6eSgpO1xuICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHJ1bklkLCB7XG4gICAgZXZlbnRUeXBlOiAnYXR0cl9zZXQnLFxuICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICBldmVudERhdGE6IHtcbiAgICAgIGNoYW5nZXMsXG4gICAgICB3cml0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICBzdGVwSWQ6IHN0b3JlLnN0ZXBNZXRhZGF0YS5zdGVwSWQsXG4gICAgICAgIGF0dGVtcHQ6IHN0b3JlLnN0ZXBNZXRhZGF0YS5hdHRlbXB0LFxuICAgICAgfSxcbiAgICAgIC4uLihvcHRpb25zLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID09PSB0cnVlXG4gICAgICAgID8geyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogdHJ1ZSB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gIH0pO1xufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
-
import type {
|
|
2
|
+
import type { PayloadKey } from '../serialization/encryption.js';
|
|
3
3
|
import type { FlushableStreamState } from '../flushable-stream.js';
|
|
4
4
|
import type { WorkflowMetadata } from '../workflow/get-workflow-metadata.js';
|
|
5
5
|
import type { StepMetadata } from './get-step-metadata.js';
|
|
@@ -55,7 +55,7 @@ export type StepContext = {
|
|
|
55
55
|
*/
|
|
56
56
|
preCompletionOps: Promise<void>[];
|
|
57
57
|
closureVars?: Record<string, any>;
|
|
58
|
-
encryptionKey?:
|
|
58
|
+
encryptionKey?: PayloadKey;
|
|
59
59
|
writables?: Map<string, CachedWritable>;
|
|
60
60
|
/**
|
|
61
61
|
* Turbo mode only: a promise that resolves once the backgrounded
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../src/step/context-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAoBF,eAAO,MAAM,cAAc,EAAE,iBAAiB,CAAC,WAAW,CAKjB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
|
|
|
4
4
|
*
|
|
5
5
|
* Uses `Symbol.for()` on globalThis to guarantee a single instance even when
|
|
6
6
|
* bundlers (e.g. Vercel's production bundler) create multiple copies of this
|
|
7
|
-
* module. Without this, `contextStorage.run()` in the step
|
|
7
|
+
* module. Without this, `contextStorage.run()` in the step executor and
|
|
8
8
|
* `contextStorage.getStore()` in user code (via getWorkflowMetadata /
|
|
9
9
|
* getStepMetadata) can reference different AsyncLocalStorage instances,
|
|
10
10
|
* causing the store to appear empty.
|
|
@@ -19,4 +19,4 @@ const CONTEXT_STORAGE_SYMBOL = Symbol.for('WORKFLOW_STEP_CONTEXT_STORAGE');
|
|
|
19
19
|
export const contextStorage = globalThis[CONTEXT_STORAGE_SYMBOL] ??
|
|
20
20
|
(globalThis[CONTEXT_STORAGE_SYMBOL] =
|
|
21
21
|
new AsyncLocalStorage());
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvY29udGV4dC1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBeUVyRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3ZCLFVBQWtCLENBQUMsc0JBQXNCLENBRTdCO0lBQ2QsQ0FBRSxVQUFrQixDQUFDLHNCQUFzQixDQUFDO1FBQzFDLElBQUksaUJBQWlCLEVBQWUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdub2RlOmFzeW5jX2hvb2tzJztcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEtleSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsdXNoYWJsZVN0cmVhbVN0YXRlIH0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tICcuLi93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGVwTWV0YWRhdGEgfSBmcm9tICcuL2dldC1zdGVwLW1ldGFkYXRhLmpzJztcblxuLyoqXG4gKiBQZXItc3RlcCBjYWNoZSBlbnRyeSBmb3IgYSBgKHJ1bklkLCBuYW1lc3BhY2UpYCB3cml0YWJsZSBzdHJlYW0uXG4gKlxuICogSG9sZHMgdGhlIHVzZXItZmFjaW5nIGBXcml0YWJsZVN0cmVhbWAgYW5kIHRoZSBzaGFyZWQgYEZsdXNoYWJsZVN0cmVhbVN0YXRlYFxuICogZHJpdmluZyB0aGUgYmFja2dyb3VuZCBwaXBlIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuIFJlLXVzZWQgc28gcmVwZWF0IGNhbGxzXG4gKiB0byBgZ2V0V3JpdGFibGUoKWAgd2l0aGluIHRoZSBzYW1lIHN0ZXAgcmV0dXJuIHRoZSBzYW1lIGhhbmRsZSBpbnN0ZWFkIG9mXG4gKiBzcGF3bmluZyByYWNpbmcgcGlwZXMg4oCUIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3dvcmtmbG93L2lzc3Vlcy8yMDU4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZFdyaXRhYmxlIHtcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtPGFueT47XG4gIHN0YXRlOiBGbHVzaGFibGVTdHJlYW1TdGF0ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3RlcENvbnRleHQgPSB7XG4gIHN0ZXBNZXRhZGF0YTogU3RlcE1ldGFkYXRhO1xuICB3b3JrZmxvd01ldGFkYXRhOiBXb3JrZmxvd01ldGFkYXRhO1xuICAvKiogRGVwbG95bWVudCB0aGF0IG93bnMgdGhlIGN1cnJlbnQgd29ya2Zsb3cgcnVuLCB1c2VkIGZvciBmb3J3YXJkZWQgc3RyZWFtcy4gKi9cbiAgd29ya2Zsb3dEZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSb290IHJ1biBpZCBvZiB0aGUgY3VycmVudCBydW4ncyBsaW5lYWdlIChgJHJvb3RSdW5JZGApLCBzbyBhIG5lc3RlZFxuICAgKiBgc3RhcnQoKWAgaW5oZXJpdHMgaXQgd2l0aG91dCByZWxvYWRpbmcgdGhlIHBhcmVudC4gU2V0IGJ5IHRoZSBydW50aW1lIGZyb21cbiAgICogdGhlIHJ1biBpdCBhbHJlYWR5IGhhcyBsb2FkZWQuXG4gICAqL1xuICByb290UnVuSWQ/OiBzdHJpbmc7XG4gIG9wczogUHJvbWlzZTx2b2lkPltdO1xuICAvKipcbiAgICogT3BlcmF0aW9ucyB0aGF0IE1VU1QgYmUgZHVyYWJseSBjb21taXR0ZWQgYmVmb3JlIHRoZSBzdGVwJ3NcbiAgICogYHN0ZXBfY29tcGxldGVkYC9gc3RlcF9mYWlsZWRgIGV2ZW50IGlzIHdyaXR0ZW4sIGJlY2F1c2UgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiB0cmlnZ2VyZWQgYnkgdGhhdCBldmVudCBkZXBlbmRzIG9uIHRoZW0uXG4gICAqXG4gICAqIFRoZSBjYW5vbmljYWwgY2FzZSBpcyBhIHN0ZXAtaW5pdGlhdGVkIGBBYm9ydENvbnRyb2xsZXIuYWJvcnQoKWA6IHRoZVxuICAgKiBkdXJhYmxlIGBob29rX3JlY2VpdmVkYCBldmVudCByZWNvcmRzIHRoZSBjYW5jZWxsYXRpb24gaW4gdGhlIHdvcmtmbG93J3NcbiAgICogZXZlbnQgbG9nLiBJZiBpdCBpcyBmbHVzaGVkIGluIHRoZSBiYWNrZ3JvdW5kIChsaWtlIGBvcHNgKSwgdGhlIHdvcmtmbG93XG4gICAqIGNvbnRpbnVhdGlvbiBlbnF1ZXVlZCBieSBgc3RlcF9jb21wbGV0ZWRgIGNhbiBydW4g4oCUIGFuZCBhZHZhbmNlIHBhc3QgdGhlXG4gICAqIGFib3J0LCBkaXNwYXRjaGluZyBhIGxhdGVyIHN0ZXAgd2l0aCBhIHN0YWxlLCBub24tYWJvcnRlZCBgc2lnbmFsYCDigJQgYmVmb3JlXG4gICAqIHRoZSBgaG9va19yZWNlaXZlZGAgZXZlbnQgZXhpc3RzLiBBd2FpdGluZyB0aGVzZSBpbmxpbmUgYmVmb3JlIGNvbXBsZXRpb25cbiAgICogZ3VhcmFudGVlcyB0aGUgYWJvcnQgaXMgb3JkZXJlZCBhaGVhZCBvZiBhbnkgY29udGludWF0aW9uIHRoYXQgb2JzZXJ2ZXMgdGhlXG4gICAqIHN0ZXAncyByZXN1bHQuIFVubGlrZSB0aGVzZSwgYG9wc2AgaG9sZHMgYmVzdC1lZmZvcnQgcmVhbC10aW1lIHN0cmVhbVxuICAgKiB3cml0ZXMgdGhhdCBzaG91bGQgZmlyZSBBU0FQIGFuZCBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBDb250cmFjdDogcHJvZHVjZXJzIE1VU1QgTk9UIHB1c2ggYSBwcm9taXNlIHRoYXQgY2FuIHJlamVjdCDigJQgdGhlc2UgYXJlXG4gICAqIGF3YWl0ZWQgb25seSB0byBlbmZvcmNlIG9yZGVyaW5nLCBuZXZlciB0byBzdXJmYWNlIGFuIG91dGNvbWUuIEEgcmVqZWN0aW9uXG4gICAqIGhlcmUgd291bGQgcHJvcGFnYXRlIGFzIGFuIGluZnJhIGVycm9yIChxdWV1ZSByZS1kZWxpdmVyeSksIG5vdCB0aGVcbiAgICogdXNlci1jb2RlIGZhaWx1cmUgcGF0aCwgc28gZWFjaCBwcm9kdWNlciBzd2FsbG93cyBpdHMgb3duIGVycm9ycyAoc2VlXG4gICAqIGByZXZpdmVBYm9ydENvbnRyb2xsZXJgIGluIHNlcmlhbGl6YXRpb24udHMpLiBUaGUgYXdhaXQgc2l0ZXMgYWxzb1xuICAgKiBkZWZlbnNpdmVseSBgLmNhdGNoKClgIHNvIG9yZGVyaW5nIGlzIGFsbCB0aGlzIGJ1Y2tldCBjYW4gZXZlciBlbmZvcmNlLlxuICAgKlxuICAgKiBSZXF1aXJlZCAobm90IG9wdGlvbmFsKSBzbyBhIG5ldyBzdGVwLWNvbnRleHQgY29uc3RydWN0aW9uIHNpdGUgdGhhdFxuICAgKiBmb3JnZXRzIHRvIHdpcmUgaXQgZmFpbHMgYXQgY29tcGlsZSB0aW1lLCByYXRoZXIgdGhhbiBzaWxlbnRseSByZWdyZXNzaW5nXG4gICAqIHRoZSBvcmRlcmluZyBndWFyYW50ZWUgYmFjayB0byBiYWNrZ3JvdW5kLWZsdXNoIGJlaGF2aW9yLlxuICAgKi9cbiAgcHJlQ29tcGxldGlvbk9wczogUHJvbWlzZTx2b2lkPltdO1xuICBjbG9zdXJlVmFycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVuY3J5cHRpb25LZXk/OiBQYXlsb2FkS2V5O1xuICB3cml0YWJsZXM/OiBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT47XG4gIC8qKlxuICAgKiBUdXJibyBtb2RlIG9ubHk6IGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGJhY2tncm91bmRlZFxuICAgKiBgcnVuX3N0YXJ0ZWRgIGhhcyBsYW5kZWQgKHRoZSBydW4gZXhpc3RzKS4gU2V0IHdoZW4gdGhlIHN0ZXAgYm9keSBydW5zXG4gICAqIG9wdGltaXN0aWNhbGx5IOKAlCBiZWZvcmUgYHJ1bl9zdGFydGVkYC9gc3RlcF9zdGFydGVkYCBhcmUgY29uZmlybWVkIOKAlCBzbyBhXG4gICAqIGRpcmVjdCBzdGVwLWJvZHkgd29ybGQgd3JpdGUgKGUuZy4gYHNldEF0dHJpYnV0ZXNgLCB3aGljaFxuICAgKiByZXNvbHZlcyB0byBhIGhvc3Qtc2lkZSBgYXR0cl9zZXRgIGNyZWF0ZSkgY2FuIGdhdGUgb24gaXQgYW5kIG5ldmVyIHJhY2VcbiAgICogYWhlYWQgb2YgdGhlIHJ1bidzIGNyZWF0aW9uLiBgdW5kZWZpbmVkYCBvdXRzaWRlIHR1cmJvIGFuZCBvbiB0aGUgYXdhaXRcbiAgICogcGF0aCwgd2hlcmUgYHJ1bl9zdGFydGVkYCB3YXMgYWxyZWFkeSBkdXJhYmxlIGJlZm9yZSB0aGUgYm9keSByYW4uXG4gICAqL1xuICBydW5SZWFkeUJhcnJpZXI/OiBQcm9taXNlPHVua25vd24+O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzLXdpZGUgc2luZ2xldG9uIEFzeW5jTG9jYWxTdG9yYWdlIGZvciBzdGVwIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIFVzZXMgYFN5bWJvbC5mb3IoKWAgb24gZ2xvYmFsVGhpcyB0byBndWFyYW50ZWUgYSBzaW5nbGUgaW5zdGFuY2UgZXZlbiB3aGVuXG4gKiBidW5kbGVycyAoZS5nLiBWZXJjZWwncyBwcm9kdWN0aW9uIGJ1bmRsZXIpIGNyZWF0ZSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhpc1xuICogbW9kdWxlLiBXaXRob3V0IHRoaXMsIGBjb250ZXh0U3RvcmFnZS5ydW4oKWAgaW4gdGhlIHN0ZXAgZXhlY3V0b3IgYW5kXG4gKiBgY29udGV4dFN0b3JhZ2UuZ2V0U3RvcmUoKWAgaW4gdXNlciBjb2RlICh2aWEgZ2V0V29ya2Zsb3dNZXRhZGF0YSAvXG4gKiBnZXRTdGVwTWV0YWRhdGEpIGNhbiByZWZlcmVuY2UgZGlmZmVyZW50IEFzeW5jTG9jYWxTdG9yYWdlIGluc3RhbmNlcyxcbiAqIGNhdXNpbmcgdGhlIHN0b3JlIHRvIGFwcGVhciBlbXB0eS5cbiAqXG4gKiBOb3RlIHRoYXQgd2Ugd2VyZSB1bmFibGUgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUuIFRoaXMgaXMgYSBmaXggZm9yIHRoZSBvbmx5IHN5bnRoZXRpYyB3YXlcbiAqIHdheSBpbiB3aGljaCB3ZSBjb3VsZCBnZXQgdGhlIGJ1aWxkZXIgdG8gYnJlYWsgd2l0aCB0aGUgcmVwb3J0ZWQgZXJyb3IgbWVzc2FnZSwgYW5kXG4gKiBzZXJ2ZXMgYXMgZGVmZW5zZS1pbi1kZXB0aCwgc2luY2UgdGhlIGNoYW5nZSBpcyBvdGhlcndpc2Ugc2FmZS5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvd29ya2Zsb3cvaXNzdWVzLzE1NzdcbiAqL1xuY29uc3QgQ09OVEVYVF9TVE9SQUdFX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NURVBfQ09OVEVYVF9TVE9SQUdFJyk7XG5cbmV4cG9ydCBjb25zdCBjb250ZXh0U3RvcmFnZTogQXN5bmNMb2NhbFN0b3JhZ2U8U3RlcENvbnRleHQ+ID1cbiAgKChnbG9iYWxUaGlzIGFzIGFueSlbQ09OVEVYVF9TVE9SQUdFX1NZTUJPTF0gYXNcbiAgICB8IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkKSA/P1xuICAoKGdsb2JhbFRoaXMgYXMgYW55KVtDT05URVhUX1NUT1JBR0VfU1lNQk9MXSA9XG4gICAgbmV3IEFzeW5jTG9jYWxTdG9yYWdlPFN0ZXBDb250ZXh0PigpKTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writable-stream.d.ts","sourceRoot":"","sources":["../../src/step/writable-stream.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAG,GAAG,EACjC,OAAO,GAAE,6BAAkC,GAC1C,cAAc,CAAC,CAAC,CAAC,CAiHnB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { throwNotInWorkflowOrStepContext } from '../context-errors.js';
|
|
2
2
|
import { createFlushableState, flushablePipe, pollWritableLock, } from '../flushable-stream.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { bytesToBase64 } from '../sealed-box.js';
|
|
4
|
+
import { getExternalReducers, getSerializeStream, isRunPayloadKeys, WorkflowServerWritableStream, } from '../serialization.js';
|
|
5
|
+
import { STREAM_NAME_SYMBOL, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, STREAM_SERVER_PUBLIC_KEY_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL, } from '../symbols.js';
|
|
5
6
|
import { getWorkflowRunStreamId } from '../util.js';
|
|
6
7
|
import { contextStorage } from './context-storage.js';
|
|
7
8
|
/**
|
|
@@ -85,7 +86,17 @@ export function getWritable(options = {}) {
|
|
|
85
86
|
writable: false,
|
|
86
87
|
});
|
|
87
88
|
}
|
|
89
|
+
// Publish this run's X25519 public key on the handle so that a run this
|
|
90
|
+
// writable is forwarded to can seal frames without looking anything up.
|
|
91
|
+
// The key is already resolved on the step context, so this costs nothing
|
|
92
|
+
// here and saves the receiver a round trip.
|
|
93
|
+
if (isRunPayloadKeys(ctx.encryptionKey)) {
|
|
94
|
+
Object.defineProperty(serialize.writable, STREAM_SERVER_PUBLIC_KEY_SYMBOL, {
|
|
95
|
+
value: bytesToBase64(ctx.encryptionKey.keyPair.publicKey),
|
|
96
|
+
writable: false,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
88
99
|
cache.set(name, { writable: serialize.writable, state });
|
|
89
100
|
return serialize.writable;
|
|
90
101
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLDRCQUE0QixHQUM3QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0NBQWtDLEVBQ2xDLDJCQUEyQixHQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUF1QixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWEzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixVQUF5QyxFQUFFO0lBRTNDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCwrQkFBK0IsQ0FDN0IsZUFBZSxFQUNmLG1FQUFtRSxFQUNuRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHFFQUFxRTtJQUNyRSxFQUFFO0lBQ0YsbUVBQW1FO0lBQ25FLG1FQUFtRTtJQUNuRSxnRUFBZ0U7SUFDaEUsc0VBQXNFO0lBQ3RFLGdFQUFnRTtJQUNoRSx3RUFBd0U7SUFDeEUsRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSxtRUFBbUU7SUFDbkUsaUNBQWlDO0lBQ2pDLGtEQUFrRDtJQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxHQUFHLEVBQTBCLENBQUMsQ0FBQztJQUNwRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLE1BQU0sQ0FBQyxRQUE2QixDQUFDO0lBQzlDLENBQUM7SUFFRCxxRkFBcUY7SUFDckYscUVBQXFFO0lBQ3JFLHVFQUF1RTtJQUN2RSwrQkFBK0I7SUFDL0IsTUFBTSxTQUFTLEdBQUcsa0JBQWtCO0lBQ2xDLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUscUVBQXFFO0lBQ3JFLHVEQUF1RDtJQUN2RCxtQkFBbUIsQ0FDakIsVUFBVSxFQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQ1AsS0FBSyxFQUNMLEdBQUcsQ0FBQyxhQUFhLEVBQ2pCLElBQUksRUFDSixHQUFHLENBQUMsZUFBZSxDQUNwQixFQUNELEdBQUcsQ0FBQyxhQUFhLENBQ2xCLENBQUM7SUFFRix3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFLHdFQUF3RTtJQUN4RSwyQ0FBMkM7SUFDM0MsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsTUFBTSxjQUFjLEdBQUcsSUFBSSw0QkFBNEIsQ0FDckQsS0FBSyxFQUNMLElBQUksRUFDSixHQUFHLENBQUMsZUFBZSxDQUNwQixDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztJQUNyQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEUsc0NBQXNDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1QyxxRUFBcUU7SUFDckUsZ0VBQWdFO0lBQ2hFLGtFQUFrRTtJQUNsRSxpRUFBaUU7SUFDakUsNkRBQTZEO0lBQzdELDhEQUE4RDtJQUM5RCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1FBQzVELEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLDJCQUEyQixFQUFFO1FBQ3JFLEtBQUssRUFBRSxLQUFLO1FBQ1osUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsY0FBYyxDQUNuQixTQUFTLENBQUMsUUFBUSxFQUNsQixrQ0FBa0MsRUFDbEM7WUFDRSxLQUFLLEVBQUUsR0FBRyxDQUFDLG9CQUFvQjtZQUMvQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXpELE9BQU8sU0FBUyxDQUFDLFFBQTZCLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LWVycm9ycy5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVGbHVzaGFibGVTdGF0ZSxcbiAgZmx1c2hhYmxlUGlwZSxcbiAgcG9sbFdyaXRhYmxlTG9jayxcbn0gZnJvbSAnLi4vZmx1c2hhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbFJlZHVjZXJzLFxuICBnZXRTZXJpYWxpemVTdHJlYW0sXG4gIFdvcmtmbG93U2VydmVyV3JpdGFibGVTdHJlYW0sXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHtcbiAgU1RSRUFNX05BTUVfU1lNQk9MLFxuICBTVFJFQU1fU0VSVkVSX0RFUExPWU1FTlRfSURfU1lNQk9MLFxuICBTVFJFQU1fU0VSVkVSX1JVTl9JRF9TWU1CT0wsXG59IGZyb20gJy4uL3N5bWJvbHMuanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgdHlwZSBDYWNoZWRXcml0YWJsZSwgY29udGV4dFN0b3JhZ2UgfSBmcm9tICcuL2NvbnRleHQtc3RvcmFnZS5qcyc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayBnZXRXcml0YWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZXNwYWNlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHNhbWUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdy5cbiAqXG4gKiBUaGUgd3JpdGFibGUgc3RyZWFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluIHN0ZXAgZnVuY3Rpb25zIHRvIHdyaXRlXG4gKiBkYXRhIHRoYXQgY2FuIGJlIHJlYWQgb3V0c2lkZSB0aGUgd29ya2Zsb3cgYnkgdXNpbmcgdGhlIHJlYWRhYmxlIG1ldGhvZCBvZiBnZXRSdW4uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgd3JpdGFibGUgc3RyZWFtXG4gKiBAcmV0dXJucyBUaGUgd3JpdGFibGUgc3RyZWFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB3b3JrZmxvdyBydW5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBvciBzdGVwIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXcml0YWJsZTxXID0gYW55PihcbiAgb3B0aW9uczogV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuKTogV3JpdGFibGVTdHJlYW08Vz4ge1xuICBjb25zdCBjdHggPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHQoXG4gICAgICAnZ2V0V3JpdGFibGUoKScsXG4gICAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9nZXQtd3JpdGFibGUnLFxuICAgICAgZ2V0V3JpdGFibGVcbiAgICApO1xuICB9XG5cbiAgY29uc3QgeyBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJ1bklkID0gY3R4LndvcmtmbG93TWV0YWRhdGEud29ya2Zsb3dSdW5JZDtcbiAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQocnVuSWQsIG5hbWVzcGFjZSk7XG5cbiAgLy8gQ2FjaGUgdGhlIHdyaXRhYmxlIHBlciAocnVuSWQsIG5hbWVzcGFjZSkgd2l0aGluIHRoZSBzdGVwIGNvbnRleHQuXG4gIC8vXG4gIC8vIFRoZSBwcmV2aW91cyBiZWhhdmlvciDigJQgY29uc3RydWN0aW5nIGEgZnJlc2ggVHJhbnNmb3JtU3RyZWFtIGFuZFxuICAvLyBiYWNrZ3JvdW5kIHBpcGUgb24gZXZlcnkgY2FsbCDigJQgcHJvZHVjZWQgbm9uLWRldGVybWluaXN0aWMgY2h1bmtcbiAgLy8gb3JkZXJpbmcgd2hlbiBjYWxsZXJzIGFjcXVpcmVkIGEgbmV3IHdyaXRlciBwZXIgd3JpdGUgKGUuZy4gYVxuICAvLyBwZXItY2h1bmsgbG9vcCkuIEVhY2ggcGlwZSBmbHVzaGVkIHRvIHRoZSBzYW1lIChydW5JZCwgbmFtZSkgc2VydmVyXG4gIC8vIHN0cmVhbSBpbmRlcGVuZGVudGx5LCBhbmQgb24gVmVyY2VsIHRoZSA1MC0xMDBtcyBIVFRQIGxhdGVuY3lcbiAgLy8gdHVybmVkIHRoZSByYWNlIHdpbmRvdyBmcm9tIG1pY3Jvc2Vjb25kcyBpbnRvIHNvbWV0aGluZyBwcm9kLXZpc2libGUuXG4gIC8vXG4gIC8vIFNoYXJpbmcgYSBzaW5nbGUgVHJhbnNmb3JtU3RyZWFtICsgcGlwZSBhY3Jvc3MgY2FsbHMgbWFrZXMgdGhlXG4gIC8vIHVuc2FmZSBwYXR0ZXJuIGNvcnJlY3Q6IHdyaXRlcyBnbyB0aHJvdWdoIG9uZSBzZXJpYWwgc2luayBpbiB0aGVcbiAgLy8gb3JkZXIgdGhlIHVzZXIgd3JvdGUgdGhlbS4gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvd29ya2Zsb3cvaXNzdWVzLzIwNTguXG4gIGNvbnN0IGNhY2hlID0gKGN0eC53cml0YWJsZXMgPz89IG5ldyBNYXA8c3RyaW5nLCBDYWNoZWRXcml0YWJsZT4oKSk7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChuYW1lKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG4gIH1cblxuICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RyZWFtIHRoYXQgc2VyaWFsaXplcyBjaHVua3MgYW5kIHBpcGVzIHRvIHRoZSB3b3JrZmxvdyBzZXJ2ZXIuXG4gIC8vIFRoZSB0YXJnZXQgcnVuIGlzIHRoZSB3b3JrZmxvdyBydW4gdGhhdCBvd25zIHRoaXMgc3RlcCwgd2hpY2ggKHBlclxuICAvLyB2ZXJzaW9uIHNrZXcgcHJvdGVjdGlvbikgaXMgb24gdGhpcyBzYW1lIFNESyB2ZXJzaW9uLCBzbyBieXRlLXN0cmVhbVxuICAvLyBmcmFtaW5nIGlzIGFsd2F5cyBzYWZlIGhlcmUuXG4gIGNvbnN0IHNlcmlhbGl6ZSA9IGdldFNlcmlhbGl6ZVN0cmVhbShcbiAgICAvLyBJbiB0dXJibyBvcHRpbWlzdGljIHN0YXJ0IHRoZSBib2R5IHJ1bnMgYmVmb3JlIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZS5cbiAgICAvLyBUaHJlYWQgdGhlIHJ1bi1yZWFkeSBiYXJyaWVyIHNvIHRoYXQgYSBuZXN0ZWQgUmVhZGFibGVTdHJlYW0gd3JpdHRlbiBpbnRvXG4gICAgLy8gdGhpcyB3cml0YWJsZSBpcyBwaXBlZCB0byBpdHMgb3duIHNlcnZlciBzdHJlYW0gb25seSBhZnRlciB0aGUgcnVuXG4gICAgLy8gZXhpc3RzLiBVbmRlZmluZWQgb3V0c2lkZSB0dXJibyAvIG9uIHRoZSBhd2FpdCBwYXRoLlxuICAgIGdldEV4dGVybmFsUmVkdWNlcnMoXG4gICAgICBnbG9iYWxUaGlzLFxuICAgICAgY3R4Lm9wcyxcbiAgICAgIHJ1bklkLFxuICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICB0cnVlLFxuICAgICAgY3R4LnJ1blJlYWR5QmFycmllclxuICAgICksXG4gICAgY3R4LmVuY3J5cHRpb25LZXlcbiAgKTtcblxuICAvLyBVc2UgZmx1c2hhYmxlIHBpcGUgc28gdGhlIG9wcyBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXNcbiAgLy8gdGhlaXIgd3JpdGVyIGxvY2ssIG5vdCBvbmx5IHdoZW4gdGhlIHN0cmVhbSBpcyBleHBsaWNpdGx5IGNsb3NlZC5cbiAgLy8gV2l0aG91dCB0aGlzLCBWZXJjZWwgZnVuY3Rpb25zIGhhbmcgdW50aWwgdGhlIHJ1bnRpbWUgdGltZW91dCBiZWNhdXNlXG4gIC8vIC5waXBlVG8oKSBvbmx5IHJlc29sdmVzIG9uIHN0cmVhbSBjbG9zZS5cbiAgLy8gSW4gdHVyYm8gb3B0aW1pc3RpYyBzdGFydCB0aGUgYm9keSBydW5zIGJlZm9yZSBgcnVuX3N0YXJ0ZWRgIGlzIGR1cmFibGU7XG4gIC8vIHBhc3MgdGhlIHJ1bi1yZWFkeSBiYXJyaWVyIHNvIHRoZSBmaXJzdCBzZXJ2ZXIgd3JpdGUgb3JkZXJzIGFmdGVyIHRoZSBydW5cbiAgLy8gZXhpc3RzLiBVbmRlZmluZWQgb3V0c2lkZSB0dXJibyAvIG9uIHRoZSBhd2FpdCBwYXRoIChydW4gYWxyZWFkeSBkdXJhYmxlKS5cbiAgY29uc3Qgc2VydmVyV3JpdGFibGUgPSBuZXcgV29ya2Zsb3dTZXJ2ZXJXcml0YWJsZVN0cmVhbShcbiAgICBydW5JZCxcbiAgICBuYW1lLFxuICAgIGN0eC5ydW5SZWFkeUJhcnJpZXJcbiAgKTtcbiAgY29uc3Qgc3RhdGUgPSBjcmVhdGVGbHVzaGFibGVTdGF0ZSgpO1xuICBjdHgub3BzLnB1c2goc3RhdGUucHJvbWlzZSk7XG5cbiAgZmx1c2hhYmxlUGlwZShzZXJpYWxpemUucmVhZGFibGUsIHNlcnZlcldyaXRhYmxlLCBzdGF0ZSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIEVycm9ycyBhcmUgaGFuZGxlZCB2aWEgc3RhdGUucmVqZWN0XG4gIH0pO1xuXG4gIHBvbGxXcml0YWJsZUxvY2soc2VyaWFsaXplLndyaXRhYmxlLCBzdGF0ZSk7XG5cbiAgLy8gVGFnIHRoZSB3cml0YWJsZSB3aXRoIGl0cyB1bmRlcmx5aW5nIGAocnVuSWQsIG5hbWUpYCBzbyBkb3duc3RyZWFtXG4gIC8vIHJlZHVjZXJzIGNhbiByZWNvZ25pemUgdGhhdCBpdCdzIGFscmVhZHkgYmFja2VkIGJ5IGEgd29ya2Zsb3dcbiAgLy8gc2VydmVyIHN0cmVhbS4gQ2FsbGluZyBgc3RhcnQoY2hpbGQsIFthcmdzLCB0aGVXcml0YWJsZV0pYCBmcm9tXG4gIC8vIHRoZSBzYW1lIHN0ZXAgdXNlcyB0aGVzZSB0YWdzIHRvIGVtaXQgYHsgbmFtZSwgcnVuSWQgfWAgaW4gdGhlXG4gIC8vIGRlaHlkcmF0ZWQgZGVzY3JpcHRvciwgc28gdGhlIGNoaWxkJ3MgcmV2aXZlciBjYW4gb3BlbiB0aGVcbiAgLy8gd3JpdGFibGUgYWdhaW5zdCB0aGUgb3JpZ2luYWwgYChydW5JZCwgbmFtZSlgIGRpcmVjdGx5IOKAlCBub1xuICAvLyBpbi1wcm9jZXNzIGJyaWRnZSB0aWVkIHRvIHRoaXMgc3RlcCdzIGxpZmV0aW1lLlxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VyaWFsaXplLndyaXRhYmxlLCBTVFJFQU1fTkFNRV9TWU1CT0wsIHtcbiAgICB2YWx1ZTogbmFtZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VyaWFsaXplLndyaXRhYmxlLCBTVFJFQU1fU0VSVkVSX1JVTl9JRF9TWU1CT0wsIHtcbiAgICB2YWx1ZTogcnVuSWQsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9KTtcbiAgaWYgKGN0eC53b3JrZmxvd0RlcGxveW1lbnRJZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgIHNlcmlhbGl6ZS53cml0YWJsZSxcbiAgICAgIFNUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRF9TWU1CT0wsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBjdHgud29ya2Zsb3dEZXBsb3ltZW50SWQsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgY2FjaGUuc2V0KG5hbWUsIHsgd3JpdGFibGU6IHNlcmlhbGl6ZS53cml0YWJsZSwgc3RhdGUgfSk7XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZS53cml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbTxXPjtcbn1cbiJdfQ==
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZXAvd3JpdGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEdBQzdCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQ0FBa0MsRUFDbEMsK0JBQStCLEVBQy9CLDJCQUEyQixHQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUF1QixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWEzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixVQUF5QyxFQUFFO0lBRTNDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCwrQkFBK0IsQ0FDN0IsZUFBZSxFQUNmLG1FQUFtRSxFQUNuRSxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHFFQUFx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RSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFekQsT0FBTyxTQUFTLENBQUMsUUFBNkIsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUZsdXNoYWJsZVN0YXRlLFxuICBmbHVzaGFibGVQaXBlLFxuICBwb2xsV3JpdGFibGVMb2NrLFxufSBmcm9tICcuLi9mbHVzaGFibGUtc3RyZWFtLmpzJztcbmltcG9ydCB7IGJ5dGVzVG9CYXNlNjQgfSBmcm9tICcuLi9zZWFsZWQtYm94LmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmVkdWNlcnMsXG4gIGdldFNlcmlhbGl6ZVN0cmVhbSxcbiAgaXNSdW5QYXlsb2FkS2V5cyxcbiAgV29ya2Zsb3dTZXJ2ZXJXcml0YWJsZVN0cmVhbSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQge1xuICBTVFJFQU1fTkFNRV9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfREVQTE9ZTUVOVF9JRF9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfUFVCTElDX0tFWV9TWU1CT0wsXG4gIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCxcbn0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1J1blN0cmVhbUlkIH0gZnJvbSAnLi4vdXRpbC5qcyc7XG5pbXBvcnQgeyB0eXBlIENhY2hlZFdyaXRhYmxlLCBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4vY29udGV4dC1zdG9yYWdlLmpzJztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3Ige0BsaW5rIGdldFdyaXRhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lc3BhY2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZSBzdHJlYW1zIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgc2FtZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgd3JpdGFibGUgc3RyZWFtIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtmbG93LlxuICpcbiAqIFRoZSB3cml0YWJsZSBzdHJlYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoaW4gc3RlcCBmdW5jdGlvbnMgdG8gd3JpdGVcbiAqIGRhdGEgdGhhdCBjYW4gYmUgcmVhZCBvdXRzaWRlIHRoZSB3b3JrZmxvdyBieSB1c2luZyB0aGUgcmVhZGFibGUgbWV0aG9kIG9mIGdldFJ1bi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3cml0YWJsZSBzdHJlYW1cbiAqIEByZXR1cm5zIFRoZSB3cml0YWJsZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHdvcmtmbG93IHJ1blxuICogQHRocm93cyBFcnJvciBpZiBjYWxsZWQgb3V0c2lkZSBhIHdvcmtmbG93IG9yIHN0ZXAgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdyaXRhYmxlPFcgPSBhbnk+KFxuICBvcHRpb25zOiBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyA9IHt9XG4pOiBXcml0YWJsZVN0cmVhbTxXPiB7XG4gIGNvbnN0IGN0eCA9IGNvbnRleHRTdG9yYWdlLmdldFN0b3JlKCk7XG4gIGlmICghY3R4KSB7XG4gICAgdGhyb3dOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dChcbiAgICAgICdnZXRXcml0YWJsZSgpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2dldC13cml0YWJsZScsXG4gICAgICBnZXRXcml0YWJsZVxuICAgICk7XG4gIH1cblxuICBjb25zdCB7IG5hbWVzcGFjZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgcnVuSWQgPSBjdHgud29ya2Zsb3dNZXRhZGF0YS53b3JrZmxvd1J1bklkO1xuICBjb25zdCBuYW1lID0gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZChydW5JZCwgbmFtZXNwYWNlKTtcblxuICAvLyBDYWNoZSB0aGUgd3JpdGFibGUgcGVyIChydW5JZCwgbmFtZXNwYWNlKSB3aXRoaW4gdGhlIHN0ZXAgY29udGV4dC5cbiAgLy9cbiAgLy8gVGhlIHByZXZpb3VzIGJlaGF2aW9yIOKAlCBjb25zdHJ1Y3RpbmcgYSBmcmVzaCBUcmFuc2Zvcm1TdHJlYW0gYW5kXG4gIC8vIGJhY2tncm91bmQgcGlwZSBvbiBldmVyeSBjYWxsIOKAlCBwcm9kdWNlZCBub24tZGV0ZXJtaW5pc3RpYyBjaHVua1xuICAvLyBvcmRlcmluZyB3aGVuIGNhbGxlcnMgYWNxdWlyZWQgYSBuZXcgd3JpdGVyIHBlciB3cml0ZSAoZS5nLiBhXG4gIC8vIHBlci1jaHVuayBsb29wKS4gRWFjaCBwaXBlIGZsdXNoZWQgdG8gdGhlIHNhbWUgKHJ1bklkLCBuYW1lKSBzZXJ2ZXJcbiAgLy8gc3RyZWFtIGluZGVwZW5kZW50bHksIGFuZCBvbiBWZXJjZWwgdGhlIDUwLTEwMG1zIEhUVFAgbGF0ZW5jeVxuICAvLyB0dXJuZWQgdGhlIHJhY2Ugd2luZG93IGZyb20gbWljcm9zZWNvbmRzIGludG8gc29tZXRoaW5nIHByb2QtdmlzaWJsZS5cbiAgLy9cbiAgLy8gU2hhcmluZyBhIHNpbmdsZSBUcmFuc2Zvcm1TdHJlYW0gKyBwaXBlIGFjcm9zcyBjYWxscyBtYWtlcyB0aGVcbiAgLy8gdW5zYWZlIHBhdHRlcm4gY29ycmVjdDogd3JpdGVzIGdvIHRocm91Z2ggb25lIHNlcmlhbCBzaW5rIGluIHRoZVxuICAvLyBvcmRlciB0aGUgdXNlciB3cm90ZSB0aGVtLiBTZWVcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC93b3JrZmxvdy9pc3N1ZXMvMjA1OC5cbiAgY29uc3QgY2FjaGUgPSAoY3R4LndyaXRhYmxlcyA/Pz0gbmV3IE1hcDxzdHJpbmcsIENhY2hlZFdyaXRhYmxlPigpKTtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KG5hbWUpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZC53cml0YWJsZSBhcyBXcml0YWJsZVN0cmVhbTxXPjtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHRyYW5zZm9ybSBzdHJlYW0gdGhhdCBzZXJpYWxpemVzIGNodW5rcyBhbmQgcGlwZXMgdG8gdGhlIHdvcmtmbG93IHNlcnZlci5cbiAgLy8gVGhlIHRhcmdldCBydW4gaXMgdGhlIHdvcmtmbG93IHJ1biB0aGF0IG93bnMgdGhpcyBzdGVwLCB3aGljaCAocGVyXG4gIC8vIHZlcnNpb24gc2tldyBwcm90ZWN0aW9uKSBpcyBvbiB0aGlzIHNhbWUgU0RLIHZlcnNpb24sIHNvIGJ5dGUtc3RyZWFtXG4gIC8vIGZyYW1pbmcgaXMgYWx3YXlzIHNhZmUgaGVyZS5cbiAgY29uc3Qgc2VyaWFsaXplID0gZ2V0U2VyaWFsaXplU3RyZWFtKFxuICAgIC8vIEluIHR1cmJvIG9wdGltaXN0aWMgc3RhcnQgdGhlIGJvZHkgcnVucyBiZWZvcmUgYHJ1bl9zdGFydGVkYCBpcyBkdXJhYmxlLlxuICAgIC8vIFRocmVhZCB0aGUgcnVuLXJlYWR5IGJhcnJpZXIgc28gdGhhdCBhIG5lc3RlZCBSZWFkYWJsZVN0cmVhbSB3cml0dGVuIGludG9cbiAgICAvLyB0aGlzIHdyaXRhYmxlIGlzIHBpcGVkIHRvIGl0cyBvd24gc2VydmVyIHN0cmVhbSBvbmx5IGFmdGVyIHRoZSBydW5cbiAgICAvLyBleGlzdHMuIFVuZGVmaW5lZCBvdXRzaWRlIHR1cmJvIC8gb24gdGhlIGF3YWl0IHBhdGguXG4gICAgZ2V0RXh0ZXJuYWxSZWR1Y2VycyhcbiAgICAgIGdsb2JhbFRoaXMsXG4gICAgICBjdHgub3BzLFxuICAgICAgcnVuSWQsXG4gICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgIHRydWUsXG4gICAgICBjdHgucnVuUmVhZHlCYXJyaWVyXG4gICAgKSxcbiAgICBjdHguZW5jcnlwdGlvbktleVxuICApO1xuXG4gIC8vIFVzZSBmbHVzaGFibGUgcGlwZSBzbyB0aGUgb3BzIHByb21pc2UgcmVzb2x2ZXMgd2hlbiB0aGUgdXNlciByZWxlYXNlc1xuICAvLyB0aGVpciB3cml0ZXIgbG9jaywgbm90IG9ubHkgd2hlbiB0aGUgc3RyZWFtIGlzIGV4cGxpY2l0bHkgY2xvc2VkLlxuICAvLyBXaXRob3V0IHRoaXMsIFZlcmNlbCBmdW5jdGlvbnMgaGFuZyB1bnRpbCB0aGUgcnVudGltZSB0aW1lb3V0IGJlY2F1c2VcbiAgLy8gLnBpcGVUbygpIG9ubHkgcmVzb2x2ZXMgb24gc3RyZWFtIGNsb3NlLlxuICAvLyBJbiB0dXJibyBvcHRpbWlzdGljIHN0YXJ0IHRoZSBib2R5IHJ1bnMgYmVmb3JlIGBydW5fc3RhcnRlZGAgaXMgZHVyYWJsZTtcbiAgLy8gcGFzcyB0aGUgcnVuLXJlYWR5IGJhcnJpZXIgc28gdGhlIGZpcnN0IHNlcnZlciB3cml0ZSBvcmRlcnMgYWZ0ZXIgdGhlIHJ1blxuICAvLyBleGlzdHMuIFVuZGVmaW5lZCBvdXRzaWRlIHR1cmJvIC8gb24gdGhlIGF3YWl0IHBhdGggKHJ1biBhbHJlYWR5IGR1cmFibGUpLlxuICBjb25zdCBzZXJ2ZXJXcml0YWJsZSA9IG5ldyBXb3JrZmxvd1NlcnZlcldyaXRhYmxlU3RyZWFtKFxuICAgIHJ1bklkLFxuICAgIG5hbWUsXG4gICAgY3R4LnJ1blJlYWR5QmFycmllclxuICApO1xuICBjb25zdCBzdGF0ZSA9IGNyZWF0ZUZsdXNoYWJsZVN0YXRlKCk7XG4gIGN0eC5vcHMucHVzaChzdGF0ZS5wcm9taXNlKTtcblxuICBmbHVzaGFibGVQaXBlKHNlcmlhbGl6ZS5yZWFkYWJsZSwgc2VydmVyV3JpdGFibGUsIHN0YXRlKS5jYXRjaCgoKSA9PiB7XG4gICAgLy8gRXJyb3JzIGFyZSBoYW5kbGVkIHZpYSBzdGF0ZS5yZWplY3RcbiAgfSk7XG5cbiAgcG9sbFdyaXRhYmxlTG9jayhzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlKTtcblxuICAvLyBUYWcgdGhlIHdyaXRhYmxlIHdpdGggaXRzIHVuZGVybHlpbmcgYChydW5JZCwgbmFtZSlgIHNvIGRvd25zdHJlYW1cbiAgLy8gcmVkdWNlcnMgY2FuIHJlY29nbml6ZSB0aGF0IGl0J3MgYWxyZWFkeSBiYWNrZWQgYnkgYSB3b3JrZmxvd1xuICAvLyBzZXJ2ZXIgc3RyZWFtLiBDYWxsaW5nIGBzdGFydChjaGlsZCwgW2FyZ3MsIHRoZVdyaXRhYmxlXSlgIGZyb21cbiAgLy8gdGhlIHNhbWUgc3RlcCB1c2VzIHRoZXNlIHRhZ3MgdG8gZW1pdCBgeyBuYW1lLCBydW5JZCB9YCBpbiB0aGVcbiAgLy8gZGVoeWRyYXRlZCBkZXNjcmlwdG9yLCBzbyB0aGUgY2hpbGQncyByZXZpdmVyIGNhbiBvcGVuIHRoZVxuICAvLyB3cml0YWJsZSBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgKHJ1bklkLCBuYW1lKWAgZGlyZWN0bHkg4oCUIG5vXG4gIC8vIGluLXByb2Nlc3MgYnJpZGdlIHRpZWQgdG8gdGhpcyBzdGVwJ3MgbGlmZXRpbWUuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9OQU1FX1NZTUJPTCwge1xuICAgIHZhbHVlOiBuYW1lLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCwge1xuICAgIHZhbHVlOiBydW5JZCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuICBpZiAoY3R4LndvcmtmbG93RGVwbG95bWVudElkKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgc2VyaWFsaXplLndyaXRhYmxlLFxuICAgICAgU1RSRUFNX1NFUlZFUl9ERVBMT1lNRU5UX0lEX1NZTUJPTCxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGN0eC53b3JrZmxvd0RlcGxveW1lbnRJZCxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLy8gUHVibGlzaCB0aGlzIHJ1bidzIFgyNTUxOSBwdWJsaWMga2V5IG9uIHRoZSBoYW5kbGUgc28gdGhhdCBhIHJ1biB0aGlzXG4gIC8vIHdyaXRhYmxlIGlzIGZvcndhcmRlZCB0byBjYW4gc2VhbCBmcmFtZXMgd2l0aG91dCBsb29raW5nIGFueXRoaW5nIHVwLlxuICAvLyBUaGUga2V5IGlzIGFscmVhZHkgcmVzb2x2ZWQgb24gdGhlIHN0ZXAgY29udGV4dCwgc28gdGhpcyBjb3N0cyBub3RoaW5nXG4gIC8vIGhlcmUgYW5kIHNhdmVzIHRoZSByZWNlaXZlciBhIHJvdW5kIHRyaXAuXG4gIGlmIChpc1J1blBheWxvYWRLZXlzKGN0eC5lbmNyeXB0aW9uS2V5KSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXJpYWxpemUud3JpdGFibGUsIFNUUkVBTV9TRVJWRVJfUFVCTElDX0tFWV9TWU1CT0wsIHtcbiAgICAgIHZhbHVlOiBieXRlc1RvQmFzZTY0KGN0eC5lbmNyeXB0aW9uS2V5LmtleVBhaXIucHVibGljS2V5KSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhY2hlLnNldChuYW1lLCB7IHdyaXRhYmxlOiBzZXJpYWxpemUud3JpdGFibGUsIHN0YXRlIH0pO1xuXG4gIHJldHVybiBzZXJpYWxpemUud3JpdGFibGUgYXMgV3JpdGFibGVTdHJlYW08Vz47XG59XG4iXX0=
|
package/dist/step.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,wBAAgB,aAAa,CAAC,GAAG,EAAE,2BAA2B,IACpC,IAAI,SAAS,YAAY,EAAE,EAAE,MAAM,EACzD,UAAU,MAAM,EAChB,gBAAgB,MAAM,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,YAI1C,OAAO,WACJ,IAAI,KACZ,OAAO,CAAC,MAAM,CAAC,CAwarB"}
|
package/dist/step.js
CHANGED
|
@@ -3,9 +3,8 @@ import { withResolvers } from '@workflow/utils';
|
|
|
3
3
|
import { EventConsumerResult } from './events-consumer.js';
|
|
4
4
|
import { WorkflowSuspension } from './global.js';
|
|
5
5
|
import { stepLogger } from './logger.js';
|
|
6
|
-
import { scheduleWhenIdle, } from './private.js';
|
|
6
|
+
import { awaitEarlierDeliveries, registerDeliveryBarrier, scheduleWhenIdle, } from './private.js';
|
|
7
7
|
import { hydrateStepError, hydrateStepReturnValue } from './serialization.js';
|
|
8
|
-
import { getOrHydrateStepReturnValue } from './step-hydration-cache.js';
|
|
9
8
|
export function createUseStep(ctx) {
|
|
10
9
|
return function useStep(stepName, closureVarsFn) {
|
|
11
10
|
// Use a regular function (not arrow) so we can capture `this` when invoked as a method
|
|
@@ -127,10 +126,22 @@ export function createUseStep(ctx) {
|
|
|
127
126
|
// deterministic ordering of all promise resolutions/rejections.
|
|
128
127
|
// Hydrate the serialized thrown value from the event log so the
|
|
129
128
|
// original type identity and custom properties are preserved.
|
|
129
|
+
//
|
|
130
|
+
// The rejection is as branch-deciding as a success: it decides
|
|
131
|
+
// whether a `try`/`catch` continuation runs, and therefore which
|
|
132
|
+
// ULIDs the follow-up `useStep` calls draw. So it is ordered by
|
|
133
|
+
// event-log position exactly like `step_completed` below — see there
|
|
134
|
+
// for why the deferral is captured here, at event-consumption time,
|
|
135
|
+
// and awaited off the serial queue.
|
|
136
|
+
const eventIndex = ctx.eventsConsumer.eventIndex;
|
|
137
|
+
const barrier = registerDeliveryBarrier(ctx, eventIndex, 'step');
|
|
138
|
+
let rejection;
|
|
139
|
+
const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'step');
|
|
140
|
+
ctx.pendingDeliveries++;
|
|
130
141
|
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
131
142
|
try {
|
|
132
|
-
const
|
|
133
|
-
|
|
143
|
+
const prepared = await ctx.replayPayloadCache.prepareEventPayload(event.eventId, 'error', event.eventData.error);
|
|
144
|
+
rejection = await hydrateStepError(event.eventData.error, ctx.runId, ctx.encryptionKey, ctx.globalThis, {}, prepared);
|
|
134
145
|
}
|
|
135
146
|
catch (hydrateErr) {
|
|
136
147
|
// If hydration fails for any reason, fall back to a generic
|
|
@@ -142,10 +153,17 @@ export function createUseStep(ctx) {
|
|
|
142
153
|
? hydrateErr.message
|
|
143
154
|
: String(hydrateErr),
|
|
144
155
|
});
|
|
145
|
-
|
|
156
|
+
rejection = new FatalError(`Failed to hydrate step error: ${hydrateErr instanceof Error
|
|
146
157
|
? hydrateErr.message
|
|
147
|
-
: String(hydrateErr)}`)
|
|
158
|
+
: String(hydrateErr)}`);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
ctx.pendingDeliveries--;
|
|
148
162
|
}
|
|
163
|
+
void earlierDelivered.then(() => {
|
|
164
|
+
barrier.markDelivered();
|
|
165
|
+
reject(rejection);
|
|
166
|
+
});
|
|
149
167
|
});
|
|
150
168
|
return EventConsumerResult.Finished;
|
|
151
169
|
}
|
|
@@ -159,32 +177,79 @@ export function createUseStep(ctx) {
|
|
|
159
177
|
// Each step's hydration + resolve waits for all prior hydrations
|
|
160
178
|
// to complete before executing, preserving deterministic ordering.
|
|
161
179
|
//
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
//
|
|
180
|
+
// Prepared serialized bytes are shared across replay VMs, but final
|
|
181
|
+
// objects are always revived here inside this ordered queue slot.
|
|
182
|
+
// Only immutable primitive final values bypass revival entirely.
|
|
183
|
+
//
|
|
184
|
+
// Hydration cost is what makes this delivery's timing unstable
|
|
185
|
+
// across replays of one invocation: the first replay pays the full
|
|
186
|
+
// decrypt/decompress/revive, later replays memo-hit a primitive
|
|
187
|
+
// result in `ReplayPayloadCache` and finish in a hop or two. A
|
|
188
|
+
// workflow awaiting this result on one branch and a `sleep()` or
|
|
189
|
+
// hook payload on another would therefore allocate its follow-up
|
|
190
|
+
// step ULIDs in a different order on a warm replay than the
|
|
191
|
+
// invocation that WROTE those `step_created` events did — a
|
|
192
|
+
// permanent `ReplayDivergenceError`. So the result is ordered by
|
|
193
|
+
// event-log position through the delivery-barrier registry (see
|
|
194
|
+
// `ctx.pendingDeliveryBarriers`):
|
|
195
|
+
// - Register a 'step' barrier at this event's index so a
|
|
196
|
+
// LATER-in-log wait/hook delivery is handed over only after it.
|
|
197
|
+
// - Hydrate inside this serial queue slot (keeping async
|
|
198
|
+
// deserialization in event-log order) but only CAPTURE the
|
|
199
|
+
// outcome; then defer behind every EARLIER-in-log wait and hook
|
|
200
|
+
// delivery before resolving, and mark this step delivered.
|
|
201
|
+
//
|
|
202
|
+
// The deferral is captured HERE, while consuming the event, and not
|
|
203
|
+
// inside the queue slot. Two reasons, both load-bearing:
|
|
204
|
+
// - Determinism: the set of earlier deliveries is then a function of
|
|
205
|
+
// log position alone. Captured later it would depend on how much
|
|
206
|
+
// hydration the earlier deliveries had already finished — the very
|
|
207
|
+
// coupling this barrier exists to remove.
|
|
208
|
+
// - Coverage: an earlier delivery whose own hydration slot runs
|
|
209
|
+
// first on this serial queue has usually already resolved (and so
|
|
210
|
+
// deregistered its barrier) by the time a later slot starts. Read
|
|
211
|
+
// at slot start, its barrier would be invisible and this step
|
|
212
|
+
// would not defer at all. Every event in one drain window is
|
|
213
|
+
// consumed before any slot runs, so capturing at consumption time
|
|
214
|
+
// sees all of them.
|
|
215
|
+
//
|
|
216
|
+
// The deferral runs OFF the serial queue: it may wait on an earlier
|
|
217
|
+
// wait/hook delivery whose own resolution is driven by this queue,
|
|
218
|
+
// and blocking a queue slot on that would deadlock the queue (the
|
|
219
|
+
// same constraint sleep.ts and hook.ts document). `pendingDeliveries`
|
|
220
|
+
// is likewise released inside the slot, before the detached defer, so
|
|
221
|
+
// `scheduleWhenIdle` can still reach idle and retire the barriers
|
|
222
|
+
// this deferral may be waiting on.
|
|
174
223
|
const completedEventId = event.eventId;
|
|
175
224
|
const serializedResult = event.eventData.result;
|
|
225
|
+
const eventIndex = ctx.eventsConsumer.eventIndex;
|
|
226
|
+
const barrier = registerDeliveryBarrier(ctx, eventIndex, 'step');
|
|
227
|
+
let outcome;
|
|
228
|
+
const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'step');
|
|
176
229
|
ctx.pendingDeliveries++;
|
|
177
230
|
ctx.promiseQueue = ctx.promiseQueue.then(async () => {
|
|
178
231
|
try {
|
|
179
|
-
const hydratedResult = await
|
|
180
|
-
|
|
232
|
+
const hydratedResult = await ctx.replayPayloadCache.getStepResult(completedEventId, async () => {
|
|
233
|
+
const prepared = await ctx.replayPayloadCache.prepareEventPayload(completedEventId, 'result', serializedResult);
|
|
234
|
+
return await hydrateStepReturnValue(serializedResult, ctx.runId, ctx.encryptionKey, ctx.globalThis, {}, prepared);
|
|
235
|
+
});
|
|
236
|
+
outcome = { ok: true, value: hydratedResult };
|
|
181
237
|
}
|
|
182
238
|
catch (error) {
|
|
183
|
-
|
|
239
|
+
outcome = { ok: false, error };
|
|
184
240
|
}
|
|
185
241
|
finally {
|
|
186
242
|
ctx.pendingDeliveries--;
|
|
187
243
|
}
|
|
244
|
+
void earlierDelivered.then(() => {
|
|
245
|
+
barrier.markDelivered();
|
|
246
|
+
if (outcome.ok) {
|
|
247
|
+
resolve(outcome.value);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
reject(outcome.error);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
188
253
|
});
|
|
189
254
|
return EventConsumerResult.Finished;
|
|
190
255
|
}
|
|
@@ -282,4 +347,4 @@ export function createUseStep(ctx) {
|
|
|
282
347
|
return stepFunction;
|
|
283
348
|
};
|
|
284
349
|
}
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFnQztJQUM1RCxPQUFPLFNBQVMsT0FBTyxDQUNyQixRQUFnQixFQUNoQixhQUFrRDtRQUVsRCx1RkFBdUY7UUFDdkYsTUFBTSxZQUFZLEdBQUcsVUFFbkIsR0FBRyxJQUFVO1lBRWIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFVLENBQUM7WUFFN0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUVuRCxNQUFNLFNBQVMsR0FBNEI7Z0JBQ3pDLElBQUksRUFBRSxNQUFNO2dCQUNaLGFBQWE7Z0JBQ2IsUUFBUTtnQkFDUixJQUFJO2FBQ0wsQ0FBQztZQUVGLHVFQUF1RTtZQUN2RSw4REFBOEQ7WUFDOUQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsRUFB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O1lBQ0QsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF0YWxFcnJvciwgUmVwbGF5RGl2ZXJnZW5jZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyB3aXRoUmVzb2x2ZXJzIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcbmltcG9ydCB7IEV2ZW50Q29uc3VtZXJSZXN1bHQgfSBmcm9tICcuL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuL2dsb2JhbC5qcyc7XG5pbXBvcnQgeyBzdGVwTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4vcHJpdmF0ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlU3RlcEVycm9yLCBoeWRyYXRlU3RlcFJldHVyblZhbHVlIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldE9ySHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4vc3RlcC1oeWRyYXRpb24tY2FjaGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlU3RlcChjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RlcDxBcmdzIGV4dGVuZHMgU2VyaWFsaXphYmxlW10sIFJlc3VsdD4oXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBjbG9zdXJlVmFyc0ZuPzogKCkgPT4gUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPlxuICApIHtcbiAgICAvLyBVc2UgYSByZWd1bGFyIGZ1bmN0aW9uIChub3QgYXJyb3cpIHNvIHdlIGNhbiBjYXB0dXJlIGB0aGlzYCB3aGVuIGludm9rZWQgYXMgYSBtZXRob2RcbiAgICBjb25zdCBzdGVwRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiB1bmtub3duLFxuICAgICAgLi4uYXJnczogQXJnc1xuICAgICk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gd2l0aFJlc29sdmVyczxSZXN1bHQ+KCk7XG5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgc3RlcF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW06IFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FwdHVyZSBgdGhpc2AgdmFsdWUgZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAoZS5nLiwgTXlDbGFzcy5tZXRob2QoKSlcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiBgdGhpc2AgaXMgZGVmaW5lZCBhbmQgbm90IHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMgIT09IG51bGwgJiYgdGhpcyAhPT0gZ2xvYmFsVGhpcykge1xuICAgICAgICBxdWV1ZUl0ZW0udGhpc1ZhbCA9IHRoaXMgYXMgU2VyaWFsaXphYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZva2UgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvc3VyZSBzY29wZVxuICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFyc0ZuPy4oKTtcbiAgICAgIGlmIChjbG9zdXJlVmFycykge1xuICAgICAgICBxdWV1ZUl0ZW0uY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgIH1cblxuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHF1ZXVlSXRlbSk7XG5cbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgc2V0dXAnLCB7XG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfSk7XG4gICAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBldmVudHMsIHNvIHRoaXMgc3RlcCBoYXMgZWl0aGVyIG5vdCBiZWVuIHJ1biBvciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICAvLyBDcnVjaWFsbHksIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHRoaXMgc3RlcCBQcm9taXNlIGRvZXNcbiAgICAgICAgICAvLyBub3QgcmVzb2x2ZSBzbyB0aGF0IHRoZSB1c2VyIHdvcmtmbG93IGNvZGUgZG9lcyBub3QgcHJvY2VlZCBhbnkgZnVydGhlci5cbiAgICAgICAgICAvLyBOb3RpZnkgdGhlIHdvcmtmbG93IGhhbmRsZXIgdGhhdCB0aGlzIHN0ZXAgaGFzIG5vdCBiZWVuIHJ1biAvIGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBjb25zdW1lciBldmVudCBwcm9jZXNzaW5nJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXJnczogYXJncy5qb2luKCcsICcpLFxuICAgICAgICAgIGluY29taW5nQ29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBpc01hdGNoOiBjb3JyZWxhdGlvbklkID09PSBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGVwTmFtZSA9XG4gICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5ldmVudERhdGEgJiZcbiAgICAgICAgICAnc3RlcE5hbWUnIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEuc3RlcE5hbWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnRTdGVwTmFtZSA9PT0gJ3N0cmluZycgJiYgZXZlbnRTdGVwTmFtZSAhPT0gc3RlcE5hbWUpIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBzdGVwIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIFwiJHtldmVudFN0ZXBOYW1lfVwiLCBidXQgdGhlIGN1cnJlbnQgc3RlcCBjb25zdW1lciBpcyBcIiR7c3RlcE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykge1xuICAgICAgICAgIC8vIFN0ZXAgaGFzIGJlZW4gY3JlYXRlZCAocmVnaXN0ZXJlZCBmb3IgZXhlY3V0aW9uKSAtIG1hcmsgYXMgaGF2aW5nIGV2ZW50XG4gICAgICAgICAgLy8gYnV0IGtlZXAgaW4gcXVldWUgc28gc3VzcGVuc2lvbiBoYW5kbGVyIGtub3dzIHRvIHF1ZXVlIGV4ZWN1dGlvbiB3aXRob3V0XG4gICAgICAgICAgLy8gY3JlYXRpbmcgYSBkdXBsaWNhdGUgc3RlcF9jcmVhdGVkIGV2ZW50XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmICghcXVldWVJdGVtIHx8IHF1ZXVlSXRlbS50eXBlICE9PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGV2ZW50IGxvZyBjb3JydXB0aW9uIC0gc3RlcF9jcmVhdGVkIHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBidXQgdGhlIHN0ZXAgd2FzIG5ldmVyIGludm9rZWQgaW4gdGhlIHdvcmtmbG93IGR1cmluZyByZXBsYXkuXG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYCxcbiAgICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgLy8gQ29udGludWUgd2FpdGluZyBmb3Igc3RlcF9zdGFydGVkL3N0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkIGV2ZW50c1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgICAgICAvLyBTdGVwIHdhcyBzdGFydGVkIGJ1dCBpcyBub3QgdGVybWluYWwg4oCUIGl0IHN0YXlzIGluIHRoZVxuICAgICAgICAgIC8vIGludm9jYXRpb25RdWV1ZSBzbyB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGNhbiBkZWNpZGUgaG93IHRvXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggaXQuIFJlY29yZCB0aGUgaW5saW5lLW93bmVyc2hpcCBzdGF0ZSBmcm9tIHRoZSBldmVudDpcbiAgICAgICAgICAvLyB0aGUgTEFURVNUIHN0YXJ0IHdpbnMsIHNvIGEgc3RhbXBlZCBzdGFydCAoaW5saW5lIGV4ZWN1dGlvbiBvclxuICAgICAgICAgIC8vIG93bmVyIHJlY292ZXJ5KSBzZXRzIHRoZSBvd25lciBhbmQgYW4gdW5zdGFtcGVkIG9uZSAoYSByZXRyeVxuICAgICAgICAgIC8vIGF0dGVtcHQgZHJpdmVuIGJ5IGEgcXVldWVkIHN0ZXAgbWVzc2FnZSwgb3IgYW4gb2xkZXIgcnVudGltZSlcbiAgICAgICAgICAvLyBjbGVhcnMgaXQuIFRoZSBkaXNwYXRjaCBsb29wIHVzZXMgdGhpcyB0byBzdXBwcmVzcyB0aGUgaW1tZWRpYXRlXG4gICAgICAgICAgLy8gcmVxdWV1ZSBvZiBhIHN0ZXAgd2hvc2Ugb3duaW5nIGludm9jYXRpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmdcbiAgICAgICAgICAvLyBpdHMgYm9keSAodmVyY2VsL3dvcmtmbG93IzI3ODApLlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyTWVzc2FnZUlkID1cbiAgICAgICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgICdvd25lck1lc3NhZ2VJZCcgaW4gZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5vd25lck1lc3NhZ2VJZCA9IG93bmVyTWVzc2FnZUlkO1xuICAgICAgICAgICAgcXVldWVJdGVtLmxhc3RTdGFydGVkQXQgPSArZXZlbnQuY3JlYXRlZEF0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgICAgICAgIC8vIFN0ZXAgaXMgYmVpbmcgcmV0cmllZCDigJQgY29uc3VtZSB0aGUgZXZlbnQgYW5kIHdhaXQgZm9yIHRoZSBuZXh0XG4gICAgICAgICAgLy8gc3RlcF9zdGFydGVkLiBGcm9tIGhlcmUgb24gdGhlIHN0ZXAgaXMgcXVldWUtb3duZWQgKHRoZSBkZWxheWVkXG4gICAgICAgICAgLy8gcmV0cnkgaGFuZG9mZiBtZXNzYWdlLCBvciB0aGUgcmVwbGF5IHJlcXVldWUpLCBzbyBpbmxpbmVcbiAgICAgICAgICAvLyBvd25lcnNoaXAgaXMgcGVybWFuZW50bHkgbGFwc2VkIGZvciB0aGlzIGNvcnJlbGF0aW9uIElELlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5zYXdSZXRyeWluZyA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUl0ZW0ub3duZXJNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZCA9IGF3YWl0IGh5ZHJhdGVTdGVwRXJyb3IoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLmVycm9yLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3QoaHlkcmF0ZWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaHlkcmF0ZUVycikge1xuICAgICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sIGZhbGwgYmFjayB0byBhIGdlbmVyaWNcbiAgICAgICAgICAgICAgLy8gRmF0YWxFcnJvciBzbyB0aGUgd29ya2Zsb3cgZG9lc24ndCBoYW5nLiBUaGlzIHNob3VsZCBiZVxuICAgICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZSAoY29ycnVwdGVkIGV2ZW50IGRhdGEpLlxuICAgICAgICAgICAgICBzdGVwTG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwX2ZhaWxlZCBlcnJvcicsIHtcbiAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBoeWRyYXRlIHN0ZXAgZXJyb3I6ICR7XG4gICAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoaHlkcmF0ZUVycilcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG5cbiAgICAgICAgICAvLyBTdGVwIGhhcyBjb21wbGV0ZWQsIHNvIHJlc29sdmUgdGhlIFByb21pc2Ugd2l0aCB0aGUgY2FjaGVkIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGUgaHlkcmF0aW9uIGlzIGFzeW5jIChlLmcuLCBkZWNyeXB0aW9uKSwgc28gd2UgY2hhaW4gaXQgdGhyb3VnaFxuICAgICAgICAgIC8vIGN0eC5wcm9taXNlUXVldWUgdG8gZW5zdXJlIHRoYXQgZXZlbiBpZiBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAvLyB0YWtlcyB2YXJpYWJsZSB0aW1lLCBwcm9taXNlcyByZXNvbHZlIGluIGV2ZW50IGxvZyBvcmRlci5cbiAgICAgICAgICAvLyBFYWNoIHN0ZXAncyBoeWRyYXRpb24gKyByZXNvbHZlIHdhaXRzIGZvciBhbGwgcHJpb3IgaHlkcmF0aW9uc1xuICAgICAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBleGVjdXRpbmcsIHByZXNlcnZpbmcgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIE1lbW9pemF0aW9uOiBvbiBldmVyeSByZXBsYXkgdGhpcyBjb25zdW1lciByZS1ydW5zIGFuZCB3b3VsZFxuICAgICAgICAgIC8vIG90aGVyd2lzZSByZS1kZWNyeXB0ICsgcmUtcGFyc2UgdGhlIHNhbWUgc2VyaWFsaXplZCByZXN1bHQg4oCUIE8oTsKyKVxuICAgICAgICAgIC8vIGFjcm9zcyBhbiBpbnZvY2F0aW9uIGZvciBhIHNlcXVlbnRpYWwgTi1zdGVwIHdvcmtmbG93LiBUaGVcbiAgICAgICAgICAvLyBwZXItcnVuIGBzdGVwSHlkcmF0aW9uQ2FjaGVgIHNob3J0LWNpcmN1aXRzIHRoYXQgd29yayBvblxuICAgICAgICAgIC8vIHN1YnNlcXVlbnQgcmVwbGF5cy4gQ3J1Y2lhbGx5LCB0aGUgY2FjaGUgbG9va3VwIGhhcHBlbnMgSU5TSURFXG4gICAgICAgICAgLy8gdGhpcyBzYW1lIHByb21pc2VRdWV1ZSBzbG90IChhbmQgc3RpbGwgcmVzb2x2ZXMgdmlhIGByZXNvbHZlYCksXG4gICAgICAgICAgLy8gc28gYSBjYWNoZSBoaXQgb2NjdXBpZXMgdGhlIGV4YWN0IHNhbWUgcG9zaXRpb24gaW4gdGhlIG9yZGVyZWRcbiAgICAgICAgICAvLyBkZWxpdmVyeSBjaGFpbiBhIHJlLWh5ZHJhdGUgd291bGQgaGF2ZSDigJQgcHJlc2VydmluZyB0aGVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzbSB0aGF0IHBlbmRpbmdEZWxpdmVyaWVzLCB0aGUgZGVsaXZlcnkgYmFycmllcnMsIGFuZFxuICAgICAgICAgIC8vIFByb21pc2UucmFjZS9hbGwgcmVwbGF5IGRlcGVuZCBvbi4gT25seSBwcmltaXRpdmUgcmVzdWx0cyBhcmVcbiAgICAgICAgICAvLyBtZW1vaXplZDsgbm9uLXByaW1pdGl2ZXMgcmUtaHlkcmF0ZSBmcmVzaCBlYWNoIHJlcGxheSBzbyBhIHNoYXJlZFxuICAgICAgICAgIC8vIHJlZmVyZW5jZSBjYW4gbmV2ZXIgY2FycnkgYSBtdXRhdGlvbiBiZXR3ZWVuIHJlcGxheXMuXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkRXZlbnRJZCA9IGV2ZW50LmV2ZW50SWQ7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFJlc3VsdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bHQ7XG4gICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBoeWRyYXRlZFJlc3VsdCA9IGF3YWl0IGdldE9ySHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgICAgICBjdHguc3RlcEh5ZHJhdGlvbkNhY2hlLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlZEV2ZW50SWQsXG4gICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlc29sdmUoaHlkcmF0ZWRSZXN1bHQgYXMgUmVzdWx0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSBmb3Igc3RlcCAke2NvcnJlbGF0aW9uSWR9IChuYW1lOiAke3N0ZXBOYW1lfSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICAvLyBFbnN1cmUgdGhlIFwibmFtZVwiIHByb3BlcnR5IG1hdGNoZXMgdGhlIG9yaWdpbmFsIHN0ZXAgZnVuY3Rpb24gbmFtZVxuICAgIC8vIEV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIHN0ZXBOYW1lIChmb3JtYXQ6IFwic3RlcC8vZmlsZXBhdGgvL2Z1bmN0aW9uTmFtZVwiKVxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHN0ZXBOYW1lLnNwbGl0KCcvLycpLnBvcCgpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICduYW1lJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uTmFtZSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCB0aGUgc3RlcCBmdW5jdGlvbiBpZGVudGlmaWVyIHRvIHRoZSBzdGVwIGZ1bmN0aW9uIGZvciBzZXJpYWxpemF0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ3N0ZXBJZCcsIHtcbiAgICAgIHZhbHVlOiBzdGVwTmFtZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIHRoZSBjbG9zdXJlIHZhcmlhYmxlcyBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvblxuICAgIGlmIChjbG9zdXJlVmFyc0ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnX19jbG9zdXJlVmFyc0ZuJywge1xuICAgICAgICB2YWx1ZTogY2xvc3VyZVZhcnNGbixcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE92ZXJyaWRlIGAuYmluZGAgc28gdGhlIGJvdW5kIGZ1bmN0aW9uIHByZXNlcnZlcyB0aGUgc3RlcCBwcm94eVxuICAgIC8vIG1ldGFkYXRhIHRoYXQgYGdldFN0ZXBGdW5jdGlvblJlZHVjZXJgIHJlbGllcyBvbiBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAvLyBXaXRob3V0IHRoaXMgb3ZlcnJpZGUsIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgd291bGQgcmV0dXJuIGEgbmV3XG4gICAgLy8gZnVuY3Rpb24gdGhhdCBkb2Vzbid0IGluaGVyaXQgYHN0ZXBJZGAsIGBfX2Nsb3N1cmVWYXJzRm5gLCBvciBhbnlcbiAgICAvLyBvdGhlciBvd24gcHJvcGVydGllcyBvZiB0aGUgb3JpZ2luYWwgcHJveHkg4oCUIHNvIHRoZSBTdGVwRnVuY3Rpb25cbiAgICAvLyByZWR1Y2VyIHdvdWxkIHJlZnVzZSB0byBzZXJpYWxpemUgaXQgKGl0J2QgbG9vayBsaWtlIGEgcGxhaW5cbiAgICAvLyBmdW5jdGlvbiksIGFuZCBhIGB1c2VTdGVwKC4uLikuYmluZCh0aGlzKWAgcHJveHkgdGhhdCBmbG93ZWRcbiAgICAvLyB0aHJvdWdoIHdvcmtmbG93IHNlcmlhbGl6YXRpb24gd291bGQgc2lsZW50bHkgYnJlYWsuXG4gICAgLy9cbiAgICAvLyBUaGUgb3ZlcnJpZGUgc3Rhc2hlcyB0aHJlZSBwaWVjZXMgb2Ygc3RhdGUgb24gdGhlIGJvdW5kIGZ1bmN0aW9uIHNvXG4gICAgLy8gdGhlIHJvdW5kIHRyaXAgaXMgZmFpdGhmdWw6XG4gICAgLy8gICAtIGBzdGVwSWRgICAgICAgICAgICAgIOKAlCBhbHJlYWR5IHNldCBvbiB0aGUgb3JpZ2luYWwgcHJveHkuXG4gICAgLy8gICAtIGBfX2Nsb3N1cmVWYXJzRm5gICAgIOKAlCBvbmx5IHdoZW4gdGhlIG9yaWdpbmFsIHByb3h5IGhhZCBvbmUuXG4gICAgLy8gICAtIGBfX2JvdW5kVGhpc2AgICAgICAgIOKAlCB0aGUgcmVjZWl2ZXIgcGFzc2VkIHRvIGAuYmluZCh0aGlzQXJnLCDigKYpYC5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgc2V0IChldmVuIHdoZW4gYHRoaXNBcmdgIGlzXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgYG51bGxgL2B1bmRlZmluZWRgKSBzbyB0aGUgcmVkdWNlciBjYW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5ndWlzaCBcIndhcyBib3VuZFwiIGZyb20gXCJ3YXNuJ3RcIi5cbiAgICAvLyAgIC0gYF9fYm91bmRBcmdzYCAgICAgICAg4oCUIG9ubHkgd2hlbiB0aGUgdXNlciBzdXBwbGllZCBwcmVmaWxsZWRcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgKGAuYmluZCh0aGlzQXJnLCB4LCB5KWApLiBUaGVcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV0MgcGx1Z2luIG9ubHkgZXZlciBlbWl0cyBgLmJpbmQodGhpcylgXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9kYXksIHNvIHRoaXMgaXMgcmFyZSBpbiBwcmFjdGljZTsgd2VcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBjYXB0dXJlIGl0IHNvIHRoZSBwYXJ0aWFsIGFyZ3NcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJ2aXZlIHNlcmlhbGl6YXRpb24gcmF0aGVyIHRoYW5cbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWxlbnRseSBkaXNhcHBlYXJpbmcgb24gdGhlIHN0ZXAgc2lkZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnYmluZCcsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiAoXG4gICAgICAgIHRoaXM6IHR5cGVvZiBzdGVwRnVuY3Rpb24sXG4gICAgICAgIHRoaXNBcmc6IHVua25vd24sXG4gICAgICAgIC4uLnBhcnRpYWxBcmdzOiB1bmtub3duW11cbiAgICAgICkge1xuICAgICAgICBjb25zdCBib3VuZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzQXJnLFxuICAgICAgICAgIC4uLnBhcnRpYWxBcmdzXG4gICAgICAgICk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ3N0ZXBJZCcsIHtcbiAgICAgICAgICB2YWx1ZTogc3RlcE5hbWUsXG4gICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ19fY2xvc3VyZVZhcnNGbicsIHtcbiAgICAgICAgICAgIHZhbHVlOiBjbG9zdXJlVmFyc0ZuLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShib3VuZCwgJ19fYm91bmRUaGlzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzQXJnLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBhcnRpYWxBcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2JvdW5kQXJncycsIHtcbiAgICAgICAgICAgIHZhbHVlOiBwYXJ0aWFsQXJncyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYm91bmQ7XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ZXBGdW5jdGlvbjtcbiAgfTtcbn1cbiJdfQ==
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFnQyxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUVqQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQWdDO0lBQzVELE9BQU8sU0FBUyxPQUFPLENBQ3JCLFFBQWdCLEVBQ2hCLGFBQWtEO1FBRWxELHVGQUF1RjtRQUN2RixNQUFNLFlBQVksR0FBRyxVQUVuQixHQUFHLElBQVU7WUFFYixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLEVBQVUsQ0FBQztZQUU3RCxNQUFNLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBRW5ELE1BQU0sU0FBUyxHQUE0QjtnQkFDekMsSUFBSSxFQUFFLE1BQU07Z0JBQ1osYUFBYTtnQkFDYixRQUFRO2dCQUNSLElBQUk7YUFDTCxDQUFDO1lBRUYsdUVBQXVFO1lBQ3ZFLDhEQUE4RDtZQUM5RCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQy9ELFNBQVMs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T0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhdGFsRXJyb3IsIFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgeyBFdmVudENvbnN1bWVyUmVzdWx0IH0gZnJvbSAnLi9ldmVudHMtY29uc3VtZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBTdGVwSW52b2NhdGlvblF1ZXVlSXRlbSwgV29ya2Zsb3dTdXNwZW5zaW9uIH0gZnJvbSAnLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgc3RlcExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGF3YWl0RWFybGllckRlbGl2ZXJpZXMsXG4gIHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyLFxuICBzY2hlZHVsZVdoZW5JZGxlLFxuICB0eXBlIFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi9wcml2YXRlLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi9zY2hlbWFzLmpzJztcbmltcG9ydCB7IGh5ZHJhdGVTdGVwRXJyb3IsIGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24uanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlU3RlcChjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCkge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RlcDxBcmdzIGV4dGVuZHMgU2VyaWFsaXphYmxlW10sIFJlc3VsdD4oXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBjbG9zdXJlVmFyc0ZuPzogKCkgPT4gUmVjb3JkPHN0cmluZywgU2VyaWFsaXphYmxlPlxuICApIHtcbiAgICAvLyBVc2UgYSByZWd1bGFyIGZ1bmN0aW9uIChub3QgYXJyb3cpIHNvIHdlIGNhbiBjYXB0dXJlIGB0aGlzYCB3aGVuIGludm9rZWQgYXMgYSBtZXRob2RcbiAgICBjb25zdCBzdGVwRnVuY3Rpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0aGlzOiB1bmtub3duLFxuICAgICAgLi4uYXJnczogQXJnc1xuICAgICk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gd2l0aFJlc29sdmVyczxSZXN1bHQ+KCk7XG5cbiAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgc3RlcF8ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW06IFN0ZXBJbnZvY2F0aW9uUXVldWVJdGVtID0ge1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FwdHVyZSBgdGhpc2AgdmFsdWUgZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAoZS5nLiwgTXlDbGFzcy5tZXRob2QoKSlcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBpZiBgdGhpc2AgaXMgZGVmaW5lZCBhbmQgbm90IHRoZSBnbG9iYWwgb2JqZWN0XG4gICAgICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMgIT09IG51bGwgJiYgdGhpcyAhPT0gZ2xvYmFsVGhpcykge1xuICAgICAgICBxdWV1ZUl0ZW0udGhpc1ZhbCA9IHRoaXMgYXMgU2VyaWFsaXphYmxlO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZva2UgdGhlIGNsb3N1cmUgdmFyaWFibGVzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY2xvc3VyZSBzY29wZVxuICAgICAgY29uc3QgY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFyc0ZuPy4oKTtcbiAgICAgIGlmIChjbG9zdXJlVmFycykge1xuICAgICAgICBxdWV1ZUl0ZW0uY2xvc3VyZVZhcnMgPSBjbG9zdXJlVmFycztcbiAgICAgIH1cblxuICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuc2V0KGNvcnJlbGF0aW9uSWQsIHF1ZXVlSXRlbSk7XG5cbiAgICAgIHN0ZXBMb2dnZXIuZGVidWcoJ1N0ZXAgY29uc3VtZXIgc2V0dXAnLCB7XG4gICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgIHN0ZXBOYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfSk7XG4gICAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBldmVudHMsIHNvIHRoaXMgc3RlcCBoYXMgZWl0aGVyIG5vdCBiZWVuIHJ1biBvciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAgICAgICAgICAvLyBDcnVjaWFsbHksIGlmIHdlIGdvdCBoZXJlLCB0aGVuIHRoaXMgc3RlcCBQcm9taXNlIGRvZXNcbiAgICAgICAgICAvLyBub3QgcmVzb2x2ZSBzbyB0aGF0IHRoZSB1c2VyIHdvcmtmbG93IGNvZGUgZG9lcyBub3QgcHJvY2VlZCBhbnkgZnVydGhlci5cbiAgICAgICAgICAvLyBOb3RpZnkgdGhlIHdvcmtmbG93IGhhbmRsZXIgdGhhdCB0aGlzIHN0ZXAgaGFzIG5vdCBiZWVuIHJ1biAvIGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RlcExvZ2dlci5kZWJ1ZygnU3RlcCBjb25zdW1lciBldmVudCBwcm9jZXNzaW5nJywge1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RlcE5hbWUsXG4gICAgICAgICAgYXJnczogYXJncy5qb2luKCcsICcpLFxuICAgICAgICAgIGluY29taW5nQ29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBpc01hdGNoOiBjb3JyZWxhdGlvbklkID09PSBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGVwTmFtZSA9XG4gICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICBldmVudC5ldmVudERhdGEgJiZcbiAgICAgICAgICAnc3RlcE5hbWUnIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEuc3RlcE5hbWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnRTdGVwTmFtZSA9PT0gJ3N0cmluZycgJiYgZXZlbnRTdGVwTmFtZSAhPT0gc3RlcE5hbWUpIHtcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBzdGVwIGV2ZW50ICR7ZXZlbnQuZXZlbnRUeXBlfSBmb3IgJHtjb3JyZWxhdGlvbklkfSBiZWxvbmdzIHRvIFwiJHtldmVudFN0ZXBOYW1lfVwiLCBidXQgdGhlIGN1cnJlbnQgc3RlcCBjb25zdW1lciBpcyBcIiR7c3RlcE5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykge1xuICAgICAgICAgIC8vIFN0ZXAgaGFzIGJlZW4gY3JlYXRlZCAocmVnaXN0ZXJlZCBmb3IgZXhlY3V0aW9uKSAtIG1hcmsgYXMgaGF2aW5nIGV2ZW50XG4gICAgICAgICAgLy8gYnV0IGtlZXAgaW4gcXVldWUgc28gc3VzcGVuc2lvbiBoYW5kbGVyIGtub3dzIHRvIHF1ZXVlIGV4ZWN1dGlvbiB3aXRob3V0XG4gICAgICAgICAgLy8gY3JlYXRpbmcgYSBkdXBsaWNhdGUgc3RlcF9jcmVhdGVkIGV2ZW50XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGlmICghcXVldWVJdGVtIHx8IHF1ZXVlSXRlbS50eXBlICE9PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIGV2ZW50IGxvZyBjb3JydXB0aW9uIC0gc3RlcF9jcmVhdGVkIHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBidXQgdGhlIHN0ZXAgd2FzIG5ldmVyIGludm9rZWQgaW4gdGhlIHdvcmtmbG93IGR1cmluZyByZXBsYXkuXG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAoJHtzdGVwTmFtZX0pIGNyZWF0ZWQgYnV0IG5vdCBmb3VuZCBpbiBpbnZvY2F0aW9uIHF1ZXVlYCxcbiAgICAgICAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgICAgLy8gQ29udGludWUgd2FpdGluZyBmb3Igc3RlcF9zdGFydGVkL3N0ZXBfY29tcGxldGVkL3N0ZXBfZmFpbGVkIGV2ZW50c1xuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgICAgICAvLyBTdGVwIHdhcyBzdGFydGVkIGJ1dCBpcyBub3QgdGVybWluYWwg4oCUIGl0IHN0YXlzIGluIHRoZVxuICAgICAgICAgIC8vIGludm9jYXRpb25RdWV1ZSBzbyB0aGUgc3VzcGVuc2lvbiBoYW5kbGVyIGNhbiBkZWNpZGUgaG93IHRvXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggaXQuIFJlY29yZCB0aGUgaW5saW5lLW93bmVyc2hpcCBzdGF0ZSBmcm9tIHRoZSBldmVudDpcbiAgICAgICAgICAvLyB0aGUgTEFURVNUIHN0YXJ0IHdpbnMsIHNvIGEgc3RhbXBlZCBzdGFydCAoaW5saW5lIGV4ZWN1dGlvbiBvclxuICAgICAgICAgIC8vIG93bmVyIHJlY292ZXJ5KSBzZXRzIHRoZSBvd25lciBhbmQgYW4gdW5zdGFtcGVkIG9uZSAoYSByZXRyeVxuICAgICAgICAgIC8vIGF0dGVtcHQgZHJpdmVuIGJ5IGEgcXVldWVkIHN0ZXAgbWVzc2FnZSwgb3IgYW4gb2xkZXIgcnVudGltZSlcbiAgICAgICAgICAvLyBjbGVhcnMgaXQuIFRoZSBkaXNwYXRjaCBsb29wIHVzZXMgdGhpcyB0byBzdXBwcmVzcyB0aGUgaW1tZWRpYXRlXG4gICAgICAgICAgLy8gcmVxdWV1ZSBvZiBhIHN0ZXAgd2hvc2Ugb3duaW5nIGludm9jYXRpb24gbWF5IHN0aWxsIGJlIHJ1bm5pbmdcbiAgICAgICAgICAvLyBpdHMgYm9keSAodmVyY2VsL3dvcmtmbG93IzI3ODApLlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG93bmVyTWVzc2FnZUlkID1cbiAgICAgICAgICAgICAgJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiZcbiAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgICdvd25lck1lc3NhZ2VJZCcgaW4gZXZlbnQuZXZlbnREYXRhICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBldmVudC5ldmVudERhdGEub3duZXJNZXNzYWdlSWRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5vd25lck1lc3NhZ2VJZCA9IG93bmVyTWVzc2FnZUlkO1xuICAgICAgICAgICAgcXVldWVJdGVtLmxhc3RTdGFydGVkQXQgPSArZXZlbnQuY3JlYXRlZEF0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3JldHJ5aW5nJykge1xuICAgICAgICAgIC8vIFN0ZXAgaXMgYmVpbmcgcmV0cmllZCDigJQgY29uc3VtZSB0aGUgZXZlbnQgYW5kIHdhaXQgZm9yIHRoZSBuZXh0XG4gICAgICAgICAgLy8gc3RlcF9zdGFydGVkLiBGcm9tIGhlcmUgb24gdGhlIHN0ZXAgaXMgcXVldWUtb3duZWQgKHRoZSBkZWxheWVkXG4gICAgICAgICAgLy8gcmV0cnkgaGFuZG9mZiBtZXNzYWdlLCBvciB0aGUgcmVwbGF5IHJlcXVldWUpLCBzbyBpbmxpbmVcbiAgICAgICAgICAvLyBvd25lcnNoaXAgaXMgcGVybWFuZW50bHkgbGFwc2VkIGZvciB0aGlzIGNvcnJlbGF0aW9uIElELlxuICAgICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnc3RlcCcpIHtcbiAgICAgICAgICAgIHF1ZXVlSXRlbS5zYXdSZXRyeWluZyA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUl0ZW0ub3duZXJNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIC8vIFRlcm1pbmFsIHN0YXRlIC0gd2UgY2FuIHJlbW92ZSB0aGUgaW52b2NhdGlvblF1ZXVlIGl0ZW1cbiAgICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoZXZlbnQuY29ycmVsYXRpb25JZCk7XG4gICAgICAgICAgLy8gU3RlcCBmYWlsZWQgLSBjaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmVcbiAgICAgICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGFsbCBwcm9taXNlIHJlc29sdXRpb25zL3JlamVjdGlvbnMuXG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZXZlbnQgbG9nIHNvIHRoZVxuICAgICAgICAgIC8vIG9yaWdpbmFsIHR5cGUgaWRlbnRpdHkgYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgcmVqZWN0aW9uIGlzIGFzIGJyYW5jaC1kZWNpZGluZyBhcyBhIHN1Y2Nlc3M6IGl0IGRlY2lkZXNcbiAgICAgICAgICAvLyB3aGV0aGVyIGEgYHRyeWAvYGNhdGNoYCBjb250aW51YXRpb24gcnVucywgYW5kIHRoZXJlZm9yZSB3aGljaFxuICAgICAgICAgIC8vIFVMSURzIHRoZSBmb2xsb3ctdXAgYHVzZVN0ZXBgIGNhbGxzIGRyYXcuIFNvIGl0IGlzIG9yZGVyZWQgYnlcbiAgICAgICAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gZXhhY3RseSBsaWtlIGBzdGVwX2NvbXBsZXRlZGAgYmVsb3cg4oCUIHNlZSB0aGVyZVxuICAgICAgICAgIC8vIGZvciB3aHkgdGhlIGRlZmVycmFsIGlzIGNhcHR1cmVkIGhlcmUsIGF0IGV2ZW50LWNvbnN1bXB0aW9uIHRpbWUsXG4gICAgICAgICAgLy8gYW5kIGF3YWl0ZWQgb2ZmIHRoZSBzZXJpYWwgcXVldWUuXG4gICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICdzdGVwJyk7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbjogdW5rbm93bjtcbiAgICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGV2ZW50SW5kZXgsXG4gICAgICAgICAgICAnc3RlcCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcHJlcGFyZWQgPSBhd2FpdCBjdHgucmVwbGF5UGF5bG9hZENhY2hlLnByZXBhcmVFdmVudFBheWxvYWQoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5lcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWplY3Rpb24gPSBhd2FpdCBoeWRyYXRlU3RlcEVycm9yKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgY3R4LmVuY3J5cHRpb25LZXksXG4gICAgICAgICAgICAgICAgY3R4Lmdsb2JhbFRoaXMsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgcHJlcGFyZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGh5ZHJhdGVFcnIpIHtcbiAgICAgICAgICAgICAgLy8gSWYgaHlkcmF0aW9uIGZhaWxzIGZvciBhbnkgcmVhc29uLCBmYWxsIGJhY2sgdG8gYSBnZW5lcmljXG4gICAgICAgICAgICAgIC8vIEZhdGFsRXJyb3Igc28gdGhlIHdvcmtmbG93IGRvZXNuJ3QgaGFuZy4gVGhpcyBzaG91bGQgYmVcbiAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgaW4gcHJhY3RpY2UgKGNvcnJ1cHRlZCBldmVudCBkYXRhKS5cbiAgICAgICAgICAgICAgc3RlcExvZ2dlci5lcnJvcignRmFpbGVkIHRvIGh5ZHJhdGUgc3RlcF9mYWlsZWQgZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVFcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IGh5ZHJhdGVFcnIubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhoeWRyYXRlRXJyKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlamVjdGlvbiA9IG5ldyBGYXRhbEVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gaHlkcmF0ZSBzdGVwIGVycm9yOiAke1xuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUVyciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gaHlkcmF0ZUVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGh5ZHJhdGVFcnIpXG4gICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAvLyBUZXJtaW5hbCBzdGF0ZSAtIHdlIGNhbiByZW1vdmUgdGhlIGludm9jYXRpb25RdWV1ZSBpdGVtXG4gICAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGV2ZW50LmNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgICAgLy8gU3RlcCBoYXMgY29tcGxldGVkLCBzbyByZXNvbHZlIHRoZSBQcm9taXNlIHdpdGggdGhlIGNhY2hlZCByZXN1bHQuXG4gICAgICAgICAgLy8gVGhlIGh5ZHJhdGlvbiBpcyBhc3luYyAoZS5nLiwgZGVjcnlwdGlvbiksIHNvIHdlIGNoYWluIGl0IHRocm91Z2hcbiAgICAgICAgICAvLyBjdHgucHJvbWlzZVF1ZXVlIHRvIGVuc3VyZSB0aGF0IGV2ZW4gaWYgZGVzZXJpYWxpemF0aW9uXG4gICAgICAgICAgLy8gdGFrZXMgdmFyaWFibGUgdGltZSwgcHJvbWlzZXMgcmVzb2x2ZSBpbiBldmVudCBsb2cgb3JkZXIuXG4gICAgICAgICAgLy8gRWFjaCBzdGVwJ3MgaHlkcmF0aW9uICsgcmVzb2x2ZSB3YWl0cyBmb3IgYWxsIHByaW9yIGh5ZHJhdGlvbnNcbiAgICAgICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZXhlY3V0aW5nLCBwcmVzZXJ2aW5nIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBQcmVwYXJlZCBzZXJpYWxpemVkIGJ5dGVzIGFyZSBzaGFyZWQgYWNyb3NzIHJlcGxheSBWTXMsIGJ1dCBmaW5hbFxuICAgICAgICAgIC8vIG9iamVjdHMgYXJlIGFsd2F5cyByZXZpdmVkIGhlcmUgaW5zaWRlIHRoaXMgb3JkZXJlZCBxdWV1ZSBzbG90LlxuICAgICAgICAgIC8vIE9ubHkgaW1tdXRhYmxlIHByaW1pdGl2ZSBmaW5hbCB2YWx1ZXMgYnlwYXNzIHJldml2YWwgZW50aXJlbHkuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBIeWRyYXRpb24gY29zdCBpcyB3aGF0IG1ha2VzIHRoaXMgZGVsaXZlcnkncyB0aW1pbmcgdW5zdGFibGVcbiAgICAgICAgICAvLyBhY3Jvc3MgcmVwbGF5cyBvZiBvbmUgaW52b2NhdGlvbjogdGhlIGZpcnN0IHJlcGxheSBwYXlzIHRoZSBmdWxsXG4gICAgICAgICAgLy8gZGVjcnlwdC9kZWNvbXByZXNzL3Jldml2ZSwgbGF0ZXIgcmVwbGF5cyBtZW1vLWhpdCBhIHByaW1pdGl2ZVxuICAgICAgICAgIC8vIHJlc3VsdCBpbiBgUmVwbGF5UGF5bG9hZENhY2hlYCBhbmQgZmluaXNoIGluIGEgaG9wIG9yIHR3by4gQVxuICAgICAgICAgIC8vIHdvcmtmbG93IGF3YWl0aW5nIHRoaXMgcmVzdWx0IG9uIG9uZSBicmFuY2ggYW5kIGEgYHNsZWVwKClgIG9yXG4gICAgICAgICAgLy8gaG9vayBwYXlsb2FkIG9uIGFub3RoZXIgd291bGQgdGhlcmVmb3JlIGFsbG9jYXRlIGl0cyBmb2xsb3ctdXBcbiAgICAgICAgICAvLyBzdGVwIFVMSURzIGluIGEgZGlmZmVyZW50IG9yZGVyIG9uIGEgd2FybSByZXBsYXkgdGhhbiB0aGVcbiAgICAgICAgICAvLyBpbnZvY2F0aW9uIHRoYXQgV1JPVEUgdGhvc2UgYHN0ZXBfY3JlYXRlZGAgZXZlbnRzIGRpZCDigJQgYVxuICAgICAgICAgIC8vIHBlcm1hbmVudCBgUmVwbGF5RGl2ZXJnZW5jZUVycm9yYC4gU28gdGhlIHJlc3VsdCBpcyBvcmRlcmVkIGJ5XG4gICAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIHRocm91Z2ggdGhlIGRlbGl2ZXJ5LWJhcnJpZXIgcmVnaXN0cnkgKHNlZVxuICAgICAgICAgIC8vIGBjdHgucGVuZGluZ0RlbGl2ZXJ5QmFycmllcnNgKTpcbiAgICAgICAgICAvLyAgLSBSZWdpc3RlciBhICdzdGVwJyBiYXJyaWVyIGF0IHRoaXMgZXZlbnQncyBpbmRleCBzbyBhXG4gICAgICAgICAgLy8gICAgTEFURVItaW4tbG9nIHdhaXQvaG9vayBkZWxpdmVyeSBpcyBoYW5kZWQgb3ZlciBvbmx5IGFmdGVyIGl0LlxuICAgICAgICAgIC8vICAtIEh5ZHJhdGUgaW5zaWRlIHRoaXMgc2VyaWFsIHF1ZXVlIHNsb3QgKGtlZXBpbmcgYXN5bmNcbiAgICAgICAgICAvLyAgICBkZXNlcmlhbGl6YXRpb24gaW4gZXZlbnQtbG9nIG9yZGVyKSBidXQgb25seSBDQVBUVVJFIHRoZVxuICAgICAgICAgIC8vICAgIG91dGNvbWU7IHRoZW4gZGVmZXIgYmVoaW5kIGV2ZXJ5IEVBUkxJRVItaW4tbG9nIHdhaXQgYW5kIGhvb2tcbiAgICAgICAgICAvLyAgICBkZWxpdmVyeSBiZWZvcmUgcmVzb2x2aW5nLCBhbmQgbWFyayB0aGlzIHN0ZXAgZGVsaXZlcmVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIGRlZmVycmFsIGlzIGNhcHR1cmVkIEhFUkUsIHdoaWxlIGNvbnN1bWluZyB0aGUgZXZlbnQsIGFuZCBub3RcbiAgICAgICAgICAvLyBpbnNpZGUgdGhlIHF1ZXVlIHNsb3QuIFR3byByZWFzb25zLCBib3RoIGxvYWQtYmVhcmluZzpcbiAgICAgICAgICAvLyAgLSBEZXRlcm1pbmlzbTogdGhlIHNldCBvZiBlYXJsaWVyIGRlbGl2ZXJpZXMgaXMgdGhlbiBhIGZ1bmN0aW9uIG9mXG4gICAgICAgICAgLy8gICAgbG9nIHBvc2l0aW9uIGFsb25lLiBDYXB0dXJlZCBsYXRlciBpdCB3b3VsZCBkZXBlbmQgb24gaG93IG11Y2hcbiAgICAgICAgICAvLyAgICBoeWRyYXRpb24gdGhlIGVhcmxpZXIgZGVsaXZlcmllcyBoYWQgYWxyZWFkeSBmaW5pc2hlZCDigJQgdGhlIHZlcnlcbiAgICAgICAgICAvLyAgICBjb3VwbGluZyB0aGlzIGJhcnJpZXIgZXhpc3RzIHRvIHJlbW92ZS5cbiAgICAgICAgICAvLyAgLSBDb3ZlcmFnZTogYW4gZWFybGllciBkZWxpdmVyeSB3aG9zZSBvd24gaHlkcmF0aW9uIHNsb3QgcnVuc1xuICAgICAgICAgIC8vICAgIGZpcnN0IG9uIHRoaXMgc2VyaWFsIHF1ZXVlIGhhcyB1c3VhbGx5IGFscmVhZHkgcmVzb2x2ZWQgKGFuZCBzb1xuICAgICAgICAgIC8vICAgIGRlcmVnaXN0ZXJlZCBpdHMgYmFycmllcikgYnkgdGhlIHRpbWUgYSBsYXRlciBzbG90IHN0YXJ0cy4gUmVhZFxuICAgICAgICAgIC8vICAgIGF0IHNsb3Qgc3RhcnQsIGl0cyBiYXJyaWVyIHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyBzdGVwXG4gICAgICAgICAgLy8gICAgd291bGQgbm90IGRlZmVyIGF0IGFsbC4gRXZlcnkgZXZlbnQgaW4gb25lIGRyYWluIHdpbmRvdyBpc1xuICAgICAgICAgIC8vICAgIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmcgYXQgY29uc3VtcHRpb24gdGltZVxuICAgICAgICAgIC8vICAgIHNlZXMgYWxsIG9mIHRoZW0uXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGUgZGVmZXJyYWwgcnVucyBPRkYgdGhlIHNlcmlhbCBxdWV1ZTogaXQgbWF5IHdhaXQgb24gYW4gZWFybGllclxuICAgICAgICAgIC8vIHdhaXQvaG9vayBkZWxpdmVyeSB3aG9zZSBvd24gcmVzb2x1dGlvbiBpcyBkcml2ZW4gYnkgdGhpcyBxdWV1ZSxcbiAgICAgICAgICAvLyBhbmQgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlICh0aGVcbiAgICAgICAgICAvLyBzYW1lIGNvbnN0cmFpbnQgc2xlZXAudHMgYW5kIGhvb2sudHMgZG9jdW1lbnQpLiBgcGVuZGluZ0RlbGl2ZXJpZXNgXG4gICAgICAgICAgLy8gaXMgbGlrZXdpc2UgcmVsZWFzZWQgaW5zaWRlIHRoZSBzbG90LCBiZWZvcmUgdGhlIGRldGFjaGVkIGRlZmVyLCBzb1xuICAgICAgICAgIC8vIGBzY2hlZHVsZVdoZW5JZGxlYCBjYW4gc3RpbGwgcmVhY2ggaWRsZSBhbmQgcmV0aXJlIHRoZSBiYXJyaWVyc1xuICAgICAgICAgIC8vIHRoaXMgZGVmZXJyYWwgbWF5IGJlIHdhaXRpbmcgb24uXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkRXZlbnRJZCA9IGV2ZW50LmV2ZW50SWQ7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZFJlc3VsdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICdzdGVwJyk7XG4gICAgICAgICAgbGV0IG91dGNvbWU6XG4gICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBSZXN1bHQgfVxuICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGV2ZW50SW5kZXgsXG4gICAgICAgICAgICAnc3RlcCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgaHlkcmF0ZWRSZXN1bHQgPSBhd2FpdCBjdHgucmVwbGF5UGF5bG9hZENhY2hlLmdldFN0ZXBSZXN1bHQoXG4gICAgICAgICAgICAgICAgY29tcGxldGVkRXZlbnRJZCxcbiAgICAgICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcmVwYXJlZCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5yZXBsYXlQYXlsb2FkQ2FjaGUucHJlcGFyZUV2ZW50UGF5bG9hZChcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRFdmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQnLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpcyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHByZXBhcmVkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBoeWRyYXRlZFJlc3VsdCBhcyBSZXN1bHQgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIG91dGNvbWUgPSB7IG9rOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm9pZCBlYXJsaWVyRGVsaXZlcmVkLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgaWYgKG91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG91dGNvbWUudmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChvdXRjb21lLmVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIHN0ZXAgJHtjb3JyZWxhdGlvbklkfSAobmFtZTogJHtzdGVwTmFtZX0pIFwiJHtldmVudC5ldmVudFR5cGV9XCJgLFxuICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgLy8gRW5zdXJlIHRoZSBcIm5hbWVcIiBwcm9wZXJ0eSBtYXRjaGVzIHRoZSBvcmlnaW5hbCBzdGVwIGZ1bmN0aW9uIG5hbWVcbiAgICAvLyBFeHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBzdGVwTmFtZSAoZm9ybWF0OiBcInN0ZXAvL2ZpbGVwYXRoLy9mdW5jdGlvbk5hbWVcIilcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdGVwTmFtZS5zcGxpdCgnLy8nKS5wb3AoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RlcEZ1bmN0aW9uLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbk5hbWUsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHN0ZXAgZnVuY3Rpb24gaWRlbnRpZmllciB0byB0aGUgc3RlcCBmdW5jdGlvbiBmb3Igc2VyaWFsaXphdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGVwRnVuY3Rpb24sICdzdGVwSWQnLCB7XG4gICAgICB2YWx1ZTogc3RlcE5hbWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgY2xvc3VyZSB2YXJpYWJsZXMgZnVuY3Rpb24gZm9yIHNlcmlhbGl6YXRpb25cbiAgICBpZiAoY2xvc3VyZVZhcnNGbikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ19fY2xvc3VyZVZhcnNGbicsIHtcbiAgICAgICAgdmFsdWU6IGNsb3N1cmVWYXJzRm4sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBgLmJpbmRgIHNvIHRoZSBib3VuZCBmdW5jdGlvbiBwcmVzZXJ2ZXMgdGhlIHN0ZXAgcHJveHlcbiAgICAvLyBtZXRhZGF0YSB0aGF0IGBnZXRTdGVwRnVuY3Rpb25SZWR1Y2VyYCByZWxpZXMgb24gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgLy8gV2l0aG91dCB0aGlzIG92ZXJyaWRlLCBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIHdvdWxkIHJldHVybiBhIG5ld1xuICAgIC8vIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBpbmhlcml0IGBzdGVwSWRgLCBgX19jbG9zdXJlVmFyc0ZuYCwgb3IgYW55XG4gICAgLy8gb3RoZXIgb3duIHByb3BlcnRpZXMgb2YgdGhlIG9yaWdpbmFsIHByb3h5IOKAlCBzbyB0aGUgU3RlcEZ1bmN0aW9uXG4gICAgLy8gcmVkdWNlciB3b3VsZCByZWZ1c2UgdG8gc2VyaWFsaXplIGl0IChpdCdkIGxvb2sgbGlrZSBhIHBsYWluXG4gICAgLy8gZnVuY3Rpb24pLCBhbmQgYSBgdXNlU3RlcCguLi4pLmJpbmQodGhpcylgIHByb3h5IHRoYXQgZmxvd2VkXG4gICAgLy8gdGhyb3VnaCB3b3JrZmxvdyBzZXJpYWxpemF0aW9uIHdvdWxkIHNpbGVudGx5IGJyZWFrLlxuICAgIC8vXG4gICAgLy8gVGhlIG92ZXJyaWRlIHN0YXNoZXMgdGhyZWUgcGllY2VzIG9mIHN0YXRlIG9uIHRoZSBib3VuZCBmdW5jdGlvbiBzb1xuICAgIC8vIHRoZSByb3VuZCB0cmlwIGlzIGZhaXRoZnVsOlxuICAgIC8vICAgLSBgc3RlcElkYCAgICAgICAgICAgICDigJQgYWxyZWFkeSBzZXQgb24gdGhlIG9yaWdpbmFsIHByb3h5LlxuICAgIC8vICAgLSBgX19jbG9zdXJlVmFyc0ZuYCAgICDigJQgb25seSB3aGVuIHRoZSBvcmlnaW5hbCBwcm94eSBoYWQgb25lLlxuICAgIC8vICAgLSBgX19ib3VuZFRoaXNgICAgICAgICDigJQgdGhlIHJlY2VpdmVyIHBhc3NlZCB0byBgLmJpbmQodGhpc0FyZywg4oCmKWAuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIHNldCAoZXZlbiB3aGVuIGB0aGlzQXJnYCBpc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBudWxsYC9gdW5kZWZpbmVkYCkgc28gdGhlIHJlZHVjZXIgY2FuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluZ3Vpc2ggXCJ3YXMgYm91bmRcIiBmcm9tIFwid2Fzbid0XCIuXG4gICAgLy8gICAtIGBfX2JvdW5kQXJnc2AgICAgICAgIOKAlCBvbmx5IHdoZW4gdGhlIHVzZXIgc3VwcGxpZWQgcHJlZmlsbGVkXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIChgLmJpbmQodGhpc0FyZywgeCwgeSlgKS4gVGhlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dDIHBsdWdpbiBvbmx5IGV2ZXIgZW1pdHMgYC5iaW5kKHRoaXMpYFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGF5LCBzbyB0aGlzIGlzIHJhcmUgaW4gcHJhY3RpY2U7IHdlXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgY2FwdHVyZSBpdCBzbyB0aGUgcGFydGlhbCBhcmdzXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vydml2ZSBzZXJpYWxpemF0aW9uIHJhdGhlciB0aGFuXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsZW50bHkgZGlzYXBwZWFyaW5nIG9uIHRoZSBzdGVwIHNpZGUuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN0ZXBGdW5jdGlvbiwgJ2JpbmQnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gKFxuICAgICAgICB0aGlzOiB0eXBlb2Ygc3RlcEZ1bmN0aW9uLFxuICAgICAgICB0aGlzQXJnOiB1bmtub3duLFxuICAgICAgICAuLi5wYXJ0aWFsQXJnczogdW5rbm93bltdXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYm91bmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICAuLi5wYXJ0aWFsQXJnc1xuICAgICAgICApO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdzdGVwSWQnLCB7XG4gICAgICAgICAgdmFsdWU6IHN0ZXBOYW1lLFxuICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNsb3N1cmVWYXJzRm4pIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2Nsb3N1cmVWYXJzRm4nLCB7XG4gICAgICAgICAgICB2YWx1ZTogY2xvc3VyZVZhcnNGbixcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYm91bmQsICdfX2JvdW5kVGhpcycsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpc0FyZyxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXJ0aWFsQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJvdW5kLCAnX19ib3VuZEFyZ3MnLCB7XG4gICAgICAgICAgICB2YWx1ZTogcGFydGlhbEFyZ3MsXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvdW5kO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGVwRnVuY3Rpb247XG4gIH07XG59XG4iXX0=
|
package/dist/symbols.d.ts
CHANGED
|
@@ -30,6 +30,32 @@ export declare const STREAM_SERVER_RUN_ID_SYMBOL: unique symbol;
|
|
|
30
30
|
* it to resolve the owning run's encryption key without loading the run first.
|
|
31
31
|
*/
|
|
32
32
|
export declare const STREAM_SERVER_DEPLOYMENT_ID_SYMBOL: unique symbol;
|
|
33
|
+
/**
|
|
34
|
+
* Stamped alongside `STREAM_SERVER_RUN_ID_SYMBOL` with the owning run's
|
|
35
|
+
* X25519 public key (base64), when the run has one.
|
|
36
|
+
*
|
|
37
|
+
* This is what lets a forwarded writable be written to across a deployment
|
|
38
|
+
* boundary at zero cost. The owning run derives its own public key locally
|
|
39
|
+
* when it creates the stream, so the key travels inside the serialized
|
|
40
|
+
* descriptor; a child on another deployment can then seal frames immediately.
|
|
41
|
+
* Without it the child would have to either fetch the owning run or fetch its
|
|
42
|
+
* symmetric key from the API — the round trip this whole mechanism exists to
|
|
43
|
+
* avoid.
|
|
44
|
+
*/
|
|
45
|
+
export declare const STREAM_SERVER_PUBLIC_KEY_SYMBOL: unique symbol;
|
|
46
|
+
/**
|
|
47
|
+
* Stamped on a `WorkflowServerWritableStream` instance to expose its
|
|
48
|
+
* durability barrier: `() => Promise<void>` that resolves once every accepted
|
|
49
|
+
* chunk has durably reached the server (nothing buffered, nothing in flight)
|
|
50
|
+
* and rejects if any dispatch failed.
|
|
51
|
+
*
|
|
52
|
+
* The sink acks `write()` on buffer entry (group-commit batching), so
|
|
53
|
+
* durability tracking lives here instead: `flushablePipe` feature-detects
|
|
54
|
+
* this and awaits it before resolving its lock-release completion, keeping
|
|
55
|
+
* the invariant that a step cannot complete while stream data is still
|
|
56
|
+
* client-side. Sinks without it are fully durable per `write()` already.
|
|
57
|
+
*/
|
|
58
|
+
export declare const STREAM_DRAIN_SYMBOL: unique symbol;
|
|
33
59
|
export declare const BODY_INIT_SYMBOL: unique symbol;
|
|
34
60
|
export declare const WEBHOOK_RESPONSE_WRITABLE: unique symbol;
|
|
35
61
|
/**
|
package/dist/symbols.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,qBAAqB,eAAwC,CAAC;AAC3E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,eAE9C,CAAC;AACF,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../src/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AACjE,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,eAAqC,CAAC;AACvE,eAAO,MAAM,cAAc,eAA+B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,eAAiC,CAAC;AAC/D,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,WAAW,eAAqC,CAAC;AAC9D,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AACrE,eAAO,MAAM,qBAAqB,eAAwC,CAAC;AAC3E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,eAE9C,CAAC;AACF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,+BAA+B,eAE3C,CAAC;AACF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,eAAsC,CAAC;AAEvE,eAAO,MAAM,gBAAgB,eAA0B,CAAC;AACxD,eAAO,MAAM,yBAAyB,eAErC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,eAAwC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAC1E,eAAO,MAAM,gBAAgB,eAA0C,CAAC;AACxE,eAAO,MAAM,uBAAuB,eAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,eAA6C,CAAC"}
|