@nwire/queue 0.7.1 → 0.8.17
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/__tests__/cancellation.test.d.ts +8 -0
- package/dist/__tests__/cancellation.test.d.ts.map +1 -0
- package/dist/__tests__/cancellation.test.js +147 -0
- package/dist/__tests__/cancellation.test.js.map +1 -0
- package/dist/__tests__/queue.test.js +26 -1
- package/dist/__tests__/queue.test.js.map +1 -1
- package/dist/queue-transport.d.ts +17 -1
- package/dist/queue-transport.d.ts.map +1 -1
- package/dist/queue-transport.js.map +1 -1
- package/dist/queue-worker.d.ts +41 -1
- package/dist/queue-worker.d.ts.map +1 -1
- package/dist/queue-worker.js +65 -2
- package/dist/queue-worker.js.map +1 -1
- package/dist/queue.d.ts +2 -2
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +2 -2
- package/dist/queue.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue worker cancellation — `worker.stop()` flips an internal
|
|
3
|
+
* AbortController so in-flight handlers observing `ctx.signal` can
|
|
4
|
+
* bail before drain finishes. The combine path covers a transport
|
|
5
|
+
* that supplies its own per-job signal (BullMQ lock expiry, etc.).
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=cancellation.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancellation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cancellation.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Queue worker cancellation — `worker.stop()` flips an internal
|
|
3
|
+
* AbortController so in-flight handlers observing `ctx.signal` can
|
|
4
|
+
* bail before drain finishes. The combine path covers a transport
|
|
5
|
+
* that supplies its own per-job signal (BullMQ lock expiry, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from "vitest";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { defineEvent } from "@nwire/messages";
|
|
10
|
+
import * as forge from "@nwire/forge";
|
|
11
|
+
import { seedEnvelope } from "@nwire/envelope";
|
|
12
|
+
import { InMemoryQueueTransport, createQueueWorker } from "../queue.js";
|
|
13
|
+
const { defineAction, defineActor, defineHandler, defineModule, eventFactory, createApp } = forge;
|
|
14
|
+
const SlowedEventDef = defineEvent({
|
|
15
|
+
name: "demo.slowed",
|
|
16
|
+
schema: z.object({ id: z.string() }),
|
|
17
|
+
});
|
|
18
|
+
const Slowed = eventFactory(SlowedEventDef);
|
|
19
|
+
const SlowActor = defineActor("slow", {
|
|
20
|
+
schema: z.object({ id: z.string(), count: z.number().optional() }),
|
|
21
|
+
key: "id",
|
|
22
|
+
initial: "idle",
|
|
23
|
+
states: {
|
|
24
|
+
idle: {
|
|
25
|
+
on: {
|
|
26
|
+
[SlowedEventDef.name]: {
|
|
27
|
+
assign: (ctx, event) => {
|
|
28
|
+
const c = ctx;
|
|
29
|
+
const e = event;
|
|
30
|
+
return { id: e.id, count: (c.count ?? 0) + 1 };
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const slow = defineAction({
|
|
38
|
+
name: "demo.slow",
|
|
39
|
+
schema: z.object({ id: z.string(), ms: z.number() }),
|
|
40
|
+
});
|
|
41
|
+
describe("queue worker — cancellation via worker.stop()", () => {
|
|
42
|
+
it("aborts ctx.signal of in-flight handlers when worker.stop() is called", async () => {
|
|
43
|
+
let observedAbort = false;
|
|
44
|
+
let handlerStarted = false;
|
|
45
|
+
let resolveStarted = () => { };
|
|
46
|
+
const started = new Promise((r) => {
|
|
47
|
+
resolveStarted = r;
|
|
48
|
+
});
|
|
49
|
+
const slowHandler = defineHandler(slow, async (input, ctx) => {
|
|
50
|
+
handlerStarted = true;
|
|
51
|
+
resolveStarted();
|
|
52
|
+
await new Promise((resolve, reject) => {
|
|
53
|
+
const t = setTimeout(resolve, input.ms);
|
|
54
|
+
ctx.signal.addEventListener("abort", () => {
|
|
55
|
+
clearTimeout(t);
|
|
56
|
+
observedAbort = true;
|
|
57
|
+
reject(new Error("aborted"));
|
|
58
|
+
}, { once: true });
|
|
59
|
+
});
|
|
60
|
+
return Slowed({ id: input.id });
|
|
61
|
+
});
|
|
62
|
+
const demoModule = defineModule("demo", {
|
|
63
|
+
actions: [slow],
|
|
64
|
+
actors: [SlowActor],
|
|
65
|
+
handlers: [slowHandler],
|
|
66
|
+
events: [SlowedEventDef],
|
|
67
|
+
});
|
|
68
|
+
const app = createApp({ modules: [demoModule] });
|
|
69
|
+
const transport = new InMemoryQueueTransport();
|
|
70
|
+
const worker = createQueueWorker(app, transport, {
|
|
71
|
+
subscribe: [{ queue: "demo.slow", action: slow }],
|
|
72
|
+
});
|
|
73
|
+
await app.start();
|
|
74
|
+
await worker.start();
|
|
75
|
+
// Fire-and-forget the enqueue — the in-memory transport awaits its
|
|
76
|
+
// consumer, but the consumer awaits the handler which awaits the
|
|
77
|
+
// signal. We don't await this; we'll abort it via worker.stop().
|
|
78
|
+
const enqueued = transport
|
|
79
|
+
.enqueue("demo.slow", {
|
|
80
|
+
input: { id: "s-1", ms: 5000 },
|
|
81
|
+
envelope: seedEnvelope({}),
|
|
82
|
+
})
|
|
83
|
+
.catch(() => undefined);
|
|
84
|
+
await started;
|
|
85
|
+
expect(handlerStarted).toBe(true);
|
|
86
|
+
await worker.stop();
|
|
87
|
+
await enqueued;
|
|
88
|
+
expect(observedAbort).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
it("combines worker-stop signal with a transport-supplied job signal (BullMQ shape)", async () => {
|
|
91
|
+
// Hand-rolled transport that supplies its own per-job signal — this
|
|
92
|
+
// mirrors what a BullMQ adapter does when wiring the job lock.
|
|
93
|
+
let observedAbort = false;
|
|
94
|
+
let resolveStarted = () => { };
|
|
95
|
+
const started = new Promise((r) => {
|
|
96
|
+
resolveStarted = r;
|
|
97
|
+
});
|
|
98
|
+
const jobController = new AbortController();
|
|
99
|
+
const fakeTransport = {
|
|
100
|
+
enqueue: async () => undefined,
|
|
101
|
+
stop: async () => undefined,
|
|
102
|
+
subscribe(_queue, consumer) {
|
|
103
|
+
// Simulate transport delivering one message with its own signal.
|
|
104
|
+
const msg = {
|
|
105
|
+
queue: "demo.slow",
|
|
106
|
+
input: { id: "j-1", ms: 5000 },
|
|
107
|
+
envelope: seedEnvelope({}),
|
|
108
|
+
};
|
|
109
|
+
// Don't await — we want to abort it mid-flight via jobController.
|
|
110
|
+
// The error is swallowed by the transport in real life; we mirror that.
|
|
111
|
+
void consumer(msg, jobController.signal).catch(() => undefined);
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
const slowHandler = defineHandler(slow, async (input, ctx) => {
|
|
115
|
+
resolveStarted();
|
|
116
|
+
await new Promise((resolve, reject) => {
|
|
117
|
+
const t = setTimeout(resolve, input.ms);
|
|
118
|
+
ctx.signal.addEventListener("abort", () => {
|
|
119
|
+
clearTimeout(t);
|
|
120
|
+
observedAbort = true;
|
|
121
|
+
reject(new Error("aborted"));
|
|
122
|
+
}, { once: true });
|
|
123
|
+
});
|
|
124
|
+
return Slowed({ id: input.id });
|
|
125
|
+
});
|
|
126
|
+
const demoModule = defineModule("demo", {
|
|
127
|
+
actions: [slow],
|
|
128
|
+
actors: [SlowActor],
|
|
129
|
+
handlers: [slowHandler],
|
|
130
|
+
events: [SlowedEventDef],
|
|
131
|
+
});
|
|
132
|
+
const app = createApp({ modules: [demoModule] });
|
|
133
|
+
const worker = createQueueWorker(app, fakeTransport, {
|
|
134
|
+
subscribe: [{ queue: "demo.slow", action: slow }],
|
|
135
|
+
});
|
|
136
|
+
await app.start();
|
|
137
|
+
await worker.start();
|
|
138
|
+
await started;
|
|
139
|
+
// Fire the job-side signal (lock expired / job removed). Worker is
|
|
140
|
+
// still running.
|
|
141
|
+
jobController.abort();
|
|
142
|
+
await new Promise((r) => setTimeout(r, 30));
|
|
143
|
+
expect(observedAbort).toBe(true);
|
|
144
|
+
await worker.stop();
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=cancellation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancellation.test.js","sourceRoot":"","sources":["../../src/__tests__/cancellation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { z } from "zod";
|
|
|
10
10
|
import { defineEvent } from "@nwire/messages";
|
|
11
11
|
import * as forge from "@nwire/forge";
|
|
12
12
|
import { seedEnvelope } from "@nwire/envelope";
|
|
13
|
-
import { InMemoryQueueTransport, createQueueWorker } from "../queue";
|
|
13
|
+
import { InMemoryQueueTransport, createQueueWorker, subscription } from "../queue.js";
|
|
14
14
|
const { defineAction, defineActor, defineHandler, defineModule, eventFactory, createApp } = forge;
|
|
15
15
|
const PingedEventDef = defineEvent({
|
|
16
16
|
name: "demo.pinged",
|
|
@@ -109,4 +109,29 @@ describe("queue worker — InMemoryQueueTransport drives actions through the run
|
|
|
109
109
|
await worker.stop();
|
|
110
110
|
});
|
|
111
111
|
});
|
|
112
|
+
describe("subscription(...).from(source) — trigger source declaration (G6)", () => {
|
|
113
|
+
it("stashes the source and exposes it via worker.listSubscriptions()", async () => {
|
|
114
|
+
const sub = subscription({ queue: "demo.ping", action: ping }).from("internal-trigger");
|
|
115
|
+
expect(sub.source).toBe("internal-trigger");
|
|
116
|
+
expect(sub.queue).toBe("demo.ping");
|
|
117
|
+
// Idempotent — later .from() overrides earlier; original unchanged.
|
|
118
|
+
const twice = sub.from("scheduler");
|
|
119
|
+
expect(twice.source).toBe("scheduler");
|
|
120
|
+
expect(sub.source).toBe("internal-trigger");
|
|
121
|
+
const app = createApp({ modules: [demoModule] });
|
|
122
|
+
const transport = new InMemoryQueueTransport();
|
|
123
|
+
const worker = createQueueWorker(app, transport, {
|
|
124
|
+
subscribe: [
|
|
125
|
+
subscription({ queue: "demo.ping", action: ping }).from("stripe-webhook"),
|
|
126
|
+
{ queue: "demo.ping", action: ping }, // plain literal — no source
|
|
127
|
+
],
|
|
128
|
+
});
|
|
129
|
+
const list = worker.listSubscriptions();
|
|
130
|
+
expect(list).toEqual([
|
|
131
|
+
{ queue: "demo.ping", action: "demo.ping", source: "stripe-webhook" },
|
|
132
|
+
{ queue: "demo.ping", action: "demo.ping", source: undefined },
|
|
133
|
+
]);
|
|
134
|
+
await worker.stop();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
112
137
|
//# sourceMappingURL=queue.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../src/__tests__/queue.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../src/__tests__/queue.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,23 @@ export interface QueueMessage<TInput = unknown> {
|
|
|
30
30
|
/** Stable id for at-least-once dedup (idempotency). Optional. */
|
|
31
31
|
readonly messageId?: string;
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* A consumer receives a message plus an optional cancellation signal.
|
|
35
|
+
*
|
|
36
|
+
* Transports may pass a `signal` derived from their own semantics:
|
|
37
|
+
*
|
|
38
|
+
* - **BullMQ** — the per-job lock expiry. The worker aborts the signal
|
|
39
|
+
* when the lock would expire, letting in-flight dispatches bail
|
|
40
|
+
* before the same job is handed to another worker.
|
|
41
|
+
* - **Worker shutdown** — `createQueueWorker.stop()` aborts an
|
|
42
|
+
* internal controller so in-flight jobs see the signal flip and can
|
|
43
|
+
* short-circuit retries before the worker drains.
|
|
44
|
+
*
|
|
45
|
+
* Consumers are not required to observe the signal — handlers that do
|
|
46
|
+
* `ctx.signal.throwIfAborted()` (or pass signal into `runtime.dispatch`)
|
|
47
|
+
* benefit; legacy handlers continue to run to completion.
|
|
48
|
+
*/
|
|
49
|
+
export type QueueConsumer<TInput = unknown> = (msg: QueueMessage<TInput>, signal?: AbortSignal) => Promise<void>;
|
|
34
50
|
export interface QueueTransport {
|
|
35
51
|
enqueue<TInput>(queue: string, message: Omit<QueueMessage<TInput>, "queue">): Promise<void>;
|
|
36
52
|
subscribe<TInput>(queue: string, consumer: QueueConsumer<TInput>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-transport.d.ts","sourceRoot":"","sources":["../src/queue-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,OAAO;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,GAAG,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"queue-transport.d.ts","sourceRoot":"","sources":["../src/queue-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,OAAO;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,GAAG,OAAO,IAAI,CAC5C,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EACzB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACxE,+CAA+C;IAC/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,OAAO,CAAS;IAElB,OAAO,CAAC,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC;IAiChB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI;IAMjE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,gEAAgE;IAC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-transport.js","sourceRoot":"","sources":["../src/queue-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"queue-transport.js","sourceRoot":"","sources":["../src/queue-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA6CH;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IAChB,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,QAAQ,GAAoB,EAAE,CAAC;IACxC,OAAO,GAAG,KAAK,CAAC;IAExB,KAAK,CAAC,OAAO,CACX,KAAa,EACb,OAA4C;QAE5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,GAAyB,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC3C,sDAAsD;oBACtD,oCAAoC;oBACpC,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,wCAAwC,KAAK,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC9E,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,8BAA8B;YAC9B,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,SAAS,CAAS,KAAa,EAAE,QAA+B;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAyB,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
package/dist/queue-worker.d.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* The framework decides where dispatch happens; the handler is unchanged.
|
|
26
26
|
*/
|
|
27
27
|
import type * as forge from "@nwire/forge";
|
|
28
|
-
import type { QueueTransport } from "./queue-transport";
|
|
28
|
+
import type { QueueTransport } from "./queue-transport.js";
|
|
29
29
|
type App = forge.App;
|
|
30
30
|
type ActionDefinition = forge.ActionDefinition;
|
|
31
31
|
export interface QueueSubscription {
|
|
@@ -33,7 +33,37 @@ export interface QueueSubscription {
|
|
|
33
33
|
readonly queue: string;
|
|
34
34
|
/** Action to dispatch when a message arrives. Input + envelope come from the message. */
|
|
35
35
|
readonly action: ActionDefinition;
|
|
36
|
+
/**
|
|
37
|
+
* Free-form trigger source — sibling of HTTP `RouteBinding.from(source)`.
|
|
38
|
+
* Studio + observability group queue work by it (e.g. `"stripe-webhook"`,
|
|
39
|
+
* `"internal-trigger"`, `"scheduler"`). Set fluently via
|
|
40
|
+
* `subscription({...}).from(src)`, or inline on the object literal.
|
|
41
|
+
*/
|
|
42
|
+
readonly source?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Chainable source declaration. Optional on plain-object literals;
|
|
45
|
+
* always present on results from `subscription({...})`. Returns a
|
|
46
|
+
* fresh `QueueSubscription` with `source` set; original is unchanged.
|
|
47
|
+
*/
|
|
48
|
+
from?(source: string): QueueSubscription;
|
|
36
49
|
}
|
|
50
|
+
/** Subscription with a guaranteed chainable `.from(source)` method. */
|
|
51
|
+
export interface FluentQueueSubscription extends QueueSubscription {
|
|
52
|
+
from(source: string): FluentQueueSubscription;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a `QueueSubscription` with a chainable `.from(source)` method.
|
|
56
|
+
* Equivalent to writing the object literal by hand but adds the fluent
|
|
57
|
+
* source-declaration that mirrors `RouteBinding.from(source)` on http.
|
|
58
|
+
*
|
|
59
|
+
* subscription({ queue: "stripe.events", action: handleStripe })
|
|
60
|
+
* .from("stripe-webhook")
|
|
61
|
+
*/
|
|
62
|
+
export declare function subscription(opts: {
|
|
63
|
+
readonly queue: string;
|
|
64
|
+
readonly action: ActionDefinition;
|
|
65
|
+
readonly source?: string;
|
|
66
|
+
}): FluentQueueSubscription;
|
|
37
67
|
export interface CreateQueueWorkerOptions {
|
|
38
68
|
readonly subscribe: readonly QueueSubscription[];
|
|
39
69
|
}
|
|
@@ -42,6 +72,16 @@ export interface QueueWorker {
|
|
|
42
72
|
readonly transport: QueueTransport;
|
|
43
73
|
start(): Promise<void>;
|
|
44
74
|
stop(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Static snapshot of every queue subscription — scanner reads this to
|
|
77
|
+
* emit transport metadata (queue → action mapping + optional `source`
|
|
78
|
+
* label from `.from()`). Read-only.
|
|
79
|
+
*/
|
|
80
|
+
listSubscriptions(): ReadonlyArray<{
|
|
81
|
+
readonly queue: string;
|
|
82
|
+
readonly action: string;
|
|
83
|
+
readonly source?: string;
|
|
84
|
+
}>;
|
|
45
85
|
}
|
|
46
86
|
export declare function createQueueWorker(app: App, transport: QueueTransport, options: CreateQueueWorkerOptions): QueueWorker;
|
|
47
87
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-worker.d.ts","sourceRoot":"","sources":["../src/queue-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE,KAAK,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACrB,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-worker.d.ts","sourceRoot":"","sources":["../src/queue-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE,KAAK,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACrB,KAAK,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C;AAED,uEAAuE;AACvE,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,uBAAuB,CAa1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB;;;;OAIG;IACH,iBAAiB,IAAI,aAAa,CAAC;QACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,wBAAwB,GAChC,WAAW,CAyCb"}
|
package/dist/queue-worker.js
CHANGED
|
@@ -24,8 +24,36 @@
|
|
|
24
24
|
* Wire-mode invariance: domain handlers are the same in HTTP and queue wires.
|
|
25
25
|
* The framework decides where dispatch happens; the handler is unchanged.
|
|
26
26
|
*/
|
|
27
|
+
/**
|
|
28
|
+
* Build a `QueueSubscription` with a chainable `.from(source)` method.
|
|
29
|
+
* Equivalent to writing the object literal by hand but adds the fluent
|
|
30
|
+
* source-declaration that mirrors `RouteBinding.from(source)` on http.
|
|
31
|
+
*
|
|
32
|
+
* subscription({ queue: "stripe.events", action: handleStripe })
|
|
33
|
+
* .from("stripe-webhook")
|
|
34
|
+
*/
|
|
35
|
+
export function subscription(opts) {
|
|
36
|
+
const sub = {
|
|
37
|
+
queue: opts.queue,
|
|
38
|
+
action: opts.action,
|
|
39
|
+
...(opts.source !== undefined ? { source: opts.source } : {}),
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(sub, "from", {
|
|
42
|
+
value: (next) => subscription({ ...opts, source: next }),
|
|
43
|
+
enumerable: false,
|
|
44
|
+
writable: false,
|
|
45
|
+
configurable: true,
|
|
46
|
+
});
|
|
47
|
+
return sub;
|
|
48
|
+
}
|
|
27
49
|
export function createQueueWorker(app, transport, options) {
|
|
28
50
|
let started = false;
|
|
51
|
+
// Worker-level cancellation: stop() flips this so any in-flight
|
|
52
|
+
// dispatch observing `ctx.signal` can bail before drain finishes.
|
|
53
|
+
// Per-job cancellation (e.g. BullMQ lock expiry) is layered ON TOP
|
|
54
|
+
// by chaining the transport's optional signal — that's the
|
|
55
|
+
// `combined` controller per message below.
|
|
56
|
+
const workerController = new AbortController();
|
|
29
57
|
return {
|
|
30
58
|
app,
|
|
31
59
|
transport,
|
|
@@ -34,14 +62,49 @@ export function createQueueWorker(app, transport, options) {
|
|
|
34
62
|
return;
|
|
35
63
|
started = true;
|
|
36
64
|
for (const subscription of options.subscribe) {
|
|
37
|
-
transport.subscribe(subscription.queue, async (msg) => {
|
|
38
|
-
|
|
65
|
+
transport.subscribe(subscription.queue, async (msg, jobSignal) => {
|
|
66
|
+
// Combine worker-stop + per-job signals so the handler
|
|
67
|
+
// sees an abort if EITHER source fires.
|
|
68
|
+
const combined = combineSignals(workerController.signal, jobSignal);
|
|
69
|
+
await app.runtime.dispatch(subscription.action, msg.input, msg.envelope, {
|
|
70
|
+
signal: combined,
|
|
71
|
+
});
|
|
39
72
|
});
|
|
40
73
|
}
|
|
41
74
|
},
|
|
42
75
|
async stop() {
|
|
76
|
+
workerController.abort();
|
|
43
77
|
await transport.stop();
|
|
44
78
|
},
|
|
79
|
+
listSubscriptions() {
|
|
80
|
+
return options.subscribe.map((s) => ({
|
|
81
|
+
queue: s.queue,
|
|
82
|
+
action: s.action.name,
|
|
83
|
+
source: s.source,
|
|
84
|
+
}));
|
|
85
|
+
},
|
|
45
86
|
};
|
|
46
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Combine two AbortSignals into one that fires if either source fires.
|
|
90
|
+
*
|
|
91
|
+
* Uses `AbortSignal.any` when available (Node 20.3+ / 22+). Falls back
|
|
92
|
+
* to a manual controller for older runtimes — kept defensively because
|
|
93
|
+
* publishing as a library means we don't control the consumer's Node
|
|
94
|
+
* version.
|
|
95
|
+
*/
|
|
96
|
+
function combineSignals(a, b) {
|
|
97
|
+
if (!b)
|
|
98
|
+
return a;
|
|
99
|
+
if (typeof AbortSignal.any === "function") {
|
|
100
|
+
return AbortSignal.any([a, b]);
|
|
101
|
+
}
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const onAbort = () => controller.abort();
|
|
104
|
+
if (a.aborted || b.aborted)
|
|
105
|
+
controller.abort();
|
|
106
|
+
a.addEventListener("abort", onAbort, { once: true });
|
|
107
|
+
b.addEventListener("abort", onAbort, { once: true });
|
|
108
|
+
return controller.signal;
|
|
109
|
+
}
|
|
47
110
|
//# sourceMappingURL=queue-worker.js.map
|
package/dist/queue-worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-worker.js","sourceRoot":"","sources":["../src/queue-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"queue-worker.js","sourceRoot":"","sources":["../src/queue-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
* Production deployments use a persistent adapter like `@nwire/queue-bullmq`
|
|
9
9
|
* (Redis) or `@nwire/queue-sqs` (AWS). Same interface; swap by config.
|
|
10
10
|
*/
|
|
11
|
-
export { InMemoryQueueTransport, type QueueTransport, type QueueMessage, type QueueConsumer, } from "./queue-transport";
|
|
12
|
-
export { createQueueWorker, type QueueWorker, type QueueSubscription, type CreateQueueWorkerOptions, } from "./queue-worker";
|
|
11
|
+
export { InMemoryQueueTransport, type QueueTransport, type QueueMessage, type QueueConsumer, } from "./queue-transport.js";
|
|
12
|
+
export { createQueueWorker, subscription, type QueueWorker, type QueueSubscription, type FluentQueueSubscription, type CreateQueueWorkerOptions, } from "./queue-worker.js";
|
|
13
13
|
//# sourceMappingURL=queue.d.ts.map
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,gBAAgB,CAAC"}
|
package/dist/queue.js
CHANGED
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
* Production deployments use a persistent adapter like `@nwire/queue-bullmq`
|
|
9
9
|
* (Redis) or `@nwire/queue-sqs` (AWS). Same interface; swap by config.
|
|
10
10
|
*/
|
|
11
|
-
export { InMemoryQueueTransport, } from "./queue-transport";
|
|
12
|
-
export { createQueueWorker, } from "./queue-worker";
|
|
11
|
+
export { InMemoryQueueTransport, } from "./queue-transport.js";
|
|
12
|
+
export { createQueueWorker, subscription, } from "./queue-worker.js";
|
|
13
13
|
//# sourceMappingURL=queue.js.map
|
package/dist/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,sBAAsB,GAIvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,sBAAsB,GAIvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iBAAiB,EACjB,YAAY,GAKb,MAAM,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nwire/queue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.17",
|
|
4
4
|
"description": "Nwire — queue transport contract + InMemory default + createQueueWorker. Production adapters land as @nwire/queue-bullmq, @nwire/queue-sqs, @nwire/queue-pgboss.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bus",
|
|
@@ -28,18 +28,18 @@
|
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@nwire/
|
|
32
|
-
"@nwire/
|
|
31
|
+
"@nwire/envelope": "0.8.17",
|
|
32
|
+
"@nwire/forge": "0.8.17"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "^22.19.9",
|
|
36
36
|
"typescript": "^5.9.3",
|
|
37
37
|
"vitest": "^4.0.18",
|
|
38
38
|
"zod": "^4.0.0",
|
|
39
|
-
"@nwire/messages": "0.
|
|
39
|
+
"@nwire/messages": "0.8.17"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
42
|
-
"build": "tsc",
|
|
42
|
+
"build": "tsc && node ../../scripts/fix-dist-extensions.mjs dist",
|
|
43
43
|
"dev": "tsc --watch",
|
|
44
44
|
"typecheck": "tsc --noEmit"
|
|
45
45
|
}
|