@masons/runtime-broker 0.2.2 → 0.2.6
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/broker/background-assignment-ledger.d.ts +27 -0
- package/dist/broker/background-assignment-ledger.d.ts.map +1 -0
- package/dist/broker/background-assignment-ledger.js +125 -0
- package/dist/broker/broker-daemon.d.ts +2 -1
- package/dist/broker/broker-daemon.d.ts.map +1 -1
- package/dist/broker/broker-daemon.js +429 -46
- package/dist/broker/control-event-types.d.ts +9 -4
- package/dist/broker/control-event-types.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.d.ts +2 -0
- package/dist/broker/endpoint-registry.d.ts.map +1 -1
- package/dist/broker/endpoint-registry.js +1 -0
- package/dist/broker/entry.d.ts.map +1 -1
- package/dist/broker/entry.js +4 -1
- package/dist/broker/ipc-server.d.ts +13 -0
- package/dist/broker/ipc-server.d.ts.map +1 -1
- package/dist/broker/ipc-server.js +6 -0
- package/dist/broker/runtime-endpoint-port.d.ts +3 -2
- package/dist/broker/runtime-endpoint-port.d.ts.map +1 -1
- package/dist/broker/runtime-inbound-routed-emitter.d.ts +4 -2
- package/dist/broker/runtime-inbound-routed-emitter.d.ts.map +1 -1
- package/dist/broker/runtime-inbound-routed-emitter.js +18 -6
- package/dist/broker/runtime-inbound-routed-event-types.d.ts +8 -0
- package/dist/broker/runtime-inbound-routed-event-types.d.ts.map +1 -1
- package/dist/broker/runtime-processing-state-event-types.d.ts +9 -4
- package/dist/broker/runtime-processing-state-event-types.d.ts.map +1 -1
- package/dist/broker/version-handshake.d.ts +1 -0
- package/dist/broker/version-handshake.d.ts.map +1 -1
- package/dist/broker/version-handshake.js +1 -0
- package/dist/broker-client/broker-client.d.ts +25 -2
- package/dist/broker-client/broker-client.d.ts.map +1 -1
- package/dist/broker-client/broker-client.js +45 -0
- package/dist/broker-client/lazy-spawn.d.ts.map +1 -1
- package/dist/connector-client.d.ts +8 -0
- package/dist/connector-client.d.ts.map +1 -1
- package/dist/connector-client.js +17 -3
- package/dist/runtime-endpoint-client.d.ts +22 -1
- package/dist/runtime-endpoint-client.d.ts.map +1 -1
- package/dist/runtime-endpoint-client.js +47 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +13 -12
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { UndispatchedMessage } from "./undispatched-inbox.js";
|
|
2
|
+
export type DurableBackgroundAssignmentState = "assigned" | "committing" | "committed";
|
|
3
|
+
export type DurableBackgroundAssignmentKind = "mailbox_dispatch" | "broker_route";
|
|
4
|
+
export interface DurableBackgroundAssignment {
|
|
5
|
+
kind: DurableBackgroundAssignmentKind;
|
|
6
|
+
state: DurableBackgroundAssignmentState;
|
|
7
|
+
assignmentId: string;
|
|
8
|
+
sourceMessageId: string;
|
|
9
|
+
endpointId: string;
|
|
10
|
+
message: UndispatchedMessage;
|
|
11
|
+
assignedAt: number;
|
|
12
|
+
acceptedAt?: number;
|
|
13
|
+
committedAt?: number;
|
|
14
|
+
deliverySeq?: number;
|
|
15
|
+
routeKind?: "active_endpoint" | "reconnecting_endpoint";
|
|
16
|
+
}
|
|
17
|
+
export interface BackgroundAssignmentLedger {
|
|
18
|
+
get(sourceMessageId: string): DurableBackgroundAssignment | undefined;
|
|
19
|
+
upsert(record: DurableBackgroundAssignment): boolean;
|
|
20
|
+
delete(sourceMessageId: string): boolean;
|
|
21
|
+
list(): DurableBackgroundAssignment[];
|
|
22
|
+
}
|
|
23
|
+
export interface BackgroundAssignmentLedgerOptions {
|
|
24
|
+
persistFile?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createBackgroundAssignmentLedger(opts?: BackgroundAssignmentLedgerOptions): BackgroundAssignmentLedger;
|
|
27
|
+
//# sourceMappingURL=background-assignment-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-assignment-ledger.d.ts","sourceRoot":"","sources":["../../src/broker/background-assignment-ledger.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,MAAM,gCAAgC,GACxC,UAAU,GACV,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,MAAM,+BAA+B,GACvC,kBAAkB,GAClB,cAAc,CAAC;AAEnB,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,+BAA+B,CAAC;IACtC,KAAK,EAAE,gCAAgC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,iBAAiB,GAAG,uBAAuB,CAAC;CACzD;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,eAAe,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,IAAI,IAAI,2BAA2B,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,GAAE,iCAAsC,GAC3C,0BAA0B,CAkF5B"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { closeSync, fdatasyncSync, mkdirSync, openSync, readFileSync, renameSync, writeSync, } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
export function createBackgroundAssignmentLedger(opts = {}) {
|
|
4
|
+
const persistFile = opts.persistFile;
|
|
5
|
+
const bySourceMessageId = new Map();
|
|
6
|
+
const snapshot = () => [
|
|
7
|
+
...bySourceMessageId.values(),
|
|
8
|
+
];
|
|
9
|
+
const persist = () => {
|
|
10
|
+
if (!persistFile)
|
|
11
|
+
return;
|
|
12
|
+
mkdirSync(dirname(persistFile), { recursive: true, mode: 0o700 });
|
|
13
|
+
const tmp = `${persistFile}.tmp`;
|
|
14
|
+
const fd = openSync(tmp, "w", 0o600);
|
|
15
|
+
try {
|
|
16
|
+
writeSync(fd, `${JSON.stringify({ version: 1, assignments: snapshot() })}\n`);
|
|
17
|
+
fdatasyncSync(fd);
|
|
18
|
+
}
|
|
19
|
+
finally {
|
|
20
|
+
closeSync(fd);
|
|
21
|
+
}
|
|
22
|
+
renameSync(tmp, persistFile);
|
|
23
|
+
};
|
|
24
|
+
if (persistFile) {
|
|
25
|
+
try {
|
|
26
|
+
const raw = readFileSync(persistFile, "utf8").trim();
|
|
27
|
+
if (raw.length > 0) {
|
|
28
|
+
const parsed = JSON.parse(raw);
|
|
29
|
+
if (parsed.version !== 1 || !Array.isArray(parsed.assignments)) {
|
|
30
|
+
throw new Error("invalid persisted background assignment ledger");
|
|
31
|
+
}
|
|
32
|
+
for (const assignment of parsed.assignments) {
|
|
33
|
+
if (!isDurableBackgroundAssignment(assignment)) {
|
|
34
|
+
throw new Error("invalid persisted background assignment ledger record");
|
|
35
|
+
}
|
|
36
|
+
bySourceMessageId.set(assignment.sourceMessageId, assignment);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (!isNodeErr(err, "ENOENT"))
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
get(sourceMessageId) {
|
|
47
|
+
return bySourceMessageId.get(sourceMessageId);
|
|
48
|
+
},
|
|
49
|
+
upsert(record) {
|
|
50
|
+
const prior = bySourceMessageId.get(record.sourceMessageId);
|
|
51
|
+
bySourceMessageId.set(record.sourceMessageId, record);
|
|
52
|
+
try {
|
|
53
|
+
persist();
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
if (prior)
|
|
58
|
+
bySourceMessageId.set(record.sourceMessageId, prior);
|
|
59
|
+
else
|
|
60
|
+
bySourceMessageId.delete(record.sourceMessageId);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
delete(sourceMessageId) {
|
|
65
|
+
const prior = bySourceMessageId.get(sourceMessageId);
|
|
66
|
+
if (!prior)
|
|
67
|
+
return true;
|
|
68
|
+
bySourceMessageId.delete(sourceMessageId);
|
|
69
|
+
try {
|
|
70
|
+
persist();
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
bySourceMessageId.set(sourceMessageId, prior);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
list() {
|
|
79
|
+
return snapshot();
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function isDurableBackgroundAssignment(value) {
|
|
84
|
+
if (!value || typeof value !== "object")
|
|
85
|
+
return false;
|
|
86
|
+
const record = value;
|
|
87
|
+
return ((record.kind === "mailbox_dispatch" || record.kind === "broker_route") &&
|
|
88
|
+
(record.state === "assigned" ||
|
|
89
|
+
record.state === "committing" ||
|
|
90
|
+
record.state === "committed") &&
|
|
91
|
+
typeof record.assignmentId === "string" &&
|
|
92
|
+
typeof record.sourceMessageId === "string" &&
|
|
93
|
+
typeof record.endpointId === "string" &&
|
|
94
|
+
typeof record.assignedAt === "number" &&
|
|
95
|
+
isUndispatchedMessageShape(record.message) &&
|
|
96
|
+
(record.acceptedAt === undefined ||
|
|
97
|
+
typeof record.acceptedAt === "number") &&
|
|
98
|
+
(record.committedAt === undefined ||
|
|
99
|
+
typeof record.committedAt === "number") &&
|
|
100
|
+
(record.deliverySeq === undefined ||
|
|
101
|
+
typeof record.deliverySeq === "number") &&
|
|
102
|
+
(record.routeKind === undefined ||
|
|
103
|
+
record.routeKind === "active_endpoint" ||
|
|
104
|
+
record.routeKind === "reconnecting_endpoint"));
|
|
105
|
+
}
|
|
106
|
+
function isUndispatchedMessageShape(value) {
|
|
107
|
+
if (!value || typeof value !== "object")
|
|
108
|
+
return false;
|
|
109
|
+
const record = value;
|
|
110
|
+
return (typeof record.id === "string" &&
|
|
111
|
+
typeof record.arrived_at === "string" &&
|
|
112
|
+
typeof record.sender_address === "string" &&
|
|
113
|
+
typeof record.content === "string" &&
|
|
114
|
+
typeof record.content_type === "string" &&
|
|
115
|
+
!!record.metadata &&
|
|
116
|
+
typeof record.metadata === "object" &&
|
|
117
|
+
(record.reason === "unaddressed" ||
|
|
118
|
+
record.reason === "closed_session_continuation"));
|
|
119
|
+
}
|
|
120
|
+
function isNodeErr(err, code) {
|
|
121
|
+
return (typeof err === "object" &&
|
|
122
|
+
err !== null &&
|
|
123
|
+
"code" in err &&
|
|
124
|
+
err.code === code);
|
|
125
|
+
}
|
|
@@ -11,7 +11,7 @@ import type { NetworkPresenceChangedEvent } from "./network-presence-changed-eve
|
|
|
11
11
|
import type { BrokerPaths } from "./paths.js";
|
|
12
12
|
import { type BufferedMessage } from "./reconnecting-buffer.js";
|
|
13
13
|
import type { RuntimeEndpointPort } from "./runtime-endpoint-port.js";
|
|
14
|
-
import type { RuntimeInboundRoutedEvent } from "./runtime-inbound-routed-event-types.js";
|
|
14
|
+
import type { RuntimeInboundRouteClaimEvent, RuntimeInboundRoutedEvent } from "./runtime-inbound-routed-event-types.js";
|
|
15
15
|
import type { ServicesEventClient } from "./services-event-client.js";
|
|
16
16
|
import type { SpawnDriverRegistry } from "./spawn-driver.js";
|
|
17
17
|
import { type UndispatchedChangedEvent } from "./undispatched-changed-event-types.js";
|
|
@@ -51,6 +51,7 @@ export interface BrokerDaemonOptions {
|
|
|
51
51
|
networkPresenceChangedBackoffMaxMs?: number;
|
|
52
52
|
networkPresenceChangedMaxRetries?: number;
|
|
53
53
|
runtimeInboundRoutedPost?: (event: RuntimeInboundRoutedEvent) => Promise<import("./runtime-endpoint-port.js").EmitOutcome>;
|
|
54
|
+
runtimeInboundRouteClaimPost?: (event: RuntimeInboundRouteClaimEvent) => Promise<import("../runtime-endpoint-client.js").RuntimeInboundRouteClaimOutcome>;
|
|
54
55
|
runtimeInboundRoutedCapacity?: number;
|
|
55
56
|
runtimeInboundRoutedBackoffInitialMs?: number;
|
|
56
57
|
runtimeInboundRoutedBackoffMaxMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-daemon.d.ts","sourceRoot":"","sources":["../../src/broker/broker-daemon.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAqB,KAAK,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-daemon.d.ts","sourceRoot":"","sources":["../../src/broker/broker-daemon.ts"],"names":[],"mappings":"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"}
|