@workflow/world-testing 5.0.0-beta.4 → 5.0.0-beta.40
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/.well-known/workflow/v1/__step_registrations.mjs +34320 -0
- package/dist/.well-known/workflow/v1/flow.mjs +127289 -53719
- package/dist/.well-known/workflow/v1/manifest.json +1564 -48
- package/dist/src/addition.mjs +2 -2
- package/dist/src/errors.mjs +2 -2
- package/dist/src/event-limit.d.mts +2 -0
- package/dist/src/event-limit.d.mts.map +1 -0
- package/dist/src/event-limit.mjs +29 -0
- package/dist/src/hooks.mjs +2 -2
- package/dist/src/idempotency.mjs +2 -2
- package/dist/src/index.d.mts.map +1 -1
- package/dist/src/index.mjs +5 -1
- package/dist/src/inline-batches-debug.d.mts +15 -0
- package/dist/src/inline-batches-debug.d.mts.map +1 -0
- package/dist/src/inline-batches-debug.mjs +208 -0
- package/dist/src/inline-execution.d.mts +13 -0
- package/dist/src/inline-execution.d.mts.map +1 -0
- package/dist/src/inline-execution.mjs +100 -0
- package/dist/src/jsonlines.mjs +1 -1
- package/dist/src/lineage.d.mts +8 -0
- package/dist/src/lineage.d.mts.map +1 -0
- package/dist/src/lineage.mjs +48 -0
- package/dist/src/null-byte.mjs +2 -2
- package/dist/src/server.mjs +53 -5
- package/dist/src/util.d.mts +27 -16
- package/dist/src/util.d.mts.map +1 -1
- package/dist/src/util.mjs +59 -6
- package/dist/workflows/hooks.js +1 -1
- package/package.json +13 -12
- package/dist/.well-known/workflow/v1/step.mjs +0 -64515
- package/dist/src/addition.mjs.map +0 -1
- package/dist/src/errors.mjs.map +0 -1
- package/dist/src/hooks.mjs.map +0 -1
- package/dist/src/idempotency.mjs.map +0 -1
- package/dist/src/index.mjs.map +0 -1
- package/dist/src/jsonlines.mjs.map +0 -1
- package/dist/src/null-byte.mjs.map +0 -1
- package/dist/src/server.mjs.map +0 -1
- package/dist/src/util.mjs.map +0 -1
- package/dist/workflows/hooks.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
|
|
2
|
+
import { expect, test, vi } from 'vitest';
|
|
3
|
+
import { createFetcher, startServer } from './util.mjs';
|
|
4
|
+
const awaitCompleted = (server, runId) => vi.waitFor(async () => {
|
|
5
|
+
const run = await server.getRun(runId);
|
|
6
|
+
expect(run.status).toBe('completed');
|
|
7
|
+
return run;
|
|
8
|
+
}, { interval: 200, timeout: 10_000 });
|
|
9
|
+
// The runId a run spawned, read from its return value.
|
|
10
|
+
const spawnedRunId = (run) => hydrateWorkflowReturnValue(run.output, run.runId, undefined);
|
|
11
|
+
/**
|
|
12
|
+
* Proves end-to-end that `start()` called from a workflow *body* (the canonical
|
|
13
|
+
* child-workflow spawn, not from inside a step) records cross-run lineage. The
|
|
14
|
+
* spawned child must carry `$parentRunId`/`$rootRunId` pointing at the parent,
|
|
15
|
+
* while the top-level parent itself carries none.
|
|
16
|
+
*/
|
|
17
|
+
export function lineage(world) {
|
|
18
|
+
test('body-level start() records lineage on the child', { timeout: 30_000 }, async () => {
|
|
19
|
+
const server = await startServer({ world }).then(createFetcher);
|
|
20
|
+
const { runId: parentRunId } = await server.invoke('workflows/lineage.ts', 'bodyStartsChild', []);
|
|
21
|
+
const parent = await awaitCompleted(server, parentRunId);
|
|
22
|
+
const child = await awaitCompleted(server, await spawnedRunId(parent));
|
|
23
|
+
// The child started from the parent's body inherits the lineage; the
|
|
24
|
+
// parent is top-level, so it anchors the root to itself.
|
|
25
|
+
expect(child.attributes?.$parentRunId).toBe(parentRunId);
|
|
26
|
+
expect(child.attributes?.$rootRunId).toBe(parentRunId);
|
|
27
|
+
expect(parent.attributes?.$parentRunId).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
test('a three-level chain groups every run under the same root', { timeout: 30_000 }, async () => {
|
|
30
|
+
const server = await startServer({ world }).then(createFetcher);
|
|
31
|
+
// Each run returns the id of the one it spawned.
|
|
32
|
+
const { runId: rootRunId } = await server.invoke('workflows/lineage.ts', 'chainRoot', []);
|
|
33
|
+
const root = await awaitCompleted(server, rootRunId);
|
|
34
|
+
const middleRunId = await spawnedRunId(root);
|
|
35
|
+
const middle = await awaitCompleted(server, middleRunId);
|
|
36
|
+
const leaf = await awaitCompleted(server, await spawnedRunId(middle));
|
|
37
|
+
// Root is top-level.
|
|
38
|
+
expect(root.attributes?.$parentRunId).toBeUndefined();
|
|
39
|
+
expect(root.attributes?.$rootRunId).toBeUndefined();
|
|
40
|
+
// Middle: root and parent coincide at depth two.
|
|
41
|
+
expect(middle.attributes?.$parentRunId).toBe(rootRunId);
|
|
42
|
+
expect(middle.attributes?.$rootRunId).toBe(rootRunId);
|
|
43
|
+
// Leaf: parent is the middle, but root is still the chain root.
|
|
44
|
+
expect(leaf.attributes?.$parentRunId).toBe(middleRunId);
|
|
45
|
+
expect(leaf.attributes?.$rootRunId).toBe(rootRunId);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZWFnZS5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGluZWFnZS5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXhELE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQ3hELEVBQUUsQ0FBQyxPQUFPLENBQ1IsS0FBSyxJQUFJLEVBQUU7SUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FDbkMsQ0FBQztBQUVKLHVEQUF1RDtBQUN2RCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQXdDLEVBQUUsRUFBRSxDQUNoRSwwQkFBMEIsQ0FDeEIsR0FBRyxDQUFDLE1BQU8sRUFDWCxHQUFHLENBQUMsS0FBSyxFQUNULFNBQVMsQ0FDUyxDQUFDO0FBRXZCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLElBQUksQ0FDRixpREFBaUQsRUFDakQsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLEtBQUssSUFBSSxFQUFFO1FBQ1QsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FDaEQsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixFQUFFLENBQ0gsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2RSxxRUFBcUU7UUFDckUseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUQsQ0FBQyxDQUNGLENBQUM7SUFFRixJQUFJLENBQ0YsMERBQTBELEVBQzFELEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUNuQixLQUFLLElBQUksRUFBRTtRQUNULE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEUsaURBQWlEO1FBQ2pELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUM5QyxzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0RSxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFcEQsaURBQWlEO1FBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsZ0VBQWdFO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxudHlwZSBGZXRjaGVyID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlRmV0Y2hlcj47XG5cbmNvbnN0IGF3YWl0Q29tcGxldGVkID0gKHNlcnZlcjogRmV0Y2hlciwgcnVuSWQ6IHN0cmluZykgPT5cbiAgdmkud2FpdEZvcihcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJ1bklkKTtcbiAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgIHJldHVybiBydW47XG4gICAgfSxcbiAgICB7IGludGVydmFsOiAyMDAsIHRpbWVvdXQ6IDEwXzAwMCB9XG4gICk7XG5cbi8vIFRoZSBydW5JZCBhIHJ1biBzcGF3bmVkLCByZWFkIGZyb20gaXRzIHJldHVybiB2YWx1ZS5cbmNvbnN0IHNwYXduZWRSdW5JZCA9IChydW46IHsgb3V0cHV0PzogdW5rbm93bjsgcnVuSWQ6IHN0cmluZyB9KSA9PlxuICBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICBydW4ub3V0cHV0ISxcbiAgICBydW4ucnVuSWQsXG4gICAgdW5kZWZpbmVkXG4gICkgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFByb3ZlcyBlbmQtdG8tZW5kIHRoYXQgYHN0YXJ0KClgIGNhbGxlZCBmcm9tIGEgd29ya2Zsb3cgKmJvZHkqICh0aGUgY2Fub25pY2FsXG4gKiBjaGlsZC13b3JrZmxvdyBzcGF3biwgbm90IGZyb20gaW5zaWRlIGEgc3RlcCkgcmVjb3JkcyBjcm9zcy1ydW4gbGluZWFnZS4gVGhlXG4gKiBzcGF3bmVkIGNoaWxkIG11c3QgY2FycnkgYCRwYXJlbnRSdW5JZGAvYCRyb290UnVuSWRgIHBvaW50aW5nIGF0IHRoZSBwYXJlbnQsXG4gKiB3aGlsZSB0aGUgdG9wLWxldmVsIHBhcmVudCBpdHNlbGYgY2FycmllcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGluZWFnZSh3b3JsZDogc3RyaW5nKSB7XG4gIHRlc3QoXG4gICAgJ2JvZHktbGV2ZWwgc3RhcnQoKSByZWNvcmRzIGxpbmVhZ2Ugb24gdGhlIGNoaWxkJyxcbiAgICB7IHRpbWVvdXQ6IDMwXzAwMCB9LFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHN0YXJ0U2VydmVyKHsgd29ybGQgfSkudGhlbihjcmVhdGVGZXRjaGVyKTtcblxuICAgICAgY29uc3QgeyBydW5JZDogcGFyZW50UnVuSWQgfSA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAgICd3b3JrZmxvd3MvbGluZWFnZS50cycsXG4gICAgICAgICdib2R5U3RhcnRzQ2hpbGQnLFxuICAgICAgICBbXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcGFyZW50ID0gYXdhaXQgYXdhaXRDb21wbGV0ZWQoc2VydmVyLCBwYXJlbnRSdW5JZCk7XG4gICAgICBjb25zdCBjaGlsZCA9IGF3YWl0IGF3YWl0Q29tcGxldGVkKHNlcnZlciwgYXdhaXQgc3Bhd25lZFJ1bklkKHBhcmVudCkpO1xuXG4gICAgICAvLyBUaGUgY2hpbGQgc3RhcnRlZCBmcm9tIHRoZSBwYXJlbnQncyBib2R5IGluaGVyaXRzIHRoZSBsaW5lYWdlOyB0aGVcbiAgICAgIC8vIHBhcmVudCBpcyB0b3AtbGV2ZWwsIHNvIGl0IGFuY2hvcnMgdGhlIHJvb3QgdG8gaXRzZWxmLlxuICAgICAgZXhwZWN0KGNoaWxkLmF0dHJpYnV0ZXM/LiRwYXJlbnRSdW5JZCkudG9CZShwYXJlbnRSdW5JZCk7XG4gICAgICBleHBlY3QoY2hpbGQuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShwYXJlbnRSdW5JZCk7XG4gICAgICBleHBlY3QocGFyZW50LmF0dHJpYnV0ZXM/LiRwYXJlbnRSdW5JZCkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH1cbiAgKTtcblxuICB0ZXN0KFxuICAgICdhIHRocmVlLWxldmVsIGNoYWluIGdyb3VwcyBldmVyeSBydW4gdW5kZXIgdGhlIHNhbWUgcm9vdCcsXG4gICAgeyB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBzdGFydFNlcnZlcih7IHdvcmxkIH0pLnRoZW4oY3JlYXRlRmV0Y2hlcik7XG5cbiAgICAgIC8vIEVhY2ggcnVuIHJldHVybnMgdGhlIGlkIG9mIHRoZSBvbmUgaXQgc3Bhd25lZC5cbiAgICAgIGNvbnN0IHsgcnVuSWQ6IHJvb3RSdW5JZCB9ID0gYXdhaXQgc2VydmVyLmludm9rZShcbiAgICAgICAgJ3dvcmtmbG93cy9saW5lYWdlLnRzJyxcbiAgICAgICAgJ2NoYWluUm9vdCcsXG4gICAgICAgIFtdXG4gICAgICApO1xuXG4gICAgICBjb25zdCByb290ID0gYXdhaXQgYXdhaXRDb21wbGV0ZWQoc2VydmVyLCByb290UnVuSWQpO1xuICAgICAgY29uc3QgbWlkZGxlUnVuSWQgPSBhd2FpdCBzcGF3bmVkUnVuSWQocm9vdCk7XG4gICAgICBjb25zdCBtaWRkbGUgPSBhd2FpdCBhd2FpdENvbXBsZXRlZChzZXJ2ZXIsIG1pZGRsZVJ1bklkKTtcbiAgICAgIGNvbnN0IGxlYWYgPSBhd2FpdCBhd2FpdENvbXBsZXRlZChzZXJ2ZXIsIGF3YWl0IHNwYXduZWRSdW5JZChtaWRkbGUpKTtcblxuICAgICAgLy8gUm9vdCBpcyB0b3AtbGV2ZWwuXG4gICAgICBleHBlY3Qocm9vdC5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyb290LmF0dHJpYnV0ZXM/LiRyb290UnVuSWQpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgLy8gTWlkZGxlOiByb290IGFuZCBwYXJlbnQgY29pbmNpZGUgYXQgZGVwdGggdHdvLlxuICAgICAgZXhwZWN0KG1pZGRsZS5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmUocm9vdFJ1bklkKTtcbiAgICAgIGV4cGVjdChtaWRkbGUuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShyb290UnVuSWQpO1xuXG4gICAgICAvLyBMZWFmOiBwYXJlbnQgaXMgdGhlIG1pZGRsZSwgYnV0IHJvb3QgaXMgc3RpbGwgdGhlIGNoYWluIHJvb3QuXG4gICAgICBleHBlY3QobGVhZi5hdHRyaWJ1dGVzPy4kcGFyZW50UnVuSWQpLnRvQmUobWlkZGxlUnVuSWQpO1xuICAgICAgZXhwZWN0KGxlYWYuYXR0cmlidXRlcz8uJHJvb3RSdW5JZCkudG9CZShyb290UnVuSWQpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==
|
package/dist/src/null-byte.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { expect, test, vi } from 'vitest';
|
|
2
1
|
import { hydrateWorkflowReturnValue } from '@workflow/core/serialization';
|
|
2
|
+
import { expect, test, vi } from 'vitest';
|
|
3
3
|
import { createFetcher, startServer } from './util.mjs';
|
|
4
4
|
export function nullByte(world) {
|
|
5
5
|
test('supports null bytes in step results', { timeout: 12_000 }, async () => {
|
|
@@ -19,4 +19,4 @@ export function nullByte(world) {
|
|
|
19
19
|
expect(output).toEqual('null byte \0');
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbC1ieXRlLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9udWxsLWJ5dGUubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4RCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQyx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtZQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0Q7WUFDRSxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQ0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQTBCLENBQzdDLEdBQUcsQ0FBQyxNQUFPLEVBQ1gsR0FBRyxDQUFDLEtBQUssRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGV4cGVjdCwgdGVzdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgY3JlYXRlRmV0Y2hlciwgc3RhcnRTZXJ2ZXIgfSBmcm9tICcuL3V0aWwubWpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG51bGxCeXRlKHdvcmxkOiBzdHJpbmcpIHtcbiAgdGVzdCgnc3VwcG9ydHMgbnVsbCBieXRlcyBpbiBzdGVwIHJlc3VsdHMnLCB7IHRpbWVvdXQ6IDEyXzAwMCB9LCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoeyB3b3JsZCB9KS50aGVuKGNyZWF0ZUZldGNoZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5pbnZva2UoXG4gICAgICAnd29ya2Zsb3dzL251bGwtYnl0ZS50cycsXG4gICAgICAnbnVsbEJ5dGVXb3JrZmxvdycsXG4gICAgICBbXVxuICAgICk7XG4gICAgZXhwZWN0KHJlc3VsdC5ydW5JZCkudG9NYXRjaCgvXndydW5fLisvKTtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB2aS53YWl0Rm9yKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgIGV4cGVjdChydW4uc3RhdHVzKS50b0JlKCdjb21wbGV0ZWQnKTtcbiAgICAgICAgZXhwZWN0KHJ1bi5vdXRwdXQpLnRvQmVJbnN0YW5jZU9mKFVpbnQ4QXJyYXkpO1xuICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICBydW4ub3V0cHV0ISxcbiAgICAgIHJ1bi5ydW5JZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgZXhwZWN0KG91dHB1dCkudG9FcXVhbCgnbnVsbCBieXRlIFxcMCcpO1xuICB9KTtcbn1cbiJdfQ==
|
package/dist/src/server.mjs
CHANGED
|
@@ -8,7 +8,6 @@ import { POST as flowPOST } from '../.well-known/workflow/v1/flow.mjs';
|
|
|
8
8
|
import manifest from '../.well-known/workflow/v1/manifest.json' with {
|
|
9
9
|
type: 'json'
|
|
10
10
|
};
|
|
11
|
-
import { POST as stepPOST } from '../.well-known/workflow/v1/step.mjs';
|
|
12
11
|
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
13
12
|
console.error('Error: WORKFLOW_TARGET_WORLD environment variable is not set.');
|
|
14
13
|
process.exit(1);
|
|
@@ -29,12 +28,37 @@ const Invoke = z
|
|
|
29
28
|
workflow: manifest.workflows[file][workflow],
|
|
30
29
|
};
|
|
31
30
|
});
|
|
31
|
+
// Track flow handler invocations per run for testing inline execution
|
|
32
|
+
const flowInvocationCounts = new Map();
|
|
32
33
|
const app = new Hono()
|
|
33
|
-
.post('/.well-known/workflow/v1/flow', (ctx) => {
|
|
34
|
+
.post('/.well-known/workflow/v1/flow', async (ctx) => {
|
|
35
|
+
// Clone the request to read the body for tracking without consuming it.
|
|
36
|
+
// We must increment the invocation counter *before* awaiting flowPOST,
|
|
37
|
+
// otherwise the workflow may complete (and the test may observe the
|
|
38
|
+
// completed status) before the counter is bumped, producing a flaky
|
|
39
|
+
// `expected 0 to be 1` failure when the test immediately queries
|
|
40
|
+
// /_flow-invocations after seeing the run as completed.
|
|
41
|
+
const cloned = ctx.req.raw.clone();
|
|
42
|
+
try {
|
|
43
|
+
const body = (await cloned.json());
|
|
44
|
+
const runId = typeof body?.runId === 'string'
|
|
45
|
+
? body.runId
|
|
46
|
+
: typeof body.payload
|
|
47
|
+
?.runId === 'string'
|
|
48
|
+
? body.payload.runId
|
|
49
|
+
: undefined;
|
|
50
|
+
if (runId) {
|
|
51
|
+
flowInvocationCounts.set(runId, (flowInvocationCounts.get(runId) ?? 0) + 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Health check or non-JSON messages — ignore
|
|
56
|
+
}
|
|
34
57
|
return flowPOST(ctx.req.raw);
|
|
35
58
|
})
|
|
36
|
-
.
|
|
37
|
-
|
|
59
|
+
.get('/_flow-invocations/:runId', (ctx) => {
|
|
60
|
+
const count = flowInvocationCounts.get(ctx.req.param('runId')) ?? 0;
|
|
61
|
+
return ctx.json({ count });
|
|
38
62
|
})
|
|
39
63
|
.get('/_manifest', (ctx) => ctx.json(manifest))
|
|
40
64
|
.post('/invoke', async (ctx) => {
|
|
@@ -71,6 +95,30 @@ const app = new Hono()
|
|
|
71
95
|
const runId = ctx.req.param('runId');
|
|
72
96
|
const run = getRun(runId);
|
|
73
97
|
return new Response(run.getReadable());
|
|
98
|
+
})
|
|
99
|
+
.get('/runs/:runId/events', async (ctx) => {
|
|
100
|
+
const runId = ctx.req.param('runId');
|
|
101
|
+
const world = await getWorld();
|
|
102
|
+
const allEvents = [];
|
|
103
|
+
let cursor;
|
|
104
|
+
while (true) {
|
|
105
|
+
const page = await world.events.list({
|
|
106
|
+
runId,
|
|
107
|
+
pagination: { sortOrder: 'asc', cursor },
|
|
108
|
+
});
|
|
109
|
+
for (const e of page.data) {
|
|
110
|
+
allEvents.push({
|
|
111
|
+
eventType: e.eventType,
|
|
112
|
+
correlationId: e.correlationId,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (!page.hasMore)
|
|
116
|
+
break;
|
|
117
|
+
cursor = page.cursor ?? undefined;
|
|
118
|
+
if (!cursor)
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
return ctx.json({ events: allEvents });
|
|
74
122
|
});
|
|
75
123
|
serve({
|
|
76
124
|
fetch: app.fetch,
|
|
@@ -98,4 +146,4 @@ serve({
|
|
|
98
146
|
control.end();
|
|
99
147
|
}
|
|
100
148
|
});
|
|
101
|
-
//# sourceMappingURL=server.mjs.map
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUN6QixPQUFPLEVBQUUsSUFBSSxJQUFJLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sUUFBUSxNQUFNLDBDQUEwQyxDQUFDO0lBQzlELElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FDWCwrREFBK0QsQ0FDaEUsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQU1ELE1BQU0sTUFBTSxHQUFHLENBQUM7S0FDYixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQXlCLENBQUM7SUFDckUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0NBQ3RDLENBQUM7S0FDRCxTQUFTLENBQUMsQ0FBQyxH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Q0FBQztJQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDNUMsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUN0QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLEVBQzlDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgc2VydmUgfSBmcm9tICdAaG9uby9ub2RlLXNlcnZlcic7XG5pbXBvcnQgeyBIb25vIH0gZnJvbSAnaG9ubyc7XG5pbXBvcnQgeyBnZXRIb29rQnlUb2tlbiwgZ2V0UnVuLCByZXN1bWVIb29rLCBzdGFydCB9IGZyb20gJ3dvcmtmbG93L2FwaSc7XG5pbXBvcnQgeyBnZXRXb3JsZCB9IGZyb20gJ3dvcmtmbG93L3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgeiBmcm9tICd6b2QnO1xuaW1wb3J0IHsgUE9TVCBhcyBmbG93UE9TVCB9IGZyb20gJy4uLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cubWpzJztcbmltcG9ydCBtYW5pZmVzdCBmcm9tICcuLi8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyB3aXRoIHtcbiAgdHlwZTogJ2pzb24nLFxufTtcblxuaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnRXJyb3I6IFdPUktGTE9XX1RBUkdFVF9XT1JMRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LidcbiAgKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG50eXBlIEZpbGVzID0ga2V5b2YgdHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cztcbnR5cGUgV29ya2Zsb3dzPEYgZXh0ZW5kcyBGaWxlcz4gPSBrZXlvZiAodHlwZW9mIG1hbmlmZXN0LndvcmtmbG93cylbRl07XG50eXBlIE5vbkVtcHR5QXJyYXk8VD4gPSBbVCwgLi4uVFtdXTtcblxuY29uc3QgSW52b2tlID0gelxuICAub2JqZWN0KHtcbiAgICBmaWxlOiB6LmVudW0oT2JqZWN0LmtleXMobWFuaWZlc3Qud29ya2Zsb3dzKSBhcyBOb25FbXB0eUFycmF5PEZpbGVzPiksXG4gICAgd29ya2Zsb3c6IHouc3RyaW5nKCksXG4gICAgYXJnczogei51bmtub3duKCkuYXJyYXkoKS5kZWZhdWx0KFtdKSxcbiAgfSlcbiAgLnRyYW5zZm9ybSgob2JqKSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IG9iai5maWxlIGFzIGtleW9mIHR5cGVvZiBtYW5pZmVzdC53b3JrZmxvd3M7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSB6XG4gICAgICAuZW51bShcbiAgICAgICAgT2JqZWN0LmtleXMobWFuaWZlc3Qud29ya2Zsb3dzW2ZpbGVdKSBhcyBOb25FbXB0eUFycmF5PFxuICAgICAgICAgIFdvcmtmbG93czx0eXBlb2YgZmlsZT5cbiAgICAgICAgPlxuICAgICAgKVxuICAgICAgLnBhcnNlKG9iai53b3JrZmxvdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3M6IG9iai5hcmdzLFxuICAgICAgd29ya2Zsb3c6IG1hbmlmZXN0LndvcmtmbG93c1tmaWxlXVt3b3JrZmxvd10sXG4gICAgfTtcbiAgfSk7XG5cbi8vIFRyYWNrIGZsb3cgaGFuZGxlciBpbnZvY2F0aW9ucyBwZXIgcnVuIGZvciB0ZXN0aW5nIGlubGluZSBleGVjdXRpb25cbmNvbnN0IGZsb3dJbnZvY2F0aW9uQ291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuY29uc3QgYXBwID0gbmV3IEhvbm8oKVxuICAucG9zdCgnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgLy8gQ2xvbmUgdGhlIHJlcXVlc3QgdG8gcmVhZCB0aGUgYm9keSBmb3IgdHJhY2tpbmcgd2l0aG91dCBjb25zdW1pbmcgaXQuXG4gICAgLy8gV2UgbXVzdCBpbmNyZW1lbnQgdGhlIGludm9jYXRpb24gY291bnRlciAqYmVmb3JlKiBhd2FpdGluZyBmbG93UE9TVCxcbiAgICAvLyBvdGhlcndpc2UgdGhlIHdvcmtmbG93IG1heSBjb21wbGV0ZSAoYW5kIHRoZSB0ZXN0IG1heSBvYnNlcnZlIHRoZVxuICAgIC8vIGNvbXBsZXRlZCBzdGF0dXMpIGJlZm9yZSB0aGUgY291bnRlciBpcyBidW1wZWQsIHByb2R1Y2luZyBhIGZsYWt5XG4gICAgLy8gYGV4cGVjdGVkIDAgdG8gYmUgMWAgZmFpbHVyZSB3aGVuIHRoZSB0ZXN0IGltbWVkaWF0ZWx5IHF1ZXJpZXNcbiAgICAvLyAvX2Zsb3ctaW52b2NhdGlvbnMgYWZ0ZXIgc2VlaW5nIHRoZSBydW4gYXMgY29tcGxldGVkLlxuICAgIGNvbnN0IGNsb25lZCA9IGN0eC5yZXEucmF3LmNsb25lKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgY2xvbmVkLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBydW5JZCA9XG4gICAgICAgIHR5cGVvZiBib2R5Py5ydW5JZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGJvZHkucnVuSWRcbiAgICAgICAgICA6IHR5cGVvZiAoYm9keS5wYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgID8ucnVuSWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/ICgoYm9keS5wYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ydW5JZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChydW5JZCkge1xuICAgICAgICBmbG93SW52b2NhdGlvbkNvdW50cy5zZXQoXG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgKGZsb3dJbnZvY2F0aW9uQ291bnRzLmdldChydW5JZCkgPz8gMCkgKyAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBIZWFsdGggY2hlY2sgb3Igbm9uLUpTT04gbWVzc2FnZXMg4oCUIGlnbm9yZVxuICAgIH1cbiAgICByZXR1cm4gZmxvd1BPU1QoY3R4LnJlcS5yYXcpO1xuICB9KVxuICAuZ2V0KCcvX2Zsb3ctaW52b2NhdGlvbnMvOnJ1bklkJywgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gZmxvd0ludm9jYXRpb25Db3VudHMuZ2V0KGN0eC5yZXEucGFyYW0oJ3J1bklkJykpID8/IDA7XG4gICAgcmV0dXJuIGN0eC5qc29uKHsgY291bnQgfSk7XG4gIH0pXG4gIC5nZXQoJy9fbWFuaWZlc3QnLCAoY3R4KSA9PiBjdHguanNvbihtYW5pZmVzdCkpXG4gIC5wb3N0KCcvaW52b2tlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBjdHgucmVxLmpzb24oKS50aGVuKEludm9rZS5wYXJzZSk7XG4gICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IHN0YXJ0KGpzb24ud29ya2Zsb3csIGpzb24uYXJncyk7XG5cbiAgICByZXR1cm4gY3R4Lmpzb24oeyBydW5JZDogaGFuZGxlci5ydW5JZCB9KTtcbiAgfSlcbiAgLnBvc3QoJy9ob29rcy86dG9rZW4nLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IGdldEhvb2tCeVRva2VuKGN0eC5yZXEucGFyYW0oJ3Rva2VuJykpO1xuICAgIGNvbnN0IHsgcnVuSWQgfSA9IGF3YWl0IHJlc3VtZUhvb2soaG9vay50b2tlbiwge1xuICAgICAgLi4uKGF3YWl0IGN0eC5yZXEuanNvbigpKSxcbiAgICAgIG1ldGFkYXRhOiBob29rLm1ldGFkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBjdHguanNvbih7IHJ1bklkLCBob29rSWQ6IGhvb2suaG9va0lkIH0pO1xuICB9KVxuICAuZ2V0KCcvcnVucy86cnVuSWQnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCBnZXRXb3JsZCgpO1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KGN0eC5yZXEucGFyYW0oJ3J1bklkJykpO1xuICAgIC8vIEN1c3RvbSBKU09OIHNlcmlhbGl6YXRpb24gdG8gaGFuZGxlIFVpbnQ4QXJyYXkgYXMgYmFzZTY0XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHJ1biwgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlOiAnVWludDhBcnJheScsXG4gICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGpzb24sIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICB9KVxuICAuZ2V0KCcvcnVucy86cnVuSWQvcmVhZGFibGUnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgcnVuSWQgPSBjdHgucmVxLnBhcmFtKCdydW5JZCcpO1xuICAgIGNvbnN0IHJ1biA9IGdldFJ1bihydW5JZCk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShydW4uZ2V0UmVhZGFibGUoKSk7XG4gIH0pXG4gIC5nZXQoJy9ydW5zLzpydW5JZC9ldmVudHMnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgcnVuSWQgPSBjdHgucmVxLnBhcmFtKCdydW5JZCcpO1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgZ2V0V29ybGQoKTtcbiAgICBjb25zdCBhbGxFdmVudHM6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfVtdID0gW107XG4gICAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgd29ybGQuZXZlbnRzLmxpc3Qoe1xuICAgICAgICBydW5JZCxcbiAgICAgICAgcGFnaW5hdGlvbjogeyBzb3J0T3JkZXI6ICdhc2MnLCBjdXJzb3IgfSxcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBlIG9mIHBhZ2UuZGF0YSkge1xuICAgICAgICBhbGxFdmVudHMucHVzaCh7XG4gICAgICAgICAgZXZlbnRUeXBlOiBlLmV2ZW50VHlwZSxcbiAgICAgICAgICBjb3JyZWxhdGlvbklkOiBlLmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFwYWdlLmhhc01vcmUpIGJyZWFrO1xuICAgICAgY3Vyc29yID0gcGFnZS5jdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFjdXJzb3IpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gY3R4Lmpzb24oeyBldmVudHM6IGFsbEV2ZW50cyB9KTtcbiAgfSk7XG5cbnNlcnZlKFxuICB7XG4gICAgZmV0Y2g6IGFwcC5mZXRjaCxcbiAgICBwb3J0OiBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCkgfHwgMCxcbiAgfSxcbiAgYXN5bmMgKGluZm8pID0+IHtcbiAgICBjb25zb2xlLmxvZyhg8J+RgiBsaXN0ZW5pbmcgb24gaHR0cDovLyR7aW5mby5hZGRyZXNzfToke2luZm8ucG9ydH1gKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICBwcm9jZXNzLmVudi5QT1JUID0gaW5mby5wb3J0LnRvU3RyaW5nKCk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWxlbmFtZSwgd29ya2Zsb3dzXSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC53b3JrZmxvd3MpKSB7XG4gICAgICBmb3IgKGNvbnN0IHdvcmtmbG93TmFtZSBvZiBPYmplY3Qua2V5cyhcbiAgICAgICAgd29ya2Zsb3dzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICApKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAkIGN1cmwgLVggUE9TVCBodHRwOi8vbG9jYWxob3N0OiR7aW5mby5wb3J0fS9pbnZva2UgLWQgJyR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvdzogd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICl9J2BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IGdldFdvcmxkKCk7XG4gICAgaWYgKHdvcmxkLnN0YXJ0KSB7XG4gICAgICBjb25zb2xlLmxvZyhgc3RhcnRpbmcgYmFja2dyb3VuZCB0YXNrcy4uLmApO1xuICAgICAgYXdhaXQgd29ybGQuc3RhcnQoKS50aGVuKFxuICAgICAgICAoKSA9PiBjb25zb2xlLmxvZygnYmFja2dyb3VuZCB0YXNrcyBzdGFydGVkLicpLFxuICAgICAgICAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCfinZcgZXJyb3Igc3RhcnRpbmcgYmFja2dyb3VuZCB0YXNrczonLCBlcnIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5DT05UUk9MX0ZEID09PSAnMycpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbSgnJywgeyBmZDogMyB9KTtcbiAgICAgIGNvbnRyb2wud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBzdGF0ZTogJ2xpc3RlbmluZycsIGluZm8gfSl9XFxuYCk7XG4gICAgICBjb250cm9sLmVuZCgpO1xuICAgIH1cbiAgfVxuKTtcbiJdfQ==
|
package/dist/src/util.d.mts
CHANGED
|
@@ -12,7 +12,9 @@ type Files = keyof typeof manifest.workflows;
|
|
|
12
12
|
type Workflows<F extends Files> = keyof (typeof manifest.workflows)[F];
|
|
13
13
|
export declare function startServer(opts: {
|
|
14
14
|
world: string;
|
|
15
|
+
env?: Record<string, string | undefined>;
|
|
15
16
|
}): Promise<{
|
|
17
|
+
getOutput: () => string;
|
|
16
18
|
state: "listening";
|
|
17
19
|
info: {
|
|
18
20
|
port: number;
|
|
@@ -22,70 +24,79 @@ export declare function createFetcher(control: Control): {
|
|
|
22
24
|
invoke<F extends Files, W extends Workflows<F>>(file: F, workflow: W, args: unknown[]): Promise<{
|
|
23
25
|
runId: string;
|
|
24
26
|
}>;
|
|
27
|
+
getFlowInvocationCount(runId: string): Promise<number>;
|
|
25
28
|
getRun(id: string): Promise<{
|
|
26
29
|
runId: string;
|
|
27
30
|
deploymentId: string;
|
|
28
31
|
workflowName: string;
|
|
29
|
-
|
|
32
|
+
attributes: Record<string, string>;
|
|
30
33
|
createdAt: Date;
|
|
31
34
|
updatedAt: Date;
|
|
32
35
|
status: "pending" | "running";
|
|
33
|
-
output: undefined;
|
|
34
|
-
error: undefined;
|
|
35
|
-
completedAt: undefined;
|
|
36
36
|
specVersion?: number | undefined;
|
|
37
37
|
executionContext?: Record<string, any> | undefined;
|
|
38
|
+
input?: unknown;
|
|
39
|
+
errorCode?: string | undefined;
|
|
40
|
+
encryptionPublicKey?: string | undefined;
|
|
38
41
|
expiredAt?: Date | undefined;
|
|
39
42
|
startedAt?: Date | undefined;
|
|
43
|
+
output?: undefined;
|
|
44
|
+
error?: undefined;
|
|
45
|
+
completedAt?: undefined;
|
|
40
46
|
} | {
|
|
41
47
|
runId: string;
|
|
42
48
|
deploymentId: string;
|
|
43
49
|
workflowName: string;
|
|
44
|
-
|
|
50
|
+
attributes: Record<string, string>;
|
|
45
51
|
createdAt: Date;
|
|
46
52
|
updatedAt: Date;
|
|
47
53
|
status: "cancelled";
|
|
48
|
-
output: undefined;
|
|
49
|
-
error: undefined;
|
|
50
54
|
completedAt: Date;
|
|
51
55
|
specVersion?: number | undefined;
|
|
52
56
|
executionContext?: Record<string, any> | undefined;
|
|
57
|
+
input?: unknown;
|
|
58
|
+
errorCode?: string | undefined;
|
|
59
|
+
encryptionPublicKey?: string | undefined;
|
|
53
60
|
expiredAt?: Date | undefined;
|
|
54
61
|
startedAt?: Date | undefined;
|
|
62
|
+
output?: undefined;
|
|
63
|
+
error?: undefined;
|
|
55
64
|
} | {
|
|
56
65
|
runId: string;
|
|
57
66
|
deploymentId: string;
|
|
58
67
|
workflowName: string;
|
|
59
|
-
|
|
68
|
+
attributes: Record<string, string>;
|
|
60
69
|
createdAt: Date;
|
|
61
70
|
updatedAt: Date;
|
|
62
71
|
status: "completed";
|
|
63
72
|
output: unknown;
|
|
64
|
-
error: undefined;
|
|
65
73
|
completedAt: Date;
|
|
66
74
|
specVersion?: number | undefined;
|
|
67
75
|
executionContext?: Record<string, any> | undefined;
|
|
76
|
+
input?: unknown;
|
|
77
|
+
errorCode?: string | undefined;
|
|
78
|
+
encryptionPublicKey?: string | undefined;
|
|
68
79
|
expiredAt?: Date | undefined;
|
|
69
80
|
startedAt?: Date | undefined;
|
|
81
|
+
error?: undefined;
|
|
70
82
|
} | {
|
|
71
83
|
runId: string;
|
|
72
84
|
deploymentId: string;
|
|
73
85
|
workflowName: string;
|
|
74
|
-
|
|
86
|
+
attributes: Record<string, string>;
|
|
75
87
|
createdAt: Date;
|
|
76
88
|
updatedAt: Date;
|
|
77
89
|
status: "failed";
|
|
78
|
-
|
|
79
|
-
error: {
|
|
80
|
-
message: string;
|
|
81
|
-
stack?: string | undefined;
|
|
82
|
-
code?: string | undefined;
|
|
83
|
-
};
|
|
90
|
+
error: unknown;
|
|
84
91
|
completedAt: Date;
|
|
85
92
|
specVersion?: number | undefined;
|
|
86
93
|
executionContext?: Record<string, any> | undefined;
|
|
94
|
+
input?: unknown;
|
|
95
|
+
errorCode?: string | undefined;
|
|
96
|
+
encryptionPublicKey?: string | undefined;
|
|
87
97
|
expiredAt?: Date | undefined;
|
|
88
98
|
startedAt?: Date | undefined;
|
|
99
|
+
output?: undefined;
|
|
89
100
|
}>;
|
|
90
101
|
getReadable(id: string): Promise<ReadableStream<Uint8Array>>;
|
|
91
102
|
resumeHook<T extends TypedHook<any, any>>(token: string, payload: Omit<NoInfer<TypedHook.Input<T>>, "metadata">): Promise<void>;
|
package/dist/src/util.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.mts","sourceRoot":"","sources":["../../src/util.mts"],"names":[],"mappings":"
|
|
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;;;;;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;;;;;;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;;;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"}
|
package/dist/src/util.mjs
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
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';
|
|
@@ -17,23 +22,62 @@ export async function startServer(opts) {
|
|
|
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,
|
|
39
|
+
...(opts.env ?? {}),
|
|
26
40
|
},
|
|
27
41
|
});
|
|
28
|
-
onTestFinished(() => {
|
|
29
|
-
|
|
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
|
+
});
|
|
30
67
|
});
|
|
31
68
|
const stdio = [];
|
|
69
|
+
// Accumulated raw server output — used by tests that want to inspect
|
|
70
|
+
// debug logs (e.g., count runtime iterations, event loads, etc.).
|
|
71
|
+
const outputBuffer = [];
|
|
32
72
|
proc.stdout?.on('data', (chunk) => {
|
|
33
|
-
|
|
73
|
+
const str = chunk.toString();
|
|
74
|
+
stdio.push({ stream: chalk.white, chunk: str });
|
|
75
|
+
outputBuffer.push(str);
|
|
34
76
|
});
|
|
35
77
|
proc.stderr?.on('data', (chunk) => {
|
|
36
|
-
|
|
78
|
+
const str = chunk.toString();
|
|
79
|
+
stdio.push({ stream: chalk.red, chunk: str });
|
|
80
|
+
outputBuffer.push(str);
|
|
37
81
|
});
|
|
38
82
|
onTestFailed(() => {
|
|
39
83
|
console.log('=== SERVER STDIO ===');
|
|
@@ -46,7 +90,11 @@ export async function startServer(opts) {
|
|
|
46
90
|
const fd3 = proc.stdio[3];
|
|
47
91
|
assert(fd3, 'fd3 should be defined');
|
|
48
92
|
for await (const chunk of fd3.pipe(jsonlines.parse())) {
|
|
49
|
-
|
|
93
|
+
const control = Control.parse(chunk);
|
|
94
|
+
return {
|
|
95
|
+
...control,
|
|
96
|
+
getOutput: () => outputBuffer.join(''),
|
|
97
|
+
};
|
|
50
98
|
}
|
|
51
99
|
throw new Error('Server did not start correctly');
|
|
52
100
|
}
|
|
@@ -67,6 +115,11 @@ export function createFetcher(control) {
|
|
|
67
115
|
});
|
|
68
116
|
return data;
|
|
69
117
|
},
|
|
118
|
+
async getFlowInvocationCount(runId) {
|
|
119
|
+
const x = await fetch(`http://localhost:${control.info.port}/_flow-invocations/${encodeURIComponent(runId)}`);
|
|
120
|
+
const data = (await x.json());
|
|
121
|
+
return data.count;
|
|
122
|
+
},
|
|
70
123
|
async getRun(id) {
|
|
71
124
|
const x = await fetch(`http://localhost:${control.info.port}/runs/${encodeURIComponent(id)}`);
|
|
72
125
|
const text = await x.text();
|
|
@@ -107,4 +160,4 @@ export function createFetcher(control) {
|
|
|
107
160
|
},
|
|
108
161
|
};
|
|
109
162
|
}
|
|
110
|
-
//# sourceMappingURL=util.mjs.map
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxLQUE2QixNQUFNLE9BQU8sQ0FBQztBQUNsRCxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBR3pCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlCLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNiLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFNSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUdqQztJQUNDLElBQUksVUFBVSxHQUFHLElBQUksR0FBRyxDQUFD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LENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDN0QsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxLQUFLLENBQUMsVUFBVSxDQUNkLEtBQWEsRUFDYixPQUFzRDtZQUV0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FDckIsb0JBQW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEtBQUssRUFBRSxFQUN0RDtnQkFDRSxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtpQkFDbkM7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2FBQzlCLENBQ0YsQ0FBQztZQUNGLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7WUFDNUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksS0FBSyxDQUNiLDBCQUEwQixHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDekQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3AgZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW5TY2hlbWEgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNoYWxrLCB7IHR5cGUgQ2hhbGtJbnN0YW5jZSB9IGZyb20gJ2NoYWxrJztcbmltcG9ydCBqc29ubGluZXMgZnJvbSAnanNvbmxpbmVzJztcbmltcG9ydCB7IGFzc2VydCwgb25UZXN0RmFpbGVkLCBvblRlc3RGaW5pc2hlZCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgdHlwZSB7IFR5cGVkSG9vayB9IGZyb20gJ3dvcmtmbG93JztcbmltcG9ydCAqIGFzIHogZnJvbSAnem9kJztcbmltcG9ydCB0eXBlIG1hbmlmZXN0IGZyb20gJy4uLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nO1xuXG5leHBvcnQgY29uc3QgQ29udHJvbCA9IHoub2JqZWN0KHtcbiAgc3RhdGU6IHoubGl0ZXJhbCgnbGlzdGVuaW5nJyksXG4gIGluZm86IHoub2JqZWN0KHtcbiAgICBwb3J0OiB6Lm51bWJlcigpLFxuICB9KSxcbn0pO1xudHlwZSBDb250cm9sID0gei5pbmZlcjx0eXBlb2YgQ29udHJvbD47XG5cbnR5cGUgRmlsZXMgPSBrZXlvZiB0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzO1xudHlwZSBXb3JrZmxvd3M8RiBleHRlbmRzIEZpbGVzPiA9IGtleW9mICh0eXBlb2YgbWFuaWZlc3Qud29ya2Zsb3dzKVtGXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0U2VydmVyKG9wdHM6IHtcbiAgd29ybGQ6IHN0cmluZztcbiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbn0pIHtcbiAgbGV0IHNlcnZlclBhdGggPSBuZXcgVVJMKCcuL3NlcnZlci5tdHMnLCBpbXBvcnQubWV0YS51cmwpO1xuXG4gIGlmICghZXhpc3RzU3luYyhzZXJ2ZXJQYXRoKSkge1xuICAgIHNlcnZlclBhdGggPSBuZXcgVVJMKCcuL3NlcnZlci5tanMnLCBpbXBvcnQubWV0YS51cmwpO1xuICB9XG5cbiAgLy8gR2l2ZSBlYWNoIHNwYXduZWQgc2VydmVyIGl0cyBvd24gZGF0YSBkaXJlY3RvcnkuIFRoZSBMb2NhbCBXb3JsZCdzIGRlZmF1bHRcbiAgLy8gKHVudGFnZ2VkKSBgLndvcmtmbG93LWRhdGFgIGRpciBpcyBvdGhlcndpc2Ugc2hhcmVkIGJ5IGV2ZXJ5IGNvbmN1cnJlbnRseVxuICAvLyBydW5uaW5nIHRlc3QgZmlsZSdzIHNlcnZlciwgYW5kIGl0cyBzdGFydHVwIHJlY292ZXJ5IHN3ZWVwIHJlLWVucXVldWVzXG4gIC8vIGV2ZXJ5IHVudGFnZ2VkIHJ1biBpdCBmaW5kcyDigJQgaW5jbHVkaW5nIHJ1bnMgc3RpbGwgbWlkLWZsaWdodCBpbiBhbm90aGVyXG4gIC8vIHRlc3QncyBzZXJ2ZXIg4oCUIGRpc3BhdGNoaW5nIHRoZW0gYWdhaW5zdCB0aGUgc2FtZSBvbi1kaXNrIGV2ZW50IGxvZyBhbmRcbiAgLy8gcmFjaW5nIHRoZSBydW4ncyBhY3R1YWwgb3duZXIgaW50byBzcHVyaW91cyBgUmVwbGF5RGl2ZXJnZW5jZUVycm9yYHMuXG4gIGNvbnN0IGRhdGFEaXIgPSBqb2luKFxuICAgIHRtcGRpcigpLFxuICAgIGB3b3JrZmxvdy13b3JsZC10ZXN0aW5nLSR7cHJvY2Vzcy5waWR9LSR7cmFuZG9tVVVJRCgpfWBcbiAgKTtcblxuICBjb25zdCBwcm9jID0gY3Auc3Bhd24oJ25vZGUnLCBbZmlsZVVSTFRvUGF0aChzZXJ2ZXJQYXRoKV0sIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICBlbnY6IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgV09SS0ZMT1dfVEFSR0VUX1dPUkxEOiBvcHRzLndvcmxkLFxuICAgICAgQ09OVFJPTF9GRDogJzMnLFxuICAgICAgV09SS0ZMT1dfTE9DQUxfREFUQV9ESVI6IGRhdGFEaXIsXG4gICAgICAuLi4ob3B0cy5lbnYgPz8ge30pLFxuICAgIH0sXG4gIH0pO1xuICBvblRlc3RGaW5pc2hlZChhc3luYyAoKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGNoaWxkIHRvIGFjdHVhbGx5IGV4aXQgYmVmb3JlIHJlbW92aW5nIGl0cyBkYXRhIGRpcmVjdG9yeTpcbiAgICAvLyBga2lsbCgpYCBvbmx5IHJlcXVlc3RzIHRlcm1pbmF0aW9uLCBhbmQgb24gV2luZG93cyBgcm0oKWAgZmFpbHMgd2l0aFxuICAgIC8vIEVQRVJNL0VCVVNZIHdoaWxlIHRoZSBzZXJ2ZXIgc3RpbGwgaG9sZHMgZmlsZSBoYW5kbGVzIGluIGBkYXRhRGlyYC5cbiAgICBpZiAocHJvYy5leGl0Q29kZSA9PT0gbnVsbCAmJiBwcm9jLnNpZ25hbENvZGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV4aXRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXhpdCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICB9KTtcbiAgICAgIHByb2Mua2lsbCgpO1xuICAgICAgLy8gQm91bmRlZCwgc28gYSBjaGlsZCB0aGF0IHJlZnVzZXMgdG8gZGllIGNhbid0IGhhbmcgdGVzdCB0ZWFyZG93bi5cbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGV4aXRlZCxcbiAgICAgICAgc2V0VGltZW91dCg1XzAwMCwgdW5kZWZpbmVkLCB7IHJlZjogZmFsc2UgfSksXG4gICAgICBdKTtcbiAgICB9XG4gICAgLy8gV2luZG93cyBjYW4gaG9sZCB0aGUgaGFuZGxlcyBmb3IgYSBtb21lbnQgcGFzdCBleGl0LCBoZW5jZSB0aGUgcmV0cmllcy5cbiAgICAvLyBBIGxlYWtlZCB0ZW1wIGRpciBpcyBub3Qgd29ydGggZmFpbGluZyBhbiBvdGhlcndpc2UgcGFzc2luZyB0ZXN0IG92ZXIuXG4gICAgYXdhaXQgcm0oZGF0YURpciwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgZm9yY2U6IHRydWUsXG4gICAgICBtYXhSZXRyaWVzOiAxMCxcbiAgICAgIHJldHJ5RGVsYXk6IDEwMCxcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZW1vdmUgdGVzdCBkYXRhIGRpciAke2RhdGFEaXJ9OmAsIGVycik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHN0ZGlvID0gW10gYXMgeyBzdHJlYW06IENoYWxrSW5zdGFuY2U7IGNodW5rOiBzdHJpbmcgfVtdO1xuICAvLyBBY2N1bXVsYXRlZCByYXcgc2VydmVyIG91dHB1dCDigJQgdXNlZCBieSB0ZXN0cyB0aGF0IHdhbnQgdG8gaW5zcGVjdFxuICAvLyBkZWJ1ZyBsb2dzIChlLmcuLCBjb3VudCBydW50aW1lIGl0ZXJhdGlvbnMsIGV2ZW50IGxvYWRzLCBldGMuKS5cbiAgY29uc3Qgb3V0cHV0QnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuICBwcm9jLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLndoaXRlLCBjaHVuazogc3RyIH0pO1xuICAgIG91dHB1dEJ1ZmZlci5wdXNoKHN0cik7XG4gIH0pO1xuICBwcm9jLnN0ZGVycj8ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBjb25zdCBzdHIgPSBjaHVuay50b1N0cmluZygpO1xuICAgIHN0ZGlvLnB1c2goeyBzdHJlYW06IGNoYWxrLnJlZCwgY2h1bms6IHN0ciB9KTtcbiAgICBvdXRwdXRCdWZmZXIucHVzaChzdHIpO1xuICB9KTtcblxuICBvblRlc3RGYWlsZWQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCc9PT0gU0VSVkVSIFNURElPID09PScpO1xuICAgIGxldCBidWZmZXIgPSAnJztcbiAgICBmb3IgKGNvbnN0IHsgc3RyZWFtLCBjaHVuayB9IG9mIHN0ZGlvKSB7XG4gICAgICBidWZmZXIgKz0gc3RyZWFtLmludmVyc2UoY2h1bmspO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhidWZmZXIpO1xuICB9KTtcblxuICBjb25zdCBmZDMgPSBwcm9jLnN0ZGlvWzNdO1xuICBhc3NlcnQoZmQzLCAnZmQzIHNob3VsZCBiZSBkZWZpbmVkJyk7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBmZDMucGlwZShqc29ubGluZXMucGFyc2UoKSkpIHtcbiAgICBjb25zdCBjb250cm9sID0gQ29udHJvbC5wYXJzZShjaHVuayk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbnRyb2wsXG4gICAgICBnZXRPdXRwdXQ6ICgpID0+IG91dHB1dEJ1ZmZlci5qb2luKCcnKSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHknKTtcbn1cblxuY29uc3QgSW52b2tlID0gei5vYmplY3QoeyBydW5JZDogei5jb2VyY2Uuc3RyaW5nKCkgfSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZXRjaGVyKGNvbnRyb2w6IENvbnRyb2wpIHtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBpbnZva2U8RiBleHRlbmRzIEZpbGVzLCBXIGV4dGVuZHMgV29ya2Zsb3dzPEY+PihcbiAgICAgIGZpbGU6IEYsXG4gICAgICB3b3JrZmxvdzogVyxcbiAgICAgIGFyZ3M6IHVua25vd25bXVxuICAgICkge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L2ludm9rZWAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGZpbGUsIHdvcmtmbG93LCBhcmdzIH0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgeC5qc29uKCkudGhlbihJbnZva2UucGFyc2UpO1xuICAgICAgb25UZXN0RmFpbGVkKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgcnVuOicsIGRhdGEucnVuSWQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIGFzeW5jIGdldEZsb3dJbnZvY2F0aW9uQ291bnQocnVuSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L19mbG93LWludm9jYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJ1bklkKX1gXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCB4Lmpzb24oKSkgYXMgeyBjb3VudDogbnVtYmVyIH07XG4gICAgICByZXR1cm4gZGF0YS5jb3VudDtcbiAgICB9LFxuICAgIGFzeW5jIGdldFJ1bihpZDogc3RyaW5nKSB7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L3J1bnMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWBcbiAgICAgICk7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgeC50ZXh0KCk7XG4gICAgICAvLyBDdXN0b20gSlNPTiByZXZpdmVyIHRvIGRlY29kZSBiYXNlNjQgYmFjayB0byBVaW50OEFycmF5XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCAoX2tleSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICh2YWx1ZSBhcyBhbnkpLl9fdHlwZSA9PT0gJ1VpbnQ4QXJyYXknICYmXG4gICAgICAgICAgdHlwZW9mICh2YWx1ZSBhcyBhbnkpLmRhdGEgPT09ICdzdHJpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgodmFsdWUgYXMgYW55KS5kYXRhLCAnYmFzZTY0JykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFdvcmtmbG93UnVuU2NoZW1hLnBhcnNlQXN5bmMoZGF0YSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRSZWFkYWJsZShpZDogc3RyaW5nKTogUHJvbWlzZTxSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pj4ge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cDovL2xvY2FsaG9zdDoke2NvbnRyb2wuaW5mby5wb3J0fS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX0vcmVhZGFibGVgXG4gICAgICApO1xuICAgICAgaWYgKCF4Lm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGdldCByZWFkYWJsZSBzdHJlYW06ICR7eC5zdGF0dXN9ICR7eC5zdGF0dXNUZXh0fWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgheC5ib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYm9keSBpbiByZXNwb25zZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHguYm9keTtcbiAgICB9LFxuICAgIGFzeW5jIHJlc3VtZUhvb2s8VCBleHRlbmRzIFR5cGVkSG9vazxhbnksIGFueT4+KFxuICAgICAgdG9rZW46IHN0cmluZyxcbiAgICAgIHBheWxvYWQ6IE9taXQ8Tm9JbmZlcjxUeXBlZEhvb2suSW5wdXQ8VD4+LCAnbWV0YWRhdGEnPlxuICAgICkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGBodHRwOi8vbG9jYWxob3N0OiR7Y29udHJvbC5pbmZvLnBvcnR9L2hvb2tzLyR7dG9rZW59YCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJlcy5hcnJheUJ1ZmZlcigpLmNhdGNoKCgpID0+IHt9KTsgLy8gRHJhaW4gdGhlIGJvZHkgdG8gYXZvaWQgcmVzb3VyY2UgbGVha3NcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIHJlc3VtZSBob29rOiAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
|
package/dist/workflows/hooks.js
CHANGED
|
@@ -67,4 +67,4 @@ async function writeEvent(writable, event, payload) {
|
|
|
67
67
|
payload,
|
|
68
68
|
})}\r\n`));
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi93b3JrZmxvd3MvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsMENBY0M7QUF6QkQseUNBQXlEO0FBQ3pELHVDQUF5QjtBQUVaLFFBQUEsSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFBQztJQUM3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0tBQ3RCLENBQUM7Q0FDSCxDQUFDLENBQUM7QUFFSSxLQUFLLFVBQVUsZUFBZSxDQUFDLEtBQWEsRUFBRSxVQUFrQjtJQUNyRSxjQUFjLENBQUM7SUFFZixNQUFNLElBQUksR0FBRyxZQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBNkMsRUFBRSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUEsa0JBQVcsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sVUFBVSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsSUFBSTtZQUFFLE1BQU07SUFDeEIsQ0FBQztJQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FDdkIsUUFBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWlCO0lBRWpCLFVBQVUsQ0FBQztJQUVYLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUNoQixJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FDdEIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hCLEtBQUs7UUFDTCxPQUFPO0tBQ1IsQ0FBQyxNQUFNLENBQ1QsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUhvb2ssIGdldFdyaXRhYmxlIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUnO1xuaW1wb3J0ICogYXMgeiBmcm9tICd6b2QnO1xuXG5leHBvcnQgY29uc3QgSG9vayA9IGRlZmluZUhvb2soe1xuICBzY2hlbWE6IHoub2JqZWN0KHtcbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIGRvbmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgbWV0YWRhdGE6IHoudW5rbm93bigpLFxuICB9KSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29sbGVjdFdpdGhIb29rKHRva2VuOiBzdHJpbmcsIGN1c3RvbURhdGE6IHN0cmluZykge1xuICAndXNlIHdvcmtmbG93JztcblxuICBjb25zdCBob29rID0gSG9vay5jcmVhdGUoeyB0b2tlbiwgbWV0YWRhdGE6IHsgY3VzdG9tRGF0YSB9IH0pO1xuICBjb25zdCBjb2xsZWN0ZWQ6IFBhcmFtZXRlcnM8KHR5cGVvZiBIb29rKVsncmVzdW1lJ10+WzFdW10gPSBbXTtcbiAgY29uc3Qgd2YgPSBnZXRXcml0YWJsZSgpO1xuICBhd2FpdCB3cml0ZUV2ZW50KHdmLCAnaG9va0NyZWF0ZWQnKTtcbiAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBob29rKSB7XG4gICAgYXdhaXQgd3JpdGVFdmVudCh3ZiwgJ2hvb2tSZXN1bWVkJywgZXZlbnQpO1xuICAgIGNvbGxlY3RlZC5wdXNoKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZG9uZSkgYnJlYWs7XG4gIH1cblxuICByZXR1cm4geyBjb2xsZWN0ZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVFdmVudChcbiAgd3JpdGFibGU6IFdyaXRhYmxlU3RyZWFtLFxuICBldmVudDogc3RyaW5nLFxuICBwYXlsb2FkPzogdW5rbm93blxuKSB7XG4gICd1c2Ugc3RlcCc7XG5cbiAgY29uc29sZS5sb2coJ3dyaXRpbmcgZXZlbnQnLCBldmVudCwgcGF5bG9hZCk7XG4gIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlLmdldFdyaXRlcigpO1xuICBhd2FpdCB3cml0ZXIud3JpdGUoXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFxuICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgIH0pfVxcclxcbmBcbiAgICApXG4gICk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/world-testing",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.40",
|
|
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.
|
|
19
|
+
"@hono/node-server": "1.19.13",
|
|
20
20
|
"chalk": "5.6.2",
|
|
21
|
-
"hono": "4.12.
|
|
21
|
+
"hono": "4.12.25",
|
|
22
22
|
"jsonlines": "0.1.1",
|
|
23
|
-
"zod": "4.3.6",
|
|
24
|
-
"@workflow/cli": "5.0.0-beta.
|
|
25
|
-
"@workflow/core": "5.0.0-beta.
|
|
26
|
-
"workflow": "5.0.0-beta.
|
|
27
|
-
"
|
|
23
|
+
"zod": "~4.3.6",
|
|
24
|
+
"@workflow/cli": "5.0.0-beta.40",
|
|
25
|
+
"@workflow/core": "5.0.0-beta.40",
|
|
26
|
+
"@workflow/world": "5.0.0-beta.25",
|
|
27
|
+
"workflow": "5.0.0-beta.40"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@types/node": "22.19.0",
|
|
31
30
|
"@types/jsonlines": "0.1.5",
|
|
32
|
-
"
|
|
31
|
+
"@types/node": "22.19.0",
|
|
32
|
+
"typescript": "^6.0.3",
|
|
33
|
+
"vitest": "^4.1.10",
|
|
33
34
|
"@workflow/tsconfig": "5.0.0-beta.0"
|
|
34
35
|
},
|
|
35
36
|
"peerDependencies": {
|
|
36
|
-
"vitest": "^4.
|
|
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
|
}
|