@ixo/flow-work 0.1.1 → 0.3.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/listener.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { findCapability } from './capability.js';
2
- import { FLOW_WORK_INVOKE_EVENT, FLOW_WORK_RECEIPT_EVENT, flowWorkInvokeSchema, } from './protocol.js';
2
+ import { FLOW_WORK_ASSIGN_EVENT, FLOW_WORK_BINDING_FIELDS, FLOW_WORK_INVOKE_EVENT, FLOW_WORK_READY_EVENT, FLOW_WORK_RECEIPT_EVENT, computeFlowWorkInputHash, flowWorkAssignSchema, flowWorkInvokeSchema, flowWorkReadySchema, flowWorkReceiptSchema, sameFlowWorkBinding, sameFlowWorkNb, } from './protocol.js';
3
3
  class FlowWorkFailure extends Error {
4
4
  code;
5
5
  constructor(code, message) {
@@ -8,54 +8,39 @@ class FlowWorkFailure extends Error {
8
8
  this.name = 'FlowWorkFailure';
9
9
  }
10
10
  }
11
- /** Hostname of '@user:server.tld' or a bare/prefixed server name. */
12
- export function homeserverOf(value) {
13
- let candidate = value.trim().toLowerCase();
14
- if (candidate.startsWith('@')) {
15
- const separator = candidate.indexOf(':');
16
- if (separator < 0)
17
- return null;
18
- candidate = candidate.slice(separator + 1);
19
- }
20
- if (candidate === '')
21
- return null;
22
- try {
23
- return new URL(candidate.includes('://') ? candidate : `matrix://${candidate}`).hostname
24
- .replace(/\.$/, '')
25
- .toLowerCase();
26
- }
27
- catch {
28
- return null;
29
- }
30
- }
31
11
  function isRecord(value) {
32
12
  return typeof value === 'object' && value !== null && !Array.isArray(value);
33
13
  }
34
14
  /**
35
- * The oracle side of the flow-work contract: accepts invites from trusted
36
- * homeservers, executes UCAN-authorized `ixo.flow.work.invoke` events via
37
- * the declared capability handlers, and posts `ixo.flow.work.receipt`s.
15
+ * Oracle-side flow-work v2 state machine.
16
+ *
17
+ * Assignment and ready are durable state events. Invoke remains a timeline
18
+ * command. Receipt is durable state keyed by invocationId, so restart replay
19
+ * does not depend on a recent-event window.
38
20
  */
39
21
  export class FlowWorkListener {
40
22
  options;
41
- trusted;
23
+ assignments = new Map();
42
24
  active = new Set();
43
25
  completed = new Set();
26
+ pendingReceipts = new Map();
27
+ publishedReceipts = new Map();
28
+ publishing = new Set();
29
+ retryTimers = new Map();
30
+ readyTimers = new Map();
44
31
  unsubscribe = [];
32
+ started = false;
45
33
  constructor(options) {
46
34
  this.options = options;
47
- const trusted = options.trustedHomeservers
48
- .map(homeserverOf)
49
- .filter((value) => value !== null);
50
- this.trusted = new Set(trusted);
51
- if (this.trusted.size === 0) {
52
- throw new Error('flow-work has no valid trusted homeserver domains');
53
- }
54
35
  if (options.capabilities.length === 0) {
55
36
  throw new Error('flow-work has no declared capabilities');
56
37
  }
57
38
  }
39
+ /** Subscribe synchronously before any Matrix initial sync is started. */
58
40
  start() {
41
+ if (this.started)
42
+ return;
43
+ this.started = true;
59
44
  const { port, logger } = this.options;
60
45
  this.unsubscribe = [
61
46
  port.onInvite((invite) => {
@@ -69,93 +54,255 @@ export class FlowWorkListener {
69
54
  });
70
55
  }),
71
56
  ];
72
- logger.log(`[flow-work] listening capabilities: ${this.options.capabilities
57
+ logger.log(`[flow-work] listening - capabilities: ${this.options.capabilities
73
58
  .map((entry) => `${entry.can}#${entry.actionType}`)
74
59
  .join(', ')}`);
60
+ void this.bootstrap().catch((error) => {
61
+ logger.error(`[flow-work] bootstrap failed: ${message(error)}`);
62
+ });
63
+ for (const key of this.pendingReceipts.keys())
64
+ void this.publishReceipt(key);
75
65
  }
76
66
  stop() {
77
67
  for (const off of this.unsubscribe)
78
68
  off();
79
69
  this.unsubscribe = [];
70
+ for (const timer of this.retryTimers.values())
71
+ clearTimeout(timer);
72
+ for (const timer of this.readyTimers.values())
73
+ clearTimeout(timer);
74
+ this.retryTimers.clear();
75
+ this.readyTimers.clear();
76
+ this.started = false;
80
77
  }
81
- async handleInvite(invite) {
82
- const host = homeserverOf(invite.inviterUserId);
83
- if (!host || !this.trusted.has(host)) {
84
- this.options.logger.warn(`[flow-work] rejected invite to ${invite.roomId} from untrusted sender ${invite.inviterUserId}`);
85
- return;
78
+ /** Reconcile invitations and current assignment state after initial sync. */
79
+ async bootstrap() {
80
+ for (const invite of this.options.port.getPendingInvites()) {
81
+ await this.handleInvite(invite);
82
+ }
83
+ for (const roomId of this.options.port.getJoinedRoomIds()) {
84
+ await this.bootstrapRoom(roomId);
86
85
  }
86
+ }
87
+ now() {
88
+ return this.options.now?.() ?? Date.now();
89
+ }
90
+ retryMs() {
91
+ const configured = this.options.receiptRetryMs ?? 1_000;
92
+ return Number.isFinite(configured) && configured >= 0 ? configured : 1_000;
93
+ }
94
+ async handleInvite(invite) {
87
95
  await this.options.port.joinRoom(invite.roomId);
88
96
  this.options.logger.log(`[flow-work] joined ${invite.roomId} (invited by ${invite.inviterUserId})`);
97
+ await this.bootstrapRoom(invite.roomId);
98
+ }
99
+ async bootstrapRoom(roomId) {
100
+ for (const event of this.options.port.stateEvents(roomId, FLOW_WORK_ASSIGN_EVENT)) {
101
+ await this.handleAssignment(event);
102
+ }
89
103
  }
90
104
  async handleRoomEvent(event) {
91
- if (event.type !== FLOW_WORK_INVOKE_EVENT || !isRecord(event.content)) {
105
+ if (event.type === FLOW_WORK_ASSIGN_EVENT) {
106
+ await this.handleAssignment(event);
92
107
  return;
93
108
  }
109
+ if (event.type === FLOW_WORK_INVOKE_EVENT) {
110
+ await this.handleInvocation(event);
111
+ }
112
+ }
113
+ async handleAssignment(event) {
114
+ if (!isRecord(event.content))
115
+ return;
94
116
  if (event.content.audience !== this.options.oracleDid)
95
117
  return;
96
- const rawId = event.content.invocationId;
97
- if (typeof rawId !== 'string' || rawId.trim() === '')
118
+ const parsed = flowWorkAssignSchema.safeParse(event.content);
119
+ if (!parsed.success) {
120
+ this.options.logger.warn(`[flow-work] ignored malformed assignment in ${event.roomId}: ${issues(parsed.error.issues)}`);
98
121
  return;
99
- const invocationId = rawId.trim();
100
- const key = `${event.roomId}:${invocationId}`;
101
- if (this.active.has(key) || this.completed.has(key))
122
+ }
123
+ const assignmentContent = parsed.data;
124
+ const assignment = bindingOf(assignmentContent);
125
+ const selfUserId = this.options.port.getUserId();
126
+ if (event.stateKey !== assignment.invocationId ||
127
+ !event.sender ||
128
+ !selfUserId ||
129
+ assignmentContent.oracleMatrixId !== selfUserId) {
130
+ this.options.logger.warn(`[flow-work] ignored malformed assignment ${assignment.invocationId} in ${event.roomId}`);
102
131
  return;
103
- this.active.add(key);
104
- let receiptPosted = false;
132
+ }
133
+ if (assignment.deadline <= this.now()) {
134
+ this.options.logger.warn(`[flow-work] ignored expired assignment ${assignment.invocationId}`);
135
+ return;
136
+ }
137
+ const key = assignmentKey(event.roomId, assignment.invocationId);
138
+ const existing = this.assignments.get(key);
139
+ if (existing) {
140
+ if (existing.sender !== event.sender ||
141
+ assignment.attempt < existing.binding.attempt ||
142
+ (assignment.attempt === existing.binding.attempt &&
143
+ !sameFlowWorkBinding(existing.binding, assignment))) {
144
+ this.options.logger.warn(`[flow-work] ignored mutation of accepted assignment ${assignment.invocationId}`);
145
+ return;
146
+ }
147
+ if (assignment.attempt === existing.binding.attempt &&
148
+ sameFlowWorkBinding(existing.binding, assignment)) {
149
+ if (!existing.ready) {
150
+ await this.acknowledgeAssignment(event.roomId, existing);
151
+ }
152
+ return;
153
+ }
154
+ const oldTimer = this.readyTimers.get(key);
155
+ if (oldTimer)
156
+ clearTimeout(oldTimer);
157
+ this.readyTimers.delete(key);
158
+ }
159
+ const accepted = {
160
+ binding: cloneBinding(assignment),
161
+ sender: event.sender,
162
+ ready: this.hasOwnReady(event.roomId, assignment),
163
+ };
164
+ this.assignments.set(key, accepted);
165
+ if (!accepted.ready)
166
+ await this.acknowledgeAssignment(event.roomId, accepted);
167
+ }
168
+ hasOwnReady(roomId, binding) {
169
+ const self = this.options.port.getUserId();
170
+ if (!self)
171
+ return false;
172
+ return this.options.port
173
+ .stateEvents(roomId, FLOW_WORK_READY_EVENT)
174
+ .some((event) => {
175
+ if (event.stateKey !== binding.invocationId || event.sender !== self) {
176
+ return false;
177
+ }
178
+ const ready = flowWorkReadySchema.safeParse(event.content);
179
+ return ready.success && sameFlowWorkBinding(ready.data, binding);
180
+ });
181
+ }
182
+ async acknowledgeAssignment(roomId, assignment) {
183
+ const key = assignmentKey(roomId, assignment.binding.invocationId);
105
184
  try {
106
- if (this.hasExistingReceipt(event.roomId, invocationId)) {
107
- this.completed.add(key);
185
+ await this.options.port.sendStateEvent(roomId, FLOW_WORK_READY_EVENT, assignment.binding.invocationId, { ...assignment.binding, status: 'ready' });
186
+ assignment.ready = true;
187
+ const timer = this.readyTimers.get(key);
188
+ if (timer)
189
+ clearTimeout(timer);
190
+ this.readyTimers.delete(key);
191
+ }
192
+ catch (error) {
193
+ assignment.ready = false;
194
+ this.options.logger.error(`[flow-work] failed to publish ready for ${assignment.binding.invocationId}: ${message(error)}`);
195
+ if (this.started && !this.readyTimers.has(key)) {
196
+ const timer = setTimeout(() => {
197
+ this.readyTimers.delete(key);
198
+ const current = this.assignments.get(key);
199
+ if (current === assignment && !current.ready) {
200
+ void this.acknowledgeAssignment(roomId, current);
201
+ }
202
+ }, this.retryMs());
203
+ timer.unref?.();
204
+ this.readyTimers.set(key, timer);
205
+ }
206
+ }
207
+ }
208
+ async handleInvocation(event) {
209
+ if (!isRecord(event.content))
210
+ return;
211
+ if (event.content.audience !== this.options.oracleDid)
212
+ return;
213
+ const parsed = flowWorkInvokeSchema.safeParse(event.content);
214
+ if (!parsed.success) {
215
+ this.options.logger.warn(`[flow-work] ignored malformed invoke in ${event.roomId}: ${issues(parsed.error.issues)}`);
216
+ return;
217
+ }
218
+ const invoke = parsed.data;
219
+ const binding = bindingOf(invoke);
220
+ const assignment = this.assignments.get(assignmentKey(event.roomId, invoke.invocationId));
221
+ if (!assignment) {
222
+ this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: no accepted assignment`);
223
+ return;
224
+ }
225
+ if (!event.sender || event.sender !== assignment.sender) {
226
+ this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: Matrix sender does not match assignment`);
227
+ return;
228
+ }
229
+ if (!assignment.ready) {
230
+ // sendStateEvent may be accepted by Matrix even when its response is
231
+ // lost. The manager can then observe our durable ready state and send
232
+ // the invoke while the original promise left this flag false. Reconcile
233
+ // against authenticated current state before rejecting the command.
234
+ if (this.hasOwnReady(event.roomId, assignment.binding)) {
235
+ assignment.ready = true;
236
+ const readyTimer = this.readyTimers.get(assignmentKey(event.roomId, invoke.invocationId));
237
+ if (readyTimer)
238
+ clearTimeout(readyTimer);
239
+ this.readyTimers.delete(assignmentKey(event.roomId, invoke.invocationId));
240
+ }
241
+ else {
242
+ this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: ready handshake is incomplete`);
108
243
  return;
109
244
  }
110
- const parsed = flowWorkInvokeSchema.safeParse(event.content);
111
- if (!parsed.success) {
112
- await this.postFailure(event.roomId, invocationId, 'input_invalid', parsed.error.issues
113
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
114
- .join('; '));
115
- receiptPosted = true;
116
- this.completed.add(key);
245
+ }
246
+ if (!sameFlowWorkBinding(assignment.binding, binding)) {
247
+ this.options.logger.warn(`[flow-work] ignored invoke ${invoke.invocationId}: immutable assignment binding differs`);
248
+ return;
249
+ }
250
+ const key = workKey(event.roomId, binding);
251
+ if (this.completed.has(key)) {
252
+ if (this.hasOwnReceipt(event.roomId, binding))
253
+ return;
254
+ const published = this.publishedReceipts.get(key);
255
+ if (published) {
256
+ this.pendingReceipts.set(key, published);
257
+ await this.publishReceipt(key);
117
258
  return;
118
259
  }
119
- const receipt = await this.execute(parsed.data);
120
- await this.postReceipt(event.roomId, receipt);
121
- receiptPosted = true;
260
+ // Current state no longer contains our receipt. A forged state event
261
+ // must not suppress authenticated redelivery after a process restart.
262
+ this.completed.delete(key);
263
+ }
264
+ if (this.pendingReceipts.has(key)) {
265
+ await this.publishReceipt(key);
266
+ return;
267
+ }
268
+ if (this.active.has(key))
269
+ return;
270
+ if (this.hasOwnReceipt(event.roomId, binding)) {
122
271
  this.completed.add(key);
272
+ return;
123
273
  }
124
- catch (error) {
125
- const failure = error instanceof FlowWorkFailure
126
- ? error
127
- : new FlowWorkFailure('tool_error', message(error));
128
- try {
129
- await this.postFailure(event.roomId, invocationId, failure.code, failure.message);
130
- receiptPosted = true;
131
- this.completed.add(key);
274
+ this.active.add(key);
275
+ try {
276
+ let receipt;
277
+ if (binding.deadline <= this.now()) {
278
+ receipt = failureReceipt(binding, 'deadline_expired', `Invocation deadline ${binding.deadline} has passed.`);
132
279
  }
133
- catch (postError) {
134
- this.options.logger.error(`[flow-work] failed to post receipt for ${invocationId}: ${message(postError)}`);
280
+ else if (computeFlowWorkInputHash(invoke.inputs) !== binding.inputHash) {
281
+ receipt = failureReceipt(binding, 'binding_mismatch', 'Invocation inputs do not match the assignment inputHash.');
135
282
  }
283
+ else {
284
+ try {
285
+ receipt = await this.execute(invoke, binding);
286
+ }
287
+ catch (error) {
288
+ const failure = error instanceof FlowWorkFailure
289
+ ? error
290
+ : new FlowWorkFailure('tool_error', message(error));
291
+ receipt = failureReceipt(binding, failure.code, failure.message);
292
+ }
293
+ }
294
+ this.pendingReceipts.set(key, {
295
+ roomId: event.roomId,
296
+ workKey: key,
297
+ receipt,
298
+ });
136
299
  }
137
300
  finally {
138
301
  this.active.delete(key);
139
- if (!receiptPosted)
140
- this.completed.delete(key);
141
302
  }
303
+ await this.publishReceipt(key);
142
304
  }
143
- /**
144
- * Bind nb caveats to the invocation before executing. A delegation minted
145
- * for one claim schema must not be reusable with unrelated claim data:
146
- * `nb.claimSchema` requires the invocation's `inputs.claimSchemaId` to be
147
- * present and equal.
148
- */
149
- enforceCaveats(nb, invoke) {
150
- const claimSchema = nb?.claimSchema;
151
- if (typeof claimSchema !== 'string' || claimSchema === '')
152
- return;
153
- const provided = invoke.inputs.claimSchemaId;
154
- if (provided !== claimSchema) {
155
- throw new FlowWorkFailure('delegation_invalid', `Delegation is caveated to claim schema '${claimSchema}' but the invocation carries '${typeof provided === 'string' ? provided : 'none'}'.`);
156
- }
157
- }
158
- async execute(invoke) {
305
+ async execute(invoke, binding) {
159
306
  const capability = findCapability(this.options.capabilities, invoke.capability, invoke.actionType);
160
307
  if (!capability) {
161
308
  throw new FlowWorkFailure('capability_not_declared', `Capability '${invoke.capability}' with actionType '${invoke.actionType}' is not declared by this oracle.`);
@@ -164,53 +311,149 @@ export class FlowWorkListener {
164
311
  if (!validation.ok) {
165
312
  throw new FlowWorkFailure(validation.code, validation.message);
166
313
  }
167
- if (validation.capability &&
168
- validation.capability.can !== invoke.capability) {
169
- throw new FlowWorkFailure('delegation_invalid', `Delegation grants '${validation.capability.can}', not '${invoke.capability}'.`);
314
+ if (validation.invokerDid !== binding.managerDid) {
315
+ throw new FlowWorkFailure('delegation_invalid', `Delegation invoker '${validation.invokerDid}' does not match managerDid '${binding.managerDid}'.`);
316
+ }
317
+ if (!validation.capability) {
318
+ throw new FlowWorkFailure('delegation_invalid', 'Delegation validation returned no capability grant.');
319
+ }
320
+ if (validation.capability.can !== binding.capability ||
321
+ validation.capability.with !== binding.resource ||
322
+ !sameFlowWorkNb(validation.capability.nb, binding)) {
323
+ throw new FlowWorkFailure('delegation_invalid', 'Delegation can, with, or nb does not exactly match the assigned work binding.');
324
+ }
325
+ this.enforceCaveats(validation.capability.nb, invoke);
326
+ if (binding.deadline <= this.now()) {
327
+ throw new FlowWorkFailure('deadline_expired', `Invocation deadline ${binding.deadline} passed before execution.`);
170
328
  }
171
- this.enforceCaveats(validation.capability?.nb, invoke);
172
329
  const inputs = capability.inputSchema.safeParse(invoke.inputs);
173
330
  if (!inputs.success) {
174
- throw new FlowWorkFailure('input_invalid', inputs.error.issues
175
- .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
176
- .join('; '));
331
+ throw new FlowWorkFailure('input_invalid', issues(inputs.error.issues));
177
332
  }
178
333
  let output;
179
334
  try {
180
- output = await capability.handler(inputs.data);
335
+ output = await capability.handler(inputs.data, {
336
+ invocationId: invoke.invocationId,
337
+ managerDid: invoke.managerDid,
338
+ capability: invoke.capability,
339
+ actionType: invoke.actionType,
340
+ nodeId: invoke.nodeId,
341
+ resource: invoke.resource,
342
+ inputHash: invoke.inputHash,
343
+ attempt: invoke.attempt,
344
+ deadline: invoke.deadline,
345
+ contractCaveats: structuredClone(binding.contractCaveats),
346
+ audience: invoke.audience,
347
+ delegation: invoke.delegation,
348
+ });
181
349
  }
182
350
  catch (error) {
183
351
  throw new FlowWorkFailure('tool_error', message(error));
184
352
  }
353
+ if (capability.outputSchema) {
354
+ const validatedOutput = capability.outputSchema.safeParse(output);
355
+ if (!validatedOutput.success) {
356
+ throw new FlowWorkFailure('output_invalid', issues(validatedOutput.error.issues));
357
+ }
358
+ output = validatedOutput.data;
359
+ }
185
360
  return {
186
- invocationId: invoke.invocationId,
361
+ ...binding,
187
362
  status: 'success',
188
363
  output: toReceiptOutput(output),
189
364
  error: null,
190
365
  };
191
366
  }
192
- hasExistingReceipt(roomId, invocationId) {
193
- const limit = this.options.receiptScanLimit ?? 100;
367
+ /** Preserve service contract caveats after the full exact nb comparison. */
368
+ enforceCaveats(nb, invoke) {
369
+ const claimSchema = nb?.claimSchema;
370
+ if (typeof claimSchema !== 'string' || claimSchema === '')
371
+ return;
372
+ const provided = invoke.inputs.claimSchemaId;
373
+ if (provided !== claimSchema) {
374
+ throw new FlowWorkFailure('delegation_invalid', `Delegation is caveated to claim schema '${claimSchema}' but the invocation carries '${typeof provided === 'string' ? provided : 'none'}'.`);
375
+ }
376
+ }
377
+ hasOwnReceipt(roomId, binding) {
378
+ const self = this.options.port.getUserId();
379
+ if (!self)
380
+ return false;
194
381
  return this.options.port
195
- .recentEvents(roomId, limit)
196
- .some((event) => event.type === FLOW_WORK_RECEIPT_EVENT &&
197
- isRecord(event.content) &&
198
- event.content.invocationId === invocationId);
199
- }
200
- async postFailure(roomId, invocationId, code, errorMessage) {
201
- await this.postReceipt(roomId, {
202
- invocationId,
203
- status: 'failure',
204
- output: null,
205
- error: { code, message: errorMessage },
382
+ .stateEvents(roomId, FLOW_WORK_RECEIPT_EVENT)
383
+ .some((event) => {
384
+ if (event.stateKey !== binding.invocationId || event.sender !== self) {
385
+ return false;
386
+ }
387
+ const parsed = flowWorkReceiptSchema.safeParse(event.content);
388
+ return parsed.success && sameFlowWorkBinding(parsed.data, binding);
206
389
  });
207
390
  }
208
- async postReceipt(roomId, receipt) {
209
- await this.options.port.sendEvent(roomId, FLOW_WORK_RECEIPT_EVENT, {
210
- ...receipt,
211
- });
391
+ async publishReceipt(key) {
392
+ const pending = this.pendingReceipts.get(key);
393
+ if (!pending || this.publishing.has(key))
394
+ return;
395
+ this.publishing.add(key);
396
+ try {
397
+ await this.options.port.sendStateEvent(pending.roomId, FLOW_WORK_RECEIPT_EVENT, pending.receipt.invocationId, { ...pending.receipt });
398
+ this.pendingReceipts.delete(key);
399
+ this.publishedReceipts.set(key, pending);
400
+ this.completed.add(pending.workKey);
401
+ const timer = this.retryTimers.get(key);
402
+ if (timer)
403
+ clearTimeout(timer);
404
+ this.retryTimers.delete(key);
405
+ }
406
+ catch (error) {
407
+ this.options.logger.error(`[flow-work] failed to publish receipt for ${pending.receipt.invocationId}: ${message(error)}`);
408
+ this.scheduleReceiptRetry(key);
409
+ }
410
+ finally {
411
+ this.publishing.delete(key);
412
+ }
413
+ }
414
+ scheduleReceiptRetry(key) {
415
+ if (!this.started || this.retryTimers.has(key))
416
+ return;
417
+ const timer = setTimeout(() => {
418
+ this.retryTimers.delete(key);
419
+ void this.publishReceipt(key);
420
+ }, this.retryMs());
421
+ timer.unref?.();
422
+ this.retryTimers.set(key, timer);
212
423
  }
213
424
  }
425
+ function assignmentKey(roomId, invocationId) {
426
+ return `${roomId}\u0000${invocationId}`;
427
+ }
428
+ function workKey(roomId, binding) {
429
+ return `${roomId}\u0000${binding.invocationId}\u0000${binding.attempt}`;
430
+ }
431
+ function bindingOf(value) {
432
+ return cloneBinding(Object.fromEntries(FLOW_WORK_BINDING_FIELDS.map((field) => [field, value[field]])));
433
+ }
434
+ function cloneBinding(binding) {
435
+ return deepFreeze({
436
+ ...binding,
437
+ contractCaveats: structuredClone(binding.contractCaveats),
438
+ });
439
+ }
440
+ function deepFreeze(value) {
441
+ if (value && typeof value === 'object' && !Object.isFrozen(value)) {
442
+ Object.freeze(value);
443
+ for (const nested of Object.values(value)) {
444
+ deepFreeze(nested);
445
+ }
446
+ }
447
+ return value;
448
+ }
449
+ function failureReceipt(binding, code, errorMessage) {
450
+ return {
451
+ ...binding,
452
+ status: 'failure',
453
+ output: null,
454
+ error: { code, message: errorMessage },
455
+ };
456
+ }
214
457
  function toReceiptOutput(value) {
215
458
  if (value === null || value === undefined)
216
459
  return null;
@@ -220,6 +463,11 @@ function toReceiptOutput(value) {
220
463
  const serializable = JSON.parse(json);
221
464
  return isRecord(serializable) ? serializable : { value: serializable };
222
465
  }
466
+ function issues(values) {
467
+ return values
468
+ .map((issue) => `${issue.path.map(String).join('.')}: ${issue.message}`)
469
+ .join('; ');
470
+ }
223
471
  function message(error) {
224
472
  return error instanceof Error ? error.message : String(error);
225
473
  }
@@ -1 +1 @@
1
- {"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}