@blokjs/trigger-worker 0.6.17 → 0.6.19

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 (37) hide show
  1. package/dist/WorkerTrigger.d.ts +27 -3
  2. package/dist/WorkerTrigger.js +168 -26
  3. package/dist/adapters/KafkaAdapter.d.ts +5 -0
  4. package/dist/adapters/KafkaAdapter.js +12 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +2 -2
  7. package/package.json +5 -4
  8. package/CHANGELOG.md +0 -22
  9. package/__tests__/integration/nats-adapter.real-nats.test.ts +0 -116
  10. package/__tests__/integration/pgboss-adapter.real-pg.test.ts +0 -164
  11. package/__tests__/integration/rabbitmq-adapter.real-rabbitmq.test.ts +0 -179
  12. package/__tests__/integration/sqs-adapter.real-sqs.test.ts +0 -228
  13. package/src/WorkerTrigger.test.ts +0 -540
  14. package/src/WorkerTrigger.ts +0 -784
  15. package/src/adapters/BullMQAdapter.ts +0 -296
  16. package/src/adapters/InMemoryAdapter.ts +0 -280
  17. package/src/adapters/KafkaAdapter.ts +0 -277
  18. package/src/adapters/NATSAdapter.ts +0 -454
  19. package/src/adapters/PgBossAdapter.ts +0 -293
  20. package/src/adapters/RabbitMQAdapter.ts +0 -285
  21. package/src/adapters/RedisStreamsAdapter.ts +0 -286
  22. package/src/adapters/SQSAdapter.ts +0 -306
  23. package/src/adapters/factory.test.ts +0 -89
  24. package/src/adapters/factory.ts +0 -111
  25. package/src/adapters/new-adapters.test.ts +0 -130
  26. package/src/index.ts +0 -94
  27. package/template/.env.example +0 -13
  28. package/template/package.json +0 -45
  29. package/template/src/Nodes.ts +0 -10
  30. package/template/src/Workflows.ts +0 -8
  31. package/template/src/index.ts +0 -41
  32. package/template/src/runner/WorkerServer.ts +0 -34
  33. package/template/src/runner/types/Workflows.ts +0 -7
  34. package/template/src/workflows/jobs/process-job.ts +0 -47
  35. package/template/tsconfig.json +0 -31
  36. package/template/vitest.config.ts +0 -39
  37. package/tsconfig.json +0 -32
@@ -16,6 +16,11 @@
16
16
  * - **Stats**: KafkaJS exposes consumer-group lag via its admin
17
17
  * client; the lag count is reported as `waiting`. Other stats
18
18
  * are tracked locally per consumer.
19
+ * - **Concurrency**: the `concurrency` field maps to KafkaJS's
20
+ * `partitionsConsumedConcurrently` — it caps how many partitions
21
+ * are processed in parallel, so it's bounded by the topic's
22
+ * partition count. A single-partition topic is effectively serial
23
+ * regardless of the configured value.
19
24
  *
20
25
  * Requires `kafkajs` as a peer dependency:
21
26
  *
@@ -109,6 +114,12 @@ export class KafkaAdapter {
109
114
  const stats = this.stats.get(config.queue);
110
115
  await consumer.run({
111
116
  autoCommit: config.ack !== false,
117
+ // F25 — honor the documented `concurrency` knob. Kafka processes
118
+ // messages serially per partition by default; `partitionsConsumedConcurrently`
119
+ // is KafkaJS's native parallelism cap (bounded by partition count).
120
+ // Without this the field was silently ignored — validated, accepted,
121
+ // even logged at startup, but with zero runtime effect.
122
+ partitionsConsumedConcurrently: Math.max(1, config.concurrency ?? 1),
112
123
  eachMessage: async ({ message, }) => {
113
124
  const payloadString = message.value?.toString("utf8") ?? "";
114
125
  let data;
@@ -233,4 +244,4 @@ export class KafkaAdapter {
233
244
  };
234
245
  }
235
246
  }
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2Fma2FBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL0thZmthQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFHSCxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQXNDbEMsTUFBTSxPQUFPLFlBQVk7SUFDZixRQUFRLEdBQUcsT0FBZ0IsQ0FBQztJQUNwQixNQUFNLENBQWM7SUFDckMsdUdBQXVHO0lBQy9GLEtBQUssR0FBUSxJQUFJLENBQUM7SUFDbEIsTUFBTSxHQUFrQixFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDakQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0QsWUFBWSxNQUE2QjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ2IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxhQUFhO1lBQzFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3JFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3JFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFH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QUFhO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQztnQkFDSixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxtRUFBbUU7Z0JBQ25FLGtFQUFrRTtnQkFDbEUsNERBQTREO2dCQUM1RCxnQ0FBZ0M7Z0JBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDYixDQUFDO1FBQ0YsQ0FBQztRQUNELE9BQU87WUFDTixPQUFPO1lBQ1AsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM3QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsT0FBTyxFQUFFLENBQUM7U0FDVixDQUFDO0lBQ0gsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLYWZrYUFkYXB0ZXIg4oCUIHYwLjcgUFIgNSDigJQgV29ya2VyIGFkYXB0ZXIgYmFja2VkIGJ5IEFwYWNoZSBLYWZrYSB2aWFcbiAqIGBrYWZrYWpzYC4gQ29uc3VtZXMgZnJvbSBhIHRvcGljICh0aGUgYHF1ZXVlYCBmaWVsZCkgd2l0aCBhXG4gKiBjb25zdW1lci1ncm91cCBpZGVudGlmaWVyOyBwcm9kdWNlcyB2aWEgdGhlIHNhbWUgY2xpZW50LlxuICpcbiAqIEthZmthIGlzIGZ1bmRhbWVudGFsbHkgYSBzdHJlYW1pbmcgcGxhdGZvcm0g4oCUIG5vdCBhIHF1ZXVlIOKAlCBzbyBhXG4gKiBmZXcgc2VtYW50aWNzIGRpZmZlciBmcm9tIEJ1bGxNUS9TUVMvUmFiYml0TVE6XG4gKlxuICogICAtICoqT3JkZXJpbmcqKjogcGVyLXBhcnRpdGlvbiwgbm90IHBlci10b3BpYy4gU2V0IHRoZSBwYXJ0aXRpb25cbiAqICAgICBrZXkgdmlhIHRoZSBgZGVkdXBJZGAgZmllbGQgb24gYGFkZEpvYmAgdG8ga2VlcCByZWxhdGVkXG4gKiAgICAgbWVzc2FnZXMgb24gdGhlIHNhbWUgcGFydGl0aW9uLlxuICogICAtICoqUmV0cmllcyoqOiBLYWZrYSBkb2Vzbid0IGhhdmUgYSBicm9rZXItc2lkZSByZXRyeSBjb25jZXB0LlxuICogICAgIFRoZSBhZGFwdGVyIHJlLXRocm93cyBvbiBoYW5kbGVyIGZhaWx1cmU7IG9mZnNldCBjb21taXQgaXNcbiAqICAgICBzdXBwcmVzc2VkIHNvIHRoZSBjb25zdW1lciByZS1wb2xscyB0aGUgbWVzc2FnZSBvbiB0aGUgbmV4dFxuICogICAgIGN5Y2xlLiBGb3IgcmVhbCByZXRyeSBzZW1hbnRpY3MsIGxheWVyIGEgZGVhZC1sZXR0ZXIgdG9waWMuXG4gKiAgIC0gKipTdGF0cyoqOiBLYWZrYUpTIGV4cG9zZXMgY29uc3VtZXItZ3JvdXAgbGFnIHZpYSBpdHMgYWRtaW5cbiAqICAgICBjbGllbnQ7IHRoZSBsYWcgY291bnQgaXMgcmVwb3J0ZWQgYXMgYHdhaXRpbmdgLiBPdGhlciBzdGF0c1xuICogICAgIGFyZSB0cmFja2VkIGxvY2FsbHkgcGVyIGNvbnN1bWVyLlxuICpcbiAqIFJlcXVpcmVzIGBrYWZrYWpzYCBhcyBhIHBlZXIgZGVwZW5kZW5jeTpcbiAqXG4gKiAgICAgYnVuIGFkZCBrYWZrYWpzXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIChyZWFkIGF0IGFkYXB0ZXIgY29uc3RydWN0aW9uKTpcbiAqICAgLSBgS0FGS0FfQlJPS0VSU2AgICAgICAgICAgIOKAlCBjb21tYS1zZXBhcmF0ZWQgbGlzdCAoZGVmYXVsdCBgbG9jYWxob3N0OjkwOTJgKS5cbiAqICAgLSBgS0FGS0FfQ0xJRU5UX0lEYCAgICAgICAgIOKAlCBjbGllbnQuaWQgKGRlZmF1bHQgYFwiYmxvay13b3JrZXJcImApLlxuICogICAtIGBLQUZLQV9TQVNMX1VTRVJOQU1FYCAgICAg4oCUIFNBU0wvUExBSU4gdXNlcm5hbWUgKG9wdGlvbmFsKS5cbiAqICAgLSBgS0FGS0FfU0FTTF9QQVNTV09SRGAgICAgIOKAlCBTQVNML1BMQUlOIHBhc3N3b3JkIChvcHRpb25hbCkuXG4gKiAgIC0gYEtBRktBX1NTTGAgICAgICAgICAgICAgICDigJQgd2hlbiBgXCJ0cnVlXCJgLCBlbmFibGUgVExTLlxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya2VyVHJpZ2dlck9wdHMgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBZGFwdGVyLCBXb3JrZXJKb2IsIFdvcmtlclF1ZXVlU3RhdHMgfSBmcm9tIFwiLi4vV29ya2VyVHJpZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEthZmthQ29uZmlnIHtcblx0YnJva2Vyczogc3RyaW5nW107XG5cdGNsaWVudElkOiBzdHJpbmc7XG5cdHNhc2xVc2VybmFtZT86IHN0cmluZztcblx0c2FzbFBhc3N3b3JkPzogc3RyaW5nO1xuXHRzc2w6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBLYWZrYUpzSGFuZGxlIHtcblx0cHJvZHVjZXI/OiB7XG5cdFx0Y29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRkaXNjb25uZWN0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdHNlbmQ6IChhcmdzOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+O1xuXHR9O1xuXHRjb25zdW1lcnM6IE1hcDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0ZGlzY29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRcdHN0b3A6ICgpID0+IFByb21pc2U8dm9pZD47XG5cdFx0XHRydW46IChvcHRzOiB1bmtub3duKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdH1cblx0Pjtcblx0YWRtaW4/OiB7XG5cdFx0Y29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRkaXNjb25uZWN0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdGZldGNoVG9waWNPZmZzZXRzOiAodG9waWM6IHN0cmluZykgPT4gUHJvbWlzZTxBcnJheTx7IHBhcnRpdGlvbjogbnVtYmVyOyBvZmZzZXQ6IHN0cmluZyB9Pj47XG5cdH07XG59XG5cbmludGVyZmFjZSBRdWV1ZVN0YXRzQ291bnRlcnMge1xuXHRjb21wbGV0ZWQ6IG51bWJlcjtcblx0ZmFpbGVkOiBudW1iZXI7XG5cdGFjdGl2ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgS2Fma2FBZGFwdGVyIGltcGxlbWVudHMgV29ya2VyQWRhcHRlciB7XG5cdHJlYWRvbmx5IHByb3ZpZGVyID0gXCJrYWZrYVwiIGFzIGNvbnN0O1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogS2Fma2FDb25maWc7XG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueToga2Fma2FqcydzIGV4cG9ydGVkIGBLYWZrYWAgY29uc3RydWN0b3IgaXMgbG9vc2VseSB0eXBlZC5cblx0cHJpdmF0ZSBrYWZrYTogYW55ID0gbnVsbDtcblx0cHJpdmF0ZSBoYW5kbGU6IEthZmthSnNIYW5kbGUgPSB7IGNvbnN1bWVyczogbmV3IE1hcCgpIH07XG5cdHByaXZhdGUgY29ubmVjdGVkID0gZmFsc2U7XG5cdHByaXZhdGUgc3RhdHM6IE1hcDxzdHJpbmcsIFF1ZXVlU3RhdHNDb3VudGVycz4gPSBuZXcgTWFwKCk7XG5cblx0Y29uc3RydWN0b3IoY29uZmlnPzogUGFydGlhbDxLYWZrYUNvbmZpZz4pIHtcblx0XHR0aGlzLmNvbmZpZyA9IHtcblx0XHRcdGJyb2tlcnM6IGNvbmZpZz8uYnJva2VycyA/PyAocHJvY2Vzcy5lbnYuS0FGS0FfQlJPS0VSUyA/PyBcImxvY2FsaG9zdDo5MDkyXCIpLnNwbGl0KFwiLFwiKS5tYXAoKHMpID0+IHMudHJpbSgpKSxcblx0XHRcdGNsaWVudElkOiBjb25maWc/LmNsaWVudElkID8/IHByb2Nlc3MuZW52LktBRktBX0NMSUVOVF9JRCA/PyBcImJsb2std29ya2VyXCIsXG5cdFx0XHRzYXNsVXNlcm5hbWU6IGNvbmZpZz8uc2FzbFVzZXJuYW1lID8/IHByb2Nlc3MuZW52LktBRktBX1NBU0xfVVNFUk5BTUUsXG5cdFx0XHRzYXNsUGFzc3dvcmQ6IGNvbmZpZz8uc2FzbFBhc3N3b3JkID8/IHByb2Nlc3MuZW52LktBRktBX1NBU0xfUEFTU1dPUkQsXG5cdFx0XHRzc2w6IGNvbmZpZz8uc3NsID8/IHByb2Nlc3MuZW52LktBRktBX1NTTCA9PT0gXCJ0cnVlXCIsXG5cdFx0fTtcblx0fVxuXG5cdGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuY29ubmVjdGVkKSByZXR1cm47XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueToga2Fma2FqcyBpcyBhIHJ1bnRpbWUtbG9hZGVkIHBlZXIgZGVwLlxuXHRcdFx0Y29uc3Qga2Fma2FqczogYW55ID0gYXdhaXQgaW1wb3J0KFwia2Fma2Fqc1wiKTtcblx0XHRcdGNvbnN0IHNhc2wgPVxuXHRcdFx0XHR0aGlzLmNvbmZpZy5zYXNsVXNlcm5hbWUgJiYgdGhpcy5jb25maWcuc2FzbFBhc3N3b3JkXG5cdFx0XHRcdFx0PyB7IG1lY2hhbmlzbTogXCJwbGFpblwiLCB1c2VybmFtZTogdGhpcy5jb25maWcuc2FzbFVzZXJuYW1lLCBwYXNzd29yZDogdGhpcy5jb25maWcuc2FzbFBhc3N3b3JkIH1cblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMua2Fma2EgPSBuZXcga2Fma2Fqcy5LYWZrYSh7XG5cdFx0XHRcdGNsaWVudElkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcblx0XHRcdFx0YnJva2VyczogdGhpcy5jb25maWcuYnJva2Vycyxcblx0XHRcdFx0c3NsOiB0aGlzLmNvbmZpZy5zc2wsXG5cdFx0XHRcdHNhc2wsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuaGFuZGxlLnByb2R1Y2VyID0gdGhpcy5rYWZrYS5wcm9kdWNlcigpO1xuXHRcdFx0YXdhaXQgdGhpcy5oYW5kbGUucHJvZHVjZXI/LmNvbm5lY3QoKTtcblx0XHRcdHRoaXMuaGFuZGxlLmFkbWluID0gdGhpcy5rYWZrYS5hZG1pbigpO1xuXHRcdFx0YXdhaXQgdGhpcy5oYW5kbGUuYWRtaW4/LmNvbm5lY3QoKTtcblx0XHRcdHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YFtibG9rXVtrYWZrYV0gY29ubmVjdCBmYWlsZWQ6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX0uIEluc3RhbGwga2Fma2FqcyBhcyBhIHBlZXIgZGVwZW5kZW5jeTogYnVuIGFkZCBrYWZrYWpzYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCBbLCBjb25zdW1lcl0gb2YgdGhpcy5oYW5kbGUuY29uc3VtZXJzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBjb25zdW1lci5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogaWdub3JlICovXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaGFuZGxlLmNvbnN1bWVycy5jbGVhcigpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLmhhbmRsZS5wcm9kdWNlcj8uZGlzY29ubmVjdCgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0LyogaWdub3JlICovXG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLmhhbmRsZS5hZG1pbj8uZGlzY29ubmVjdCgpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0LyogaWdub3JlICovXG5cdFx0fVxuXHRcdHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG5cdH1cblxuXHRhc3luYyBwcm9jZXNzKGNvbmZpZzogV29ya2VyVHJpZ2dlck9wdHMsIGhhbmRsZXI6IChqb2I6IFdvcmtlckpvYikgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIltibG9rXVtrYWZrYV0gbm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuXCIpO1xuXHRcdGNvbnN0IGdyb3VwSWQgPSBjb25maWcuY29uc3VtZXJHcm91cCA/PyBgJHtjb25maWcucXVldWV9LWdyb3VwYDtcblx0XHRjb25zdCBjb25zdW1lciA9IHRoaXMua2Fma2EuY29uc3VtZXIoeyBncm91cElkIH0pO1xuXHRcdGF3YWl0IGNvbnN1bWVyLmNvbm5lY3QoKTtcblx0XHRhd2FpdCBjb25zdW1lci5zdWJzY3JpYmUoeyB0b3BpYzogY29uZmlnLnF1ZXVlLCBmcm9tQmVnaW5uaW5nOiBjb25maWcuZnJvbUJlZ2lubmluZyA9PT0gdHJ1ZSB9KTtcblx0XHR0aGlzLmhhbmRsZS5jb25zdW1lcnMuc2V0KGNvbmZpZy5xdWV1ZSwgY29uc3VtZXIpO1xuXHRcdHRoaXMuc3RhdHMuc2V0KGNvbmZpZy5xdWV1ZSwgeyBjb21wbGV0ZWQ6IDAsIGZhaWxlZDogMCwgYWN0aXZlOiAwIH0pO1xuXHRcdGNvbnN0IHN0YXRzID0gdGhpcy5zdGF0cy5nZXQoY29uZmlnLnF1ZXVlKSBhcyBRdWV1ZVN0YXRzQ291bnRlcnM7XG5cblx0XHRhd2FpdCBjb25zdW1lci5ydW4oe1xuXHRcdFx0YXV0b0NvbW1pdDogY29uZmlnLmFjayAhPT0gZmFsc2UsXG5cdFx0XHRlYWNoTWVzc2FnZTogYXN5bmMgKHtcblx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdH06IHtcblx0XHRcdFx0bWVzc2FnZTogeyBrZXk/OiBCdWZmZXI7IHZhbHVlPzogQnVmZmVyOyBvZmZzZXQ6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBCdWZmZXI+IH07XG5cdFx0XHR9KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBheWxvYWRTdHJpbmcgPSBtZXNzYWdlLnZhbHVlPy50b1N0cmluZyhcInV0ZjhcIikgPz8gXCJcIjtcblx0XHRcdFx0bGV0IGRhdGE6IHVua25vd247XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZGF0YSA9IHBheWxvYWRTdHJpbmcubGVuZ3RoID4gMCA/IEpTT04ucGFyc2UocGF5bG9hZFN0cmluZykgOiBudWxsO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRkYXRhID0gcGF5bG9hZFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRcdGlmIChtZXNzYWdlLmhlYWRlcnMpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhtZXNzYWdlLmhlYWRlcnMpKSBoZWFkZXJzW2tdID0gdj8udG9TdHJpbmcoXCJ1dGY4XCIpID8/IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgam9iOiBXb3JrZXJKb2IgPSB7XG5cdFx0XHRcdFx0aWQ6IG1lc3NhZ2Uua2V5Py50b1N0cmluZyhcInV0ZjhcIikgPz8gYCR7Y29uZmlnLnF1ZXVlfToke21lc3NhZ2Uub2Zmc2V0fWAsXG5cdFx0XHRcdFx0ZGF0YSxcblx0XHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRcdHF1ZXVlOiBjb25maWcucXVldWUsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IGNvbmZpZy5wcmlvcml0eSA/PyAwLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiAwLFxuXHRcdFx0XHRcdG1heFJldHJpZXM6IGNvbmZpZy5yZXRyaWVzID8/IDAsXG5cdFx0XHRcdFx0Y3JlYXRlZEF0OiBuZXcgRGF0ZShOdW1iZXIucGFyc2VJbnQobWVzc2FnZS50aW1lc3RhbXAsIDEwKSksXG5cdFx0XHRcdFx0dGltZW91dDogY29uZmlnLnRpbWVvdXQsXG5cdFx0XHRcdFx0cmF3OiBtZXNzYWdlLFxuXHRcdFx0XHRcdGNvbXBsZXRlOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRzdGF0cy5jb21wbGV0ZWQgKz0gMTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGZhaWw6IGFzeW5jIChfZXJyOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0c3RhdHMuZmFpbGVkICs9IDE7XG5cdFx0XHRcdFx0XHR0aHJvdyBfZXJyO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHRcdHN0YXRzLmFjdGl2ZSArPSAxO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIoam9iKTtcblx0XHRcdFx0XHRzdGF0cy5jb21wbGV0ZWQgKz0gMTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0c3RhdHMuZmFpbGVkICs9IDE7XG5cdFx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdHN0YXRzLmFjdGl2ZSA9IE1hdGgubWF4KDAsIHN0YXRzLmFjdGl2ZSAtIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgYWRkSm9iKFxuXHRcdHF1ZXVlOiBzdHJpbmcsXG5cdFx0ZGF0YTogdW5rbm93bixcblx0XHRvcHRzPzogeyBwcmlvcml0eT86IG51bWJlcjsgZGVsYXk/OiBudW1iZXI7IHJldHJpZXM/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGpvYklkPzogc3RyaW5nIH0sXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgdGhyb3cgbmV3IEVycm9yKFwiW2Jsb2tdW2thZmthXSBub3QgY29ubmVjdGVkLiBDYWxsIGNvbm5lY3QoKSBmaXJzdC5cIik7XG5cdFx0aWYgKCF0aGlzLmhhbmRsZS5wcm9kdWNlcikgdGhyb3cgbmV3IEVycm9yKFwiW2Jsb2tdW2thZmthXSBwcm9kdWNlciBub3QgaW5pdGlhbGl6ZWRcIik7XG5cdFx0Y29uc3Qga2V5ID0gb3B0cz8uam9iSWQgPz8gdXVpZCgpO1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiA/IGRhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcblx0XHRhd2FpdCB0aGlzLmhhbmRsZS5wcm9kdWNlci5zZW5kKHtcblx0XHRcdHRvcGljOiBxdWV1ZSxcblx0XHRcdG1lc3NhZ2VzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0dmFsdWU6IHBheWxvYWQsXG5cdFx0XHRcdFx0aGVhZGVyczogb3B0cz8uZGVsYXkgPyB7IFwieC1ibG9rLWRlbGF5LW1zXCI6IFN0cmluZyhvcHRzLmRlbGF5KSB9IDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHR9KTtcblx0XHRyZXR1cm4ga2V5O1xuXHR9XG5cblx0YXN5bmMgc3RvcFByb2Nlc3NpbmcocXVldWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnN1bWVyID0gdGhpcy5oYW5kbGUuY29uc3VtZXJzLmdldChxdWV1ZSk7XG5cdFx0aWYgKGNvbnN1bWVyKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBjb25zdW1lci5zdG9wKCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogaWdub3JlICovXG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBjb25zdW1lci5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0LyogaWdub3JlICovXG5cdFx0XHR9XG5cdFx0XHR0aGlzLmhhbmRsZS5jb25zdW1lcnMuZGVsZXRlKHF1ZXVlKTtcblx0XHR9XG5cdH1cblxuXHRpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG5cdH1cblxuXHRhc3luYyBoZWFsdGhDaGVjaygpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoIXRoaXMuY29ubmVjdGVkIHx8ICF0aGlzLmhhbmRsZS5hZG1pbikgcmV0dXJuIGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLmhhbmRsZS5hZG1pbi5mZXRjaFRvcGljT2Zmc2V0cyhcIl9fY29uc3VtZXJfb2Zmc2V0c1wiKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGdldFF1ZXVlU3RhdHMocXVldWU6IHN0cmluZyk6IFByb21pc2U8V29ya2VyUXVldWVTdGF0cz4ge1xuXHRcdGNvbnN0IGNvdW50ZXJzID0gdGhpcy5zdGF0cy5nZXQocXVldWUpID8/IHsgY29tcGxldGVkOiAwLCBmYWlsZWQ6IDAsIGFjdGl2ZTogMCB9O1xuXHRcdGxldCB3YWl0aW5nID0gMDtcblx0XHRpZiAodGhpcy5oYW5kbGUuYWRtaW4pIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9mZnNldHMgPSBhd2FpdCB0aGlzLmhhbmRsZS5hZG1pbi5mZXRjaFRvcGljT2Zmc2V0cyhxdWV1ZSk7XG5cdFx0XHRcdC8vIEFwcHJveGltYXRlOiB0b3RhbCBjb21taXR0ZWQgb2Zmc2V0cyBhY3Jvc3MgcGFydGl0aW9ucy4gUmVhbCBsYWdcblx0XHRcdFx0Ly8gcmVxdWlyZXMgYWRtaW4uZmV0Y2hPZmZzZXRzKHsgZ3JvdXBJZCB9KSDigJQgc2tpcHBlZCBoZXJlIHRvIGtlZXBcblx0XHRcdFx0Ly8gdGhlIGNhbGwgY2hlYXA7IHByb2R1Y3Rpb24gZGVwbG95bWVudHMgc2hvdWxkIHVzZSBLYWZrYSdzXG5cdFx0XHRcdC8vIGRlZGljYXRlZCBsYWcgbWV0cmljcyBhbnl3YXkuXG5cdFx0XHRcdHdhaXRpbmcgPSBvZmZzZXRzLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBOdW1iZXIucGFyc2VJbnQocC5vZmZzZXQsIDEwKSwgMCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0d2FpdGluZyA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR3YWl0aW5nLFxuXHRcdFx0YWN0aXZlOiBjb3VudGVycy5hY3RpdmUsXG5cdFx0XHRjb21wbGV0ZWQ6IGNvdW50ZXJzLmNvbXBsZXRlZCxcblx0XHRcdGZhaWxlZDogY291bnRlcnMuZmFpbGVkLFxuXHRcdFx0ZGVsYXllZDogMCxcblx0XHR9O1xuXHR9XG59XG4iXX0=
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2Fma2FBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL0thZmthQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUdILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBc0NsQyxNQUFNLE9BQU8sWUFBWTtJQUNmLFFBQVEsR0FBRyxPQUFnQixDQUFDO0lBQ3BCLE1BQU0sQ0FBYztJQUNyQyx1R0FBdUc7SUFDL0YsS0FBSyxHQUFRLElBQUksQ0FBQztJQUNsQixNQUFNLEdBQWtCLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLEtBQUssR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzRCxZQUFZLE1BQTZCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDYixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNHLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLGFBQWE7WUFDMUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7WUFDckUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7WUFDckUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFD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RCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogS2Fma2FBZGFwdGVyIOKAlCB2MC43IFBSIDUg4oCUIFdvcmtlciBhZGFwdGVyIGJhY2tlZCBieSBBcGFjaGUgS2Fma2EgdmlhXG4gKiBga2Fma2Fqc2AuIENvbnN1bWVzIGZyb20gYSB0b3BpYyAodGhlIGBxdWV1ZWAgZmllbGQpIHdpdGggYVxuICogY29uc3VtZXItZ3JvdXAgaWRlbnRpZmllcjsgcHJvZHVjZXMgdmlhIHRoZSBzYW1lIGNsaWVudC5cbiAqXG4gKiBLYWZrYSBpcyBmdW5kYW1lbnRhbGx5IGEgc3RyZWFtaW5nIHBsYXRmb3JtIOKAlCBub3QgYSBxdWV1ZSDigJQgc28gYVxuICogZmV3IHNlbWFudGljcyBkaWZmZXIgZnJvbSBCdWxsTVEvU1FTL1JhYmJpdE1ROlxuICpcbiAqICAgLSAqKk9yZGVyaW5nKio6IHBlci1wYXJ0aXRpb24sIG5vdCBwZXItdG9waWMuIFNldCB0aGUgcGFydGl0aW9uXG4gKiAgICAga2V5IHZpYSB0aGUgYGRlZHVwSWRgIGZpZWxkIG9uIGBhZGRKb2JgIHRvIGtlZXAgcmVsYXRlZFxuICogICAgIG1lc3NhZ2VzIG9uIHRoZSBzYW1lIHBhcnRpdGlvbi5cbiAqICAgLSAqKlJldHJpZXMqKjogS2Fma2EgZG9lc24ndCBoYXZlIGEgYnJva2VyLXNpZGUgcmV0cnkgY29uY2VwdC5cbiAqICAgICBUaGUgYWRhcHRlciByZS10aHJvd3Mgb24gaGFuZGxlciBmYWlsdXJlOyBvZmZzZXQgY29tbWl0IGlzXG4gKiAgICAgc3VwcHJlc3NlZCBzbyB0aGUgY29uc3VtZXIgcmUtcG9sbHMgdGhlIG1lc3NhZ2Ugb24gdGhlIG5leHRcbiAqICAgICBjeWNsZS4gRm9yIHJlYWwgcmV0cnkgc2VtYW50aWNzLCBsYXllciBhIGRlYWQtbGV0dGVyIHRvcGljLlxuICogICAtICoqU3RhdHMqKjogS2Fma2FKUyBleHBvc2VzIGNvbnN1bWVyLWdyb3VwIGxhZyB2aWEgaXRzIGFkbWluXG4gKiAgICAgY2xpZW50OyB0aGUgbGFnIGNvdW50IGlzIHJlcG9ydGVkIGFzIGB3YWl0aW5nYC4gT3RoZXIgc3RhdHNcbiAqICAgICBhcmUgdHJhY2tlZCBsb2NhbGx5IHBlciBjb25zdW1lci5cbiAqICAgLSAqKkNvbmN1cnJlbmN5Kio6IHRoZSBgY29uY3VycmVuY3lgIGZpZWxkIG1hcHMgdG8gS2Fma2FKUydzXG4gKiAgICAgYHBhcnRpdGlvbnNDb25zdW1lZENvbmN1cnJlbnRseWAg4oCUIGl0IGNhcHMgaG93IG1hbnkgcGFydGl0aW9uc1xuICogICAgIGFyZSBwcm9jZXNzZWQgaW4gcGFyYWxsZWwsIHNvIGl0J3MgYm91bmRlZCBieSB0aGUgdG9waWMnc1xuICogICAgIHBhcnRpdGlvbiBjb3VudC4gQSBzaW5nbGUtcGFydGl0aW9uIHRvcGljIGlzIGVmZmVjdGl2ZWx5IHNlcmlhbFxuICogICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmZpZ3VyZWQgdmFsdWUuXG4gKlxuICogUmVxdWlyZXMgYGthZmthanNgIGFzIGEgcGVlciBkZXBlbmRlbmN5OlxuICpcbiAqICAgICBidW4gYWRkIGthZmthanNcbiAqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKHJlYWQgYXQgYWRhcHRlciBjb25zdHJ1Y3Rpb24pOlxuICogICAtIGBLQUZLQV9CUk9LRVJTYCAgICAgICAgICAg4oCUIGNvbW1hLXNlcGFyYXRlZCBsaXN0IChkZWZhdWx0IGBsb2NhbGhvc3Q6OTA5MmApLlxuICogICAtIGBLQUZLQV9DTElFTlRfSURgICAgICAgICAg4oCUIGNsaWVudC5pZCAoZGVmYXVsdCBgXCJibG9rLXdvcmtlclwiYCkuXG4gKiAgIC0gYEtBRktBX1NBU0xfVVNFUk5BTUVgICAgICDigJQgU0FTTC9QTEFJTiB1c2VybmFtZSAob3B0aW9uYWwpLlxuICogICAtIGBLQUZLQV9TQVNMX1BBU1NXT1JEYCAgICAg4oCUIFNBU0wvUExBSU4gcGFzc3dvcmQgKG9wdGlvbmFsKS5cbiAqICAgLSBgS0FGS0FfU1NMYCAgICAgICAgICAgICAgIOKAlCB3aGVuIGBcInRydWVcImAsIGVuYWJsZSBUTFMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3JrZXJUcmlnZ2VyT3B0cyB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFkYXB0ZXIsIFdvcmtlckpvYiwgV29ya2VyUXVldWVTdGF0cyB9IGZyb20gXCIuLi9Xb3JrZXJUcmlnZ2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FDb25maWcge1xuXHRicm9rZXJzOiBzdHJpbmdbXTtcblx0Y2xpZW50SWQ6IHN0cmluZztcblx0c2FzbFVzZXJuYW1lPzogc3RyaW5nO1xuXHRzYXNsUGFzc3dvcmQ/OiBzdHJpbmc7XG5cdHNzbDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEthZmthSnNIYW5kbGUge1xuXHRwcm9kdWNlcj86IHtcblx0XHRjb25uZWN0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdGRpc2Nvbm5lY3Q6ICgpID0+IFByb21pc2U8dm9pZD47XG5cdFx0c2VuZDogKGFyZ3M6IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj47XG5cdH07XG5cdGNvbnN1bWVyczogTWFwPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRkaXNjb25uZWN0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdFx0c3RvcDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRcdHJ1bjogKG9wdHM6IHVua25vd24pID0+IFByb21pc2U8dm9pZD47XG5cdFx0fVxuXHQ+O1xuXHRhZG1pbj86IHtcblx0XHRjb25uZWN0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRcdGRpc2Nvbm5lY3Q6ICgpID0+IFByb21pc2U8dm9pZD47XG5cdFx0ZmV0Y2hUb3BpY09mZnNldHM6ICh0b3BpYzogc3RyaW5nKSA9PiBQcm9taXNlPEFycmF5PHsgcGFydGl0aW9uOiBudW1iZXI7IG9mZnNldDogc3RyaW5nIH0+Pjtcblx0fTtcbn1cblxuaW50ZXJmYWNlIFF1ZXVlU3RhdHNDb3VudGVycyB7XG5cdGNvbXBsZXRlZDogbnVtYmVyO1xuXHRmYWlsZWQ6IG51bWJlcjtcblx0YWN0aXZlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBLYWZrYUFkYXB0ZXIgaW1wbGVtZW50cyBXb3JrZXJBZGFwdGVyIHtcblx0cmVhZG9ubHkgcHJvdmlkZXIgPSBcImthZmthXCIgYXMgY29uc3Q7XG5cdHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBLYWZrYUNvbmZpZztcblx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBrYWZrYWpzJ3MgZXhwb3J0ZWQgYEthZmthYCBjb25zdHJ1Y3RvciBpcyBsb29zZWx5IHR5cGVkLlxuXHRwcml2YXRlIGthZmthOiBhbnkgPSBudWxsO1xuXHRwcml2YXRlIGhhbmRsZTogS2Fma2FKc0hhbmRsZSA9IHsgY29uc3VtZXJzOiBuZXcgTWFwKCkgfTtcblx0cHJpdmF0ZSBjb25uZWN0ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBzdGF0czogTWFwPHN0cmluZywgUXVldWVTdGF0c0NvdW50ZXJzPiA9IG5ldyBNYXAoKTtcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiBQYXJ0aWFsPEthZmthQ29uZmlnPikge1xuXHRcdHRoaXMuY29uZmlnID0ge1xuXHRcdFx0YnJva2VyczogY29uZmlnPy5icm9rZXJzID8/IChwcm9jZXNzLmVudi5LQUZLQV9CUk9LRVJTID8/IFwibG9jYWxob3N0OjkwOTJcIikuc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gcy50cmltKCkpLFxuXHRcdFx0Y2xpZW50SWQ6IGNvbmZpZz8uY2xpZW50SWQgPz8gcHJvY2Vzcy5lbnYuS0FGS0FfQ0xJRU5UX0lEID8/IFwiYmxvay13b3JrZXJcIixcblx0XHRcdHNhc2xVc2VybmFtZTogY29uZmlnPy5zYXNsVXNlcm5hbWUgPz8gcHJvY2Vzcy5lbnYuS0FGS0FfU0FTTF9VU0VSTkFNRSxcblx0XHRcdHNhc2xQYXNzd29yZDogY29uZmlnPy5zYXNsUGFzc3dvcmQgPz8gcHJvY2Vzcy5lbnYuS0FGS0FfU0FTTF9QQVNTV09SRCxcblx0XHRcdHNzbDogY29uZmlnPy5zc2wgPz8gcHJvY2Vzcy5lbnYuS0FGS0FfU1NMID09PSBcInRydWVcIixcblx0XHR9O1xuXHR9XG5cblx0YXN5bmMgY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5jb25uZWN0ZWQpIHJldHVybjtcblx0XHR0cnkge1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBrYWZrYWpzIGlzIGEgcnVudGltZS1sb2FkZWQgcGVlciBkZXAuXG5cdFx0XHRjb25zdCBrYWZrYWpzOiBhbnkgPSBhd2FpdCBpbXBvcnQoXCJrYWZrYWpzXCIpO1xuXHRcdFx0Y29uc3Qgc2FzbCA9XG5cdFx0XHRcdHRoaXMuY29uZmlnLnNhc2xVc2VybmFtZSAmJiB0aGlzLmNvbmZpZy5zYXNsUGFzc3dvcmRcblx0XHRcdFx0XHQ/IHsgbWVjaGFuaXNtOiBcInBsYWluXCIsIHVzZXJuYW1lOiB0aGlzLmNvbmZpZy5zYXNsVXNlcm5hbWUsIHBhc3N3b3JkOiB0aGlzLmNvbmZpZy5zYXNsUGFzc3dvcmQgfVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5rYWZrYSA9IG5ldyBrYWZrYWpzLkthZmthKHtcblx0XHRcdFx0Y2xpZW50SWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxuXHRcdFx0XHRicm9rZXJzOiB0aGlzLmNvbmZpZy5icm9rZXJzLFxuXHRcdFx0XHRzc2w6IHRoaXMuY29uZmlnLnNzbCxcblx0XHRcdFx0c2FzbCxcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5oYW5kbGUucHJvZHVjZXIgPSB0aGlzLmthZmthLnByb2R1Y2VyKCk7XG5cdFx0XHRhd2FpdCB0aGlzLmhhbmRsZS5wcm9kdWNlcj8uY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5oYW5kbGUuYWRtaW4gPSB0aGlzLmthZmthLmFkbWluKCk7XG5cdFx0XHRhd2FpdCB0aGlzLmhhbmRsZS5hZG1pbj8uY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgW2Jsb2tdW2thZmthXSBjb25uZWN0IGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfS4gSW5zdGFsbCBrYWZrYWpzIGFzIGEgcGVlciBkZXBlbmRlbmN5OiBidW4gYWRkIGthZmthanNgLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBkaXNjb25uZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHJldHVybjtcblx0XHRmb3IgKGNvbnN0IFssIGNvbnN1bWVyXSBvZiB0aGlzLmhhbmRsZS5jb25zdW1lcnMpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGNvbnN1bWVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHQvKiBpZ25vcmUgKi9cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5oYW5kbGUuY29uc3VtZXJzLmNsZWFyKCk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuaGFuZGxlLnByb2R1Y2VyPy5kaXNjb25uZWN0KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvKiBpZ25vcmUgKi9cblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuaGFuZGxlLmFkbWluPy5kaXNjb25uZWN0KCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHQvKiBpZ25vcmUgKi9cblx0XHR9XG5cdFx0dGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcblx0fVxuXG5cdGFzeW5jIHByb2Nlc3MoY29uZmlnOiBXb3JrZXJUcmlnZ2VyT3B0cywgaGFuZGxlcjogKGpvYjogV29ya2VySm9iKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCkgdGhyb3cgbmV3IEVycm9yKFwiW2Jsb2tdW2thZmthXSBub3QgY29ubmVjdGVkLiBDYWxsIGNvbm5lY3QoKSBmaXJzdC5cIik7XG5cdFx0Y29uc3QgZ3JvdXBJZCA9IGNvbmZpZy5jb25zdW1lckdyb3VwID8/IGAke2NvbmZpZy5xdWV1ZX0tZ3JvdXBgO1xuXHRcdGNvbnN0IGNvbnN1bWVyID0gdGhpcy5rYWZrYS5jb25zdW1lcih7IGdyb3VwSWQgfSk7XG5cdFx0YXdhaXQgY29uc3VtZXIuY29ubmVjdCgpO1xuXHRcdGF3YWl0IGNvbnN1bWVyLnN1YnNjcmliZSh7IHRvcGljOiBjb25maWcucXVldWUsIGZyb21CZWdpbm5pbmc6IGNvbmZpZy5mcm9tQmVnaW5uaW5nID09PSB0cnVlIH0pO1xuXHRcdHRoaXMuaGFuZGxlLmNvbnN1bWVycy5zZXQoY29uZmlnLnF1ZXVlLCBjb25zdW1lcik7XG5cdFx0dGhpcy5zdGF0cy5zZXQoY29uZmlnLnF1ZXVlLCB7IGNvbXBsZXRlZDogMCwgZmFpbGVkOiAwLCBhY3RpdmU6IDAgfSk7XG5cdFx0Y29uc3Qgc3RhdHMgPSB0aGlzLnN0YXRzLmdldChjb25maWcucXVldWUpIGFzIFF1ZXVlU3RhdHNDb3VudGVycztcblxuXHRcdGF3YWl0IGNvbnN1bWVyLnJ1bih7XG5cdFx0XHRhdXRvQ29tbWl0OiBjb25maWcuYWNrICE9PSBmYWxzZSxcblx0XHRcdC8vIEYyNSDigJQgaG9ub3IgdGhlIGRvY3VtZW50ZWQgYGNvbmN1cnJlbmN5YCBrbm9iLiBLYWZrYSBwcm9jZXNzZXNcblx0XHRcdC8vIG1lc3NhZ2VzIHNlcmlhbGx5IHBlciBwYXJ0aXRpb24gYnkgZGVmYXVsdDsgYHBhcnRpdGlvbnNDb25zdW1lZENvbmN1cnJlbnRseWBcblx0XHRcdC8vIGlzIEthZmthSlMncyBuYXRpdmUgcGFyYWxsZWxpc20gY2FwIChib3VuZGVkIGJ5IHBhcnRpdGlvbiBjb3VudCkuXG5cdFx0XHQvLyBXaXRob3V0IHRoaXMgdGhlIGZpZWxkIHdhcyBzaWxlbnRseSBpZ25vcmVkIOKAlCB2YWxpZGF0ZWQsIGFjY2VwdGVkLFxuXHRcdFx0Ly8gZXZlbiBsb2dnZWQgYXQgc3RhcnR1cCwgYnV0IHdpdGggemVybyBydW50aW1lIGVmZmVjdC5cblx0XHRcdHBhcnRpdGlvbnNDb25zdW1lZENvbmN1cnJlbnRseTogTWF0aC5tYXgoMSwgY29uZmlnLmNvbmN1cnJlbmN5ID8/IDEpLFxuXHRcdFx0ZWFjaE1lc3NhZ2U6IGFzeW5jICh7XG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHR9OiB7XG5cdFx0XHRcdG1lc3NhZ2U6IHsga2V5PzogQnVmZmVyOyB2YWx1ZT86IEJ1ZmZlcjsgb2Zmc2V0OiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgQnVmZmVyPiB9O1xuXHRcdFx0fSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXlsb2FkU3RyaW5nID0gbWVzc2FnZS52YWx1ZT8udG9TdHJpbmcoXCJ1dGY4XCIpID8/IFwiXCI7XG5cdFx0XHRcdGxldCBkYXRhOiB1bmtub3duO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGRhdGEgPSBwYXlsb2FkU3RyaW5nLmxlbmd0aCA+IDAgPyBKU09OLnBhcnNlKHBheWxvYWRTdHJpbmcpIDogbnVsbDtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0ZGF0YSA9IHBheWxvYWRTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0XHRpZiAobWVzc2FnZS5oZWFkZXJzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMobWVzc2FnZS5oZWFkZXJzKSkgaGVhZGVyc1trXSA9IHY/LnRvU3RyaW5nKFwidXRmOFwiKSA/PyBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGpvYjogV29ya2VySm9iID0ge1xuXHRcdFx0XHRcdGlkOiBtZXNzYWdlLmtleT8udG9TdHJpbmcoXCJ1dGY4XCIpID8/IGAke2NvbmZpZy5xdWV1ZX06JHttZXNzYWdlLm9mZnNldH1gLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdHByaW9yaXR5OiBjb25maWcucHJpb3JpdHkgPz8gMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMCxcblx0XHRcdFx0XHRtYXhSZXRyaWVzOiBjb25maWcucmV0cmllcyA/PyAwLFxuXHRcdFx0XHRcdGNyZWF0ZWRBdDogbmV3IERhdGUoTnVtYmVyLnBhcnNlSW50KG1lc3NhZ2UudGltZXN0YW1wLCAxMCkpLFxuXHRcdFx0XHRcdHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0LFxuXHRcdFx0XHRcdHJhdzogbWVzc2FnZSxcblx0XHRcdFx0XHRjb21wbGV0ZTogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0c3RhdHMuY29tcGxldGVkICs9IDE7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRmYWlsOiBhc3luYyAoX2VycjogRXJyb3IpID0+IHtcblx0XHRcdFx0XHRcdHN0YXRzLmZhaWxlZCArPSAxO1xuXHRcdFx0XHRcdFx0dGhyb3cgX2Vycjtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRzdGF0cy5hY3RpdmUgKz0gMTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBoYW5kbGVyKGpvYik7XG5cdFx0XHRcdFx0c3RhdHMuY29tcGxldGVkICs9IDE7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdHN0YXRzLmZhaWxlZCArPSAxO1xuXHRcdFx0XHRcdHRocm93IGVycjtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRzdGF0cy5hY3RpdmUgPSBNYXRoLm1heCgwLCBzdGF0cy5hY3RpdmUgLSAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIGFkZEpvYihcblx0XHRxdWV1ZTogc3RyaW5nLFxuXHRcdGRhdGE6IHVua25vd24sXG5cdFx0b3B0cz86IHsgcHJpb3JpdHk/OiBudW1iZXI7IGRlbGF5PzogbnVtYmVyOyByZXRyaWVzPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyBqb2JJZD86IHN0cmluZyB9LFxuXHQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGlmICghdGhpcy5jb25uZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIltibG9rXVtrYWZrYV0gbm90IGNvbm5lY3RlZC4gQ2FsbCBjb25uZWN0KCkgZmlyc3QuXCIpO1xuXHRcdGlmICghdGhpcy5oYW5kbGUucHJvZHVjZXIpIHRocm93IG5ldyBFcnJvcihcIltibG9rXVtrYWZrYV0gcHJvZHVjZXIgbm90IGluaXRpYWxpemVkXCIpO1xuXHRcdGNvbnN0IGtleSA9IG9wdHM/LmpvYklkID8/IHV1aWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyBkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdFx0YXdhaXQgdGhpcy5oYW5kbGUucHJvZHVjZXIuc2VuZCh7XG5cdFx0XHR0b3BpYzogcXVldWUsXG5cdFx0XHRtZXNzYWdlczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdHZhbHVlOiBwYXlsb2FkLFxuXHRcdFx0XHRcdGhlYWRlcnM6IG9wdHM/LmRlbGF5ID8geyBcIngtYmxvay1kZWxheS1tc1wiOiBTdHJpbmcob3B0cy5kZWxheSkgfSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGtleTtcblx0fVxuXG5cdGFzeW5jIHN0b3BQcm9jZXNzaW5nKHF1ZXVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb25zdW1lciA9IHRoaXMuaGFuZGxlLmNvbnN1bWVycy5nZXQocXVldWUpO1xuXHRcdGlmIChjb25zdW1lcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgY29uc3VtZXIuc3RvcCgpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8qIGlnbm9yZSAqL1xuXHRcdFx0fVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgY29uc3VtZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8qIGlnbm9yZSAqL1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5oYW5kbGUuY29uc3VtZXJzLmRlbGV0ZShxdWV1ZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29ubmVjdGVkO1xuXHR9XG5cblx0YXN5bmMgaGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmNvbm5lY3RlZCB8fCAhdGhpcy5oYW5kbGUuYWRtaW4pIHJldHVybiBmYWxzZTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5oYW5kbGUuYWRtaW4uZmV0Y2hUb3BpY09mZnNldHMoXCJfX2NvbnN1bWVyX29mZnNldHNcIik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRRdWV1ZVN0YXRzKHF1ZXVlOiBzdHJpbmcpOiBQcm9taXNlPFdvcmtlclF1ZXVlU3RhdHM+IHtcblx0XHRjb25zdCBjb3VudGVycyA9IHRoaXMuc3RhdHMuZ2V0KHF1ZXVlKSA/PyB7IGNvbXBsZXRlZDogMCwgZmFpbGVkOiAwLCBhY3RpdmU6IDAgfTtcblx0XHRsZXQgd2FpdGluZyA9IDA7XG5cdFx0aWYgKHRoaXMuaGFuZGxlLmFkbWluKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBvZmZzZXRzID0gYXdhaXQgdGhpcy5oYW5kbGUuYWRtaW4uZmV0Y2hUb3BpY09mZnNldHMocXVldWUpO1xuXHRcdFx0XHQvLyBBcHByb3hpbWF0ZTogdG90YWwgY29tbWl0dGVkIG9mZnNldHMgYWNyb3NzIHBhcnRpdGlvbnMuIFJlYWwgbGFnXG5cdFx0XHRcdC8vIHJlcXVpcmVzIGFkbWluLmZldGNoT2Zmc2V0cyh7IGdyb3VwSWQgfSkg4oCUIHNraXBwZWQgaGVyZSB0byBrZWVwXG5cdFx0XHRcdC8vIHRoZSBjYWxsIGNoZWFwOyBwcm9kdWN0aW9uIGRlcGxveW1lbnRzIHNob3VsZCB1c2UgS2Fma2Enc1xuXHRcdFx0XHQvLyBkZWRpY2F0ZWQgbGFnIG1ldHJpY3MgYW55d2F5LlxuXHRcdFx0XHR3YWl0aW5nID0gb2Zmc2V0cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgTnVtYmVyLnBhcnNlSW50KHAub2Zmc2V0LCAxMCksIDApO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHdhaXRpbmcgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0d2FpdGluZyxcblx0XHRcdGFjdGl2ZTogY291bnRlcnMuYWN0aXZlLFxuXHRcdFx0Y29tcGxldGVkOiBjb3VudGVycy5jb21wbGV0ZWQsXG5cdFx0XHRmYWlsZWQ6IGNvdW50ZXJzLmZhaWxlZCxcblx0XHRcdGRlbGF5ZWQ6IDAsXG5cdFx0fTtcblx0fVxufVxuIl19
package/dist/index.d.ts CHANGED
@@ -61,7 +61,7 @@
61
61
  * }
62
62
  * ```
63
63
  */
64
- export { WorkerTrigger, type WorkerAdapter, type WorkerJob, type WorkerQueueStats, } from "./WorkerTrigger";
64
+ export { WorkerTrigger, WorkerTimeoutError, type WorkerAdapter, type WorkerJob, type WorkerQueueStats, } from "./WorkerTrigger";
65
65
  export { BullMQAdapter, type BullMQConfig } from "./adapters/BullMQAdapter";
66
66
  export { InMemoryAdapter } from "./adapters/InMemoryAdapter";
67
67
  export { KafkaAdapter, type KafkaConfig } from "./adapters/KafkaAdapter";
package/dist/index.js CHANGED
@@ -62,7 +62,7 @@
62
62
  * ```
63
63
  */
64
64
  // Core exports
65
- export { WorkerTrigger, } from "./WorkerTrigger";
65
+ export { WorkerTrigger, WorkerTimeoutError, } from "./WorkerTrigger";
66
66
  // Adapters
67
67
  export { BullMQAdapter } from "./adapters/BullMQAdapter";
68
68
  export { InMemoryAdapter } from "./adapters/InMemoryAdapter";
@@ -76,4 +76,4 @@ export { SQSAdapter } from "./adapters/SQSAdapter";
76
76
  // helper nodes (`@blokjs/worker-publish`) that need to enqueue jobs
77
77
  // from any workflow without bundling all broker SDKs.
78
78
  export { _resetAdapterPoolForTests, createWorkerAdapter, getOrCreateAdapter, resolveProvider, } from "./adapters/factory";
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERHO0FBRUgsZUFBZTtBQUNmLE9BQU8sRUFDTixhQUFhLEdBSWIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixXQUFXO0FBQ1gsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBb0IsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLHVCQUF1QixDQUFDO0FBRW5FLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsc0RBQXNEO0FBQ3RELE9BQU8sRUFDTix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGJsb2tqcy90cmlnZ2VyLXdvcmtlclxuICpcbiAqIFdvcmtlci1iYXNlZCB0cmlnZ2VyIGZvciBCbG9rIHdvcmtmbG93cy5cbiAqIFN1cHBvcnRzIGJhY2tncm91bmQgam9iIHByb2Nlc3Npbmcgd2l0aDpcbiAqIC0gQ29uZmlndXJhYmxlIGNvbmN1cnJlbmN5IHBlciBxdWV1ZVxuICogLSBBdXRvbWF0aWMgcmV0cmllcyB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAqIC0gSm9iIHRpbWVvdXRzXG4gKiAtIFByaW9yaXR5LWJhc2VkIGpvYiBvcmRlcmluZ1xuICogLSBEZWxheWVkIGpvYiBzY2hlZHVsaW5nXG4gKiAtIFF1ZXVlIHN0YXRpc3RpY3MgYW5kIG1vbml0b3JpbmdcbiAqXG4gKiBBZGFwdGVycyAodjAuNyspOlxuICogLSBCdWxsTVEgICAgICAgIOKAlCBSZWRpcy1iYWNrZWQsIG9wcy1zdHlsZSBxdWV1ZXMgKGBidWxsbXFgIHBlZXIgZGVwKVxuICogLSBJbk1lbW9yeSAgICAgIOKAlCBkZXZlbG9wbWVudCAvIHRlc3RzIChubyBwZWVyIGRlcHMpXG4gKiAtIE5BVFMgICAgICAgICAg4oCUIEpldFN0cmVhbSBkdXJhYmxlIHN0cmVhbXMgKGBuYXRzYCBwZWVyIGRlcClcbiAqIC0gS2Fma2EgICAgICAgICDigJQgaGlnaC10aHJvdWdocHV0IHN0cmVhbWluZyAoYGthZmthanNgIHBlZXIgZGVwKVxuICogLSBSYWJiaXRNUSAgICAgIOKAlCByZWxpYWJsZSBlbnRlcnByaXNlIHF1ZXVlcyAoYGFtcXBsaWJgIHBlZXIgZGVwKVxuICogLSBTUVMgICAgICAgICAgIOKAlCBBV1MgY2xvdWQgcXVldWVzIChgQGF3cy1zZGsvY2xpZW50LXNxc2AgcGVlciBkZXApXG4gKiAtIFJlZGlzIFN0cmVhbXMg4oCUIHdoZW4gUmVkaXMgaXMgYWxyZWFkeSBpbiBzdGFjayAoYGlvcmVkaXNgIHBlZXIgZGVwKVxuICogLSBwZy1ib3NzICAgICAgIOKAlCBubyBleHRyYSBpbmZyYSAoYHBnLWJvc3NgIHBlZXIgZGVwKVxuICpcbiAqIHYwLjcrIOKAlCBwaWNrIHRoZSBhZGFwdGVyIHBlciB3b3JrZmxvdyB2aWEgYHRyaWdnZXIud29ya2VyLnByb3ZpZGVyYC5cbiAqIGBCTE9LX1dPUktFUl9BREFQVEVSYCBlbnYgdmFyIHNldHMgdGhlIGRlZmF1bHQuIFN1YmNsYXNzZXMgY2FuIHN0aWxsXG4gKiBzZXQgYHByb3RlY3RlZCBhZGFwdGVyYCBkaXJlY3RseSBmb3IgYmFjay1jb21wYXQgd2l0aCB0aGUgcHJlLXYwLjdcbiAqIHNpbmdsZS1hZGFwdGVyIHBhdHRlcm4uXG4gKlxuICogQGV4YW1wbGUgQnVsbE1RXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBXb3JrZXJUcmlnZ2VyLCBCdWxsTVFBZGFwdGVyIH0gZnJvbSBcIkBibG9ranMvdHJpZ2dlci13b3JrZXJcIjtcbiAqXG4gKiBjbGFzcyBNeVdvcmtlclRyaWdnZXIgZXh0ZW5kcyBXb3JrZXJUcmlnZ2VyIHtcbiAqICAgcHJvdGVjdGVkIGFkYXB0ZXIgPSBuZXcgQnVsbE1RQWRhcHRlcih7XG4gKiAgICAgaG9zdDogXCJsb2NhbGhvc3RcIixcbiAqICAgICBwb3J0OiA2Mzc5LFxuICogICB9KTtcbiAqXG4gKiAgIHByb3RlY3RlZCBub2RlcyA9IG15Tm9kZXM7XG4gKiAgIHByb3RlY3RlZCB3b3JrZmxvd3MgPSBteVdvcmtmbG93cztcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmlnZ2VyID0gbmV3IE15V29ya2VyVHJpZ2dlcigpO1xuICogYXdhaXQgdHJpZ2dlci5saXN0ZW4oKTtcbiAqXG4gKiAvLyBEaXNwYXRjaCBhIGpvYlxuICogYXdhaXQgdHJpZ2dlci5kaXNwYXRjaChcImJhY2tncm91bmQtam9ic1wiLCB7IHVzZXJJZDogXCIxMjNcIiB9LCB7XG4gKiAgIHByaW9yaXR5OiAxMCxcbiAqICAgcmV0cmllczogMyxcbiAqICAgZGVsYXk6IDUwMDAsIC8vIGRlbGF5IDUgc2Vjb25kc1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBJbk1lbW9yeSAoZGV2ZWxvcG1lbnQpXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBXb3JrZXJUcmlnZ2VyLCBJbk1lbW9yeUFkYXB0ZXIgfSBmcm9tIFwiQGJsb2tqcy90cmlnZ2VyLXdvcmtlclwiO1xuICpcbiAqIGNsYXNzIERldldvcmtlclRyaWdnZXIgZXh0ZW5kcyBXb3JrZXJUcmlnZ2VyIHtcbiAqICAgcHJvdGVjdGVkIGFkYXB0ZXIgPSBuZXcgSW5NZW1vcnlBZGFwdGVyKCk7XG4gKiAgIHByb3RlY3RlZCBub2RlcyA9IG15Tm9kZXM7XG4gKiAgIHByb3RlY3RlZCB3b3JrZmxvd3MgPSBteVdvcmtmbG93cztcbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIENvcmUgZXhwb3J0c1xuZXhwb3J0IHtcblx0V29ya2VyVHJpZ2dlcixcblx0dHlwZSBXb3JrZXJBZGFwdGVyLFxuXHR0eXBlIFdvcmtlckpvYixcblx0dHlwZSBXb3JrZXJRdWV1ZVN0YXRzLFxufSBmcm9tIFwiLi9Xb3JrZXJUcmlnZ2VyXCI7XG5cbi8vIEFkYXB0ZXJzXG5leHBvcnQgeyBCdWxsTVFBZGFwdGVyLCB0eXBlIEJ1bGxNUUNvbmZpZyB9IGZyb20gXCIuL2FkYXB0ZXJzL0J1bGxNUUFkYXB0ZXJcIjtcbmV4cG9ydCB7IEluTWVtb3J5QWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzL0luTWVtb3J5QWRhcHRlclwiO1xuZXhwb3J0IHsgS2Fma2FBZGFwdGVyLCB0eXBlIEthZmthQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvS2Fma2FBZGFwdGVyXCI7XG5leHBvcnQgeyBOQVRTV29ya2VyQWRhcHRlciwgdHlwZSBOQVRTV29ya2VyQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvTkFUU0FkYXB0ZXJcIjtcbmV4cG9ydCB7IFBnQm9zc0FkYXB0ZXIsIHR5cGUgUGdCb3NzQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvUGdCb3NzQWRhcHRlclwiO1xuZXhwb3J0IHsgUmFiYml0TVFBZGFwdGVyLCB0eXBlIFJhYmJpdE1RQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvUmFiYml0TVFBZGFwdGVyXCI7XG5leHBvcnQgeyBSZWRpc1N0cmVhbXNBZGFwdGVyLCB0eXBlIFJlZGlzU3RyZWFtc0NvbmZpZyB9IGZyb20gXCIuL2FkYXB0ZXJzL1JlZGlzU3RyZWFtc0FkYXB0ZXJcIjtcbmV4cG9ydCB7IFNRU0FkYXB0ZXIsIHR5cGUgU1FTQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvU1FTQWRhcHRlclwiO1xuXG4vLyB2MC43IFBSIDUg4oCUIGZhY3RvcnkgKyBwb29sLiBVc2VkIGJ5IFdvcmtlclRyaWdnZXIgYW5kIGV4cG9zZWQgZm9yXG4vLyBoZWxwZXIgbm9kZXMgKGBAYmxva2pzL3dvcmtlci1wdWJsaXNoYCkgdGhhdCBuZWVkIHRvIGVucXVldWUgam9ic1xuLy8gZnJvbSBhbnkgd29ya2Zsb3cgd2l0aG91dCBidW5kbGluZyBhbGwgYnJva2VyIFNES3MuXG5leHBvcnQge1xuXHRfcmVzZXRBZGFwdGVyUG9vbEZvclRlc3RzLFxuXHRjcmVhdGVXb3JrZXJBZGFwdGVyLFxuXHRnZXRPckNyZWF0ZUFkYXB0ZXIsXG5cdHJlc29sdmVQcm92aWRlcixcbn0gZnJvbSBcIi4vYWRhcHRlcnMvZmFjdG9yeVwiO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBoZWxwZXIgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IFdvcmtlclByb3ZpZGVyLCBXb3JrZXJUcmlnZ2VyT3B0cyB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERHO0FBRUgsZUFBZTtBQUNmLE9BQU8sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEdBSWxCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsV0FBVztBQUNYLE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0seUJBQXlCLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQTJCLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRSxvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLHNEQUFzRDtBQUN0RCxPQUFPLEVBQ04seUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZUFBZSxHQUNmLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBibG9ranMvdHJpZ2dlci13b3JrZXJcbiAqXG4gKiBXb3JrZXItYmFzZWQgdHJpZ2dlciBmb3IgQmxvayB3b3JrZmxvd3MuXG4gKiBTdXBwb3J0cyBiYWNrZ3JvdW5kIGpvYiBwcm9jZXNzaW5nIHdpdGg6XG4gKiAtIENvbmZpZ3VyYWJsZSBjb25jdXJyZW5jeSBwZXIgcXVldWVcbiAqIC0gQXV0b21hdGljIHJldHJpZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gKiAtIEpvYiB0aW1lb3V0c1xuICogLSBQcmlvcml0eS1iYXNlZCBqb2Igb3JkZXJpbmdcbiAqIC0gRGVsYXllZCBqb2Igc2NoZWR1bGluZ1xuICogLSBRdWV1ZSBzdGF0aXN0aWNzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogQWRhcHRlcnMgKHYwLjcrKTpcbiAqIC0gQnVsbE1RICAgICAgICDigJQgUmVkaXMtYmFja2VkLCBvcHMtc3R5bGUgcXVldWVzIChgYnVsbG1xYCBwZWVyIGRlcClcbiAqIC0gSW5NZW1vcnkgICAgICDigJQgZGV2ZWxvcG1lbnQgLyB0ZXN0cyAobm8gcGVlciBkZXBzKVxuICogLSBOQVRTICAgICAgICAgIOKAlCBKZXRTdHJlYW0gZHVyYWJsZSBzdHJlYW1zIChgbmF0c2AgcGVlciBkZXApXG4gKiAtIEthZmthICAgICAgICAg4oCUIGhpZ2gtdGhyb3VnaHB1dCBzdHJlYW1pbmcgKGBrYWZrYWpzYCBwZWVyIGRlcClcbiAqIC0gUmFiYml0TVEgICAgICDigJQgcmVsaWFibGUgZW50ZXJwcmlzZSBxdWV1ZXMgKGBhbXFwbGliYCBwZWVyIGRlcClcbiAqIC0gU1FTICAgICAgICAgICDigJQgQVdTIGNsb3VkIHF1ZXVlcyAoYEBhd3Mtc2RrL2NsaWVudC1zcXNgIHBlZXIgZGVwKVxuICogLSBSZWRpcyBTdHJlYW1zIOKAlCB3aGVuIFJlZGlzIGlzIGFscmVhZHkgaW4gc3RhY2sgKGBpb3JlZGlzYCBwZWVyIGRlcClcbiAqIC0gcGctYm9zcyAgICAgICDigJQgbm8gZXh0cmEgaW5mcmEgKGBwZy1ib3NzYCBwZWVyIGRlcClcbiAqXG4gKiB2MC43KyDigJQgcGljayB0aGUgYWRhcHRlciBwZXIgd29ya2Zsb3cgdmlhIGB0cmlnZ2VyLndvcmtlci5wcm92aWRlcmAuXG4gKiBgQkxPS19XT1JLRVJfQURBUFRFUmAgZW52IHZhciBzZXRzIHRoZSBkZWZhdWx0LiBTdWJjbGFzc2VzIGNhbiBzdGlsbFxuICogc2V0IGBwcm90ZWN0ZWQgYWRhcHRlcmAgZGlyZWN0bHkgZm9yIGJhY2stY29tcGF0IHdpdGggdGhlIHByZS12MC43XG4gKiBzaW5nbGUtYWRhcHRlciBwYXR0ZXJuLlxuICpcbiAqIEBleGFtcGxlIEJ1bGxNUVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgV29ya2VyVHJpZ2dlciwgQnVsbE1RQWRhcHRlciB9IGZyb20gXCJAYmxva2pzL3RyaWdnZXItd29ya2VyXCI7XG4gKlxuICogY2xhc3MgTXlXb3JrZXJUcmlnZ2VyIGV4dGVuZHMgV29ya2VyVHJpZ2dlciB7XG4gKiAgIHByb3RlY3RlZCBhZGFwdGVyID0gbmV3IEJ1bGxNUUFkYXB0ZXIoe1xuICogICAgIGhvc3Q6IFwibG9jYWxob3N0XCIsXG4gKiAgICAgcG9ydDogNjM3OSxcbiAqICAgfSk7XG4gKlxuICogICBwcm90ZWN0ZWQgbm9kZXMgPSBteU5vZGVzO1xuICogICBwcm90ZWN0ZWQgd29ya2Zsb3dzID0gbXlXb3JrZmxvd3M7XG4gKiB9XG4gKlxuICogY29uc3QgdHJpZ2dlciA9IG5ldyBNeVdvcmtlclRyaWdnZXIoKTtcbiAqIGF3YWl0IHRyaWdnZXIubGlzdGVuKCk7XG4gKlxuICogLy8gRGlzcGF0Y2ggYSBqb2JcbiAqIGF3YWl0IHRyaWdnZXIuZGlzcGF0Y2goXCJiYWNrZ3JvdW5kLWpvYnNcIiwgeyB1c2VySWQ6IFwiMTIzXCIgfSwge1xuICogICBwcmlvcml0eTogMTAsXG4gKiAgIHJldHJpZXM6IDMsXG4gKiAgIGRlbGF5OiA1MDAwLCAvLyBkZWxheSA1IHNlY29uZHNcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgSW5NZW1vcnkgKGRldmVsb3BtZW50KVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgV29ya2VyVHJpZ2dlciwgSW5NZW1vcnlBZGFwdGVyIH0gZnJvbSBcIkBibG9ranMvdHJpZ2dlci13b3JrZXJcIjtcbiAqXG4gKiBjbGFzcyBEZXZXb3JrZXJUcmlnZ2VyIGV4dGVuZHMgV29ya2VyVHJpZ2dlciB7XG4gKiAgIHByb3RlY3RlZCBhZGFwdGVyID0gbmV3IEluTWVtb3J5QWRhcHRlcigpO1xuICogICBwcm90ZWN0ZWQgbm9kZXMgPSBteU5vZGVzO1xuICogICBwcm90ZWN0ZWQgd29ya2Zsb3dzID0gbXlXb3JrZmxvd3M7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vLyBDb3JlIGV4cG9ydHNcbmV4cG9ydCB7XG5cdFdvcmtlclRyaWdnZXIsXG5cdFdvcmtlclRpbWVvdXRFcnJvcixcblx0dHlwZSBXb3JrZXJBZGFwdGVyLFxuXHR0eXBlIFdvcmtlckpvYixcblx0dHlwZSBXb3JrZXJRdWV1ZVN0YXRzLFxufSBmcm9tIFwiLi9Xb3JrZXJUcmlnZ2VyXCI7XG5cbi8vIEFkYXB0ZXJzXG5leHBvcnQgeyBCdWxsTVFBZGFwdGVyLCB0eXBlIEJ1bGxNUUNvbmZpZyB9IGZyb20gXCIuL2FkYXB0ZXJzL0J1bGxNUUFkYXB0ZXJcIjtcbmV4cG9ydCB7IEluTWVtb3J5QWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzL0luTWVtb3J5QWRhcHRlclwiO1xuZXhwb3J0IHsgS2Fma2FBZGFwdGVyLCB0eXBlIEthZmthQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvS2Fma2FBZGFwdGVyXCI7XG5leHBvcnQgeyBOQVRTV29ya2VyQWRhcHRlciwgdHlwZSBOQVRTV29ya2VyQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvTkFUU0FkYXB0ZXJcIjtcbmV4cG9ydCB7IFBnQm9zc0FkYXB0ZXIsIHR5cGUgUGdCb3NzQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvUGdCb3NzQWRhcHRlclwiO1xuZXhwb3J0IHsgUmFiYml0TVFBZGFwdGVyLCB0eXBlIFJhYmJpdE1RQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvUmFiYml0TVFBZGFwdGVyXCI7XG5leHBvcnQgeyBSZWRpc1N0cmVhbXNBZGFwdGVyLCB0eXBlIFJlZGlzU3RyZWFtc0NvbmZpZyB9IGZyb20gXCIuL2FkYXB0ZXJzL1JlZGlzU3RyZWFtc0FkYXB0ZXJcIjtcbmV4cG9ydCB7IFNRU0FkYXB0ZXIsIHR5cGUgU1FTQ29uZmlnIH0gZnJvbSBcIi4vYWRhcHRlcnMvU1FTQWRhcHRlclwiO1xuXG4vLyB2MC43IFBSIDUg4oCUIGZhY3RvcnkgKyBwb29sLiBVc2VkIGJ5IFdvcmtlclRyaWdnZXIgYW5kIGV4cG9zZWQgZm9yXG4vLyBoZWxwZXIgbm9kZXMgKGBAYmxva2pzL3dvcmtlci1wdWJsaXNoYCkgdGhhdCBuZWVkIHRvIGVucXVldWUgam9ic1xuLy8gZnJvbSBhbnkgd29ya2Zsb3cgd2l0aG91dCBidW5kbGluZyBhbGwgYnJva2VyIFNES3MuXG5leHBvcnQge1xuXHRfcmVzZXRBZGFwdGVyUG9vbEZvclRlc3RzLFxuXHRjcmVhdGVXb3JrZXJBZGFwdGVyLFxuXHRnZXRPckNyZWF0ZUFkYXB0ZXIsXG5cdHJlc29sdmVQcm92aWRlcixcbn0gZnJvbSBcIi4vYWRhcHRlcnMvZmFjdG9yeVwiO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBoZWxwZXIgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IFdvcmtlclByb3ZpZGVyLCBXb3JrZXJUcmlnZ2VyT3B0cyB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@blokjs/trigger-worker",
3
- "version": "0.6.17",
3
+ "version": "0.6.19",
4
+ "files": ["dist"],
4
5
  "description": "Worker-based trigger for Blok workflows - supports background job processing with concurrency, retries, and scheduling",
5
6
  "type": "module",
6
7
  "main": "dist/index.js",
@@ -14,9 +15,9 @@
14
15
  "author": "Deskree Technologies Inc.",
15
16
  "license": "Apache-2.0",
16
17
  "dependencies": {
17
- "@blokjs/helper": "^0.6.17",
18
- "@blokjs/runner": "^0.6.17",
19
- "@blokjs/shared": "^0.6.17",
18
+ "@blokjs/helper": "^0.6.19",
19
+ "@blokjs/runner": "^0.6.19",
20
+ "@blokjs/shared": "^0.6.19",
20
21
  "@opentelemetry/api": "^1.9.0",
21
22
  "uuid": "^11.1.0"
22
23
  },
package/CHANGELOG.md DELETED
@@ -1,22 +0,0 @@
1
- # @blokjs/trigger-worker
2
-
3
- ## 0.2.0
4
-
5
- ### Minor Changes
6
-
7
- - Initial public release of Blok packages.
8
-
9
- This release includes:
10
-
11
- - Core packages: @blokjs/shared, @blokjs/helper, @blokjs/runner
12
- - Node packages: @blokjs/api-call, @blokjs/if-else, @blokjs/react
13
- - Trigger packages: pubsub, queue, webhook, websocket, worker, cron, grpc
14
- - CLI tool: blokctl
15
- - Editor support: @blokjs/lsp-server, @blokjs/syntax
16
-
17
- ### Patch Changes
18
-
19
- - Updated dependencies
20
- - @blokjs/shared@0.2.0
21
- - @blokjs/helper@0.2.0
22
- - @blokjs/runner@0.2.0
@@ -1,116 +0,0 @@
1
- import type { WorkerJob } from "@blokjs/runner";
2
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
3
- import { NATSWorkerAdapter } from "../../src/adapters/NATSAdapter";
4
-
5
- /**
6
- * Real-NATS integration test for `NATSWorkerAdapter` (closes the
7
- * integration test debt from PR #86).
8
- *
9
- * Gated on `BLOK_INTEGRATION_NATS_SERVERS`. Skipped when unset.
10
- *
11
- * Bring up the test fixtures via:
12
- * docker compose -f infra/testing/docker-compose.yml up -d nats
13
- */
14
-
15
- const NATS_SERVERS = process.env.BLOK_INTEGRATION_NATS_SERVERS;
16
- const d = NATS_SERVERS ? describe : describe.skip;
17
-
18
- // CI runners are slower than local — JetStream stream + consumer
19
- // creation + first poll cycle can take several seconds on a cold
20
- // container. Override the 5s default so CI doesn't flake.
21
- const TEST_TIMEOUT_MS = 30_000;
22
-
23
- d("NATSWorkerAdapter — real NATS JetStream", () => {
24
- let adapter: NATSWorkerAdapter;
25
- const stream = `blok-test-worker-${Date.now()}-${Math.floor(Math.random() * 1e6)}`;
26
-
27
- beforeAll(async () => {
28
- adapter = new NATSWorkerAdapter({
29
- servers: NATS_SERVERS?.split(",").map((s) => s.trim()) ?? [],
30
- streamName: stream,
31
- });
32
- await adapter.connect();
33
- });
34
-
35
- afterAll(async () => {
36
- await adapter.disconnect();
37
- });
38
-
39
- it(
40
- "publishes a job and the consumer receives it",
41
- async () => {
42
- const queue = `test-q-publish-${Math.random().toString(36).slice(2)}`;
43
- const received: WorkerJob[] = [];
44
-
45
- await adapter.process({ queue }, async (job) => {
46
- received.push(job);
47
- await job.complete();
48
- });
49
-
50
- const jobId = await adapter.addJob(queue, { hello: "world", n: 1 });
51
- expect(typeof jobId).toBe("string");
52
-
53
- // Wait for delivery — NATS JetStream is durable; consumer pulls within ms.
54
- await waitFor(() => received.length === 1, TEST_TIMEOUT_MS - 5_000);
55
-
56
- expect(received).toHaveLength(1);
57
- expect(received[0].data).toEqual({ hello: "world", n: 1 });
58
- expect(received[0].queue).toBe(queue);
59
- expect(received[0].id).toBeTruthy();
60
-
61
- await adapter.stopProcessing(queue);
62
- },
63
- TEST_TIMEOUT_MS,
64
- );
65
-
66
- it(
67
- "isolates jobs across queues",
68
- async () => {
69
- const queueA = `test-q-a-${Math.random().toString(36).slice(2)}`;
70
- const queueB = `test-q-b-${Math.random().toString(36).slice(2)}`;
71
- const receivedA: WorkerJob[] = [];
72
- const receivedB: WorkerJob[] = [];
73
-
74
- await adapter.process({ queue: queueA }, async (job) => {
75
- receivedA.push(job);
76
- await job.complete();
77
- });
78
- await adapter.process({ queue: queueB }, async (job) => {
79
- receivedB.push(job);
80
- await job.complete();
81
- });
82
-
83
- await adapter.addJob(queueA, { from: "A" });
84
- await adapter.addJob(queueB, { from: "B" });
85
-
86
- await waitFor(() => receivedA.length === 1 && receivedB.length === 1, TEST_TIMEOUT_MS - 5_000);
87
-
88
- expect(receivedA[0].data).toEqual({ from: "A" });
89
- expect(receivedB[0].data).toEqual({ from: "B" });
90
- expect(receivedA[0].queue).toBe(queueA);
91
- expect(receivedB[0].queue).toBe(queueB);
92
-
93
- await adapter.stopProcessing(queueA);
94
- await adapter.stopProcessing(queueB);
95
- },
96
- TEST_TIMEOUT_MS,
97
- );
98
-
99
- it("isConnected reflects state", async () => {
100
- expect(adapter.isConnected()).toBe(true);
101
- });
102
-
103
- it("healthCheck returns true when connected", async () => {
104
- const healthy = await adapter.healthCheck();
105
- expect(healthy).toBe(true);
106
- });
107
- });
108
-
109
- async function waitFor(predicate: () => boolean, timeoutMs: number): Promise<void> {
110
- const start = Date.now();
111
- while (Date.now() - start < timeoutMs) {
112
- if (predicate()) return;
113
- await new Promise((r) => setTimeout(r, 50));
114
- }
115
- throw new Error(`waitFor timed out after ${timeoutMs}ms`);
116
- }
@@ -1,164 +0,0 @@
1
- import type { WorkerJob } from "@blokjs/runner";
2
- import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest";
3
- import { PgBossAdapter } from "../../src/adapters/PgBossAdapter";
4
-
5
- /**
6
- * Real-Postgres integration test for `PgBossAdapter` (closes Phase 2.1
7
- * broker-adapter test debt deferred from PR #91).
8
- *
9
- * Gated on `BLOK_INTEGRATION_POSTGRES_URL`. Skipped when unset.
10
- *
11
- * Bring up the test fixtures via:
12
- * docker compose -f infra/testing/docker-compose.yml up -d postgres
13
- *
14
- * Then run:
15
- * BLOK_INTEGRATION_POSTGRES_URL=postgres://blok:blok_test@localhost:5433/blok_test \
16
- * bun run test
17
- *
18
- * Note: pg-boss creates its own schema (`pgboss` by default) on first
19
- * connect; we use a per-test schema name so a flaky run doesn't poison
20
- * the next one. Each test cleans up via `boss.stop({ graceful: true })`.
21
- */
22
-
23
- const POSTGRES_URL = process.env.BLOK_INTEGRATION_POSTGRES_URL;
24
- const d = POSTGRES_URL ? describe : describe.skip;
25
-
26
- const TEST_TIMEOUT_MS = 60_000; // pg-boss migration on first start is slow
27
-
28
- d("PgBossAdapter — real Postgres", () => {
29
- const adapters: PgBossAdapter[] = [];
30
-
31
- async function newAdapter(): Promise<PgBossAdapter> {
32
- // Random schema per adapter so pg-boss's auto-migration runs
33
- // fresh and the per-test state doesn't bleed across `it`s. pg-boss
34
- // uses one schema per `PgBoss` instance.
35
- const schema = `pgboss_test_${Math.random().toString(36).slice(2, 10)}`;
36
- const adapter = new PgBossAdapter({ connectionString: POSTGRES_URL, schema });
37
- await adapter.connect();
38
- adapters.push(adapter);
39
- return adapter;
40
- }
41
-
42
- afterEach(async () => {
43
- for (const a of adapters.splice(0)) {
44
- try {
45
- await a.disconnect();
46
- } catch {
47
- /* ignore — best-effort */
48
- }
49
- }
50
- });
51
-
52
- afterAll(async () => {
53
- for (const a of adapters.splice(0)) {
54
- try {
55
- await a.disconnect();
56
- } catch {
57
- /* ignore */
58
- }
59
- }
60
- });
61
-
62
- it(
63
- "publishes a job and the consumer receives it (single-queue happy path)",
64
- async () => {
65
- const adapter = await newAdapter();
66
- const queue = `blok-test-pgboss-publish-${Math.random().toString(36).slice(2)}`;
67
- const received: WorkerJob[] = [];
68
-
69
- await adapter.process({ queue }, async (job) => {
70
- received.push(job);
71
- await job.complete();
72
- });
73
-
74
- const jobId = await adapter.addJob(queue, { hello: "pg-boss", n: 1 });
75
- expect(typeof jobId).toBe("string");
76
- expect(jobId.length).toBeGreaterThan(0);
77
-
78
- await waitFor(() => received.length === 1, TEST_TIMEOUT_MS - 10_000);
79
-
80
- expect(received[0].data).toEqual({ hello: "pg-boss", n: 1 });
81
- expect(received[0].queue).toBe(queue);
82
- expect(received[0].id).toBeTruthy();
83
-
84
- await adapter.stopProcessing(queue);
85
- },
86
- TEST_TIMEOUT_MS,
87
- );
88
-
89
- it(
90
- "isolates jobs across distinct queues within one PgBoss instance",
91
- async () => {
92
- const adapter = await newAdapter();
93
- const queueA = `blok-test-pgboss-a-${Math.random().toString(36).slice(2)}`;
94
- const queueB = `blok-test-pgboss-b-${Math.random().toString(36).slice(2)}`;
95
- const receivedA: WorkerJob[] = [];
96
- const receivedB: WorkerJob[] = [];
97
-
98
- await adapter.process({ queue: queueA }, async (job) => {
99
- receivedA.push(job);
100
- await job.complete();
101
- });
102
- await adapter.process({ queue: queueB }, async (job) => {
103
- receivedB.push(job);
104
- await job.complete();
105
- });
106
-
107
- await adapter.addJob(queueA, { from: "A" });
108
- await adapter.addJob(queueB, { from: "B" });
109
-
110
- await waitFor(() => receivedA.length === 1 && receivedB.length === 1, TEST_TIMEOUT_MS - 10_000);
111
-
112
- expect(receivedA[0].data).toEqual({ from: "A" });
113
- expect(receivedB[0].data).toEqual({ from: "B" });
114
-
115
- await adapter.stopProcessing(queueA);
116
- await adapter.stopProcessing(queueB);
117
- },
118
- TEST_TIMEOUT_MS,
119
- );
120
-
121
- it(
122
- "handler throw triggers pg-boss retry until retryLimit, then drops to DLQ",
123
- async () => {
124
- // pg-boss reschedules failed jobs internally based on
125
- // `retryLimit`. We assert the handler is invoked at least
126
- // twice when `retries: 1` (= 2 total attempts).
127
- const adapter = await newAdapter();
128
- const queue = `blok-test-pgboss-retry-${Math.random().toString(36).slice(2)}`;
129
- let attempts = 0;
130
-
131
- await adapter.process({ queue, retries: 1 }, async (_job) => {
132
- attempts += 1;
133
- throw new Error(`simulated failure attempt ${attempts}`);
134
- });
135
-
136
- await adapter.addJob(queue, { will_fail: true }, { retries: 1 });
137
-
138
- // Wait for at least 2 attempts. pg-boss's default retry-delay
139
- // can be several seconds; the test timeout (60s) accommodates.
140
- await waitFor(() => attempts >= 2, TEST_TIMEOUT_MS - 10_000);
141
-
142
- expect(attempts).toBeGreaterThanOrEqual(2);
143
-
144
- await adapter.stopProcessing(queue);
145
- },
146
- TEST_TIMEOUT_MS,
147
- );
148
-
149
- it("isConnected + healthCheck reflect the live state", async () => {
150
- const adapter = await newAdapter();
151
- expect(adapter.isConnected()).toBe(true);
152
- const healthy = await adapter.healthCheck();
153
- expect(healthy).toBe(true);
154
- });
155
- });
156
-
157
- async function waitFor(predicate: () => boolean, timeoutMs: number): Promise<void> {
158
- const start = Date.now();
159
- while (Date.now() - start < timeoutMs) {
160
- if (predicate()) return;
161
- await new Promise((r) => setTimeout(r, 100));
162
- }
163
- throw new Error(`waitFor timed out after ${timeoutMs}ms`);
164
- }