@workflow/world-local 5.0.0-beta.1 → 5.0.0-beta.11
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 +57 -2
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +124 -10
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -4
- package/dist/init.js +1 -1
- package/dist/instrumentObject.js +1 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +32 -2
- package/dist/storage/events-storage.d.ts.map +1 -1
- package/dist/storage/events-storage.js +754 -600
- package/dist/storage/filters.js +1 -1
- package/dist/storage/helpers.js +1 -1
- package/dist/storage/hooks-storage.d.ts.map +1 -1
- package/dist/storage/hooks-storage.js +3 -2
- 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 +133 -34
- package/dist/telemetry.js +1 -1
- package/dist/test-helpers.js +1 -1
- package/dist/util.js +1 -1
- package/package.json +5 -5
- 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
|
package/dist/storage/helpers.js
CHANGED
|
@@ -41,4 +41,4 @@ export const getObjectCreatedAt = (idPrefix) => (filename) => {
|
|
|
41
41
|
const ulid = id.replace(replaceRegex, '');
|
|
42
42
|
return ulidToDate(ulid);
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDckMsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBRW5FOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUM3QixDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUNyQixDQUFDLFFBQWdCLEVBQWUsRUFBRTtJQUNoQywwQ0FBMEM7SUFDMUMsbURBQW1EO0lBQ25ELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUV0RSxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQixrRkFBa0Y7UUFDbEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLDhFQUE4RTtRQUM5RSxxRkFBcUY7UUFDckYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IHN0cmlwVGFnLCB1bGlkVG9EYXRlIH0gZnJvbSAnLi4vZnMuanMnO1xuXG4vKipcbiAqIEhhc2ggYSBob29rIHRva2VuIHRvIHByb2R1Y2UgYSBmaWxlc3lzdGVtLXNhZmUgY29uc3RyYWludCBmaWxlbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0b2tlbikuZGlnZXN0KCdoZXgnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtb25vdG9uaWMgVUxJRCBmYWN0b3J5IHRoYXQgZW5zdXJlcyBVTElEcyBhcmUgYWx3YXlzIGluY3JlYXNpbmdcbiAqIGV2ZW4gd2hlbiBnZW5lcmF0ZWQgd2l0aGluIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuICovXG5leHBvcnQgY29uc3QgbW9ub3RvbmljVWxpZCA9IG1vbm90b25pY0ZhY3RvcnkoKCkgPT4gTWF0aC5yYW5kb20oKSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRvIGV4dHJhY3QgY3JlYXRlZEF0IGRhdGUgZnJvbSBhIGZpbGVuYW1lIGJhc2VkIG9uIFVMSUQuXG4gKiBVc2VkIGZvciBlZmZpY2llbnQgcGFnaW5hdGlvbiB3aXRob3V0IHJlYWRpbmcgZmlsZSBjb250ZW50cy5cbiAqXG4gKiBAcGFyYW0gaWRQcmVmaXggLSBUaGUgcHJlZml4IHRvIHN0cmlwIGZyb20gZmlsZW5hbWVzIChlLmcuLCAnd3J1bicsICdldm50JywgJ3N0ZXAnKVxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIERhdGUgZnJvbSBmaWxlbmFtZSwgb3IgbnVsbCBpZiBub3QgZXh0cmFjdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9iamVjdENyZWF0ZWRBdCA9XG4gIChpZFByZWZpeDogc3RyaW5nKSA9PlxuICAoZmlsZW5hbWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+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,CAkBf"}
|
|
@@ -2,7 +2,7 @@ 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
7
|
import { hashToken } from './helpers.js';
|
|
8
8
|
/**
|
|
@@ -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);
|
|
@@ -89,4 +90,4 @@ export async function deleteAllHooksForRun(basedir, runId) {
|
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
//# sourceMappingURL=hooks-storage.js.map
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3Mtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hvb2tzLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXJELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsYUFBYSxFQUNiLHdCQUF3QixFQUN4QixRQUFRLEVBQ1Isb0JBQW9CLEdBQ3JCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWUsRUFDZixHQUFZO0lBRVosc0VBQXNFO0lBQ3RFLEtBQUssVUFBVSxlQUFlLENBQUMsS0FBYTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUss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LE9BQWUsRUFDZixLQUFhO0lBRWIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakMsd0RBQXdEO1lBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQzlCLFFBQVEsRUFDUixRQUFRLEVBQ1IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2hDLENBQUM7WUFDRixNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqQyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSG9va05vdEZvdW5kRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHtcbiAgR2V0SG9va1BhcmFtcyxcbiAgSG9vayxcbiAgTGlzdEhvb2tzUGFyYW1zLFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgU3RvcmFnZSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IEhvb2tTY2hlbWEgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGFzc2VydFNhZmVFbnRpdHlJZCxcbiAgZGVsZXRlSlNPTixcbiAgbGlzdEpTT05GaWxlcyxcbiAgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5LFxuICByZWFkSlNPTixcbiAgcmVhZEpTT05XaXRoRmFsbGJhY2ssXG59IGZyb20gJy4uL2ZzLmpzJztcbmltcG9ydCB7IGZpbHRlckhvb2tEYXRhIH0gZnJvbSAnLi9maWx0ZXJzLmpzJztcbmltcG9ydCB7IGhhc2hUb2tlbiB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhvb2tzIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIGZpbGVzeXN0ZW0uXG4gKiBJbXBsZW1lbnRzIHRoZSBTdG9yYWdlWydob29rcyddIGludGVyZmFjZSB3aXRoIGhvb2sgQ1JVRCBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9va3NTdG9yYWdlKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogU3RvcmFnZVsnaG9va3MnXSB7XG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGEgaG9vayBieSB0b2tlbiAoc2hhcmVkIGJldHdlZW4gZ2V0QnlUb2tlbilcbiAgYXN5bmMgZnVuY3Rpb24gZmluZEhvb2tCeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPEhvb2sgfCBudWxsPiB7XG4gICAgY29uc3QgaG9va3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ2hvb2tzJyk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBsaXN0SlNPTkZpbGVzKGhvb2tzRGlyKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgaG9va1BhdGggPSBwYXRoLmpvaW4oaG9va3NEaXIsIGAke2ZpbGV9Lmpzb25gKTtcbiAgICAgIGNvbnN0IGhvb2sgPSBhd2FpdCByZWFkSlNPTihob29rUGF0aCwgSG9va1NjaGVtYSk7XG4gICAgICBpZiAoaG9vayAmJiBob29rLnRva2VuID09PSB0b2tlbikge1xuICAgICAgICByZXR1cm4geyAuLi5ob29rLCBpc1dlYmhvb2s6IGhvb2suaXNXZWJob29rID8/IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldChob29rSWQ6IHN0cmluZywgcGFyYW1zPzogR2V0SG9va1BhcmFtcyk6IFByb21pc2U8SG9vaz4ge1xuICAgIGFzc2VydFNhZmVFbnRpdHlJZCgnaG9va0lkJywgaG9va0lkKTtcbiAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT05XaXRoRmFsbGJhY2soXG4gICAgICBiYXNlZGlyLFxuICAgICAgJ2hvb2tzJyxcbiAgICAgIGhvb2tJZCxcbiAgICAgIEhvb2tTY2hlbWEsXG4gICAgICB0YWdcbiAgICApO1xuICAgIGlmICghaG9vaykge1xuICAgICAgdGhyb3cgbmV3IEhvb2tOb3RGb3VuZEVycm9yKGhvb2tJZCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVEYXRhID0gcGFyYW1zPy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG4gICAgcmV0dXJuIGZpbHRlckhvb2tEYXRhKFxuICAgICAgeyAuLi5ob29rLCBpc1dlYmhvb2s6IGhvb2suaXNXZWJob29rID8/IHRydWUgfSxcbiAgICAgIHJlc29sdmVEYXRhXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldEJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8SG9vaz4ge1xuICAgIGNvbnN0IGhvb2sgPSBhd2FpdCBmaW5kSG9va0J5VG9rZW4odG9rZW4pO1xuICAgIGlmICghaG9vaykge1xuICAgICAgdGhyb3cgbmV3IEhvb2tOb3RGb3VuZEVycm9yKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvb2s7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBsaXN0KFxuICAgIHBhcmFtczogTGlzdEhvb2tzUGFyYW1zXG4gICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8SG9vaz4+IHtcbiAgICBjb25zdCBob29rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnaG9va3MnKTtcbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnkoe1xuICAgICAgZGlyZWN0b3J5OiBob29rc0RpcixcbiAgICAgIHNjaGVtYTogSG9va1NjaGVtYSxcbiAgICAgIHNvcnRPcmRlcjogcGFyYW1zLnBhZ2luYXRpb24/LnNvcnRPcmRlciA/PyAnYXNjJyxcbiAgICAgIGxpbWl0OiBwYXJhbXMucGFnaW5hdGlvbj8ubGltaXQsXG4gICAgICBjdXJzb3I6IHBhcmFtcy5wYWdpbmF0aW9uPy5jdXJzb3IsXG4gICAgICBmaWxlUHJlZml4OiB1bmRlZmluZWQsIC8vIEhvb2tzIGRvbid0IGhhdmUgVUxJRHMsIHNvIHdlIGNhbid0IG9wdGltaXplIGJ5IGZpbGVuYW1lXG4gICAgICBmaWx0ZXI6IChob29rKSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBieSBydW5JZCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAocGFyYW1zLnJ1bklkICYmIGhvb2sucnVuSWQgIT09IHBhcmFtcy5ydW5JZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBnZXRDcmVhdGVkQXQ6ICgpID0+IHtcbiAgICAgICAgLy8gSG9vayBmaWxlcyBkb24ndCBoYXZlIFVMSUQgdGltZXN0YW1wcyBpbiBmaWxlbmFtZSwgc28gcmV0dXJuIG51bGxcbiAgICAgICAgLy8gdG8gc2tpcCB0aGUgZmlsZW5hbWUtYmFzZWQgb3B0aW1pemF0aW9uIGFuZCBkZWZlciB0byBKU09OLWJhc2VkXG4gICAgICAgIC8vIGN1cnNvciBmaWx0ZXJpbmcgd2hpY2ggdXNlcyB0aGUgYWN0dWFsIGNyZWF0ZWRBdCBmcm9tIHRoZSBmaWxlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBnZXRJZDogKGhvb2spID0+IGhvb2suaG9va0lkLFxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIGFmdGVyIHBhZ2luYXRpb25cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGEubWFwKChob29rKSA9PiBmaWx0ZXJIb29rRGF0YShob29rLCByZXNvbHZlRGF0YSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBnZXQsIGdldEJ5VG9rZW4sIGxpc3QgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVsZXRlIGFsbCBob29rcyBhc3NvY2lhdGVkIHdpdGggYSB3b3JrZmxvdyBydW4uXG4gKiBDYWxsZWQgd2hlbiBhIHJ1biByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGxIb29rc0ZvclJ1bihcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBydW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaG9va3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ2hvb2tzJyk7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdEpTT05GaWxlcyhob29rc0Rpcik7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgaG9va1BhdGggPSBwYXRoLmpvaW4oaG9va3NEaXIsIGAke2ZpbGV9Lmpzb25gKTtcbiAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgIGlmIChob29rICYmIGhvb2sucnVuSWQgPT09IHJ1bklkKSB7XG4gICAgICAvLyBEZWxldGUgdGhlIHRva2VuIGNvbnN0cmFpbnQgZmlsZSB0byBmcmVlIHVwIHRoZSB0b2tlblxuICAgICAgY29uc3QgY29uc3RyYWludFBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIGhvb2tzRGlyLFxuICAgICAgICAndG9rZW5zJyxcbiAgICAgICAgYCR7aGFzaFRva2VuKGhvb2sudG9rZW4pfS5qc29uYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGRlbGV0ZUpTT04oY29uc3RyYWludFBhdGgpO1xuICAgICAgYXdhaXQgZGVsZXRlSlNPTihob29rUGF0aCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
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"}
|