@nwire/queue 0.7.0 → 0.8.0
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/README.md +1 -16
- package/dist/__tests__/queue.test.js +26 -1
- package/dist/__tests__/queue.test.js.map +1 -1
- package/dist/queue-worker.d.ts +40 -0
- package/dist/queue-worker.d.ts.map +1 -1
- package/dist/queue-worker.js +29 -0
- package/dist/queue-worker.js.map +1 -1
- package/dist/queue.d.ts +1 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +1 -1
- package/dist/queue.js.map +1 -1
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -40,17 +40,7 @@ await worker.start();
|
|
|
40
40
|
|
|
41
41
|
## When to use
|
|
42
42
|
|
|
43
|
-
Whenever a request shouldn't block the caller — sending emails, building reports, syncing to a third party. Same handler shape as an HTTP action, so behavior is identical across transports.
|
|
44
|
-
|
|
45
|
-
## Standalone use
|
|
46
|
-
|
|
47
|
-
For developers using `@nwire/queue` **without the rest of Nwire** — pair it with any TypeScript project, any container, any HTTP framework.
|
|
48
|
-
|
|
49
|
-
```ts
|
|
50
|
-
// See the package's main entry (src/) for the standalone surface.
|
|
51
|
-
// The exports below work without @nwire/app or @nwire/forge.
|
|
52
|
-
import {} from /* ...standalone exports... */ "@nwire/queue";
|
|
53
|
-
```
|
|
43
|
+
Whenever a request shouldn't block the caller — sending emails, building reports, syncing to a third party. Same handler shape as an HTTP action, so behavior is identical across transports.
|
|
54
44
|
|
|
55
45
|
## Within nwire-app
|
|
56
46
|
|
|
@@ -64,8 +54,3 @@ const app = createApp({
|
|
|
64
54
|
});
|
|
65
55
|
// Adapter/plugin wiring happens here when applicable.
|
|
66
56
|
```
|
|
67
|
-
|
|
68
|
-
## See also
|
|
69
|
-
|
|
70
|
-
- [Architecture sketch §05 — Interfaces tier](../../architecture-sketch.html#packages)
|
|
71
|
-
- Sibling packages: [@nwire/queue-bullmq](../nwire-queue-bullmq), [@nwire/dead-letter](../nwire-dead-letter), [@nwire/cron](../nwire-cron)
|
|
@@ -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";
|
|
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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"}
|
package/dist/queue-worker.d.ts
CHANGED
|
@@ -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,EAAG,MAAM,CAAC;QACxB,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,CA0Bb"}
|
package/dist/queue-worker.js
CHANGED
|
@@ -24,6 +24,28 @@
|
|
|
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;
|
|
29
51
|
return {
|
|
@@ -42,6 +64,13 @@ export function createQueueWorker(app, transport, options) {
|
|
|
42
64
|
async stop() {
|
|
43
65
|
await transport.stop();
|
|
44
66
|
},
|
|
67
|
+
listSubscriptions() {
|
|
68
|
+
return options.subscribe.map((s) => ({
|
|
69
|
+
queue: s.queue,
|
|
70
|
+
action: s.action.name,
|
|
71
|
+
source: s.source,
|
|
72
|
+
}));
|
|
73
|
+
},
|
|
45
74
|
};
|
|
46
75
|
}
|
|
47
76
|
//# 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAiCH;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAI5B;IACC,MAAM,GAAG,GAAG;QACV,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CAAC;IAC7B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;QACjC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAChE,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAuBD,MAAM,UAAU,iBAAiB,CAC/B,GAAQ,EACR,SAAyB,EACzB,OAAiC;IAEjC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,GAAG;QACH,SAAS;QACT,KAAK,CAAC,KAAK;YACT,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,MAAM,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC7C,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,GAAiB,EAAE,EAAE;oBAClE,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3E,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI;YACR,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,iBAAiB;YACf,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAG,CAAC,CAAC,KAAK;gBACf,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* (Redis) or `@nwire/queue-sqs` (AWS). Same interface; swap by config.
|
|
10
10
|
*/
|
|
11
11
|
export { InMemoryQueueTransport, type QueueTransport, type QueueMessage, type QueueConsumer, } from "./queue-transport";
|
|
12
|
-
export { createQueueWorker, type QueueWorker, type QueueSubscription, type CreateQueueWorkerOptions, } from "./queue-worker";
|
|
12
|
+
export { createQueueWorker, subscription, type QueueWorker, type QueueSubscription, type FluentQueueSubscription, type CreateQueueWorkerOptions, } from "./queue-worker";
|
|
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
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* (Redis) or `@nwire/queue-sqs` (AWS). Same interface; swap by config.
|
|
10
10
|
*/
|
|
11
11
|
export { InMemoryQueueTransport, } from "./queue-transport";
|
|
12
|
-
export { createQueueWorker, } from "./queue-worker";
|
|
12
|
+
export { createQueueWorker, subscription, } from "./queue-worker";
|
|
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.0",
|
|
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",
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
"transport",
|
|
10
10
|
"worker"
|
|
11
11
|
],
|
|
12
|
+
"license": "MIT",
|
|
12
13
|
"files": [
|
|
13
14
|
"dist",
|
|
14
|
-
"README.md"
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
15
17
|
],
|
|
16
18
|
"type": "module",
|
|
17
19
|
"main": "./dist/queue.js",
|
|
@@ -26,15 +28,15 @@
|
|
|
26
28
|
"access": "public"
|
|
27
29
|
},
|
|
28
30
|
"dependencies": {
|
|
29
|
-
"@nwire/
|
|
30
|
-
"@nwire/
|
|
31
|
+
"@nwire/envelope": "0.8.0",
|
|
32
|
+
"@nwire/forge": "0.8.0"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
33
35
|
"@types/node": "^22.19.9",
|
|
34
36
|
"typescript": "^5.9.3",
|
|
35
37
|
"vitest": "^4.0.18",
|
|
36
38
|
"zod": "^4.0.0",
|
|
37
|
-
"@nwire/messages": "0.
|
|
39
|
+
"@nwire/messages": "0.8.0"
|
|
38
40
|
},
|
|
39
41
|
"scripts": {
|
|
40
42
|
"build": "tsc",
|