@workflow/world-local 5.0.0-beta.2 → 5.0.0-beta.21
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/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/fs.d.ts +64 -5
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +148 -19
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -9
- package/dist/init.js +1 -1
- package/dist/instrumentObject.d.ts.map +1 -1
- package/dist/instrumentObject.js +69 -3
- package/dist/queue.d.ts +2 -2
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +64 -12
- package/dist/storage/events-storage.d.ts.map +1 -1
- package/dist/storage/events-storage.js +1393 -601
- package/dist/storage/filters.js +1 -1
- package/dist/storage/helpers.d.ts +13 -0
- package/dist/storage/helpers.d.ts.map +1 -1
- package/dist/storage/helpers.js +23 -1
- package/dist/storage/hooks-storage.d.ts.map +1 -1
- package/dist/storage/hooks-storage.js +11 -4
- package/dist/storage/index.d.ts +10 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +9 -11
- package/dist/storage/legacy.d.ts.map +1 -1
- package/dist/storage/legacy.js +10 -5
- package/dist/storage/runs-storage.d.ts +29 -3
- package/dist/storage/runs-storage.d.ts.map +1 -1
- package/dist/storage/runs-storage.js +76 -4
- package/dist/storage/steps-storage.d.ts.map +1 -1
- package/dist/storage/steps-storage.js +5 -2
- package/dist/storage.js +1 -1
- package/dist/streamer.d.ts.map +1 -1
- package/dist/streamer.js +45 -32
- package/dist/telemetry.d.ts +8 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +5 -1
- package/dist/test-helpers.d.ts +1 -0
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +1 -1
- package/dist/util.js +1 -1
- package/package.json +6 -6
- package/dist/config.js.map +0 -1
- package/dist/fs.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init.js.map +0 -1
- package/dist/instrumentObject.js.map +0 -1
- package/dist/queue.js.map +0 -1
- package/dist/storage/events-storage.js.map +0 -1
- package/dist/storage/filters.js.map +0 -1
- package/dist/storage/helpers.js.map +0 -1
- package/dist/storage/hooks-storage.js.map +0 -1
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/legacy.js.map +0 -1
- package/dist/storage/runs-storage.js.map +0 -1
- package/dist/storage/steps-storage.js.map +0 -1
- package/dist/storage.js.map +0 -1
- package/dist/streamer.js.map +0 -1
- package/dist/telemetry.js.map +0 -1
- package/dist/test-helpers.js.map +0 -1
- package/dist/util.js.map +0 -1
package/dist/storage/filters.js
CHANGED
|
@@ -30,4 +30,4 @@ export function filterHookData(hook, resolveData) {
|
|
|
30
30
|
}
|
|
31
31
|
return hook;
|
|
32
32
|
}
|
|
33
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFrQnJELE1BQU0sVUFBVSxhQUFhLENBQzNCLEdBQWdCLEVBQ2hCLFdBQTJCO0lBRTNCLElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE9BQU87WUFDTCxHQUFHLEdBQUc7WUFDTixLQUFLLEVBQUUsU0FBUztZQUNoQixNQUFNLEVBQUUsU0FBUztTQUNRLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQWVELE1BQU0sVUFBVSxjQUFjLENBQzVCLElBQVUsRUFDVixXQUEyQjtJQUUzQixJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMzQixPQUFPO1lBQ0wsR0FBRyxJQUFJO1lBQ1AsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLFNBQVM7U0FDQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVUsRUFBRSxXQUEyQjtJQUNwRSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQVcsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEhvb2ssXG4gIFN0ZXAsXG4gIFN0ZXBXaXRob3V0RGF0YSxcbiAgV29ya2Zsb3dSdW4sXG4gIFdvcmtmbG93UnVuV2l0aG91dERhdGEsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbmV4cG9ydCB7IHN0cmlwRXZlbnREYXRhUmVmcyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8qKlxuICogRmlsdGVyIHJ1biBkYXRhIGJhc2VkIG9uIHJlc29sdmVEYXRhIHNldHRpbmcuXG4gKiBXaGVuIHJlc29sdmVEYXRhIGlzICdub25lJywgc3RyaXBzIGlucHV0L291dHB1dCB0byByZWR1Y2UgcGF5bG9hZCBzaXplLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUnVuRGF0YShcbiAgcnVuOiBXb3JrZmxvd1J1bixcbiAgcmVzb2x2ZURhdGE6ICdub25lJ1xuKTogV29ya2Zsb3dSdW5XaXRob3V0RGF0YTtcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSdW5EYXRhKFxuICBydW46IFdvcmtmbG93UnVuLFxuICByZXNvbHZlRGF0YTogJ2FsbCdcbik6IFdvcmtmbG93UnVuO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclJ1bkRhdGEoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIHJlc29sdmVEYXRhOiAnbm9uZScgfCAnYWxsJ1xuKTogV29ya2Zsb3dSdW4gfCBXb3JrZmxvd1J1bldpdGhvdXREYXRhO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclJ1bkRhdGEoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIHJlc29sdmVEYXRhOiAnbm9uZScgfCAnYWxsJ1xuKTogV29ya2Zsb3dSdW4gfCBXb3JrZmxvd1J1bldpdGhvdXREYXRhIHtcbiAgaWYgKHJlc29sdmVEYXRhID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucnVuLFxuICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgIH0gYXMgV29ya2Zsb3dSdW5XaXRob3V0RGF0YTtcbiAgfVxuICByZXR1cm4gcnVuO1xufVxuXG4vKipcbiAqIEZpbHRlciBzdGVwIGRhdGEgYmFzZWQgb24gcmVzb2x2ZURhdGEgc2V0dGluZy5cbiAqIFdoZW4gcmVzb2x2ZURhdGEgaXMgJ25vbmUnLCBzdHJpcHMgaW5wdXQvb3V0cHV0IHRvIHJlZHVjZSBwYXlsb2FkIHNpemUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTdGVwRGF0YShcbiAgc3RlcDogU3RlcCxcbiAgcmVzb2x2ZURhdGE6ICdub25lJ1xuKTogU3RlcFdpdGhvdXREYXRhO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclN0ZXBEYXRhKHN0ZXA6IFN0ZXAsIHJlc29sdmVEYXRhOiAnYWxsJyk6IFN0ZXA7XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU3RlcERhdGEoXG4gIHN0ZXA6IFN0ZXAsXG4gIHJlc29sdmVEYXRhOiAnbm9uZScgfCAnYWxsJ1xuKTogU3RlcCB8IFN0ZXBXaXRob3V0RGF0YTtcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTdGVwRGF0YShcbiAgc3RlcDogU3RlcCxcbiAgcmVzb2x2ZURhdGE6ICdub25lJyB8ICdhbGwnXG4pOiBTdGVwIHwgU3RlcFdpdGhvdXREYXRhIHtcbiAgaWYgKHJlc29sdmVEYXRhID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RlcCxcbiAgICAgIGlucHV0OiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXQ6IHVuZGVmaW5lZCxcbiAgICB9IGFzIFN0ZXBXaXRob3V0RGF0YTtcbiAgfVxuICByZXR1cm4gc3RlcDtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgaG9vayBkYXRhIGJhc2VkIG9uIHJlc29sdmVEYXRhIHNldHRpbmcuXG4gKiBXaGVuIHJlc29sdmVEYXRhIGlzICdub25lJywgc3RyaXBzIG1ldGFkYXRhIHRvIHJlZHVjZSBwYXlsb2FkIHNpemUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJIb29rRGF0YShob29rOiBIb29rLCByZXNvbHZlRGF0YTogJ25vbmUnIHwgJ2FsbCcpOiBIb29rIHtcbiAgaWYgKHJlc29sdmVEYXRhID09PSAnbm9uZScpIHtcbiAgICBjb25zdCB7IG1ldGFkYXRhOiBfbWV0YWRhdGEsIC4uLnJlc3QgfSA9IGhvb2sgYXMgYW55O1xuICAgIHJldHVybiByZXN0O1xuICB9XG4gIHJldHVybiBob29rO1xufVxuIl19
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
* Hash a hook token to produce a filesystem-safe constraint filename.
|
|
3
3
|
*/
|
|
4
4
|
export declare function hashToken(token: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Compute the path of the recovery-marker sidecar for a specific
|
|
7
|
+
* `(token, runId, hookId)` triple. Identity is encoded in the
|
|
8
|
+
* filename hash so different token lifetimes (e.g. the same token
|
|
9
|
+
* reused by a later run after the first run was deleted) never
|
|
10
|
+
* contend on a single sidecar — without per-lifetime identity, a
|
|
11
|
+
* stale marker surviving prior-run cleanup could "leak" its
|
|
12
|
+
* eventId into the new lifetime's recovery and cause divergent
|
|
13
|
+
* publication.
|
|
14
|
+
*
|
|
15
|
+
* See `events-storage.ts` for the full recovery-marker rationale.
|
|
16
|
+
*/
|
|
17
|
+
export declare function hookRecoveryMarkerPath(basedir: string, token: string, runId: string, hookId: string): string;
|
|
5
18
|
/**
|
|
6
19
|
* Create a monotonic ULID factory that ensures ULIDs are always increasing
|
|
7
20
|
* even when generated within the same millisecond.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/storage/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/storage/helpers.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAQR;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,4BAAwC,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC5B,UAAU,MAAM,MAChB,UAAU,MAAM,KAAG,IAAI,GAAG,IAyB1B,CAAC"}
|
package/dist/storage/helpers.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
2
3
|
import { monotonicFactory } from 'ulid';
|
|
3
4
|
import { stripTag, ulidToDate } from '../fs.js';
|
|
4
5
|
/**
|
|
@@ -7,6 +8,27 @@ import { stripTag, ulidToDate } from '../fs.js';
|
|
|
7
8
|
export function hashToken(token) {
|
|
8
9
|
return createHash('sha256').update(token).digest('hex');
|
|
9
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Compute the path of the recovery-marker sidecar for a specific
|
|
13
|
+
* `(token, runId, hookId)` triple. Identity is encoded in the
|
|
14
|
+
* filename hash so different token lifetimes (e.g. the same token
|
|
15
|
+
* reused by a later run after the first run was deleted) never
|
|
16
|
+
* contend on a single sidecar — without per-lifetime identity, a
|
|
17
|
+
* stale marker surviving prior-run cleanup could "leak" its
|
|
18
|
+
* eventId into the new lifetime's recovery and cause divergent
|
|
19
|
+
* publication.
|
|
20
|
+
*
|
|
21
|
+
* See `events-storage.ts` for the full recovery-marker rationale.
|
|
22
|
+
*/
|
|
23
|
+
export function hookRecoveryMarkerPath(basedir, token, runId, hookId) {
|
|
24
|
+
// Distinct from `hashToken(token)` so a token's claim file and
|
|
25
|
+
// its recovery marker live at different paths AND a different
|
|
26
|
+
// lifetime's recovery marker never collides with this one.
|
|
27
|
+
const key = createHash('sha256')
|
|
28
|
+
.update(`${token}\x00${runId}\x00${hookId}`)
|
|
29
|
+
.digest('hex');
|
|
30
|
+
return path.join(basedir, 'hooks', 'tokens', `${key}.recovery.json`);
|
|
31
|
+
}
|
|
10
32
|
/**
|
|
11
33
|
* Create a monotonic ULID factory that ensures ULIDs are always increasing
|
|
12
34
|
* even when generated within the same millisecond.
|
|
@@ -41,4 +63,4 @@ export const getObjectCreatedAt = (idPrefix) => (filename) => {
|
|
|
41
63
|
const ulid = id.replace(replaceRegex, '');
|
|
42
64
|
return ulidToDate(ulid);
|
|
43
65
|
};
|
|
44
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixNQUFjO0lBRWQsK0RBQStEO0lBQy9ELDhEQUE4RDtJQUM5RCwyREFBMkQ7SUFDM0QsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUM3QixNQUFNLENBQUMsR0FBRyxLQUFLLE9BQU8sS0FBSyxPQUFPLE1BQU0sRUFBRSxDQUFDO1NBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUVuRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FDN0IsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FDckIsQ0FBQyxRQUFnQixFQUFlLEVBQUU7SUFDaEMsMENBQTBDO0lBQzFDLG1EQUFtRDtJQUNuRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFFdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsa0ZBQWtGO1FBQ2xGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN4Qiw4RUFBOEU7UUFDOUUscUZBQXFGO1FBQ3JGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbW9ub3RvbmljRmFjdG9yeSB9IGZyb20gJ3VsaWQnO1xuaW1wb3J0IHsgc3RyaXBUYWcsIHVsaWRUb0RhdGUgfSBmcm9tICcuLi9mcy5qcyc7XG5cbi8qKlxuICogSGFzaCBhIGhvb2sgdG9rZW4gdG8gcHJvZHVjZSBhIGZpbGVzeXN0ZW0tc2FmZSBjb25zdHJhaW50IGZpbGVuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaFRva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHRva2VuKS5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIHBhdGggb2YgdGhlIHJlY292ZXJ5LW1hcmtlciBzaWRlY2FyIGZvciBhIHNwZWNpZmljXG4gKiBgKHRva2VuLCBydW5JZCwgaG9va0lkKWAgdHJpcGxlLiBJZGVudGl0eSBpcyBlbmNvZGVkIGluIHRoZVxuICogZmlsZW5hbWUgaGFzaCBzbyBkaWZmZXJlbnQgdG9rZW4gbGlmZXRpbWVzIChlLmcuIHRoZSBzYW1lIHRva2VuXG4gKiByZXVzZWQgYnkgYSBsYXRlciBydW4gYWZ0ZXIgdGhlIGZpcnN0IHJ1biB3YXMgZGVsZXRlZCkgbmV2ZXJcbiAqIGNvbnRlbmQgb24gYSBzaW5nbGUgc2lkZWNhciDigJQgd2l0aG91dCBwZXItbGlmZXRpbWUgaWRlbnRpdHksIGFcbiAqIHN0YWxlIG1hcmtlciBzdXJ2aXZpbmcgcHJpb3ItcnVuIGNsZWFudXAgY291bGQgXCJsZWFrXCIgaXRzXG4gKiBldmVudElkIGludG8gdGhlIG5ldyBsaWZldGltZSdzIHJlY292ZXJ5IGFuZCBjYXVzZSBkaXZlcmdlbnRcbiAqIHB1YmxpY2F0aW9uLlxuICpcbiAqIFNlZSBgZXZlbnRzLXN0b3JhZ2UudHNgIGZvciB0aGUgZnVsbCByZWNvdmVyeS1tYXJrZXIgcmF0aW9uYWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va1JlY292ZXJ5TWFya2VyUGF0aChcbiAgYmFzZWRpcjogc3RyaW5nLFxuICB0b2tlbjogc3RyaW5nLFxuICBydW5JZDogc3RyaW5nLFxuICBob29rSWQ6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgLy8gRGlzdGluY3QgZnJvbSBgaGFzaFRva2VuKHRva2VuKWAgc28gYSB0b2tlbidzIGNsYWltIGZpbGUgYW5kXG4gIC8vIGl0cyByZWNvdmVyeSBtYXJrZXIgbGl2ZSBhdCBkaWZmZXJlbnQgcGF0aHMgQU5EIGEgZGlmZmVyZW50XG4gIC8vIGxpZmV0aW1lJ3MgcmVjb3ZlcnkgbWFya2VyIG5ldmVyIGNvbGxpZGVzIHdpdGggdGhpcyBvbmUuXG4gIGNvbnN0IGtleSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgLnVwZGF0ZShgJHt0b2tlbn1cXHgwMCR7cnVuSWR9XFx4MDAke2hvb2tJZH1gKVxuICAgIC5kaWdlc3QoJ2hleCcpO1xuICByZXR1cm4gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycsICd0b2tlbnMnLCBgJHtrZXl9LnJlY292ZXJ5Lmpzb25gKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb25vdG9uaWMgVUxJRCBmYWN0b3J5IHRoYXQgZW5zdXJlcyBVTElEcyBhcmUgYWx3YXlzIGluY3JlYXNpbmdcbiAqIGV2ZW4gd2hlbiBnZW5lcmF0ZWQgd2l0aGluIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuICovXG5leHBvcnQgY29uc3QgbW9ub3RvbmljVWxpZCA9IG1vbm90b25pY0ZhY3RvcnkoKCkgPT4gTWF0aC5yYW5kb20oKSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRvIGV4dHJhY3QgY3JlYXRlZEF0IGRhdGUgZnJvbSBhIGZpbGVuYW1lIGJhc2VkIG9uIFVMSUQuXG4gKiBVc2VkIGZvciBlZmZpY2llbnQgcGFnaW5hdGlvbiB3aXRob3V0IHJlYWRpbmcgZmlsZSBjb250ZW50cy5cbiAqXG4gKiBAcGFyYW0gaWRQcmVmaXggLSBUaGUgcHJlZml4IHRvIHN0cmlwIGZyb20gZmlsZW5hbWVzIChlLmcuLCAnd3J1bicsICdldm50JywgJ3N0ZXAnKVxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIERhdGUgZnJvbSBmaWxlbmFtZSwgb3IgbnVsbCBpZiBub3QgZXh0cmFjdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9iamVjdENyZWF0ZWRBdCA9XG4gIChpZFByZWZpeDogc3RyaW5nKSA9PlxuICAoZmlsZW5hbWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICAvLyBTdHJpcCB0YWcgc3VmZml4IGJlZm9yZSBVTElEIGV4dHJhY3Rpb25cbiAgICAvLyBlLmcuLCBcIndydW5fQUJDLnZpdGVzdC0wLmpzb25cIiDihpIgXCJ3cnVuX0FCQy5qc29uXCJcbiAgICBjb25zdCBjbGVhbk5hbWUgPSBzdHJpcFRhZyhmaWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sICcnKSkgKyAnLmpzb24nO1xuXG4gICAgY29uc3QgcmVwbGFjZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7aWRQcmVmaXh9X2AsICdnJyk7XG4gICAgY29uc3QgZGFzaEluZGV4ID0gY2xlYW5OYW1lLmluZGV4T2YoJy0nKTtcblxuICAgIGlmIChkYXNoSW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBObyBkYXNoIC0gZXh0cmFjdCBVTElEIGZyb20gdGhlIGZpbGVuYW1lIChlLmcuLCB3cnVuX1VMSUQuanNvbiwgZXZudF9VTElELmpzb24pXG4gICAgICBjb25zdCB1bGlkID0gY2xlYW5OYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgJycpLnJlcGxhY2UocmVwbGFjZVJlZ2V4LCAnJyk7XG4gICAgICByZXR1cm4gdWxpZFRvRGF0ZSh1bGlkKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgY29tcG9zaXRlIGtleXMgbGlrZSB7cnVuSWR9LXtzdGVwSWR9LCBleHRyYWN0IGZyb20gdGhlIGFwcHJvcHJpYXRlIHBhcnRcbiAgICBpZiAoaWRQcmVmaXggPT09ICdzdGVwJykge1xuICAgICAgLy8gU3RlcHMgdXNlIHNlcXVlbnRpYWwgSURzIChzdGVwXzAsIHN0ZXBfMSwgZXRjLikgLSBubyB0aW1lc3RhbXAgaW4gZmlsZW5hbWUuXG4gICAgICAvLyBSZXR1cm4gbnVsbCB0byBza2lwIGZpbGVuYW1lLWJhc2VkIG9wdGltaXphdGlvbiBhbmQgZGVmZXIgdG8gSlNPTi1iYXNlZCBmaWx0ZXJpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBGb3IgZXZlbnRzOiB3cnVuX1VMSUQtZXZudF9VTElELmpzb24gLSBleHRyYWN0IGZyb20gdGhlIGV2ZW50SWQgcGFydFxuICAgIGNvbnN0IGlkID0gY2xlYW5OYW1lLnN1YnN0cmluZyhkYXNoSW5kZXggKyAxKS5yZXBsYWNlKC9cXC5qc29uJC8sICcnKTtcbiAgICBjb25zdCB1bGlkID0gaWQucmVwbGFjZShyZXBsYWNlUmVnZXgsICcnKTtcbiAgICByZXR1cm4gdWxpZFRvRGF0ZSh1bGlkKTtcbiAgfTtcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks-storage.d.ts","sourceRoot":"","sources":["../../src/storage/hooks-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,OAAO,EACR,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks-storage.d.ts","sourceRoot":"","sources":["../../src/storage/hooks-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,OAAO,EACR,MAAM,iBAAiB,CAAC;AAczB;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAiFlB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -2,9 +2,9 @@ import path from 'node:path';
|
|
|
2
2
|
import { HookNotFoundError } from '@workflow/errors';
|
|
3
3
|
import { HookSchema } from '@workflow/world';
|
|
4
4
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
5
|
-
import { deleteJSON, listJSONFiles, paginatedFileSystemQuery, readJSON, readJSONWithFallback, } from '../fs.js';
|
|
5
|
+
import { assertSafeEntityId, deleteJSON, listJSONFiles, paginatedFileSystemQuery, readJSON, readJSONWithFallback, } from '../fs.js';
|
|
6
6
|
import { filterHookData } from './filters.js';
|
|
7
|
-
import { hashToken } from './helpers.js';
|
|
7
|
+
import { hashToken, hookRecoveryMarkerPath } from './helpers.js';
|
|
8
8
|
/**
|
|
9
9
|
* Creates a hooks storage implementation using the filesystem.
|
|
10
10
|
* Implements the Storage['hooks'] interface with hook CRUD operations.
|
|
@@ -24,6 +24,7 @@ export function createHooksStorage(basedir, tag) {
|
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
26
|
async function get(hookId, params) {
|
|
27
|
+
assertSafeEntityId('hookId', hookId);
|
|
27
28
|
const hook = await readJSONWithFallback(basedir, 'hooks', hookId, HookSchema, tag);
|
|
28
29
|
if (!hook) {
|
|
29
30
|
throw new HookNotFoundError(hookId);
|
|
@@ -82,11 +83,17 @@ export async function deleteAllHooksForRun(basedir, runId) {
|
|
|
82
83
|
const hookPath = path.join(hooksDir, `${file}.json`);
|
|
83
84
|
const hook = await readJSON(hookPath, HookSchema);
|
|
84
85
|
if (hook && hook.runId === runId) {
|
|
85
|
-
// Delete the token constraint file to free up the token
|
|
86
|
+
// Delete the token constraint file to free up the token, and
|
|
87
|
+
// delete the recovery marker (if any) for disk hygiene. The
|
|
88
|
+
// marker's filename hash includes `(token, runId, hookId)` so
|
|
89
|
+
// a leaked marker can never corrupt a different lifetime — but
|
|
90
|
+
// cleaning it up here keeps the tokens/ directory from
|
|
91
|
+
// accumulating recovered-hook sidecars over time.
|
|
86
92
|
const constraintPath = path.join(hooksDir, 'tokens', `${hashToken(hook.token)}.json`);
|
|
87
93
|
await deleteJSON(constraintPath);
|
|
94
|
+
await deleteJSON(hookRecoveryMarkerPath(basedir, hook.token, hook.runId, hook.hookId));
|
|
88
95
|
await deleteJSON(hookPath);
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
98
|
}
|
|
92
|
-
//# sourceMappingURL=hooks-storage.js.map
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3Mtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hvb2tzLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXJELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsYUFBYSxFQUNiLHdCQUF3QixFQUN4QixRQUFRLEVBQ1Isb0JBQW9CLEdBQ3JCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWUsRUFDZixHQUFZO0lBRVosc0VBQXNFO0lBQ3RFLEtBQUssVUFBVSxlQUFlLENBQUMsS0FBYTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksSUFB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b0JBQW9CLENBQ3hDLE9BQWUsRUFDZixLQUFhO0lBRWIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakMsNkRBQTZEO1lBQzdELDREQUE0RDtZQUM1RCw4REFBOEQ7WUFDOUQsK0RBQStEO1lBQy9ELHVEQUF1RDtZQUN2RCxrREFBa0Q7WUFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDOUIsUUFBUSxFQUNSLFFBQVEsRUFDUixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDaEMsQ0FBQztZQUNGLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxDQUNkLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUNyRSxDQUFDO1lBQ0YsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEhvb2tOb3RGb3VuZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIEdldEhvb2tQYXJhbXMsXG4gIEhvb2ssXG4gIExpc3RIb29rc1BhcmFtcyxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFN0b3JhZ2UsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBIb29rU2NoZW1hIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IERFRkFVTFRfUkVTT0xWRV9EQVRBX09QVElPTiB9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBhc3NlcnRTYWZlRW50aXR5SWQsXG4gIGRlbGV0ZUpTT04sXG4gIGxpc3RKU09ORmlsZXMsXG4gIHBhZ2luYXRlZEZpbGVTeXN0ZW1RdWVyeSxcbiAgcmVhZEpTT04sXG4gIHJlYWRKU09OV2l0aEZhbGxiYWNrLFxufSBmcm9tICcuLi9mcy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJIb29rRGF0YSB9IGZyb20gJy4vZmlsdGVycy5qcyc7XG5pbXBvcnQgeyBoYXNoVG9rZW4sIGhvb2tSZWNvdmVyeU1hcmtlclBhdGggfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBob29rcyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBmaWxlc3lzdGVtLlxuICogSW1wbGVtZW50cyB0aGUgU3RvcmFnZVsnaG9va3MnXSBpbnRlcmZhY2Ugd2l0aCBob29rIENSVUQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvb2tzU3RvcmFnZShcbiAgYmFzZWRpcjogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmdcbik6IFN0b3JhZ2VbJ2hvb2tzJ10ge1xuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBhIGhvb2sgYnkgdG9rZW4gKHNoYXJlZCBiZXR3ZWVuIGdldEJ5VG9rZW4pXG4gIGFzeW5jIGZ1bmN0aW9uIGZpbmRIb29rQnlUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxIb29rIHwgbnVsbD4ge1xuICAgIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdEpTT05GaWxlcyhob29rc0Rpcik7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGhvb2tQYXRoID0gcGF0aC5qb2luKGhvb2tzRGlyLCBgJHtmaWxlfS5qc29uYCk7XG4gICAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgICAgaWYgKGhvb2sgJiYgaG9vay50b2tlbiA9PT0gdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXQoaG9va0lkOiBzdHJpbmcsIHBhcmFtcz86IEdldEhvb2tQYXJhbXMpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ2hvb2tJZCcsIGhvb2tJZCk7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgYmFzZWRpcixcbiAgICAgICdob29rcycsXG4gICAgICBob29rSWQsXG4gICAgICBIb29rU2NoZW1hLFxuICAgICAgdGFnXG4gICAgKTtcbiAgICBpZiAoIWhvb2spIHtcbiAgICAgIHRocm93IG5ldyBIb29rTm90Rm91bmRFcnJvcihob29rSWQpO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgfHwgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgIHJldHVybiBmaWx0ZXJIb29rRGF0YShcbiAgICAgIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH0sXG4gICAgICByZXNvbHZlRGF0YVxuICAgICk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRCeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBjb25zdCBob29rID0gYXdhaXQgZmluZEhvb2tCeVRva2VuKHRva2VuKTtcbiAgICBpZiAoIWhvb2spIHtcbiAgICAgIHRocm93IG5ldyBIb29rTm90Rm91bmRFcnJvcih0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBob29rO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbGlzdChcbiAgICBwYXJhbXM6IExpc3RIb29rc1BhcmFtc1xuICApOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPEhvb2s+PiB7XG4gICAgY29uc3QgaG9va3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ2hvb2tzJyk7XG4gICAgY29uc3QgcmVzb2x2ZURhdGEgPSBwYXJhbXMucmVzb2x2ZURhdGEgfHwgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5KHtcbiAgICAgIGRpcmVjdG9yeTogaG9va3NEaXIsXG4gICAgICBzY2hlbWE6IEhvb2tTY2hlbWEsXG4gICAgICBzb3J0T3JkZXI6IHBhcmFtcy5wYWdpbmF0aW9uPy5zb3J0T3JkZXIgPz8gJ2FzYycsXG4gICAgICBsaW1pdDogcGFyYW1zLnBhZ2luYXRpb24/LmxpbWl0LFxuICAgICAgY3Vyc29yOiBwYXJhbXMucGFnaW5hdGlvbj8uY3Vyc29yLFxuICAgICAgZmlsZVByZWZpeDogdW5kZWZpbmVkLCAvLyBIb29rcyBkb24ndCBoYXZlIFVMSURzLCBzbyB3ZSBjYW4ndCBvcHRpbWl6ZSBieSBmaWxlbmFtZVxuICAgICAgZmlsdGVyOiAoaG9vaykgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgYnkgcnVuSWQgaWYgcHJvdmlkZWRcbiAgICAgICAgaWYgKHBhcmFtcy5ydW5JZCAmJiBob29rLnJ1bklkICE9PSBwYXJhbXMucnVuSWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgZ2V0Q3JlYXRlZEF0OiAoKSA9PiB7XG4gICAgICAgIC8vIEhvb2sgZmlsZXMgZG9uJ3QgaGF2ZSBVTElEIHRpbWVzdGFtcHMgaW4gZmlsZW5hbWUsIHNvIHJldHVybiBudWxsXG4gICAgICAgIC8vIHRvIHNraXAgdGhlIGZpbGVuYW1lLWJhc2VkIG9wdGltaXphdGlvbiBhbmQgZGVmZXIgdG8gSlNPTi1iYXNlZFxuICAgICAgICAvLyBjdXJzb3IgZmlsdGVyaW5nIHdoaWNoIHVzZXMgdGhlIGFjdHVhbCBjcmVhdGVkQXQgZnJvbSB0aGUgZmlsZS5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICAgZ2V0SWQ6IChob29rKSA9PiBob29rLmhvb2tJZCxcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0YSBhZnRlciBwYWdpbmF0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLm1hcCgoaG9vaykgPT4gZmlsdGVySG9va0RhdGEoaG9vaywgcmVzb2x2ZURhdGEpKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgZ2V0LCBnZXRCeVRva2VuLCBsaXN0IH07XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhbGwgaG9va3MgYXNzb2NpYXRlZCB3aXRoIGEgd29ya2Zsb3cgcnVuLlxuICogQ2FsbGVkIHdoZW4gYSBydW4gcmVhY2hlcyBhIHRlcm1pbmFsIHN0YXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQWxsSG9va3NGb3JSdW4oXG4gIGJhc2VkaXI6IHN0cmluZyxcbiAgcnVuSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGxpc3RKU09ORmlsZXMoaG9va3NEaXIpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGhvb2tQYXRoID0gcGF0aC5qb2luKGhvb2tzRGlyLCBgJHtmaWxlfS5qc29uYCk7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IHJlYWRKU09OKGhvb2tQYXRoLCBIb29rU2NoZW1hKTtcbiAgICBpZiAoaG9vayAmJiBob29rLnJ1bklkID09PSBydW5JZCkge1xuICAgICAgLy8gRGVsZXRlIHRoZSB0b2tlbiBjb25zdHJhaW50IGZpbGUgdG8gZnJlZSB1cCB0aGUgdG9rZW4sIGFuZFxuICAgICAgLy8gZGVsZXRlIHRoZSByZWNvdmVyeSBtYXJrZXIgKGlmIGFueSkgZm9yIGRpc2sgaHlnaWVuZS4gVGhlXG4gICAgICAvLyBtYXJrZXIncyBmaWxlbmFtZSBoYXNoIGluY2x1ZGVzIGAodG9rZW4sIHJ1bklkLCBob29rSWQpYCBzb1xuICAgICAgLy8gYSBsZWFrZWQgbWFya2VyIGNhbiBuZXZlciBjb3JydXB0IGEgZGlmZmVyZW50IGxpZmV0aW1lIOKAlCBidXRcbiAgICAgIC8vIGNsZWFuaW5nIGl0IHVwIGhlcmUga2VlcHMgdGhlIHRva2Vucy8gZGlyZWN0b3J5IGZyb21cbiAgICAgIC8vIGFjY3VtdWxhdGluZyByZWNvdmVyZWQtaG9vayBzaWRlY2FycyBvdmVyIHRpbWUuXG4gICAgICBjb25zdCBjb25zdHJhaW50UGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgaG9va3NEaXIsXG4gICAgICAgICd0b2tlbnMnLFxuICAgICAgICBgJHtoYXNoVG9rZW4oaG9vay50b2tlbil9Lmpzb25gXG4gICAgICApO1xuICAgICAgYXdhaXQgZGVsZXRlSlNPTihjb25zdHJhaW50UGF0aCk7XG4gICAgICBhd2FpdCBkZWxldGVKU09OKFxuICAgICAgICBob29rUmVjb3ZlcnlNYXJrZXJQYXRoKGJhc2VkaXIsIGhvb2sudG9rZW4sIGhvb2sucnVuSWQsIGhvb2suaG9va0lkKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IGRlbGV0ZUpTT04oaG9va1BhdGgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { Storage } from '@workflow/world';
|
|
2
|
+
import { type LocalRunsStorage } from './runs-storage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Storage shape used inside world-local: identical to `Storage`, but `runs`
|
|
5
|
+
* exposes the internal `fileIdFilter` option on `list()`. Structurally
|
|
6
|
+
* assignable to `Storage` at public boundaries (e.g., `reenqueueActiveRuns`).
|
|
7
|
+
*/
|
|
8
|
+
export type LocalStorage = Omit<Storage, 'runs'> & {
|
|
9
|
+
runs: LocalRunsStorage;
|
|
10
|
+
};
|
|
2
11
|
/**
|
|
3
12
|
* Creates a complete storage implementation using the filesystem.
|
|
4
13
|
* This is the main entry point that composes all storage implementations.
|
|
@@ -8,5 +17,5 @@ import type { Storage } from '@workflow/world';
|
|
|
8
17
|
* @param basedir - The base directory for storing workflow data
|
|
9
18
|
* @returns A complete Storage implementation with tracing
|
|
10
19
|
*/
|
|
11
|
-
export declare function createStorage(basedir: string, tag?: string):
|
|
20
|
+
export declare function createStorage(basedir: string, tag?: string): LocalStorage;
|
|
12
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG7E;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE9E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,YAAY,CAezE"}
|
package/dist/storage/index.js
CHANGED
|
@@ -14,19 +14,17 @@ import { createStepsStorage } from './steps-storage.js';
|
|
|
14
14
|
*/
|
|
15
15
|
export function createStorage(basedir, tag) {
|
|
16
16
|
// Create raw storage implementations
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
hooks: createHooksStorage(basedir, tag),
|
|
22
|
-
};
|
|
17
|
+
const runs = createRunsStorage(basedir, tag);
|
|
18
|
+
const steps = createStepsStorage(basedir, tag);
|
|
19
|
+
const events = createEventsStorage(basedir, tag);
|
|
20
|
+
const hooks = createHooksStorage(basedir, tag);
|
|
23
21
|
// Instrument all storage methods with tracing
|
|
24
22
|
// NOTE: Span names are lowercase per OTEL semantic conventions
|
|
25
23
|
return {
|
|
26
|
-
runs: instrumentObject('world.runs',
|
|
27
|
-
steps: instrumentObject('world.steps',
|
|
28
|
-
events: instrumentObject('world.events',
|
|
29
|
-
hooks: instrumentObject('world.hooks',
|
|
24
|
+
runs: instrumentObject('world.runs', runs),
|
|
25
|
+
steps: instrumentObject('world.steps', steps),
|
|
26
|
+
events: instrumentObject('world.events', events),
|
|
27
|
+
hooks: instrumentObject('world.hooks', hooks),
|
|
30
28
|
};
|
|
31
29
|
}
|
|
32
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTeEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQWUsRUFBRSxHQUFZO0lBQ3pELHFDQUFxQztJQUNyQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFL0MsOENBQThDO0lBQzlDLCtEQUErRDtJQUMvRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7UUFDMUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDN0MsTUFBTSxFQUFFLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUM7UUFDaEQsS0FBSyxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7S0FDOUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0b3JhZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgaW5zdHJ1bWVudE9iamVjdCB9IGZyb20gJy4uL2luc3RydW1lbnRPYmplY3QuanMnO1xuaW1wb3J0IHsgY3JlYXRlRXZlbnRzU3RvcmFnZSB9IGZyb20gJy4vZXZlbnRzLXN0b3JhZ2UuanMnO1xuaW1wb3J0IHsgY3JlYXRlSG9va3NTdG9yYWdlIH0gZnJvbSAnLi9ob29rcy1zdG9yYWdlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJ1bnNTdG9yYWdlLCB0eXBlIExvY2FsUnVuc1N0b3JhZ2UgfSBmcm9tICcuL3J1bnMtc3RvcmFnZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdGVwc1N0b3JhZ2UgfSBmcm9tICcuL3N0ZXBzLXN0b3JhZ2UuanMnO1xuXG4vKipcbiAqIFN0b3JhZ2Ugc2hhcGUgdXNlZCBpbnNpZGUgd29ybGQtbG9jYWw6IGlkZW50aWNhbCB0byBgU3RvcmFnZWAsIGJ1dCBgcnVuc2BcbiAqIGV4cG9zZXMgdGhlIGludGVybmFsIGBmaWxlSWRGaWx0ZXJgIG9wdGlvbiBvbiBgbGlzdCgpYC4gU3RydWN0dXJhbGx5XG4gKiBhc3NpZ25hYmxlIHRvIGBTdG9yYWdlYCBhdCBwdWJsaWMgYm91bmRhcmllcyAoZS5nLiwgYHJlZW5xdWV1ZUFjdGl2ZVJ1bnNgKS5cbiAqL1xuZXhwb3J0IHR5cGUgTG9jYWxTdG9yYWdlID0gT21pdDxTdG9yYWdlLCAncnVucyc+ICYgeyBydW5zOiBMb2NhbFJ1bnNTdG9yYWdlIH07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIGZpbGVzeXN0ZW0uXG4gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRoYXQgY29tcG9zZXMgYWxsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIEFsbCBzdG9yYWdlIG1ldGhvZHMgYXJlIGluc3RydW1lbnRlZCB3aXRoIHRyYWNpbmcgc3BhbnMgZm9yIG9ic2VydmFiaWxpdHkuXG4gKlxuICogQHBhcmFtIGJhc2VkaXIgLSBUaGUgYmFzZSBkaXJlY3RvcnkgZm9yIHN0b3Jpbmcgd29ya2Zsb3cgZGF0YVxuICogQHJldHVybnMgQSBjb21wbGV0ZSBTdG9yYWdlIGltcGxlbWVudGF0aW9uIHdpdGggdHJhY2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmFnZShiYXNlZGlyOiBzdHJpbmcsIHRhZz86IHN0cmluZyk6IExvY2FsU3RvcmFnZSB7XG4gIC8vIENyZWF0ZSByYXcgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbnNcbiAgY29uc3QgcnVucyA9IGNyZWF0ZVJ1bnNTdG9yYWdlKGJhc2VkaXIsIHRhZyk7XG4gIGNvbnN0IHN0ZXBzID0gY3JlYXRlU3RlcHNTdG9yYWdlKGJhc2VkaXIsIHRhZyk7XG4gIGNvbnN0IGV2ZW50cyA9IGNyZWF0ZUV2ZW50c1N0b3JhZ2UoYmFzZWRpciwgdGFnKTtcbiAgY29uc3QgaG9va3MgPSBjcmVhdGVIb29rc1N0b3JhZ2UoYmFzZWRpciwgdGFnKTtcblxuICAvLyBJbnN0cnVtZW50IGFsbCBzdG9yYWdlIG1ldGhvZHMgd2l0aCB0cmFjaW5nXG4gIC8vIE5PVEU6IFNwYW4gbmFtZXMgYXJlIGxvd2VyY2FzZSBwZXIgT1RFTCBzZW1hbnRpYyBjb252ZW50aW9uc1xuICByZXR1cm4ge1xuICAgIHJ1bnM6IGluc3RydW1lbnRPYmplY3QoJ3dvcmxkLnJ1bnMnLCBydW5zKSxcbiAgICBzdGVwczogaW5zdHJ1bWVudE9iamVjdCgnd29ybGQuc3RlcHMnLCBzdGVwcyksXG4gICAgZXZlbnRzOiBpbnN0cnVtZW50T2JqZWN0KCd3b3JsZC5ldmVudHMnLCBldmVudHMpLFxuICAgIGhvb2tzOiBpbnN0cnVtZW50T2JqZWN0KCd3b3JsZC5ob29rcycsIGhvb2tzKSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/storage/legacy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/storage/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAQvE;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,WAAW,EACvB,MAAM,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GACxC,OAAO,CAAC,WAAW,CAAC,CAwEtB"}
|
package/dist/storage/legacy.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
1
|
import { SPEC_VERSION_CURRENT } from '@workflow/world';
|
|
3
2
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
4
|
-
import { writeJSON } from '../fs.js';
|
|
3
|
+
import { assertSafeEntityId, resolveWithinBase, writeJSON } from '../fs.js';
|
|
5
4
|
import { filterRunData, stripEventDataRefs } from './filters.js';
|
|
6
5
|
import { monotonicUlid } from './helpers.js';
|
|
7
6
|
import { deleteAllHooksForRun } from './hooks-storage.js';
|
|
@@ -14,6 +13,11 @@ import { deleteAllHooksForRun } from './hooks-storage.js';
|
|
|
14
13
|
* - Other events: Throw error (not supported for legacy runs)
|
|
15
14
|
*/
|
|
16
15
|
export async function handleLegacyEvent(basedir, runId, data, currentRun, params) {
|
|
16
|
+
// Defense in depth: events.create already validates runId before routing
|
|
17
|
+
// here, but handleLegacyEvent is exported and its signature doesn't
|
|
18
|
+
// document that invariant. Validating locally keeps the guarantee in this
|
|
19
|
+
// file.
|
|
20
|
+
assertSafeEntityId('runId', runId);
|
|
17
21
|
const resolveData = params?.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
|
|
18
22
|
switch (data.eventType) {
|
|
19
23
|
case 'run_cancelled': {
|
|
@@ -34,8 +38,9 @@ export async function handleLegacyEvent(basedir, runId, data, currentRun, params
|
|
|
34
38
|
error: undefined,
|
|
35
39
|
completedAt: now,
|
|
36
40
|
updatedAt: now,
|
|
41
|
+
attributes: currentRun.attributes,
|
|
37
42
|
};
|
|
38
|
-
const runPath =
|
|
43
|
+
const runPath = resolveWithinBase(basedir, 'runs', `${runId}.json`);
|
|
39
44
|
await writeJSON(runPath, run, { overwrite: true });
|
|
40
45
|
await deleteAllHooksForRun(basedir, runId);
|
|
41
46
|
// Return without event (legacy behavior skips event storage)
|
|
@@ -60,7 +65,7 @@ export async function handleLegacyEvent(basedir, runId, data, currentRun, params
|
|
|
60
65
|
specVersion: SPEC_VERSION_CURRENT,
|
|
61
66
|
};
|
|
62
67
|
const compositeKey = `${runId}-${eventId}`;
|
|
63
|
-
const eventPath =
|
|
68
|
+
const eventPath = resolveWithinBase(basedir, 'events', `${compositeKey}.json`);
|
|
64
69
|
await writeJSON(eventPath, event);
|
|
65
70
|
return { event: stripEventDataRefs(event, resolveData) };
|
|
66
71
|
}
|
|
@@ -70,4 +75,4 @@ export async function handleLegacyEvent(basedir, runId, data, currentRun, params
|
|
|
70
75
|
`Please upgrade 'workflow' package.`);
|
|
71
76
|
}
|
|
72
77
|
}
|
|
73
|
-
//# sourceMappingURL=
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvbGVnYWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsT0FBZSxFQUNmLEtBQWEsRUFDYixJQUFTLEVBQ1QsVUFBdUIsRUFDdkIsTUFBeUM7SUFFekMseUVBQXlFO0lBQ3pFLG9FQUFvRTtJQUNwRSwwRUFBMEU7SUFDMUUsUUFBUTtJQUNSLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsV0FBVyxJQUFJLDJCQUEyQixDQUFDO0lBRXZFLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNyQiwrREFBK0Q7WUFDL0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLEdBQUcsR0FBZ0I7Z0JBQ3ZCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztnQkFDdkIsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO2dCQUNyQyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7Z0JBQ3JDLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLGdCQUFnQjtnQkFDN0MsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7Z0JBQy9CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztnQkFDL0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO2dCQUMvQixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixXQUFXLEVBQUUsR0FBRztnQkFDaEIsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2FBQ2xDLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkQsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0MsNkRBQTZEO1lBQzdELG1HQUFtRztZQUNuRyxPQUFPO2dCQUNMLEtBQUssRUFBRSxTQUFTO2dCQUNoQixHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQWdCO2FBQ3BELENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxnQkFBZ0IsQ0FBQztRQUN0QixLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDckIsZ0RBQWdEO1lBQ2hELHdDQUF3QztZQUN4QyxxRUFBcUU7WUFDckUsTUFBTSxPQUFPLEdBQUcsUUFBUSxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQVU7Z0JBQ25CLEdBQUcsSUFBSTtnQkFDUCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsV0FBVyxFQUFFLG9CQUFvQjthQUNsQyxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQ2pDLE9BQU8sRUFDUCxRQUFRLEVBQ1IsR0FBRyxZQUFZLE9BQU8sQ0FDdkIsQ0FBQztZQUNGLE1BQU0sU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzNELENBQUM7UUFFRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQ2IsZUFBZSxJQUFJLENBQUMsU0FBUyxrQ0FBa0M7Z0JBQzdELGlCQUFpQixVQUFVLENBQUMsV0FBVyxJQUFJLFdBQVcsS0FBSztnQkFDM0Qsb0NBQW9DLENBQ3ZDLENBQUM7SUFDTixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRXZlbnQsIEV2ZW50UmVzdWx0LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT04gfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHsgYXNzZXJ0U2FmZUVudGl0eUlkLCByZXNvbHZlV2l0aGluQmFzZSwgd3JpdGVKU09OIH0gZnJvbSAnLi4vZnMuanMnO1xuaW1wb3J0IHsgZmlsdGVyUnVuRGF0YSwgc3RyaXBFdmVudERhdGFSZWZzIH0gZnJvbSAnLi9maWx0ZXJzLmpzJztcbmltcG9ydCB7IG1vbm90b25pY1VsaWQgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgZGVsZXRlQWxsSG9va3NGb3JSdW4gfSBmcm9tICcuL2hvb2tzLXN0b3JhZ2UuanMnO1xuXG4vKipcbiAqIEhhbmRsZSBldmVudHMgZm9yIGxlZ2FjeSBydW5zIChwcmUtZXZlbnQtc291cmNpbmcsIHNwZWNWZXJzaW9uIDwgMikuXG4gKiBMZWdhY3kgcnVucyB1c2UgZGlmZmVyZW50IGJlaGF2aW9yOlxuICogLSBydW5fY2FuY2VsbGVkOiBTa2lwIGV2ZW50IHN0b3JhZ2UsIGRpcmVjdGx5IHVwZGF0ZSBydW5cbiAqIC0gd2FpdF9jb21wbGV0ZWQ6IFN0b3JlIGV2ZW50IG9ubHkgKG5vIGVudGl0eSBtdXRhdGlvbilcbiAqIC0gaG9va19yZWNlaXZlZDogU3RvcmUgZXZlbnQgb25seSAoaG9va3MgZXhpc3QgdmlhIG9sZCBzeXN0ZW0sIG5vIGVudGl0eSBtdXRhdGlvbilcbiAqIC0gT3RoZXIgZXZlbnRzOiBUaHJvdyBlcnJvciAobm90IHN1cHBvcnRlZCBmb3IgbGVnYWN5IHJ1bnMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVMZWdhY3lFdmVudChcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBydW5JZDogc3RyaW5nLFxuICBkYXRhOiBhbnksXG4gIGN1cnJlbnRSdW46IFdvcmtmbG93UnVuLFxuICBwYXJhbXM/OiB7IHJlc29sdmVEYXRhPzogJ25vbmUnIHwgJ2FsbCcgfVxuKTogUHJvbWlzZTxFdmVudFJlc3VsdD4ge1xuICAvLyBEZWZlbnNlIGluIGRlcHRoOiBldmVudHMuY3JlYXRlIGFscmVhZHkgdmFsaWRhdGVzIHJ1bklkIGJlZm9yZSByb3V0aW5nXG4gIC8vIGhlcmUsIGJ1dCBoYW5kbGVMZWdhY3lFdmVudCBpcyBleHBvcnRlZCBhbmQgaXRzIHNpZ25hdHVyZSBkb2Vzbid0XG4gIC8vIGRvY3VtZW50IHRoYXQgaW52YXJpYW50LiBWYWxpZGF0aW5nIGxvY2FsbHkga2VlcHMgdGhlIGd1YXJhbnRlZSBpbiB0aGlzXG4gIC8vIGZpbGUuXG4gIGFzc2VydFNhZmVFbnRpdHlJZCgncnVuSWQnLCBydW5JZCk7XG5cbiAgY29uc3QgcmVzb2x2ZURhdGEgPSBwYXJhbXM/LnJlc29sdmVEYXRhID8/IERFRkFVTFRfUkVTT0xWRV9EQVRBX09QVElPTjtcblxuICBzd2l0Y2ggKGRhdGEuZXZlbnRUeXBlKSB7XG4gICAgY2FzZSAncnVuX2NhbmNlbGxlZCc6IHtcbiAgICAgIC8vIExlZ2FjeTogU2tpcCBldmVudCBzdG9yYWdlLCBkaXJlY3RseSB1cGRhdGUgcnVuIHRvIGNhbmNlbGxlZFxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHJ1bjogV29ya2Zsb3dSdW4gPSB7XG4gICAgICAgIHJ1bklkOiBjdXJyZW50UnVuLnJ1bklkLFxuICAgICAgICBkZXBsb3ltZW50SWQ6IGN1cnJlbnRSdW4uZGVwbG95bWVudElkLFxuICAgICAgICB3b3JrZmxvd05hbWU6IGN1cnJlbnRSdW4ud29ya2Zsb3dOYW1lLFxuICAgICAgICBzcGVjVmVyc2lvbjogY3VycmVudFJ1bi5zcGVjVmVyc2lvbixcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dDogY3VycmVudFJ1bi5leGVjdXRpb25Db250ZXh0LFxuICAgICAgICBpbnB1dDogY3VycmVudFJ1bi5pbnB1dCxcbiAgICAgICAgY3JlYXRlZEF0OiBjdXJyZW50UnVuLmNyZWF0ZWRBdCxcbiAgICAgICAgZXhwaXJlZEF0OiBjdXJyZW50UnVuLmV4cGlyZWRBdCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdXJyZW50UnVuLnN0YXJ0ZWRBdCxcbiAgICAgICAgc3RhdHVzOiAnY2FuY2VsbGVkJyxcbiAgICAgICAgb3V0cHV0OiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBub3csXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgICBhdHRyaWJ1dGVzOiBjdXJyZW50UnVuLmF0dHJpYnV0ZXMsXG4gICAgICB9O1xuICAgICAgY29uc3QgcnVuUGF0aCA9IHJlc29sdmVXaXRoaW5CYXNlKGJhc2VkaXIsICdydW5zJywgYCR7cnVuSWR9Lmpzb25gKTtcbiAgICAgIGF3YWl0IHdyaXRlSlNPTihydW5QYXRoLCBydW4sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgZGVsZXRlQWxsSG9va3NGb3JSdW4oYmFzZWRpciwgcnVuSWQpO1xuICAgICAgLy8gUmV0dXJuIHdpdGhvdXQgZXZlbnQgKGxlZ2FjeSBiZWhhdmlvciBza2lwcyBldmVudCBzdG9yYWdlKVxuICAgICAgLy8gVHlwZSBhc3NlcnRpb246IEV2ZW50UmVzdWx0IGV4cGVjdHMgV29ya2Zsb3dSdW4sIGZpbHRlclJ1bkRhdGEgbWF5IHJldHVybiBXb3JrZmxvd1J1bldpdGhvdXREYXRhXG4gICAgICByZXR1cm4ge1xuICAgICAgICBldmVudDogdW5kZWZpbmVkLFxuICAgICAgICBydW46IGZpbHRlclJ1bkRhdGEocnVuLCByZXNvbHZlRGF0YSkgYXMgV29ya2Zsb3dSdW4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgJ3dhaXRfY29tcGxldGVkJzpcbiAgICBjYXNlICdob29rX3JlY2VpdmVkJzoge1xuICAgICAgLy8gTGVnYWN5OiBTdG9yZSBldmVudCBvbmx5IChubyBlbnRpdHkgbXV0YXRpb24pXG4gICAgICAvLyAtIHdhaXRfY29tcGxldGVkOiBmb3IgcmVwbGF5IHB1cnBvc2VzXG4gICAgICAvLyAtIGhvb2tfcmVjZWl2ZWQ6IGhvb2tzIGV4aXN0IHZpYSBvbGQgc3lzdGVtLCBqdXN0IHJlY29yZCB0aGUgZXZlbnRcbiAgICAgIGNvbnN0IGV2ZW50SWQgPSBgZXZudF8ke21vbm90b25pY1VsaWQoKX1gO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGV2ZW50OiBFdmVudCA9IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIGV2ZW50SWQsXG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICB9O1xuICAgICAgY29uc3QgY29tcG9zaXRlS2V5ID0gYCR7cnVuSWR9LSR7ZXZlbnRJZH1gO1xuICAgICAgY29uc3QgZXZlbnRQYXRoID0gcmVzb2x2ZVdpdGhpbkJhc2UoXG4gICAgICAgIGJhc2VkaXIsXG4gICAgICAgICdldmVudHMnLFxuICAgICAgICBgJHtjb21wb3NpdGVLZXl9Lmpzb25gXG4gICAgICApO1xuICAgICAgYXdhaXQgd3JpdGVKU09OKGV2ZW50UGF0aCwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHsgZXZlbnQ6IHN0cmlwRXZlbnREYXRhUmVmcyhldmVudCwgcmVzb2x2ZURhdGEpIH07XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV2ZW50IHR5cGUgJyR7ZGF0YS5ldmVudFR5cGV9JyBub3Qgc3VwcG9ydGVkIGZvciBsZWdhY3kgcnVucyBgICtcbiAgICAgICAgICBgKHNwZWNWZXJzaW9uOiAke2N1cnJlbnRSdW4uc3BlY1ZlcnNpb24gfHwgJ3VuZGVmaW5lZCd9KS4gYCArXG4gICAgICAgICAgYFBsZWFzZSB1cGdyYWRlICd3b3JrZmxvdycgcGFja2FnZS5gXG4gICAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,33 @@
|
|
|
1
|
-
import type { Storage } from '@workflow/world';
|
|
1
|
+
import type { AttributeChange, ExperimentalSetAttributesResult, ListWorkflowRunsParams, PaginatedResponse, Storage, WorkflowRun, WorkflowRunWithoutData } from '@workflow/world';
|
|
2
|
+
/**
|
|
3
|
+
* Internal extension of `ListWorkflowRunsParams` that adds a `fileIdFilter`
|
|
4
|
+
* for scoping queries by raw filename (e.g., by tag suffix). Kept out of the
|
|
5
|
+
* public `Storage['runs']['list']` surface — consumers of `@workflow/world`
|
|
6
|
+
* must not see this option.
|
|
7
|
+
*/
|
|
8
|
+
export interface LocalListWorkflowRunsParams extends ListWorkflowRunsParams {
|
|
9
|
+
fileIdFilter?: (fileId: string) => boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface LocalRunsStorage {
|
|
12
|
+
get: Storage['runs']['get'];
|
|
13
|
+
list: {
|
|
14
|
+
(params: LocalListWorkflowRunsParams & {
|
|
15
|
+
resolveData: 'none';
|
|
16
|
+
}): Promise<PaginatedResponse<WorkflowRunWithoutData>>;
|
|
17
|
+
(params?: LocalListWorkflowRunsParams & {
|
|
18
|
+
resolveData?: 'all';
|
|
19
|
+
}): Promise<PaginatedResponse<WorkflowRun>>;
|
|
20
|
+
(params?: LocalListWorkflowRunsParams): Promise<PaginatedResponse<WorkflowRun | WorkflowRunWithoutData>>;
|
|
21
|
+
};
|
|
22
|
+
experimentalSetAttributes(runId: string, changes: AttributeChange[], options?: {
|
|
23
|
+
allowReservedAttributes?: boolean;
|
|
24
|
+
}): Promise<ExperimentalSetAttributesResult>;
|
|
25
|
+
}
|
|
26
|
+
export declare function withRunFileLock<T>(key: string, fn: () => Promise<T>): Promise<T>;
|
|
2
27
|
/**
|
|
3
28
|
* Creates the runs storage implementation using the filesystem.
|
|
4
|
-
* Implements the Storage['runs'] interface with get and list operations
|
|
29
|
+
* Implements the Storage['runs'] interface with get and list operations,
|
|
30
|
+
* plus an internal `fileIdFilter` on `list` for tag-scoped recovery queries.
|
|
5
31
|
*/
|
|
6
|
-
export declare function createRunsStorage(basedir: string, tag?: string):
|
|
32
|
+
export declare function createRunsStorage(basedir: string, tag?: string): LocalRunsStorage;
|
|
7
33
|
//# sourceMappingURL=runs-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs-storage.d.ts","sourceRoot":"","sources":["../../src/storage/runs-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"runs-storage.d.ts","sourceRoot":"","sources":["../../src/storage/runs-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAkBzB;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,EAAE;QACJ,CACE,MAAM,EAAE,2BAA2B,GAAG;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,GAC5D,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtD,CACE,MAAM,CAAC,EAAE,2BAA2B,GAAG;YAAE,WAAW,CAAC,EAAE,KAAK,CAAA;SAAE,GAC7D,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,CACE,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC;KACrE,CAAC;IACF,yBAAyB,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9C,OAAO,CAAC,+BAA+B,CAAC,CAAC;CAC7C;AAiBD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,gBAAgB,CAyGlB"}
|
|
@@ -1,17 +1,52 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { WorkflowRunNotFoundError } from '@workflow/errors';
|
|
3
|
-
import { WorkflowRunSchema } from '@workflow/world';
|
|
3
|
+
import { applyAttributeChanges, AttributeValidationError, validateAttributeChanges, WorkflowRunSchema, } from '@workflow/world';
|
|
4
4
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
5
|
-
import { paginatedFileSystemQuery, readJSONWithFallback } from '../fs.js';
|
|
5
|
+
import { assertSafeEntityId, paginatedFileSystemQuery, readJSONWithFallback, taggedPath, writeJSON, } from '../fs.js';
|
|
6
6
|
import { filterRunData } from './filters.js';
|
|
7
7
|
import { getObjectCreatedAt } from './helpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Per-run in-process async mutex. Serializes concurrent writes that
|
|
10
|
+
* touch the same run JSON file — both attribute writes via
|
|
11
|
+
* `experimentalSetAttributes` and run-lifecycle writes (run_started,
|
|
12
|
+
* run_completed, run_failed, run_cancelled) acquire it. Without the
|
|
13
|
+
* shared lock, an attribute write that lands between a lifecycle
|
|
14
|
+
* handler's read and write would be silently overwritten by the
|
|
15
|
+
* lifecycle write's stale attribute snapshot.
|
|
16
|
+
*
|
|
17
|
+
* Lifecycle writers acquire the lock and re-read the run file inside
|
|
18
|
+
* the critical section to pick up any attributes that landed since
|
|
19
|
+
* their pre-validation read.
|
|
20
|
+
*/
|
|
21
|
+
const runFileLocks = new Map();
|
|
22
|
+
export function withRunFileLock(key, fn) {
|
|
23
|
+
const prev = runFileLocks.get(key);
|
|
24
|
+
const taskBox = {};
|
|
25
|
+
const task = (async () => {
|
|
26
|
+
if (prev)
|
|
27
|
+
await prev.catch(() => undefined);
|
|
28
|
+
try {
|
|
29
|
+
return await fn();
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (runFileLocks.get(key) === taskBox.task) {
|
|
33
|
+
runFileLocks.delete(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
taskBox.task = task;
|
|
38
|
+
runFileLocks.set(key, task);
|
|
39
|
+
return task;
|
|
40
|
+
}
|
|
8
41
|
/**
|
|
9
42
|
* Creates the runs storage implementation using the filesystem.
|
|
10
|
-
* Implements the Storage['runs'] interface with get and list operations
|
|
43
|
+
* Implements the Storage['runs'] interface with get and list operations,
|
|
44
|
+
* plus an internal `fileIdFilter` on `list` for tag-scoped recovery queries.
|
|
11
45
|
*/
|
|
12
46
|
export function createRunsStorage(basedir, tag) {
|
|
13
47
|
return {
|
|
14
48
|
get: (async (id, params) => {
|
|
49
|
+
assertSafeEntityId('runId', id);
|
|
15
50
|
const run = await readJSONWithFallback(basedir, 'runs', id, WorkflowRunSchema, tag);
|
|
16
51
|
if (!run) {
|
|
17
52
|
throw new WorkflowRunNotFoundError(id);
|
|
@@ -24,6 +59,7 @@ export function createRunsStorage(basedir, tag) {
|
|
|
24
59
|
const result = await paginatedFileSystemQuery({
|
|
25
60
|
directory: path.join(basedir, 'runs'),
|
|
26
61
|
schema: WorkflowRunSchema,
|
|
62
|
+
fileIdFilter: params?.fileIdFilter,
|
|
27
63
|
filter: (run) => {
|
|
28
64
|
if (params?.workflowName &&
|
|
29
65
|
run.workflowName !== params.workflowName) {
|
|
@@ -53,6 +89,42 @@ export function createRunsStorage(basedir, tag) {
|
|
|
53
89
|
}
|
|
54
90
|
return result;
|
|
55
91
|
}),
|
|
92
|
+
experimentalSetAttributes: async (runId, changes, options) => {
|
|
93
|
+
assertSafeEntityId('runId', runId);
|
|
94
|
+
return withRunFileLock(runId, async () => {
|
|
95
|
+
const run = await readJSONWithFallback(basedir, 'runs', runId, WorkflowRunSchema, tag);
|
|
96
|
+
if (!run) {
|
|
97
|
+
throw new WorkflowRunNotFoundError(runId);
|
|
98
|
+
}
|
|
99
|
+
// Server-side validation. The SDK validates before sending, but
|
|
100
|
+
// the world is the final authority — re-check so direct callers
|
|
101
|
+
// (tests, other consumers) cannot bypass the limits.
|
|
102
|
+
try {
|
|
103
|
+
validateAttributeChanges(changes, {
|
|
104
|
+
existingKeys: Object.keys(run.attributes ?? {}),
|
|
105
|
+
allowReservedAttributes: options?.allowReservedAttributes,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (err instanceof AttributeValidationError) {
|
|
110
|
+
// Re-throw as a plain error; callers (the SDK) wrap as
|
|
111
|
+
// FatalError on their side.
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
throw err;
|
|
115
|
+
}
|
|
116
|
+
const nextAttributes = applyAttributeChanges(run.attributes, changes);
|
|
117
|
+
const updatedRun = {
|
|
118
|
+
...run,
|
|
119
|
+
attributes: nextAttributes,
|
|
120
|
+
updatedAt: new Date(),
|
|
121
|
+
};
|
|
122
|
+
await writeJSON(taggedPath(basedir, 'runs', runId, tag), updatedRun, {
|
|
123
|
+
overwrite: true,
|
|
124
|
+
});
|
|
125
|
+
return { attributes: nextAttributes };
|
|
126
|
+
});
|
|
127
|
+
},
|
|
56
128
|
};
|
|
57
129
|
}
|
|
58
|
-
//# sourceMappingURL=runs-storage.js.map
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvcnVucy1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVU1RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsU0FBUyxHQUNWLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0NsRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztBQUV6RCxNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFXLEVBQ1gsRUFBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBMEIsRUFBRSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDdkIsSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLFlBQVksQ0FB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LENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFO29CQUNuRSxTQUFTLEVBQUUsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dHJpYnV0ZUNoYW5nZSxcbiAgRXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc1Jlc3VsdCxcbiAgTGlzdFdvcmtmbG93UnVuc1BhcmFtcyxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFN0b3JhZ2UsXG4gIFdvcmtmbG93UnVuLFxuICBXb3JrZmxvd1J1bldpdGhvdXREYXRhLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgYXBwbHlBdHRyaWJ1dGVDaGFuZ2VzLFxuICBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IsXG4gIHZhbGlkYXRlQXR0cmlidXRlQ2hhbmdlcyxcbiAgV29ya2Zsb3dSdW5TY2hlbWEsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT04gfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0U2FmZUVudGl0eUlkLFxuICBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnksXG4gIHJlYWRKU09OV2l0aEZhbGxiYWNrLFxuICB0YWdnZWRQYXRoLFxuICB3cml0ZUpTT04sXG59IGZyb20gJy4uL2ZzLmpzJztcbmltcG9ydCB7IGZpbHRlclJ1bkRhdGEgfSBmcm9tICcuL2ZpbHRlcnMuanMnO1xuaW1wb3J0IHsgZ2V0T2JqZWN0Q3JlYXRlZEF0IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBleHRlbnNpb24gb2YgYExpc3RXb3JrZmxvd1J1bnNQYXJhbXNgIHRoYXQgYWRkcyBhIGBmaWxlSWRGaWx0ZXJgXG4gKiBmb3Igc2NvcGluZyBxdWVyaWVzIGJ5IHJhdyBmaWxlbmFtZSAoZS5nLiwgYnkgdGFnIHN1ZmZpeCkuIEtlcHQgb3V0IG9mIHRoZVxuICogcHVibGljIGBTdG9yYWdlWydydW5zJ11bJ2xpc3QnXWAgc3VyZmFjZSDigJQgY29uc3VtZXJzIG9mIGBAd29ya2Zsb3cvd29ybGRgXG4gKiBtdXN0IG5vdCBzZWUgdGhpcyBvcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxMaXN0V29ya2Zsb3dSdW5zUGFyYW1zIGV4dGVuZHMgTGlzdFdvcmtmbG93UnVuc1BhcmFtcyB7XG4gIGZpbGVJZEZpbHRlcj86IChmaWxlSWQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFJ1bnNTdG9yYWdlIHtcbiAgZ2V0OiBTdG9yYWdlWydydW5zJ11bJ2dldCddO1xuICBsaXN0OiB7XG4gICAgKFxuICAgICAgcGFyYW1zOiBMb2NhbExpc3RXb3JrZmxvd1J1bnNQYXJhbXMgJiB7IHJlc29sdmVEYXRhOiAnbm9uZScgfVxuICAgICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V29ya2Zsb3dSdW5XaXRob3V0RGF0YT4+O1xuICAgIChcbiAgICAgIHBhcmFtcz86IExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtcyAmIHsgcmVzb2x2ZURhdGE/OiAnYWxsJyB9XG4gICAgKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxXb3JrZmxvd1J1bj4+O1xuICAgIChcbiAgICAgIHBhcmFtcz86IExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtc1xuICAgICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V29ya2Zsb3dSdW4gfCBXb3JrZmxvd1J1bldpdGhvdXREYXRhPj47XG4gIH07XG4gIGV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXMoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjaGFuZ2VzOiBBdHRyaWJ1dGVDaGFuZ2VbXSxcbiAgICBvcHRpb25zPzogeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNSZXN1bHQ+O1xufVxuXG4vKipcbiAqIFBlci1ydW4gaW4tcHJvY2VzcyBhc3luYyBtdXRleC4gU2VyaWFsaXplcyBjb25jdXJyZW50IHdyaXRlcyB0aGF0XG4gKiB0b3VjaCB0aGUgc2FtZSBydW4gSlNPTiBmaWxlIOKAlCBib3RoIGF0dHJpYnV0ZSB3cml0ZXMgdmlhXG4gKiBgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc2AgYW5kIHJ1bi1saWZlY3ljbGUgd3JpdGVzIChydW5fc3RhcnRlZCxcbiAqIHJ1bl9jb21wbGV0ZWQsIHJ1bl9mYWlsZWQsIHJ1bl9jYW5jZWxsZWQpIGFjcXVpcmUgaXQuIFdpdGhvdXQgdGhlXG4gKiBzaGFyZWQgbG9jaywgYW4gYXR0cmlidXRlIHdyaXRlIHRoYXQgbGFuZHMgYmV0d2VlbiBhIGxpZmVjeWNsZVxuICogaGFuZGxlcidzIHJlYWQgYW5kIHdyaXRlIHdvdWxkIGJlIHNpbGVudGx5IG92ZXJ3cml0dGVuIGJ5IHRoZVxuICogbGlmZWN5Y2xlIHdyaXRlJ3Mgc3RhbGUgYXR0cmlidXRlIHNuYXBzaG90LlxuICpcbiAqIExpZmVjeWNsZSB3cml0ZXJzIGFjcXVpcmUgdGhlIGxvY2sgYW5kIHJlLXJlYWQgdGhlIHJ1biBmaWxlIGluc2lkZVxuICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gdG8gcGljayB1cCBhbnkgYXR0cmlidXRlcyB0aGF0IGxhbmRlZCBzaW5jZVxuICogdGhlaXIgcHJlLXZhbGlkYXRpb24gcmVhZC5cbiAqL1xuY29uc3QgcnVuRmlsZUxvY2tzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUnVuRmlsZUxvY2s8VD4oXG4gIGtleTogc3RyaW5nLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBydW5GaWxlTG9ja3MuZ2V0KGtleSk7XG4gIGNvbnN0IHRhc2tCb3g6IHsgdGFzaz86IFByb21pc2U8VD4gfSA9IHt9O1xuICBjb25zdCB0YXNrID0gKGFzeW5jICgpID0+IHtcbiAgICBpZiAocHJldikgYXdhaXQgcHJldi5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHJ1bkZpbGVMb2Nrcy5nZXQoa2V5KSA9PT0gdGFza0JveC50YXNrKSB7XG4gICAgICAgIHJ1bkZpbGVMb2Nrcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pKCk7XG4gIHRhc2tCb3gudGFzayA9IHRhc2s7XG4gIHJ1bkZpbGVMb2Nrcy5zZXQoa2V5LCB0YXNrKTtcbiAgcmV0dXJuIHRhc2s7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgcnVucyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBmaWxlc3lzdGVtLlxuICogSW1wbGVtZW50cyB0aGUgU3RvcmFnZVsncnVucyddIGludGVyZmFjZSB3aXRoIGdldCBhbmQgbGlzdCBvcGVyYXRpb25zLFxuICogcGx1cyBhbiBpbnRlcm5hbCBgZmlsZUlkRmlsdGVyYCBvbiBgbGlzdGAgZm9yIHRhZy1zY29wZWQgcmVjb3ZlcnkgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bnNTdG9yYWdlKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogTG9jYWxSdW5zU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiAoYXN5bmMgKGlkOiBzdHJpbmcsIHBhcmFtcz86IGFueSkgPT4ge1xuICAgICAgYXNzZXJ0U2FmZUVudGl0eUlkKCdydW5JZCcsIGlkKTtcbiAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgICBiYXNlZGlyLFxuICAgICAgICAncnVucycsXG4gICAgICAgIGlkLFxuICAgICAgICBXb3JrZmxvd1J1blNjaGVtYSxcbiAgICAgICAgdGFnXG4gICAgICApO1xuICAgICAgaWYgKCFydW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Rm91bmRFcnJvcihpZCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgcmV0dXJuIGZpbHRlclJ1bkRhdGEocnVuLCByZXNvbHZlRGF0YSk7XG4gICAgfSkgYXMgU3RvcmFnZVsncnVucyddWydnZXQnXSxcblxuICAgIGxpc3Q6IChhc3luYyAocGFyYW1zPzogTG9jYWxMaXN0V29ya2Zsb3dSdW5zUGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5KHtcbiAgICAgICAgZGlyZWN0b3J5OiBwYXRoLmpvaW4oYmFzZWRpciwgJ3J1bnMnKSxcbiAgICAgICAgc2NoZW1hOiBXb3JrZmxvd1J1blNjaGVtYSxcbiAgICAgICAgZmlsZUlkRmlsdGVyOiBwYXJhbXM/LmZpbGVJZEZpbHRlcixcbiAgICAgICAgZmlsdGVyOiAocnVuKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyYW1zPy53b3JrZmxvd05hbWUgJiZcbiAgICAgICAgICAgIHJ1bi53b3JrZmxvd05hbWUgIT09IHBhcmFtcy53b3JrZmxvd05hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzICYmIHJ1bi5zdGF0dXMgIT09IHBhcmFtcy5zdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnRPcmRlcjogcGFyYW1zPy5wYWdpbmF0aW9uPy5zb3J0T3JkZXIgPz8gJ2Rlc2MnLFxuICAgICAgICBsaW1pdDogcGFyYW1zPy5wYWdpbmF0aW9uPy5saW1pdCxcbiAgICAgICAgY3Vyc29yOiBwYXJhbXM/LnBhZ2luYXRpb24/LmN1cnNvcixcbiAgICAgICAgZ2V0Q3JlYXRlZEF0OiBnZXRPYmplY3RDcmVhdGVkQXQoJ3dydW4nKSxcbiAgICAgICAgZ2V0SWQ6IChydW4pID0+IHJ1bi5ydW5JZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiByZXNvbHZlRGF0YSBpcyBcIm5vbmVcIiwgcmVwbGFjZSBpbnB1dC9vdXRwdXQgd2l0aCB1bmRlZmluZWRcbiAgICAgIGlmIChyZXNvbHZlRGF0YSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLm1hcCgocnVuKSA9PiAoe1xuICAgICAgICAgICAgLi4ucnVuLFxuICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSBhcyBXb3JrZmxvd1J1bldpdGhvdXREYXRhW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkgYXMgTG9jYWxSdW5zU3RvcmFnZVsnbGlzdCddLFxuXG4gICAgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlczogYXN5bmMgKHJ1bklkLCBjaGFuZ2VzLCBvcHRpb25zKSA9PiB7XG4gICAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ3J1bklkJywgcnVuSWQpO1xuXG4gICAgICByZXR1cm4gd2l0aFJ1bkZpbGVMb2NrKHJ1bklkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGJhc2VkaXIsXG4gICAgICAgICAgJ3J1bnMnLFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIFdvcmtmbG93UnVuU2NoZW1hLFxuICAgICAgICAgIHRhZ1xuICAgICAgICApO1xuICAgICAgICBpZiAoIXJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IocnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgdmFsaWRhdGlvbi4gVGhlIFNESyB2YWxpZGF0ZXMgYmVmb3JlIHNlbmRpbmcsIGJ1dFxuICAgICAgICAvLyB0aGUgd29ybGQgaXMgdGhlIGZpbmFsIGF1dGhvcml0eSDigJQgcmUtY2hlY2sgc28gZGlyZWN0IGNhbGxlcnNcbiAgICAgICAgLy8gKHRlc3RzLCBvdGhlciBjb25zdW1lcnMpIGNhbm5vdCBieXBhc3MgdGhlIGxpbWl0cy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoY2hhbmdlcywge1xuICAgICAgICAgICAgZXhpc3RpbmdLZXlzOiBPYmplY3Qua2V5cyhydW4uYXR0cmlidXRlcyA/PyB7fSksXG4gICAgICAgICAgICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogb3B0aW9ucz8uYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IGFzIGEgcGxhaW4gZXJyb3I7IGNhbGxlcnMgKHRoZSBTREspIHdyYXAgYXNcbiAgICAgICAgICAgIC8vIEZhdGFsRXJyb3Igb24gdGhlaXIgc2lkZS5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dEF0dHJpYnV0ZXMgPSBhcHBseUF0dHJpYnV0ZUNoYW5nZXMocnVuLmF0dHJpYnV0ZXMsIGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB1cGRhdGVkUnVuID0ge1xuICAgICAgICAgIC4uLnJ1bixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBuZXh0QXR0cmlidXRlcyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgd3JpdGVKU09OKHRhZ2dlZFBhdGgoYmFzZWRpciwgJ3J1bnMnLCBydW5JZCwgdGFnKSwgdXBkYXRlZFJ1biwge1xuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlczogbmV4dEF0dHJpYnV0ZXMgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps-storage.d.ts","sourceRoot":"","sources":["../../src/storage/steps-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"steps-storage.d.ts","sourceRoot":"","sources":["../../src/storage/steps-storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAWhE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAiDlB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { StepSchema } from '@workflow/world';
|
|
3
3
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
4
|
-
import { paginatedFileSystemQuery, readJSONWithFallback } from '../fs.js';
|
|
4
|
+
import { assertSafeEntityId, paginatedFileSystemQuery, readJSONWithFallback, } from '../fs.js';
|
|
5
5
|
import { filterStepData } from './filters.js';
|
|
6
6
|
import { getObjectCreatedAt } from './helpers.js';
|
|
7
7
|
/**
|
|
@@ -11,6 +11,8 @@ import { getObjectCreatedAt } from './helpers.js';
|
|
|
11
11
|
export function createStepsStorage(basedir, tag) {
|
|
12
12
|
return {
|
|
13
13
|
get: (async (runId, stepId, params) => {
|
|
14
|
+
assertSafeEntityId('runId', runId);
|
|
15
|
+
assertSafeEntityId('stepId', stepId);
|
|
14
16
|
const compositeKey = `${runId}-${stepId}`;
|
|
15
17
|
const step = await readJSONWithFallback(basedir, 'steps', compositeKey, StepSchema, tag);
|
|
16
18
|
if (!step) {
|
|
@@ -20,6 +22,7 @@ export function createStepsStorage(basedir, tag) {
|
|
|
20
22
|
return filterStepData(step, resolveData);
|
|
21
23
|
}),
|
|
22
24
|
list: (async (params) => {
|
|
25
|
+
assertSafeEntityId('runId', params.runId);
|
|
23
26
|
const resolveData = params.resolveData ?? DEFAULT_RESOLVE_DATA_OPTION;
|
|
24
27
|
const result = await paginatedFileSystemQuery({
|
|
25
28
|
directory: path.join(basedir, 'steps'),
|
|
@@ -46,4 +49,4 @@ export function createStepsStorage(basedir, tag) {
|
|
|
46
49
|
}),
|
|
47
50
|
};
|
|
48
51
|
}
|
|
49
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL3N0ZXBzLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUNMLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWxEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsT0FBZSxFQUNmLEdBQVk7SUFFWixPQUFPO1FBQ0wsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsTUFBWSxFQUFFLEVBQUU7WUFDMUQsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyQyxNQUFNLFlBQVksR0FBRyxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLG9CQUFvQixDQUNyQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxDQUNKLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLE1BQU0sV0FBVyxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsV0FBVyxJQUFJLDJCQUEyQixDQUFDO1lBQ3ZFLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQTRCO1FBRTdCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFXLEVBQUUsRUFBRTtZQUMzQixrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksMkJBQTJCLENBQUM7WUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztnQkFDNUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztnQkFDdEMsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUc7Z0JBQzlCLFNBQVMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxNQUFNO2dCQUNqRCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLO2dCQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNO2dCQUNqQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDO2dCQUN4QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNO2FBQzdCLENBQUMsQ0FBQztZQUVILGdFQUFnRTtZQUNoRSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsT0FBTztvQkFDTCxHQUFHLE1BQU07b0JBQ1QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQixHQUFHLElBQUk7d0JBQ1AsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxTQUFTO3FCQUNsQixDQUFDLENBQXNCO2lCQUN6QixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBNkI7S0FDL0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBTdGVwV2l0aG91dERhdGEsIFN0b3JhZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgU3RlcFNjaGVtYSB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT04gfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0U2FmZUVudGl0eUlkLFxuICBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnksXG4gIHJlYWRKU09OV2l0aEZhbGxiYWNrLFxufSBmcm9tICcuLi9mcy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJTdGVwRGF0YSB9IGZyb20gJy4vZmlsdGVycy5qcyc7XG5pbXBvcnQgeyBnZXRPYmplY3RDcmVhdGVkQXQgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHN0ZXBzIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIGZpbGVzeXN0ZW0uXG4gKiBJbXBsZW1lbnRzIHRoZSBTdG9yYWdlWydzdGVwcyddIGludGVyZmFjZSB3aXRoIGdldCBhbmQgbGlzdCBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlcHNTdG9yYWdlKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogU3RvcmFnZVsnc3RlcHMnXSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiAoYXN5bmMgKHJ1bklkOiBzdHJpbmcsIHN0ZXBJZDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpID0+IHtcbiAgICAgIGFzc2VydFNhZmVFbnRpdHlJZCgncnVuSWQnLCBydW5JZCk7XG4gICAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ3N0ZXBJZCcsIHN0ZXBJZCk7XG4gICAgICBjb25zdCBjb21wb3NpdGVLZXkgPSBgJHtydW5JZH0tJHtzdGVwSWR9YDtcbiAgICAgIGNvbnN0IHN0ZXAgPSBhd2FpdCByZWFkSlNPTldpdGhGYWxsYmFjayhcbiAgICAgICAgYmFzZWRpcixcbiAgICAgICAgJ3N0ZXBzJyxcbiAgICAgICAgY29tcG9zaXRlS2V5LFxuICAgICAgICBTdGVwU2NoZW1hLFxuICAgICAgICB0YWdcbiAgICAgICk7XG4gICAgICBpZiAoIXN0ZXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwICR7c3RlcElkfSBpbiBydW4gJHtydW5JZH0gbm90IGZvdW5kYCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgcmV0dXJuIGZpbHRlclN0ZXBEYXRhKHN0ZXAsIHJlc29sdmVEYXRhKTtcbiAgICB9KSBhcyBTdG9yYWdlWydzdGVwcyddWydnZXQnXSxcblxuICAgIGxpc3Q6IChhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGFzc2VydFNhZmVFbnRpdHlJZCgncnVuSWQnLCBwYXJhbXMucnVuSWQpO1xuICAgICAgY29uc3QgcmVzb2x2ZURhdGEgPSBwYXJhbXMucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5KHtcbiAgICAgICAgZGlyZWN0b3J5OiBwYXRoLmpvaW4oYmFzZWRpciwgJ3N0ZXBzJyksXG4gICAgICAgIHNjaGVtYTogU3RlcFNjaGVtYSxcbiAgICAgICAgZmlsZVByZWZpeDogYCR7cGFyYW1zLnJ1bklkfS1gLFxuICAgICAgICBzb3J0T3JkZXI6IHBhcmFtcy5wYWdpbmF0aW9uPy5zb3J0T3JkZXIgPz8gJ2Rlc2MnLFxuICAgICAgICBsaW1pdDogcGFyYW1zLnBhZ2luYXRpb24/LmxpbWl0LFxuICAgICAgICBjdXJzb3I6IHBhcmFtcy5wYWdpbmF0aW9uPy5jdXJzb3IsXG4gICAgICAgIGdldENyZWF0ZWRBdDogZ2V0T2JqZWN0Q3JlYXRlZEF0KCdzdGVwJyksXG4gICAgICAgIGdldElkOiAoc3RlcCkgPT4gc3RlcC5zdGVwSWQsXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgcmVzb2x2ZURhdGEgaXMgXCJub25lXCIsIHJlcGxhY2UgaW5wdXQvb3V0cHV0IHdpdGggdW5kZWZpbmVkXG4gICAgICBpZiAocmVzb2x2ZURhdGEgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YS5tYXAoKHN0ZXApID0+ICh7XG4gICAgICAgICAgICAuLi5zdGVwLFxuICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSBhcyBTdGVwV2l0aG91dERhdGFbXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSBhcyBTdG9yYWdlWydzdGVwcyddWydsaXN0J10sXG4gIH07XG59XG4iXX0=
|
package/dist/storage.js
CHANGED
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
*/
|
|
9
9
|
// Re-export from the modular storage implementation
|
|
10
10
|
export { createStorage } from './storage/index.js';
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaWxlc3lzdGVtLWJhc2VkIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gZm9yIHdvcmtmbG93IGRhdGEuXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjb21wbGV0ZSBTdG9yYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgcGVyc2lzdHNcbiAqIHdvcmtmbG93IHJ1bnMsIHN0ZXBzLCBldmVudHMsIGFuZCBob29rcyB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gUmUtZXhwb3J0IGZyb20gdGhlIG1vZHVsYXIgc3RvcmFnZSBpbXBsZW1lbnRhdGlvblxuZXhwb3J0IHsgY3JlYXRlU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS9pbmRleC5qcyc7XG4iXX0=
|
package/dist/streamer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamer.d.ts","sourceRoot":"","sources":["../src/streamer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"streamer.d.ts","sourceRoot":"","sources":["../src/streamer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,QAAQ,EAET,MAAM,iBAAiB,CAAC;AAsBzB;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,uBAG1C;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM;;;EAKlD;AA4DD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAwjBtE"}
|