@relaycast/engine 5.1.1 → 6.0.1
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/database.d.ts.map +1 -1
- package/dist/adapters/node/database.js +204 -27
- package/dist/adapters/node/database.js.map +1 -1
- package/dist/adapters/node/realtime.d.ts +29 -1
- package/dist/adapters/node/realtime.d.ts.map +1 -1
- package/dist/adapters/node/realtime.js +241 -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 +47 -1
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +342 -43
- 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 +357 -189
- 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/nodeLock.d.ts +2 -0
- package/dist/engine/nodeLock.d.ts.map +1 -0
- package/dist/engine/nodeLock.js +31 -0
- package/dist/engine/nodeLock.js.map +1 -0
- 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/engine/placement.d.ts +10 -0
- package/dist/engine/placement.d.ts.map +1 -1
- package/dist/engine/placement.js +10 -0
- package/dist/engine/placement.js.map +1 -1
- package/dist/engine/trigger.d.ts.map +1 -1
- package/dist/engine/trigger.js +17 -3
- package/dist/engine/trigger.js.map +1 -1
- 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 +30 -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 +92 -3
- package/dist/routes/node.js.map +1 -1
- package/package.json +3 -3
|
@@ -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 { PROVIDER_ATTACH_LIVENESS_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,150 @@ 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
|
+
isProviderAttached(workspaceId, nodeId, providerName) {
|
|
191
|
+
const connId = this.providerConnId(this.nodeKey(workspaceId, nodeId), providerName);
|
|
192
|
+
return !!connId && this.nodeConnections.has(connId);
|
|
193
|
+
}
|
|
194
|
+
providerNameForConnection(connectionId) {
|
|
195
|
+
return this.nodeConnections.get(connectionId)?.providerName;
|
|
196
|
+
}
|
|
197
|
+
providerAttachConflict(workspaceId, nodeId, providerName, instanceId, connectionId) {
|
|
198
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
199
|
+
const existingConnId = this.providerConnId(nodeKey, providerName);
|
|
200
|
+
if (!existingConnId || existingConnId === connectionId)
|
|
201
|
+
return null;
|
|
202
|
+
const existing = this.nodeConnections.get(existingConnId);
|
|
203
|
+
if (!existing)
|
|
204
|
+
return null;
|
|
205
|
+
// Spec §3.1: a new instance_id is a reconnect/restart and supersedes the
|
|
206
|
+
// incumbent on attach; the same instance re-registering just replaces
|
|
207
|
+
// itself. Reject only a genuinely-live DUPLICATE — a different instance
|
|
208
|
+
// whose connection is still actively framing, i.e. seen within
|
|
209
|
+
// PROVIDER_ATTACH_LIVENESS_MS. The window covers the longest built-in SDK
|
|
210
|
+
// heartbeat cadence with scheduling slack. A killed instance stops framing,
|
|
211
|
+
// so its window lapses and the restart supersedes the stale binding instead
|
|
212
|
+
// of being blocked for the full node TTL.
|
|
213
|
+
if (existing.instanceId === instanceId)
|
|
214
|
+
return null;
|
|
215
|
+
if (Date.now() - existing.lastSeen <= PROVIDER_ATTACH_LIVENESS_MS) {
|
|
216
|
+
return {
|
|
217
|
+
code: 'provider_instance_conflict',
|
|
218
|
+
message: `Provider "${providerName}" is already connected on this node`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
attachProvider(workspaceId, nodeId, providerName, instanceId, connectionId) {
|
|
224
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
133
225
|
if (!conn)
|
|
134
226
|
return;
|
|
135
|
-
this.
|
|
136
|
-
|
|
137
|
-
|
|
227
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
228
|
+
let providers = this.providerIndex.get(nodeKey);
|
|
229
|
+
if (!providers) {
|
|
230
|
+
providers = new Map();
|
|
231
|
+
this.providerIndex.set(nodeKey, providers);
|
|
138
232
|
}
|
|
139
|
-
|
|
140
|
-
|
|
233
|
+
const existingConnId = providers.get(providerName);
|
|
234
|
+
if (existingConnId && existingConnId !== connectionId) {
|
|
235
|
+
const superseded = this.nodeConnections.get(existingConnId);
|
|
236
|
+
this.nodeConnections.delete(existingConnId);
|
|
237
|
+
const conns = this.nodeConnIndex.get(nodeKey);
|
|
238
|
+
if (conns) {
|
|
239
|
+
conns.delete(existingConnId);
|
|
240
|
+
if (conns.size === 0)
|
|
241
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
242
|
+
}
|
|
243
|
+
if (superseded) {
|
|
244
|
+
superseded.providerName = undefined;
|
|
245
|
+
try {
|
|
246
|
+
superseded.socket.close(1000, 'superseded');
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// already closed
|
|
250
|
+
}
|
|
251
|
+
}
|
|
141
252
|
}
|
|
253
|
+
conn.providerName = providerName;
|
|
254
|
+
conn.instanceId = instanceId;
|
|
255
|
+
conn.lastSeen = Date.now();
|
|
256
|
+
providers.set(providerName, connectionId);
|
|
257
|
+
}
|
|
258
|
+
detachProvider(workspaceId, nodeId, providerName) {
|
|
259
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
260
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
261
|
+
const connId = providers?.get(providerName);
|
|
262
|
+
if (providers) {
|
|
263
|
+
providers.delete(providerName);
|
|
264
|
+
if (providers.size === 0)
|
|
265
|
+
this.providerIndex.delete(nodeKey);
|
|
266
|
+
}
|
|
267
|
+
if (connId) {
|
|
268
|
+
const conn = this.nodeConnections.get(connId);
|
|
269
|
+
if (conn)
|
|
270
|
+
conn.providerName = undefined;
|
|
271
|
+
}
|
|
272
|
+
this.nodeQueues.delete(this.providerQueueKey(nodeKey, providerName));
|
|
273
|
+
}
|
|
274
|
+
async disconnectNode(workspaceId, nodeId) {
|
|
275
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
276
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
277
|
+
const connIds = new Set(providers ? providers.values() : []);
|
|
278
|
+
// Also close any connections bound to this node that never registered.
|
|
279
|
+
for (const [connId, conn] of this.nodeConnections) {
|
|
280
|
+
if (conn.nodeId === nodeId && conn.workspaceId === workspaceId)
|
|
281
|
+
connIds.add(connId);
|
|
282
|
+
}
|
|
283
|
+
for (const connId of connIds) {
|
|
284
|
+
const conn = this.nodeConnections.get(connId);
|
|
285
|
+
this.nodeConnections.delete(connId);
|
|
286
|
+
if (conn) {
|
|
287
|
+
try {
|
|
288
|
+
conn.socket.close(1000, 'force-disconnect');
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// already closed
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
this.providerIndex.delete(nodeKey);
|
|
296
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
142
297
|
}
|
|
143
298
|
/* --------------------- Node transport attach helpers ----------------- */
|
|
144
299
|
/** Register a live workspace-stream socket; returns handlers the transport drives. */
|
|
@@ -164,34 +319,37 @@ export class InProcessRealtime {
|
|
|
164
319
|
}
|
|
165
320
|
/** Register a live fleet node control socket; returns handlers the transport drives. */
|
|
166
321
|
attachNodeSocket(workspaceId, nodeId, socket) {
|
|
167
|
-
const
|
|
168
|
-
const
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
322
|
+
const connectionId = `nconn_${++this.connectionSeq}`;
|
|
323
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
324
|
+
this.nodeConnections.set(connectionId, {
|
|
325
|
+
socket,
|
|
326
|
+
workspaceId,
|
|
327
|
+
nodeId,
|
|
328
|
+
lastSeen: Date.now(),
|
|
329
|
+
});
|
|
330
|
+
let conns = this.nodeConnIndex.get(nodeKey);
|
|
331
|
+
if (!conns) {
|
|
332
|
+
conns = new Set();
|
|
333
|
+
this.nodeConnIndex.set(nodeKey, conns);
|
|
177
334
|
}
|
|
335
|
+
conns.add(connectionId);
|
|
178
336
|
const handle = {
|
|
179
|
-
handleMessage: async (raw) =>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
337
|
+
handleMessage: async (raw) => {
|
|
338
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
339
|
+
if (conn)
|
|
340
|
+
conn.lastSeen = Date.now();
|
|
341
|
+
return handleNodeControlMessage({
|
|
342
|
+
db: this.db,
|
|
343
|
+
registry: this,
|
|
344
|
+
completionDeps: this.nodeCompletionDeps,
|
|
345
|
+
workspaceId,
|
|
346
|
+
nodeId,
|
|
347
|
+
socket,
|
|
348
|
+
connectionId,
|
|
349
|
+
raw,
|
|
350
|
+
});
|
|
194
351
|
},
|
|
352
|
+
handleClose: async () => this.onNodeConnectionClose(connectionId),
|
|
195
353
|
};
|
|
196
354
|
// Best-effort early flush (covers non-spawn frames that need no capacity);
|
|
197
355
|
// the authoritative drain fires post node.register/heartbeat once the node
|
|
@@ -199,6 +357,35 @@ export class InProcessRealtime {
|
|
|
199
357
|
void this.drainNode(workspaceId, nodeId);
|
|
200
358
|
return handle;
|
|
201
359
|
}
|
|
360
|
+
async onNodeConnectionClose(connectionId) {
|
|
361
|
+
const conn = this.nodeConnections.get(connectionId);
|
|
362
|
+
if (!conn)
|
|
363
|
+
return;
|
|
364
|
+
this.nodeConnections.delete(connectionId);
|
|
365
|
+
const { workspaceId, nodeId, providerName } = conn;
|
|
366
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
367
|
+
const conns = this.nodeConnIndex.get(nodeKey);
|
|
368
|
+
if (conns) {
|
|
369
|
+
conns.delete(connectionId);
|
|
370
|
+
if (conns.size === 0)
|
|
371
|
+
this.nodeConnIndex.delete(nodeKey);
|
|
372
|
+
}
|
|
373
|
+
const providers = this.providerIndex.get(nodeKey);
|
|
374
|
+
if (providerName && providers?.get(providerName) === connectionId) {
|
|
375
|
+
providers.delete(providerName);
|
|
376
|
+
if (providers.size === 0)
|
|
377
|
+
this.providerIndex.delete(nodeKey);
|
|
378
|
+
this.nodeQueues.delete(this.providerQueueKey(nodeKey, providerName));
|
|
379
|
+
}
|
|
380
|
+
const hasRemaining = this.isNodeConnected(workspaceId, nodeId);
|
|
381
|
+
if (providerName) {
|
|
382
|
+
await handleProviderDisconnect(this.db, this, workspaceId, nodeId, providerName, hasRemaining).catch(() => { });
|
|
383
|
+
}
|
|
384
|
+
else if (!hasRemaining) {
|
|
385
|
+
// Connection dropped before it bound a provider and it was the node's last.
|
|
386
|
+
await markNodeOffline(this.db, this, workspaceId, nodeId).catch(() => { });
|
|
387
|
+
}
|
|
388
|
+
}
|
|
202
389
|
/**
|
|
203
390
|
* Public, serialized drain entrypoint. Concurrent calls for the same node are
|
|
204
391
|
* chained so two drains never run at once (which could double-reserve spawn
|
|
@@ -216,12 +403,16 @@ export class InProcessRealtime {
|
|
|
216
403
|
return next;
|
|
217
404
|
}
|
|
218
405
|
async drainNodeQueue(workspaceId, nodeId) {
|
|
219
|
-
|
|
220
|
-
const conn = this.nodeSockets.get(key)?.socket;
|
|
221
|
-
if (!conn)
|
|
406
|
+
if (!this.isNodeConnected(workspaceId, nodeId))
|
|
222
407
|
return;
|
|
223
408
|
await drainNodeInvocations(this.db, this, workspaceId, nodeId);
|
|
224
|
-
|
|
409
|
+
// The authoritative re-dispatch is DB-driven; clear the per-provider
|
|
410
|
+
// in-memory buffers now that their frames have been re-sent.
|
|
411
|
+
const nodeKey = this.nodeKey(workspaceId, nodeId);
|
|
412
|
+
for (const queueKey of [...this.nodeQueues.keys()]) {
|
|
413
|
+
if (queueKey.startsWith(`${nodeKey}::`))
|
|
414
|
+
this.nodeQueues.delete(queueKey);
|
|
415
|
+
}
|
|
225
416
|
}
|
|
226
417
|
async onWorkspaceMessage(socket, raw) {
|
|
227
418
|
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;
|