@blokjs/trigger-worker 0.2.1 → 0.6.1

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 (50) hide show
  1. package/__tests__/integration/nats-adapter.real-nats.test.ts +116 -0
  2. package/__tests__/integration/pgboss-adapter.real-pg.test.ts +164 -0
  3. package/__tests__/integration/rabbitmq-adapter.real-rabbitmq.test.ts +179 -0
  4. package/__tests__/integration/sqs-adapter.real-sqs.test.ts +228 -0
  5. package/dist/WorkerTrigger.d.ts +40 -4
  6. package/dist/WorkerTrigger.js +272 -40
  7. package/dist/adapters/BullMQAdapter.d.ts +1 -1
  8. package/dist/adapters/BullMQAdapter.js +5 -42
  9. package/dist/adapters/InMemoryAdapter.d.ts +1 -1
  10. package/dist/adapters/InMemoryAdapter.js +13 -12
  11. package/dist/adapters/KafkaAdapter.d.ts +62 -0
  12. package/dist/adapters/KafkaAdapter.js +236 -0
  13. package/dist/adapters/NATSAdapter.d.ts +110 -0
  14. package/dist/adapters/NATSAdapter.js +394 -0
  15. package/dist/adapters/PgBossAdapter.d.ts +56 -0
  16. package/dist/adapters/PgBossAdapter.js +251 -0
  17. package/dist/adapters/RabbitMQAdapter.d.ts +51 -0
  18. package/dist/adapters/RabbitMQAdapter.js +241 -0
  19. package/dist/adapters/RedisStreamsAdapter.d.ts +64 -0
  20. package/dist/adapters/RedisStreamsAdapter.js +240 -0
  21. package/dist/adapters/SQSAdapter.d.ts +61 -0
  22. package/dist/adapters/SQSAdapter.js +269 -0
  23. package/dist/adapters/factory.d.ts +34 -0
  24. package/dist/adapters/factory.js +103 -0
  25. package/dist/index.d.ts +25 -7
  26. package/dist/index.js +31 -16
  27. package/package.json +27 -5
  28. package/src/WorkerTrigger.test.ts +44 -14
  29. package/src/WorkerTrigger.ts +299 -27
  30. package/src/adapters/InMemoryAdapter.ts +9 -5
  31. package/src/adapters/KafkaAdapter.ts +277 -0
  32. package/src/adapters/NATSAdapter.ts +454 -0
  33. package/src/adapters/PgBossAdapter.ts +293 -0
  34. package/src/adapters/RabbitMQAdapter.ts +285 -0
  35. package/src/adapters/RedisStreamsAdapter.ts +286 -0
  36. package/src/adapters/SQSAdapter.ts +306 -0
  37. package/src/adapters/factory.test.ts +89 -0
  38. package/src/adapters/factory.ts +111 -0
  39. package/src/adapters/new-adapters.test.ts +130 -0
  40. package/src/index.ts +31 -4
  41. package/template/.env.example +13 -0
  42. package/template/package.json +45 -0
  43. package/template/src/Nodes.ts +10 -0
  44. package/template/src/Workflows.ts +8 -0
  45. package/template/src/index.ts +41 -0
  46. package/template/src/runner/WorkerServer.ts +34 -0
  47. package/template/src/runner/types/Workflows.ts +7 -0
  48. package/template/src/workflows/jobs/process-job.ts +47 -0
  49. package/template/tsconfig.json +31 -0
  50. package/template/vitest.config.ts +39 -0
@@ -18,9 +18,9 @@
18
18
  * - Execute workflow via this.run(ctx)
19
19
  * - Ack on success, retry or DLQ on failure
20
20
  */
21
- import type { HelperResponse, WorkerTriggerOpts } from "@blok/helper";
22
- import { DefaultLogger, type GlobalOptions, type BlokService, TriggerBase, type TriggerResponse } from "@blok/runner";
23
- import type { Context } from "@blok/shared";
21
+ import { type HelperResponse, type WorkerTriggerOpts } from "@blokjs/helper";
22
+ import { type BlokService, DefaultLogger, type GlobalOptions, TriggerBase, type TriggerResponse } from "@blokjs/runner";
23
+ import type { Context } from "@blokjs/shared";
24
24
  /**
25
25
  * Job received from worker queue
26
26
  */
@@ -135,9 +135,28 @@ export declare abstract class WorkerTrigger extends TriggerBase {
135
135
  protected nodeMap: GlobalOptions;
136
136
  protected readonly tracer: import("@opentelemetry/api").Tracer;
137
137
  protected readonly logger: DefaultLogger;
138
- protected abstract adapter: WorkerAdapter;
138
+ /**
139
+ * v0.7 PR 5 — the "default" adapter, used when a workflow's
140
+ * `trigger.worker.provider` field is omitted AND the
141
+ * `BLOK_WORKER_ADAPTER` env var is unset. Subclasses MAY set this
142
+ * for back-compat with the pre-v0.7 single-adapter pattern
143
+ * (`class WorkerServer extends WorkerTrigger { protected adapter = new NATSWorkerAdapter() }`).
144
+ *
145
+ * When unset AND no per-workflow provider is specified, the factory
146
+ * falls back to `in-memory`. The factory pool (`adapters/factory.ts`)
147
+ * tracks one connected adapter per provider so multiple workflows
148
+ * with the same provider share a single broker connection.
149
+ */
150
+ protected adapter?: WorkerAdapter;
139
151
  /** Active queues being processed */
140
152
  protected activeQueues: Set<string>;
153
+ /**
154
+ * v0.7 PR 5 — adapter pool, keyed by provider name. Populated lazily
155
+ * inside `listen()` as workflows are matched to providers. Each
156
+ * adapter is connected once and reused across workflows that share
157
+ * its provider. Drained in `stop()`.
158
+ */
159
+ protected adapterPool: Map<string, WorkerAdapter>;
141
160
  protected abstract nodes: Record<string, BlokService<unknown>>;
142
161
  protected abstract workflows: Record<string, HelperResponse>;
143
162
  constructor();
@@ -176,6 +195,23 @@ export declare abstract class WorkerTrigger extends TriggerBase {
176
195
  * Get list of active queues
177
196
  */
178
197
  getActiveQueues(): string[];
198
+ /**
199
+ * v0.7 PR 5 — pick the adapter for a workflow's `provider` field.
200
+ *
201
+ * Resolution order:
202
+ * 1. Subclass-set `this.adapter` (back-compat: pre-v0.7 pattern
203
+ * where one process binds to one adapter at construction time).
204
+ * 2. Per-workflow `provider` field, looked up via the factory.
205
+ * 3. `BLOK_WORKER_ADAPTER` env var.
206
+ * 4. `in-memory` fallback.
207
+ *
208
+ * Adapters are connected on first use and pooled per provider so
209
+ * multiple workflows sharing a provider share one broker
210
+ * connection. Health-dependency registration also happens here so
211
+ * each provider is tracked individually in `/health`.
212
+ */
213
+ protected resolveAdapterForWorkflow(config: WorkerTriggerOpts): Promise<WorkerAdapter>;
214
+ private registerAdapterHealth;
179
215
  /**
180
216
  * Get all workflows that have worker triggers
181
217
  */