@workflow/core 5.0.0-beta.41 → 5.0.0-beta.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/create-hook.d.ts +9 -5
  2. package/dist/create-hook.d.ts.map +1 -1
  3. package/dist/create-hook.js +1 -1
  4. package/dist/events-consumer.d.ts +97 -0
  5. package/dist/events-consumer.d.ts.map +1 -1
  6. package/dist/events-consumer.js +147 -14
  7. package/dist/private.d.ts +31 -12
  8. package/dist/private.d.ts.map +1 -1
  9. package/dist/private.js +149 -26
  10. package/dist/runtime/constants.d.ts +62 -0
  11. package/dist/runtime/constants.d.ts.map +1 -1
  12. package/dist/runtime/constants.js +70 -1
  13. package/dist/runtime/helpers.d.ts +127 -93
  14. package/dist/runtime/helpers.d.ts.map +1 -1
  15. package/dist/runtime/helpers.js +149 -132
  16. package/dist/runtime/quickjs-entrypoint.d.ts +10 -9
  17. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  18. package/dist/runtime/quickjs-entrypoint.js +162 -38
  19. package/dist/runtime/replay-budget.d.ts +8 -0
  20. package/dist/runtime/replay-budget.d.ts.map +1 -1
  21. package/dist/runtime/replay-budget.js +3 -3
  22. package/dist/runtime/resume-hook.d.ts.map +1 -1
  23. package/dist/runtime/resume-hook.js +53 -13
  24. package/dist/runtime/resume-latency.d.ts +143 -0
  25. package/dist/runtime/resume-latency.d.ts.map +1 -0
  26. package/dist/runtime/resume-latency.js +153 -0
  27. package/dist/runtime/run.d.ts.map +1 -1
  28. package/dist/runtime/run.js +54 -29
  29. package/dist/runtime/step-executor.d.ts +76 -13
  30. package/dist/runtime/step-executor.d.ts.map +1 -1
  31. package/dist/runtime/step-executor.js +171 -19
  32. package/dist/runtime/step-latency.d.ts +6 -0
  33. package/dist/runtime/step-latency.d.ts.map +1 -1
  34. package/dist/runtime/step-latency.js +3 -1
  35. package/dist/runtime/suspension-handler.d.ts +119 -8
  36. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  37. package/dist/runtime/suspension-handler.js +643 -46
  38. package/dist/runtime/world-compatibility.d.ts +6 -5
  39. package/dist/runtime/world-compatibility.d.ts.map +1 -1
  40. package/dist/runtime/world-compatibility.js +7 -6
  41. package/dist/runtime.d.ts.map +1 -1
  42. package/dist/runtime.js +583 -142
  43. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  44. package/dist/serialization/codec-devalue.js +15 -4
  45. package/dist/serialization.d.ts +10 -2
  46. package/dist/serialization.d.ts.map +1 -1
  47. package/dist/serialization.js +55 -8
  48. package/dist/telemetry/semantic-conventions.d.ts +81 -0
  49. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  50. package/dist/telemetry/semantic-conventions.js +67 -1
  51. package/dist/telemetry.d.ts +6 -0
  52. package/dist/telemetry.d.ts.map +1 -1
  53. package/dist/telemetry.js +22 -1
  54. package/dist/test-support/orchestrator-context.d.ts +25 -0
  55. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  56. package/dist/test-support/orchestrator-context.js +91 -0
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +2 -2
  59. package/dist/workflow/create-hook.js +2 -2
  60. package/dist/workflow/hook.js +3 -3
  61. package/dist/workflow.js +43 -2
  62. package/docs/foundations/hooks.mdx +2 -2
  63. package/docs/foundations/streaming.mdx +24 -0
  64. package/docs/how-it-works/event-sourcing.mdx +39 -1
  65. package/package.json +5 -5
@@ -108,13 +108,17 @@ export interface HookOptions {
108
108
  * the token with the information it has available.
109
109
  *
110
110
  * Deterministic tokens are intended for use with `createHook()` and
111
- * server-side `resumeHook()` only. For webhooks (`createWebhook()`),
112
- * tokens are always randomly generated to prevent unauthorized access
113
- * to the public webhook endpoint.
111
+ * server-side `resumeHook()` only. For webhooks (`createWebhook()`), an
112
+ * explicit token is not accepted one is always generated for you.
113
+ *
114
+ * A generated token is not trivial to guess but is not a security
115
+ * contract, so authenticate webhook requests themselves rather than
116
+ * relying on URL secrecy:
117
+ * https://workflow-sdk.dev/docs/foundations/hooks#token-design
114
118
  *
115
119
  * If provided, the token must be a non-empty string; passing an empty
116
- * string throws. If not provided (or `undefined`), a randomly generated
117
- * token will be assigned.
120
+ * string throws. If not provided (or `undefined`), a token is generated
121
+ * for you.
118
122
  *
119
123
  * @example
120
124
  *
@@ -1 +1 @@
1
- {"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../src/create-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,UAAU,QAAQ,CAAC,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,OAAO;IAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IACzD;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,yBAAyB,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;IAExD;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CACV,WAAW,EACX,OAAO,GAAG,WAAW,GAAG,2BAA2B,CACpD;IACD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChC,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"create-hook.d.ts","sourceRoot":"","sources":["../src/create-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,UAAU,QAAQ,CAAC,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,OAAO;IAClD,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;;;;;;;;;;;OAYG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,CAAE,SAAQ,IAAI,CAAC,CAAC,CAAC;IACzD;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,yBAAyB,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;IAExD;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cACf,SAAQ,IAAI,CACV,WAAW,EACX,OAAO,GAAG,WAAW,GAAG,2BAA2B,CACpD;IACD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,wBAAgB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,GAClD,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAChC,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC"}
@@ -30,4 +30,4 @@ export function createWebhook(
30
30
  options) {
31
31
  throwNotInWorkflowContext('createWebhook()', 'https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook', createWebhook);
32
32
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUEwTmhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLFVBQVUsQ0FBVSxPQUFxQjtJQUN2RCx5QkFBeUIsQ0FDdkIsY0FBYyxFQUNkLGtFQUFrRSxFQUNsRSxVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUM7QUFhRCxNQUFNLFVBQVUsYUFBYTtBQUMzQixvREFBb0Q7QUFDcEQsT0FBd0I7SUFFeEIseUJBQXlCLENBQ3ZCLGlCQUFpQixFQUNqQixxRUFBcUUsRUFDckUsYUFBYSxDQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJ21zJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuIH0gZnJvbSAnLi9ydW50aW1lL3J1bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgY2FuIGJlIGF3YWl0ZWQgdG8gcmVjZWl2ZSBhIHZhbHVlLlxuICovXG5pbnRlcmZhY2UgVGhlbmFibGU8VD4ge1xuICB0aGVuOiBQcm9taXNlPFQ+Wyd0aGVuJ107XG59XG5cbi8qKlxuICogQSBgUmVxdWVzdGAgdGhhdCBjYW4gYmUgcmVzcG9uZGVkIHRvIHdpdGhpbiBhIHdvcmtmbG93XG4gKiBzdGVwIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIGByZXNwb25kV2l0aCgpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFdpdGhSZXNwb25zZSBleHRlbmRzIFJlcXVlc3Qge1xuICByZXNwb25kV2l0aDogKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBjYW4gYmUgYXdhaXRlZCBhbmQvb3IgaXRlcmF0ZWQgb3ZlciB0byByZWNlaXZlXG4gKiBhIHZhbHVlIHdpdGhpbiBhIHdvcmtmbG93IGZyb20gYW4gZXh0ZXJuYWwgc3lzdGVtLlxuICpcbiAqIEhvb2tzIGltcGxlbWVudCB0aGUgVEMzOSBFeHBsaWNpdCBSZXNvdXJjZSBNYW5hZ2VtZW50IHByb3Bvc2FsLFxuICogYWxsb3dpbmcgdGhlbSB0byBiZSB1c2VkIHdpdGggdGhlIGB1c2luZ2Aga2V5d29yZCBmb3IgYXV0b21hdGljIGRpc3Bvc2FsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvb2s8VCA9IGFueT4gZXh0ZW5kcyBBc3luY0l0ZXJhYmxlPFQ+LCBUaGVuYWJsZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gdXNlZCB0byBpZGVudGlmeSB0aGlzIGhvb2suXG4gICAqL1xuICB0b2tlbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgUnVufSBhbHJlYWR5IHVzaW5nIHRoaXMgdG9rZW4sIG9yIGBudWxsYCB3aGVuIHRoaXMgSG9va1xuICAgKiByZWdpc3RlcnMgc3VjY2Vzc2Z1bGx5LlxuICAgKlxuICAgKiBDYWxsaW5nIGBjcmVhdGVIb29rKClgIGFsb25lIGRvZXMgbm90IHJlZ2lzdGVyIHRoZSBob29rIOKAlCByZWdpc3RyYXRpb25cbiAgICogb25seSBoYXBwZW5zIHdoZW4gdGhlIHdvcmtmbG93IHN1c3BlbmRzLiBBd2FpdGluZyBgZ2V0Q29uZmxpY3QoKWBcbiAgICogc3VzcGVuZHMgdGhlIHdvcmtmbG93IHRvIGNvbW1pdCB0aGUgaG9vayByZWdpc3RyYXRpb24gd2l0aG91dCB3YWl0aW5nIGZvclxuICAgKiBwYXlsb2FkIGRhdGEuXG4gICAqXG4gICAqIElmIGl0IHJldHVybnMgYSBydW4sIHRoaXMgSG9vayB3YXMgbm90IGNyZWF0ZWQuIEF3YWl0aW5nIHRoZSBIb29rIGluc3RlYWRcbiAgICogcmVqZWN0cyB3aXRoIGBIb29rQ29uZmxpY3RFcnJvcmAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIHVzaW5nIGhvb2sgPSBjcmVhdGVIb29rKHsgdG9rZW46IGBvcmRlcjoke29yZGVySWR9YCB9KTtcbiAgICogY29uc3QgY29uZmxpY3QgPSBhd2FpdCBob29rLmdldENvbmZsaWN0KCk7XG4gICAqIGlmIChjb25mbGljdCkge1xuICAgKiAgIC8vIGFub3RoZXIgcnVuIGFscmVhZHkgb3ducyB0aGlzIHRva2VuXG4gICAqICAgcmV0dXJuIHsgc3RhdHVzOiAnZHVwbGljYXRlJywgcnVuSWQ6IGNvbmZsaWN0LnJ1bklkIH07XG4gICAqIH1cbiAgICogLy8gdGhpcyBIb29rIHJlZ2lzdGVyZWQgd2l0aG91dCB3YWl0aW5nIGZvciBwYXlsb2FkIGRhdGFcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb25mbGljdCgpOiBQcm9taXNlPFJ1bjx1bmtub3duPiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgaG9vaywgcmVsZWFzaW5nIGl0cyB0b2tlbiBmb3IgcmV1c2UgYnkgb3RoZXIgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBBZnRlciBjYWxsaW5nIGBkaXNwb3NlKClgLCB0aGUgaG9vayB3aWxsIG5vIGxvbmdlciByZWNlaXZlIGFueSBldmVudHMuXG4gICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZXhwbGljaXRseSByZWxlYXNlIGEgaG9vayB0b2tlbiBiZWZvcmVcbiAgICogdGhlIHdvcmtmbG93IGNvbXBsZXRlcywgYWxsb3dpbmcgYW5vdGhlciB3b3JrZmxvdyB0byByZWdpc3RlciBhIGhvb2tcbiAgICogd2l0aCB0aGUgc2FtZSB0b2tlbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogY29uc3QgaG9vayA9IGNyZWF0ZUhvb2s8eyBtZXNzYWdlOiBzdHJpbmcgfT4oeyB0b2tlbjogJ215LXRva2VuJyB9KTtcbiAgICpcbiAgICogZm9yIGF3YWl0IChjb25zdCBwYXlsb2FkIG9mIGhvb2spIHtcbiAgICogICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnZG9uZScpIHtcbiAgICogICAgIGhvb2suZGlzcG9zZSgpOyAvLyBSZWxlYXNlIHRoZSB0b2tlbiBlYXJseVxuICAgKiAgICAgYnJlYWs7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIHRoZSBUQzM5IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgcHJvcG9zYWwuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNpbmcgdGhlIGB1c2luZ2Aga2V5d29yZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICoge1xuICAgKiAgIHVzaW5nIGhvb2sgPSBjcmVhdGVIb29rPHsgbWVzc2FnZTogc3RyaW5nIH0+KHsgdG9rZW46ICdteS10b2tlbicgfSk7XG4gICAqICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGhvb2s7XG4gICAqICAgLy8gaG9vayBpcyBhdXRvbWF0aWNhbGx5IGRpc3Bvc2VkIHdoZW4gdGhlIGJsb2NrIGV4aXRzXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSB3ZWJob29rIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIHRoZSB3b3JrZmxvdyBydW5cbiAqIHVwb24gcmVjZWl2aW5nIGFuIEhUVFAgcmVxdWVzdCB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAqXG4gKiBAc2VlIHtAbGluayBjcmVhdGVXZWJob29rfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2s8VCBleHRlbmRzIFJlcXVlc3Q+IGV4dGVuZHMgSG9vazxUPiB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIHRoYXQgZXh0ZXJuYWwgc3lzdGVtcyBjYW4gY2FsbCB0byBzZW5kIGRhdGEgdG8gdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va09wdGlvbnMge1xuICAvKipcbiAgICogVW5pcXVlIHRva2VuIHRoYXQgaXMgdXNlZCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgaG9vay5cbiAgICpcbiAgICogV2hlbiBzcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHRva2VuLCB0aGUgdG9rZW4gc2hvdWxkIGJlIGNvbnN0cnVjdGVkXG4gICAqIHdpdGggaW5mb3JtYXRpb24gdGhhdCB0aGUgZGlzcGF0Y2hpbmcgc2lkZSBjYW4gcmVsaWFibHkgcmVjb25zdHJ1Y3RcbiAgICogdGhlIHRva2VuIHdpdGggdGhlIGluZm9ybWF0aW9uIGl0IGhhcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIERldGVybWluaXN0aWMgdG9rZW5zIGFyZSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggYGNyZWF0ZUhvb2soKWAgYW5kXG4gICAqIHNlcnZlci1zaWRlIGByZXN1bWVIb29rKClgIG9ubHkuIEZvciB3ZWJob29rcyAoYGNyZWF0ZVdlYmhvb2soKWApLFxuICAgKiB0b2tlbnMgYXJlIGFsd2F5cyByYW5kb21seSBnZW5lcmF0ZWQgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgYWNjZXNzXG4gICAqIHRvIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC5cbiAgICpcbiAgICogSWYgcHJvdmlkZWQsIHRoZSB0b2tlbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZzsgcGFzc2luZyBhbiBlbXB0eVxuICAgKiBzdHJpbmcgdGhyb3dzLiBJZiBub3QgcHJvdmlkZWQgKG9yIGB1bmRlZmluZWRgKSwgYSByYW5kb21seSBnZW5lcmF0ZWRcbiAgICogdG9rZW4gd2lsbCBiZSBhc3NpZ25lZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBgdHNcbiAgICogLy8gRXhwbGljaXQgdG9rZW4gZm9yIGEgU2xhY2sgYm90IChvbmUgd29ya2Zsb3cgcnVuIHBlciBjaGFubmVsKVxuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazxTbGFja01lc3NhZ2U+KHtcbiAgICogICB0b2tlbjogYHNsYWNrX3dlYmhvb2s6JHtjaGFubmVsSWR9YCxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICoqRXhwZXJpbWVudGFsLioqIEtlZXBzIHRoaXMgSG9vaydzIHRva2VuIHVuYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0aGVcbiAgICogY29uZmlndXJlZCB0aW1lIGFmdGVyIGBjcmVhdGVIb29rKClgIHJ1bnMuXG4gICAqXG4gICAqIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzIGBzbGVlcCgpYDogYSBkdXJhdGlvbiBzdHJpbmcsIGEgbnVtYmVyIG9mXG4gICAqIG1pbGxpc2Vjb25kcywgb3IgYW4gYWJzb2x1dGUgYERhdGVgLiBSZWxhdGl2ZSBkdXJhdGlvbnMgc3RhcnQgd2hlblxuICAgKiBgY3JlYXRlSG9vaygpYCBydW5zLCBub3Qgd2hlbiB0aGUgd29ya2Zsb3cgZW5kcy5cbiAgICpcbiAgICogVGhlIEhvb2sgcmVtYWlucyBhY3RpdmUgdW50aWwgdGhlIHdvcmtmbG93IGVuZHMsIGV2ZW4gaWYgdGhlIGNvbmZpZ3VyZWRcbiAgICogdGltZSBwYXNzZXMgZmlyc3QuIEFub3RoZXIgSG9vayBjYW4gdXNlIHRoZSB0b2tlbiBvbmx5IGFmdGVyIGJvdGggdGhlIHJ1blxuICAgKiBoYXMgZW5kZWQgYW5kIHRoZSBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC5cbiAgICogQWZ0ZXIgdGhlIHJ1biBlbmRzLCB0aGUgSG9vayBjYW4gc3RpbGwgYmUgZm91bmQgd2l0aCBgZ2V0SG9va0J5VG9rZW4oKWBcbiAgICogdW50aWwgcmV0ZW50aW9uIGVuZHMsIGJ1dCBpdCBjYW5ub3QgYmUgcmVzdW1lZC5cbiAgICpcbiAgICogQ2FsbGluZyBgZGlzcG9zZSgpYCAoaW5jbHVkaW5nIHRocm91Z2ggYHVzaW5nYCkgcmVsZWFzZXMgdGhlIHRva2VuXG4gICAqIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBgY3JlYXRlSG9vaygpYCB0aHJvd3MgaWYgdGhlIGNvbmZpZ3VyZWQgV29ybGQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzXG4gICAqIGV4cGVyaW1lbnRhbCBvcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IGhvb2sgPSBjcmVhdGVIb29rKHtcbiAgICogICB0b2tlbjogYG9yZGVyOiR7b3JkZXJJZH1gLFxuICAgKiAgIGV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb246ICczMGQnLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBleHBlcmltZW50YWxfbWluUmV0ZW50aW9uPzogU3RyaW5nVmFsdWUgfCBEYXRlIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBkYXRhIHRvIGluY2x1ZGUgd2l0aCB0aGUgaG9vayBwYXlsb2FkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG5hbWU6IHN0cmluZyB9Pih7XG4gICAqICAgbWV0YWRhdGE6IHtcbiAgICogICAgIHR5cGU6IFwiY2F0XCIsXG4gICAqICAgICBjb2xvcjogXCJvcmFuZ2VcIixcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBtZXRhZGF0YT86IFNlcmlhbGl6YWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGhvb2sgY2FuIGJlIHJlc3VtZWQgdmlhIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBob29rIGNhbiBiZSB0cmlnZ2VyZWQgYnkgc2VuZGluZyBhbiBIVFRQIHJlcXVlc3QgdG8gdGhlXG4gICAqIHB1YmxpYyB3b3JrZmxvdyB3ZWJob29rIFVSTC4gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHVzaW5nXG4gICAqIGBjcmVhdGVXZWJob29rKClgLlxuICAgKlxuICAgKiBXaGVuIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSwgdGhlIGhvb2sgY2FuIG9ubHkgYmUgcmVzdW1lZCBzZXJ2ZXItc2lkZVxuICAgKiB2aWEgYHJlc3VtZUhvb2soKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpc1dlYmhvb2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tPcHRpb25zXG4gIGV4dGVuZHMgT21pdDxcbiAgICBIb29rT3B0aW9ucyxcbiAgICAndG9rZW4nIHwgJ2lzV2ViaG9vaycgfCAnZXhwZXJpbWVudGFsX21pblJldGVudGlvbidcbiAgPiB7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYSBgUmVzcG9uc2VgIG9iamVjdCwgdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAqIHJlc3BvbmQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gYFwibWFudWFsXCJgLCBlYWNoIGluZGl2aWR1YWwgcmVxdWVzdCB3aWxsIG5lZWQgdG9cbiAgICogYmUgcmVzcG9uZGVkIHRvIG1hbnVhbGx5IGZyb20gd2l0aGluIHRoZSB3b3JrZmxvdyBieSBjYWxsaW5nIHRoZVxuICAgKiBgcmVzcG9uZFdpdGgoKWAgbWV0aG9kLlxuICAgKlxuICAgKiBJZiBub3Qgc2V0IHRoZW4gdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgd2l0aFxuICAgKiBhIGAyMDIgQWNjZXB0ZWRgIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVzcG9uZFdpdGg/OiBSZXNwb25zZSB8ICdtYW51YWwnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgSG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93IHJ1biB3aXRoIGEgcGF5bG9hZC5cbiAqXG4gKiBIb29rcyBhbGxvdyBleHRlcm5hbCBzeXN0ZW1zIHRvIHNlbmQgYXJiaXRyYXJ5IHNlcmlhbGl6YWJsZSBkYXRhIGludG8gYSB3b3JrZmxvdy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGhvb2suXG4gKiBAcmV0dXJucyBBIGBIb29rYCB0aGF0IGNhbiBiZSBhd2FpdGVkIHRvIHJlY2VpdmUgb25lIG9yIG1vcmUgcGF5bG9hZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93V2l0aEhvb2soKSB7XG4gKiAgIFwidXNlIHdvcmtmbG93XCI7XG4gKlxuICogICBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICogICBjb25zb2xlLmxvZygnSG9vayB0b2tlbjonLCBob29rLnRva2VuKTtcbiAqXG4gKiAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBob29rO1xuICogICBjb25zb2xlLmxvZygnUmVjZWl2ZWQ6JywgcGF5bG9hZC5tZXNzYWdlKTtcbiAqIH1cbiAqIGBgYFxuICovXG4vLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dChcbiAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9jcmVhdGUtaG9vaycsXG4gICAgY3JlYXRlSG9va1xuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgV2ViaG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93XG4gKiBydW4gdXBvbiByZWNlaXZpbmcgYW4gSFRUUCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICpcbiAqIFdlYmhvb2tzIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0IHwgUmVxdWVzdH0gb2JqZWN0XG4gKiB0aGF0IGNhbiBiZSBpbnRlcmFjdGVkIHdpdGggaW4gd29ya2Zsb3cgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhcbiAgb3B0aW9uczogV2ViaG9va09wdGlvbnMgJiB7IHJlc3BvbmRXaXRoOiAnbWFudWFsJyB9XG4pOiBXZWJob29rPFJlcXVlc3RXaXRoUmVzcG9uc2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2sob3B0aW9ucz86IFdlYmhvb2tPcHRpb25zKTogV2ViaG9vazxSZXF1ZXN0PjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0KFxuICAgICdjcmVhdGVXZWJob29rKCknLFxuICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS13ZWJob29rJyxcbiAgICBjcmVhdGVXZWJob29rXG4gICk7XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3JlYXRlLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUE4TmhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLFVBQVUsQ0FBVSxPQUFxQjtJQUN2RCx5QkFBeUIsQ0FDdkIsY0FBYyxFQUNkLGtFQUFrRSxFQUNsRSxVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUM7QUFhRCxNQUFNLFVBQVUsYUFBYTtBQUMzQixvREFBb0Q7QUFDcEQsT0FBd0I7SUFFeEIseUJBQXlCLENBQ3ZCLGlCQUFpQixFQUNqQixxRUFBcUUsRUFDckUsYUFBYSxDQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJpbmdWYWx1ZSB9IGZyb20gJ21zJztcbmltcG9ydCB7IHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQtZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuIH0gZnJvbSAnLi9ydW50aW1lL3J1bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4vc2NoZW1hcy5qcyc7XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQgY2FuIGJlIGF3YWl0ZWQgdG8gcmVjZWl2ZSBhIHZhbHVlLlxuICovXG5pbnRlcmZhY2UgVGhlbmFibGU8VD4ge1xuICB0aGVuOiBQcm9taXNlPFQ+Wyd0aGVuJ107XG59XG5cbi8qKlxuICogQSBgUmVxdWVzdGAgdGhhdCBjYW4gYmUgcmVzcG9uZGVkIHRvIHdpdGhpbiBhIHdvcmtmbG93XG4gKiBzdGVwIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIGByZXNwb25kV2l0aCgpYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFdpdGhSZXNwb25zZSBleHRlbmRzIFJlcXVlc3Qge1xuICByZXNwb25kV2l0aDogKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBjYW4gYmUgYXdhaXRlZCBhbmQvb3IgaXRlcmF0ZWQgb3ZlciB0byByZWNlaXZlXG4gKiBhIHZhbHVlIHdpdGhpbiBhIHdvcmtmbG93IGZyb20gYW4gZXh0ZXJuYWwgc3lzdGVtLlxuICpcbiAqIEhvb2tzIGltcGxlbWVudCB0aGUgVEMzOSBFeHBsaWNpdCBSZXNvdXJjZSBNYW5hZ2VtZW50IHByb3Bvc2FsLFxuICogYWxsb3dpbmcgdGhlbSB0byBiZSB1c2VkIHdpdGggdGhlIGB1c2luZ2Aga2V5d29yZCBmb3IgYXV0b21hdGljIGRpc3Bvc2FsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvb2s8VCA9IGFueT4gZXh0ZW5kcyBBc3luY0l0ZXJhYmxlPFQ+LCBUaGVuYWJsZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gdXNlZCB0byBpZGVudGlmeSB0aGlzIGhvb2suXG4gICAqL1xuICB0b2tlbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgUnVufSBhbHJlYWR5IHVzaW5nIHRoaXMgdG9rZW4sIG9yIGBudWxsYCB3aGVuIHRoaXMgSG9va1xuICAgKiByZWdpc3RlcnMgc3VjY2Vzc2Z1bGx5LlxuICAgKlxuICAgKiBDYWxsaW5nIGBjcmVhdGVIb29rKClgIGFsb25lIGRvZXMgbm90IHJlZ2lzdGVyIHRoZSBob29rIOKAlCByZWdpc3RyYXRpb25cbiAgICogb25seSBoYXBwZW5zIHdoZW4gdGhlIHdvcmtmbG93IHN1c3BlbmRzLiBBd2FpdGluZyBgZ2V0Q29uZmxpY3QoKWBcbiAgICogc3VzcGVuZHMgdGhlIHdvcmtmbG93IHRvIGNvbW1pdCB0aGUgaG9vayByZWdpc3RyYXRpb24gd2l0aG91dCB3YWl0aW5nIGZvclxuICAgKiBwYXlsb2FkIGRhdGEuXG4gICAqXG4gICAqIElmIGl0IHJldHVybnMgYSBydW4sIHRoaXMgSG9vayB3YXMgbm90IGNyZWF0ZWQuIEF3YWl0aW5nIHRoZSBIb29rIGluc3RlYWRcbiAgICogcmVqZWN0cyB3aXRoIGBIb29rQ29uZmxpY3RFcnJvcmAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIHVzaW5nIGhvb2sgPSBjcmVhdGVIb29rKHsgdG9rZW46IGBvcmRlcjoke29yZGVySWR9YCB9KTtcbiAgICogY29uc3QgY29uZmxpY3QgPSBhd2FpdCBob29rLmdldENvbmZsaWN0KCk7XG4gICAqIGlmIChjb25mbGljdCkge1xuICAgKiAgIC8vIGFub3RoZXIgcnVuIGFscmVhZHkgb3ducyB0aGlzIHRva2VuXG4gICAqICAgcmV0dXJuIHsgc3RhdHVzOiAnZHVwbGljYXRlJywgcnVuSWQ6IGNvbmZsaWN0LnJ1bklkIH07XG4gICAqIH1cbiAgICogLy8gdGhpcyBIb29rIHJlZ2lzdGVyZWQgd2l0aG91dCB3YWl0aW5nIGZvciBwYXlsb2FkIGRhdGFcbiAgICogYGBgXG4gICAqL1xuICBnZXRDb25mbGljdCgpOiBQcm9taXNlPFJ1bjx1bmtub3duPiB8IG51bGw+O1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgaG9vaywgcmVsZWFzaW5nIGl0cyB0b2tlbiBmb3IgcmV1c2UgYnkgb3RoZXIgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBBZnRlciBjYWxsaW5nIGBkaXNwb3NlKClgLCB0aGUgaG9vayB3aWxsIG5vIGxvbmdlciByZWNlaXZlIGFueSBldmVudHMuXG4gICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZXhwbGljaXRseSByZWxlYXNlIGEgaG9vayB0b2tlbiBiZWZvcmVcbiAgICogdGhlIHdvcmtmbG93IGNvbXBsZXRlcywgYWxsb3dpbmcgYW5vdGhlciB3b3JrZmxvdyB0byByZWdpc3RlciBhIGhvb2tcbiAgICogd2l0aCB0aGUgc2FtZSB0b2tlbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogY29uc3QgaG9vayA9IGNyZWF0ZUhvb2s8eyBtZXNzYWdlOiBzdHJpbmcgfT4oeyB0b2tlbjogJ215LXRva2VuJyB9KTtcbiAgICpcbiAgICogZm9yIGF3YWl0IChjb25zdCBwYXlsb2FkIG9mIGhvb2spIHtcbiAgICogICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnZG9uZScpIHtcbiAgICogICAgIGhvb2suZGlzcG9zZSgpOyAvLyBSZWxlYXNlIHRoZSB0b2tlbiBlYXJseVxuICAgKiAgICAgYnJlYWs7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIHRoZSBUQzM5IEV4cGxpY2l0IFJlc291cmNlIE1hbmFnZW1lbnQgcHJvcG9zYWwuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNpbmcgdGhlIGB1c2luZ2Aga2V5d29yZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICoge1xuICAgKiAgIHVzaW5nIGhvb2sgPSBjcmVhdGVIb29rPHsgbWVzc2FnZTogc3RyaW5nIH0+KHsgdG9rZW46ICdteS10b2tlbicgfSk7XG4gICAqICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGhvb2s7XG4gICAqICAgLy8gaG9vayBpcyBhdXRvbWF0aWNhbGx5IGRpc3Bvc2VkIHdoZW4gdGhlIGJsb2NrIGV4aXRzXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSB3ZWJob29rIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIHRoZSB3b3JrZmxvdyBydW5cbiAqIHVwb24gcmVjZWl2aW5nIGFuIEhUVFAgcmVxdWVzdCB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAqXG4gKiBAc2VlIHtAbGluayBjcmVhdGVXZWJob29rfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2s8VCBleHRlbmRzIFJlcXVlc3Q+IGV4dGVuZHMgSG9vazxUPiB7XG4gIC8qKlxuICAgKiBUaGUgVVJMIHRoYXQgZXh0ZXJuYWwgc3lzdGVtcyBjYW4gY2FsbCB0byBzZW5kIGRhdGEgdG8gdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgdXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va09wdGlvbnMge1xuICAvKipcbiAgICogVW5pcXVlIHRva2VuIHRoYXQgaXMgdXNlZCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgaG9vay5cbiAgICpcbiAgICogV2hlbiBzcGVjaWZ5aW5nIGFuIGV4cGxpY2l0IHRva2VuLCB0aGUgdG9rZW4gc2hvdWxkIGJlIGNvbnN0cnVjdGVkXG4gICAqIHdpdGggaW5mb3JtYXRpb24gdGhhdCB0aGUgZGlzcGF0Y2hpbmcgc2lkZSBjYW4gcmVsaWFibHkgcmVjb25zdHJ1Y3RcbiAgICogdGhlIHRva2VuIHdpdGggdGhlIGluZm9ybWF0aW9uIGl0IGhhcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIERldGVybWluaXN0aWMgdG9rZW5zIGFyZSBpbnRlbmRlZCBmb3IgdXNlIHdpdGggYGNyZWF0ZUhvb2soKWAgYW5kXG4gICAqIHNlcnZlci1zaWRlIGByZXN1bWVIb29rKClgIG9ubHkuIEZvciB3ZWJob29rcyAoYGNyZWF0ZVdlYmhvb2soKWApLCBhblxuICAgKiBleHBsaWNpdCB0b2tlbiBpcyBub3QgYWNjZXB0ZWQg4oCUIG9uZSBpcyBhbHdheXMgZ2VuZXJhdGVkIGZvciB5b3UuXG4gICAqXG4gICAqIEEgZ2VuZXJhdGVkIHRva2VuIGlzIG5vdCB0cml2aWFsIHRvIGd1ZXNzIGJ1dCBpcyBub3QgYSBzZWN1cml0eVxuICAgKiBjb250cmFjdCwgc28gYXV0aGVudGljYXRlIHdlYmhvb2sgcmVxdWVzdHMgdGhlbXNlbHZlcyByYXRoZXIgdGhhblxuICAgKiByZWx5aW5nIG9uIFVSTCBzZWNyZWN5OlxuICAgKiBodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9mb3VuZGF0aW9ucy9ob29rcyN0b2tlbi1kZXNpZ25cbiAgICpcbiAgICogSWYgcHJvdmlkZWQsIHRoZSB0b2tlbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZzsgcGFzc2luZyBhbiBlbXB0eVxuICAgKiBzdHJpbmcgdGhyb3dzLiBJZiBub3QgcHJvdmlkZWQgKG9yIGB1bmRlZmluZWRgKSwgYSB0b2tlbiBpcyBnZW5lcmF0ZWRcbiAgICogZm9yIHlvdS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBgdHNcbiAgICogLy8gRXhwbGljaXQgdG9rZW4gZm9yIGEgU2xhY2sgYm90IChvbmUgd29ya2Zsb3cgcnVuIHBlciBjaGFubmVsKVxuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazxTbGFja01lc3NhZ2U+KHtcbiAgICogICB0b2tlbjogYHNsYWNrX3dlYmhvb2s6JHtjaGFubmVsSWR9YCxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICoqRXhwZXJpbWVudGFsLioqIEtlZXBzIHRoaXMgSG9vaydzIHRva2VuIHVuYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0aGVcbiAgICogY29uZmlndXJlZCB0aW1lIGFmdGVyIGBjcmVhdGVIb29rKClgIHJ1bnMuXG4gICAqXG4gICAqIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzIGBzbGVlcCgpYDogYSBkdXJhdGlvbiBzdHJpbmcsIGEgbnVtYmVyIG9mXG4gICAqIG1pbGxpc2Vjb25kcywgb3IgYW4gYWJzb2x1dGUgYERhdGVgLiBSZWxhdGl2ZSBkdXJhdGlvbnMgc3RhcnQgd2hlblxuICAgKiBgY3JlYXRlSG9vaygpYCBydW5zLCBub3Qgd2hlbiB0aGUgd29ya2Zsb3cgZW5kcy5cbiAgICpcbiAgICogVGhlIEhvb2sgcmVtYWlucyBhY3RpdmUgdW50aWwgdGhlIHdvcmtmbG93IGVuZHMsIGV2ZW4gaWYgdGhlIGNvbmZpZ3VyZWRcbiAgICogdGltZSBwYXNzZXMgZmlyc3QuIEFub3RoZXIgSG9vayBjYW4gdXNlIHRoZSB0b2tlbiBvbmx5IGFmdGVyIGJvdGggdGhlIHJ1blxuICAgKiBoYXMgZW5kZWQgYW5kIHRoZSBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC5cbiAgICogQWZ0ZXIgdGhlIHJ1biBlbmRzLCB0aGUgSG9vayBjYW4gc3RpbGwgYmUgZm91bmQgd2l0aCBgZ2V0SG9va0J5VG9rZW4oKWBcbiAgICogdW50aWwgcmV0ZW50aW9uIGVuZHMsIGJ1dCBpdCBjYW5ub3QgYmUgcmVzdW1lZC5cbiAgICpcbiAgICogQ2FsbGluZyBgZGlzcG9zZSgpYCAoaW5jbHVkaW5nIHRocm91Z2ggYHVzaW5nYCkgcmVsZWFzZXMgdGhlIHRva2VuXG4gICAqIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBgY3JlYXRlSG9vaygpYCB0aHJvd3MgaWYgdGhlIGNvbmZpZ3VyZWQgV29ybGQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzXG4gICAqIGV4cGVyaW1lbnRhbCBvcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IGhvb2sgPSBjcmVhdGVIb29rKHtcbiAgICogICB0b2tlbjogYG9yZGVyOiR7b3JkZXJJZH1gLFxuICAgKiAgIGV4cGVyaW1lbnRhbF9taW5SZXRlbnRpb246ICczMGQnLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBleHBlcmltZW50YWxfbWluUmV0ZW50aW9uPzogU3RyaW5nVmFsdWUgfCBEYXRlIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHVzZXItZGVmaW5lZCBkYXRhIHRvIGluY2x1ZGUgd2l0aCB0aGUgaG9vayBwYXlsb2FkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG5hbWU6IHN0cmluZyB9Pih7XG4gICAqICAgbWV0YWRhdGE6IHtcbiAgICogICAgIHR5cGU6IFwiY2F0XCIsXG4gICAqICAgICBjb2xvcjogXCJvcmFuZ2VcIixcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBtZXRhZGF0YT86IFNlcmlhbGl6YWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGhvb2sgY2FuIGJlIHJlc3VtZWQgdmlhIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAsIHRoZSBob29rIGNhbiBiZSB0cmlnZ2VyZWQgYnkgc2VuZGluZyBhbiBIVFRQIHJlcXVlc3QgdG8gdGhlXG4gICAqIHB1YmxpYyB3b3JrZmxvdyB3ZWJob29rIFVSTC4gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aGVuIHVzaW5nXG4gICAqIGBjcmVhdGVXZWJob29rKClgLlxuICAgKlxuICAgKiBXaGVuIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSwgdGhlIGhvb2sgY2FuIG9ubHkgYmUgcmVzdW1lZCBzZXJ2ZXItc2lkZVxuICAgKiB2aWEgYHJlc3VtZUhvb2soKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpc1dlYmhvb2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tPcHRpb25zXG4gIGV4dGVuZHMgT21pdDxcbiAgICBIb29rT3B0aW9ucyxcbiAgICAndG9rZW4nIHwgJ2lzV2ViaG9vaycgfCAnZXhwZXJpbWVudGFsX21pblJldGVudGlvbidcbiAgPiB7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYSBgUmVzcG9uc2VgIG9iamVjdCwgdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAqIHJlc3BvbmQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiBzZXQgdG8gYFwibWFudWFsXCJgLCBlYWNoIGluZGl2aWR1YWwgcmVxdWVzdCB3aWxsIG5lZWQgdG9cbiAgICogYmUgcmVzcG9uZGVkIHRvIG1hbnVhbGx5IGZyb20gd2l0aGluIHRoZSB3b3JrZmxvdyBieSBjYWxsaW5nIHRoZVxuICAgKiBgcmVzcG9uZFdpdGgoKWAgbWV0aG9kLlxuICAgKlxuICAgKiBJZiBub3Qgc2V0IHRoZW4gdGhlIHdlYmhvb2sgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgd2l0aFxuICAgKiBhIGAyMDIgQWNjZXB0ZWRgIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVzcG9uZFdpdGg/OiBSZXNwb25zZSB8ICdtYW51YWwnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgSG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93IHJ1biB3aXRoIGEgcGF5bG9hZC5cbiAqXG4gKiBIb29rcyBhbGxvdyBleHRlcm5hbCBzeXN0ZW1zIHRvIHNlbmQgYXJiaXRyYXJ5IHNlcmlhbGl6YWJsZSBkYXRhIGludG8gYSB3b3JrZmxvdy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGhvb2suXG4gKiBAcmV0dXJucyBBIGBIb29rYCB0aGF0IGNhbiBiZSBhd2FpdGVkIHRvIHJlY2VpdmUgb25lIG9yIG1vcmUgcGF5bG9hZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93V2l0aEhvb2soKSB7XG4gKiAgIFwidXNlIHdvcmtmbG93XCI7XG4gKlxuICogICBjb25zdCBob29rID0gY3JlYXRlSG9vazx7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICogICBjb25zb2xlLmxvZygnSG9vayB0b2tlbjonLCBob29rLnRva2VuKTtcbiAqXG4gKiAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBob29rO1xuICogICBjb25zb2xlLmxvZygnUmVjZWl2ZWQ6JywgcGF5bG9hZC5tZXNzYWdlKTtcbiAqIH1cbiAqIGBgYFxuICovXG4vLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dChcbiAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9jcmVhdGUtaG9vaycsXG4gICAgY3JlYXRlSG9va1xuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgV2ViaG9va30gdGhhdCBjYW4gYmUgdXNlZCB0byBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHdvcmtmbG93XG4gKiBydW4gdXBvbiByZWNlaXZpbmcgYW4gSFRUUCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICpcbiAqIFdlYmhvb2tzIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0IHwgUmVxdWVzdH0gb2JqZWN0XG4gKiB0aGF0IGNhbiBiZSBpbnRlcmFjdGVkIHdpdGggaW4gd29ya2Zsb3cgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhcbiAgb3B0aW9uczogV2ViaG9va09wdGlvbnMgJiB7IHJlc3BvbmRXaXRoOiAnbWFudWFsJyB9XG4pOiBXZWJob29rPFJlcXVlc3RXaXRoUmVzcG9uc2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2sob3B0aW9ucz86IFdlYmhvb2tPcHRpb25zKTogV2ViaG9vazxSZXF1ZXN0PjtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGBvcHRpb25zYCBpcyBoZXJlIGZvciB0eXBlcy9kb2NzXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0KFxuICAgICdjcmVhdGVXZWJob29rKCknLFxuICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS13ZWJob29rJyxcbiAgICBjcmVhdGVXZWJob29rXG4gICk7XG59XG4iXX0=
@@ -45,6 +45,16 @@ export interface EventsConsumerOptions {
45
45
  * downstream subscribe() calls have a chance to cancel the check first.
46
46
  */
47
47
  onUnconsumedEvent: (event: Event) => void;
48
+ /**
49
+ * Callback invoked when an event is skipped because it repeats an event
50
+ * class the walk already consumed for the same entity. `firstEventType` is
51
+ * the type that recorded the class, which is the one the workflow observed.
52
+ * Diagnostics only: skipping is a normal outcome, not an error — though a
53
+ * `firstEventType` differing from `event.eventType` says the two writers
54
+ * decided the entity's outcome differently, which is worth more than an
55
+ * info log.
56
+ */
57
+ onDuplicateEvent?: (event: Event, firstEventType: Event['eventType']) => void;
48
58
  /**
49
59
  * Returns the current promise queue. The unconsumed event check is chained
50
60
  * onto this queue so it only fires after all pending async work (e.g.,
@@ -87,8 +97,17 @@ export declare class EventsConsumer {
87
97
  * rather than parked for a consumer that cannot exist.
88
98
  */
89
99
  private readonly resolved;
100
+ /**
101
+ * `<class>:<correlationId>` for every event class the walk has already
102
+ * consumed, mapped to the event type that recorded it. The type is kept so a
103
+ * repeat that decided the same class *differently* (a `step_failed` behind a
104
+ * `step_completed`) can be reported as more than a re-commit. See
105
+ * {@link EventsConsumer.firstEventTypeOfClass}.
106
+ */
107
+ private readonly seenEventClasses;
90
108
  private onConsumedEvent?;
91
109
  private onUnconsumedEvent;
110
+ private onDuplicateEvent?;
92
111
  private getPromiseQueue;
93
112
  private isDeliveryIdle;
94
113
  private pendingUnconsumedCheck;
@@ -153,8 +172,86 @@ export declare class EventsConsumer {
153
172
  * replay diverged.
154
173
  */
155
174
  private park;
175
+ /**
176
+ * The key `event`'s class is tracked under, or `undefined` for the event
177
+ * types that belong to no class (`hook_received`, `hook_conflict`,
178
+ * `attr_set`, `run_created`) and are therefore never skipped.
179
+ *
180
+ * Run events carry no correlation id. They are classes of the run itself, so
181
+ * they all key off the same bucket.
182
+ */
183
+ private eventClassKey;
184
+ /**
185
+ * Remembers that `event`'s class is now decided for its entity, if the type
186
+ * belongs to a class. First writer wins: the recorded type is the one the
187
+ * workflow observed, and a later repeat is measured against it.
188
+ */
189
+ private recordEventClass;
190
+ /**
191
+ * The type that already decided `event`'s class for the same entity, or
192
+ * `undefined` when nothing has: a second `step_created` for one step, a
193
+ * second terminal outcome, a second `step_started` after the step's result is
194
+ * already in the log.
195
+ *
196
+ * Such an event is committed but inert. Concurrent replays write into one
197
+ * log without a currency guard, so a replay working from a prefix that
198
+ * predates another replay's write can commit its own copy of work the log
199
+ * already records. That copy cannot change what the workflow observed: the
200
+ * outcome was decided by the first event of the class and every later replay
201
+ * reads that same event at the same log position, so ignoring the straggler
202
+ * is deterministic across replays.
203
+ *
204
+ * Classes are tracked separately, so passing one does not suppress another.
205
+ * A step whose result is in the log still reaches its `step_created` and
206
+ * `step_started` consumers if it has yet to see those classes.
207
+ *
208
+ * Consulted only after every registered callback has declined the event, so
209
+ * it can never take an event a consumer wanted. A retry's `step_started` is
210
+ * claimed by the step's live consumer and counts as an attempt exactly as
211
+ * before, and a second `step_created` reaching a step that has not finished
212
+ * is likewise consumed rather than skipped; only the copies nobody claims are
213
+ * skipped.
214
+ *
215
+ * Unlike the divergence report, this does *not* wait out the deferred window
216
+ * first, and it does not need to. The window buys time for a consumer that
217
+ * has yet to register, and no such consumer can want this event: the class
218
+ * was recorded by a consumption in this same replay, which means the entity's
219
+ * consumer was registered and took an event of this class, and correlation
220
+ * ids are minted from a monotonic ULID per body position, so nothing later in
221
+ * the body registers a second consumer under this id. Waiting would cost
222
+ * `getDeferredCheckDelayMs()` per straggler per replay for information that
223
+ * cannot arrive — 0.75% of production runs carry at least one straggler, and
224
+ * the p99 among those carries 155.
225
+ *
226
+ * The invariant to preserve if hook identity ever becomes caller-supplied
227
+ * (an idempotency key rather than a minted id): two `createHook` calls in one
228
+ * body could then share a correlation id, and the second consumer's
229
+ * `hook_created` would be a repeat of a class this replay already recorded.
230
+ * That would make skipping wrong for `hook_created`, and is the reason the
231
+ * class map lives next to the event types rather than being inferred.
232
+ */
233
+ private firstEventTypeOfClass;
234
+ /** Steps the walk over a repeat of an already-consumed class. */
235
+ private skipDuplicateEvent;
156
236
  private handleEndOfLog;
157
237
  private scheduleUnconsumedCheck;
238
+ /**
239
+ * Decide what a still-unconsumed event is, now that the promise queue has
240
+ * drained and the delivery gate says the VM is not mid-reaction.
241
+ *
242
+ * `mayPark` is false only for the end-of-log recheck of an event {@link park}
243
+ * already holds. Nothing in the first branch applies to one of those: it is
244
+ * not the event at the cursor, so the identity guard is not meaningful, and
245
+ * it is parked already.
246
+ *
247
+ * A duplicate class never arrives here. {@link consume} steps over one in the
248
+ * pass that offered it, before this check is ever scheduled, and a class
249
+ * recorded while the check was in flight can only have been recorded by a
250
+ * consumption inside {@link consume}, whose next pass re-offers this event
251
+ * and steps over it there — leaving the identity guard above to drop the
252
+ * in-flight check.
253
+ */
254
+ private resolveUnconsumedEvent;
158
255
  /**
159
256
  * Run `fn` once no data delivery is in flight, polling the way
160
257
  * `scheduleWhenIdle` does: let the promise queue drain, re-check a timer
@@ -1 +1 @@
1
- {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,iBAAiB,CAAC;AAGxD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAgG9C,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,QAAQ,IAAA;CACT;AAED,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,mBAAmB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,qBAAqB,EAAE,CAAM;IACjD;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA8C;IAC9E,OAAO,CAAC,sBAAsB,CAAK;gBAEvB,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB;IAY3D;;;;;OAKG;IACH,IAAI,aAAa,IAAI,KAAK,GAAG,SAAS,CAErC;IAED;;;;;;;;;;OAUG;IACH,IAAI,aAAa,IACb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;KAAE,GACjE,SAAS,CAUZ;IAED,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAK7B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,qBAAqB;IAgBnC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,OAAO,CA4Cb;IAEF;;;;OAIG;IACH,OAAO,CAAC,KAAK;IAmCb;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,uBAAuB;IAqD/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACH,OAAO,CAAC,gBAAgB;CA2BzB"}
1
+ {"version":3,"file":"events-consumer.d.ts","sourceRoot":"","sources":["../src/events-consumer.ts"],"names":[],"mappings":"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"}