@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.
Files changed (41) hide show
  1. package/dist/broker/background-assignment-ledger.d.ts +27 -0
  2. package/dist/broker/background-assignment-ledger.d.ts.map +1 -0
  3. package/dist/broker/background-assignment-ledger.js +125 -0
  4. package/dist/broker/broker-daemon.d.ts +2 -1
  5. package/dist/broker/broker-daemon.d.ts.map +1 -1
  6. package/dist/broker/broker-daemon.js +429 -46
  7. package/dist/broker/control-event-types.d.ts +9 -4
  8. package/dist/broker/control-event-types.d.ts.map +1 -1
  9. package/dist/broker/endpoint-registry.d.ts +2 -0
  10. package/dist/broker/endpoint-registry.d.ts.map +1 -1
  11. package/dist/broker/endpoint-registry.js +1 -0
  12. package/dist/broker/entry.d.ts.map +1 -1
  13. package/dist/broker/entry.js +4 -1
  14. package/dist/broker/ipc-server.d.ts +13 -0
  15. package/dist/broker/ipc-server.d.ts.map +1 -1
  16. package/dist/broker/ipc-server.js +6 -0
  17. package/dist/broker/runtime-endpoint-port.d.ts +3 -2
  18. package/dist/broker/runtime-endpoint-port.d.ts.map +1 -1
  19. package/dist/broker/runtime-inbound-routed-emitter.d.ts +4 -2
  20. package/dist/broker/runtime-inbound-routed-emitter.d.ts.map +1 -1
  21. package/dist/broker/runtime-inbound-routed-emitter.js +18 -6
  22. package/dist/broker/runtime-inbound-routed-event-types.d.ts +8 -0
  23. package/dist/broker/runtime-inbound-routed-event-types.d.ts.map +1 -1
  24. package/dist/broker/runtime-processing-state-event-types.d.ts +9 -4
  25. package/dist/broker/runtime-processing-state-event-types.d.ts.map +1 -1
  26. package/dist/broker/version-handshake.d.ts +1 -0
  27. package/dist/broker/version-handshake.d.ts.map +1 -1
  28. package/dist/broker/version-handshake.js +1 -0
  29. package/dist/broker-client/broker-client.d.ts +25 -2
  30. package/dist/broker-client/broker-client.d.ts.map +1 -1
  31. package/dist/broker-client/broker-client.js +45 -0
  32. package/dist/broker-client/lazy-spawn.d.ts.map +1 -1
  33. package/dist/connector-client.d.ts +8 -0
  34. package/dist/connector-client.d.ts.map +1 -1
  35. package/dist/connector-client.js +17 -3
  36. package/dist/runtime-endpoint-client.d.ts +22 -1
  37. package/dist/runtime-endpoint-client.d.ts.map +1 -1
  38. package/dist/runtime-endpoint-client.js +47 -1
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. 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":"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"}
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;AAQjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,0BAA0B,CAAC;AAWlC,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,6BAA6B,CAAC;AAiBrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAM7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AAKjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,uCAAuC,CAAC;AAM/C,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,yBAAyB,CAAC;AAqDjC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IAGrB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAKhD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAG1C,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC;IAG5B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAGhC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAGnC,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE;QAClC,UAAU,EAAE,sBAAsB,CAAC;QACnC,MAAM,EAAE,YAAY,CAAC;KACtB,KAAK,mBAAmB,CAAC;IAK1B,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAQpD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAI/B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAIxC,uBAAuB,CAAC,EAAE,CACxB,KAAK,EAAE,wBAAwB,KAC5B,OAAO,CAAC,OAAO,4BAA4B,EAAE,WAAW,CAAC,CAAC;IAG/D,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC,mCAAmC,CAAC,EAAE,MAAM,CAAC;IAE7C,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAIvC,0BAA0B,CAAC,EAAE,CAC3B,KAAK,EAAE,2BAA2B,KAC/B,OAAO,CAAC,OAAO,4BAA4B,EAAE,WAAW,CAAC,CAAC;IAI/D,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAEhD,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAE5C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAG1C,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE,yBAAyB,KAC7B,OAAO,CAAC,OAAO,4BAA4B,EAAE,WAAW,CAAC,CAAC;IAG/D,4BAA4B,CAAC,EAAE,CAC7B,KAAK,EAAE,6BAA6B,KACjC,OAAO,CACV,OAAO,+BAA+B,EAAE,+BAA+B,CACxE,CAAC;IAEF,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAEtC,oCAAoC,CAAC,EAAE,MAAM,CAAC;IAE9C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAE1C,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC,oCAAoC,CAAC,EAAE,MAAM,CAAC;CAC/C;AAgBD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC,YAAY,IAAI,MAAM,CAAC;IAGvB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAEtD,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,sBAAsB,EAAE,sBAAsB,CAAC;IAE/C,eAAe,IAAI,eAAe,CAAC;IAEnC,iBAAiB,IAAI,MAAM,CAAC;IAE5B,cAAc,IAAI,MAAM,CAAC;IAGzB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAGvD,4BAA4B,IAAI,MAAM,CAAC;IAGvC,+BAA+B,IAAI,MAAM,CAAC;IAE1C,6BAA6B,IAAI,MAAM,CAAC;CACzC;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA8hFxB;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAMvE;AAED,YAAY,EAAE,eAAe,EAAE,CAAC"}