@relaycast/engine 5.1.1 → 6.0.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/dist/adapters/node/realtime.d.ts +28 -1
- package/dist/adapters/node/realtime.d.ts.map +1 -1
- package/dist/adapters/node/realtime.js +229 -50
- package/dist/adapters/node/realtime.js.map +1 -1
- package/dist/auth/tokenKind.d.ts +1 -1
- package/dist/auth/tokenKind.d.ts.map +1 -1
- package/dist/auth/tokenKind.js +4 -1
- package/dist/auth/tokenKind.js.map +1 -1
- package/dist/db/migrations/0028_node_providers.sql +55 -0
- package/dist/db/schema.d.ts +376 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +59 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/action.d.ts +44 -1
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +237 -18
- package/dist/engine/action.js.map +1 -1
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +2 -1
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/node.d.ts +71 -28
- package/dist/engine/node.d.ts.map +1 -1
- package/dist/engine/node.js +230 -106
- package/dist/engine/node.js.map +1 -1
- package/dist/engine/nodeContext.d.ts.map +1 -1
- package/dist/engine/nodeContext.js +17 -6
- package/dist/engine/nodeContext.js.map +1 -1
- package/dist/engine/nodeDeliver.d.ts.map +1 -1
- package/dist/engine/nodeDeliver.js +4 -1
- package/dist/engine/nodeDeliver.js.map +1 -1
- package/dist/engine/nodeProvider.d.ts +62 -0
- package/dist/engine/nodeProvider.d.ts.map +1 -0
- package/dist/engine/nodeProvider.js +256 -0
- package/dist/engine/nodeProvider.js.map +1 -0
- package/dist/middleware/auth.d.ts +6 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +6 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/node-control.d.ts +1 -1
- package/dist/node-control.d.ts.map +1 -1
- package/dist/node-control.js +11 -1
- package/dist/node-control.js.map +1 -1
- package/dist/ports/auth.d.ts +1 -1
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/realtime.d.ts +24 -2
- package/dist/ports/realtime.d.ts.map +1 -1
- package/dist/routes/deliveryRouting.d.ts.map +1 -1
- package/dist/routes/deliveryRouting.js +6 -1
- package/dist/routes/deliveryRouting.js.map +1 -1
- package/dist/routes/message.d.ts.map +1 -1
- package/dist/routes/message.js +44 -14
- package/dist/routes/message.js.map +1 -1
- package/dist/routes/node.d.ts.map +1 -1
- package/dist/routes/node.js +89 -3
- package/dist/routes/node.js.map +1 -1
- package/package.json +3 -3
|
@@ -26,14 +26,31 @@ export interface SocketHandle {
|
|
|
26
26
|
export declare class InProcessRealtime implements RealtimeBus, ConnectionRegistry, NodeConnectionRegistry {
|
|
27
27
|
private readonly db;
|
|
28
28
|
private readonly workspaceSockets;
|
|
29
|
-
|
|
29
|
+
/** Every attached node control connection, keyed by its registry connection id. */
|
|
30
|
+
private readonly nodeConnections;
|
|
31
|
+
/** All connection ids attached to a node (bound to a provider or not yet). */
|
|
32
|
+
private readonly nodeConnIndex;
|
|
33
|
+
/** Per node, the connection id currently bound to each provider name. */
|
|
34
|
+
private readonly providerIndex;
|
|
35
|
+
/** Per-provider queued `action.invoke` frames (`workspace:node::provider`). */
|
|
30
36
|
private readonly nodeQueues;
|
|
31
37
|
/** Serializes drains per node so concurrent triggers never overlap. */
|
|
32
38
|
private readonly nodeDrainChains;
|
|
33
39
|
private nodeCompletionDeps;
|
|
40
|
+
private connectionSeq;
|
|
34
41
|
constructor(db: EngineDb);
|
|
35
42
|
setNodeCompletionDeps(deps: InvocationCompletionDeps): void;
|
|
36
43
|
private nodeKey;
|
|
44
|
+
private providerQueueKey;
|
|
45
|
+
private providerConnId;
|
|
46
|
+
private providerSocket;
|
|
47
|
+
/**
|
|
48
|
+
* The provider a node-addressed message targets when none is specified: the
|
|
49
|
+
* `default` provider if attached, otherwise any currently-attached provider.
|
|
50
|
+
* Never returns a name that is not in the index, so node-level sends do not
|
|
51
|
+
* silently target a phantom provider. `undefined` means nothing is attached.
|
|
52
|
+
*/
|
|
53
|
+
private defaultProviderName;
|
|
37
54
|
publishToWorkspaceStream(args: {
|
|
38
55
|
workspaceId: string;
|
|
39
56
|
event: EngineEvent;
|
|
@@ -48,12 +65,22 @@ export declare class InProcessRealtime implements RealtimeBus, ConnectionRegistr
|
|
|
48
65
|
upgrade(_args: UpgradeArgs): Promise<Response>;
|
|
49
66
|
upgradeNode(_args: NodeUpgradeArgs): Promise<Response>;
|
|
50
67
|
sendToNode(workspaceId: string, nodeId: string, message: FleetRelaycastToBrokerMessage): Promise<boolean>;
|
|
68
|
+
sendToProvider(workspaceId: string, nodeId: string, providerName: string, message: FleetRelaycastToBrokerMessage): Promise<boolean>;
|
|
51
69
|
isNodeConnected(workspaceId: string, nodeId: string): boolean;
|
|
70
|
+
isProviderConnected(workspaceId: string, nodeId: string, providerName: string): boolean;
|
|
71
|
+
providerNameForConnection(connectionId: string): string | undefined;
|
|
72
|
+
providerAttachConflict(workspaceId: string, nodeId: string, providerName: string, _instanceId: string, connectionId: string): {
|
|
73
|
+
code: string;
|
|
74
|
+
message: string;
|
|
75
|
+
} | null;
|
|
76
|
+
attachProvider(workspaceId: string, nodeId: string, providerName: string, instanceId: string, connectionId: string): void;
|
|
77
|
+
detachProvider(workspaceId: string, nodeId: string, providerName: string): void;
|
|
52
78
|
disconnectNode(workspaceId: string, nodeId: string): Promise<void>;
|
|
53
79
|
/** Register a live workspace-stream socket; returns handlers the transport drives. */
|
|
54
80
|
attachWorkspaceSocket(workspaceId: string, socket: EngineSocket, observerToken?: ObserverToken): SocketHandle;
|
|
55
81
|
/** Register a live fleet node control socket; returns handlers the transport drives. */
|
|
56
82
|
attachNodeSocket(workspaceId: string, nodeId: string, socket: EngineSocket): SocketHandle;
|
|
83
|
+
private onNodeConnectionClose;
|
|
57
84
|
/**
|
|
58
85
|
* Public, serialized drain entrypoint. Concurrent calls for the same node are
|
|
59
86
|
* chained so two drains never run at once (which could double-reserve spawn
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../../src/adapters/node/realtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { and, eq, gt, isNull, or } from 'drizzle-orm';
|
|
2
2
|
import { observerTokens } from '../../db/schema.js';
|
|
3
|
-
import { handleNodeControlMessage, markNodeOffline } from '../../engine/node.js';
|
|
3
|
+
import { handleNodeControlMessage, handleProviderDisconnect, markNodeOffline } from '../../engine/node.js';
|
|
4
|
+
import { DEFAULT_PROVIDER_NAME } from '../../engine/nodeProvider.js';
|
|
5
|
+
import { NODE_LIVENESS_TTL_MS } from '../../engine/placement.js';
|
|
4
6
|
import { drainNodeInvocations } from '../../engine/action.js';
|
|
5
7
|
import { observerAllowsEvent } from '../../engine/observerToken.js';
|
|
6
8
|
/**
|
|
@@ -18,11 +20,18 @@ const OBSERVER_TOKEN_REVALIDATE_MS = 5_000;
|
|
|
18
20
|
export class InProcessRealtime {
|
|
19
21
|
db;
|
|
20
22
|
workspaceSockets = new Map();
|
|
21
|
-
|
|
23
|
+
/** Every attached node control connection, keyed by its registry connection id. */
|
|
24
|
+
nodeConnections = new Map();
|
|
25
|
+
/** All connection ids attached to a node (bound to a provider or not yet). */
|
|
26
|
+
nodeConnIndex = new Map();
|
|
27
|
+
/** Per node, the connection id currently bound to each provider name. */
|
|
28
|
+
providerIndex = new Map();
|
|
29
|
+
/** Per-provider queued `action.invoke` frames (`workspace:node::provider`). */
|
|
22
30
|
nodeQueues = new Map();
|
|
23
31
|
/** Serializes drains per node so concurrent triggers never overlap. */
|
|
24
32
|
nodeDrainChains = new Map();
|
|
25
33
|
nodeCompletionDeps;
|
|
34
|
+
connectionSeq = 0;
|
|
26
35
|
constructor(db) {
|
|
27
36
|
this.db = db;
|
|
28
37
|
}
|
|
@@ -32,6 +41,47 @@ export class InProcessRealtime {
|
|
|
32
41
|
nodeKey(workspaceId, nodeId) {
|
|
33
42
|
return `${workspaceId}:${nodeId}`;
|
|
34
43
|
}
|
|
44
|
+
providerQueueKey(nodeKey, providerName) {
|
|
45
|
+
return `${nodeKey}::${providerName}`;
|
|
46
|
+
}
|
|
47
|
+
providerConnId(nodeKey, providerName) {
|
|
48
|
+
return this.providerIndex.get(nodeKey)?.get(providerName);
|
|
49
|
+
}
|
|
50
|
+
providerSocket(nodeKey, providerName) {
|
|
51
|
+
const connId = this.providerConnId(nodeKey, providerName);
|
|
52
|
+
if (connId)
|
|
53
|
+
return this.nodeConnections.get(connId)?.socket;
|
|
54
|
+
// Reconnect-before-reregister applies only to the synthetic `default`
|
|
55
|
+
// provider (the legacy single-socket broker): its sole live connection is
|
|
56
|
+
// addressable even before it re-registers, so queued frames drain to it. A
|
|
57
|
+
// named provider's queue never drains to an unbound connection whose
|
|
58
|
+
// identity isn't yet established — that could misroute to a different
|
|
59
|
+
// provider that happens to be reconnecting.
|
|
60
|
+
if (providerName !== DEFAULT_PROVIDER_NAME)
|
|
61
|
+
return undefined;
|
|
62
|
+
const conns = this.nodeConnIndex.get(nodeKey);
|
|
63
|
+
if (conns && conns.size === 1) {
|
|
64
|
+
const [only] = [...conns];
|
|
65
|
+
const conn = this.nodeConnections.get(only);
|
|
66
|
+
if (conn && !conn.providerName)
|
|
67
|
+
return conn.socket;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The provider a node-addressed message targets when none is specified: the
|
|
73
|
+
* `default` provider if attached, otherwise any currently-attached provider.
|
|
74
|
+
* Never returns a name that is not in the index, so node-level sends do not
|
|
75
|
+
* silently target a phantom provider. `undefined` means nothing is attached.
|
|
76
|
+
*/
|
|
77
|
+
defaultProviderName(nodeKey) {
|
|
78
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
79
|
+
if (!providers || providers.size === 0)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (providers.has(DEFAULT_PROVIDER_NAME))
|
|
82
|
+
return DEFAULT_PROVIDER_NAME;
|
|
83
|
+
return [...providers.keys()][0];
|
|
84
|
+
}
|
|
35
85
|
async publishToWorkspaceStream(args) {
|
|
36
86
|
const set = this.workspaceSockets.get(args.workspaceId);
|
|
37
87
|
if (!set || set.size === 0)
|
|
@@ -100,45 +150,138 @@ export class InProcessRealtime {
|
|
|
100
150
|
return new Response('WebSocket upgrade is handled by the Node server', { status: 426 });
|
|
101
151
|
}
|
|
102
152
|
async sendToNode(workspaceId, nodeId, message) {
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
|
|
153
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
154
|
+
const providerName = this.defaultProviderName(nodeKey) ?? DEFAULT_PROVIDER_NAME;
|
|
155
|
+
return this.sendToProvider(workspaceId, nodeId, providerName, message);
|
|
156
|
+
}
|
|
157
|
+
async sendToProvider(workspaceId, nodeId, providerName, message) {
|
|
158
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
159
|
+
const socket = this.providerSocket(nodeKey, providerName);
|
|
160
|
+
if (socket) {
|
|
106
161
|
try {
|
|
107
|
-
|
|
162
|
+
socket.send(JSON.stringify(message));
|
|
108
163
|
return true;
|
|
109
164
|
}
|
|
110
165
|
catch {
|
|
111
|
-
this.
|
|
166
|
+
this.detachProvider(workspaceId, nodeId, providerName);
|
|
112
167
|
}
|
|
113
168
|
}
|
|
114
169
|
if (message.type !== 'action.invoke') {
|
|
115
170
|
return false;
|
|
116
171
|
}
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
172
|
+
const queueKey = this.providerQueueKey(nodeKey, providerName);
|
|
173
|
+
const queue = this.nodeQueues.get(queueKey) ?? [];
|
|
174
|
+
const dedupKey = `${message.type}:${message.invocation_id}`;
|
|
175
|
+
if (!queue.some((item) => item.key === dedupKey)) {
|
|
176
|
+
queue.push({ key: dedupKey, message });
|
|
121
177
|
}
|
|
122
178
|
while (queue.length > 100)
|
|
123
179
|
queue.shift();
|
|
124
|
-
this.nodeQueues.set(
|
|
180
|
+
this.nodeQueues.set(queueKey, queue);
|
|
125
181
|
return true;
|
|
126
182
|
}
|
|
127
183
|
isNodeConnected(workspaceId, nodeId) {
|
|
128
|
-
|
|
184
|
+
const conns = this.nodeConnIndex.get(this.nodeKey(workspaceId, nodeId));
|
|
185
|
+
return !!conns && conns.size > 0;
|
|
129
186
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
187
|
+
isProviderConnected(workspaceId, nodeId, providerName) {
|
|
188
|
+
return !!this.providerSocket(this.nodeKey(workspaceId, nodeId), providerName);
|
|
189
|
+
}
|
|
190
|
+
providerNameForConnection(connectionId) {
|
|
191
|
+
return this.nodeConnections.get(connectionId)?.providerName;
|
|
192
|
+
}
|
|
193
|
+
providerAttachConflict(workspaceId, nodeId, providerName, _instanceId, connectionId) {
|
|
194
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
195
|
+
const existingConnId = this.providerConnId(nodeKey, providerName);
|
|
196
|
+
if (!existingConnId || existingConnId === connectionId)
|
|
197
|
+
return null;
|
|
198
|
+
const existing = this.nodeConnections.get(existingConnId);
|
|
199
|
+
if (!existing)
|
|
200
|
+
return null;
|
|
201
|
+
// A still-live instance owns the name (duplicate process). A dropped or
|
|
202
|
+
// silent (stale) instance is a reconnect and gets replaced on attach.
|
|
203
|
+
if (Date.now() - existing.lastSeen <= NODE_LIVENESS_TTL_MS) {
|
|
204
|
+
return {
|
|
205
|
+
code: 'provider_instance_conflict',
|
|
206
|
+
message: `Provider "${providerName}" is already connected on this node`,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
attachProvider(workspaceId, nodeId, providerName, instanceId, connectionId) {
|
|
212
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
133
213
|
if (!conn)
|
|
134
214
|
return;
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
|
|
215
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
216
|
+
let providers = this.providerIndex.get(nodeKey);
|
|
217
|
+
if (!providers) {
|
|
218
|
+
providers = new Map();
|
|
219
|
+
this.providerIndex.set(nodeKey, providers);
|
|
138
220
|
}
|
|
139
|
-
|
|
140
|
-
|
|
221
|
+
const existingConnId = providers.get(providerName);
|
|
222
|
+
if (existingConnId && existingConnId !== connectionId) {
|
|
223
|
+
const superseded = this.nodeConnections.get(existingConnId);
|
|
224
|
+
this.nodeConnections.delete(existingConnId);
|
|
225
|
+
const conns = this.nodeConnIndex.get(nodeKey);
|
|
226
|
+
if (conns) {
|
|
227
|
+
conns.delete(existingConnId);
|
|
228
|
+
if (conns.size === 0)
|
|
229
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
230
|
+
}
|
|
231
|
+
if (superseded) {
|
|
232
|
+
superseded.providerName = undefined;
|
|
233
|
+
try {
|
|
234
|
+
superseded.socket.close(1000, 'superseded');
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// already closed
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
conn.providerName = providerName;
|
|
242
|
+
conn.instanceId = instanceId;
|
|
243
|
+
conn.lastSeen = Date.now();
|
|
244
|
+
providers.set(providerName, connectionId);
|
|
245
|
+
}
|
|
246
|
+
detachProvider(workspaceId, nodeId, providerName) {
|
|
247
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
248
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
249
|
+
const connId = providers?.get(providerName);
|
|
250
|
+
if (providers) {
|
|
251
|
+
providers.delete(providerName);
|
|
252
|
+
if (providers.size === 0)
|
|
253
|
+
this.providerIndex.delete(nodeKey);
|
|
254
|
+
}
|
|
255
|
+
if (connId) {
|
|
256
|
+
const conn = this.nodeConnections.get(connId);
|
|
257
|
+
if (conn)
|
|
258
|
+
conn.providerName = undefined;
|
|
259
|
+
}
|
|
260
|
+
this.nodeQueues.delete(this.providerQueueKey(nodeKey, providerName));
|
|
261
|
+
}
|
|
262
|
+
async disconnectNode(workspaceId, nodeId) {
|
|
263
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
264
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
265
|
+
const connIds = new Set(providers ? providers.values() : []);
|
|
266
|
+
// Also close any connections bound to this node that never registered.
|
|
267
|
+
for (const [connId, conn] of this.nodeConnections) {
|
|
268
|
+
if (conn.nodeId === nodeId && conn.workspaceId === workspaceId)
|
|
269
|
+
connIds.add(connId);
|
|
270
|
+
}
|
|
271
|
+
for (const connId of connIds) {
|
|
272
|
+
const conn = this.nodeConnections.get(connId);
|
|
273
|
+
this.nodeConnections.delete(connId);
|
|
274
|
+
if (conn) {
|
|
275
|
+
try {
|
|
276
|
+
conn.socket.close(1000, 'force-disconnect');
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// already closed
|
|
280
|
+
}
|
|
281
|
+
}
|
|
141
282
|
}
|
|
283
|
+
this.providerIndex.delete(nodeKey);
|
|
284
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
142
285
|
}
|
|
143
286
|
/* --------------------- Node transport attach helpers ----------------- */
|
|
144
287
|
/** Register a live workspace-stream socket; returns handlers the transport drives. */
|
|
@@ -164,34 +307,37 @@ export class InProcessRealtime {
|
|
|
164
307
|
}
|
|
165
308
|
/** Register a live fleet node control socket; returns handlers the transport drives. */
|
|
166
309
|
attachNodeSocket(workspaceId, nodeId, socket) {
|
|
167
|
-
const
|
|
168
|
-
const
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
310
|
+
const connectionId = `nconn_${++this.connectionSeq}`;
|
|
311
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
312
|
+
this.nodeConnections.set(connectionId, {
|
|
313
|
+
socket,
|
|
314
|
+
workspaceId,
|
|
315
|
+
nodeId,
|
|
316
|
+
lastSeen: Date.now(),
|
|
317
|
+
});
|
|
318
|
+
let conns = this.nodeConnIndex.get(nodeKey);
|
|
319
|
+
if (!conns) {
|
|
320
|
+
conns = new Set();
|
|
321
|
+
this.nodeConnIndex.set(nodeKey, conns);
|
|
177
322
|
}
|
|
323
|
+
conns.add(connectionId);
|
|
178
324
|
const handle = {
|
|
179
|
-
handleMessage: async (raw) =>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
325
|
+
handleMessage: async (raw) => {
|
|
326
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
327
|
+
if (conn)
|
|
328
|
+
conn.lastSeen = Date.now();
|
|
329
|
+
return handleNodeControlMessage({
|
|
330
|
+
db: this.db,
|
|
331
|
+
registry: this,
|
|
332
|
+
completionDeps: this.nodeCompletionDeps,
|
|
333
|
+
workspaceId,
|
|
334
|
+
nodeId,
|
|
335
|
+
socket,
|
|
336
|
+
connectionId,
|
|
337
|
+
raw,
|
|
338
|
+
});
|
|
194
339
|
},
|
|
340
|
+
handleClose: async () => this.onNodeConnectionClose(connectionId),
|
|
195
341
|
};
|
|
196
342
|
// Best-effort early flush (covers non-spawn frames that need no capacity);
|
|
197
343
|
// the authoritative drain fires post node.register/heartbeat once the node
|
|
@@ -199,6 +345,35 @@ export class InProcessRealtime {
|
|
|
199
345
|
void this.drainNode(workspaceId, nodeId);
|
|
200
346
|
return handle;
|
|
201
347
|
}
|
|
348
|
+
async onNodeConnectionClose(connectionId) {
|
|
349
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
350
|
+
if (!conn)
|
|
351
|
+
return;
|
|
352
|
+
this.nodeConnections.delete(connectionId);
|
|
353
|
+
const { workspaceId, nodeId, providerName } = conn;
|
|
354
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
355
|
+
const conns = this.nodeConnIndex.get(nodeKey);
|
|
356
|
+
if (conns) {
|
|
357
|
+
conns.delete(connectionId);
|
|
358
|
+
if (conns.size === 0)
|
|
359
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
360
|
+
}
|
|
361
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
362
|
+
if (providerName && providers?.get(providerName) === connectionId) {
|
|
363
|
+
providers.delete(providerName);
|
|
364
|
+
if (providers.size === 0)
|
|
365
|
+
this.providerIndex.delete(nodeKey);
|
|
366
|
+
this.nodeQueues.delete(this.providerQueueKey(nodeKey, providerName));
|
|
367
|
+
}
|
|
368
|
+
const hasRemaining = this.isNodeConnected(workspaceId, nodeId);
|
|
369
|
+
if (providerName) {
|
|
370
|
+
await handleProviderDisconnect(this.db, this, workspaceId, nodeId, providerName, hasRemaining).catch(() => { });
|
|
371
|
+
}
|
|
372
|
+
else if (!hasRemaining) {
|
|
373
|
+
// Connection dropped before it bound a provider and it was the node's last.
|
|
374
|
+
await markNodeOffline(this.db, this, workspaceId, nodeId).catch(() => { });
|
|
375
|
+
}
|
|
376
|
+
}
|
|
202
377
|
/**
|
|
203
378
|
* Public, serialized drain entrypoint. Concurrent calls for the same node are
|
|
204
379
|
* chained so two drains never run at once (which could double-reserve spawn
|
|
@@ -216,12 +391,16 @@ export class InProcessRealtime {
|
|
|
216
391
|
return next;
|
|
217
392
|
}
|
|
218
393
|
async drainNodeQueue(workspaceId, nodeId) {
|
|
219
|
-
|
|
220
|
-
const conn = this.nodeSockets.get(key)?.socket;
|
|
221
|
-
if (!conn)
|
|
394
|
+
if (!this.isNodeConnected(workspaceId, nodeId))
|
|
222
395
|
return;
|
|
223
396
|
await drainNodeInvocations(this.db, this, workspaceId, nodeId);
|
|
224
|
-
|
|
397
|
+
// The authoritative re-dispatch is DB-driven; clear the per-provider
|
|
398
|
+
// in-memory buffers now that their frames have been re-sent.
|
|
399
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
400
|
+
for (const queueKey of [...this.nodeQueues.keys()]) {
|
|
401
|
+
if (queueKey.startsWith(`${nodeKey}::`))
|
|
402
|
+
this.nodeQueues.delete(queueKey);
|
|
403
|
+
}
|
|
225
404
|
}
|
|
226
405
|
async onWorkspaceMessage(socket, raw) {
|
|
227
406
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../../src/adapters/node/realtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../../src/adapters/node/realtime.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/tokenKind.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare const authTokenSchema: z.ZodUnion<readonly [z.ZodPipe<z.ZodString
|
|
|
27
27
|
export type ParsedAuthToken = z.infer<typeof authTokenSchema>;
|
|
28
28
|
export declare function parseAuthToken(token: string): ParsedAuthToken | undefined;
|
|
29
29
|
export declare function getAuthTokenKind(token: string): AuthTokenKind | undefined;
|
|
30
|
-
export declare function requiredTokenMessage(kind: Exclude<AuthRequire, 'any'>): string;
|
|
30
|
+
export declare function requiredTokenMessage(kind: Exclude<AuthRequire, 'any' | 'sender'>): string;
|
|
31
31
|
export type AuthRequirementValidation = {
|
|
32
32
|
ok: true;
|
|
33
33
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenKind.d.ts","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD,KAAK,cAAc,CAAC,IAAI,SAAS,aAAa,IAAI;IAChD,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsBF,eAAO,MAAM,eAAe,iUAK1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"tokenKind.d.ts","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD,KAAK,cAAc,CAAC,IAAI,SAAS,aAAa,IAAI;IAChD,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsBF,eAAO,MAAM,eAAe,iUAK1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,MAAM,CAEzF;AAeD,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,GACnB,yBAAyB,CA+B3B"}
|
package/dist/auth/tokenKind.js
CHANGED
|
@@ -57,6 +57,9 @@ const allowedKindsByRequire = {
|
|
|
57
57
|
// `any` intentionally means user/workspace API credentials, not transport-only
|
|
58
58
|
// node credentials or scoped observer credentials.
|
|
59
59
|
any: ['workspace', 'agent'],
|
|
60
|
+
// `sender` is a principal that can post a message: a workspace key, an agent
|
|
61
|
+
// (posts as itself), or a node token (posts as an explicit `from` agent).
|
|
62
|
+
sender: ['workspace', 'agent', 'node'],
|
|
60
63
|
};
|
|
61
64
|
export function validateTokenRequirement(tokenKind, require) {
|
|
62
65
|
const allowedKinds = allowedKindsByRequire[require];
|
|
@@ -77,7 +80,7 @@ export function validateTokenRequirement(tokenKind, require) {
|
|
|
77
80
|
message: 'Observer token cannot perform this operation',
|
|
78
81
|
};
|
|
79
82
|
}
|
|
80
|
-
if (require === 'any') {
|
|
83
|
+
if (require === 'any' || require === 'sender') {
|
|
81
84
|
return { ok: false, code: 'unauthorized', message: 'Invalid token format' };
|
|
82
85
|
}
|
|
83
86
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenKind.js","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE;QACT,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,sCAAsC;KACxD;IACD,KAAK,EAAE;QACL,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,oCAAoC;KACtD;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,mCAAmC;KACrD;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,uCAAuC;KACzD;CACO,CAAC;AASX,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;KAC5C,SAAS,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAErF,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;KACxC,SAAS,CAAC,CAAC,KAAK,EAA2B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAE7E,MAAM,eAAe,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;KACvC,SAAS,CAAC,CAAC,KAAK,EAA0B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAE3E,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,EAAE;KACR,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC3C,SAAS,CAAC,CAAC,KAAK,EAA8B,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC;IACrC,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,mBAAmB;CACpB,CAAC,CAAC;AAIH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"tokenKind.js","sourceRoot":"","sources":["../../src/auth/tokenKind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
-- Multi-provider nodes and node-scoped actions.
|
|
2
|
+
--
|
|
3
|
+
-- A node hosts N providers (the broker plus capability providers). Provider
|
|
4
|
+
-- capability sets persist in node_providers so an offline node still shows its
|
|
5
|
+
-- full manifest, and per-provider liveness/capacity aggregates onto the nodes
|
|
6
|
+
-- row. Actions become node-scoped with a recorded handler provider; a node
|
|
7
|
+
-- action may claim a workspace-global alias.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE nodes ADD COLUMN machine_id TEXT DEFAULT NULL;
|
|
10
|
+
ALTER TABLE agents ADD COLUMN provider_name TEXT NOT NULL DEFAULT 'default';
|
|
11
|
+
ALTER TABLE actions ADD COLUMN handler_provider TEXT DEFAULT NULL;
|
|
12
|
+
ALTER TABLE actions ADD COLUMN is_global INTEGER NOT NULL DEFAULT 0;
|
|
13
|
+
ALTER TABLE actions ADD COLUMN queue INTEGER NOT NULL DEFAULT 0;
|
|
14
|
+
|
|
15
|
+
CREATE TABLE node_providers (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
|
18
|
+
node_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
|
|
19
|
+
name TEXT NOT NULL,
|
|
20
|
+
instance_id TEXT NOT NULL,
|
|
21
|
+
capabilities TEXT NOT NULL DEFAULT '[]',
|
|
22
|
+
max_agents INTEGER NOT NULL DEFAULT 0,
|
|
23
|
+
active_agents INTEGER NOT NULL DEFAULT 0,
|
|
24
|
+
load REAL NOT NULL DEFAULT 0,
|
|
25
|
+
handlers_live INTEGER NOT NULL DEFAULT 0,
|
|
26
|
+
status TEXT NOT NULL DEFAULT 'offline',
|
|
27
|
+
version TEXT NOT NULL DEFAULT 'unknown',
|
|
28
|
+
last_heartbeat_at INTEGER DEFAULT NULL,
|
|
29
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
CREATE UNIQUE INDEX node_providers_node_name_unique ON node_providers (workspace_id, node_id, name);
|
|
33
|
+
CREATE INDEX idx_node_providers_node ON node_providers (workspace_id, node_id);
|
|
34
|
+
|
|
35
|
+
-- Existing node-hosted actions were owned by the broker; record it and let them
|
|
36
|
+
-- keep resolving through the workspace-scoped invoke as global aliases.
|
|
37
|
+
UPDATE actions SET handler_provider = 'default', is_global = 1 WHERE handler_node_id IS NOT NULL;
|
|
38
|
+
|
|
39
|
+
-- Every broker node becomes its own `default` provider carrying its manifest.
|
|
40
|
+
INSERT INTO node_providers (
|
|
41
|
+
id, workspace_id, node_id, name, instance_id, capabilities,
|
|
42
|
+
max_agents, active_agents, load, handlers_live, status, version, last_heartbeat_at, created_at
|
|
43
|
+
)
|
|
44
|
+
SELECT
|
|
45
|
+
'nprov_' || id, workspace_id, id, 'default', 'migrated', capabilities,
|
|
46
|
+
max_agents, active_agents, load, handlers_live, status, version, last_heartbeat_at, created_at
|
|
47
|
+
FROM nodes
|
|
48
|
+
WHERE role = 'broker';
|
|
49
|
+
|
|
50
|
+
-- Node-scoped uniqueness replaces the workspace-global unique; agent-hosted and
|
|
51
|
+
-- global-alias uniqueness are enforced by partial indexes.
|
|
52
|
+
DROP INDEX IF EXISTS actions_workspace_name_unique;
|
|
53
|
+
CREATE UNIQUE INDEX actions_workspace_node_name_unique ON actions (workspace_id, handler_node_id, name);
|
|
54
|
+
CREATE UNIQUE INDEX actions_workspace_agent_name_unique ON actions (workspace_id, name) WHERE handler_node_id IS NULL;
|
|
55
|
+
CREATE UNIQUE INDEX actions_workspace_global_name_unique ON actions (workspace_id, name) WHERE is_global = 1;
|