@workflow/world-testing 5.0.0-beta.5 → 5.0.0-beta.51

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 (43) hide show
  1. package/dist/.well-known/workflow/v1/__step_registrations.mjs +41068 -0
  2. package/dist/.well-known/workflow/v1/flow.mjs +122562 -65647
  3. package/dist/.well-known/workflow/v1/manifest.json +1450 -180
  4. package/dist/src/addition.mjs +2 -2
  5. package/dist/src/errors.mjs +2 -2
  6. package/dist/src/event-ids.d.mts +16 -0
  7. package/dist/src/event-ids.d.mts.map +1 -0
  8. package/dist/src/event-ids.mjs +60 -0
  9. package/dist/src/event-limit.d.mts +2 -0
  10. package/dist/src/event-limit.d.mts.map +1 -0
  11. package/dist/src/event-limit.mjs +29 -0
  12. package/dist/src/hooks.mjs +2 -2
  13. package/dist/src/idempotency.mjs +2 -2
  14. package/dist/src/index.d.mts.map +1 -1
  15. package/dist/src/index.mjs +5 -1
  16. package/dist/src/inline-batches-debug.mjs +2 -2
  17. package/dist/src/inline-execution.d.mts.map +1 -1
  18. package/dist/src/inline-execution.mjs +22 -2
  19. package/dist/src/jsonlines.mjs +1 -1
  20. package/dist/src/lineage.d.mts +8 -0
  21. package/dist/src/lineage.d.mts.map +1 -0
  22. package/dist/src/lineage.mjs +48 -0
  23. package/dist/src/null-byte.mjs +2 -2
  24. package/dist/src/server.mjs +18 -10
  25. package/dist/src/util.d.mts +26 -6
  26. package/dist/src/util.d.mts.map +1 -1
  27. package/dist/src/util.mjs +54 -6
  28. package/dist/workflows/hooks.d.ts.map +1 -1
  29. package/dist/workflows/hooks.js +3 -3
  30. package/package.json +14 -13
  31. package/dist/.well-known/workflow/v1/step.mjs +0 -26802
  32. package/dist/src/addition.mjs.map +0 -1
  33. package/dist/src/errors.mjs.map +0 -1
  34. package/dist/src/hooks.mjs.map +0 -1
  35. package/dist/src/idempotency.mjs.map +0 -1
  36. package/dist/src/index.mjs.map +0 -1
  37. package/dist/src/inline-batches-debug.mjs.map +0 -1
  38. package/dist/src/inline-execution.mjs.map +0 -1
  39. package/dist/src/jsonlines.mjs.map +0 -1
  40. package/dist/src/null-byte.mjs.map +0 -1
  41. package/dist/src/server.mjs.map +0 -1
  42. package/dist/src/util.mjs.map +0 -1
  43. package/dist/workflows/hooks.js.map +0 -1
@@ -12,7 +12,7 @@ if (!process.env.WORKFLOW_TARGET_WORLD) {
12
12
  console.error('Error: WORKFLOW_TARGET_WORLD environment variable is not set.');
13
13
  process.exit(1);
14
14
  }
15
- const Invoke = z
15
+ const Invoke = z.compile(z
16
16
  .object({
17
17
  file: z.enum(Object.keys(manifest.workflows)),
18
18
  workflow: z.string(),
@@ -21,21 +21,27 @@ const Invoke = z
21
21
  .transform((obj) => {
22
22
  const file = obj.file;
23
23
  const workflow = z
24
- .enum(Object.keys(manifest.workflows[file]))
24
+ .compile(z.enum(Object.keys(manifest.workflows[file])))
25
25
  .parse(obj.workflow);
26
26
  return {
27
27
  args: obj.args,
28
28
  workflow: manifest.workflows[file][workflow],
29
29
  };
30
- });
30
+ }));
31
31
  // Track flow handler invocations per run for testing inline execution
32
+ // per-copy-ok: this file is a standalone test server entry (it calls `serve()`
33
+ // below), so it runs as its own process with one module instance. There is no
34
+ // host bundler to compile it into several layers.
32
35
  const flowInvocationCounts = new Map();
33
36
  const app = new Hono()
34
37
  .post('/.well-known/workflow/v1/flow', async (ctx) => {
35
- // Clone the request to read the body for tracking without consuming it
38
+ // Clone the request to read the body for tracking without consuming it.
39
+ // We must increment the invocation counter *before* awaiting flowPOST,
40
+ // otherwise the workflow may complete (and the test may observe the
41
+ // completed status) before the counter is bumped, producing a flaky
42
+ // `expected 0 to be 1` failure when the test immediately queries
43
+ // /_flow-invocations after seeing the run as completed.
36
44
  const cloned = ctx.req.raw.clone();
37
- const response = await flowPOST(ctx.req.raw);
38
- // Extract runId from the request body (queue message payload)
39
45
  try {
40
46
  const body = (await cloned.json());
41
47
  const runId = typeof body?.runId === 'string'
@@ -51,7 +57,7 @@ const app = new Hono()
51
57
  catch {
52
58
  // Health check or non-JSON messages — ignore
53
59
  }
54
- return response;
60
+ return flowPOST(ctx.req.raw);
55
61
  })
56
62
  .get('/_flow-invocations/:runId', (ctx) => {
57
63
  const count = flowInvocationCounts.get(ctx.req.param('runId')) ?? 0;
@@ -67,7 +73,8 @@ const app = new Hono()
67
73
  const hook = await getHookByToken(ctx.req.param('token'));
68
74
  const { runId } = await resumeHook(hook.token, {
69
75
  ...(await ctx.req.json()),
70
- metadata: hook.metadata,
76
+ // `metadata` is a lazily-hydrated Promise; echo the resolved value.
77
+ metadata: await hook.metadata,
71
78
  });
72
79
  return ctx.json({ runId, hookId: hook.hookId });
73
80
  })
@@ -97,7 +104,7 @@ const app = new Hono()
97
104
  const runId = ctx.req.param('runId');
98
105
  const world = await getWorld();
99
106
  const allEvents = [];
100
- let cursor = undefined;
107
+ let cursor;
101
108
  while (true) {
102
109
  const page = await world.events.list({
103
110
  runId,
@@ -105,6 +112,7 @@ const app = new Hono()
105
112
  });
106
113
  for (const e of page.data) {
107
114
  allEvents.push({
115
+ eventId: e.eventId,
108
116
  eventType: e.eventType,
109
117
  correlationId: e.correlationId,
110
118
  });
@@ -143,4 +151,4 @@ serve({
143
151
  control.end();
144
152
  }
145
153
  });
146
- //# sourceMappingURL=server.mjs.map
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUN6QixPQUFPLEVBQUUsSUFBSSxJQUFJLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sUUFBUSxNQUFNLDBDQUEwQyxDQUFDO0lBQzlELElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FDWCwrREFBK0QsQ0FDaEUsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQU1ELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQ3RCLENBQUM7S0FDRSxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQXlCLENBQUM7SUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0NBQ3RDLENBQUM7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QUFDLFNBQVMsQ0FDdkU7Z0JBQ0UsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLFlBQVk7YUFDdkIsQ0FDRixHQUFHLENBQ0wsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUMsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLEVBQzlDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgc2VydmUgfSBmcm9tICdAaG9uby9ub2RlLXNlcnZlcic7XG5pbXBvcnQgeyBIb25vIH0gZnJvbSAnaG9ubyc7XG5pbXBvcnQgeyBnZXRIb29rQnlUb2tlbiwgZ2V0UnVuLCByZXN1bWVIb29rLCBzdGFydCB9IGZyb20gJ3dvcmtmbG93L2FwaSc7XG5pbXBvcnQgeyBnZXRXb3JsZCB9IGZyb20gJ3dvcmtmbG93L3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgeiBmcm9tICd6b2QnO1xuaW1wb3J0IHsgUE9TVCBhcyBmbG93UE9TVCB9IGZyb20gJy4uLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cubWpzJztcbmltcG9ydCBtYW5pZmVzdCBmcm9tICcuLi8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyB3aXRoIHtcbiAgdHlwZTogJ2pzb24nLFxufTtcblxuaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnRXJyb3I6IFdPUktGTE9XX1RBUkdFVF9XT1JMRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LidcbiAgKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG50eXBlIEZpbGVzID0ga2V5b2YgdHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cztcbnR5cGUgV29ya2Zsb3dzPEYgZXh0ZW5kcyBGaWxlcz4gPSBrZXlvZiAodHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cylbRl07XG50eXBlIE5vbkVtcHR5QXJyYXk8VD4gPSBbVCwgLi4uVFtdXTtcblxuY29uc3QgSW52b2tlID0gei5jb21waWxlKFxuICB6XG4gICAgLm9iamVjdCh7XG4gICAgICBmaWxlOiB6LmVudW0oT2JqZWN0LmtleXMobWFuaWZlc3Qud29ya2Zsb3dzKSBhcyBOb25FbXB0eUFycmF5PEZpbGVzPiksXG4gICAgICB3b3JrZmxvdzogei5zdHJpbmcoKSxcbiAgICAgIGFyZ3M6IHoudW5rbm93bigpLmFycmF5KCkuZGVmYXVsdChbXSksXG4gICAgfSlcbiAgICAudHJhbnNmb3JtKChvYmopID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSBvYmouZmlsZSBhcyBrZXlvZiB0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzO1xuICAgICAgY29uc3Qgd29ya2Zsb3cgPSB6XG4gICAgICAgIC5jb21waWxlKFxuICAgICAgICAgIHouZW51bShcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1hbmlmZXN0LndvcmtmbG93c1tmaWxlXSkgYXMgTm9uRW1wdHlBcnJheTxcbiAgICAgICAgICAgICAgV29ya2Zsb3dzPHR5cGVvZiBmaWxlPlxuICAgICAgICAgICAgPlxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAucGFyc2Uob2JqLndvcmtmbG93KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFyZ3M6IG9iai5hcmdzLFxuICAgICAgICB3b3JrZmxvdzogbWFuaWZlc3Qud29ya2Zsb3dzW2ZpbGVdW3dvcmtmbG93XSxcbiAgICAgIH07XG4gICAgfSlcbik7XG5cbi8vIFRyYWNrIGZsb3cgaGFuZGxlciBpbnZvY2F0aW9ucyBwZXIgcnVuIGZvciB0ZXN0aW5nIGlubGluZSBleGVjdXRpb25cbi8vIHBlci1jb3B5LW9rOiB0aGlzIGZpbGUgaXMgYSBzdGFuZGFsb25lIHRlc3Qgc2VydmVyIGVudHJ5IChpdCBjYWxscyBgc2VydmUoKWBcbi8vIGJlbG93KSwgc28gaXQgcnVucyBhcyBpdHMgb3duIHByb2Nlc3Mgd2l0aCBvbmUgbW9kdWxlIGluc3RhbmNlLiBUaGVyZSBpcyBub1xuLy8gaG9zdCBidW5kbGVyIHRvIGNvbXBpbGUgaXQgaW50byBzZXZlcmFsIGxheWVycy5cbmNvbnN0IGZsb3dJbnZvY2F0aW9uQ291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuY29uc3QgYXBwID0gbmV3IEhvbm8oKVxuICAucG9zdCgnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgLy8gQ2xvbmUgdGhlIHJlcXVlc3QgdG8gcmVhZCB0aGUgYm9keSBmb3IgdHJhY2tpbmcgd2l0aG91dCBjb25zdW1pbmcgaXQuXG4gICAgLy8gV2UgbXVzdCBpbmNyZW1lbnQgdGhlIGludm9jYXRpb24gY291bnRlciAqYmVmb3JlKiBhd2FpdGluZyBmbG93UE9TVCxcbiAgICAvLyBvdGhlcndpc2UgdGhlIHdvcmtmbG93IG1heSBjb21wbGV0ZSAoYW5kIHRoZSB0ZXN0IG1heSBvYnNlcnZlIHRoZVxuICAgIC8vIGNvbXBsZXRlZCBzdGF0dXMpIGJlZm9yZSB0aGUgY291bnRlciBpcyBidW1wZWQsIHByb2R1Y2luZyBhIGZsYWt5XG4gICAgLy8gYGV4cGVjdGVkIDAgdG8gYmUgMWAgZmFpbHVyZSB3aGVuIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHF1ZXJpZXNcbiAgICAvLyAvX2Zsb3ctaW52b2NhdGlvbnMgYWZ0ZXIgc2VlaW5nIHRoZSBydW4gYXMgY29tcGxldGVkLlxuICAgIGNvbnN0IGNsb25lZCA9IGN0eC5yZXEucmF3LmNsb25lKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgY2xvbmVkLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBydW5JZCA9XG4gICAgICAgIHR5cGVvZiBib2R5Py5ydW5JZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGJvZHkucnVuSWRcbiAgICAgICAgICA6IHR5cGVvZiAoYm9keS5wYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgID8ucnVuSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/ICgoYm9keS5wYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ydW5JZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChydW5JZCkge1xuICAgICAgICBmbG93SW52b2NhdGlvbkNvdW50cy5zZXQoXG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgKGZsb3dJbnZvY2F0aW9uQ291bnRzLmdldChydW5JZCkgPz8gMCkgKyAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBIZWFsdGggY2hlY2sgb3Igbm9uLUpTT04gbWVzc2FnZXMg4oCUIGlnbm9yZVxuICAgIH1cbiAgICByZXR1cm4gZmxvd1BPU1QoY3R4LnJlcS5yYXcpO1xuICB9KVxuICAuZ2V0KCcvX2Zsb3ctaW52b2NhdGlvbnMvOnJ1bklkJywgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gZmxvd0ludm9jYXRpb25Db3VudHMuZ2V0KGN0eC5yZXEucGFyYW0oJ3J1bklkJykpID8/IDA7XG4gICAgcmV0dXJuIGN0eC5qc29uKHsgY291bnQgfSk7XG4gIH0pXG4gIC5nZXQoJy9fbWFuaWZlc3QnLCAoY3R4KSA9PiBjdHguanNvbihtYW5pZmVzdCkpXG4gIC5wb3N0KCcvaW52b2tlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBjdHgucmVxLmpzb24oKS50aGVuKEludm9rZS5wYXJzZSk7XG4gICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IHN0YXJ0KGpzb24ud29ya2Zsb3csIGpzb24uYXJncyk7XG5cbiAgICByZXR1cm4gY3R4Lmpzb24oeyBydW5JZDogaGFuZGxlci5ydW5JZCB9KTtcbiAgfSlcbiAgLnBvc3QoJy9ob29rcy86dG9rZW4nLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IGdldEhvb2tCeVRva2VuKGN0eC5yZXEucGFyYW0oJ3Rva2VuJykpO1xuICAgIGNvbnN0IHsgcnVuSWQgfSA9IGF3YWl0IHJlc3VtZUhvb2soaG9vay50b2tlbiwge1xuICAgICAgLi4uKGF3YWl0IGN0eC5yZXEuanNvbigpKSxcbiAgICAgIC8vIGBtZXRhZGF0YWAgaXMgYSBsYXppbHktaHlkcmF0ZWQgUHJvbWlzZTsgZWNobyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICBtZXRhZGF0YTogYXdhaXQgaG9vay5tZXRhZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gY3R4Lmpzb24oeyBydW5JZCwgaG9va0lkOiBob29rLmhvb2tJZCB9KTtcbiAgfSlcbiAgLmdldCgnL3J1bnMvOnJ1bklkJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgZ2V0V29ybGQoKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChjdHgucmVxLnBhcmFtKCdydW5JZCcpKTtcbiAgICAvLyBDdXN0b20gSlNPTiBzZXJpYWxpemF0aW9uIHRvIGhhbmRsZSBVaW50OEFycmF5IGFzIGJhc2U2NFxuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShydW4sIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9fdHlwZTogJ1VpbnQ4QXJyYXknLFxuICAgICAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKHZhbHVlKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShqc29uLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcbiAgfSlcbiAgLmdldCgnL3J1bnMvOnJ1bklkL3JlYWRhYmxlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHJ1bklkID0gY3R4LnJlcS5wYXJhbSgncnVuSWQnKTtcbiAgICBjb25zdCBydW4gPSBnZXRSdW4ocnVuSWQpO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UocnVuLmdldFJlYWRhYmxlKCkpO1xuICB9KVxuICAuZ2V0KCcvcnVucy86cnVuSWQvZXZlbnRzJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHJ1bklkID0gY3R4LnJlcS5wYXJhbSgncnVuSWQnKTtcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkKCk7XG4gICAgY29uc3QgYWxsRXZlbnRzOiB7XG4gICAgICBldmVudElkOiBzdHJpbmc7XG4gICAgICBldmVudFR5cGU6IHN0cmluZztcbiAgICAgIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgfVtdID0gW107XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgICBydW5JZCxcbiAgICAgICAgcGFnaW5hdGlvbjogeyBzb3J0T3JkZXI6ICdhc2MnLCBjdXJzb3IgfSxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBlIG9mIHBhZ2UuZGF0YSkge1xuICAgICAgICBhbGxFdmVudHMucHVzaCh7XG4gICAgICAgICAgZXZlbnRJZDogZS5ldmVudElkLFxuICAgICAgICAgIGV2ZW50VHlwZTogZS5ldmVudFR5cGUsXG4gICAgICAgICAgY29ycmVsYXRpb25JZDogZS5jb3JyZWxhdGlvbklkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghcGFnZS5oYXNNb3JlKSBicmVhaztcbiAgICAgIGN1cnNvciA9IHBhZ2UuY3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmICghY3Vyc29yKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGN0eC5qc29uKHsgZXZlbnRzOiBhbGxFdmVudHMgfSk7XG4gIH0pO1xuXG5zZXJ2ZShcbiAge1xuICAgIGZldGNoOiBhcHAuZmV0Y2gsXG4gICAgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlBPUlQpIHx8IDAsXG4gIH0sXG4gIGFzeW5jIChpbmZvKSA9PiB7XG4gICAgY29uc29sZS5sb2coYPCfkYIgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2luZm8uYWRkcmVzc306JHtpbmZvLnBvcnR9YCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgcHJvY2Vzcy5lbnYuUE9SVCA9IGluZm8ucG9ydC50b1N0cmluZygpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZW5hbWUsIHdvcmtmbG93c10gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3Qud29ya2Zsb3dzKSkge1xuICAgICAgZm9yIChjb25zdCB3b3JrZmxvd05hbWUgb2YgT2JqZWN0LmtleXMoXG4gICAgICAgIHdvcmtmbG93cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJCBjdXJsIC1YIFBPU1QgaHR0cDovL2xvY2FsaG9zdDoke2luZm8ucG9ydH0vaW52b2tlIC1kICcke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgd29ya2Zsb3c6IHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZCgpO1xuICAgIGlmICh3b3JsZC5zdGFydCkge1xuICAgICAgY29uc29sZS5sb2coYHN0YXJ0aW5nIGJhY2tncm91bmQgdGFza3MuLi5gKTtcbiAgICAgIGF3YWl0IHdvcmxkLnN0YXJ0KCkudGhlbihcbiAgICAgICAgKCkgPT4gY29uc29sZS5sb2coJ2JhY2tncm91bmQgdGFza3Mgc3RhcnRlZC4nKSxcbiAgICAgICAgKGVycikgPT4gY29uc29sZS5lcnJvcign4p2XIGVycm9yIHN0YXJ0aW5nIGJhY2tncm91bmQgdGFza3M6JywgZXJyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQ09OVFJPTF9GRCA9PT0gJzMnKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oJycsIHsgZmQ6IDMgfSk7XG4gICAgICBjb250cm9sLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsgc3RhdGU6ICdsaXN0ZW5pbmcnLCBpbmZvIH0pfVxcbmApO1xuICAgICAgY29udHJvbC5lbmQoKTtcbiAgICB9XG4gIH1cbik7XG4iXX0=
@@ -24,18 +24,32 @@ export declare function createFetcher(control: Control): {
24
24
  invoke<F extends Files, W extends Workflows<F>>(file: F, workflow: W, args: unknown[]): Promise<{
25
25
  runId: string;
26
26
  }>;
27
+ /**
28
+ * Every event of a run, oldest first, as the World stored it.
29
+ *
30
+ * Ids included on purpose: they are the one part of the storage contract a
31
+ * World can get wrong while every workflow still appears to work, right
32
+ * up until a replay reads one (see `eventIds`).
33
+ */
34
+ getEvents(runId: string): Promise<{
35
+ eventId: string;
36
+ eventType: string;
37
+ correlationId?: string;
38
+ }[]>;
27
39
  getFlowInvocationCount(runId: string): Promise<number>;
28
40
  getRun(id: string): Promise<{
29
41
  runId: string;
30
42
  deploymentId: string;
31
43
  workflowName: string;
32
- input: unknown;
44
+ attributes: Record<string, string>;
33
45
  createdAt: Date;
34
46
  updatedAt: Date;
35
47
  status: "pending" | "running";
36
48
  specVersion?: number | undefined;
37
49
  executionContext?: Record<string, any> | undefined;
50
+ input?: unknown;
38
51
  errorCode?: string | undefined;
52
+ encryptionPublicKey?: string | undefined;
39
53
  expiredAt?: Date | undefined;
40
54
  startedAt?: Date | undefined;
41
55
  output?: undefined;
@@ -45,14 +59,16 @@ export declare function createFetcher(control: Control): {
45
59
  runId: string;
46
60
  deploymentId: string;
47
61
  workflowName: string;
48
- input: unknown;
62
+ attributes: Record<string, string>;
49
63
  createdAt: Date;
50
64
  updatedAt: Date;
51
65
  status: "cancelled";
52
66
  completedAt: Date;
53
67
  specVersion?: number | undefined;
54
68
  executionContext?: Record<string, any> | undefined;
69
+ input?: unknown;
55
70
  errorCode?: string | undefined;
71
+ encryptionPublicKey?: string | undefined;
56
72
  expiredAt?: Date | undefined;
57
73
  startedAt?: Date | undefined;
58
74
  output?: undefined;
@@ -61,34 +77,38 @@ export declare function createFetcher(control: Control): {
61
77
  runId: string;
62
78
  deploymentId: string;
63
79
  workflowName: string;
64
- input: unknown;
80
+ attributes: Record<string, string>;
65
81
  createdAt: Date;
66
82
  updatedAt: Date;
67
83
  status: "completed";
68
- output: unknown;
69
84
  completedAt: Date;
70
85
  specVersion?: number | undefined;
71
86
  executionContext?: Record<string, any> | undefined;
87
+ input?: unknown;
72
88
  errorCode?: string | undefined;
89
+ encryptionPublicKey?: string | undefined;
73
90
  expiredAt?: Date | undefined;
74
91
  startedAt?: Date | undefined;
92
+ output?: unknown;
75
93
  error?: undefined;
76
94
  } | {
77
95
  runId: string;
78
96
  deploymentId: string;
79
97
  workflowName: string;
80
- input: unknown;
98
+ attributes: Record<string, string>;
81
99
  createdAt: Date;
82
100
  updatedAt: Date;
83
101
  status: "failed";
84
- error: unknown;
85
102
  completedAt: Date;
86
103
  specVersion?: number | undefined;
87
104
  executionContext?: Record<string, any> | undefined;
105
+ input?: unknown;
88
106
  errorCode?: string | undefined;
107
+ encryptionPublicKey?: string | undefined;
89
108
  expiredAt?: Date | undefined;
90
109
  startedAt?: Date | undefined;
91
110
  output?: undefined;
111
+ error?: unknown;
92
112
  }>;
93
113
  getReadable(id: string): Promise<ReadableStream<Uint8Array>>;
94
114
  resumeHook<T extends TypedHook<any, any>>(token: string, payload: Omit<NoInfer<TypedHook.Input<T>>, "metadata">): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,0CAA0C,CAAC;AAErE,eAAO,MAAM,OAAO;;;;;iBAKlB,CAAC;AACH,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;;;;;;GAwDA;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO;WAE7B,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAC5C,CAAC,YACG,CAAC,QACL,OAAO,EAAE;;;kCAemB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;eAO3C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmBD,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;eAcjD,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,SACrC,MAAM,WACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;EAoB3D"}
1
+ {"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,0CAA0C,CAAC;AAErE,eAAO,MAAM,OAAO;;;;;iBAOnB,CAAC;AACF,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAEvC,KAAK,KAAK,GAAG,MAAM,OAAO,QAAQ,CAAC,SAAS,CAAC;AAC7C,KAAK,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;;;;;;GA2FA;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO;WAE7B,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAC5C,CAAC,YACG,CAAC,QACL,OAAO,EAAE;;;IAejB;;;;;;OAMG;qBACoB,MAAM,GAAG,OAAO,CACrC;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EAAE,CACJ;kCAamC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;eAO3C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAmBD,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;eAcjD,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,SACrC,MAAM,WACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;EAoB3D"}
package/dist/src/util.mjs CHANGED
@@ -1,33 +1,69 @@
1
1
  import cp from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
2
3
  import { existsSync } from 'node:fs';
4
+ import { rm } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { setTimeout } from 'node:timers/promises';
3
8
  import { fileURLToPath } from 'node:url';
4
9
  import { WorkflowRunSchema } from '@workflow/world';
5
10
  import chalk from 'chalk';
6
11
  import jsonlines from 'jsonlines';
7
12
  import { assert, onTestFailed, onTestFinished } from 'vitest';
8
13
  import * as z from 'zod';
9
- export const Control = z.object({
14
+ export const Control = z.compile(z.object({
10
15
  state: z.literal('listening'),
11
16
  info: z.object({
12
17
  port: z.number(),
13
18
  }),
14
- });
19
+ }));
15
20
  export async function startServer(opts) {
16
21
  let serverPath = new URL('./server.mts', import.meta.url);
17
22
  if (!existsSync(serverPath)) {
18
23
  serverPath = new URL('./server.mjs', import.meta.url);
19
24
  }
25
+ // Give each spawned server its own data directory. The Local World's default
26
+ // (untagged) `.workflow-data` dir is otherwise shared by every concurrently
27
+ // running test file's server, and its startup recovery sweep re-enqueues
28
+ // every untagged run it finds — including runs still mid-flight in another
29
+ // test's server — dispatching them against the same on-disk event log and
30
+ // racing the run's actual owner into spurious `ReplayDivergenceError`s.
31
+ const dataDir = join(tmpdir(), `workflow-world-testing-${process.pid}-${randomUUID()}`);
20
32
  const proc = cp.spawn('node', [fileURLToPath(serverPath)], {
21
33
  stdio: ['ignore', 'pipe', 'pipe', 'pipe'],
22
34
  env: {
23
35
  ...process.env,
24
36
  WORKFLOW_TARGET_WORLD: opts.world,
25
37
  CONTROL_FD: '3',
38
+ WORKFLOW_LOCAL_DATA_DIR: dataDir,
26
39
  ...(opts.env ?? {}),
27
40
  },
28
41
  });
29
- onTestFinished(() => {
30
- proc.kill();
42
+ onTestFinished(async () => {
43
+ // Wait for the child to actually exit before removing its data directory:
44
+ // `kill()` only requests termination, and on Windows `rm()` fails with
45
+ // EPERM/EBUSY while the server still holds file handles in `dataDir`.
46
+ if (proc.exitCode === null && proc.signalCode === null) {
47
+ const exited = new Promise((resolve) => {
48
+ proc.once('exit', () => resolve());
49
+ });
50
+ proc.kill();
51
+ // Bounded, so a child that refuses to die can't hang test teardown.
52
+ await Promise.race([
53
+ exited,
54
+ setTimeout(5_000, undefined, { ref: false }),
55
+ ]);
56
+ }
57
+ // Windows can hold the handles for a moment past exit, hence the retries.
58
+ // A leaked temp dir is not worth failing an otherwise passing test over.
59
+ await rm(dataDir, {
60
+ recursive: true,
61
+ force: true,
62
+ maxRetries: 10,
63
+ retryDelay: 100,
64
+ }).catch((err) => {
65
+ console.warn(`Failed to remove test data dir ${dataDir}:`, err);
66
+ });
31
67
  });
32
68
  const stdio = [];
33
69
  // Accumulated raw server output — used by tests that want to inspect
@@ -62,7 +98,7 @@ export async function startServer(opts) {
62
98
  }
63
99
  throw new Error('Server did not start correctly');
64
100
  }
65
- const Invoke = z.object({ runId: z.coerce.string() });
101
+ const Invoke = z.compile(z.object({ runId: z.coerce.string() }));
66
102
  export function createFetcher(control) {
67
103
  return {
68
104
  async invoke(file, workflow, args) {
@@ -79,6 +115,18 @@ export function createFetcher(control) {
79
115
  });
80
116
  return data;
81
117
  },
118
+ /**
119
+ * Every event of a run, oldest first, as the World stored it.
120
+ *
121
+ * Ids included on purpose: they are the one part of the storage contract a
122
+ * World can get wrong while every workflow still appears to work, right
123
+ * up until a replay reads one (see `eventIds`).
124
+ */
125
+ async getEvents(runId) {
126
+ const x = await fetch(`http://localhost:${control.info.port}/runs/${encodeURIComponent(runId)}/events`);
127
+ const data = (await x.json());
128
+ return data.events;
129
+ },
82
130
  async getFlowInvocationCount(runId) {
83
131
  const x = await fetch(`http://localhost:${control.info.port}/_flow-invocations/${encodeURIComponent(runId)}`);
84
132
  const data = (await x.json());
@@ -124,4 +172,4 @@ export function createFetcher(control) {
124
172
  },
125
173
  };
126
174
  }
127
- //# sourceMappingURL=util.mjs.map
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxLQUE2QixNQUFNLE9BQU8sQ0FBQztBQUNsRCxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBR3pCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUM5QixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1AsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7S0FDakIsQ0FBQztDQUNILENBQUMsQ0FDSCxDQUFDO0FBTUYsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsSUFHakM7SUFDQyxJQUFJ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QixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDekQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3AgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW5TY2hlbWEgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNoYWxrLCB7IHR5cGUgQ2hhbGtJbnN0YW5jZSB9IGZyb20gJ2NoYWxrJztcbmltcG9ydCBqc29ubGluZXMgZnJvbSAnanNvbmxpbmVzJztcbmltcG9ydCB7IGFzc2VydCwgb25UZXN0RmFpbGVkLCBvblRlc3RGaW5pc2hlZCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgdHlwZSB7IFR5cGVkSG9vayB9IGZyb20gJ3dvcmtmbG93JztcbmltcG9ydCAqIGFzIHogZnJvbSAnem9kJztcbmltcG9ydCB0eXBlIG1hbmlmZXN0IGZyb20gJy4uLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuXG5leHBvcnQgY29uc3QgQ29udHJvbCA9IHouY29tcGlsZShcbiAgei5vYmplY3Qoe1xuICAgIHN0YXRlOiB6LmxpdGVyYWwoJ2xpc3RlbmluZycpLFxuICAgIGluZm86IHoub2JqZWN0KHtcbiAgICAgIHBvcnQ6IHoubnVtYmVyKCksXG4gICAgfSksXG4gIH0pXG4pO1xudHlwZSBDb250cm9sID0gei5pbmZlcjx0eXBlb2YgQ29udHJvbD47XG5cbnR5cGUgRmlsZXMgPSBrZXlvZiB0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzO1xudHlwZSBXb3JrZmxvd3M8RiBleHRlbmRzIEZpbGVzPiA9IGtleW9mICh0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzKVtGXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyKG9wdHM6IHtcbiAgd29ybGQ6IHN0cmluZztcbiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pIHtcbiAgbGV0IHNlcnZlclBhdGggPSBuZXcgVVJMKCcuL3NlcnZlci5tdHMnLCBpbXBvcnQubWV0YS51cmwpO1xuXG4gIGlmICghZXhpc3RzU3luYyhzZXJ2ZXJQYXRoKSkge1xuICAgIHNlcnZlclBhdGggPSBuZXcgVVJMKCcuL3NlcnZlci5tanMnLCBpbXBvcnQubWV0YS51cmwpO1xuICB9XG5cbiAgLy8gR2l2ZSBlYWNoIHNwYXduZWQgc2VydmVyIGl0cyBvd24gZGF0YSBkaXJlY3RvcnkuIFRoZSBMb2NhbCBXb3JsZCdzIGRlZmF1bHRcbiAgLy8gKHVudGFnZ2VkKSBgLndvcmtmbG93LWRhdGFgIGRpciBpcyBvdGhlcndpc2Ugc2hhcmVkIGJ5IGV2ZXJ5IGNvbmN1cnJlbnRseVxuICAvLyBydW5uaW5nIHRlc3QgZmlsZSdzIHNlcnZlciwgYW5kIGl0cyBzdGFydHVwIHJlY292ZXJ5IHN3ZWVwIHJlLWVucXVldWVzXG4gIC8vIGV2ZXJ5IHVudGFnZ2VkIHJ1biBpdCBmaW5kcyDigJQgaW5jbHVkaW5nIHJ1bnMgc3RpbGwgbWlkLWZsaWdodCBpbiBhbm90aGVyXG4gIC8vIHRlc3QncyBzZXJ2ZXIg4oCUIGRpc3BhdGNoaW5nIHRoZW0gYWdhaW5zdCB0aGUgc2FtZSBvbi1kaXNrIGV2ZW50IGxvZyBhbmRcbiAgLy8gcmFjaW5nIHRoZSBydW4ncyBhY3R1YWwgb3duZXIgaW50byBzcHVyaW91cyBgUmVwbGF5RGl2ZXJnZW5jZUVycm9yYHMuXG4gIGNvbnN0IGRhdGFEaXIgPSBqb2luKFxuICAgIHRtcGRpcigpLFxuICAgIGB3b3JrZmxvdy13b3JsZC10ZXN0aW5nLSR7cHJvY2Vzcy5waWR9LSR7cmFuZG9tVVVJRCgpfWBcbiAgKTtcblxuICBjb25zdCBwcm9jID0gY3Auc3Bhd24oJ25vZGUnLCBbZmlsZVVSTFRvUGF0aChzZXJ2ZXJQYXRoKV0sIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICBlbnY6IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgV09SS0ZMT1dfVEFSR0VUX1dPUkxEOiBvcHRzLndvcmxkLFxuICAgICAgQ09OVFJPTF9GRDogJzMnLFxuICAgICAgV09SS0ZMT1dfTE9DQUxfREFUQV9ESVI6IGRhdGFEaXIsXG4gICAgICAuLi4ob3B0cy5lbnYgPz8ge30pLFxuICAgIH0sXG4gIH0pO1xuICBvblRlc3RGaW5pc2hlZChhc3luYyAoKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGNoaWxkIHRvIGFjdHVhbGx5IGV4aXQgYmVmb3JlIHJlbW92aW5nIGl0cyBkYXRhIGRpcmVjdG9yeTpcbiAgICAvLyBga2lsbCgpYCBvbmx5IHJlcXVlc3RzIHRlcm1pbmF0aW9uLCBhbmQgb24gV2luZG93cyBgcm0oKWAgZmFpbHMgd2l0aFxuICAgIC8vIEVQRVJNL0VCVVNZIHdoaWxlIHRoZSBzZXJ2ZXIgc3RpbGwgaG9sZHMgZmlsZSBoYW5kbGVzIGluIGBkYXRhRGlyYC5cbiAgICBpZiAocHJvYy5leGl0Q29kZSA9PT0gbnVsbCAmJiBwcm9jLnNpZ25hbENvZGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV4aXRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXhpdCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICB9KTtcbiAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgLy8gQm91bmRlZCwgc28gYSBjaGlsZCB0aGF0IHJlZnVzZXMgdG8gZGllIGNhbid0IGhhbmcgdGVzdCB0ZWFyZG93bi5cbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGV4aXRlZCxcbiAgICAgICAgc2V0VGltZW91dCg1XzAwMCwgdW5kZWZpbmVkLCB7IHJlZjogZmFsc2UgfSksXG4gICAgICBdKTtcbiAgICB9XG4gICAgLy8gV2luZG93cyBjYW4gaG9sZCB0aGUgaGFuZGxlcyBmb3IgYSBtb21lbnQgcGFzdCBleGl0LCBoZW5jZSB0aGUgcmV0cmllcy5cbiAgICAvLyBBIGxlYWtlZCB0ZW1wIGRpciBpcyBub3Qgd29ydGggZmFpbGluZyBhbiBvdGhlcndpc2UgcGFzc2luZyB0ZXN0IG92ZXIuXG4gICAgYXdhaXQgcm0oZGF0YURpciwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgICBtYXhSZXRyaWVzOiAxMCxcbiAgICAgIHJldHJ5RGVsYXk6IDEwMCxcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZW1vdmUgdGVzdCBkYXRhIGRpciAke2RhdGFEaXJ9OmAsIGVycik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHN0ZGlvID0gW10gYXMgeyBzdHJlYW06IENoYWxrSW5zdGFuY2U7IGNodW5rOiBzdHJpbmcgfVtdO1xuICAvLyBBY2N1bXVsYXRlZCByYXcgc2VydmVyIG91dHB1dCDigJQgdXNlZCBieSB0ZXN0cyB0aGF0IHdhbnQgdG8gaW5zcGVjdFxuICAvLyBkZWJ1ZyBsb2dzIChlLmcuLCBjb3VudCBydW50aW1lIGl0ZXJhdGlvbnMsIGV2ZW50IGxvYWRzLCBldGMuKS5cbiAgY29uc3Qgb3V0cHV0QnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICBwcm9jLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLndoaXRlLCBjaHVuazogc3RyIH0pO1xuICAgIG91dHB1dEJ1ZmZlci5wdXNoKHN0cik7XG4gIH0pO1xuICBwcm9jLnN0ZGVycj8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLnJlZCwgY2h1bms6IHN0ciB9KTtcbiAgICBvdXRwdXRCdWZmZXIucHVzaChzdHIpO1xuICB9KTtcblxuICBvblRlc3RGYWlsZWQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCc9PT0gU0VSVkVSIFNURElPID09PScpO1xuICAgIGxldCBidWZmZXIgPSAnJztcbiAgICBmb3IgKGNvbnN0IHsgc3RyZWFtLCBjaHVuayB9IG9mIHN0ZGlvKSB7XG4gICAgICBidWZmZXIgKz0gc3RyZWFtLmludmVyc2UoY2h1bmspO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhidWZmZXIpO1xuICB9KTtcblxuICBjb25zdCBmZDMgPSBwcm9jLnN0ZGlvWzNdO1xuICBhc3NlcnQoZmQzLCAnZmQzIHNob3VsZCBiZSBkZWZpbmVkJyk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBmZDMucGlwZShqc29ubGluZXMucGFyc2UoKSkpIHtcbiAgICBjb25zdCBjb250cm9sID0gQ29udHJvbC5wYXJzZShjaHVuayk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbnRyb2wsXG4gICAgICBnZXRPdXRwdXQ6ICgpID0+IG91dHB1dEJ1ZmZlci5qb2luKCcnKSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHknKTtcbn1cblxuY29uc3QgSW52b2tlID0gei5jb21waWxlKHoub2JqZWN0KHsgcnVuSWQ6IHouY29lcmNlLnN0cmluZygpIH0pKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZldGNoZXIoY29udHJvbDogQ29udHJvbCkge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGludm9rZTxGIGV4dGVuZHMgRmlsZXMsIFcgZXh0ZW5kcyBXb3JrZmxvd3M8Rj4+KFxuICAgICAgZmlsZTogRixcbiAgICAgIHdvcmtmbG93OiBXLFxuICAgICAgYXJnczogdW5rbm93bltdXG4gICAgKSB7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly9sb2NhbGhvc3Q6JHtjb250cm9sLmluZm8ucG9ydH0vaW52b2tlYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZmlsZSwgd29ya2Zsb3csIGFyZ3MgfSksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB4Lmpzb24oKS50aGVuKEludm9rZS5wYXJzZSk7XG4gICAgICBvblRlc3RGYWlsZWQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdXb3JrZmxvdyBydW46JywgZGF0YS5ydW5JZCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRXZlcnkgZXZlbnQgb2YgYSBydW4sIG9sZGVzdCBmaXJzdCwgYXMgdGhlIFdvcmxkIHN0b3JlZCBpdC5cbiAgICAgKlxuICAgICAqIElkcyBpbmNsdWRlZCBvbiBwdXJwb3NlOiB0aGV5IGFyZSB0aGUgb25lIHBhcnQgb2YgdGhlIHN0b3JhZ2UgY29udHJhY3QgYVxuICAgICAqIFdvcmxkIGNhbiBnZXQgd3Jvbmcgd2hpbGUgZXZlcnkgd29ya2Zsb3cgc3RpbGwgYXBwZWFycyB0byB3b3JrLCByaWdodFxuICAgICAqIHVwIHVudGlsIGEgcmVwbGF5IHJlYWRzIG9uZSAoc2VlIGBldmVudElkc2ApLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEV2ZW50cyhydW5JZDogc3RyaW5nKTogUHJvbWlzZTxcbiAgICAgIHtcbiAgICAgICAgZXZlbnRJZDogc3RyaW5nO1xuICAgICAgICBldmVudFR5cGU6IHN0cmluZztcbiAgICAgICAgY29ycmVsYXRpb25JZD86IHN0cmluZztcbiAgICAgIH1bXVxuICAgID4ge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJ1bklkKX0vZXZlbnRzYFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgeC5qc29uKCkpIGFzIHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgZXZlbnRJZDogc3RyaW5nO1xuICAgICAgICAgIGV2ZW50VHlwZTogc3RyaW5nO1xuICAgICAgICAgIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgICAgIH1bXTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZGF0YS5ldmVudHM7XG4gICAgfSxcbiAgICBhc3luYyBnZXRGbG93SW52b2NhdGlvbkNvdW50KHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9fZmxvdy1pbnZvY2F0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChydW5JZCl9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgeC5qc29uKCkpIGFzIHsgY291bnQ6IG51bWJlciB9O1xuICAgICAgcmV0dXJuIGRhdGEuY291bnQ7XG4gICAgfSxcbiAgICBhc3luYyBnZXRSdW4oaWQ6IHN0cmluZykge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gXG4gICAgICApO1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHgudGV4dCgpO1xuICAgICAgLy8gQ3VzdG9tIEpTT04gcmV2aXZlciB0byBkZWNvZGUgYmFzZTY0IGJhY2sgdG8gVWludDhBcnJheVxuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGV4dCwgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAodmFsdWUgYXMgYW55KS5fX3R5cGUgPT09ICdVaW50OEFycmF5JyAmJlxuICAgICAgICAgIHR5cGVvZiAodmFsdWUgYXMgYW55KS5kYXRhID09PSAnc3RyaW5nJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oKHZhbHVlIGFzIGFueSkuZGF0YSwgJ2Jhc2U2NCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBXb3JrZmxvd1J1blNjaGVtYS5wYXJzZUFzeW5jKGRhdGEpO1xuICAgIH0sXG4gICAgYXN5bmMgZ2V0UmVhZGFibGUoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVhZGFibGVTdHJlYW08VWludDhBcnJheT4+IHtcbiAgICAgIGNvbnN0IHggPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYGh0dHA6Ly9sb2NhbGhvc3Q6JHtjb250cm9sLmluZm8ucG9ydH0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9L3JlYWRhYmxlYFxuICAgICAgKTtcbiAgICAgIGlmICgheC5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBnZXQgcmVhZGFibGUgc3RyZWFtOiAke3guc3RhdHVzfSAke3guc3RhdHVzVGV4dH1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIXguYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJvZHkgaW4gcmVzcG9uc2UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4LmJvZHk7XG4gICAgfSxcbiAgICBhc3luYyByZXN1bWVIb29rPFQgZXh0ZW5kcyBUeXBlZEhvb2s8YW55LCBhbnk+PihcbiAgICAgIHRva2VuOiBzdHJpbmcsXG4gICAgICBwYXlsb2FkOiBPbWl0PE5vSW5mZXI8VHlwZWRIb29rLklucHV0PFQ+PiwgJ21ldGFkYXRhJz5cbiAgICApIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9ob29rcy8ke3Rva2VufWAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXMuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiB7fSk7IC8vIERyYWluIHRoZSBib2R5IHRvIGF2b2lkIHJlc291cmNlIGxlYWtzXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byByZXN1bWUgaG9vazogJHtyZXMuc3RhdHVzfSAke3Jlcy5zdGF0dXNUZXh0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../workflows/hooks.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI;;;;;;;;EAMf,CAAC;AAEH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;;;GActE"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../workflows/hooks.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,IAAI;;;;;;;;EAQf,CAAC;AAEH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;;;;;;GActE"}
@@ -38,11 +38,11 @@ exports.collectWithHook = collectWithHook;
38
38
  const core_1 = require("@workflow/core");
39
39
  const z = __importStar(require("zod"));
40
40
  exports.Hook = (0, core_1.defineHook)({
41
- schema: z.object({
41
+ schema: z.compile(z.object({
42
42
  data: z.string(),
43
43
  done: z.boolean().optional(),
44
44
  metadata: z.unknown(),
45
- }),
45
+ })),
46
46
  });
47
47
  async function collectWithHook(token, customData) {
48
48
  'use workflow';
@@ -67,4 +67,4 @@ async function writeEvent(writable, event, payload) {
67
67
  payload,
68
68
  })}\r\n`));
69
69
  }
70
- //# sourceMappingURL=hooks.js.map
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi93b3JrZmxvd3MvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsMENBY0M7QUEzQkQseUNBQXlEO0FBQ3pELHVDQUF5QjtBQUVaLFFBQUEsSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFBQztJQUM3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FDZixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDaEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7S0FDdEIsQ0FBQyxDQUNIO0NBQ0YsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLGVBQWUsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7SUFDckUsY0FBYyxDQUFDO0lBRWYsTUFBTSxJQUFJLEdBQUcsWUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQTZDLEVBQUUsQ0FBQztJQUMvRCxNQUFNLEVBQUUsR0FBRyxJQUFBLGtCQUFXLEdBQUUsQ0FBQztJQUN6QixNQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDcEMsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxVQUFVLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksS0FBSyxDQUFDLElBQUk7WUFBRSxNQUFNO0lBQ3hCLENBQUM7SUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDdkIsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQ3ZCLFFBQXdCLEVBQ3hCLEtBQWEsRUFDYixPQUFpQjtJQUVqQixVQUFVLENBQUM7SUFFWCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FDaEIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQ3RCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQixLQUFLO1FBQ0wsT0FBTztLQUNSLENBQUMsTUFBTSxDQUNULENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVIb29rLCBnZXRXcml0YWJsZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlJztcbmltcG9ydCAqIGFzIHogZnJvbSAnem9kJztcblxuZXhwb3J0IGNvbnN0IEhvb2sgPSBkZWZpbmVIb29rKHtcbiAgc2NoZW1hOiB6LmNvbXBpbGUoXG4gICAgei5vYmplY3Qoe1xuICAgICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICAgIGRvbmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICBtZXRhZGF0YTogei51bmtub3duKCksXG4gICAgfSlcbiAgKSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFdpdGhIb29rKHRva2VuOiBzdHJpbmcsIGN1c3RvbURhdGE6IHN0cmluZykge1xuICAndXNlIHdvcmtmbG93JztcblxuICBjb25zdCBob29rID0gSG9vay5jcmVhdGUoeyB0b2tlbiwgbWV0YWRhdGE6IHsgY3VzdG9tRGF0YSB9IH0pO1xuICBjb25zdCBjb2xsZWN0ZWQ6IFBhcmFtZXRlcnM8KHR5cGVvZiBIb29rKVsncmVzdW1lJ10+WzFdW10gPSBbXTtcbiAgY29uc3Qgd2YgPSBnZXRXcml0YWJsZSgpO1xuICBhd2FpdCB3cml0ZUV2ZW50KHdmLCAnaG9va0NyZWF0ZWQnKTtcbiAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBob29rKSB7XG4gICAgYXdhaXQgd3JpdGVFdmVudCh3ZiwgJ2hvb2tSZXN1bWVkJywgZXZlbnQpO1xuICAgIGNvbGxlY3RlZC5wdXNoKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZG9uZSkgYnJlYWs7XG4gIH1cblxuICByZXR1cm4geyBjb2xsZWN0ZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVFdmVudChcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtLFxuICBldmVudDogc3RyaW5nLFxuICBwYXlsb2FkPzogdW5rbm93blxuKSB7XG4gICd1c2Ugc3RlcCc7XG5cbiAgY29uc29sZS5sb2coJ3dyaXRpbmcgZXZlbnQnLCBldmVudCwgcGF5bG9hZCk7XG4gIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpO1xuICBhd2FpdCB3cml0ZXIud3JpdGUoXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFxuICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgIH0pfVxcclxcbmBcbiAgICApXG4gICk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/world-testing",
3
- "version": "5.0.0-beta.5",
3
+ "version": "5.0.0-beta.51",
4
4
  "description": "Testing utilities and World implementation for Workflow SDK",
5
5
  "main": "dist/src/index.mjs",
6
6
  "files": [
@@ -16,24 +16,25 @@
16
16
  "directory": "packages/world-testing"
17
17
  },
18
18
  "dependencies": {
19
- "@hono/node-server": "1.19.9",
19
+ "@hono/node-server": "1.19.13",
20
+ "@workflow/cli": "5.0.0-beta.51",
21
+ "@workflow/core": "5.0.0-beta.51",
22
+ "@workflow/world": "5.0.0-beta.35",
20
23
  "chalk": "5.6.2",
21
- "hono": "4.12.3",
24
+ "hono": "4.12.25",
22
25
  "jsonlines": "0.1.1",
23
- "zod": "4.3.6",
24
- "@workflow/core": "5.0.0-beta.5",
25
- "@workflow/cli": "5.0.0-beta.5",
26
- "workflow": "5.0.0-beta.5",
27
- "@workflow/world": "5.0.0-beta.2"
26
+ "workflow": "5.0.0-beta.51",
27
+ "zod": "~4.5.4"
28
28
  },
29
29
  "devDependencies": {
30
- "@types/node": "22.19.0",
31
30
  "@types/jsonlines": "0.1.5",
32
- "vitest": "^4.0.18",
33
- "@workflow/tsconfig": "5.0.0-beta.0"
31
+ "@types/node": "22.19.0",
32
+ "@workflow/tsconfig": "5.0.0-beta.0",
33
+ "typescript": "^6.0.3",
34
+ "vitest": "^4.1.10"
34
35
  },
35
36
  "peerDependencies": {
36
- "vitest": "^4.0.18"
37
+ "vitest": "^4.1.10"
37
38
  },
38
39
  "keywords": [],
39
40
  "author": "",
@@ -41,6 +42,6 @@
41
42
  "build": "wf build && node scripts/generate-well-known-dts.mjs && tsc && cp .well-known/workflow/v1/*.mjs dist/.well-known/workflow/v1/",
42
43
  "clean": "tsc --build --clean && rm -rf dist .well-known* .workflow-data",
43
44
  "start": "node --watch src/server.mts",
44
- "test": "vitest"
45
+ "test": "vitest run"
45
46
  }
46
47
  }