velocious 1.0.665 → 1.0.667

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 (108) hide show
  1. package/README.md +14 -5
  2. package/build/background-jobs/adapter-client.js +22 -0
  3. package/build/background-jobs/adapter.js +15 -0
  4. package/build/background-jobs/client.js +206 -14
  5. package/build/background-jobs/enqueue-acknowledgement-timeout-error.js +50 -0
  6. package/build/background-jobs/job-semantics.js +30 -0
  7. package/build/background-jobs/job.js +26 -1
  8. package/build/background-jobs/local-adapter.js +36 -8
  9. package/build/background-jobs/local-store.js +410 -39
  10. package/build/background-jobs/main.js +69 -2
  11. package/build/background-jobs/platform-job.js +26 -1
  12. package/build/background-jobs/runtime.js +58 -0
  13. package/build/background-jobs/store.js +374 -6
  14. package/build/background-jobs/types.js +27 -2
  15. package/build/background-jobs/web/controller.js +1 -0
  16. package/build/configuration.js +7 -5
  17. package/build/database/drivers/mssql/column.js +2 -2
  18. package/build/database/drivers/mssql/table.js +19 -5
  19. package/build/database/pool/async-tracked-multi-connection.js +2 -1
  20. package/build/database/query/alter-table-base.js +8 -1
  21. package/build/database/record/attachments/store.js +2 -2
  22. package/build/frontend-model-controller.js +22 -2
  23. package/build/http-server/websocket-events-host.js +3 -1
  24. package/build/src/background-jobs/adapter-client.d.ts +17 -0
  25. package/build/src/background-jobs/adapter-client.d.ts.map +1 -1
  26. package/build/src/background-jobs/adapter-client.js +19 -1
  27. package/build/src/background-jobs/adapter.d.ts +15 -0
  28. package/build/src/background-jobs/adapter.d.ts.map +1 -1
  29. package/build/src/background-jobs/adapter.js +14 -1
  30. package/build/src/background-jobs/client.d.ts +17 -0
  31. package/build/src/background-jobs/client.d.ts.map +1 -1
  32. package/build/src/background-jobs/client.js +186 -15
  33. package/build/src/background-jobs/enqueue-acknowledgement-timeout-error.d.ts +81 -0
  34. package/build/src/background-jobs/enqueue-acknowledgement-timeout-error.d.ts.map +1 -0
  35. package/build/src/background-jobs/enqueue-acknowledgement-timeout-error.js +47 -0
  36. package/build/src/background-jobs/job-semantics.d.ts +18 -0
  37. package/build/src/background-jobs/job-semantics.d.ts.map +1 -1
  38. package/build/src/background-jobs/job-semantics.js +28 -1
  39. package/build/src/background-jobs/job.d.ts +15 -0
  40. package/build/src/background-jobs/job.d.ts.map +1 -1
  41. package/build/src/background-jobs/job.js +21 -2
  42. package/build/src/background-jobs/local-adapter.d.ts +23 -8
  43. package/build/src/background-jobs/local-adapter.d.ts.map +1 -1
  44. package/build/src/background-jobs/local-adapter.js +35 -9
  45. package/build/src/background-jobs/local-store.d.ts +120 -5
  46. package/build/src/background-jobs/local-store.d.ts.map +1 -1
  47. package/build/src/background-jobs/local-store.js +366 -40
  48. package/build/src/background-jobs/main.d.ts +24 -2
  49. package/build/src/background-jobs/main.d.ts.map +1 -1
  50. package/build/src/background-jobs/main.js +68 -3
  51. package/build/src/background-jobs/platform-job.d.ts +15 -0
  52. package/build/src/background-jobs/platform-job.d.ts.map +1 -1
  53. package/build/src/background-jobs/platform-job.js +19 -2
  54. package/build/src/background-jobs/runtime.d.ts +39 -0
  55. package/build/src/background-jobs/runtime.d.ts.map +1 -1
  56. package/build/src/background-jobs/runtime.js +49 -1
  57. package/build/src/background-jobs/store.d.ts +100 -1
  58. package/build/src/background-jobs/store.d.ts.map +1 -1
  59. package/build/src/background-jobs/store.js +334 -8
  60. package/build/src/background-jobs/types.d.ts +97 -4
  61. package/build/src/background-jobs/types.d.ts.map +1 -1
  62. package/build/src/background-jobs/types.js +28 -3
  63. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  64. package/build/src/background-jobs/web/controller.js +2 -1
  65. package/build/src/configuration.d.ts.map +1 -1
  66. package/build/src/configuration.js +7 -5
  67. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  68. package/build/src/database/drivers/mssql/column.js +2 -2
  69. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  70. package/build/src/database/drivers/mssql/table.js +19 -5
  71. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  72. package/build/src/database/pool/async-tracked-multi-connection.js +3 -2
  73. package/build/src/database/query/alter-table-base.d.ts.map +1 -1
  74. package/build/src/database/query/alter-table-base.js +9 -2
  75. package/build/src/database/record/attachments/store.js +3 -3
  76. package/build/src/frontend-model-controller.d.ts.map +1 -1
  77. package/build/src/frontend-model-controller.js +18 -3
  78. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  79. package/build/src/http-server/websocket-events-host.js +4 -2
  80. package/build/src/testing/test-files-finder.d.ts +4 -1
  81. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  82. package/build/src/testing/test-files-finder.js +8 -3
  83. package/build/testing/test-files-finder.js +6 -1
  84. package/package.json +1 -1
  85. package/scripts/test-browser.js +1 -0
  86. package/src/background-jobs/adapter-client.js +22 -0
  87. package/src/background-jobs/adapter.js +15 -0
  88. package/src/background-jobs/client.js +206 -14
  89. package/src/background-jobs/enqueue-acknowledgement-timeout-error.js +50 -0
  90. package/src/background-jobs/job-semantics.js +30 -0
  91. package/src/background-jobs/job.js +26 -1
  92. package/src/background-jobs/local-adapter.js +36 -8
  93. package/src/background-jobs/local-store.js +410 -39
  94. package/src/background-jobs/main.js +69 -2
  95. package/src/background-jobs/platform-job.js +26 -1
  96. package/src/background-jobs/runtime.js +58 -0
  97. package/src/background-jobs/store.js +374 -6
  98. package/src/background-jobs/types.js +27 -2
  99. package/src/background-jobs/web/controller.js +1 -0
  100. package/src/configuration.js +7 -5
  101. package/src/database/drivers/mssql/column.js +2 -2
  102. package/src/database/drivers/mssql/table.js +19 -5
  103. package/src/database/pool/async-tracked-multi-connection.js +2 -1
  104. package/src/database/query/alter-table-base.js +8 -1
  105. package/src/database/record/attachments/store.js +2 -2
  106. package/src/frontend-model-controller.js +22 -2
  107. package/src/http-server/websocket-events-host.js +3 -1
  108. package/src/testing/test-files-finder.js +6 -1
@@ -6,6 +6,33 @@ export const DEFAULT_BACKGROUND_JOB_QUEUE = "default";
6
6
  export const QUEUE_CONCURRENCY_KEY_PREFIX = "queue:";
7
7
  /** @type {import("./types.js").BackgroundJobExecutionMode[]} */
8
8
  export const BACKGROUND_JOB_EXECUTION_MODES = ["inline", "forked", "pooled", "spawned"];
9
+ /** @type {import("./types.js").BackgroundJobActiveStatus[]} */
10
+ export const BACKGROUND_JOB_ACTIVE_STATUSES = ["queued", "handed_off"];
11
+ /** @type {import("./types.js").BackgroundJobTerminalStatus[]} */
12
+ export const BACKGROUND_JOB_TERMINAL_STATUSES = ["cancelled", "completed", "failed", "orphaned"];
13
+ /** @type {import("./types.js").BackgroundJobStatus[]} */
14
+ export const BACKGROUND_JOB_STATUSES = [...BACKGROUND_JOB_ACTIVE_STATUSES, ...BACKGROUND_JOB_TERMINAL_STATUSES];
15
+ /**
16
+ * Normalizes persisted or transported job status vocabulary.
17
+ * @param {string} value - Candidate status.
18
+ * @returns {import("./types.js").BackgroundJobStatus} - Known status.
19
+ */
20
+ export function normalizeBackgroundJobStatus(value) {
21
+ const status = BACKGROUND_JOB_STATUSES.find((candidate) => candidate === value);
22
+ if (status)
23
+ return status;
24
+ throw new Error(`Unknown background job status: ${value}`);
25
+ }
26
+ /**
27
+ * Validates a stable logical schedule key at every persistence boundary.
28
+ * @param {string} scheduleKey - Stable schedule key.
29
+ * @returns {string} - Validated key.
30
+ */
31
+ export function normalizeBackgroundJobScheduleKey(scheduleKey) {
32
+ if (typeof scheduleKey === "string" && scheduleKey.length > 0 && scheduleKey.length <= 255)
33
+ return scheduleKey;
34
+ throw VelociousError.safe("background job scheduleKey must be a non-empty string of at most 255 characters");
35
+ }
9
36
  /**
10
37
  * Normalizes a job queue.
11
38
  * @param {import("./types.js").BackgroundJobOptions} [options] - Job options.
@@ -122,4 +149,4 @@ export function normalizeBackgroundJobConcurrency({ options = {}, queue, queues
122
149
  queueDerived: true
123
150
  };
124
151
  }
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXNlbWFudGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvam9iLXNlbWFudGljcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsUUFBUSxDQUFBO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQTtBQUNwRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxTQUFTLENBQUE7QUFDckQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFBO0FBQ3BELGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsT0FBTztJQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFBO0lBRTVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBRTdFLE9BQU8sNEJBQTRCLENBQUE7QUFDckMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixHQUFHLHFDQUFxQyxFQUFFLHVCQUF1QixHQUFHLDhCQUE4QjtJQUN0TCxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLG1JQUFtSSxDQUFDLENBQUE7SUFDdEosQ0FBQztJQUVELE1BQU0sc0JBQXNCLEdBQUcsT0FB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SSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sSUFBSSxLQUFLLENBQUMsaUpBQWlKLENBQUMsQ0FBQTtRQUNwSyxDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSw0QkFBNEIsZ0VBQWdFLENBQUMsQ0FBQTtRQUNsTCxDQUFDO1FBRUQsT0FBTyxFQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUE7SUFDaEYsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLENBQUE7SUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUVyRSxPQUFPO1FBQ0wsY0FBYyxFQUFFLEdBQUcsNEJBQTRCLEdBQUcsS0FBSyxFQUFFO1FBQ3pELGNBQWMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBWZWxvY2lvdXNFcnJvciBmcm9tIFwiLi4vdmVsb2Npb3VzLWVycm9yLmpzXCJcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9KT0JfRVhFQ1VUSU9OX01PREUgPSBcInBvb2xlZFwiXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0pPQl9NQVhfUkVUUklFUyA9IDEwXG5leHBvcnQgY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0pPQl9RVUVVRSA9IFwiZGVmYXVsdFwiXG5leHBvcnQgY29uc3QgUVVFVUVfQ09OQ1VSUkVOQ1lfS0VZX1BSRUZJWCA9IFwicXVldWU6XCJcbi8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iRXhlY3V0aW9uTW9kZVtdfSAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfSk9CX0VYRUNVVElPTl9NT0RFUyA9IFtcImlubGluZVwiLCBcImZvcmtlZFwiLCBcInBvb2xlZFwiLCBcInNwYXduZWRcIl1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgam9iIHF1ZXVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfSBbb3B0aW9uc10gLSBKb2Igb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUXVldWUgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhY2tncm91bmRKb2JRdWV1ZShvcHRpb25zKSB7XG4gIGNvbnN0IHF1ZXVlID0gb3B0aW9ucz8ucXVldWVcblxuICBpZiAodHlwZW9mIHF1ZXVlID09PSBcInN0cmluZ1wiICYmIHF1ZXVlLnRyaW0oKS5sZW5ndGggPiAwKSByZXR1cm4gcXVldWUudHJpbSgpXG5cbiAgcmV0dXJuIERFRkFVTFRfQkFDS0dST1VORF9KT0JfUVVFVUVcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGFuIGV4cGxpY2l0IGV4ZWN1dGlvbiBtb2RlIHdoaWxlIHJldGFpbmluZyB0aGUgTm9kZSBkZWZhdWx0LlxuICogQHBhcmFtIHtPbWl0PGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnMsIFwiZXhlY3V0aW9uTW9kZVwiPiAmIHtleGVjdXRpb25Nb2RlPzogc3RyaW5nfX0gb3B0aW9ucyAtIEpvYiBvcHRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JFeGVjdXRpb25Nb2RlfSBbZGVmYXVsdEV4ZWN1dGlvbk1vZGVdIC0gRGVmYXVsdCBtb2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JFeGVjdXRpb25Nb2RlW119IFtzdXBwb3J0ZWRFeGVjdXRpb25Nb2Rlc10gLSBNb2RlcyBhY2NlcHRlZCBieSB0aGUgY2FsbGVyLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkV4ZWN1dGlvbk1vZGV9IC0gRXhlY3V0aW9uIG1vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVCYWNrZ3JvdW5kSm9iRXhlY3V0aW9uTW9kZShvcHRpb25zID0ge30sIGRlZmF1bHRFeGVjdXRpb25Nb2RlID0gREVGQVVMVF9CQUNLR1JPVU5EX0pPQl9FWEVDVVRJT05fTU9ERSwgc3VwcG9ydGVkRXhlY3V0aW9uTW9kZXMgPSBCQUNLR1JPVU5EX0pPQl9FWEVDVVRJT05fTU9ERVMpIHtcbiAgaWYgKFwiZm9ya2VkXCIgaW4gb3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBiYWNrZ3JvdW5kIGpvYiBgZm9ya2VkYCBvcHRpb24gd2FzIHJlbW92ZWQ7IHBhc3MgYGV4ZWN1dGlvbk1vZGVgIChcXFwiaW5saW5lXFxcIiwgXFxcImZvcmtlZFxcXCIsIFxcXCJwb29sZWRcXFwiLCBvciBcXFwic3Bhd25lZFxcXCIpIGluc3RlYWRcIilcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZEV4ZWN1dGlvbk1vZGUgPSBvcHRpb25zLmV4ZWN1dGlvbk1vZGUgfHwgZGVmYXVsdEV4ZWN1dGlvbk1vZGVcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JFeGVjdXRpb25Nb2RlIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZXhlY3V0aW9uTW9kZVxuXG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIEJBQ0tHUk9VTkRfSk9CX0VYRUNVVElPTl9NT0RFUykge1xuICAgIGlmIChjYW5kaWRhdGUgPT09IHJlcXVlc3RlZEV4ZWN1dGlvbk1vZGUpIGV4ZWN1dGlvbk1vZGUgPSBjYW5kaWRhdGVcbiAgfVxuXG4gIGlmICghZXhlY3V0aW9uTW9kZSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhY2tncm91bmQgam9iIGV4ZWN1dGlvbk1vZGU6ICR7cmVxdWVzdGVkRXhlY3V0aW9uTW9kZX1gKVxuXG4gIGlmICghc3VwcG9ydGVkRXhlY3V0aW9uTW9kZXMuaW5jbHVkZXMoZXhlY3V0aW9uTW9kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJhY2tncm91bmQgam9iIGV4ZWN1dGlvbk1vZGUgXCIke2V4ZWN1dGlvbk1vZGV9XCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbG9jYWwgYmFja2dyb3VuZC1qb2JzIGFkYXB0ZXJgKVxuICB9XG5cbiAgcmV0dXJuIGV4ZWN1dGlvbk1vZGVcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW5kIG5vcm1hbGl6ZXMgYSByZXRyeSBjYXAuXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFJldHJpZXMgLSBSZXF1ZXN0ZWQgcmV0cnkgY2FwLlxuICogQHJldHVybnMge251bWJlcn0gLSBSZXRyeSBjYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVCYWNrZ3JvdW5kSm9iTWF4UmV0cmllcyhtYXhSZXRyaWVzKSB7XG4gIGlmICh0eXBlb2YgbWF4UmV0cmllcyA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUobWF4UmV0cmllcykgJiYgbWF4UmV0cmllcyA+PSAwKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IobWF4UmV0cmllcylcbiAgfVxuXG4gIHJldHVybiBERUZBVUxUX0JBQ0tHUk9VTkRfSk9CX01BWF9SRVRSSUVTXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIGVucXVldWUgZWxpZ2liaWxpdHkgdGltZXN0YW1wLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IHNjaGVkdWxlZEF0TXMgLSBSZXF1ZXN0ZWQgdGltZXN0YW1wLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRTY2hlZHVsZWRBdE1zIC0gRGVmYXVsdCB0aW1lc3RhbXAuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIEVsaWdpYmlsaXR5IHRpbWVzdGFtcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhY2tncm91bmRKb2JTY2hlZHVsZWRBdE1zKHNjaGVkdWxlZEF0TXMsIGRlZmF1bHRTY2hlZHVsZWRBdE1zKSB7XG4gIGlmIChzY2hlZHVsZWRBdE1zID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0U2NoZWR1bGVkQXRNc1xuICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIoc2NoZWR1bGVkQXRNcykgJiYgc2NoZWR1bGVkQXRNcyA+PSAwKSByZXR1cm4gc2NoZWR1bGVkQXRNc1xuXG4gIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJiYWNrZ3JvdW5kIGpvYiBzY2hlZHVsZWRBdE1zIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyXCIpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgcmVzY2hlZHVsZSBkZWxheSBhbmQgcmVzb2x2ZXMgaXQgYXQgcGVyc2lzdGVuY2UgdGltZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheU1zIC0gUmVxdWVzdGVkIGRlbGF5LlxuICogQHBhcmFtIHtudW1iZXJ9IG5vd01zIC0gUGVyc2lzdGVuY2UgdGltZXN0YW1wLlxuICogQHJldHVybnMge251bWJlcn0gLSBOZXcgZWxpZ2liaWxpdHkgdGltZXN0YW1wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzY2hlZHVsZWRCYWNrZ3JvdW5kSm9iQXRNcyhkZWxheU1zLCBub3dNcykge1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGRlbGF5TXMpIHx8IGRlbGF5TXMgPCAwKSB7XG4gICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcImJhY2tncm91bmQgam9iIHJlc2NoZWR1bGUgZGVsYXlNcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlclwiKVxuICB9XG5cbiAgY29uc3Qgc2NoZWR1bGVkQXRNcyA9IG5vd01zICsgZGVsYXlNc1xuXG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoc2NoZWR1bGVkQXRNcykpIHtcbiAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiYmFja2dyb3VuZCBqb2IgcmVzY2hlZHVsZSBzY2hlZHVsZWRBdE1zIG11c3QgYmUgYSBzYWZlIGludGVnZXJcIilcbiAgfVxuXG4gIHJldHVybiBzY2hlZHVsZWRBdE1zXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2hhcmVkIGZhaWx1cmUgYmFja29mZi5cbiAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeUNvdW50IC0gT25lLWJhc2VkIGZhaWxlZCBhdHRlbXB0IGNvdW50LlxuICogQHJldHVybnMge251bWJlcn0gLSBCYWNrb2ZmIGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldHJ5RGVsYXlNcyhyZXRyeUNvdW50KSB7XG4gIGNvbnN0IHNjaGVkdWxlU2Vjb25kcyA9IFsxMCwgNjAsIDYwMCwgMzYwMF1cblxuICBpZiAocmV0cnlDb3VudCA8PSBzY2hlZHVsZVNlY29uZHMubGVuZ3RoKSByZXR1cm4gc2NoZWR1bGVTZWNvbmRzW3JldHJ5Q291bnQgLSAxXSAqIDEwMDBcblxuICByZXR1cm4gKHJldHJ5Q291bnQgLSAzKSAqIDYwICogNjAgKiAxMDAwXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZXhwbGljaXQgb3IgcXVldWUtZGVyaXZlZCBjb25jdXJyZW5jeS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVzb2x1dGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IGFyZ3Mub3B0aW9ucyAtIEpvYiBvcHRpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucXVldWUgLSBOb3JtYWxpemVkIHF1ZXVlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB7bWF4Q29uY3VycmVudD86IG51bWJlciwgcHJpb3JpdHk/OiBudW1iZXJ9Pn0gYXJncy5xdWV1ZXMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVzb2x2ZWRCYWNrZ3JvdW5kSm9iQ29uY3VycmVuY3kgfCBudWxsfSAtIENvbmN1cnJlbmN5IGNvbnRyYWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQmFja2dyb3VuZEpvYkNvbmN1cnJlbmN5KHtvcHRpb25zID0ge30sIHF1ZXVlLCBxdWV1ZXN9KSB7XG4gIGNvbnN0IGtleSA9IG9wdGlvbnMuY29uY3VycmVuY3lLZXlcbiAgY29uc3QgY2FwID0gb3B0aW9ucy5tYXhDb25jdXJyZW5jeVxuXG4gIGlmIChrZXkgIT09IHVuZGVmaW5lZCB8fCBjYXAgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcInN0cmluZ1wiIHx8IGtleS5sZW5ndGggPT09IDAgfHwgIU51bWJlci5pc0ludGVnZXIoY2FwKSB8fCBOdW1iZXIoY2FwKSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWNrZ3JvdW5kIGpvYiBjb25jdXJyZW5jeUtleSBhbmQgbWF4Q29uY3VycmVuY3kgbXVzdCBiZSBwYWlyZWQ7IGNvbmN1cnJlbmN5S2V5IG11c3QgYmUgbm9uLWVtcHR5IGFuZCBtYXhDb25jdXJyZW5jeSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclwiKVxuICAgIH1cbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoUVVFVUVfQ09OQ1VSUkVOQ1lfS0VZX1BSRUZJWCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmFja2dyb3VuZCBqb2IgY29uY3VycmVuY3lLZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCB0aGUgcmVzZXJ2ZWQgXCIke1FVRVVFX0NPTkNVUlJFTkNZX0tFWV9QUkVGSVh9XCIgcHJlZml4LCB3aGljaCBpcyByZXNlcnZlZCBmb3IgcXVldWUtZGVyaXZlZCBjb25jdXJyZW5jeSBjYXBzYClcbiAgICB9XG5cbiAgICByZXR1cm4ge2NvbmN1cnJlbmN5S2V5OiBrZXksIG1heENvbmN1cnJlbmN5OiBOdW1iZXIoY2FwKSwgcXVldWVEZXJpdmVkOiBmYWxzZX1cbiAgfVxuXG4gIGNvbnN0IHF1ZXVlQ2FwID0gcXVldWVzW3F1ZXVlXT8ubWF4Q29uY3VycmVudFxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihxdWV1ZUNhcCkgfHwgTnVtYmVyKHF1ZXVlQ2FwKSA8PSAwKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgY29uY3VycmVuY3lLZXk6IGAke1FVRVVFX0NPTkNVUlJFTkNZX0tFWV9QUkVGSVh9JHtxdWV1ZX1gLFxuICAgIG1heENvbmN1cnJlbmN5OiBOdW1iZXIocXVldWVDYXApLFxuICAgIHF1ZXVlRGVyaXZlZDogdHJ1ZVxuICB9XG59XG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXNlbWFudGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvam9iLXNlbWFudGljcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsUUFBUSxDQUFBO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQTtBQUNwRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxTQUFTLENBQUE7QUFDckQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFBO0FBQ3BELGdFQUFnRTtBQUNoRSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBQ3ZGLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQTtBQUN0RSxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUNoRyx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLDhCQUE4QixFQUFFLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQTtBQUUvRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEtBQUs7SUFDaEQsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUE7SUFFL0UsSUFBSSxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFFekIsTUFBTSxJQUFJ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LFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsNEJBQTRCLGdFQUFnRSxDQUFDLENBQUE7UUFDbEwsQ0FBQztRQUVELE9BQU8sRUFBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFBO0lBQ2hGLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFBO0lBRTdDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFckUsT0FBTztRQUNMLGNBQWMsRUFBRSxHQUFHLDRCQUE0QixHQUFHLEtBQUssRUFBRTtRQUN6RCxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgVmVsb2Npb3VzRXJyb3IgZnJvbSBcIi4uL3ZlbG9jaW91cy1lcnJvci5qc1wiXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfSk9CX0VYRUNVVElPTl9NT0RFID0gXCJwb29sZWRcIlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9KT0JfTUFYX1JFVFJJRVMgPSAxMFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9KT0JfUVVFVUUgPSBcImRlZmF1bHRcIlxuZXhwb3J0IGNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0tFWV9QUkVGSVggPSBcInF1ZXVlOlwiXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkV4ZWN1dGlvbk1vZGVbXX0gKi9cbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EX0pPQl9FWEVDVVRJT05fTU9ERVMgPSBbXCJpbmxpbmVcIiwgXCJmb3JrZWRcIiwgXCJwb29sZWRcIiwgXCJzcGF3bmVkXCJdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkFjdGl2ZVN0YXR1c1tdfSAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfSk9CX0FDVElWRV9TVEFUVVNFUyA9IFtcInF1ZXVlZFwiLCBcImhhbmRlZF9vZmZcIl1cbi8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iVGVybWluYWxTdGF0dXNbXX0gKi9cbmV4cG9ydCBjb25zdCBCQUNLR1JPVU5EX0pPQl9URVJNSU5BTF9TVEFUVVNFUyA9IFtcImNhbmNlbGxlZFwiLCBcImNvbXBsZXRlZFwiLCBcImZhaWxlZFwiLCBcIm9ycGhhbmVkXCJdXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlN0YXR1c1tdfSAqL1xuZXhwb3J0IGNvbnN0IEJBQ0tHUk9VTkRfSk9CX1NUQVRVU0VTID0gWy4uLkJBQ0tHUk9VTkRfSk9CX0FDVElWRV9TVEFUVVNFUywgLi4uQkFDS0dST1VORF9KT0JfVEVSTUlOQUxfU1RBVFVTRVNdXG5cbi8qKlxuICogTm9ybWFsaXplcyBwZXJzaXN0ZWQgb3IgdHJhbnNwb3J0ZWQgam9iIHN0YXR1cyB2b2NhYnVsYXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gQ2FuZGlkYXRlIHN0YXR1cy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JTdGF0dXN9IC0gS25vd24gc3RhdHVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQmFja2dyb3VuZEpvYlN0YXR1cyh2YWx1ZSkge1xuICBjb25zdCBzdGF0dXMgPSBCQUNLR1JPVU5EX0pPQl9TVEFUVVNFUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gdmFsdWUpXG5cbiAgaWYgKHN0YXR1cykgcmV0dXJuIHN0YXR1c1xuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBiYWNrZ3JvdW5kIGpvYiBzdGF0dXM6ICR7dmFsdWV9YClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzdGFibGUgbG9naWNhbCBzY2hlZHVsZSBrZXkgYXQgZXZlcnkgcGVyc2lzdGVuY2UgYm91bmRhcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NoZWR1bGVLZXkgLSBTdGFibGUgc2NoZWR1bGUga2V5LlxuICogQHJldHVybnMge3N0cmluZ30gLSBWYWxpZGF0ZWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQmFja2dyb3VuZEpvYlNjaGVkdWxlS2V5KHNjaGVkdWxlS2V5KSB7XG4gIGlmICh0eXBlb2Ygc2NoZWR1bGVLZXkgPT09IFwic3RyaW5nXCIgJiYgc2NoZWR1bGVLZXkubGVuZ3RoID4gMCAmJiBzY2hlZHVsZUtleS5sZW5ndGggPD0gMjU1KSByZXR1cm4gc2NoZWR1bGVLZXlcblxuICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiYmFja2dyb3VuZCBqb2Igc2NoZWR1bGVLZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgb2YgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1wiKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBqb2IgcXVldWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFtvcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gLSBRdWV1ZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQmFja2dyb3VuZEpvYlF1ZXVlKG9wdGlvbnMpIHtcbiAgY29uc3QgcXVldWUgPSBvcHRpb25zPy5xdWV1ZVxuXG4gIGlmICh0eXBlb2YgcXVldWUgPT09IFwic3RyaW5nXCIgJiYgcXVldWUudHJpbSgpLmxlbmd0aCA+IDApIHJldHVybiBxdWV1ZS50cmltKClcblxuICByZXR1cm4gREVGQVVMVF9CQUNLR1JPVU5EX0pPQl9RVUVVRVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gZXhwbGljaXQgZXhlY3V0aW9uIG1vZGUgd2hpbGUgcmV0YWluaW5nIHRoZSBOb2RlIGRlZmF1bHQuXG4gKiBAcGFyYW0ge09taXQ8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9ucywgXCJleGVjdXRpb25Nb2RlXCI+ICYge2V4ZWN1dGlvbk1vZGU/OiBzdHJpbmd9fSBvcHRpb25zIC0gSm9iIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkV4ZWN1dGlvbk1vZGV9IFtkZWZhdWx0RXhlY3V0aW9uTW9kZV0gLSBEZWZhdWx0IG1vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkV4ZWN1dGlvbk1vZGVbXX0gW3N1cHBvcnRlZEV4ZWN1dGlvbk1vZGVzXSAtIE1vZGVzIGFjY2VwdGVkIGJ5IHRoZSBjYWxsZXIuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iRXhlY3V0aW9uTW9kZX0gLSBFeGVjdXRpb24gbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhY2tncm91bmRKb2JFeGVjdXRpb25Nb2RlKG9wdGlvbnMgPSB7fSwgZGVmYXVsdEV4ZWN1dGlvbk1vZGUgPSBERUZBVUxUX0JBQ0tHUk9VTkRfSk9CX0VYRUNVVElPTl9NT0RFLCBzdXBwb3J0ZWRFeGVjdXRpb25Nb2RlcyA9IEJBQ0tHUk9VTkRfSk9CX0VYRUNVVElPTl9NT0RFUykge1xuICBpZiAoXCJmb3JrZWRcIiBpbiBvcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGJhY2tncm91bmQgam9iIGBmb3JrZWRgIG9wdGlvbiB3YXMgcmVtb3ZlZDsgcGFzcyBgZXhlY3V0aW9uTW9kZWAgKFxcXCJpbmxpbmVcXFwiLCBcXFwiZm9ya2VkXFxcIiwgXFxcInBvb2xlZFxcXCIsIG9yIFxcXCJzcGF3bmVkXFxcIikgaW5zdGVhZFwiKVxuICB9XG5cbiAgY29uc3QgcmVxdWVzdGVkRXhlY3V0aW9uTW9kZSA9IG9wdGlvbnMuZXhlY3V0aW9uTW9kZSB8fCBkZWZhdWx0RXhlY3V0aW9uTW9kZVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkV4ZWN1dGlvbk1vZGUgfCB1bmRlZmluZWR9ICovXG4gIGxldCBleGVjdXRpb25Nb2RlXG5cbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgQkFDS0dST1VORF9KT0JfRVhFQ1VUSU9OX01PREVTKSB7XG4gICAgaWYgKGNhbmRpZGF0ZSA9PT0gcmVxdWVzdGVkRXhlY3V0aW9uTW9kZSkgZXhlY3V0aW9uTW9kZSA9IGNhbmRpZGF0ZVxuICB9XG5cbiAgaWYgKCFleGVjdXRpb25Nb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFja2dyb3VuZCBqb2IgZXhlY3V0aW9uTW9kZTogJHtyZXF1ZXN0ZWRFeGVjdXRpb25Nb2RlfWApXG5cbiAgaWYgKCFzdXBwb3J0ZWRFeGVjdXRpb25Nb2Rlcy5pbmNsdWRlcyhleGVjdXRpb25Nb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQmFja2dyb3VuZCBqb2IgZXhlY3V0aW9uTW9kZSBcIiR7ZXhlY3V0aW9uTW9kZX1cIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsb2NhbCBiYWNrZ3JvdW5kLWpvYnMgYWRhcHRlcmApXG4gIH1cblxuICByZXR1cm4gZXhlY3V0aW9uTW9kZVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgbm9ybWFsaXplcyBhIHJldHJ5IGNhcC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWF4UmV0cmllcyAtIFJlcXVlc3RlZCByZXRyeSBjYXAuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFJldHJ5IGNhcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhY2tncm91bmRKb2JNYXhSZXRyaWVzKG1heFJldHJpZXMpIHtcbiAgaWYgKHR5cGVvZiBtYXhSZXRyaWVzID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZShtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID49IDApIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihtYXhSZXRyaWVzKVxuICB9XG5cbiAgcmV0dXJuIERFRkFVTFRfQkFDS0dST1VORF9KT0JfTUFYX1JFVFJJRVNcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW4gZW5xdWV1ZSBlbGlnaWJpbGl0eSB0aW1lc3RhbXAuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gc2NoZWR1bGVkQXRNcyAtIFJlcXVlc3RlZCB0aW1lc3RhbXAuXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFNjaGVkdWxlZEF0TXMgLSBEZWZhdWx0IHRpbWVzdGFtcC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gRWxpZ2liaWxpdHkgdGltZXN0YW1wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQmFja2dyb3VuZEpvYlNjaGVkdWxlZEF0TXMoc2NoZWR1bGVkQXRNcywgZGVmYXVsdFNjaGVkdWxlZEF0TXMpIHtcbiAgaWYgKHNjaGVkdWxlZEF0TXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRTY2hlZHVsZWRBdE1zXG4gIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihzY2hlZHVsZWRBdE1zKSAmJiBzY2hlZHVsZWRBdE1zID49IDApIHJldHVybiBzY2hlZHVsZWRBdE1zXG5cbiAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcImJhY2tncm91bmQgam9iIHNjaGVkdWxlZEF0TXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXJcIilcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSByZXNjaGVkdWxlIGRlbGF5IGFuZCByZXNvbHZlcyBpdCBhdCBwZXJzaXN0ZW5jZSB0aW1lLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5TXMgLSBSZXF1ZXN0ZWQgZGVsYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gbm93TXMgLSBQZXJzaXN0ZW5jZSB0aW1lc3RhbXAuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIE5ldyBlbGlnaWJpbGl0eSB0aW1lc3RhbXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNjaGVkdWxlZEJhY2tncm91bmRKb2JBdE1zKGRlbGF5TXMsIG5vd01zKSB7XG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoZGVsYXlNcykgfHwgZGVsYXlNcyA8IDApIHtcbiAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiYmFja2dyb3VuZCBqb2IgcmVzY2hlZHVsZSBkZWxheU1zIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyXCIpXG4gIH1cblxuICBjb25zdCBzY2hlZHVsZWRBdE1zID0gbm93TXMgKyBkZWxheU1zXG5cbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzY2hlZHVsZWRBdE1zKSkge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJiYWNrZ3JvdW5kIGpvYiByZXNjaGVkdWxlIHNjaGVkdWxlZEF0TXMgbXVzdCBiZSBhIHNhZmUgaW50ZWdlclwiKVxuICB9XG5cbiAgcmV0dXJuIHNjaGVkdWxlZEF0TXNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaGFyZWQgZmFpbHVyZSBiYWNrb2ZmLlxuICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5Q291bnQgLSBPbmUtYmFzZWQgZmFpbGVkIGF0dGVtcHQgY291bnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIEJhY2tvZmYgaW4gbWlsbGlzZWNvbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV0cnlEZWxheU1zKHJldHJ5Q291bnQpIHtcbiAgY29uc3Qgc2NoZWR1bGVTZWNvbmRzID0gWzEwLCA2MCwgNjAwLCAzNjAwXVxuXG4gIGlmIChyZXRyeUNvdW50IDw9IHNjaGVkdWxlU2Vjb25kcy5sZW5ndGgpIHJldHVybiBzY2hlZHVsZVNlY29uZHNbcmV0cnlDb3VudCAtIDFdICogMTAwMFxuXG4gIHJldHVybiAocmV0cnlDb3VudCAtIDMpICogNjAgKiA2MCAqIDEwMDBcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHBsaWNpdCBvciBxdWV1ZS1kZXJpdmVkIGNvbmN1cnJlbmN5LlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBSZXNvbHV0aW9uIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gYXJncy5vcHRpb25zIC0gSm9iIG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5xdWV1ZSAtIE5vcm1hbGl6ZWQgcXVldWUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHttYXhDb25jdXJyZW50PzogbnVtYmVyLCBwcmlvcml0eT86IG51bWJlcn0+fSBhcmdzLnF1ZXVlcyAtIFF1ZXVlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZXNvbHZlZEJhY2tncm91bmRKb2JDb25jdXJyZW5jeSB8IG51bGx9IC0gQ29uY3VycmVuY3kgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVCYWNrZ3JvdW5kSm9iQ29uY3VycmVuY3koe29wdGlvbnMgPSB7fSwgcXVldWUsIHF1ZXVlc30pIHtcbiAgY29uc3Qga2V5ID0gb3B0aW9ucy5jb25jdXJyZW5jeUtleVxuICBjb25zdCBjYXAgPSBvcHRpb25zLm1heENvbmN1cnJlbmN5XG5cbiAgaWYgKGtleSAhPT0gdW5kZWZpbmVkIHx8IGNhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIgfHwga2V5Lmxlbmd0aCA9PT0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihjYXApIHx8IE51bWJlcihjYXApIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImJhY2tncm91bmQgam9iIGNvbmN1cnJlbmN5S2V5IGFuZCBtYXhDb25jdXJyZW5jeSBtdXN0IGJlIHBhaXJlZDsgY29uY3VycmVuY3lLZXkgbXVzdCBiZSBub24tZW1wdHkgYW5kIG1heENvbmN1cnJlbmN5IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpXG4gICAgfVxuICAgIGlmIChrZXkuc3RhcnRzV2l0aChRVUVVRV9DT05DVVJSRU5DWV9LRVlfUFJFRklYKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWNrZ3JvdW5kIGpvYiBjb25jdXJyZW5jeUtleSBtdXN0IG5vdCBzdGFydCB3aXRoIHRoZSByZXNlcnZlZCBcIiR7UVVFVUVfQ09OQ1VSUkVOQ1lfS0VZX1BSRUZJWH1cIiBwcmVmaXgsIHdoaWNoIGlzIHJlc2VydmVkIGZvciBxdWV1ZS1kZXJpdmVkIGNvbmN1cnJlbmN5IGNhcHNgKVxuICAgIH1cblxuICAgIHJldHVybiB7Y29uY3VycmVuY3lLZXk6IGtleSwgbWF4Q29uY3VycmVuY3k6IE51bWJlcihjYXApLCBxdWV1ZURlcml2ZWQ6IGZhbHNlfVxuICB9XG5cbiAgY29uc3QgcXVldWVDYXAgPSBxdWV1ZXNbcXVldWVdPy5tYXhDb25jdXJyZW50XG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHF1ZXVlQ2FwKSB8fCBOdW1iZXIocXVldWVDYXApIDw9IDApIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIHtcbiAgICBjb25jdXJyZW5jeUtleTogYCR7UVVFVUVfQ09OQ1VSUkVOQ1lfS0VZX1BSRUZJWH0ke3F1ZXVlfWAsXG4gICAgbWF4Q29uY3VycmVuY3k6IE51bWJlcihxdWV1ZUNhcCksXG4gICAgcXVldWVEZXJpdmVkOiB0cnVlXG4gIH1cbn1cbiJdfQ==
@@ -43,5 +43,20 @@ export default class VelociousJob<TArgs extends Array<ReturnType<typeof JSON.par
43
43
  * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
44
44
  */
45
45
  static cancelScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
46
+ /**
47
+ * Reads current ownership and optional terminal history for a stable key.
48
+ * @param {string} scheduleKey - Stable logical schedule key.
49
+ * @param {{includeLatestTerminal?: boolean}} [options] - Lookup options.
50
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized stable schedule jobs.
51
+ */
52
+ static getScheduledJob(scheduleKey: string, options?: {
53
+ includeLatestTerminal?: boolean;
54
+ }): Promise<import("./types.js").BackgroundJobScheduledLookupResult>;
55
+ /**
56
+ * Expedites a future queued owner without creating another job.
57
+ * @param {string} scheduleKey - Stable logical schedule key.
58
+ * @returns {Promise<import("./types.js").BackgroundJobWakeResult>} - Wake result.
59
+ */
60
+ static wakeScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobWakeResult>;
46
61
  }
47
62
  //# sourceMappingURL=job.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/job.js"],"names":[],"mappings":"AAMA,OAAO,oBAAoB,MAAM,mBAAmB,CAAA;AAOpD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY,CAHoB,KAAK,SAA5C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAS,EAAG,CAG5B,SAAQ,oBAAoB,CAF3B,KAAK,CAEsB;IAC5D;;;;OAIG;IACH,OAAa,YAAY,CAAC,GAAG,IAAI,EAHnB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAGV,GAFpB,OAAO,CAAC,MAAM,CAAC,CAe3B;IAED;;;;;;OAMG;IACH,OAAa,uBAAuB,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,EAJjD;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEiD,GAFvC,OAAO,CAAC,MAAM,CAAC,CAc3B;IAED;;;;;;;OAOG;IACH,OAAa,gBAAgB,CAAC,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAC,EALvD;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEuD,GAF7C,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAMxE;IAED;;;;OAIG;IACH,OAAa,eAAe,CAAC,WAAW,EAH7B,MAG6B,GAF3B,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAMzE;CACF"}
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/job.js"],"names":[],"mappings":"AAMA,OAAO,oBAAoB,MAAM,mBAAmB,CAAA;AASpD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY,CAHoB,KAAK,SAA5C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAS,EAAG,CAG5B,SAAQ,oBAAoB,CAF3B,KAAK,CAEsB;IAC5D;;;;OAIG;IACH,OAAa,YAAY,CAAC,GAAG,IAAI,EAHnB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAGV,GAFpB,OAAO,CAAC,MAAM,CAAC,CAe3B;IAED;;;;;;OAMG;IACH,OAAa,uBAAuB,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,EAJjD;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEiD,GAFvC,OAAO,CAAC,MAAM,CAAC,CAc3B;IAED;;;;;;;OAOG;IACH,OAAa,gBAAgB,CAAC,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAC,EALvD;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAmD,IAAI,EAA/C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC5C;QAAyD,OAAO,AAAhE,CACA,EADQ,OAAO,YAAY,EAAE,oBAAoB,CACjD;KAEuD,GAF7C,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAMxE;IAED;;;;OAIG;IACH,OAAa,eAAe,CAAC,WAAW,EAH7B,MAG6B,GAF3B,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAMzE;IAED;;;;;OAKG;IACH,OAAa,eAAe,CAAC,WAAW,EAJ7B,MAI6B,EAAE,OAAO,AAH9C,CACA,EADQ;QAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAGW,GAFzC,OAAO,CAAC,OAAO,YAAY,EAAE,kCAAkC,CAAC,CAM5E;IAED;;;;OAIG;IACH,OAAa,aAAa,CAAC,WAAW,EAH3B,MAG2B,GAFzB,OAAO,CAAC,OAAO,YAAY,EAAE,uBAAuB,CAAC,CAMjE;CACF"}
@@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto";
3
3
  import configurationResolver from "../configuration-resolver.js";
4
4
  import { currentBackgroundJobProducerProof } from "./execution-context.js";
5
5
  import PlatformVelociousJob from "./platform-job.js";
6
- import { cancelScheduledBackgroundJobForConfiguration, enqueueBackgroundJobForConfiguration, replaceScheduledBackgroundJobForConfiguration } from "./runtime.js";
6
+ import { cancelScheduledBackgroundJobForConfiguration, enqueueBackgroundJobForConfiguration, getScheduledBackgroundJobForConfiguration, replaceScheduledBackgroundJobForConfiguration, wakeScheduledBackgroundJobForConfiguration } from "./runtime.js";
7
7
  /**
8
8
  * Node background-job entry. It preserves lazy configuration discovery for
9
9
  * fresh producer processes while the explicit platform entry stays free of
@@ -70,5 +70,24 @@ export default class VelociousJob extends PlatformVelociousJob {
70
70
  const configuration = await configurationResolver();
71
71
  return await cancelScheduledBackgroundJobForConfiguration({ configuration, scheduleKey });
72
72
  }
73
+ /**
74
+ * Reads current ownership and optional terminal history for a stable key.
75
+ * @param {string} scheduleKey - Stable logical schedule key.
76
+ * @param {{includeLatestTerminal?: boolean}} [options] - Lookup options.
77
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized stable schedule jobs.
78
+ */
79
+ static async getScheduledJob(scheduleKey, options = {}) {
80
+ const configuration = await configurationResolver();
81
+ return await getScheduledBackgroundJobForConfiguration({ configuration, scheduleKey, ...options });
82
+ }
83
+ /**
84
+ * Expedites a future queued owner without creating another job.
85
+ * @param {string} scheduleKey - Stable logical schedule key.
86
+ * @returns {Promise<import("./types.js").BackgroundJobWakeResult>} - Wake result.
87
+ */
88
+ static async wakeScheduled(scheduleKey) {
89
+ const configuration = await configurationResolver();
90
+ return await wakeScheduledBackgroundJobForConfiguration({ configuration, scheduleKey });
91
+ }
73
92
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9qb2IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEMsT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRSxPQUFPLG9CQUFvQixNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFDTCw0Q0FBNEMsRUFDNUMsb0NBQW9DLEVBQ3BDLDZDQUE2QyxFQUM5QyxNQUFNLGNBQWMsQ0FBQTtBQUVyQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLFlBQWEsU0FBUSxvQkFBb0I7SUFDNUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSTtRQUMvQixNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7UUFDbkQsTUFBTSxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDN0QsTUFBTSxhQUFhLEdBQUcsaUNBQWlDLEVBQUUsQ0FBQTtRQUV6RCxPQUFPLE1BQU0sb0NBQW9DLENBQUM7WUFDaEQsYUFBYTtZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTztZQUNQLFVBQVU7WUFDVixhQUFhO1lBQ2Isb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUMvRCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFBO1FBQ25ELE1BQU0sYUFBYSxHQUFHLGlDQUFpQyxFQUFFLENBQUE7UUFFekQsT0FBTyxNQUFNLG9DQUFvQyxDQUFDO1lBQ2hELGFBQWE7WUFDYixRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLE9BQU87WUFDbkIsYUFBYTtZQUNiLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDL0QsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFBO1FBRW5ELE9BQU8sTUFBTSw2Q0FBNkMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQzlJLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVztRQUN0QyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7UUFFbkQsT0FBTyxNQUFNLDRDQUE0QyxDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7SUFDekYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvblJlc29sdmVyIGZyb20gXCIuLi9jb25maWd1cmF0aW9uLXJlc29sdmVyLmpzXCJcbmltcG9ydCB7IGN1cnJlbnRCYWNrZ3JvdW5kSm9iUHJvZHVjZXJQcm9vZiB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0LmpzXCJcbmltcG9ydCBQbGF0Zm9ybVZlbG9jaW91c0pvYiBmcm9tIFwiLi9wbGF0Zm9ybS1qb2IuanNcIlxuaW1wb3J0IHtcbiAgY2FuY2VsU2NoZWR1bGVkQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24sXG4gIGVucXVldWVCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbixcbiAgcmVwbGFjZVNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uXG59IGZyb20gXCIuL3J1bnRpbWUuanNcIlxuXG4vKipcbiAqIE5vZGUgYmFja2dyb3VuZC1qb2IgZW50cnkuIEl0IHByZXNlcnZlcyBsYXp5IGNvbmZpZ3VyYXRpb24gZGlzY292ZXJ5IGZvclxuICogZnJlc2ggcHJvZHVjZXIgcHJvY2Vzc2VzIHdoaWxlIHRoZSBleHBsaWNpdCBwbGF0Zm9ybSBlbnRyeSBzdGF5cyBmcmVlIG9mXG4gKiBOb2RlLW9ubHkgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLlxuICogQHRlbXBsYXRlIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtUQXJncz1bXV1cbiAqIEBhdWdtZW50cyB7UGxhdGZvcm1WZWxvY2lvdXNKb2I8VEFyZ3M+fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNKb2IgZXh0ZW5kcyBQbGF0Zm9ybVZlbG9jaW91c0pvYiB7XG4gIC8qKlxuICAgKiBSdW5zIHBlcmZvcm0gbGF0ZXIuXG4gICAqIEBwYXJhbSB7Li4uUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBKb2IgaWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyZm9ybUxhdGVyKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcbiAgICBjb25zdCB7am9iQXJncywgam9iT3B0aW9uc30gPSB0aGlzLl9zcGxpdEFyZ3NBbmRPcHRpb25zKGFyZ3MpXG4gICAgY29uc3QgcHJvZHVjZXJQcm9vZiA9IGN1cnJlbnRCYWNrZ3JvdW5kSm9iUHJvZHVjZXJQcm9vZigpXG5cbiAgICByZXR1cm4gYXdhaXQgZW5xdWV1ZUJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBKb2JDbGFzczogdGhpcyxcbiAgICAgIGpvYkFyZ3MsXG4gICAgICBqb2JPcHRpb25zLFxuICAgICAgcHJvZHVjZXJQcm9vZixcbiAgICAgIHByb2R1Y2VySW52b2NhdGlvbklkOiBwcm9kdWNlclByb29mID8gcmFuZG9tVVVJRCgpIDogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcmZvcm0gbGF0ZXIgd2l0aCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBhcmdzLmFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfSBbYXJncy5vcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIEpvYiBpZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBwZXJmb3JtTGF0ZXJXaXRoT3B0aW9ucyh7YXJncywgb3B0aW9uc30pIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcbiAgICBjb25zdCBwcm9kdWNlclByb29mID0gY3VycmVudEJhY2tncm91bmRKb2JQcm9kdWNlclByb29mKClcblxuICAgIHJldHVybiBhd2FpdCBlbnF1ZXVlQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24oe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIEpvYkNsYXNzOiB0aGlzLFxuICAgICAgam9iQXJnczogYXJncyxcbiAgICAgIGpvYk9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBwcm9kdWNlclByb29mLFxuICAgICAgcHJvZHVjZXJJbnZvY2F0aW9uSWQ6IHByb2R1Y2VyUHJvb2YgPyByYW5kb21VVUlEKCkgOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEF0b21pY2FsbHkgcmVwbGFjZXMgdGhpcyBqb2IgY2xhc3MncyBxdWV1ZWQgb3duZXIgZm9yIGEgc3RhYmxlIHNjaGVkdWxlIGtleS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY2hlZHVsZUtleSAtIFN0YWJsZSBsb2dpY2FsIHNjaGVkdWxlIGtleS5cbiAgICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3MuYXJncyAtIEpvYiBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFthcmdzLm9wdGlvbnNdIC0gSm9iIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJlcGxhY2VtZW50UmVzdWx0Pn0gLSBSZXBsYWNlbWVudCByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmVwbGFjZVNjaGVkdWxlZCh7c2NoZWR1bGVLZXksIGFyZ3MsIG9wdGlvbnN9KSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG5cbiAgICByZXR1cm4gYXdhaXQgcmVwbGFjZVNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBKb2JDbGFzczogdGhpcywgc2NoZWR1bGVLZXksIGpvYkFyZ3M6IGFyZ3MsIGpvYk9wdGlvbnM6IG9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgb3IgZGV0YWNoZXMgdGhlIGN1cnJlbnQgb3duZXIgb2YgYSBzdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZWR1bGVLZXkgLSBTdGFibGUgbG9naWNhbCBzY2hlZHVsZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkNhbmNlbGxhdGlvblJlc3VsdD59IC0gQ2FuY2VsbGF0aW9uIHJlc3VsdC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBjYW5jZWxTY2hlZHVsZWQoc2NoZWR1bGVLZXkpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICAgIHJldHVybiBhd2FpdCBjYW5jZWxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbih7Y29uZmlndXJhdGlvbiwgc2NoZWR1bGVLZXl9KVxuICB9XG59XG4iXX0=
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9qb2IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEMsT0FBTyxxQkFBcUIsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRSxPQUFPLG9CQUFvQixNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFDTCw0Q0FBNEMsRUFDNUMsb0NBQW9DLEVBQ3BDLHlDQUF5QyxFQUN6Qyw2Q0FBNkMsRUFDN0MsMENBQTBDLEVBQzNDLE1BQU0sY0FBYyxDQUFBO0FBRXJCOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBYSxTQUFRLG9CQUFvQjtJQUM1RDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJO1FBQy9CLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLEVBQUUsQ0FBQTtRQUNuRCxNQUFNLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3RCxNQUFNLGFBQWEsR0FBRyxpQ0FBaUMsRUFBRSxDQUFBO1FBRXpELE9BQU8sTUFBTSxvQ0FBb0MsQ0FBQztZQUNoRCxhQUFhO1lBQ2IsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPO1lBQ1AsVUFBVTtZQUNWLGFBQWE7WUFDYixvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQy9ELENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQztRQUNsRCxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7UUFDbkQsTUFBTSxhQUFhLEdBQUcsaUNBQWlDLEVBQUUsQ0FBQTtRQUV6RCxPQUFPLE1BQU0sb0NBQW9DLENBQUM7WUFDaEQsYUFBYTtZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTyxFQUFFLElBQUk7WUFDYixVQUFVLEVBQUUsT0FBTztZQUNuQixhQUFhO1lBQ2Isb0JBQW9CLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUMvRCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQztRQUN4RCxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7UUFFbkQsT0FBTyxNQUFNLDZDQUE2QyxDQUFDLEVBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDOUksQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0scUJBQXFCLEVBQUUsQ0FBQTtRQUVuRCxPQUFPLE1BQU0sNENBQTRDLENBQUMsRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDcEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFBO1FBRW5ELE9BQU8sTUFBTSx5Q0FBeUMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVztRQUNwQyxNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUE7UUFFbkQsT0FBTyxNQUFNLDBDQUEwQyxDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7SUFDdkYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvblJlc29sdmVyIGZyb20gXCIuLi9jb25maWd1cmF0aW9uLXJlc29sdmVyLmpzXCJcbmltcG9ydCB7IGN1cnJlbnRCYWNrZ3JvdW5kSm9iUHJvZHVjZXJQcm9vZiB9IGZyb20gXCIuL2V4ZWN1dGlvbi1jb250ZXh0LmpzXCJcbmltcG9ydCBQbGF0Zm9ybVZlbG9jaW91c0pvYiBmcm9tIFwiLi9wbGF0Zm9ybS1qb2IuanNcIlxuaW1wb3J0IHtcbiAgY2FuY2VsU2NoZWR1bGVkQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24sXG4gIGVucXVldWVCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbixcbiAgZ2V0U2NoZWR1bGVkQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24sXG4gIHJlcGxhY2VTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbixcbiAgd2FrZVNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uXG59IGZyb20gXCIuL3J1bnRpbWUuanNcIlxuXG4vKipcbiAqIE5vZGUgYmFja2dyb3VuZC1qb2IgZW50cnkuIEl0IHByZXNlcnZlcyBsYXp5IGNvbmZpZ3VyYXRpb24gZGlzY292ZXJ5IGZvclxuICogZnJlc2ggcHJvZHVjZXIgcHJvY2Vzc2VzIHdoaWxlIHRoZSBleHBsaWNpdCBwbGF0Zm9ybSBlbnRyeSBzdGF5cyBmcmVlIG9mXG4gKiBOb2RlLW9ubHkgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uLlxuICogQHRlbXBsYXRlIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtUQXJncz1bXV1cbiAqIEBhdWdtZW50cyB7UGxhdGZvcm1WZWxvY2lvdXNKb2I8VEFyZ3M+fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNKb2IgZXh0ZW5kcyBQbGF0Zm9ybVZlbG9jaW91c0pvYiB7XG4gIC8qKlxuICAgKiBSdW5zIHBlcmZvcm0gbGF0ZXIuXG4gICAqIEBwYXJhbSB7Li4uUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBKb2IgaWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyZm9ybUxhdGVyKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcbiAgICBjb25zdCB7am9iQXJncywgam9iT3B0aW9uc30gPSB0aGlzLl9zcGxpdEFyZ3NBbmRPcHRpb25zKGFyZ3MpXG4gICAgY29uc3QgcHJvZHVjZXJQcm9vZiA9IGN1cnJlbnRCYWNrZ3JvdW5kSm9iUHJvZHVjZXJQcm9vZigpXG5cbiAgICByZXR1cm4gYXdhaXQgZW5xdWV1ZUJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBKb2JDbGFzczogdGhpcyxcbiAgICAgIGpvYkFyZ3MsXG4gICAgICBqb2JPcHRpb25zLFxuICAgICAgcHJvZHVjZXJQcm9vZixcbiAgICAgIHByb2R1Y2VySW52b2NhdGlvbklkOiBwcm9kdWNlclByb29mID8gcmFuZG9tVVVJRCgpIDogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcmZvcm0gbGF0ZXIgd2l0aCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBhcmdzLmFyZ3MgLSBKb2IgYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfSBbYXJncy5vcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIEpvYiBpZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBwZXJmb3JtTGF0ZXJXaXRoT3B0aW9ucyh7YXJncywgb3B0aW9uc30pIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcbiAgICBjb25zdCBwcm9kdWNlclByb29mID0gY3VycmVudEJhY2tncm91bmRKb2JQcm9kdWNlclByb29mKClcblxuICAgIHJldHVybiBhd2FpdCBlbnF1ZXVlQmFja2dyb3VuZEpvYkZvckNvbmZpZ3VyYXRpb24oe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIEpvYkNsYXNzOiB0aGlzLFxuICAgICAgam9iQXJnczogYXJncyxcbiAgICAgIGpvYk9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBwcm9kdWNlclByb29mLFxuICAgICAgcHJvZHVjZXJJbnZvY2F0aW9uSWQ6IHByb2R1Y2VyUHJvb2YgPyByYW5kb21VVUlEKCkgOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEF0b21pY2FsbHkgcmVwbGFjZXMgdGhpcyBqb2IgY2xhc3MncyBxdWV1ZWQgb3duZXIgZm9yIGEgc3RhYmxlIHNjaGVkdWxlIGtleS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5zY2hlZHVsZUtleSAtIFN0YWJsZSBsb2dpY2FsIHNjaGVkdWxlIGtleS5cbiAgICogQHBhcmFtIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGFyZ3MuYXJncyAtIEpvYiBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFthcmdzLm9wdGlvbnNdIC0gSm9iIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJlcGxhY2VtZW50UmVzdWx0Pn0gLSBSZXBsYWNlbWVudCByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmVwbGFjZVNjaGVkdWxlZCh7c2NoZWR1bGVLZXksIGFyZ3MsIG9wdGlvbnN9KSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG5cbiAgICByZXR1cm4gYXdhaXQgcmVwbGFjZVNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBKb2JDbGFzczogdGhpcywgc2NoZWR1bGVLZXksIGpvYkFyZ3M6IGFyZ3MsIGpvYk9wdGlvbnM6IG9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgb3IgZGV0YWNoZXMgdGhlIGN1cnJlbnQgb3duZXIgb2YgYSBzdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZWR1bGVLZXkgLSBTdGFibGUgbG9naWNhbCBzY2hlZHVsZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkNhbmNlbGxhdGlvblJlc3VsdD59IC0gQ2FuY2VsbGF0aW9uIHJlc3VsdC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBjYW5jZWxTY2hlZHVsZWQoc2NoZWR1bGVLZXkpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICAgIHJldHVybiBhd2FpdCBjYW5jZWxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbih7Y29uZmlndXJhdGlvbiwgc2NoZWR1bGVLZXl9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGN1cnJlbnQgb3duZXJzaGlwIGFuZCBvcHRpb25hbCB0ZXJtaW5hbCBoaXN0b3J5IGZvciBhIHN0YWJsZSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlZHVsZUtleSAtIFN0YWJsZSBsb2dpY2FsIHNjaGVkdWxlIGtleS5cbiAgICogQHBhcmFtIHt7aW5jbHVkZUxhdGVzdFRlcm1pbmFsPzogYm9vbGVhbn19IFtvcHRpb25zXSAtIExvb2t1cCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JTY2hlZHVsZWRMb29rdXBSZXN1bHQ+fSAtIE5vcm1hbGl6ZWQgc3RhYmxlIHNjaGVkdWxlIGpvYnMuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0U2NoZWR1bGVkSm9iKHNjaGVkdWxlS2V5LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlndXJhdGlvblJlc29sdmVyKClcblxuICAgIHJldHVybiBhd2FpdCBnZXRTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRm9yQ29uZmlndXJhdGlvbih7Y29uZmlndXJhdGlvbiwgc2NoZWR1bGVLZXksIC4uLm9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGVkaXRlcyBhIGZ1dHVyZSBxdWV1ZWQgb3duZXIgd2l0aG91dCBjcmVhdGluZyBhbm90aGVyIGpvYi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVkdWxlS2V5IC0gU3RhYmxlIGxvZ2ljYWwgc2NoZWR1bGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JXYWtlUmVzdWx0Pn0gLSBXYWtlIHJlc3VsdC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyB3YWtlU2NoZWR1bGVkKHNjaGVkdWxlS2V5KSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25SZXNvbHZlcigpXG5cbiAgICByZXR1cm4gYXdhaXQgd2FrZVNjaGVkdWxlZEJhY2tncm91bmRKb2JGb3JDb25maWd1cmF0aW9uKHtjb25maWd1cmF0aW9uLCBzY2hlZHVsZUtleX0pXG4gIH1cbn1cbiJdfQ==
@@ -52,22 +52,37 @@ export default class LocalBackgroundJobsAdapter extends BackgroundJobsAdapter {
52
52
  options?: import("./types.js").BackgroundJobOptions;
53
53
  }): Promise<string>;
54
54
  /**
55
- * Rejects stable-key cancellation, which is outside the local adapter contract.
56
- * @param {string} _scheduleKey - Unsupported stable key.
57
- * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Never resolves.
55
+ * Cancels or detaches the current owner of a stable schedule key.
56
+ * @param {string} scheduleKey - Stable schedule key.
57
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
58
58
  */
59
- cancelScheduled(_scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
59
+ cancelScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
60
60
  /**
61
- * Rejects stable-key replacement, which is outside the local adapter contract.
62
- * @param {{scheduleKey: string, jobName: string, args: Array<ReturnType<typeof JSON.parse>>, options?: import("./types.js").BackgroundJobOptions}} _args - Unsupported request.
63
- * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Never resolves.
61
+ * Replaces the current owner of a stable schedule key.
62
+ * @param {{scheduleKey: string, jobName: string, args: Array<ReturnType<typeof JSON.parse>>, options?: import("./types.js").BackgroundJobOptions}} args - Replacement request.
63
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
64
64
  */
65
- replaceScheduled(_args: {
65
+ replaceScheduled(args: {
66
66
  scheduleKey: string;
67
67
  jobName: string;
68
68
  args: Array<ReturnType<typeof JSON.parse>>;
69
69
  options?: import("./types.js").BackgroundJobOptions;
70
70
  }): Promise<import("./types.js").BackgroundJobReplacementResult>;
71
+ /**
72
+ * Reads stable ownership and optional terminal history.
73
+ * @param {string} scheduleKey - Stable schedule key.
74
+ * @param {{includeLatestTerminal?: boolean}} [options] - Lookup options.
75
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized local jobs.
76
+ */
77
+ getScheduledJob(scheduleKey: string, options?: {
78
+ includeLatestTerminal?: boolean;
79
+ }): Promise<import("./types.js").BackgroundJobScheduledLookupResult>;
80
+ /**
81
+ * Makes a future queued stable owner due without replacing it.
82
+ * @param {string} scheduleKey - Stable schedule key.
83
+ * @returns {Promise<import("./types.js").BackgroundJobWakeResult>} - Exact wake result.
84
+ */
85
+ wakeScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobWakeResult>;
71
86
  /**
72
87
  * Finds the next eligible local job.
73
88
  * @returns {Promise<import("./types.js").BackgroundJobRow | null>} - Next eligible job.
@@ -1 +1 @@
1
- {"version":3,"file":"local-adapter.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/local-adapter.js"],"names":[],"mappings":"AAEA,OAAO,qBAAqB,MAAM,cAAc,CAAA;AAChD,OAAO,6BAA6B,MAAM,uBAAuB,CAAA;AACjE,OAAO,0BAA0B,MAAM,yBAAyB,CAAA;AAChE,OAAO,wBAAoD,MAAM,kBAAkB,CAAA;AAEnF,wEAAwE;AACxE,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,qBAAqB;IAUpE,KAAK;IACL,aAAa;IACb,QAAQ;IACR,KAAK;IAML,UAAU;IAlBjB;;;;;;OAMG;IACH,YAAY,EAAC,aAAa,EAAE,KAAkC,EAAE,kBAAkB,EAAC,EAJhF;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAA6D,KAAK,AAAlE,CACA,EADQ,OAAO,YAAY,EAAE,wBAAwB,CACrD;QAAsB,kBAAkB,AAAxC,CACF,EADU,MAAM,CAChB;KACkF,EAYlF;IAED;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,IAAI,CAAC,CAE2B;IAErD;;;OAGG;IACG,KAAK,IAFE,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;OAGG;IACG,MAAM,IAFC,OAAO,CAAC,OAAO,YAAY,EAAE,oBAAoB,CAAC,CAEH;IAE5D;;;OAGG;IACG,yBAAyB,IAFlB,OAAO,CAAC,IAAI,CAAC,CAEwD;IAElF;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAHP;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAG1G,GAFL,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;OAIG;IACG,eAAe,CAAC,YAAY,EAHvB,MAGuB,GAFrB,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAEsD;IAEhI;;;;OAIG;IACG,gBAAgB,CAAC,KAAK,EAHjB;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAGrH,GAFf,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAEkD;IAE3H;;;OAGG;IACG,gBAAgB,IAFT,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEK;IAEvE;;;OAGG;IACG,gBAAgB,IAFT,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEK;IAEvE;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAHP,MAGO,GAFL,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEL;IAE7D;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAEN;IAEvD;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAHb,OAAO,YAAY,EAAE,2BAGR,GAFX,OAAO,CAAC,OAAO,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAEG;IAEzE;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAHtB;QAAC,QAAQ,EAAE,MAAM,CAAA;KAGK,GAFpB,OAAO,CAAC,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC,CAE4B;IAE3F;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAHnB;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAGd,GAFjB,OAAO,CAAC,IAAI,CAAC,CAEoD;IAE9E;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAHb;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAGrB,GAFX,OAAO,CAAC,OAAO,CAAC,CAE4C;IAEzE;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAHjB;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAG3G,GAFf,OAAO,CAAC,OAAO,CAAC,CAEoD;IAEjF;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAHf;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAGpC,GAFb,OAAO,CAAC,OAAO,CAAC,CAEgD;IAE7E;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAHV;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAG9D,GAFR,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEC;IAEnE;;;OAGG;IACH,IAAI,IAFS,IAAI,CAEgB;IAEjC;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,IAAI,CAAC,CAEiC;CAC5D"}
1
+ {"version":3,"file":"local-adapter.d.ts","sourceRoot":"","sources":["../../../src/background-jobs/local-adapter.js"],"names":[],"mappings":"AAEA,OAAO,qBAAqB,MAAM,cAAc,CAAA;AAChD,OAAO,6BAA6B,MAAM,uBAAuB,CAAA;AACjE,OAAO,0BAA0B,MAAM,yBAAyB,CAAA;AAChE,OAAO,wBAAoD,MAAM,kBAAkB,CAAA;AAEnF,wEAAwE;AACxE,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,qBAAqB;IAUpE,KAAK;IACL,aAAa;IACb,QAAQ;IACR,KAAK;IAML,UAAU;IAlBjB;;;;;;OAMG;IACH,YAAY,EAAC,aAAa,EAAE,KAAkC,EAAE,kBAAkB,EAAC,EAJhF;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAA6D,KAAK,AAAlE,CACA,EADQ,OAAO,YAAY,EAAE,wBAAwB,CACrD;QAAsB,kBAAkB,AAAxC,CACF,EADU,MAAM,CAChB;KACkF,EAYlF;IAED;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,IAAI,CAAC,CAE2B;IAErD;;;OAGG;IACG,KAAK,IAFE,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;OAGG;IACG,MAAM,IAFC,OAAO,CAAC,OAAO,YAAY,EAAE,oBAAoB,CAAC,CAEH;IAE5D;;;OAGG;IACG,yBAAyB,IAFlB,OAAO,CAAC,IAAI,CAAC,CAEwD;IAElF;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAHP;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAG1G,GAFL,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;OAIG;IACG,eAAe,CAAC,WAAW,EAHtB,MAGsB,GAFpB,OAAO,CAAC,OAAO,YAAY,EAAE,+BAA+B,CAAC,CAKzE;IAED;;;;OAIG;IACG,gBAAgB,CAAC,IAAI,EAHhB;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,YAAY,EAAE,oBAAoB,CAAA;KAGtH,GAFd,OAAO,CAAC,OAAO,YAAY,EAAE,8BAA8B,CAAC,CAMxE;IAED;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAJtB,MAIsB,EAAE,OAAO,AAHvC,CACA,EADQ;QAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAGD,GAF7B,OAAO,CAAC,OAAO,YAAY,EAAE,kCAAkC,CAAC,CAK5E;IAED;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAHpB,MAGoB,GAFlB,OAAO,CAAC,OAAO,YAAY,EAAE,uBAAuB,CAAC,CAKjE;IAED;;;OAGG;IACG,gBAAgB,IAFT,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEK;IAEvE;;;OAGG;IACG,gBAAgB,IAFT,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEK;IAEvE;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAHP,MAGO,GAFL,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEL;IAE7D;;;OAGG;IACG,QAAQ,IAFD,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAEN;IAEvD;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAHb,OAAO,YAAY,EAAE,2BAGR,GAFX,OAAO,CAAC,OAAO,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAEG;IAEzE;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAHtB;QAAC,QAAQ,EAAE,MAAM,CAAA;KAGK,GAFpB,OAAO,CAAC,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC,CAE4B;IAE3F;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAHnB;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAGd,GAFjB,OAAO,CAAC,IAAI,CAAC,CAEoD;IAE9E;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAHb;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAGrB,GAFX,OAAO,CAAC,OAAO,CAAC,CAE4C;IAEzE;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAHjB;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAG3G,GAFf,OAAO,CAAC,OAAO,CAAC,CAEoD;IAEjF;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAHf;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAGpC,GAFb,OAAO,CAAC,OAAO,CAAC,CAEgD;IAE7E;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAHV;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAG9D,GAFR,OAAO,CAAC,OAAO,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAEC;IAEnE;;;OAGG;IACH,IAAI,IAFS,IAAI,CAEgB;IAEjC;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,IAAI,CAAC,CAEiC;CAC5D"}
@@ -59,17 +59,43 @@ export default class LocalBackgroundJobsAdapter extends BackgroundJobsAdapter {
59
59
  return await this.store.enqueue(args);
60
60
  }
61
61
  /**
62
- * Rejects stable-key cancellation, which is outside the local adapter contract.
63
- * @param {string} _scheduleKey - Unsupported stable key.
64
- * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Never resolves.
62
+ * Cancels or detaches the current owner of a stable schedule key.
63
+ * @param {string} scheduleKey - Stable schedule key.
64
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
65
65
  */
66
- async cancelScheduled(_scheduleKey) { throw new Error("cancelScheduled is not supported by the local background-jobs adapter"); }
66
+ async cancelScheduled(scheduleKey) {
67
+ await this.ensureReady();
68
+ return await this.store.cancelScheduled(scheduleKey);
69
+ }
70
+ /**
71
+ * Replaces the current owner of a stable schedule key.
72
+ * @param {{scheduleKey: string, jobName: string, args: Array<ReturnType<typeof JSON.parse>>, options?: import("./types.js").BackgroundJobOptions}} args - Replacement request.
73
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
74
+ */
75
+ async replaceScheduled(args) {
76
+ await this.ensureReady();
77
+ this.registry.resolve(args.jobName);
78
+ return await this.store.replaceScheduled(args);
79
+ }
67
80
  /**
68
- * Rejects stable-key replacement, which is outside the local adapter contract.
69
- * @param {{scheduleKey: string, jobName: string, args: Array<ReturnType<typeof JSON.parse>>, options?: import("./types.js").BackgroundJobOptions}} _args - Unsupported request.
70
- * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Never resolves.
81
+ * Reads stable ownership and optional terminal history.
82
+ * @param {string} scheduleKey - Stable schedule key.
83
+ * @param {{includeLatestTerminal?: boolean}} [options] - Lookup options.
84
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized local jobs.
71
85
  */
72
- async replaceScheduled(_args) { throw new Error("replaceScheduled is not supported by the local background-jobs adapter"); }
86
+ async getScheduledJob(scheduleKey, options) {
87
+ await this.ensureReady();
88
+ return await this.store.getScheduledJob(scheduleKey, options);
89
+ }
90
+ /**
91
+ * Makes a future queued stable owner due without replacing it.
92
+ * @param {string} scheduleKey - Stable schedule key.
93
+ * @returns {Promise<import("./types.js").BackgroundJobWakeResult>} - Exact wake result.
94
+ */
95
+ async wakeScheduled(scheduleKey) {
96
+ await this.ensureReady();
97
+ return await this.store.wakeScheduled(scheduleKey);
98
+ }
73
99
  /**
74
100
  * Finds the next eligible local job.
75
101
  * @returns {Promise<import("./types.js").BackgroundJobRow | null>} - Next eligible job.
@@ -144,4 +170,4 @@ export default class LocalBackgroundJobsAdapter extends BackgroundJobsAdapter {
144
170
  */
145
171
  async waitForIdle() { await this.dispatcher.waitForIdle(); }
146
172
  }
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbG9jYWwtYWRhcHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxxQkFBcUIsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyw2QkFBNkIsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqRSxPQUFPLDBCQUEwQixNQUFNLHlCQUF5QixDQUFBO0FBQ2hFLE9BQU8sd0JBQXdCLEVBQUUsRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRW5GLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEyQixTQUFRLHFCQUFxQjtJQUMzRTs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLEtBQUssR0FBRyx3QkFBd0IsRUFBRSxFQUFFLGtCQUFrQixFQUFDO1FBQ2pGLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixDQUFDLEVBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUNyRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUM7WUFDeEMsS0FBSztZQUNMLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7U0FDakQsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDZCQUE2QixDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxD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QUFpQixDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVqRjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU3RTs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVuRTs7O09BR0c7SUFDSCxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFFakM7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUEsQ0FBQyxDQUFDO0NBQzVEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYWNrZ3JvdW5kSm9ic0FkYXB0ZXIgZnJvbSBcIi4vYWRhcHRlci5qc1wiXG5pbXBvcnQgTG9jYWxCYWNrZ3JvdW5kSm9ic0Rpc3BhdGNoZXIgZnJvbSBcIi4vbG9jYWwtZGlzcGF0Y2hlci5qc1wiXG5pbXBvcnQgTG9jYWxCYWNrZ3JvdW5kSm9iUmVnaXN0cnkgZnJvbSBcIi4vbG9jYWwtam9iLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCBMb2NhbEJhY2tncm91bmRKb2JzU3RvcmUsIHtsb2NhbEJhY2tncm91bmRKb2JzQ2xvY2t9IGZyb20gXCIuL2xvY2FsLXN0b3JlLmpzXCJcblxuLyoqIER1cmFibGUgbG9jYWwgU1FMaXRlIGFkYXB0ZXIgd2l0aCBhbiBvd25lZCBpbi1wcm9jZXNzIGRpc3BhdGNoZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2NhbEJhY2tncm91bmRKb2JzQWRhcHRlciBleHRlbmRzIEJhY2tncm91bmRKb2JzQWRhcHRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbG9jYWwgYWRhcHRlciBmb3Igb25lIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFkYXB0ZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIE93bmluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuTG9jYWxCYWNrZ3JvdW5kSm9ic0Nsb2NrfSBbYXJncy5jbG9ja10gLSBJbmplY3RhYmxlIGNsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGF0YWJhc2VJZGVudGlmaWVyXSAtIExvY2FsIGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgY2xvY2sgPSBsb2NhbEJhY2tncm91bmRKb2JzQ2xvY2soKSwgZGF0YWJhc2VJZGVudGlmaWVyfSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNsb2NrID0gY2xvY2tcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBMb2NhbEJhY2tncm91bmRKb2JSZWdpc3RyeSh7am9iQ2xhc3NlczogY29uZmlndXJhdGlvbi5nZXRCYWNrZ3JvdW5kSm9iQ2xhc3NlcygpfSlcbiAgICB0aGlzLnN0b3JlID0gbmV3IExvY2FsQmFja2dyb3VuZEpvYnNTdG9yZSh7XG4gICAgICBjbG9jayxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBkYXRhYmFzZUlkZW50aWZpZXIsXG4gICAgICBvbkNvbW1pdHRlZEVucXVldWU6ICgpID0+IHRoaXMuZGlzcGF0Y2hlci53YWtlKClcbiAgICB9KVxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBMb2NhbEJhY2tncm91bmRKb2JzRGlzcGF0Y2hlcih7Y2xvY2ssIGNvbmZpZ3VyYXRpb24sIHJlZ2lzdHJ5OiB0aGlzLnJlZ2lzdHJ5LCBzdG9yZTogdGhpcy5zdG9yZX0pXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGF0IGxvY2FsIHBlcnNpc3RlbmNlIGFuZCBkaXNwYXRjaCBhcmUgcmVhZHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gbG9jYWwgZGlzcGF0Y2ggaXMgcmVhZHkuXG4gICAqL1xuICBhc3luYyBlbnN1cmVSZWFkeSgpIHsgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLnN0YXJ0KCkgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBsb2NhbCBkaXNwYXRjaCBncmFjZWZ1bGx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciBncmFjZWZ1bCBsb2NhbCBzaHV0ZG93bi5cbiAgICovXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5zdG9wKClcbiAgICB0aGlzLnN0b3JlLnJlc2V0UmVhZGluZXNzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIGxvY2FsIGRpc3BhdGNoZXIgaGVhbHRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JzSGVhbHRoPn0gLSBMb2NhbCBhZGFwdGVyIGhlYWx0aC5cbiAgICovXG4gIGFzeW5jIGhlYWx0aCgpIHsgcmV0dXJuIHtyZWFkeTogdGhpcy5kaXNwYXRjaGVyLmlzUmVhZHkoKX0gfVxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIGNvbmZpZ3VyYXRpb24tZGVyaXZlZCBxdWV1ZSBjb25jdXJyZW5jeSBjYXBzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciBxdWV1ZSBjYXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBhc3luYyByZWNvbmNpbGVRdWV1ZUNvbmN1cnJlbmN5KCkgeyBhd2FpdCB0aGlzLnN0b3JlLnJlY29uY2lsZVF1ZXVlQ29uY3VycmVuY3koKSB9XG5cbiAgLyoqXG4gICAqIEVucXVldWVzIG9uZSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgbG9jYWwgam9iLlxuICAgKiBAcGFyYW0ge3tqb2JOYW1lOiBzdHJpbmcsIGFyZ3M6IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Piwgb3B0aW9ucz86IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9fSBhcmdzIC0gRW5xdWV1ZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIER1cmFibGUgbG9jYWwgam9iIGlkLlxuICAgKi9cbiAgYXN5bmMgZW5xdWV1ZShhcmdzKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG4gICAgdGhpcy5yZWdpc3RyeS5yZXNvbHZlKGFyZ3Muam9iTmFtZSlcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5lbnF1ZXVlKGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0cyBzdGFibGUta2V5IGNhbmNlbGxhdGlvbiwgd2hpY2ggaXMgb3V0c2lkZSB0aGUgbG9jYWwgYWRhcHRlciBjb250cmFjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9zY2hlZHVsZUtleSAtIFVuc3VwcG9ydGVkIHN0YWJsZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkNhbmNlbGxhdGlvblJlc3VsdD59IC0gTmV2ZXIgcmVzb2x2ZXMuXG4gICAqL1xuICBhc3luYyBjYW5jZWxTY2hlZHVsZWQoX3NjaGVkdWxlS2V5KSB7IHRocm93IG5ldyBFcnJvcihcImNhbmNlbFNjaGVkdWxlZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsb2NhbCBiYWNrZ3JvdW5kLWpvYnMgYWRhcHRlclwiKSB9XG5cbiAgLyoqXG4gICAqIFJlamVjdHMgc3RhYmxlLWtleSByZXBsYWNlbWVudCwgd2hpY2ggaXMgb3V0c2lkZSB0aGUgbG9jYWwgYWRhcHRlciBjb250cmFjdC5cbiAgICogQHBhcmFtIHt7c2NoZWR1bGVLZXk6IHN0cmluZywgam9iTmFtZTogc3RyaW5nLCBhcmdzOiBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG9wdGlvbnM/OiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfX0gX2FyZ3MgLSBVbnN1cHBvcnRlZCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JSZXBsYWNlbWVudFJlc3VsdD59IC0gTmV2ZXIgcmVzb2x2ZXMuXG4gICAqL1xuICBhc3luYyByZXBsYWNlU2NoZWR1bGVkKF9hcmdzKSB7IHRocm93IG5ldyBFcnJvcihcInJlcGxhY2VTY2hlZHVsZWQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbG9jYWwgYmFja2dyb3VuZC1qb2JzIGFkYXB0ZXJcIikgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgbmV4dCBlbGlnaWJsZSBsb2NhbCBqb2IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvdyB8IG51bGw+fSAtIE5leHQgZWxpZ2libGUgam9iLlxuICAgKi9cbiAgYXN5bmMgbmV4dEF2YWlsYWJsZUpvYigpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUubmV4dEF2YWlsYWJsZUpvYigpIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG5leHQgZnV0dXJlIGxvY2FsIGpvYi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUm93IHwgbnVsbD59IC0gTmV4dCBmdXR1cmUgam9iLlxuICAgKi9cbiAgYXN5bmMgbmV4dFNjaGVkdWxlZEpvYigpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUubmV4dFNjaGVkdWxlZEpvYigpIH1cblxuICAvKipcbiAgICogRmluZHMgYSBsb2NhbCBqb2IgYnkgaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JJZCAtIEpvYiBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUm93IHwgbnVsbD59IC0gUGVyc2lzdGVkIGpvYi5cbiAgICovXG4gIGFzeW5jIGdldEpvYihqb2JJZCkgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5nZXRKb2Ioam9iSWQpIH1cblxuICAvKipcbiAgICogTGlzdHMgbG9jYWwgam9icyBpbiBpbnNlcnRpb24gb3JkZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvd1tdPn0gLSBMb2NhbCBqb2JzLlxuICAgKi9cbiAgYXN5bmMgbGlzdEpvYnMoKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLmxpc3RKb2JzKCkgfVxuXG4gIC8qKlxuICAgKiBDbGFpbXMgb25lIHF1ZXVlZCBsb2NhbCBqb2IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iSGFuZG9mZlJlcXVlc3R9IGFyZ3MgLSBDbGFpbSByZXF1ZXN0LiBBIHN1cHBsaWVkIGhhbmRvZmYgaWQgaXMgcGVyc2lzdGVkIGV4YWN0bHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkhhbmRvZmYgfCBudWxsPn0gLSBIYW5kb2ZmLlxuICAgKi9cbiAgYXN5bmMgbWFya0hhbmRlZE9mZihhcmdzKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLm1hcmtIYW5kZWRPZmYoYXJncykgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhY3RpdmUgbG9jYWwgaGFuZG9mZnMgb3duZWQgYnkgb25lIHdvcmtlci5cbiAgICogQHBhcmFtIHt7d29ya2VySWQ6IHN0cmluZ319IGFyZ3MgLSBXb3JrZXIgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PHtqb2JJZDogc3RyaW5nLCBoYW5kb2ZmSWQ6IHN0cmluZ30+Pn0gLSBBY3RpdmUgd29ya2VyIGhhbmRvZmZzLlxuICAgKi9cbiAgYXN5bmMgaGFuZGVkT2ZmSm9ic0ZvcldvcmtlcihhcmdzKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLmhhbmRlZE9mZkpvYnNGb3JXb3JrZXIoYXJncykgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV4YWN0IGFjdGl2ZSBsb2NhbCBoYW5kb2ZmIHRvIHRoZSBxdWV1ZS5cbiAgICogQHBhcmFtIHt7am9iSWQ6IHN0cmluZywgaGFuZG9mZklkOiBzdHJpbmd9fSBhcmdzIC0gSGFuZG9mZiByZWxlYXNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgZmVuY2VkIHJlbGVhc2UuXG4gICAqL1xuICBhc3luYyBtYXJrUmV0dXJuZWRUb1F1ZXVlKGFyZ3MpIHsgYXdhaXQgdGhpcy5zdG9yZS5tYXJrUmV0dXJuZWRUb1F1ZXVlKGFyZ3MpIH1cblxuICAvKipcbiAgICogQWNrbm93bGVkZ2VzIHN1Y2Nlc3NmdWwgbG9jYWwgam9iIGNvbXBsZXRpb24uXG4gICAqIEBwYXJhbSB7e2pvYklkOiBzdHJpbmcsIGhhbmRvZmZJZD86IHN0cmluZ319IGFyZ3MgLSBDb21wbGV0aW9uIHJlcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBhY2NlcHRlZC5cbiAgICovXG4gIGFzeW5jIG1hcmtDb21wbGV0ZWQoYXJncykgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5tYXJrQ29tcGxldGVkKGFyZ3MpIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBwb29sZWQtY2hpbGQgYWNjZXB0YW5jZSBldmlkZW5jZSBmb3IgYSBsb2NhbCBoYW5kb2ZmLlxuICAgKiBAcGFyYW0ge3tqb2JJZDogc3RyaW5nLCBoYW5kb2ZmSWQ/OiBzdHJpbmcsIHJlY2VpdmVkQXRNcz86IG51bWJlciwgc3RhcnRlZEF0TXM/OiBudW1iZXIsIGNoaWxkSW5zdGFuY2VJZD86IHN0cmluZywgY2hpbGRQaWQ/OiBudW1iZXJ9fSBhcmdzIC0gQWNjZXB0YW5jZSByZXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgYWNjZXB0ZWQuXG4gICAqL1xuICBhc3luYyBtYXJrQ2hpbGRBY2NlcHRlZChhcmdzKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLm1hcmtDaGlsZEFjY2VwdGVkKGFyZ3MpIH1cblxuICAvKipcbiAgICogQWNrbm93bGVkZ2VzIGFuIGV4cGxpY2l0IGxvY2FsIHJlc2NoZWR1bGUuXG4gICAqIEBwYXJhbSB7e2pvYklkOiBzdHJpbmcsIGRlbGF5TXM6IG51bWJlciwgaGFuZG9mZklkPzogc3RyaW5nfX0gYXJncyAtIFJlc2NoZWR1bGUgcmVwb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGFjY2VwdGVkLlxuICAgKi9cbiAgYXN5bmMgbWFya1Jlc2NoZWR1bGVkKGFyZ3MpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUubWFya1Jlc2NoZWR1bGVkKGFyZ3MpIH1cblxuICAvKipcbiAgICogQWNrbm93bGVkZ2VzIGEgZmFpbGVkIGxvY2FsIHBlcmZvcm1hbmNlLlxuICAgKiBAcGFyYW0ge3tqb2JJZDogc3RyaW5nLCBlcnJvcjogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIGhhbmRvZmZJZD86IHN0cmluZ319IGFyZ3MgLSBGYWlsdXJlIHJlcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUm93IHwgbnVsbD59IC0gVHJhbnNpdGlvbi5cbiAgICovXG4gIGFzeW5jIG1hcmtGYWlsZWQoYXJncykgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5tYXJrRmFpbGVkKGFyZ3MpIH1cblxuICAvKipcbiAgICogQ29hbGVzY2VzIGEgZGlzcGF0Y2hlciB3YWtlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB3YWtlKCkgeyB0aGlzLmRpc3BhdGNoZXIud2FrZSgpIH1cblxuICAvKipcbiAgICogV2FpdHMgdW50aWwgY3VycmVudCBsb2NhbCB3b3JrIGhhcyBiZWVuIGFja25vd2xlZGdlZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgYWxsIGN1cnJlbnQgd29yayBpcyBhY2tub3dsZWRnZWQuXG4gICAqL1xuICBhc3luYyB3YWl0Rm9ySWRsZSgpIHsgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLndhaXRGb3JJZGxlKCkgfVxufVxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvbG9jYWwtYWRhcHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxxQkFBcUIsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyw2QkFBNkIsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqRSxPQUFPLDBCQUEwQixNQUFNLHlCQUF5QixDQUFBO0FBQ2hFLE9BQU8sd0JBQXdCLEVBQUUsRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRW5GLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEyQixTQUFRLHFCQUFxQjtJQUMzRTs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLEtBQUssR0FBRyx3QkFBd0IsRUFBRSxFQUFFLGtCQUFrQixFQUFDO1FBQ2pGLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixDQUFDLEVBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUNyRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUM7WUFDeEMsS0FBSztZQUNMLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7U0FDakQsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDZCQUE2QixDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxD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RUFBRSxDQUFBLENBQUMsQ0FBQztDQUM1RCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFja2dyb3VuZEpvYnNBZGFwdGVyIGZyb20gXCIuL2FkYXB0ZXIuanNcIlxuaW1wb3J0IExvY2FsQmFja2dyb3VuZEpvYnNEaXNwYXRjaGVyIGZyb20gXCIuL2xvY2FsLWRpc3BhdGNoZXIuanNcIlxuaW1wb3J0IExvY2FsQmFja2dyb3VuZEpvYlJlZ2lzdHJ5IGZyb20gXCIuL2xvY2FsLWpvYi1yZWdpc3RyeS5qc1wiXG5pbXBvcnQgTG9jYWxCYWNrZ3JvdW5kSm9ic1N0b3JlLCB7bG9jYWxCYWNrZ3JvdW5kSm9ic0Nsb2NrfSBmcm9tIFwiLi9sb2NhbC1zdG9yZS5qc1wiXG5cbi8qKiBEdXJhYmxlIGxvY2FsIFNRTGl0ZSBhZGFwdGVyIHdpdGggYW4gb3duZWQgaW4tcHJvY2VzcyBkaXNwYXRjaGVyLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxCYWNrZ3JvdW5kSm9ic0FkYXB0ZXIgZXh0ZW5kcyBCYWNrZ3JvdW5kSm9ic0FkYXB0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxvY2FsIGFkYXB0ZXIgZm9yIG9uZSBjb25maWd1cmF0aW9uIGFuZCBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBZGFwdGVyIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBPd25pbmcgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkxvY2FsQmFja2dyb3VuZEpvYnNDbG9ja30gW2FyZ3MuY2xvY2tdIC0gSW5qZWN0YWJsZSBjbG9jay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmRhdGFiYXNlSWRlbnRpZmllcl0gLSBMb2NhbCBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGNsb2NrID0gbG9jYWxCYWNrZ3JvdW5kSm9ic0Nsb2NrKCksIGRhdGFiYXNlSWRlbnRpZmllcn0pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jbG9jayA9IGNsb2NrXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgTG9jYWxCYWNrZ3JvdW5kSm9iUmVnaXN0cnkoe2pvYkNsYXNzZXM6IGNvbmZpZ3VyYXRpb24uZ2V0QmFja2dyb3VuZEpvYkNsYXNzZXMoKX0pXG4gICAgdGhpcy5zdG9yZSA9IG5ldyBMb2NhbEJhY2tncm91bmRKb2JzU3RvcmUoe1xuICAgICAgY2xvY2ssXG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgZGF0YWJhc2VJZGVudGlmaWVyLFxuICAgICAgb25Db21taXR0ZWRFbnF1ZXVlOiAoKSA9PiB0aGlzLmRpc3BhdGNoZXIud2FrZSgpXG4gICAgfSlcbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgTG9jYWxCYWNrZ3JvdW5kSm9ic0Rpc3BhdGNoZXIoe2Nsb2NrLCBjb25maWd1cmF0aW9uLCByZWdpc3RyeTogdGhpcy5yZWdpc3RyeSwgc3RvcmU6IHRoaXMuc3RvcmV9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCBsb2NhbCBwZXJzaXN0ZW5jZSBhbmQgZGlzcGF0Y2ggYXJlIHJlYWR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGxvY2FsIGRpc3BhdGNoIGlzIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlUmVhZHkoKSB7IGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5zdGFydCgpIH1cblxuICAvKipcbiAgICogU3RvcHMgbG9jYWwgZGlzcGF0Y2ggZ3JhY2VmdWxseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgZ3JhY2VmdWwgbG9jYWwgc2h1dGRvd24uXG4gICAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIuc3RvcCgpXG4gICAgdGhpcy5zdG9yZS5yZXNldFJlYWRpbmVzcygpXG4gIH1cblxuICAvKipcbiAgICogUmVwb3J0cyBsb2NhbCBkaXNwYXRjaGVyIGhlYWx0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9ic0hlYWx0aD59IC0gTG9jYWwgYWRhcHRlciBoZWFsdGguXG4gICAqL1xuICBhc3luYyBoZWFsdGgoKSB7IHJldHVybiB7cmVhZHk6IHRoaXMuZGlzcGF0Y2hlci5pc1JlYWR5KCl9IH1cblxuICAvKipcbiAgICogUmVjb25jaWxlcyBjb25maWd1cmF0aW9uLWRlcml2ZWQgcXVldWUgY29uY3VycmVuY3kgY2Fwcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcXVldWUgY2FwIHJlY29uY2lsaWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgcmVjb25jaWxlUXVldWVDb25jdXJyZW5jeSgpIHsgYXdhaXQgdGhpcy5zdG9yZS5yZWNvbmNpbGVRdWV1ZUNvbmN1cnJlbmN5KCkgfVxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBvbmUgc3RhdGljYWxseSByZWdpc3RlcmVkIGxvY2FsIGpvYi5cbiAgICogQHBhcmFtIHt7am9iTmFtZTogc3RyaW5nLCBhcmdzOiBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG9wdGlvbnM/OiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfX0gYXJncyAtIEVucXVldWUgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBEdXJhYmxlIGxvY2FsIGpvYiBpZC5cbiAgICovXG4gIGFzeW5jIGVucXVldWUoYXJncykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuICAgIHRoaXMucmVnaXN0cnkucmVzb2x2ZShhcmdzLmpvYk5hbWUpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUuZW5xdWV1ZShhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgb3IgZGV0YWNoZXMgdGhlIGN1cnJlbnQgb3duZXIgb2YgYSBzdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZWR1bGVLZXkgLSBTdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JDYW5jZWxsYXRpb25SZXN1bHQ+fSAtIENhbmNlbGxhdGlvbiByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjYW5jZWxTY2hlZHVsZWQoc2NoZWR1bGVLZXkpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5jYW5jZWxTY2hlZHVsZWQoc2NoZWR1bGVLZXkpXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgb3duZXIgb2YgYSBzdGFibGUgc2NoZWR1bGUga2V5LlxuICAgKiBAcGFyYW0ge3tzY2hlZHVsZUtleTogc3RyaW5nLCBqb2JOYW1lOiBzdHJpbmcsIGFyZ3M6IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Piwgb3B0aW9ucz86IGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9fSBhcmdzIC0gUmVwbGFjZW1lbnQgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iUmVwbGFjZW1lbnRSZXN1bHQ+fSAtIFJlcGxhY2VtZW50IHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHJlcGxhY2VTY2hlZHVsZWQoYXJncykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuICAgIHRoaXMucmVnaXN0cnkucmVzb2x2ZShhcmdzLmpvYk5hbWUpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUucmVwbGFjZVNjaGVkdWxlZChhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHN0YWJsZSBvd25lcnNoaXAgYW5kIG9wdGlvbmFsIHRlcm1pbmFsIGhpc3RvcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlZHVsZUtleSAtIFN0YWJsZSBzY2hlZHVsZSBrZXkuXG4gICAqIEBwYXJhbSB7e2luY2x1ZGVMYXRlc3RUZXJtaW5hbD86IGJvb2xlYW59fSBbb3B0aW9uc10gLSBMb29rdXAgb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iU2NoZWR1bGVkTG9va3VwUmVzdWx0Pn0gLSBOb3JtYWxpemVkIGxvY2FsIGpvYnMuXG4gICAqL1xuICBhc3luYyBnZXRTY2hlZHVsZWRKb2Ioc2NoZWR1bGVLZXksIG9wdGlvbnMpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5nZXRTY2hlZHVsZWRKb2Ioc2NoZWR1bGVLZXksIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBmdXR1cmUgcXVldWVkIHN0YWJsZSBvd25lciBkdWUgd2l0aG91dCByZXBsYWNpbmcgaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlZHVsZUtleSAtIFN0YWJsZSBzY2hlZHVsZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYldha2VSZXN1bHQ+fSAtIEV4YWN0IHdha2UgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgd2FrZVNjaGVkdWxlZChzY2hlZHVsZUtleSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLndha2VTY2hlZHVsZWQoc2NoZWR1bGVLZXkpXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG5leHQgZWxpZ2libGUgbG9jYWwgam9iLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JSb3cgfCBudWxsPn0gLSBOZXh0IGVsaWdpYmxlIGpvYi5cbiAgICovXG4gIGFzeW5jIG5leHRBdmFpbGFibGVKb2IoKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLm5leHRBdmFpbGFibGVKb2IoKSB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBuZXh0IGZ1dHVyZSBsb2NhbCBqb2IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvdyB8IG51bGw+fSAtIE5leHQgZnV0dXJlIGpvYi5cbiAgICovXG4gIGFzeW5jIG5leHRTY2hlZHVsZWRKb2IoKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLm5leHRTY2hlZHVsZWRKb2IoKSB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgbG9jYWwgam9iIGJ5IGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gam9iSWQgLSBKb2IgaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvdyB8IG51bGw+fSAtIFBlcnNpc3RlZCBqb2IuXG4gICAqL1xuICBhc3luYyBnZXRKb2Ioam9iSWQpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUuZ2V0Sm9iKGpvYklkKSB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGxvY2FsIGpvYnMgaW4gaW5zZXJ0aW9uIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JSb3dbXT59IC0gTG9jYWwgam9icy5cbiAgICovXG4gIGFzeW5jIGxpc3RKb2JzKCkgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5saXN0Sm9icygpIH1cblxuICAvKipcbiAgICogQ2xhaW1zIG9uZSBxdWV1ZWQgbG9jYWwgam9iLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYkhhbmRvZmZSZXF1ZXN0fSBhcmdzIC0gQ2xhaW0gcmVxdWVzdC4gQSBzdXBwbGllZCBoYW5kb2ZmIGlkIGlzIHBlcnNpc3RlZCBleGFjdGx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JIYW5kb2ZmIHwgbnVsbD59IC0gSGFuZG9mZi5cbiAgICovXG4gIGFzeW5jIG1hcmtIYW5kZWRPZmYoYXJncykgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5tYXJrSGFuZGVkT2ZmKGFyZ3MpIH1cblxuICAvKipcbiAgICogRmluZHMgYWN0aXZlIGxvY2FsIGhhbmRvZmZzIG93bmVkIGJ5IG9uZSB3b3JrZXIuXG4gICAqIEBwYXJhbSB7e3dvcmtlcklkOiBzdHJpbmd9fSBhcmdzIC0gV29ya2VyIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7am9iSWQ6IHN0cmluZywgaGFuZG9mZklkOiBzdHJpbmd9Pj59IC0gQWN0aXZlIHdvcmtlciBoYW5kb2Zmcy5cbiAgICovXG4gIGFzeW5jIGhhbmRlZE9mZkpvYnNGb3JXb3JrZXIoYXJncykgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5oYW5kZWRPZmZKb2JzRm9yV29ya2VyKGFyZ3MpIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBleGFjdCBhY3RpdmUgbG9jYWwgaGFuZG9mZiB0byB0aGUgcXVldWUuXG4gICAqIEBwYXJhbSB7e2pvYklkOiBzdHJpbmcsIGhhbmRvZmZJZDogc3RyaW5nfX0gYXJncyAtIEhhbmRvZmYgcmVsZWFzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgdGhlIGZlbmNlZCByZWxlYXNlLlxuICAgKi9cbiAgYXN5bmMgbWFya1JldHVybmVkVG9RdWV1ZShhcmdzKSB7IGF3YWl0IHRoaXMuc3RvcmUubWFya1JldHVybmVkVG9RdWV1ZShhcmdzKSB9XG5cbiAgLyoqXG4gICAqIEFja25vd2xlZGdlcyBzdWNjZXNzZnVsIGxvY2FsIGpvYiBjb21wbGV0aW9uLlxuICAgKiBAcGFyYW0ge3tqb2JJZDogc3RyaW5nLCBoYW5kb2ZmSWQ/OiBzdHJpbmd9fSBhcmdzIC0gQ29tcGxldGlvbiByZXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgYWNjZXB0ZWQuXG4gICAqL1xuICBhc3luYyBtYXJrQ29tcGxldGVkKGFyZ3MpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUubWFya0NvbXBsZXRlZChhcmdzKSB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgcG9vbGVkLWNoaWxkIGFjY2VwdGFuY2UgZXZpZGVuY2UgZm9yIGEgbG9jYWwgaGFuZG9mZi5cbiAgICogQHBhcmFtIHt7am9iSWQ6IHN0cmluZywgaGFuZG9mZklkPzogc3RyaW5nLCByZWNlaXZlZEF0TXM/OiBudW1iZXIsIHN0YXJ0ZWRBdE1zPzogbnVtYmVyLCBjaGlsZEluc3RhbmNlSWQ/OiBzdHJpbmcsIGNoaWxkUGlkPzogbnVtYmVyfX0gYXJncyAtIEFjY2VwdGFuY2UgcmVwb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGFjY2VwdGVkLlxuICAgKi9cbiAgYXN5bmMgbWFya0NoaWxkQWNjZXB0ZWQoYXJncykgeyByZXR1cm4gYXdhaXQgdGhpcy5zdG9yZS5tYXJrQ2hpbGRBY2NlcHRlZChhcmdzKSB9XG5cbiAgLyoqXG4gICAqIEFja25vd2xlZGdlcyBhbiBleHBsaWNpdCBsb2NhbCByZXNjaGVkdWxlLlxuICAgKiBAcGFyYW0ge3tqb2JJZDogc3RyaW5nLCBkZWxheU1zOiBudW1iZXIsIGhhbmRvZmZJZD86IHN0cmluZ319IGFyZ3MgLSBSZXNjaGVkdWxlIHJlcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBhY2NlcHRlZC5cbiAgICovXG4gIGFzeW5jIG1hcmtSZXNjaGVkdWxlZChhcmdzKSB7IHJldHVybiBhd2FpdCB0aGlzLnN0b3JlLm1hcmtSZXNjaGVkdWxlZChhcmdzKSB9XG5cbiAgLyoqXG4gICAqIEFja25vd2xlZGdlcyBhIGZhaWxlZCBsb2NhbCBwZXJmb3JtYW5jZS5cbiAgICogQHBhcmFtIHt7am9iSWQ6IHN0cmluZywgZXJyb3I6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBoYW5kb2ZmSWQ/OiBzdHJpbmd9fSBhcmdzIC0gRmFpbHVyZSByZXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYlJvdyB8IG51bGw+fSAtIFRyYW5zaXRpb24uXG4gICAqL1xuICBhc3luYyBtYXJrRmFpbGVkKGFyZ3MpIHsgcmV0dXJuIGF3YWl0IHRoaXMuc3RvcmUubWFya0ZhaWxlZChhcmdzKSB9XG5cbiAgLyoqXG4gICAqIENvYWxlc2NlcyBhIGRpc3BhdGNoZXIgd2FrZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgd2FrZSgpIHsgdGhpcy5kaXNwYXRjaGVyLndha2UoKSB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIHVudGlsIGN1cnJlbnQgbG9jYWwgd29yayBoYXMgYmVlbiBhY2tub3dsZWRnZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIGFsbCBjdXJyZW50IHdvcmsgaXMgYWNrbm93bGVkZ2VkLlxuICAgKi9cbiAgYXN5bmMgd2FpdEZvcklkbGUoKSB7IGF3YWl0IHRoaXMuZGlzcGF0Y2hlci53YWl0Rm9ySWRsZSgpIH1cbn1cbiJdfQ==
@@ -1,7 +1,9 @@
1
1
  import TableData from "../database/table-data/index.js";
2
2
  export declare const LOCAL_BACKGROUND_JOBS_TABLE = "velocious_local_background_jobs";
3
3
  export declare const LOCAL_BACKGROUND_JOB_CONCURRENCY_TABLE = "velocious_local_background_job_concurrency";
4
+ export declare const LOCAL_BACKGROUND_JOB_SCHEDULE_KEYS_TABLE = "velocious_local_background_job_schedule_keys";
4
5
  export declare const LOCAL_BACKGROUND_JOBS_INDEX_NAMES: string[];
6
+ export declare const LOCAL_BACKGROUND_JOB_SCHEDULE_KEYS_INDEX_NAMES: string[];
5
7
  /**
6
8
  * Creates the production clock used by local dispatch.
7
9
  * @returns {import("./types.js").LocalBackgroundJobsClock} - Production clock.
@@ -57,7 +59,8 @@ export default class LocalBackgroundJobsStore {
57
59
  */
58
60
  _ensureReadyWithDb(db: import("../database/drivers/base.js").default): Promise<void>;
59
61
  /**
60
- * Creates or repairs version-one tables and indexes.
62
+ * Creates or upgrades the versioned local tables and indexes without
63
+ * rebuilding persisted queue data.
61
64
  * @param {import("../database/drivers/base.js").default} db - Local SQLite connection.
62
65
  * @returns {Promise<boolean>} - Whether schema state changed.
63
66
  */
@@ -85,6 +88,11 @@ export default class LocalBackgroundJobsStore {
85
88
  * @returns {TableData} - Concurrency counter table definition.
86
89
  */
87
90
  _concurrencyTableData(): TableData;
91
+ /**
92
+ * Builds the stable schedule-owner table definition.
93
+ * @returns {TableData} - Stable owner table definition.
94
+ */
95
+ _scheduleKeysTableData(): TableData;
88
96
  /**
89
97
  * Rejects an incompatible current-version table rather than rebuilding data.
90
98
  * @param {import("../database/drivers/base.js").default} db - Local SQLite connection.
@@ -102,14 +110,23 @@ export default class LocalBackgroundJobsStore {
102
110
  /**
103
111
  * Checks whether the current local schema version is recorded.
104
112
  * @param {import("../database/drivers/base.js").default} db - Connection.
105
- * @returns {Promise<boolean>} - Whether version one is recorded.
113
+ * @param {string} version - Local schema version.
114
+ * @returns {Promise<boolean>} - Whether the version is recorded.
106
115
  */
107
- _hasMigration(db: import("../database/drivers/base.js").default): Promise<boolean>;
116
+ _hasMigration(db: import("../database/drivers/base.js").default, version: string): Promise<boolean>;
117
+ /**
118
+ * Records one local schema version after its additive changes are present.
119
+ * @param {import("../database/drivers/base.js").default} db - Connection.
120
+ * @param {string} version - Local schema version.
121
+ * @returns {Promise<void>} - Resolves after recording.
122
+ */
123
+ _recordMigration(db: import("../database/drivers/base.js").default, version: string): Promise<void>;
108
124
  /**
109
125
  * Builds the scoped migration key.
126
+ * @param {string} version - Local schema version.
110
127
  * @returns {string} - Scoped migration key.
111
128
  */
112
- _migrationKey(): string;
129
+ _migrationKey(version: string): string;
113
130
  /**
114
131
  * Enqueues a local job in the caller's active transaction when present.
115
132
  * @param {object} args - Enqueue request.
@@ -123,6 +140,43 @@ export default class LocalBackgroundJobsStore {
123
140
  args: Array<ReturnType<typeof JSON.parse>>;
124
141
  options?: import("./types.js").BackgroundJobOptions;
125
142
  }): Promise<string>;
143
+ /**
144
+ * Replaces the queued owner of a stable schedule key with a new local job.
145
+ * A handed-off owner remains runnable but is detached from future ownership.
146
+ * @param {object} args - Replacement request.
147
+ * @param {string} args.scheduleKey - Stable logical schedule key.
148
+ * @param {string} args.jobName - Registered job name.
149
+ * @param {Array<ReturnType<typeof JSON.parse>>} args.args - Serialized job arguments.
150
+ * @param {import("./types.js").BackgroundJobOptions} [args.options] - Job options.
151
+ * @returns {Promise<import("./types.js").BackgroundJobReplacementResult>} - Replacement result.
152
+ */
153
+ replaceScheduled({ scheduleKey, jobName, args, options }: {
154
+ scheduleKey: string;
155
+ jobName: string;
156
+ args: Array<ReturnType<typeof JSON.parse>>;
157
+ options?: import("./types.js").BackgroundJobOptions;
158
+ }): Promise<import("./types.js").BackgroundJobReplacementResult>;
159
+ /**
160
+ * Cancels a queued stable owner or detaches an active handoff truthfully.
161
+ * @param {string} scheduleKey - Stable logical schedule key.
162
+ * @returns {Promise<import("./types.js").BackgroundJobCancellationResult>} - Cancellation result.
163
+ */
164
+ cancelScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobCancellationResult>;
165
+ /**
166
+ * Reads stable ownership and optional latest terminal history in one transaction.
167
+ * @param {string} scheduleKey - Stable logical schedule key.
168
+ * @param {{includeLatestTerminal?: boolean}} [options] - Lookup options.
169
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized local jobs.
170
+ */
171
+ getScheduledJob(scheduleKey: string, { includeLatestTerminal }?: {
172
+ includeLatestTerminal?: boolean;
173
+ }): Promise<import("./types.js").BackgroundJobScheduledLookupResult>;
174
+ /**
175
+ * Moves only a future queued stable owner to the current time.
176
+ * @param {string} scheduleKey - Stable logical schedule key.
177
+ * @returns {Promise<import("./types.js").BackgroundJobWakeResult>} - Exact wake outcome.
178
+ */
179
+ wakeScheduled(scheduleKey: string): Promise<import("./types.js").BackgroundJobWakeResult>;
126
180
  /**
127
181
  * Serializes matching in-process deduplication checks through commit while
128
182
  * leaving unrelated job identities independent.
@@ -146,9 +200,11 @@ export default class LocalBackgroundJobsStore {
146
200
  * Inserts one prepared local job row and its concurrency metadata.
147
201
  * @param {import("../database/drivers/base.js").default} db - Local SQLite connection.
148
202
  * @param {import("./types.js").PreparedLocalBackgroundJob} preparedJob - Prepared row data.
203
+ * @param {string | null} [scheduleKey] - Stable schedule history key.
204
+ * @param {number | null} [scheduleOrder] - Monotonic stable ownership order.
149
205
  * @returns {Promise<void>} - Resolves after insertion.
150
206
  */
151
- _insertPreparedJob(db: import("../database/drivers/base.js").default, preparedJob: import("./types.js").PreparedLocalBackgroundJob): Promise<void>;
207
+ _insertPreparedJob(db: import("../database/drivers/base.js").default, preparedJob: import("./types.js").PreparedLocalBackgroundJob, scheduleKey?: string | null, scheduleOrder?: number | null): Promise<void>;
152
208
  /**
153
209
  * Reconciles configured queue-derived caps and durable counters.
154
210
  * @returns {Promise<void>} - Resolves after reconciliation.
@@ -344,6 +400,65 @@ export default class LocalBackgroundJobsStore {
344
400
  * @returns {Promise<import("./types.js").BackgroundJobRow | null>} - Persisted row.
345
401
  */
346
402
  _getJob(db: import("../database/drivers/base.js").default, jobId: string): Promise<import("./types.js").BackgroundJobRow | null>;
403
+ /**
404
+ * Reads the job currently named by one stable owner row.
405
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
406
+ * @param {string} scheduleKey - Validated stable schedule key.
407
+ * @returns {Promise<import("./types.js").BackgroundJobRow | null>} - Normalized owner job.
408
+ */
409
+ _scheduledOwnerJob(db: import("../database/drivers/base.js").default, scheduleKey: string): Promise<import("./types.js").BackgroundJobRow | null>;
410
+ /**
411
+ * Assigns the next ownership order after SQLite write serialization is held.
412
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
413
+ * @param {string} scheduleKey - Validated stable schedule key.
414
+ * @returns {Promise<number>} - Next monotonic ownership order.
415
+ */
416
+ _nextScheduleOrder(db: import("../database/drivers/base.js").default, scheduleKey: string): Promise<number>;
417
+ /**
418
+ * Builds a stable-schedule lookup exclusively from normalized local jobs.
419
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
420
+ * @param {object} args - Lookup options.
421
+ * @param {boolean} args.includeLatestTerminal - Whether terminal history is requested.
422
+ * @param {string} args.scheduleKey - Validated stable schedule key.
423
+ * @returns {Promise<import("./types.js").BackgroundJobScheduledLookupResult>} - Normalized local jobs.
424
+ */
425
+ _scheduledJobLookup(db: import("../database/drivers/base.js").default, { includeLatestTerminal, scheduleKey }: {
426
+ includeLatestTerminal: boolean;
427
+ scheduleKey: string;
428
+ }): Promise<import("./types.js").BackgroundJobScheduledLookupResult>;
429
+ /**
430
+ * Releases ownership only when the key still points at the expected job.
431
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
432
+ * @param {object} args - Ownership identity.
433
+ * @param {string | null} args.jobId - Expected owner job id, or null for a dangling owner.
434
+ * @param {string} args.scheduleKey - Stable schedule key.
435
+ * @returns {Promise<void>} - Resolves when deleted or already superseded.
436
+ */
437
+ _releaseScheduleOwnership(db: import("../database/drivers/base.js").default, { jobId, scheduleKey }: {
438
+ jobId: string | null;
439
+ scheduleKey: string;
440
+ }): Promise<void>;
441
+ /**
442
+ * Releases a terminal job's stable ownership when still current.
443
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
444
+ * @param {import("./types.js").BackgroundJobRow} job - Terminal job.
445
+ * @returns {Promise<void>} - Resolves when deleted or not applicable.
446
+ */
447
+ _releaseScheduleOwnershipForJob(db: import("../database/drivers/base.js").default, job: import("./types.js").BackgroundJobRow): Promise<void>;
448
+ /**
449
+ * Acquires SQLite's transaction write serialization before reading a stable
450
+ * owner. A zero-row update still establishes the write boundary for a new key.
451
+ * @param {import("../database/drivers/base.js").default} db - Database connection.
452
+ * @param {string} scheduleKey - Validated stable schedule key.
453
+ * @returns {Promise<void>} - Resolves after write serialization is acquired.
454
+ */
455
+ _lockScheduleKey(db: import("../database/drivers/base.js").default, scheduleKey: string): Promise<void>;
456
+ /**
457
+ * Registers the local dispatch poke on the surrounding transaction commit.
458
+ * @param {import("../database/drivers/base.js").default} db - Transaction connection.
459
+ * @returns {Promise<void>} - Resolves after registration.
460
+ */
461
+ _wakeDispatcherAfterCommit(db: import("../database/drivers/base.js").default): Promise<void>;
347
462
  /**
348
463
  * Normalizes one raw local database row.
349
464
  * @param {Record<string, ReturnType<typeof JSON.parse>>} row - Raw row.