@xyne/workflow-sdk 3.2.35 → 3.2.37
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/agents/agent-step.js +1 -1
- package/dist/agents/agent-step.js.map +1 -1
- package/dist/authz/attributes.d.ts +23 -0
- package/dist/authz/attributes.d.ts.map +1 -1
- package/dist/client/events-client.d.ts +57 -0
- package/dist/client/events-client.d.ts.map +1 -0
- package/dist/client/events-client.js +107 -0
- package/dist/client/events-client.js.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/sse.d.ts +30 -0
- package/dist/client/sse.d.ts.map +1 -0
- package/dist/client/sse.js +76 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.d.ts +24 -1
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/url.d.ts +11 -0
- package/dist/client/url.d.ts.map +1 -0
- package/dist/client/url.js +28 -0
- package/dist/client/url.js.map +1 -0
- package/dist/client/workflow-client.d.ts +1 -1
- package/dist/client/workflow-client.d.ts.map +1 -1
- package/dist/client/workflow-client.js +25 -20
- package/dist/client/workflow-client.js.map +1 -1
- package/dist/engine/workflow-executor.d.ts +11 -4
- package/dist/engine/workflow-executor.d.ts.map +1 -1
- package/dist/engine/workflow-executor.js +15 -2
- package/dist/engine/workflow-executor.js.map +1 -1
- package/dist/events/in-memory-adapter.d.ts +15 -0
- package/dist/events/in-memory-adapter.d.ts.map +1 -0
- package/dist/events/in-memory-adapter.js +50 -0
- package/dist/events/in-memory-adapter.js.map +1 -0
- package/dist/events/types.d.ts +154 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +34 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/router/workflow-router.d.ts.map +1 -1
- package/dist/router/workflow-router.js +205 -32
- package/dist/router/workflow-router.js.map +1 -1
- package/dist/runtime/types.d.ts +30 -52
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.d.ts +27 -9
- package/dist/runtime/workflow-runtime.d.ts.map +1 -1
- package/dist/runtime/workflow-runtime.js +64 -13
- package/dist/runtime/workflow-runtime.js.map +1 -1
- package/dist/steps/builtin/http-request.step.d.ts +29 -29
- package/dist/steps/builtin/http-request.step.js +1 -1
- package/dist/steps/builtin/http-request.step.js.map +1 -1
- package/dist/storage/types.d.ts +11 -3
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/util/event-channel.d.ts +25 -0
- package/dist/util/event-channel.d.ts.map +1 -0
- package/dist/util/event-channel.js +61 -0
- package/dist/util/event-channel.js.map +1 -0
- package/package.json +1 -1
- package/dist/common/expression-eval.d.ts +0 -35
- package/dist/common/expression-eval.d.ts.map +0 -1
- package/dist/common/expression-eval.js +0 -214
- package/dist/common/expression-eval.js.map +0 -1
- package/dist/common/principal.d.ts +0 -45
- package/dist/common/principal.d.ts.map +0 -1
- package/dist/common/principal.js +0 -9
- package/dist/common/principal.js.map +0 -1
- package/dist/steps/builtin/transform.step.d.ts +0 -247
- package/dist/steps/builtin/transform.step.d.ts.map +0 -1
- package/dist/steps/builtin/transform.step.js +0 -135
- package/dist/steps/builtin/transform.step.js.map +0 -1
- package/dist/types/attachment.d.ts +0 -23
- package/dist/types/attachment.d.ts.map +0 -1
- package/dist/types/attachment.js +0 -2
- package/dist/types/attachment.js.map +0 -1
- package/dist/types/resume-payload.d.ts +0 -34
- package/dist/types/resume-payload.d.ts.map +0 -1
- package/dist/types/resume-payload.js +0 -12
- package/dist/types/resume-payload.js.map +0 -1
- package/dist/util/executable-check.d.ts +0 -42
- package/dist/util/executable-check.d.ts.map +0 -1
- package/dist/util/executable-check.js +0 -115
- package/dist/util/executable-check.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The event bus port — how live state transitions reach a watching client.
|
|
3
|
+
*
|
|
4
|
+
* The engine publishes at execution state transitions; the SSE route subscribes
|
|
5
|
+
* and streams to the browser. Between them sits a topic-addressed pub/sub
|
|
6
|
+
* channel that this file describes and deliberately does not implement.
|
|
7
|
+
*
|
|
8
|
+
* ## Why this is a port
|
|
9
|
+
*
|
|
10
|
+
* A bus backed by a process-local `Map` only works when the publisher and the
|
|
11
|
+
* subscriber share a heap, and hosts routinely arrange for them not to: run the
|
|
12
|
+
* queue worker in one process and the HTTP API in another — the ordinary way to
|
|
13
|
+
* scale either independently — and the executor publishes into one map while the
|
|
14
|
+
* stream route listens to a different one. Nothing errors. Every live run just
|
|
15
|
+
* renders its opening snapshot and then appears to freeze.
|
|
16
|
+
*
|
|
17
|
+
* That failure is invisible from inside the engine, so the engine must not be the
|
|
18
|
+
* thing that decides how events travel. A host that spans processes supplies a
|
|
19
|
+
* Redis (or NATS, or Kafka) adapter; {@link InMemoryEventBus} stays the default
|
|
20
|
+
* and stays correct whenever everything shares one process.
|
|
21
|
+
*
|
|
22
|
+
* ## Delivery contract
|
|
23
|
+
*
|
|
24
|
+
* At-most-once, unordered across publishers. Implementations are not required to
|
|
25
|
+
* buffer, replay, or acknowledge — a subscriber that was not listening when an
|
|
26
|
+
* event was published never sees it. Consumers must therefore treat a subscription
|
|
27
|
+
* as a hint to re-read authoritative state, not as the state itself, and must
|
|
28
|
+
* recover by re-reading after any reconnect.
|
|
29
|
+
*/
|
|
30
|
+
/** The channel carrying one execution's lifecycle events. */
|
|
31
|
+
export const executionTopic = (executionId) => `execution:${executionId}`;
|
|
32
|
+
/** The channel carrying one workflow definition's change events. */
|
|
33
|
+
export const workflowTopic = (workflowId) => `workflow:${workflowId}`;
|
|
34
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AA+EH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAc,EAAE,CAAC,aAAa,WAAW,EAAE,CAAC;AAE9F,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAc,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -62,9 +62,13 @@ export type { WaitStepConfig, WaitStepOutput, } from './steps/builtin/wait.step.
|
|
|
62
62
|
export { HttpRequestStep, HttpRequestStepConfigSchema, HttpMethodSchema, HttpRawContentTypeSchema, HttpResponseSchema, HttpBodySchema, } from './steps/builtin/http-request.step.js';
|
|
63
63
|
export type { HttpRequestStepConfig, HttpRequestStepOutput, HttpMethod, HttpRawContentType, HttpResponseConfig, HttpResponseType, HttpBody, } from './steps/builtin/http-request.step.js';
|
|
64
64
|
export { WorkflowRuntime } from './runtime/workflow-runtime.js';
|
|
65
|
-
export {
|
|
66
|
-
export
|
|
67
|
-
export
|
|
65
|
+
export type { ExecutionResult, RuntimeOptions, RuntimeConfig, DispatchEventInput, MutationOptions, ResumeInput, } from './runtime/types.js';
|
|
66
|
+
export { InMemoryEventBus } from './events/in-memory-adapter.js';
|
|
67
|
+
export { executionTopic } from './events/types.js';
|
|
68
|
+
export { workflowTopic } from './events/types.js';
|
|
69
|
+
export type { EventBusAdapter, EventTopic, BusEvent, BusListener, Unsubscribe, ExecutionStreamEvent, WorkflowChangeEvent, WorkflowChangeKind, } from './events/types.js';
|
|
70
|
+
export { createEventChannel } from './util/event-channel.js';
|
|
71
|
+
export type { EventChannel } from './util/event-channel.js';
|
|
68
72
|
export type { WorkflowAuthorizer, Action, ResourceType, ResourceRef, ApprovalStepRecord, } from './authz/types.js';
|
|
69
73
|
export type { Register, ResourceAttributes, AttributedResource } from './authz/attributes.js';
|
|
70
74
|
export { WORKFLOW_ACTIONS, EXECUTION_ACTIONS, FOLDER_ACTIONS, CONTAINER_ACTIONS, CREDENTIAL_ACTIONS, ALL_ACTIONS, refLabel, } from './authz/types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -66,7 +66,15 @@ export { WaitStep, WaitStepConfigSchema, } from './steps/builtin/wait.step.js';
|
|
|
66
66
|
export { HttpRequestStep, HttpRequestStepConfigSchema, HttpMethodSchema, HttpRawContentTypeSchema, HttpResponseSchema, HttpBodySchema, } from './steps/builtin/http-request.step.js';
|
|
67
67
|
// ─── Runtime ───
|
|
68
68
|
export { WorkflowRuntime } from './runtime/workflow-runtime.js';
|
|
69
|
-
|
|
69
|
+
// ─── Event Bus ───
|
|
70
|
+
//
|
|
71
|
+
// `InMemoryEventBus` is the default and suits any host that runs in one process.
|
|
72
|
+
// Split the queue worker from the HTTP API and it stops working *silently* — that
|
|
73
|
+
// host must implement `EventBusAdapter` over a real broker instead.
|
|
74
|
+
export { InMemoryEventBus } from './events/in-memory-adapter.js';
|
|
75
|
+
export { executionTopic } from './events/types.js';
|
|
76
|
+
export { workflowTopic } from './events/types.js';
|
|
77
|
+
export { createEventChannel } from './util/event-channel.js';
|
|
70
78
|
export { WORKFLOW_ACTIONS, EXECUTION_ACTIONS, FOLDER_ACTIONS, CONTAINER_ACTIONS, CREDENTIAL_ACTIONS, ALL_ACTIONS, refLabel, } from './authz/types.js';
|
|
71
79
|
export { applyIdScope } from './authz/id-scope.js';
|
|
72
80
|
export { AllowAllAuthorizer, AccessDeniedError, ResourceNotFoundError, } from './authz/default.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-router.d.ts","sourceRoot":"","sources":["../../src/router/workflow-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAA+B,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-router.d.ts","sourceRoot":"","sources":["../../src/router/workflow-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAA+B,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmN3G,wBAAgB,oBAAoB,CAAC,IAAI,GAAG,WAAW,EAGrD,OAAO,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,EAEnC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GACzB,eAAe,CAAC,IAAI,CAAC,EAAE,CA4iDzB"}
|
|
@@ -27,8 +27,9 @@ import { createChatAgentTools } from '../agents/builtin/chat-tools.js';
|
|
|
27
27
|
import { buildWorkflowContext, buildExecutionDataFile, collectExecutionAttachments, EXECUTION_DATA_PATH } from './approval-context.js';
|
|
28
28
|
import { OPERATOR_DESCRIPTORS } from '../types/operators.js';
|
|
29
29
|
import { getAvailableContext } from '../engine/available-context.js';
|
|
30
|
+
import { executionTopic, workflowTopic } from '../events/types.js';
|
|
30
31
|
import { isExecutable } from '../common/executable-check.js';
|
|
31
|
-
import { createEventChannel } from '../
|
|
32
|
+
import { createEventChannel } from '../util/event-channel.js';
|
|
32
33
|
import { AccessDeniedError, ResourceNotFoundError } from '../authz/default.js';
|
|
33
34
|
import { applyResolvedCredentialAuth, CredentialNameSchema, CredentialAuthSchema, validateCredentialValues, } from '../common/credentials.js';
|
|
34
35
|
// ─── Helpers ───
|
|
@@ -131,6 +132,54 @@ async function buildMultipartTriggerPayload(req, storage, scope, inputSchema) {
|
|
|
131
132
|
function formatSSE(event, data) {
|
|
132
133
|
return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
133
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* An SSE comment. Carries no event, so it never reaches a client handler — it
|
|
137
|
+
* exists purely so that something crosses the wire on an idle connection, before
|
|
138
|
+
* a proxy or load balancer decides the stream is dead and closes it.
|
|
139
|
+
*/
|
|
140
|
+
const SSE_KEEPALIVE = ': keepalive\n\n';
|
|
141
|
+
/** How long an event stream may sit silent before it sends a keepalive. */
|
|
142
|
+
const KEEPALIVE_INTERVAL_MS = 25_000;
|
|
143
|
+
/**
|
|
144
|
+
* Marker pushed through an event channel to trigger a keepalive. A symbol so it
|
|
145
|
+
* can never be mistaken for — or collide with — a real event.
|
|
146
|
+
*/
|
|
147
|
+
const KEEPALIVE = Symbol('keepalive');
|
|
148
|
+
/** Ceiling on topics per multiplexed connection. */
|
|
149
|
+
const MAX_STREAM_TOPICS = 100;
|
|
150
|
+
/**
|
|
151
|
+
* The writer's self-declared identity, read from `X-Workflow-Origin` and echoed
|
|
152
|
+
* back on the change event the mutation emits.
|
|
153
|
+
*
|
|
154
|
+
* A header rather than a body field: it describes the call, not the resource, so
|
|
155
|
+
* it works the same on JSON, multipart and empty-bodied routes without any of
|
|
156
|
+
* them having to make room for it in their schema.
|
|
157
|
+
*
|
|
158
|
+
* Untrusted by construction — a client may send whatever it likes. Nothing is
|
|
159
|
+
* authorized on it; it only ever lets a client recognise the echo of its own
|
|
160
|
+
* write. Truncated so a subscriber cannot be made to carry an unbounded string.
|
|
161
|
+
*/
|
|
162
|
+
function readOrigin(req) {
|
|
163
|
+
const raw = req.headers['x-workflow-origin'];
|
|
164
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
165
|
+
return value ? { origin: value.slice(0, 128) } : {};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Parse an id list from a query parameter, accepting both `?a=1,2` and `?a=1&a=2`
|
|
169
|
+
* so the route does not depend on how the host's framework folds repeats.
|
|
170
|
+
*/
|
|
171
|
+
function parseIdList(raw) {
|
|
172
|
+
const parts = Array.isArray(raw) ? raw : typeof raw === 'string' ? [raw] : [];
|
|
173
|
+
const ids = new Set();
|
|
174
|
+
for (const part of parts) {
|
|
175
|
+
for (const id of part.split(',')) {
|
|
176
|
+
const trimmed = id.trim();
|
|
177
|
+
if (trimmed)
|
|
178
|
+
ids.add(trimmed);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return [...ids];
|
|
182
|
+
}
|
|
134
183
|
// ─── Router Factory ───
|
|
135
184
|
export function createWorkflowRouter(
|
|
136
185
|
// `any` for services: the router never touches TServices, only forwards ctx.
|
|
@@ -200,7 +249,7 @@ _opts) {
|
|
|
200
249
|
summary: typeof body['summary'] === 'string' ? body['summary'] : null,
|
|
201
250
|
folderId: body['folderId'],
|
|
202
251
|
attributes: body['attributes'],
|
|
203
|
-
});
|
|
252
|
+
}, readOrigin(req));
|
|
204
253
|
return created(workflow);
|
|
205
254
|
}
|
|
206
255
|
catch (err) {
|
|
@@ -233,7 +282,7 @@ _opts) {
|
|
|
233
282
|
}
|
|
234
283
|
if (typeof body['folderId'] === 'string')
|
|
235
284
|
input.folderId = body['folderId'];
|
|
236
|
-
const workflow = await runtime.updateWorkflow(asCtx(auth), id, input);
|
|
285
|
+
const workflow = await runtime.updateWorkflow(asCtx(auth), id, input, readOrigin(req));
|
|
237
286
|
return ok(workflow);
|
|
238
287
|
}
|
|
239
288
|
catch (err) {
|
|
@@ -363,7 +412,7 @@ _opts) {
|
|
|
363
412
|
if (folders.length === 0 && workflows.length === 0)
|
|
364
413
|
return badRequest('Nothing to move');
|
|
365
414
|
try {
|
|
366
|
-
await runtime.moveBatch(asCtx(auth), { folders, workflows });
|
|
415
|
+
await runtime.moveBatch(asCtx(auth), { folders, workflows }, readOrigin(req));
|
|
367
416
|
return ok({ moved: folders.length + workflows.length });
|
|
368
417
|
}
|
|
369
418
|
catch (err) {
|
|
@@ -395,7 +444,7 @@ _opts) {
|
|
|
395
444
|
if (!id)
|
|
396
445
|
return badRequest('Missing workflow ID');
|
|
397
446
|
try {
|
|
398
|
-
await runtime.activateWorkflow(asCtx(auth), id);
|
|
447
|
+
await runtime.activateWorkflow(asCtx(auth), id, readOrigin(req));
|
|
399
448
|
return ok({ activated: true });
|
|
400
449
|
}
|
|
401
450
|
catch (err) {
|
|
@@ -413,7 +462,7 @@ _opts) {
|
|
|
413
462
|
if (!id)
|
|
414
463
|
return badRequest('Missing workflow ID');
|
|
415
464
|
try {
|
|
416
|
-
await runtime.deactivateWorkflow(asCtx(auth), id);
|
|
465
|
+
await runtime.deactivateWorkflow(asCtx(auth), id, readOrigin(req));
|
|
417
466
|
return ok({ deactivated: true });
|
|
418
467
|
}
|
|
419
468
|
catch (err) {
|
|
@@ -487,8 +536,9 @@ _opts) {
|
|
|
487
536
|
method: 'POST',
|
|
488
537
|
path: '/uploads',
|
|
489
538
|
multipart: 'files',
|
|
490
|
-
// TODO(uploads): guard
|
|
491
|
-
|
|
539
|
+
// TODO(uploads): guard via the authorizer once blobs are ACL-modeled. The scope
|
|
540
|
+
// below gives tenant attribution; it is not authorization.
|
|
541
|
+
handler: async (req, auth) => {
|
|
492
542
|
if (!runtime.storage) {
|
|
493
543
|
return error(501, 'No StorageAdapter configured — file uploads are disabled');
|
|
494
544
|
}
|
|
@@ -507,10 +557,11 @@ _opts) {
|
|
|
507
557
|
}
|
|
508
558
|
}
|
|
509
559
|
}
|
|
510
|
-
//
|
|
511
|
-
//
|
|
512
|
-
//
|
|
513
|
-
|
|
560
|
+
// The host's auth context IS its storage scope for caller-initiated work: an
|
|
561
|
+
// upload has a person and no workflow yet. Not provable here (TCtx is unbound
|
|
562
|
+
// at this point), so the host's adapter validates and rejects a scope it
|
|
563
|
+
// cannot read a tenant from.
|
|
564
|
+
const scope = auth;
|
|
514
565
|
try {
|
|
515
566
|
const attachments = [];
|
|
516
567
|
for (const file of files) {
|
|
@@ -539,7 +590,7 @@ _opts) {
|
|
|
539
590
|
routes.push({
|
|
540
591
|
method: 'GET',
|
|
541
592
|
path: '/attachments',
|
|
542
|
-
handler: async (req,
|
|
593
|
+
handler: async (req, auth) => {
|
|
543
594
|
if (!runtime.storage) {
|
|
544
595
|
return error(501, 'No StorageAdapter configured — downloads are disabled');
|
|
545
596
|
}
|
|
@@ -554,7 +605,9 @@ _opts) {
|
|
|
554
605
|
const url = await runtime.storage.signUrl(attachment, 300);
|
|
555
606
|
return { status: 302, body: null, headers: { Location: url } };
|
|
556
607
|
}
|
|
557
|
-
|
|
608
|
+
// Pass the caller so a tenant-enforcing adapter can refuse a reference
|
|
609
|
+
// owned by another workspace. `ref` is client-supplied.
|
|
610
|
+
const bytes = await runtime.storage.read(attachment, auth);
|
|
558
611
|
return {
|
|
559
612
|
status: 200,
|
|
560
613
|
body: bytes,
|
|
@@ -1109,6 +1162,99 @@ _opts) {
|
|
|
1109
1162
|
}
|
|
1110
1163
|
},
|
|
1111
1164
|
});
|
|
1165
|
+
// ─── SSE: Multiplexed Change Stream ───
|
|
1166
|
+
//
|
|
1167
|
+
// One connection, many topics: `GET /events?workflows=a,b`.
|
|
1168
|
+
//
|
|
1169
|
+
// The topic set lives in the URL and nowhere else, which is what keeps this
|
|
1170
|
+
// working behind a load balancer with no session affinity. There is no
|
|
1171
|
+
// server-side subscription to mutate, so a client that wants to watch something
|
|
1172
|
+
// new simply reconnects with a different query string — and any pod can serve
|
|
1173
|
+
// it, because every pod subscribes to whatever its own clients asked for.
|
|
1174
|
+
//
|
|
1175
|
+
// Frames are notifications, not payloads: `workflow_changed` says *that* a
|
|
1176
|
+
// workflow changed, and the client re-reads through the ordinary authorized
|
|
1177
|
+
// GET. Only `workflows` is accepted today — a live execution has its own richer
|
|
1178
|
+
// stream at `/executions/:execId/stream`, which patches step state in place
|
|
1179
|
+
// rather than re-reading, and duplicating it here would give it two meanings.
|
|
1180
|
+
// The query shape is keyed by entity so further families slot in unchanged.
|
|
1181
|
+
routes.push({
|
|
1182
|
+
method: 'GET',
|
|
1183
|
+
path: '/events',
|
|
1184
|
+
handler: async (req, auth) => {
|
|
1185
|
+
const eventBus = runtime.eventBus;
|
|
1186
|
+
if (!eventBus) {
|
|
1187
|
+
return error(501, 'Event streaming not configured');
|
|
1188
|
+
}
|
|
1189
|
+
const requested = parseIdList(req.query['workflows']);
|
|
1190
|
+
if (requested.length === 0) {
|
|
1191
|
+
return badRequest('Specify at least one id, e.g. ?workflows=a,b');
|
|
1192
|
+
}
|
|
1193
|
+
if (requested.length > MAX_STREAM_TOPICS) {
|
|
1194
|
+
return badRequest(`Too many topics (${String(requested.length)}); the limit is ${String(MAX_STREAM_TOPICS)}`);
|
|
1195
|
+
}
|
|
1196
|
+
// Authorize every id up front, through the same read the client would do.
|
|
1197
|
+
// A bus is addressed by resource id and knows nothing about principals, so
|
|
1198
|
+
// this is the only place the caller's access is actually decided.
|
|
1199
|
+
//
|
|
1200
|
+
// One unreadable id does not fail the connection: on a multiplexed stream
|
|
1201
|
+
// that would take down every other topic the client is watching, and access
|
|
1202
|
+
// can be lost mid-session. The `ready` frame reports what was accepted, so
|
|
1203
|
+
// the client is never left believing it is watching something it is not.
|
|
1204
|
+
const subscribed = [];
|
|
1205
|
+
const rejected = [];
|
|
1206
|
+
await Promise.all(requested.map(async (id) => {
|
|
1207
|
+
try {
|
|
1208
|
+
await runtime.getWorkflow(asCtx(auth), id);
|
|
1209
|
+
subscribed.push(id);
|
|
1210
|
+
}
|
|
1211
|
+
catch {
|
|
1212
|
+
rejected.push(id);
|
|
1213
|
+
}
|
|
1214
|
+
}));
|
|
1215
|
+
const channel = createEventChannel();
|
|
1216
|
+
const results = await Promise.allSettled(subscribed.map((id) => eventBus.subscribe(workflowTopic(id), channel.push)));
|
|
1217
|
+
const unsubs = results.flatMap((r) => r.status === 'fulfilled' ? [r.value] : []);
|
|
1218
|
+
if (unsubs.length !== results.length) {
|
|
1219
|
+
// A partially-subscribed stream is worse than none: it looks live and is
|
|
1220
|
+
// silently blind to some of its topics. Tear it down and let the client
|
|
1221
|
+
// reconnect.
|
|
1222
|
+
for (const unsub of unsubs)
|
|
1223
|
+
unsub();
|
|
1224
|
+
channel.end();
|
|
1225
|
+
return error(503, 'Could not open the event stream');
|
|
1226
|
+
}
|
|
1227
|
+
const keepalive = setInterval(() => {
|
|
1228
|
+
channel.push(KEEPALIVE);
|
|
1229
|
+
}, KEEPALIVE_INTERVAL_MS);
|
|
1230
|
+
async function* generateSSE() {
|
|
1231
|
+
try {
|
|
1232
|
+
// Sent before anything else so the client knows the subscription is
|
|
1233
|
+
// live and which topics it actually got.
|
|
1234
|
+
yield formatSSE('ready', { subscribed, rejected });
|
|
1235
|
+
for await (const frame of channel) {
|
|
1236
|
+
yield frame === KEEPALIVE ? SSE_KEEPALIVE : formatSSE(frame.event, frame.data);
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
finally {
|
|
1240
|
+
clearInterval(keepalive);
|
|
1241
|
+
for (const unsub of unsubs)
|
|
1242
|
+
unsub();
|
|
1243
|
+
channel.end();
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
return {
|
|
1247
|
+
status: 200,
|
|
1248
|
+
body: null,
|
|
1249
|
+
headers: {
|
|
1250
|
+
'Content-Type': 'text/event-stream',
|
|
1251
|
+
'Cache-Control': 'no-cache',
|
|
1252
|
+
'Connection': 'keep-alive',
|
|
1253
|
+
},
|
|
1254
|
+
stream: generateSSE(),
|
|
1255
|
+
};
|
|
1256
|
+
},
|
|
1257
|
+
});
|
|
1112
1258
|
// ─── SSE: Execution Event Stream ───
|
|
1113
1259
|
routes.push({
|
|
1114
1260
|
method: 'GET',
|
|
@@ -1121,27 +1267,51 @@ _opts) {
|
|
|
1121
1267
|
if (!eventBus) {
|
|
1122
1268
|
return error(501, 'Event streaming not configured');
|
|
1123
1269
|
}
|
|
1124
|
-
|
|
1125
|
-
|
|
1270
|
+
// Subscribe BEFORE reading the snapshot, not after.
|
|
1271
|
+
//
|
|
1272
|
+
// Anything published in between is then delivered twice — once folded into
|
|
1273
|
+
// the snapshot, once live — which costs a redundant repaint, because every
|
|
1274
|
+
// execution event is idempotent. A miss is not recoverable: drop
|
|
1275
|
+
// `execution_completed` and the client sits on an open connection waiting
|
|
1276
|
+
// for a frame that has already been and gone. Subscribing second is a race
|
|
1277
|
+
// even in-process; against a distributed bus, where subscribe is a network
|
|
1278
|
+
// round trip, it is a race you lose regularly.
|
|
1279
|
+
//
|
|
1280
|
+
// Ordering it this way subscribes fractionally before the caller's access is
|
|
1281
|
+
// checked. Nothing is delivered in that window: every failure path below
|
|
1282
|
+
// tears the subscription down and drops the channel unread, and the first
|
|
1283
|
+
// frame is only ever yielded after `getExecutionDetail` has authorized it.
|
|
1284
|
+
const channel = createEventChannel();
|
|
1285
|
+
const unsub = await eventBus.subscribe(executionTopic(execId), channel.push);
|
|
1286
|
+
const found = await runtime
|
|
1287
|
+
.getExecutionDetail(asCtx(auth), execId)
|
|
1288
|
+
.catch((err) => {
|
|
1289
|
+
unsub();
|
|
1290
|
+
throw err;
|
|
1291
|
+
});
|
|
1292
|
+
if (!found) {
|
|
1293
|
+
unsub();
|
|
1126
1294
|
return notFound(`Execution ${execId} not found`);
|
|
1295
|
+
}
|
|
1296
|
+
// Re-bound after the guard: `generateSSE` is a hoisted declaration, so TS
|
|
1297
|
+
// will not carry the null-narrowing of `found` into it.
|
|
1298
|
+
const detail = found;
|
|
1127
1299
|
const isTerminal = ['COMPLETED', 'FAILED', 'CANCELLED'].includes(detail.execution.status);
|
|
1128
1300
|
async function* generateSSE() {
|
|
1129
|
-
// 1. Send initial snapshot
|
|
1130
|
-
yield formatSSE('snapshot', {
|
|
1131
|
-
...detail.execution,
|
|
1132
|
-
steps: detail.steps,
|
|
1133
|
-
config: detail.config,
|
|
1134
|
-
triggerData: detail.triggerData,
|
|
1135
|
-
summary: detail.summary,
|
|
1136
|
-
name: detail.name,
|
|
1137
|
-
});
|
|
1138
|
-
// 2. If already terminal, close immediately
|
|
1139
|
-
if (isTerminal)
|
|
1140
|
-
return;
|
|
1141
|
-
// 3. Subscribe to live events
|
|
1142
|
-
const channel = createEventChannel();
|
|
1143
|
-
const unsub = eventBus.subscribe(execId, channel.push);
|
|
1144
1301
|
try {
|
|
1302
|
+
// 1. Send the initial snapshot (buffered events wait their turn).
|
|
1303
|
+
yield formatSSE('snapshot', {
|
|
1304
|
+
...detail.execution,
|
|
1305
|
+
steps: detail.steps,
|
|
1306
|
+
config: detail.config,
|
|
1307
|
+
triggerData: detail.triggerData,
|
|
1308
|
+
summary: detail.summary,
|
|
1309
|
+
name: detail.name,
|
|
1310
|
+
});
|
|
1311
|
+
// 2. If already terminal, close immediately.
|
|
1312
|
+
if (isTerminal)
|
|
1313
|
+
return;
|
|
1314
|
+
// 3. Drain live events.
|
|
1145
1315
|
for await (const event of channel) {
|
|
1146
1316
|
yield formatSSE(event.event, event.data);
|
|
1147
1317
|
// Close stream on terminal events
|
|
@@ -1153,7 +1323,10 @@ _opts) {
|
|
|
1153
1323
|
}
|
|
1154
1324
|
}
|
|
1155
1325
|
finally {
|
|
1326
|
+
// Runs however the generator ends — terminal event, client disconnect,
|
|
1327
|
+
// or a throw mid-yield.
|
|
1156
1328
|
unsub();
|
|
1329
|
+
channel.end();
|
|
1157
1330
|
}
|
|
1158
1331
|
}
|
|
1159
1332
|
return {
|
|
@@ -1287,7 +1460,7 @@ _opts) {
|
|
|
1287
1460
|
if (typeof att.attachment.size === 'number' && att.attachment.size > MAX_MOUNT_BYTES)
|
|
1288
1461
|
continue;
|
|
1289
1462
|
try {
|
|
1290
|
-
const bytes = await runtime.storage.read(att.attachment);
|
|
1463
|
+
const bytes = await runtime.storage.read(att.attachment, auth);
|
|
1291
1464
|
preloadFiles.push({ path: att.sandboxPath, bytes });
|
|
1292
1465
|
mountedPaths.set(att.attachment.data, att.sandboxPath);
|
|
1293
1466
|
}
|