@oomol-lab/open-flow 0.1.0-beta.10 → 0.1.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/browser/DesignerIcon-ckcKnxxJ.js +2267 -0
  2. package/dist/browser/createResourceDialog-2pESP2wA.js +111 -0
  3. package/dist/browser/{dist-meg_oHVR.js → dist-BZ5PTFAs.js} +335 -335
  4. package/dist/browser/dist-Bmb2mZvW.js +795 -0
  5. package/dist/browser/{dist-Cc0y2Pli.js → dist-Ce71Szg7.js} +622 -622
  6. package/dist/browser/dist-DSe6KRsr.js +1224 -0
  7. package/dist/browser/{dist-Dg_VXC8f.js → dist-DY4qlXTK.js} +134 -134
  8. package/dist/browser/{esm-yhVU_KbQ.js → esm-BPZ0P6x4.js} +59 -59
  9. package/dist/browser/flow-authoring-node.d.ts +11 -4
  10. package/dist/browser/flow-authoring.d.ts +1 -1
  11. package/dist/browser/flow-authoring.js +5032 -275
  12. package/dist/browser/flow-change-schema.d.ts +6 -0
  13. package/dist/browser/flow-change.d.ts +21 -8
  14. package/dist/browser/flow-change.js +5048 -155
  15. package/dist/browser/{flowChanges-B2ttnaj9.js → flowChanges-CHPdBmZb.js} +4433 -3786
  16. package/dist/browser/{flowRunInputEditorStore-DDidwd8h.js → flowRunInputEditorStore-NPGePkvP.js} +679 -689
  17. package/dist/browser/flowWorkspace-BLGcgnHj.js +158418 -0
  18. package/dist/browser/{getPseudoElementBounds-5LArT6Xc.js → getPseudoElementBounds-Dfqo78k7.js} +691 -687
  19. package/dist/browser/host-conformance.d.ts +7 -0
  20. package/dist/browser/host-conformance.js +33 -0
  21. package/dist/browser/{languages-DgJehE1g.js → languages-i3Xmpt6S.js} +6 -15
  22. package/dist/browser/licenses.md +82 -0
  23. package/dist/browser/{markdownContent-DUfLdnUt.js → markdownContent-BawLYUjh.js} +23 -23
  24. package/dist/browser/select-Dn3vpjGC.js +6872 -0
  25. package/dist/browser/theme.css +34 -34
  26. package/dist/browser/{typeScriptSession-_TgJ_7Oq.js → typeScriptSession-BoV-FDl3.js} +257 -257
  27. package/dist/browser/waitNotificationInputs-BFbQUOyp.js +29 -0
  28. package/dist/browser/workbench-contract.d.ts +8 -2
  29. package/dist/browser/workbench.css +1 -1
  30. package/dist/browser/workbench.js +1277 -1021
  31. package/dist/browser/workbenchSelect-DzF8oik9.js +435 -0
  32. package/dist/common/control-api-conformance.d.ts +6 -0
  33. package/dist/common/control-api-conformance.js +300 -85
  34. package/dist/common/control-api.d.ts +37 -10
  35. package/dist/common/control-api.js +5199 -437
  36. package/dist/common/control-requests.d.ts +68 -0
  37. package/dist/common/control-requests.js +4913 -0
  38. package/dist/common/engine-contract.d.ts +1 -1
  39. package/dist/common/flow-encoding.d.ts +3 -1
  40. package/dist/common/flow-encoding.js +4761 -63
  41. package/dist/common/flow-graph.d.ts +6 -0
  42. package/dist/common/flow-json.d.ts +2 -0
  43. package/dist/common/flow-modules.d.ts +20 -0
  44. package/dist/common/flow-schema.d.ts +8 -0
  45. package/dist/common/flow-semantics.d.ts +6 -5
  46. package/dist/common/flow-semantics.js +14641 -9800
  47. package/dist/common/integration-trigger.d.ts +1 -0
  48. package/dist/common/mcp-conformance.d.ts +2 -0
  49. package/dist/common/mcp.d.ts +545 -0
  50. package/dist/common/mcp.js +4964 -0
  51. package/dist/common/run-events.d.ts +2 -2
  52. package/dist/common/run-events.js +8 -15
  53. package/dist/common/runtime-contract.d.ts +9 -1
  54. package/dist/common/runtime-contract.js +137 -27
  55. package/dist/common/scheduler.d.ts +11 -33
  56. package/dist/common/scheduler.js +7241 -428
  57. package/dist/index.d.ts +5 -5
  58. package/package.json +13 -1
  59. package/dist/browser/DesignerIcon-DjgOMYI5.js +0 -2065
  60. package/dist/browser/createResourceDialog-DNBueSYZ.js +0 -505
  61. package/dist/browser/dist-BMRLCebL.js +0 -1893
  62. package/dist/browser/flowWorkspace-Dr8-Hut9.js +0 -45541
  63. package/dist/browser/icons-KIOgjHpD.js +0 -730
  64. package/dist/browser/waitNotificationInputs-BPulOxYt.js +0 -26
  65. package/dist/browser/workbenchSelect-CbXrdwxW.js +0 -1375
@@ -19,7 +19,7 @@ function t(n, r) {
19
19
  }
20
20
  //#endregion
21
21
  //#region src/control/common/conformance.ts
22
- var n = "open-flow-engine/v1";
22
+ var n = "open-flow-engine/v2";
23
23
  function r(e) {
24
24
  throw Error(e);
25
25
  }
@@ -79,9 +79,9 @@ function m(e, t, n, r = "marker", i) {
79
79
  return p(e, t, n, [{
80
80
  kind: "graph.node.create",
81
81
  node: {
82
- concurrency: 1,
83
82
  inputs: {},
84
83
  kind: "value",
84
+ name: r,
85
85
  values: [{
86
86
  handle: "ready",
87
87
  jsonSchema: { type: "boolean" },
@@ -93,10 +93,21 @@ function m(e, t, n, r = "marker", i) {
93
93
  target: { kind: "flow" }
94
94
  }], i);
95
95
  }
96
- function h(e, t) {
96
+ async function h(e, t, n) {
97
+ return g(await c(await p(e, t, n, [{
98
+ kind: "graph.node.create",
99
+ node: {
100
+ kind: "manual",
101
+ name: "Start"
102
+ },
103
+ nodeId: "start",
104
+ target: { kind: "flow" }
105
+ }]), 200, "Add manual trigger"), "Manual trigger Revision");
106
+ }
107
+ function g(e, t) {
97
108
  return s(a(e.revision, `${t} revision`).revisionId, `${t} revisionId`);
98
109
  }
99
- function g(e, t, r, i, a) {
110
+ function _(e, t, r, i, a) {
100
111
  return u(e, `/v1/flows/${encodeURIComponent(t)}/revisions/${encodeURIComponent(r)}/publications`, {
101
112
  body: JSON.stringify({
102
113
  engineContract: n,
@@ -107,7 +118,7 @@ function g(e, t, r, i, a) {
107
118
  method: "POST"
108
119
  });
109
120
  }
110
- async function _(e, t, n, r) {
121
+ async function v(e, t, n, r) {
111
122
  let o = await c(t, n, r), l = s(o.operationId, `${r} operationId`);
112
123
  for (let t = 0; o.status == "pending" && t < 100; t += 1) await new Promise((e) => setTimeout(e, 10)), o = await c(await u(e, `/v1/flows/${s(o.flowId, `${r} flowId`)}/publish-operations/${l}`), 200, `${r} operation`);
113
124
  i(o.status, "succeeded", `${r} terminal status`);
@@ -117,7 +128,7 @@ async function _(e, t, n, r) {
117
128
  publication: f
118
129
  };
119
130
  }
120
- function v(e, t, n, r, i) {
131
+ function y(e, t, n, r, i) {
121
132
  return u(e, `/v1/flows/${encodeURIComponent(t)}/publications/${encodeURIComponent(n)}/rollback`, {
122
133
  body: JSON.stringify({
123
134
  expectedLivePublicationId: r,
@@ -127,10 +138,14 @@ function v(e, t, n, r, i) {
127
138
  method: "POST"
128
139
  });
129
140
  }
130
- function y(e, t, n) {
141
+ function b(e, t, n) {
131
142
  return u(e, "/v1/runs", {
132
143
  body: JSON.stringify({
133
144
  inputs: {},
145
+ trigger: {
146
+ nodeId: "start",
147
+ payload: {}
148
+ },
134
149
  publicationId: t,
135
150
  version: 1
136
151
  }),
@@ -138,7 +153,67 @@ function y(e, t, n) {
138
153
  method: "POST"
139
154
  });
140
155
  }
141
- var b = [
156
+ var x = [
157
+ {
158
+ name: "admits simultaneous retries as one Run and preserves its Trigger identity",
159
+ async verify(e) {
160
+ let t = await f(e, "Concurrent Run", "concurrent-run-flow"), r = s(t.flowId, "Flow ID"), d = await h(e, r, s(t.draftRevisionId, "Revision ID")), p = (t = {}) => u(e, `/v1/flows/${r}/revisions/${d}/runs`, {
161
+ method: "POST",
162
+ headers: { "idempotency-key": "concurrent-run" },
163
+ body: JSON.stringify({
164
+ engineContract: n,
165
+ inputs: {},
166
+ trigger: {
167
+ nodeId: "start",
168
+ payload: t
169
+ },
170
+ version: 1
171
+ })
172
+ }), m = await Promise.all([
173
+ p(),
174
+ p(),
175
+ p(),
176
+ p()
177
+ ]);
178
+ i(m.map((e) => e.status).toSorted(), [
179
+ 200,
180
+ 200,
181
+ 200,
182
+ 202
183
+ ], "One Run is admitted");
184
+ let g = await Promise.all(m.map((e) => e.json())), _ = s(a(g[0], "Run").runId, "Run ID");
185
+ for (let e of g) i(a(e, "Run").runId, _, "Concurrent Run identity");
186
+ await l(await p({ changed: !0 }), 409, "run.conflict", "Reject changed Trigger replay"), i(o((await c(await u(e, `/v1/flows/${r}/runs`), 200, "List admitted Runs")).runs, "Runs").length, 1, "No duplicate Run");
187
+ }
188
+ },
189
+ {
190
+ name: "deduplicates simultaneous creation and lost-response retries",
191
+ async verify(e) {
192
+ let t = await Promise.all(Array.from({ length: 4 }, () => d(e, "Concurrent Flow", "concurrent-create")));
193
+ i(t.map((e) => e.status).toSorted(), [
194
+ 200,
195
+ 200,
196
+ 200,
197
+ 201
198
+ ], "One creation commits");
199
+ let n = await Promise.all(t.map((e) => e.json()));
200
+ for (let e of n) i(e, n[0], "Concurrent replay identity");
201
+ i(await c(await d(e, "Concurrent Flow", "concurrent-create"), 200, "Retry lost creation response"), n[0], "Lost-response replay"), await l(await d(e, "Different Flow", "concurrent-create"), 409, "flow.conflict", "Reject changed retry");
202
+ }
203
+ },
204
+ {
205
+ name: "commits one concurrent Draft change and replays the winning key",
206
+ async verify(e) {
207
+ let t = await f(e, "Concurrent Draft", "concurrent-draft"), n = s(t.flowId, "Flow ID"), o = s(t.draftRevisionId, "Revision ID"), d = await Promise.all([m(e, n, o, "left", "concurrent-left"), m(e, n, o, "right", "concurrent-right")]);
208
+ i(d.map((e) => e.status).toSorted(), [200, 412], "One Draft CAS commits");
209
+ let p = d.findIndex((e) => e.status == 200), h = await c(d[p] ?? r("Missing winning response"), 200, "Winning Draft change");
210
+ await l(d[1 - p] ?? r("Missing losing response"), 412, "flow.revision-conflict", "Losing Draft change");
211
+ let g = p == 0 ? "left" : "right";
212
+ i(await c(await m(e, n, o, g, `concurrent-${g}`), 200, "Replay winning change"), h, "Replay precedes stale Revision check");
213
+ let _ = a(a(a((await c(await u(e, `/v1/flows/${n}/draft`), 200, "Read authoritative Draft")).content, "Content").document, "Document").graph, "Graph").nodes;
214
+ i(Object.keys(a(_, "Nodes")), [g], "No partial losing edit");
215
+ }
216
+ },
142
217
  {
143
218
  name: "manages deployment Variables with stable limits and exact-case identity",
144
219
  async verify(e) {
@@ -200,7 +275,7 @@ var b = [
200
275
  {
201
276
  name: "commits immutable Draft Revisions for one Flow",
202
277
  async verify(e) {
203
- let t = await f(e, "Draft flow", "draft-flow"), n = s(t.flowId, "Draft Flow flowId"), r = s(t.draftRevisionId, "Draft Flow revisionId"), o = await c(await m(e, n, r, "marker", "draft-change"), 200, "Change Draft"), d = h(o, "Changed Draft");
278
+ let t = await f(e, "Draft flow", "draft-flow"), n = s(t.flowId, "Draft Flow flowId"), r = s(t.draftRevisionId, "Draft Flow revisionId"), o = await c(await m(e, n, r, "marker", "draft-change"), 200, "Change Draft"), d = g(o, "Changed Draft");
204
279
  i(a(o.revision, "Changed Draft revision").parentRevisionId, r, "Changed Draft parent"), i(await c(await m(e, n, r, "marker", "draft-change"), 200, "Replay Draft change"), o, "Replayed Draft change"), await l(await m(e, n, r, "another-marker", "draft-change"), 409, "flow.conflict", "Conflicting Draft change replay"), await l(await m(e, n, d, "marker"), 400, "flow.invalid", "Duplicate Draft Node", "A Node with this ID already exists"), await l(await p(e, n, d, [{
205
280
  before: [{
206
281
  handle: "ready",
@@ -218,17 +293,47 @@ var b = [
218
293
  value: !0
219
294
  }]
220
295
  }]), 400, "flow.invalid", "No-op Draft change"), await l(await m(e, n, r, "stale"), 412, "flow.revision-conflict", "Stale Draft change"), i(a(a(a(a((await c(await u(e, `/v1/flows/${n}/revisions/${r}`), 200, "Read old Revision")).content, "Old content").document, "Old document").graph, "Old graph").nodes, "Old nodes"), {}, "Old Revision nodes"), i((await c(await u(e, `/v1/flows/${n}/draft`), 200, "Read Draft")).revisionId, d, "Draft revisionId");
221
- let g = await c(await u(e, `/v1/flows/${n}/draft/sync`), 200, "Sync Draft");
222
- i(g.kind, "snapshot", "Draft sync kind"), i(a(g.draft, "Draft snapshot").revisionId, d, "Draft snapshot revisionId");
296
+ let h = await c(await u(e, `/v1/flows/${n}/draft/sync`), 200, "Sync Draft");
297
+ i(h.kind, "snapshot", "Draft sync kind"), i(a(h.draft, "Draft snapshot").revisionId, d, "Draft snapshot revisionId");
298
+ }
299
+ },
300
+ {
301
+ name: "loads the current editor without changing Draft or Presentation",
302
+ async verify(e) {
303
+ let t = await f(e, "Editor flow", "editor-flow"), n = s(t.flowId, "Editor Flow identity"), r = await c(await m(e, n, s(t.draftRevisionId, "Editor Draft identity"), "marker"), 200, "Change editor Draft"), o = await c(await u(e, `/v1/flows/${n}/presentation`, {
304
+ method: "PUT",
305
+ body: JSON.stringify({
306
+ expectedRevision: 1,
307
+ value: { nodes: { marker: {
308
+ x: 12,
309
+ y: 24
310
+ } } },
311
+ version: 1
312
+ })
313
+ }), 200, "Update editor Presentation"), d = await c(await u(e, `/v1/flows/${n}/editor`), 200, "Read editor");
314
+ i(d.version, 1, "Editor version"), i(a(d.flow, "Editor Flow").draftRevisionId, g(r, "Editor change"), "Editor Draft head");
315
+ for (let t of [
316
+ "flow",
317
+ "draft",
318
+ "live",
319
+ "presentation"
320
+ ]) {
321
+ let r = t == "flow" ? `/v1/flows/${n}` : `/v1/flows/${n}/${t}`;
322
+ i(d[t], await c(await u(e, r), 200, `Read editor ${t}`), `Editor ${t}`);
323
+ }
324
+ i(d.presentation, o, "Reading editor preserves Presentation"), await l(await u(e, "/v1/flows/missing-editor/editor"), 404, "flow.not-found", "Read missing editor");
223
325
  }
224
326
  },
225
327
  {
226
328
  name: "keeps Presentation CAS independent from the Draft head",
227
329
  async verify(e) {
228
- let t = await f(e, "Presentation flow", "presentation-flow"), n = s(t.flowId, "Presentation Flow flowId"), r = s(t.draftRevisionId, "Presentation Flow revisionId"), a = `/v1/flows/${n}/presentation`, o = { nodes: { task: {
229
- x: 120,
230
- y: 80
231
- } } }, d = await c(await u(e, a, {
330
+ let t = await f(e, "Presentation flow", "presentation-flow"), n = s(t.flowId, "Presentation Flow flowId"), r = s(t.draftRevisionId, "Presentation Flow revisionId"), a = `/v1/flows/${n}/presentation`, o = {
331
+ edges: [],
332
+ nodes: { task: {
333
+ x: 120,
334
+ y: 80
335
+ } }
336
+ }, d = await c(await u(e, a, {
232
337
  body: JSON.stringify({
233
338
  expectedRevision: 1,
234
339
  value: o,
@@ -256,7 +361,7 @@ var b = [
256
361
  {
257
362
  name: "validates, admits, lists, and cancels one Draft Run",
258
363
  async verify(e) {
259
- let t = await f(e, "Run flow", "run-flow"), r = s(t.flowId, "Run Flow flowId"), d = s(t.draftRevisionId, "Run Flow revisionId");
364
+ let t = await f(e, "Run flow", "run-flow"), r = s(t.flowId, "Run Flow flowId"), d = await h(e, r, s(t.draftRevisionId, "Run Flow revisionId"));
260
365
  i((await c(await u(e, `/v1/flows/${r}/revisions/${d}/check`, {
261
366
  body: JSON.stringify({
262
367
  engineContract: n,
@@ -264,31 +369,72 @@ var b = [
264
369
  }),
265
370
  method: "POST"
266
371
  }), 200, "Check Flow")).valid, !0, "Flow validity");
267
- let p = `/v1/flows/${r}/revisions/${d}/runs`, m = () => u(e, p, {
372
+ let p = `/v1/flows/${r}/revisions/${d}/runs`;
373
+ for (let t of [
374
+ void 0,
375
+ {
376
+ nodeId: "missing",
377
+ payload: {}
378
+ },
379
+ {
380
+ nodeId: "start",
381
+ payload: { unexpected: !0 }
382
+ }
383
+ ]) await l(await u(e, p, {
384
+ body: JSON.stringify({
385
+ engineContract: n,
386
+ inputs: {},
387
+ trigger: t,
388
+ version: 1
389
+ }),
390
+ headers: { "idempotency-key": `invalid-entry-${JSON.stringify(t)}` },
391
+ method: "POST"
392
+ }), 400, "run.invalid", "Reject invalid start node or payload");
393
+ let m = () => u(e, p, {
394
+ body: JSON.stringify({
395
+ engineContract: n,
396
+ inputs: {},
397
+ trigger: {
398
+ nodeId: "start",
399
+ payload: {}
400
+ },
401
+ version: 1
402
+ }),
403
+ headers: { "idempotency-key": "draft-run" },
404
+ method: "POST"
405
+ }), g = await c(await m(), 202, "Create Draft Run"), _ = s(g.runId, "Draft Run runId");
406
+ i(await c(await m(), 200, "Replay Draft Run"), g, "Replayed Draft Run"), await l(await u(e, p, {
268
407
  body: JSON.stringify({
269
408
  engineContract: n,
270
409
  inputs: {},
410
+ trigger: {
411
+ nodeId: "another",
412
+ payload: {}
413
+ },
271
414
  version: 1
272
415
  }),
273
416
  headers: { "idempotency-key": "draft-run" },
274
417
  method: "POST"
275
- }), h = await c(await m(), 202, "Create Draft Run"), g = s(h.runId, "Draft Run runId");
276
- i(await c(await m(), 200, "Replay Draft Run"), h, "Replayed Draft Run"), await l(await u(e, `/v1/runs/${g}/result`), 409, "run.not-terminal", "Read queued Run result");
277
- let _ = s((await c(await u(e, p, {
418
+ }), 409, "run.conflict", "Changing the entry conflicts with the original Run request"), await l(await u(e, `/v1/runs/${_}/result`), 409, "run.not-terminal", "Read queued Run result");
419
+ let v = s((await c(await u(e, p, {
278
420
  body: JSON.stringify({
279
421
  engineContract: n,
280
422
  inputs: {},
423
+ trigger: {
424
+ nodeId: "start",
425
+ payload: {}
426
+ },
281
427
  version: 1
282
428
  }),
283
429
  headers: { "idempotency-key": "draft-run-second" },
284
430
  method: "POST"
285
- }), 202, "Create second Draft Run")).runId, "Second Draft Run"), v = await c(await u(e, `/v1/flows/${r}/runs?limit=1`), 200, "List Runs");
286
- i(o(v.runs, "Runs").map((e) => a(e, "Run").runId), [_], "Listed Runs");
287
- let y = s(v.nextCursor, "Run cursor");
288
- i(o((await c(await u(e, `/v1/flows/${r}/runs?limit=1&cursor=${encodeURIComponent(y)}`), 200, "List next Runs")).runs, "Next Runs").map((e) => a(e, "Run").runId), [g], "Listed next Runs"), i((await c(await u(e, `/v1/runs/${g}/cancel`, {
431
+ }), 202, "Create second Draft Run")).runId, "Second Draft Run"), y = await c(await u(e, `/v1/flows/${r}/runs?limit=1`), 200, "List Runs");
432
+ i(o(y.runs, "Runs").map((e) => a(e, "Run").runId), [v], "Listed Runs");
433
+ let b = s(y.nextCursor, "Run cursor");
434
+ i(o((await c(await u(e, `/v1/flows/${r}/runs?limit=1&cursor=${encodeURIComponent(b)}`), 200, "List next Runs")).runs, "Next Runs").map((e) => a(e, "Run").runId), [_], "Listed next Runs"), await l(await u(e, `/v1/flows/${s((await f(e, "Other Run flow", "other-run-flow")).flowId, "Other Run Flow flowId")}/runs?limit=1&cursor=${encodeURIComponent(b)}`), 400, "page.invalid-cursor", "Reject Run cursor from another Flow"), i((await c(await u(e, `/v1/runs/${_}/cancel`, {
289
435
  body: JSON.stringify({ version: 1 }),
290
436
  method: "POST"
291
- }), 200, "Cancel Run")).status, "canceled", "Canceled Run status"), i((await c(await u(e, `/v1/runs/${g}/result`), 200, "Read canceled Run result")).status, "canceled", "Canceled Run result"), i((await c(await u(e, `/v1/runs/${g}/events`), 200, "Read canceled Run events")).done, !0, "Canceled Run events"), i((await c(await u(e, `/v1/runs/${_}/cancel`, {
437
+ }), 200, "Cancel Run")).status, "canceled", "Canceled Run status"), i((await c(await u(e, `/v1/runs/${_}/result`), 200, "Read canceled Run result")).status, "canceled", "Canceled Run result"), i((await c(await u(e, `/v1/runs/${_}/events`), 200, "Read canceled Run events")).done, !0, "Canceled Run events"), i((await c(await u(e, `/v1/runs/${v}/cancel`, {
292
438
  body: JSON.stringify({ version: 1 }),
293
439
  method: "POST"
294
440
  }), 200, "Cancel second Draft Run")).status, "canceled", "Second canceled Run status");
@@ -298,11 +444,10 @@ var b = [
298
444
  name: "pauses, resolves, resumes, and cancels waiting Draft Runs",
299
445
  runtime: !0,
300
446
  async verify(e) {
301
- let t = await f(e, "Wait flow", "wait-flow"), d = s(t.flowId, "Wait Flow flowId"), m = `/v1/flows/${d}/revisions/${h(await c(await p(e, d, s(t.draftRevisionId, "Wait Flow revisionId"), [{
447
+ let t = await f(e, "Wait flow", "wait-flow"), d = s(t.flowId, "Wait Flow flowId"), m = `/v1/flows/${d}/revisions/${g(await c(await p(e, d, await h(e, d, s(t.draftRevisionId, "Wait Flow revisionId")), [{
302
448
  kind: "graph.node.create",
303
449
  node: {
304
450
  actions: ["approve", "reject"],
305
- concurrency: 1,
306
451
  input: {
307
452
  handle: "value",
308
453
  jsonSchema: {},
@@ -314,46 +459,58 @@ var b = [
314
459
  value: { request: 1 }
315
460
  } },
316
461
  kind: "wait",
462
+ name: "Approval",
317
463
  prompt: "Approve request 1?"
318
464
  },
319
465
  nodeId: "approval",
320
466
  target: { kind: "flow" }
321
- }]), 200, "Create Wait"), "Wait Revision")}/runs`, g = async (t, r) => c(await u(e, m, {
467
+ }, {
468
+ kind: "graph.edge.connect",
469
+ edge: {
470
+ source: "start",
471
+ target: "approval"
472
+ },
473
+ target: { kind: "flow" }
474
+ }]), 200, "Create Wait"), "Wait Revision")}/runs`, _ = async (t, r) => c(await u(e, m, {
322
475
  body: JSON.stringify({
323
476
  engineContract: n,
324
477
  inputs: {},
478
+ trigger: {
479
+ nodeId: "start",
480
+ payload: {}
481
+ },
325
482
  version: 1
326
483
  }),
327
484
  headers: { "idempotency-key": t },
328
485
  method: "POST"
329
- }), 202, r), _ = await g("wait-run", "Create Wait Run"), v = s(_.runId, "Wait Run runId"), y = _;
330
- for (let t = 0; y.status != "waiting" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), y = await c(await u(e, `/v1/runs/${v}`), 200, "Read Wait Run");
331
- i(y.status, "waiting", "Wait Run status");
332
- let b = a(y.waiting, "Active Wait");
333
- i(b.actions, ["approve", "reject"], "Wait actions"), i(b.nodeId, "approval", "Wait node"), i(b.prompt, "Approve request 1?", "Wait prompt"), s(b.expiresAt, "Wait expiry"), s(b.waitingSince, "Wait start");
334
- let x = s(b.waitId, "Wait id");
335
- i(o((await c(await u(e, `/v1/flows/${d}/runs?status=waiting`), 200, "List waiting Runs")).runs, "Waiting Runs").map((e) => a(e, "Waiting Run").runId), [v], "Waiting Run list");
336
- let S = await c(await u(e, `/v1/runs/${v}/events`), 200, "Read waiting Run events");
337
- i(S.done, !1, "Waiting events done"), o(S.events, "Waiting events").some((e) => a(e, "Waiting event").kind == "run.waiting") || r("Waiting Run must contain run.waiting."), await l(await u(e, `/v1/runs/${v}/result`), 409, "run.not-terminal", "Read waiting Run result");
338
- let C = `/v1/runs/${v}/waits/${x}/resolve`, w = (t) => u(e, C, {
486
+ }), 202, r), v = await _("wait-run", "Create Wait Run"), y = s(v.runId, "Wait Run runId"), b = v;
487
+ for (let t = 0; b.status != "waiting" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), b = await c(await u(e, `/v1/runs/${y}`), 200, "Read Wait Run");
488
+ i(b.status, "waiting", "Wait Run status");
489
+ let x = a(b.waiting, "Active Wait");
490
+ i(x.actions, ["approve", "reject"], "Wait actions"), i(x.nodeId, "approval", "Wait node"), i(x.prompt, "Approve request 1?", "Wait prompt"), s(x.expiresAt, "Wait expiry"), s(x.waitingSince, "Wait start");
491
+ let S = s(x.waitId, "Wait id");
492
+ i(o((await c(await u(e, `/v1/flows/${d}/runs?status=waiting`), 200, "List waiting Runs")).runs, "Waiting Runs").map((e) => a(e, "Waiting Run").runId), [y], "Waiting Run list");
493
+ let C = await c(await u(e, `/v1/runs/${y}/events`), 200, "Read waiting Run events");
494
+ i(C.done, !1, "Waiting events done"), o(C.events, "Waiting events").some((e) => a(e, "Waiting event").kind == "run.waiting") || r("Waiting Run must contain run.waiting."), await l(await u(e, `/v1/runs/${y}/result`), 409, "run.not-terminal", "Read waiting Run result");
495
+ let w = `/v1/runs/${y}/waits/${S}/resolve`, T = (t) => u(e, w, {
339
496
  body: JSON.stringify({
340
497
  action: t,
341
498
  version: 1
342
499
  }),
343
500
  method: "POST"
344
501
  });
345
- await l(await w("continue"), 400, "run.invalid", "Reject unsupported Wait action");
346
- let T = await c(await w("approve"), 200, "Approve Wait");
347
- i(T.action, "approve", "Approved action"), i(T.resolutionAccepted, !0, "Approved resolution"), i(T.status, "queued", "Resolved Run status"), s(T.resolvedAt, "Wait resolution time");
348
- let E = await c(await w("reject"), 200, "Reject resolved Wait");
349
- i(E.action, "approve", "Winning action"), i(E.resolutionAccepted, !1, "Competing resolution");
350
- for (let t = 0; y.status != "completed" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), y = await c(await u(e, `/v1/runs/${v}`), 200, "Read resumed Run");
351
- i(y.status, "completed", "Resumed Run status"), i(y.waiting, void 0, "Completed Wait projection");
352
- let D = await c(await w("approve"), 200, "Replay approved Wait");
353
- i(D.resolutionAccepted, !0, "Replayed resolution"), i(D.status, "completed", "Replayed terminal status"), i(o((await c(await u(e, `/v1/runs/${v}/events`), 200, "Read resumed Run events")).events, "Completed events").filter((e) => a(e, "Completed event").kind == "run.resolved").length, 1, "Resolved event count");
354
- let O = await g("wait-run-cancel", "Create cancelable Wait Run"), k = s(O.runId, "Cancelable Wait Run id"), A = O;
355
- for (let t = 0; A.status != "waiting" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), A = await c(await u(e, `/v1/runs/${k}`), 200, "Read cancelable Wait Run");
356
- i(A.status, "waiting", "Cancelable Wait status"), i((await c(await u(e, `/v1/runs/${k}/cancel`, {
502
+ await l(await T("continue"), 400, "run.invalid", "Reject unsupported Wait action");
503
+ let E = await c(await T("approve"), 200, "Approve Wait");
504
+ i(E.action, "approve", "Approved action"), i(E.resolutionAccepted, !0, "Approved resolution"), i(E.status, "queued", "Resolved Run status"), s(E.resolvedAt, "Wait resolution time");
505
+ let D = await c(await T("reject"), 200, "Reject resolved Wait");
506
+ i(D.action, "approve", "Winning action"), i(D.resolutionAccepted, !1, "Competing resolution");
507
+ for (let t = 0; b.status != "completed" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), b = await c(await u(e, `/v1/runs/${y}`), 200, "Read resumed Run");
508
+ i(b.status, "completed", "Resumed Run status"), i(b.waiting, void 0, "Completed Wait projection");
509
+ let O = await c(await T("approve"), 200, "Replay approved Wait");
510
+ i(O.resolutionAccepted, !0, "Replayed resolution"), i(O.status, "completed", "Replayed terminal status"), i(o((await c(await u(e, `/v1/runs/${y}/events`), 200, "Read resumed Run events")).events, "Completed events").filter((e) => a(e, "Completed event").kind == "run.resolved").length, 1, "Resolved event count");
511
+ let k = await _("wait-run-cancel", "Create cancelable Wait Run"), A = s(k.runId, "Cancelable Wait Run id"), j = k;
512
+ for (let t = 0; j.status != "waiting" && t < 200; t += 1) await new Promise((e) => setTimeout(e, 10)), j = await c(await u(e, `/v1/runs/${A}`), 200, "Read cancelable Wait Run");
513
+ i(j.status, "waiting", "Cancelable Wait status"), i((await c(await u(e, `/v1/runs/${A}/cancel`, {
357
514
  body: JSON.stringify({ version: 1 }),
358
515
  method: "POST"
359
516
  }), 200, "Cancel waiting Run")).status, "canceled", "Canceled waiting Run status");
@@ -392,6 +549,10 @@ var b = [
392
549
  body: JSON.stringify({
393
550
  engineContract: n,
394
551
  inputs: {},
552
+ trigger: {
553
+ nodeId: "start",
554
+ payload: {}
555
+ },
395
556
  version: 1
396
557
  }),
397
558
  headers: { "idempotency-key": r },
@@ -400,35 +561,74 @@ var b = [
400
561
  await l(await p(c, "unsupported-engine/v1", "unsupported-run"), 409, "engine.unsupported", "Run unsupported Engine"), await l(await p(r, n, "missing-revision-run"), 404, "flow.not-found", "Run missing Revision");
401
562
  }
402
563
  }
403
- ], x = [{
404
- name: "publishes one immutable Flow with idempotent Live CAS",
405
- async verify(e) {
406
- let t = await f(e, "Publication flow", "publication-flow"), n = s(t.flowId, "Publication Flow flowId"), r = s(t.draftRevisionId, "Publication Flow revisionId");
407
- i((await c(await u(e, `/v1/flows/${n}/live`), 200, "Read Live")).status, "not-published", "Initial Live status");
408
- let a = () => g(e, n, r, null, "publication-first"), o = await _(e, await a(), 202, "Publish Flow"), d = o.publication, p = s(d.publicationId, "Publication id");
409
- i(await c(await a(), 202, "Replay Publish"), o.operation, "Replayed Publish operation"), await l(await g(e, n, r, p, "publication-first"), 409, "publication.conflict", "Conflicting replay"), i((await c(await u(e, `/v1/flows/${n}/live`), 200, "Read published Live")).publication, d, "Live Publication");
410
- let m = await c(await u(e, `/v1/flows/${n}/publications?includeTotal=true`), 200, "List Publications");
411
- i(m.publications, [d], "Publication history"), i(m.total, 1, "Publication total"), await l(await u(e, `/v1/flows/${n}/revisions/${r}/publications`, {
412
- body: JSON.stringify({
413
- engineContract: "unsupported-engine/v1",
414
- expectedLivePublicationId: p,
415
- version: 1
416
- }),
417
- headers: { "idempotency-key": "unsupported-publication" },
418
- method: "POST"
419
- }), 409, "engine.unsupported", "Publish unsupported Engine"), await l(await g(e, n, "00000000-0000-7000-8000-000000000002", p, "missing-revision-publication"), 404, "flow.not-found", "Publish missing Revision"), await l(await v(e, n, "00000000-0000-7000-8000-000000000004", p, "missing-rollback"), 404, "publication.not-found", "Rollback missing Publication"), await l(await y(e, "00000000-0000-7000-8000-000000000004", "missing-publication-run"), 404, "publication.not-found", "Run missing Publication");
420
- }
421
- }, {
422
- name: "rolls back immutable history and fixes a Live Run target",
423
- async verify(e) {
424
- let t = await f(e, "Rollback flow", "rollback-flow"), n = s(t.flowId, "Rollback Flow flowId"), r = s(t.draftRevisionId, "Rollback Flow revisionId"), a = (await _(e, await g(e, n, r, null, "publish-first"), 202, "Publish first Revision")).publication, o = s(a.publicationId, "First Publication"), d = (await _(e, await g(e, n, h(await c(await m(e, n, r), 200, "Change Draft"), "Second Revision"), o, "publish-second"), 202, "Publish second Revision")).publication, p = s(d.publicationId, "Second Publication");
425
- await l(await y(e, o, "stale-live-run"), 412, "live.conflict", "Run stale Publication");
426
- let b = () => v(e, n, o, p, "rollback-first"), x = await c(await b(), 201, "Rollback Flow"), S = s(x.publicationId, "Rollback Publication");
427
- i(x.operation, "rollback", "Rollback operation"), i(x.sourcePublicationId, o, "Rollback source"), i(await c(await b(), 200, "Replay Rollback"), x, "Replayed Rollback");
428
- let C = await c(await y(e, S, "rollback-run"), 202, "Create Live Run");
429
- i(C.flowId, n, "Live Run flowId"), i(C.revisionId, r, "Live Run revisionId"), await c(await u(e, `/v1/flows/${n}`, { method: "DELETE" }), 202, "Retire Flow"), await l(await y(e, S, "retired-run"), 409, "flow.busy", "Run retired Flow");
564
+ ], S = [
565
+ {
566
+ name: "controls Live admission independently from publishing and Draft testing",
567
+ async verify(e) {
568
+ let t = await f(e, "Enabled flow", "enabled-flow"), r = s(t.flowId, "Flow id"), o = await h(e, r, s(t.draftRevisionId, "Draft id")), d = (t, n) => u(e, `/v1/flows/${r}/enabled`, {
569
+ method: "PUT",
570
+ body: JSON.stringify({
571
+ enabled: t,
572
+ expectedPublicationId: n,
573
+ version: 1
574
+ })
575
+ });
576
+ await l(await d(!0, "missing"), 409, "flow.conflict", "Cannot enable unpublished Flow");
577
+ let p = s((await v(e, await _(e, r, o, null, "enable-first"), 202, "Publish")).publication.publicationId, "Publication id"), m = await c(await d(!1, p), 200, "Disable");
578
+ i(m.live, {
579
+ enabled: !1,
580
+ publicationId: p,
581
+ revisionId: o
582
+ }, "Disabled summary"), i((await c(await u(e, "/v1/flows"), 200, "List disabled Flow")).flows, [m], "List includes Live state"), i((await c(await u(e, `/v1/flows/${r}/live`), 200, "Disabled Live")).status, "suspended", "Disabled Live status"), await l(await b(e, p, "disabled-run"), 412, "live.conflict", "Disabled Live rejects Run"), await c(await u(e, `/v1/flows/${r}/revisions/${o}/runs`, {
583
+ method: "POST",
584
+ headers: { "idempotency-key": "disabled-draft" },
585
+ body: JSON.stringify({
586
+ engineContract: n,
587
+ inputs: {},
588
+ trigger: {
589
+ nodeId: "start",
590
+ payload: {}
591
+ },
592
+ version: 1
593
+ })
594
+ }), 202, "Disabled Flow permits Draft test");
595
+ let g = s((await v(e, await _(e, r, o, p, "enable-next"), 202, "Publish disabled Flow")).publication.publicationId, "Next Publication id");
596
+ i(a((await c(await u(e, `/v1/flows/${r}`), 200, "Read Flow")).live, "Live").enabled, !1, "Publish preserves disabled state"), await l(await d(!0, p), 409, "flow.conflict", "Stale switch rejects"), await c(await d(!0, g), 200, "Enable"), await c(await b(e, g, "enabled-run"), 202, "Enabled Live accepts Run");
597
+ }
598
+ },
599
+ {
600
+ name: "publishes one immutable Flow with idempotent Live CAS",
601
+ async verify(e) {
602
+ let t = await f(e, "Publication flow", "publication-flow"), n = s(t.flowId, "Publication Flow flowId"), r = await h(e, n, s(t.draftRevisionId, "Publication Flow revisionId"));
603
+ i((await c(await u(e, `/v1/flows/${n}/live`), 200, "Read Live")).status, "not-published", "Initial Live status");
604
+ let a = () => _(e, n, r, null, "publication-first"), o = await v(e, await a(), 202, "Publish Flow"), d = o.publication, p = s(d.publicationId, "Publication id");
605
+ i(await c(await a(), 202, "Replay Publish"), o.operation, "Replayed Publish operation"), await l(await _(e, n, r, p, "publication-first"), 409, "publication.conflict", "Conflicting replay");
606
+ let m = await c(await u(e, `/v1/flows/${n}/live`), 200, "Read published Live");
607
+ i(m.publication, d, "Live Publication"), i((await c(await u(e, `/v1/flows/${n}/editor`), 200, "Read published editor")).live, m, "Published editor Live projection");
608
+ let g = await c(await u(e, `/v1/flows/${n}/publications?includeTotal=true`), 200, "List Publications");
609
+ i(g.publications, [d], "Publication history"), i(g.total, 1, "Publication total"), await l(await u(e, `/v1/flows/${n}/revisions/${r}/publications`, {
610
+ body: JSON.stringify({
611
+ engineContract: "unsupported-engine/v1",
612
+ expectedLivePublicationId: p,
613
+ version: 1
614
+ }),
615
+ headers: { "idempotency-key": "unsupported-publication" },
616
+ method: "POST"
617
+ }), 409, "engine.unsupported", "Publish unsupported Engine"), await l(await _(e, n, "00000000-0000-7000-8000-000000000002", p, "missing-revision-publication"), 404, "flow.not-found", "Publish missing Revision"), await l(await y(e, n, "00000000-0000-7000-8000-000000000004", p, "missing-rollback"), 404, "publication.not-found", "Rollback missing Publication"), await l(await b(e, "00000000-0000-7000-8000-000000000004", "missing-publication-run"), 404, "publication.not-found", "Run missing Publication");
618
+ }
619
+ },
620
+ {
621
+ name: "rolls back immutable history and fixes a Live Run target",
622
+ async verify(e) {
623
+ let t = await f(e, "Rollback flow", "rollback-flow"), n = s(t.flowId, "Rollback Flow flowId"), r = await h(e, n, s(t.draftRevisionId, "Rollback Flow revisionId")), a = (await v(e, await _(e, n, r, null, "publish-first"), 202, "Publish first Revision")).publication, o = s(a.publicationId, "First Publication"), d = (await v(e, await _(e, n, g(await c(await m(e, n, r), 200, "Change Draft"), "Second Revision"), o, "publish-second"), 202, "Publish second Revision")).publication, p = s(d.publicationId, "Second Publication");
624
+ await l(await b(e, o, "stale-live-run"), 412, "live.conflict", "Run stale Publication");
625
+ let x = () => y(e, n, o, p, "rollback-first"), S = await c(await x(), 201, "Rollback Flow"), C = s(S.publicationId, "Rollback Publication");
626
+ i(S.operation, "rollback", "Rollback operation"), i(S.sourcePublicationId, o, "Rollback source"), i(await c(await x(), 200, "Replay Rollback"), S, "Replayed Rollback");
627
+ let w = await c(await b(e, C, "rollback-run"), 202, "Create Live Run");
628
+ i(w.flowId, n, "Live Run flowId"), i(w.revisionId, r, "Live Run revisionId"), await c(await u(e, `/v1/flows/${n}`, { method: "DELETE" }), 202, "Retire Flow"), await l(await b(e, C, "retired-run"), 409, "flow.busy", "Run retired Flow");
629
+ }
430
630
  }
431
- }], S = [{
631
+ ], C = [{
432
632
  name: "exposes one deployment-scoped Trigger Key catalog",
433
633
  async verify(e) {
434
634
  let t = await c(await u(e, "/v1/trigger-keys"), 200, "List Trigger Keys"), n = await c(await u(e, "/v1/trigger-keys/catalog"), 200, "List Trigger definitions"), r = o(t.keys, "Trigger Keys").map((e) => a(e, "Trigger Key")), d = o(n.definitions, "Trigger definitions").map((e) => a(e, "Trigger definition"));
@@ -442,7 +642,7 @@ var b = [
442
642
  }, {
443
643
  name: "operates and retires one Live Trigger binding",
444
644
  async verify(e) {
445
- let t = await f(e, "Trigger flow", "trigger-flow"), n = s(t.flowId, "Trigger Flow flowId"), r = h(await c(await p(e, n, s(t.draftRevisionId, "Trigger Flow revisionId"), [{
645
+ let t = await f(e, "Trigger flow", "trigger-flow"), n = s(t.flowId, "Trigger Flow flowId"), r = g(await c(await p(e, n, s(t.draftRevisionId, "Trigger Flow revisionId"), [{
446
646
  kind: "graph.node.create",
447
647
  node: {
448
648
  cronTimes: [{
@@ -464,20 +664,29 @@ var b = [
464
664
  },
465
665
  nodeId: "webhook",
466
666
  target: { kind: "flow" }
467
- }]), 200, "Create Trigger nodes"), "Trigger Revision"), l = (await _(e, await g(e, n, r, null, "trigger-publication"), 202, "Publish Trigger Flow")).publication, d = s(l.publicationId, "Trigger Publication"), m = `/v1/flows/${n}/triggers`, v = o((await c(await u(e, m), 200, "List Trigger bindings")).bindings, "Trigger bindings").map((e) => a(e, "Trigger binding"));
468
- i(v.map((e) => e.triggerNodeId), ["cron", "webhook"], "Trigger binding order");
469
- for (let e of v) i(e.currentPublicationId, d, "Trigger Publication");
667
+ }]), 200, "Create Trigger nodes"), "Trigger Revision"), l = (await v(e, await _(e, n, r, null, "trigger-publication"), 202, "Publish Trigger Flow")).publication, d = s(l.publicationId, "Trigger Publication"), m = `/v1/flows/${n}/triggers`, h = o((await c(await u(e, m), 200, "List Trigger bindings")).bindings, "Trigger bindings").map((e) => a(e, "Trigger binding"));
668
+ i(h.map((e) => e.triggerNodeId), ["cron", "webhook"], "Trigger binding order");
669
+ for (let e of h) i(e.currentPublicationId, d, "Trigger Publication");
470
670
  let y = `${m}/webhook`, b = s(a((await c(await u(e, y), 200, "Read Webhook")).binding, "Webhook").endpointUrl, "Webhook endpoint"), x = (t) => u(e, `${y}/${t}`, {
471
671
  body: JSON.stringify({ version: 1 }),
472
672
  method: "POST"
473
673
  });
474
- i((await c(await x("pause"), 200, "Pause Webhook")).operatorState, "paused", "Paused state"), i((await e.request(new Request(b, { method: "POST" }))).status, 404, "Paused callback"), i((await c(await x("resume"), 200, "Resume Webhook")).operatorState, "active", "Resumed state"), i((await e.request(new Request(b, { method: "POST" }))).status, 200, "Resumed callback"), await _(e, await g(e, n, h(await c(await p(e, n, r, [{
674
+ i((await c(await x("pause"), 200, "Pause Webhook")).operatorState, "paused", "Paused state"), i((await e.request(new Request(b, { method: "POST" }))).status, 404, "Paused callback"), i((await c(await x("resume"), 200, "Resume Webhook")).operatorState, "active", "Resumed state"), i((await e.request(new Request(b, { method: "POST" }))).status, 200, "Resumed callback");
675
+ let S = (t) => u(e, `/v1/flows/${n}/enabled`, {
676
+ method: "PUT",
677
+ body: JSON.stringify({
678
+ enabled: t,
679
+ expectedPublicationId: d,
680
+ version: 1
681
+ })
682
+ });
683
+ await c(await S(!1), 200, "Disable Trigger Flow"), i((await e.request(new Request(b, { method: "POST" }))).status, 404, "Disabled Flow blocks callback"), await c(await x("pause"), 200, "Pause binding while Flow disabled"), await c(await S(!0), 200, "Enable Trigger Flow"), i((await e.request(new Request(b, { method: "POST" }))).status, 404, "Enabling preserves binding pause"), await c(await x("resume"), 200, "Resume binding after enabling Flow"), i((await e.request(new Request(b, { method: "POST" }))).status, 200, "Enabled Flow permits callback"), await v(e, await _(e, n, g(await c(await p(e, n, r, [{
475
684
  kind: "graph.node.delete",
476
685
  nodeId: "webhook",
477
686
  target: { kind: "flow" }
478
687
  }]), 200, "Delete Webhook"), "Retired Trigger Revision"), d, "retire-trigger"), 202, "Publish retired Trigger"), i(a((await c(await u(e, y), 200, "Read retired Webhook")).binding, "Retired Webhook").currentPublicationId, void 0, "Retired Publication");
479
688
  }
480
- }], C = [{
689
+ }], w = [{
481
690
  name: "projects the deployment Connector catalog and authorized Connections",
482
691
  async verify(e) {
483
692
  let t = o((await c(await u(e, "/v1/connector/providers"), 200, "List Connector Providers")).providers, "Connector Providers").map((e) => a(e, "Connector Provider")), n = o((await c(await u(e, "/v1/connector/actions"), 200, "List Connector Actions")).actions, "Connector Actions").map((e) => a(e, "Connector Action"));
@@ -497,6 +706,12 @@ var b = [
497
706
  async verify(e) {
498
707
  await l(await u(e, "/v1/connector/actions?service=mail&q=send"), 400, "flow.invalid", "Conflicting Connector query"), await l(await u(e, "/v1/connector/actions?q=%20%20"), 400, "flow.invalid", "Empty Connector query"), await l(await u(e, `/v1/connector/connections/${"a".repeat(257)}`), 400, "flow.invalid", "Oversized Connector service"), await l(await u(e, "/v1/connector/actions/conformance.missing"), 404, "connector.action-not-found", "Missing Connector Action");
499
708
  }
709
+ }], T = [{
710
+ name: "preserves committed mutations and idempotency receipts after restart",
711
+ async verify(e) {
712
+ let t = await f(e, "Recovery", "recovery-create"), n = s(t.flowId, "Flow ID"), r = s(t.draftRevisionId, "Revision ID"), o = await c(await m(e, n, r, "marker", "recovery-change"), 200, "Commit change");
713
+ await e.restart(), i((await c(await d(e, "Recovery", "recovery-create"), 200, "Replay creation after restart")).flowId, n, "Durable creation identity"), i(await c(await m(e, n, r, "marker", "recovery-change"), 200, "Replay change after restart"), o, "Durable change receipt"), i((await c(await u(e, `/v1/flows/${n}/draft`), 200, "Recovered Draft")).revisionId, a(o.revision, "Revision").revisionId, "Recovered head");
714
+ }
500
715
  }];
501
716
  //#endregion
502
- export { C as connectorControlApiConformanceCases, b as controlApiConformanceCases, x as publicationControlApiConformanceCases, S as triggerControlApiConformanceCases };
717
+ export { w as connectorControlApiConformanceCases, x as controlApiConformanceCases, T as controlRecoveryConformanceCases, S as publicationControlApiConformanceCases, C as triggerControlApiConformanceCases };