@blokjs/trigger-worker 0.6.18 → 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.
- package/dist/WorkerTrigger.d.ts +27 -3
- package/dist/WorkerTrigger.js +168 -26
- package/dist/adapters/KafkaAdapter.d.ts +5 -0
- package/dist/adapters/KafkaAdapter.js +12 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +5 -4
- package/CHANGELOG.md +0 -22
- package/__tests__/integration/nats-adapter.real-nats.test.ts +0 -116
- package/__tests__/integration/pgboss-adapter.real-pg.test.ts +0 -164
- package/__tests__/integration/rabbitmq-adapter.real-rabbitmq.test.ts +0 -179
- package/__tests__/integration/sqs-adapter.real-sqs.test.ts +0 -228
- package/src/WorkerTrigger.test.ts +0 -540
- package/src/WorkerTrigger.ts +0 -784
- package/src/adapters/BullMQAdapter.ts +0 -296
- package/src/adapters/InMemoryAdapter.ts +0 -280
- package/src/adapters/KafkaAdapter.ts +0 -277
- package/src/adapters/NATSAdapter.ts +0 -454
- package/src/adapters/PgBossAdapter.ts +0 -293
- package/src/adapters/RabbitMQAdapter.ts +0 -285
- package/src/adapters/RedisStreamsAdapter.ts +0 -286
- package/src/adapters/SQSAdapter.ts +0 -306
- package/src/adapters/factory.test.ts +0 -89
- package/src/adapters/factory.ts +0 -111
- package/src/adapters/new-adapters.test.ts +0 -130
- package/src/index.ts +0 -94
- package/template/.env.example +0 -13
- package/template/package.json +0 -45
- package/template/src/Nodes.ts +0 -10
- package/template/src/Workflows.ts +0 -8
- package/template/src/index.ts +0 -41
- package/template/src/runner/WorkerServer.ts +0 -34
- package/template/src/runner/types/Workflows.ts +0 -7
- package/template/src/workflows/jobs/process-job.ts +0 -47
- package/template/tsconfig.json +0 -31
- package/template/vitest.config.ts +0 -39
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2Fma2FBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL0thZmthQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFHSCxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQXNDbEMsTUFBTSxPQUFPLFlBQVk7SUFDZixRQUFRLEdBQUcsT0FBZ0IsQ0FBQztJQUNwQixNQUFNLENBQWM7SUFDckMsdUdBQXVHO0lBQy9GLEtBQUssR0FBUSxJQUFJLENBQUM7SUFDbEIsTUFBTSxHQUFrQixFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDakQsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0QsWUFBWSxNQUE2QjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ2IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxhQUFhO1lBQzFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3JFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3JFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLE1BQU07U0FDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzNCLElBQUksQ0FBQztZQUNKLG9GQUFvRjtZQUNwRixNQUFNLE9BQU8sR0FBUSxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FDVCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7Z0JBQ25ELENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDaEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUM1QixHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dCQUNwQixJQUFJO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2QsaUNBQWtDLEdBQWEsQ0FBQyxPQUFPLHlEQUF5RCxDQUNoSCxDQUFDO1FBQ0gsQ0FBQztJQUNGLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDNUIsS0FBSyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQztnQkFDSixNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLFlBQVk7WUFDYixDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLFlBQVk7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0osTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1IsWUFBWTtRQUNiLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUF5QixFQUFFLE9BQTBDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUMzRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBdUIsQ0FBQztRQUVqRSxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssS0FBSztZQUNoQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQ25CLE9BQU8sR0FHUCxFQUFFLEVBQUU7Z0JBQ0osTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1RCxJQUFJLElBQWEsQ0FBQztnQkFDbEIsSUFBSSxDQUFDO29CQUNKLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNwRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUixJQUFJLEdBQUcsYUFBYSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7Z0JBQzNDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNyQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO3dCQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUYsQ0FBQztnQkFDRCxNQUFNLEdBQUcsR0FBYztvQkFDdEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUN4RSxJQUFJO29CQUNKLE9BQU87b0JBQ1AsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDO29CQUM5QixRQUFRLEVBQUUsQ0FBQztvQkFDWCxVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDO29CQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3ZCLEdBQUcsRUFBRSxPQUFPO29CQUNaLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDcEIsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLENBQUM7b0JBQ0QsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFXLEVBQUUsRUFBRTt3QkFDM0IsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7d0JBQ2xCLE1BQU0sSUFBSSxDQUFDO29CQUNaLENBQUM7aUJBQ0QsQ0FBQztnQkFDRixLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxDQUFDO29CQUNKLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuQixLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNkLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNsQixNQUFNLEdBQUcsQ0FBQztnQkFDWCxDQUFDO3dCQUFTLENBQUM7b0JBQ1YsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0YsQ0FBQztTQUNELENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUNYLEtBQWEsRUFDYixJQUFhLEVBQ2IsSUFBZ0c7UUFFaEcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDckYsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMvQixLQUFLLEVBQUUsS0FBSztZQUNaLFFBQVEsRUFBRTtnQkFDVDtvQkFDQyxHQUFHO29CQUNILEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDNUU7YUFDRDtTQUNELENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYTtRQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDSixNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLFlBQVk7WUFDYixDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNKLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1IsWUFBWTtZQUNiLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUixPQUFPLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDRixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFhO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQztnQkFDSixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxtRUFBbUU7Z0JBQ25FLGtFQUFrRTtnQkFDbEUsNERBQTREO2dCQUM1RCxnQ0FBZ0M7Z0JBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDYixDQUFDO1FBQ0YsQ0FBQztRQUNELE9BQU87WUFDTixPQUFPO1lBQ1AsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3ZCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM3QixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsT0FBTyxFQUFFLENBQUM7U0FDVixDQUFDO0lBQ0gsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBLYWZrYUFkYXB0ZXIg4oCUIHYwLjcgUFIgNSDigJQgV29ya2VyIGFkYXB0ZXIgYmFja2VkIGJ5IEFwYWNoZSBLYWZrYSB2aWFcbiAqIGBrYWZrYWpzYC4gQ29uc3VtZXMgZnJvbSBhIHRvcGljICh0aGUgYHF1ZXVlYCBmaWVsZCkgd2l0aCBhXG4gKiBjb25zdW1lci1ncm91cCBpZGVudGlmaWVyOyBwcm9kdWNlcyB2aWEgdGhlIHNhbWUgY2xpZW50LlxuICpcbiAqIEthZmthIGlzIGZ1bmRhbWVudGFsbHkgYSBzdHJlYW1pbmcgcGxhdGZvcm0g4oCUIG5vdCBhIHF1ZXVlIOKAlCBzbyBhXG4gKiBmZXcgc2VtYW50aWNzIGRpZmZlciBmcm9tIEJ1bGxNUS9TUVMvUmFiYml0TVE6XG4gKlxuICogICAtICoqT3JkZXJpbmcqKjogcGVyLXBhcnRpdGlvbiwgbm90IHBlci10b3BpYy4gU2V0IHRoZSBwYXJ0aXRpb25cbiAqICAgICBrZXkgdmlhIHRoZSBgZGVkdXBJZGAgZmllbGQgb24gYGFkZEpvYmAgdG8ga2VlcCByZWxhdGVkXG4gKiAgICAgbWVzc2FnZXMgb24gdGhlIHNhbWUgcGFydGl0aW9uLlxuICogICAtICoqUmV0cmllcyoqOiBLYWZrYSBkb2Vzbid0IGhhdmUgYSBicm9rZXItc2lkZSByZXRyeSBjb25jZXB0LlxuICogICAgIFRoZSBhZGFwdGVyIHJlLXRocm93cyBvbiBoYW5kbGVyIGZhaWx1cmU7IG9mZnNldCBjb21taXQgaXNcbiAqICAgICBzdXBwcmVzc2VkIHNvIHRoZSBjb25zdW1lciByZS1wb2xscyB0aGUgbWVzc2FnZSBvbiB0aGUgbmV4dFxuICogICAgIGN5Y2xlLiBGb3IgcmVhbCByZXRyeSBzZW1hbnRpY3MsIGxheWVyIGEgZGVhZC1sZXR0ZXIgdG9waWMuXG4gKiAgIC0gKipTdGF0cyoqOiBLYWZrYUpTIGV4cG9zZXMgY29uc3VtZXItZ3JvdXAgbGFnIHZpYSBpdHMgYWRtaW5cbiAqICAgICBjbGllbnQ7IHRoZSBsYWcgY291bnQgaXMgcmVwb3J0ZWQgYXMgYHdhaXRpbmdgLiBPdGhlciBzdGF0c1xuICogICAgIGFyZSB0cmFja2VkIGxvY2FsbHkgcGVyIGNvbnN1bWVyLlxuICpcbiAqIFJlcXVpcmVzIGBrYWZrYWpzYCBhcyBhIHBlZXIgZGVwZW5kZW5jeTpcbiAqXG4gKiAgICAgYnVuIGFkZCBrYWZrYWpzXG4gKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIChyZWFkIGF0IGFkYXB0ZXIgY29uc3RydWN0aW9uKTpcbiAqICAgLSBgS0FGS0FfQlJPS0VSU2AgICAgICAgICAgIOKAlCBjb21tYS1zZXBhcmF0ZWQgbGlzdCAoZGVmYXVsdCBgbG9jYWxob3N0OjkwOTJgKS5cbiAqICAgLSBgS0FGS0FfQ0xJRU5UX0lEYCAgICAgICAgIOKAlCBjbGllbnQuaWQgKGRlZmF1bHQgYFwiYmxvay13b3JrZXJcImApLlxuICogICAtIGBLQUZLQV9TQVNMX1VTRVJOQU1FYCAgICAg4oCUIFNBU0wvUExBSU4gdXNlcm5hbWUgKG9wdGlvbmFsKS5cbiAqICAgLSBgS0FGS0FfU0FTTF9QQVNTV09SRGAgICAgIOKAlCBTQVNML1BMQUlOIHBhc3N3b3JkIChvcHRpb25hbCkuXG4gKiAgIC0gYEtBRktBX1NTTGAgICAgICAgICAgICAgICDigJQgd2hlbiBgXCJ0cnVlXCJgLCBlbmFibGUgVExTLlxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya2VyVHJpZ2dlck9wdHMgfSBmcm9tIFwiQGJsb2tqcy9oZWxwZXJcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBZGFwdGVyLCBXb3JrZXJKb2IsIFdvcmtlclF1ZXVlU3RhdHMgfSBmcm9tIFwiLi4vV29ya2VyVHJpZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEthZmthQ29uZmlnIHtcblx0YnJva2Vyczogc3RyaW5nW107XG5cdGNsaWVudElkOiBzdHJpbmc7XG5cdHNhc2xVc2VybmFtZT86IHN0cmluZztcblx0c2FzbFBhc3N3b3JkPzogc3RyaW5nO1xuXHRzc2w6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBLYWZrYUpzSGFuZGxlIHtcblx0cHJvZHVjZXI/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,
|
|
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.
|
|
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.
|
|
18
|
-
"@blokjs/runner": "^0.6.
|
|
19
|
-
"@blokjs/shared": "^0.6.
|
|
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
|
-
}
|