@relayflows/sdk 2.0.29 → 2.0.30
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/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +10 -1
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/bundle-extensions.d.ts.map +1 -1
- package/dist/bundle-extensions.js +4 -7
- package/dist/bundle-extensions.js.map +1 -1
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +41 -7
- package/dist/bundle.js.map +1 -1
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +18 -6
- package/dist/canonical.js.map +1 -1
- package/dist/flow-extension-compat.d.ts.map +1 -1
- package/dist/flow-extension-compat.js +26 -8
- package/dist/flow-extension-compat.js.map +1 -1
- package/dist/flow-extension-loader.d.ts +7 -0
- package/dist/flow-extension-loader.d.ts.map +1 -1
- package/dist/flow-extension-loader.js +48 -22
- package/dist/flow-extension-loader.js.map +1 -1
- package/dist/fs-descriptor.d.ts +17 -0
- package/dist/fs-descriptor.d.ts.map +1 -0
- package/dist/fs-descriptor.js +96 -0
- package/dist/fs-descriptor.js.map +1 -0
- package/dist/hosted-base-snapshot.d.ts +25 -0
- package/dist/hosted-base-snapshot.d.ts.map +1 -0
- package/dist/hosted-base-snapshot.js +278 -0
- package/dist/hosted-base-snapshot.js.map +1 -0
- package/dist/hosted-extension-declarations.d.ts +10 -0
- package/dist/hosted-extension-declarations.d.ts.map +1 -0
- package/dist/hosted-extension-declarations.js +272 -0
- package/dist/hosted-extension-declarations.js.map +1 -0
- package/dist/hosted-extension-isolation.d.ts +82 -0
- package/dist/hosted-extension-isolation.d.ts.map +1 -0
- package/dist/hosted-extension-isolation.js +322 -0
- package/dist/hosted-extension-isolation.js.map +1 -0
- package/dist/hosted-extension-manifest.d.ts +9 -0
- package/dist/hosted-extension-manifest.d.ts.map +1 -0
- package/dist/hosted-extension-manifest.js +235 -0
- package/dist/hosted-extension-manifest.js.map +1 -0
- package/dist/hosted-extension-protocol.d.ts +16 -0
- package/dist/hosted-extension-protocol.d.ts.map +1 -0
- package/dist/hosted-extension-protocol.js +224 -0
- package/dist/hosted-extension-protocol.js.map +1 -0
- package/dist/hosted-extension-runtime.d.ts +30 -0
- package/dist/hosted-extension-runtime.d.ts.map +1 -0
- package/dist/hosted-extension-runtime.js +167 -0
- package/dist/hosted-extension-runtime.js.map +1 -0
- package/dist/hosted-extension-sandbox-source.d.ts +9 -0
- package/dist/hosted-extension-sandbox-source.d.ts.map +1 -0
- package/dist/hosted-extension-sandbox-source.js +95 -0
- package/dist/hosted-extension-sandbox-source.js.map +1 -0
- package/dist/hosted-extension-sandbox.d.ts +39 -0
- package/dist/hosted-extension-sandbox.d.ts.map +1 -0
- package/dist/hosted-extension-sandbox.js +418 -0
- package/dist/hosted-extension-sandbox.js.map +1 -0
- package/dist/hosted-project.d.ts +3 -0
- package/dist/hosted-project.d.ts.map +1 -0
- package/dist/hosted-project.js +19 -0
- package/dist/hosted-project.js.map +1 -0
- package/dist/hosted-promise-safety.d.ts +12 -0
- package/dist/hosted-promise-safety.d.ts.map +1 -0
- package/dist/hosted-promise-safety.js +63 -0
- package/dist/hosted-promise-safety.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/intrinsic-array.d.ts +3 -0
- package/dist/intrinsic-array.d.ts.map +1 -0
- package/dist/intrinsic-array.js +14 -0
- package/dist/intrinsic-array.js.map +1 -0
- package/dist/json-value.d.ts +6 -1
- package/dist/json-value.d.ts.map +1 -1
- package/dist/json-value.js +155 -36
- package/dist/json-value.js.map +1 -1
- package/dist/llm-worker.d.ts +9 -0
- package/dist/llm-worker.d.ts.map +1 -1
- package/dist/llm-worker.js +15 -1
- package/dist/llm-worker.js.map +1 -1
- package/dist/plugin-store.d.ts +8 -2
- package/dist/plugin-store.d.ts.map +1 -1
- package/dist/plugin-store.js +233 -56
- package/dist/plugin-store.js.map +1 -1
- package/dist/semver-range.d.ts.map +1 -1
- package/dist/semver-range.js +27 -15
- package/dist/semver-range.js.map +1 -1
- package/package.json +2 -2
- package/src/authored-flow-executor.ts +10 -1
- package/src/bundle-extensions.ts +6 -5
- package/src/bundle.ts +52 -7
- package/src/canonical.ts +20 -6
- package/src/flow-extension-compat.ts +32 -7
- package/src/flow-extension-loader.ts +56 -21
- package/src/fs-descriptor.ts +127 -0
- package/src/hosted-base-snapshot.ts +351 -0
- package/src/hosted-extension-declarations.ts +387 -0
- package/src/hosted-extension-isolation.ts +457 -0
- package/src/hosted-extension-manifest.ts +249 -0
- package/src/hosted-extension-protocol.ts +262 -0
- package/src/hosted-extension-runtime.ts +266 -0
- package/src/hosted-extension-sandbox-source.ts +94 -0
- package/src/hosted-extension-sandbox.ts +489 -0
- package/src/hosted-project.ts +18 -0
- package/src/hosted-promise-safety.ts +68 -0
- package/src/index.ts +18 -0
- package/src/intrinsic-array.ts +14 -0
- package/src/json-value.ts +184 -32
- package/src/llm-worker.ts +15 -1
- package/src/plugin-store.ts +323 -56
- package/src/semver-range.ts +39 -14
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
1
|
import { dirname, join } from 'node:path';
|
|
3
2
|
import { sha256 } from './bundle.js';
|
|
4
3
|
import { assertBaseCompatible, assertCompatible, runtimeVersions } from './flow-extension-compat.js';
|
|
5
4
|
import { validateFlowExtensionManifest } from './flow-extension-manifest.js';
|
|
6
5
|
import { findPluginProject } from './plugin-loader.js';
|
|
6
|
+
import { appendIntrinsicArray } from './intrinsic-array.js';
|
|
7
7
|
import { reconcileDeclaredExtensions } from './plugin-lock.js';
|
|
8
8
|
import { PluginError } from './plugin-manifest.js';
|
|
9
|
-
import { pluginStoreDirectory,
|
|
9
|
+
import { pluginStoreDirectory, readStoredPluginFiles } from './plugin-store.js';
|
|
10
|
+
const JSON_PARSE = JSON.parse;
|
|
11
|
+
const ARRAY_IS_ARRAY = Array.isArray;
|
|
12
|
+
const JSON_STRINGIFY = JSON.stringify;
|
|
13
|
+
const OBJECT_FREEZE = Object.freeze;
|
|
14
|
+
const REGEXP_TEST = Function.prototype.call.bind(RegExp.prototype.test);
|
|
15
|
+
const STRING_SPLIT = Function.prototype.call.bind(String.prototype.split);
|
|
10
16
|
const EXTENSION_HEADER_FIELDS = new Set(['budget', 'tools']);
|
|
11
17
|
const WALLCLOCK_MS = { ms: 1, s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 };
|
|
12
18
|
function wallclockMs(value) {
|
|
@@ -45,7 +51,7 @@ function subscriptionOf(handler) {
|
|
|
45
51
|
const { provider, type, payload } = trigger.filter;
|
|
46
52
|
if (typeof provider !== 'string' || provider !== trigger.name || typeof type !== 'string')
|
|
47
53
|
return undefined;
|
|
48
|
-
const action = typeof payload === 'object' && payload !== null && !
|
|
54
|
+
const action = typeof payload === 'object' && payload !== null && !ARRAY_IS_ARRAY(payload) ? payload.action : undefined;
|
|
49
55
|
if (action !== undefined && typeof action !== 'string')
|
|
50
56
|
return undefined;
|
|
51
57
|
return action === undefined ? { provider, event: type } : { provider, event: type, action };
|
|
@@ -61,32 +67,40 @@ const DISPATCH_PROVIDER = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
|
61
67
|
const DISPATCH_EVENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
62
68
|
const DISPATCH_DELIVERY = /^[A-Za-z0-9_.:-]{1,200}$/;
|
|
63
69
|
function hostedEventIdentity(dispatch) {
|
|
64
|
-
if (typeof dispatch !== 'object' || dispatch === null ||
|
|
70
|
+
if (typeof dispatch !== 'object' || dispatch === null || ARRAY_IS_ARRAY(dispatch)) {
|
|
65
71
|
throw new PluginError('plugin_event_unroutable', 'Hosted extension dispatch authority is malformed.');
|
|
66
72
|
}
|
|
67
73
|
const { provenance, provider, eventType, deliveryId } = dispatch;
|
|
68
74
|
if (dispatch[HOSTED_EXTENSION_DISPATCH_AUTHORITY] !== true
|
|
69
75
|
|| provenance !== 'integration-watch'
|
|
70
|
-
|| typeof provider !== 'string' || !DISPATCH_PROVIDER
|
|
71
|
-
|| typeof deliveryId !== 'string' || !DISPATCH_DELIVERY
|
|
76
|
+
|| typeof provider !== 'string' || !REGEXP_TEST(DISPATCH_PROVIDER, provider)
|
|
77
|
+
|| typeof deliveryId !== 'string' || !REGEXP_TEST(DISPATCH_DELIVERY, deliveryId)
|
|
72
78
|
|| typeof eventType !== 'string') {
|
|
73
79
|
throw new PluginError('plugin_event_unroutable', 'Hosted extension dispatch authority is malformed.');
|
|
74
80
|
}
|
|
75
|
-
const parts = eventType
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
const parts = STRING_SPLIT(eventType, '.');
|
|
82
|
+
let valid = parts.length === 1 || parts.length === 2;
|
|
83
|
+
for (let index = 0; valid && index < parts.length; index += 1) {
|
|
84
|
+
valid = REGEXP_TEST(DISPATCH_EVENT, parts[index]);
|
|
85
|
+
}
|
|
86
|
+
if (!valid) {
|
|
87
|
+
throw new PluginError('plugin_event_unroutable', `Hosted extension event ${JSON_STRINGIFY(eventType)} is malformed.`);
|
|
78
88
|
}
|
|
79
89
|
return parts.length === 1
|
|
80
90
|
? { provider, event: parts[0] }
|
|
81
91
|
: { provider, event: parts[0], action: parts[1] };
|
|
82
92
|
}
|
|
93
|
+
/** Validate and project branded host authority without making it serializable. */
|
|
94
|
+
export function hostedExtensionDispatchIdentity(dispatch) {
|
|
95
|
+
return OBJECT_FREEZE(hostedEventIdentity(dispatch));
|
|
96
|
+
}
|
|
83
97
|
/**
|
|
84
98
|
* Brand metadata only after the host has authenticated the integration
|
|
85
99
|
* delivery. The symbol is deliberately not serializable, so copying a direct
|
|
86
100
|
* run's JSON into executor options cannot mint dispatch authority.
|
|
87
101
|
*/
|
|
88
102
|
export function hostedExtensionDispatchFromVerifiedDelivery(delivery) {
|
|
89
|
-
const dispatch =
|
|
103
|
+
const dispatch = OBJECT_FREEZE({
|
|
90
104
|
[HOSTED_EXTENSION_DISPATCH_AUTHORITY]: true,
|
|
91
105
|
provenance: 'integration-watch',
|
|
92
106
|
...delivery,
|
|
@@ -105,16 +119,26 @@ export function extensionHandlerForHostedDispatch(dispatch, extensions) {
|
|
|
105
119
|
if (dispatch === undefined)
|
|
106
120
|
return undefined;
|
|
107
121
|
const identity = hostedEventIdentity(dispatch);
|
|
108
|
-
const matches =
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
const matches = [];
|
|
123
|
+
for (let extensionIndex = 0; extensionIndex < extensions.length; extensionIndex += 1) {
|
|
124
|
+
const extension = extensions[extensionIndex];
|
|
125
|
+
for (let handlerIndex = 0; handlerIndex < extension.handlers.length; handlerIndex += 1) {
|
|
126
|
+
const handler = extension.handlers[handlerIndex];
|
|
127
|
+
const subscription = subscriptionOf(handler);
|
|
128
|
+
if (subscription === undefined || subscription.provider !== identity.provider
|
|
129
|
+
|| subscription.event !== identity.event)
|
|
130
|
+
continue;
|
|
131
|
+
if (subscription.action !== undefined && subscription.action !== identity.action)
|
|
132
|
+
continue;
|
|
133
|
+
appendIntrinsicArray(matches, { extension, handler });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
116
136
|
if (matches.length > 1) {
|
|
117
|
-
|
|
137
|
+
let matchingNames = '';
|
|
138
|
+
for (let index = 0; index < matches.length; index += 1) {
|
|
139
|
+
matchingNames += `${index === 0 ? '' : ', '}${matches[index].extension.name}`;
|
|
140
|
+
}
|
|
141
|
+
throw new PluginError('plugin_event_ambiguous', `Hosted event ${identity.provider}.${identity.event}${identity.action === undefined ? '' : `.${identity.action}`} matches multiple extension handlers (${matchingNames}).`);
|
|
118
142
|
}
|
|
119
143
|
return matches[0];
|
|
120
144
|
}
|
|
@@ -134,13 +158,15 @@ function assertDeclaredSubscription(name, manifest, handler, index) {
|
|
|
134
158
|
}
|
|
135
159
|
async function loadOne(root, lock, ref, base, options) {
|
|
136
160
|
const directory = pluginStoreDirectory(root, lock.name, lock.digest);
|
|
137
|
-
await
|
|
138
|
-
const manifestBytes =
|
|
161
|
+
const stored = await readStoredPluginFiles(directory, lock.digest);
|
|
162
|
+
const manifestBytes = stored.find(file => file.path === 'flows-plugin.json')?.data;
|
|
163
|
+
if (manifestBytes === undefined)
|
|
164
|
+
throw new PluginError('plugin_source_drift', `${ref}: flows-plugin.json is missing.`);
|
|
139
165
|
if (sha256(manifestBytes) !== lock.manifestSha256)
|
|
140
166
|
throw new PluginError('plugin_source_drift', `${ref}: flows-plugin.json differs from the lockfile's manifest hash.`);
|
|
141
167
|
let input;
|
|
142
168
|
try {
|
|
143
|
-
input =
|
|
169
|
+
input = JSON_PARSE(manifestBytes.toString('utf8'));
|
|
144
170
|
}
|
|
145
171
|
catch {
|
|
146
172
|
throw new PluginError('plugin_manifest_invalid', `${ref}: flows-plugin.json is not valid JSON.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-extension-loader.js","sourceRoot":"","sources":["../src/flow-extension-loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flow-extension-loader.js","sourceRoot":"","sources":["../src/flow-extension-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Dir, Dirent, Stats, type BigIntStats, type PathLike } from 'node:fs';
|
|
2
|
+
export declare const descriptorIsDirectory: (stats: Stats | BigIntStats) => boolean;
|
|
3
|
+
export declare const descriptorIsFile: (stats: Stats | BigIntStats) => boolean;
|
|
4
|
+
export declare const directoryEntryIsDirectory: (entry: Dirent) => boolean;
|
|
5
|
+
export declare const directoryEntryIsFile: (entry: Dirent) => boolean;
|
|
6
|
+
export declare function closeDescriptor(descriptor: number): Promise<void>;
|
|
7
|
+
export declare function openDescriptor(path: PathLike, flags: number): Promise<number>;
|
|
8
|
+
export declare function statDescriptor(descriptor: number, options: {
|
|
9
|
+
bigint: true;
|
|
10
|
+
}): Promise<BigIntStats>;
|
|
11
|
+
export declare function lstatPath(path: PathLike): Promise<Stats>;
|
|
12
|
+
export declare function openDirectory(path: PathLike): Promise<Dir>;
|
|
13
|
+
export declare function readDirectory(path: PathLike): Promise<Dirent[]>;
|
|
14
|
+
export declare function readDirectoryEntry(directory: Dir): Promise<Dirent | null>;
|
|
15
|
+
export declare function closeDirectory(directory: Dir): Promise<void>;
|
|
16
|
+
export declare function readDescriptor(descriptor: number, buffer: Buffer, offset: number, length: number, position: number): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=fs-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-descriptor.d.ts","sourceRoot":"","sources":["../src/fs-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,MAAM,EACN,KAAK,EAQL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,SAAS,CAAC;AAgCjB,eAAO,MAAM,qBAAqB,UANzB,KAAK,GAAG,WAAW,KACvB,OAKkD,CAAC;AACxD,eAAO,MAAM,gBAAgB,UAJpB,KAAK,GAAG,WAAW,KACvB,OAGwC,CAAC;AAC9C,eAAO,MAAM,yBAAyB,UAtB7B,MAAM,KACV,OAqBuD,CAAC;AAC7D,eAAO,MAAM,oBAAoB,UApBxB,MAAM,KACV,OAmB6C,CAAC;AAEnD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAOlG;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAOxD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAO1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO/D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOzE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5D;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Dir, Dirent, Stats, close, fstat, lstat, open, opendir, read, readdir, } from 'node:fs';
|
|
2
|
+
import { hostedPromiseValue } from './hosted-promise-safety.js';
|
|
3
|
+
const CLOSE = close;
|
|
4
|
+
const FSTAT = fstat;
|
|
5
|
+
const LSTAT = lstat;
|
|
6
|
+
const OPEN = open;
|
|
7
|
+
const OPENDIR = opendir;
|
|
8
|
+
const READ = read;
|
|
9
|
+
const READDIR = readdir;
|
|
10
|
+
const PROMISE = Promise;
|
|
11
|
+
const DIRENT_IS_DIRECTORY = Function.prototype.call.bind(Dirent.prototype.isDirectory);
|
|
12
|
+
const DIRENT_IS_FILE = Function.prototype.call.bind(Dirent.prototype.isFile);
|
|
13
|
+
const DIR_CLOSE = Function.prototype.call.bind(Dir.prototype.close);
|
|
14
|
+
const DIR_READ = Function.prototype.call.bind(Dir.prototype.read);
|
|
15
|
+
const STATS_IS_DIRECTORY = Function.prototype.call.bind(Stats.prototype.isDirectory);
|
|
16
|
+
const STATS_IS_FILE = Function.prototype.call.bind(Stats.prototype.isFile);
|
|
17
|
+
export const descriptorIsDirectory = STATS_IS_DIRECTORY;
|
|
18
|
+
export const descriptorIsFile = STATS_IS_FILE;
|
|
19
|
+
export const directoryEntryIsDirectory = DIRENT_IS_DIRECTORY;
|
|
20
|
+
export const directoryEntryIsFile = DIRENT_IS_FILE;
|
|
21
|
+
export function closeDescriptor(descriptor) {
|
|
22
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
23
|
+
CLOSE(descriptor, error => error === null ? resolvePromise() : rejectPromise(error));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function openDescriptor(path, flags) {
|
|
27
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
28
|
+
OPEN(path, flags, (error, descriptor) => error === null ? resolvePromise(descriptor) : rejectPromise(error));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function statDescriptor(descriptor, options) {
|
|
32
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
33
|
+
FSTAT(descriptor, options, (error, stats) => {
|
|
34
|
+
if (error !== null)
|
|
35
|
+
rejectPromise(error);
|
|
36
|
+
else
|
|
37
|
+
resolvePromise(hostedPromiseValue(stats));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function lstatPath(path) {
|
|
42
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
43
|
+
LSTAT(path, (error, stats) => {
|
|
44
|
+
if (error !== null)
|
|
45
|
+
rejectPromise(error);
|
|
46
|
+
else
|
|
47
|
+
resolvePromise(hostedPromiseValue(stats));
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function openDirectory(path) {
|
|
52
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
53
|
+
OPENDIR(path, (error, directory) => {
|
|
54
|
+
if (error !== null)
|
|
55
|
+
rejectPromise(error);
|
|
56
|
+
else
|
|
57
|
+
resolvePromise(hostedPromiseValue(directory));
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function readDirectory(path) {
|
|
62
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
63
|
+
READDIR(path, { withFileTypes: true }, (error, entries) => {
|
|
64
|
+
if (error !== null)
|
|
65
|
+
rejectPromise(error);
|
|
66
|
+
else
|
|
67
|
+
resolvePromise(hostedPromiseValue(entries));
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function readDirectoryEntry(directory) {
|
|
72
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
73
|
+
DIR_READ(directory, (error, entry) => {
|
|
74
|
+
if (error !== null)
|
|
75
|
+
rejectPromise(error);
|
|
76
|
+
else
|
|
77
|
+
resolvePromise(entry === null ? null : hostedPromiseValue(entry));
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function closeDirectory(directory) {
|
|
82
|
+
return new PROMISE((resolvePromise, rejectPromise) => {
|
|
83
|
+
DIR_CLOSE(directory, error => error == null ? resolvePromise() : rejectPromise(error));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export async function readDescriptor(descriptor, buffer, offset, length, position) {
|
|
87
|
+
return await new PROMISE((resolvePromise, rejectPromise) => {
|
|
88
|
+
READ(descriptor, buffer, offset, length, position, (error, bytesRead) => {
|
|
89
|
+
if (error !== null)
|
|
90
|
+
rejectPromise(error);
|
|
91
|
+
else
|
|
92
|
+
resolvePromise(bytesRead);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=fs-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-descriptor.js","sourceRoot":"","sources":["../src/fs-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** @internal Deterministic race seams for this security boundary's tests. */
|
|
2
|
+
export interface HostedBaseSnapshotTestHooks {
|
|
3
|
+
readonly beforeOpen?: (path: string) => Promise<void>;
|
|
4
|
+
readonly afterStat?: (path: string) => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export interface HostedBaseSourceRoot {
|
|
7
|
+
readonly root: string;
|
|
8
|
+
readonly prefix: string;
|
|
9
|
+
}
|
|
10
|
+
export interface HostedBaseSnapshot {
|
|
11
|
+
readonly liveSources: readonly HostedBaseSourceRoot[];
|
|
12
|
+
readonly liveDigest: string;
|
|
13
|
+
readonly snapshotRoot: string;
|
|
14
|
+
readonly snapshotFlowPath: string;
|
|
15
|
+
readonly snapshotFlowSha256: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Materialize project source without importing tenant code. Project
|
|
19
|
+
* node_modules is never linked or read. Every admitted source byte is
|
|
20
|
+
* represented in liveDigest and copied to the private identity directory.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createHostedBaseSnapshot(flowPath: string, projectRootOverride?: string): Promise<HostedBaseSnapshot>;
|
|
23
|
+
export declare function hostedBaseSourceDigest(sources: readonly HostedBaseSourceRoot[], hooks?: HostedBaseSnapshotTestHooks): Promise<string>;
|
|
24
|
+
export declare function removeHostedBaseSnapshot(snapshot: HostedBaseSnapshot): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=hosted-base-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-base-snapshot.d.ts","sourceRoot":"","sources":["../src/hosted-base-snapshot.ts"],"names":[],"mappings":"AA+EA,6EAA6E;AAC7E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAMD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAgD7B;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,KAAK,GAAE,2BAAqD,GAC3D,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { chmod, mkdir, mkdtemp, realpath, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
5
|
+
import { canonicalize } from './canonical.js';
|
|
6
|
+
import { sha256 } from './bundle.js';
|
|
7
|
+
import { closeDescriptor, closeDirectory, descriptorIsDirectory, descriptorIsFile, directoryEntryIsDirectory, directoryEntryIsFile, openDirectory, openDescriptor, readDescriptor, readDirectory, readDirectoryEntry, statDescriptor, } from './fs-descriptor.js';
|
|
8
|
+
import { findHostedProject } from './hosted-project.js';
|
|
9
|
+
import { appendIntrinsicArray } from './intrinsic-array.js';
|
|
10
|
+
import { assertHostedPromiseSafety, frozenHostedPromiseValue, hostedPromiseValue, } from './hosted-promise-safety.js';
|
|
11
|
+
import { PluginError } from './plugin-manifest.js';
|
|
12
|
+
const EXCLUDED_DIRECTORIES = new Set(['.flows', '.git', 'node_modules']);
|
|
13
|
+
const CHMOD = chmod;
|
|
14
|
+
const MKDIR = mkdir;
|
|
15
|
+
const MKDTEMP = mkdtemp;
|
|
16
|
+
const REALPATH = realpath;
|
|
17
|
+
const RM = rm;
|
|
18
|
+
const WRITE_FILE = writeFile;
|
|
19
|
+
const TMPDIR = tmpdir;
|
|
20
|
+
const PATH_DIRNAME = dirname;
|
|
21
|
+
const PATH_IS_ABSOLUTE = isAbsolute;
|
|
22
|
+
const PATH_JOIN = join;
|
|
23
|
+
const PATH_RELATIVE = relative;
|
|
24
|
+
const PATH_RESOLVE = resolve;
|
|
25
|
+
const PATH_SEPARATOR = sep;
|
|
26
|
+
const PROCESS_PLATFORM = process.platform;
|
|
27
|
+
const ARRAY_SORT = Function.prototype.call.bind(Array.prototype.sort);
|
|
28
|
+
const OBJECT_CREATE = Object.create;
|
|
29
|
+
const OBJECT_FREEZE = Object.freeze;
|
|
30
|
+
const OBJECT_GET_OWN_PROPERTY_DESCRIPTOR = Object.getOwnPropertyDescriptor;
|
|
31
|
+
const BIG_INT = BigInt;
|
|
32
|
+
const BUFFER_ALLOC_UNSAFE = Buffer.allocUnsafe;
|
|
33
|
+
const NUMBER = Number;
|
|
34
|
+
const SET_HAS = Function.prototype.call.bind(Set.prototype.has);
|
|
35
|
+
const STRING_LOCALE_COMPARE = Function.prototype.call.bind(String.prototype.localeCompare);
|
|
36
|
+
const STRING_STARTS_WITH = Function.prototype.call.bind(String.prototype.startsWith);
|
|
37
|
+
const MAX_ENTRIES = 10_000;
|
|
38
|
+
const MAX_BYTES = 64 * 1024 * 1024;
|
|
39
|
+
const MAX_DEPTH = 64;
|
|
40
|
+
const READ_FLAGS = constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK;
|
|
41
|
+
const EMPTY_HOSTED_BASE_HOOKS = OBJECT_FREEZE(OBJECT_CREATE(null));
|
|
42
|
+
/**
|
|
43
|
+
* Materialize project source without importing tenant code. Project
|
|
44
|
+
* node_modules is never linked or read. Every admitted source byte is
|
|
45
|
+
* represented in liveDigest and copied to the private identity directory.
|
|
46
|
+
*/
|
|
47
|
+
export async function createHostedBaseSnapshot(flowPath, projectRootOverride) {
|
|
48
|
+
assertHostedPromiseSafety('plugin_source_invalid');
|
|
49
|
+
const origin = await REALPATH(PATH_RESOLVE(flowPath));
|
|
50
|
+
const discovered = projectRootOverride ?? findHostedProject(PATH_DIRNAME(origin)) ?? PATH_DIRNAME(origin);
|
|
51
|
+
const projectRoot = await REALPATH(discovered);
|
|
52
|
+
const flowRelative = PATH_RELATIVE(projectRoot, origin);
|
|
53
|
+
if (flowRelative === '' ||
|
|
54
|
+
PATH_IS_ABSOLUTE(flowRelative) ||
|
|
55
|
+
flowRelative === '..' ||
|
|
56
|
+
STRING_STARTS_WITH(flowRelative, `..${PATH_SEPARATOR}`)) {
|
|
57
|
+
throw invalid('Hosted base flow must be a file inside its project root.');
|
|
58
|
+
}
|
|
59
|
+
const liveSources = frozenHostedPromiseValue([OBJECT_FREEZE({ root: projectRoot, prefix: '' })]);
|
|
60
|
+
const files = await readAuthorityFiles(liveSources);
|
|
61
|
+
const liveDigest = sourceDigest(files);
|
|
62
|
+
const liveFlow = sourceFileAt(files, flowRelative);
|
|
63
|
+
if (liveFlow === undefined)
|
|
64
|
+
throw invalid('Hosted base flow is missing from its admitted source.');
|
|
65
|
+
const snapshotRoot = await MKDTEMP(PATH_JOIN(TMPDIR(), 'flows-hosted-base-'));
|
|
66
|
+
await CHMOD(snapshotRoot, 0o700);
|
|
67
|
+
try {
|
|
68
|
+
for (let index = 0; index < files.length; index += 1) {
|
|
69
|
+
const file = files[index];
|
|
70
|
+
const target = PATH_JOIN(snapshotRoot, file.path);
|
|
71
|
+
await MKDIR(PATH_DIRNAME(target), { recursive: true, mode: 0o700 });
|
|
72
|
+
await WRITE_FILE(target, file.bytes, { flag: 'wx', mode: 0o400 });
|
|
73
|
+
}
|
|
74
|
+
const snapshotFiles = await readSnapshotTree(snapshotRoot);
|
|
75
|
+
const snapshotDigest = sourceDigest(snapshotFiles);
|
|
76
|
+
if (snapshotDigest !== liveDigest) {
|
|
77
|
+
throw invalid('Hosted base private snapshot does not match its buffered source.');
|
|
78
|
+
}
|
|
79
|
+
const snapshotFlow = sourceFileAt(snapshotFiles, flowRelative);
|
|
80
|
+
if (snapshotFlow === undefined || snapshotFlow.sha256 !== liveFlow.sha256) {
|
|
81
|
+
throw invalid('Hosted base private snapshot does not contain its buffered flow source.');
|
|
82
|
+
}
|
|
83
|
+
return frozenHostedPromiseValue({
|
|
84
|
+
liveSources,
|
|
85
|
+
liveDigest,
|
|
86
|
+
snapshotRoot,
|
|
87
|
+
snapshotFlowPath: PATH_JOIN(snapshotRoot, flowRelative),
|
|
88
|
+
snapshotFlowSha256: snapshotFlow.sha256,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
await RM(snapshotRoot, { recursive: true, force: true });
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export async function hostedBaseSourceDigest(sources, hooks = EMPTY_HOSTED_BASE_HOOKS) {
|
|
97
|
+
assertHostedPromiseSafety('plugin_source_invalid');
|
|
98
|
+
return sourceDigest(await readAuthorityFiles(sources, hooks));
|
|
99
|
+
}
|
|
100
|
+
export async function removeHostedBaseSnapshot(snapshot) {
|
|
101
|
+
await RM(snapshot.snapshotRoot, { recursive: true, force: true });
|
|
102
|
+
}
|
|
103
|
+
async function readAuthorityFiles(sources, hooks = EMPTY_HOSTED_BASE_HOOKS) {
|
|
104
|
+
const budget = { entries: 0, bytes: 0 };
|
|
105
|
+
const files = [];
|
|
106
|
+
for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex += 1) {
|
|
107
|
+
const source = sources[sourceIndex];
|
|
108
|
+
const sourceFiles = await readTree(source.root, source.prefix, budget, hooks);
|
|
109
|
+
for (let fileIndex = 0; fileIndex < sourceFiles.length; fileIndex += 1) {
|
|
110
|
+
appendIntrinsicArray(files, sourceFiles[fileIndex]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
ARRAY_SORT(files, (left, right) => STRING_LOCALE_COMPARE(left.path, right.path));
|
|
114
|
+
return frozenHostedPromiseValue(files);
|
|
115
|
+
}
|
|
116
|
+
async function readSnapshotTree(root) {
|
|
117
|
+
const files = [];
|
|
118
|
+
const budget = { entries: 0, bytes: 0 };
|
|
119
|
+
async function visit(directory, prefix) {
|
|
120
|
+
const entries = await readDirectory(directory);
|
|
121
|
+
ARRAY_SORT(entries, (left, right) => STRING_LOCALE_COMPARE(left.name, right.name));
|
|
122
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
123
|
+
const entry = entries[index];
|
|
124
|
+
budget.entries += 1;
|
|
125
|
+
if (budget.entries > MAX_ENTRIES)
|
|
126
|
+
throw tooLarge();
|
|
127
|
+
const path = prefix === '' ? entry.name : PATH_JOIN(prefix, entry.name);
|
|
128
|
+
const absolute = PATH_JOIN(directory, entry.name);
|
|
129
|
+
if (directoryEntryIsDirectory(entry))
|
|
130
|
+
await visit(absolute, path);
|
|
131
|
+
else if (directoryEntryIsFile(entry)) {
|
|
132
|
+
const descriptor = await openDescriptor(absolute, READ_FLAGS);
|
|
133
|
+
try {
|
|
134
|
+
const before = await statDescriptor(descriptor, { bigint: true });
|
|
135
|
+
if (!descriptorIsFile(before) || before.size < 0n || before.size > BIG_INT(MAX_BYTES - budget.bytes))
|
|
136
|
+
throw tooLarge();
|
|
137
|
+
const expectedBytes = NUMBER(before.size);
|
|
138
|
+
const bytes = await readBounded(descriptor, expectedBytes, path);
|
|
139
|
+
const after = await statDescriptor(descriptor, { bigint: true });
|
|
140
|
+
if (after.size !== before.size || after.mtimeNs !== before.mtimeNs || after.ctimeNs !== before.ctimeNs) {
|
|
141
|
+
throw invalid(`Hosted base snapshot changed while reading "${path}".`);
|
|
142
|
+
}
|
|
143
|
+
budget.bytes += expectedBytes;
|
|
144
|
+
appendIntrinsicArray(files, OBJECT_FREEZE({ path, bytes, sha256: sha256(bytes) }));
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
await closeDescriptor(descriptor);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else
|
|
151
|
+
throw invalid(`Hosted base snapshot contains unsupported entry "${path}".`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
await visit(root, '');
|
|
155
|
+
ARRAY_SORT(files, (left, right) => STRING_LOCALE_COMPARE(left.path, right.path));
|
|
156
|
+
return frozenHostedPromiseValue(files);
|
|
157
|
+
}
|
|
158
|
+
async function readTree(root, prefix, budget, hooks) {
|
|
159
|
+
if (PROCESS_PLATFORM !== 'linux') {
|
|
160
|
+
throw invalid('Hosted base source snapshotting requires Linux.');
|
|
161
|
+
}
|
|
162
|
+
const files = [];
|
|
163
|
+
async function visit(directory, relativeDirectory, depth) {
|
|
164
|
+
if (depth > MAX_DEPTH)
|
|
165
|
+
throw tooLarge();
|
|
166
|
+
const entries = await openDirectory(`/proc/self/fd/${directory}`);
|
|
167
|
+
try {
|
|
168
|
+
for (;;) {
|
|
169
|
+
const entry = await readDirectoryEntry(entries);
|
|
170
|
+
if (entry === null)
|
|
171
|
+
break;
|
|
172
|
+
if (SET_HAS(EXCLUDED_DIRECTORIES, entry.name))
|
|
173
|
+
continue;
|
|
174
|
+
budget.entries += 1;
|
|
175
|
+
if (budget.entries > MAX_ENTRIES)
|
|
176
|
+
throw tooLarge();
|
|
177
|
+
const relativePath = relativeDirectory === '' ? entry.name : PATH_JOIN(relativeDirectory, entry.name);
|
|
178
|
+
const absolutePath = PATH_JOIN(root, relativePath);
|
|
179
|
+
await ownHook(hooks, 'beforeOpen')?.(absolutePath);
|
|
180
|
+
const descriptor = await openDescriptor(`/proc/self/fd/${directory}/${entry.name}`, READ_FLAGS);
|
|
181
|
+
try {
|
|
182
|
+
const before = await statDescriptor(descriptor, { bigint: true });
|
|
183
|
+
if (descriptorIsDirectory(before)) {
|
|
184
|
+
await visit(descriptor, relativePath, depth + 1);
|
|
185
|
+
}
|
|
186
|
+
else if (descriptorIsFile(before)) {
|
|
187
|
+
if (before.size < 0n || before.size > BIG_INT(MAX_BYTES - budget.bytes))
|
|
188
|
+
throw tooLarge();
|
|
189
|
+
const expectedBytes = NUMBER(before.size);
|
|
190
|
+
await ownHook(hooks, 'afterStat')?.(absolutePath);
|
|
191
|
+
const bytes = await readBounded(descriptor, expectedBytes, relativePath);
|
|
192
|
+
const after = await statDescriptor(descriptor, { bigint: true });
|
|
193
|
+
if (after.size !== before.size || after.mtimeNs !== before.mtimeNs || after.ctimeNs !== before.ctimeNs) {
|
|
194
|
+
throw invalid(`Hosted base source changed while reading "${relativePath}".`);
|
|
195
|
+
}
|
|
196
|
+
budget.bytes += expectedBytes;
|
|
197
|
+
appendIntrinsicArray(files, OBJECT_FREEZE({
|
|
198
|
+
path: prefix === '' ? relativePath : PATH_JOIN(prefix, relativePath),
|
|
199
|
+
bytes,
|
|
200
|
+
sha256: sha256(bytes),
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
throw invalid(`Hosted base authority contains unsupported entry "${relativePath}".`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
await closeDescriptor(descriptor);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
await closeDirectory(entries);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
const rootDescriptor = await openDescriptor(root, READ_FLAGS);
|
|
218
|
+
try {
|
|
219
|
+
if (!descriptorIsDirectory(await statDescriptor(rootDescriptor, { bigint: true }))) {
|
|
220
|
+
throw invalid('Hosted base source root is not a directory.');
|
|
221
|
+
}
|
|
222
|
+
await visit(rootDescriptor, '', 0);
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
await closeDescriptor(rootDescriptor);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (error instanceof PluginError)
|
|
230
|
+
throw error;
|
|
231
|
+
throw invalid('Hosted base source or trusted dependency is unreadable.');
|
|
232
|
+
}
|
|
233
|
+
return frozenHostedPromiseValue(files);
|
|
234
|
+
}
|
|
235
|
+
function ownHook(hooks, name) {
|
|
236
|
+
const descriptor = OBJECT_GET_OWN_PROPERTY_DESCRIPTOR(hooks, name);
|
|
237
|
+
return descriptor !== undefined && 'value' in descriptor && typeof descriptor.value === 'function'
|
|
238
|
+
? descriptor.value
|
|
239
|
+
: undefined;
|
|
240
|
+
}
|
|
241
|
+
async function readBounded(descriptor, expectedBytes, relativePath) {
|
|
242
|
+
const bytes = BUFFER_ALLOC_UNSAFE(expectedBytes);
|
|
243
|
+
let offset = 0;
|
|
244
|
+
while (offset < expectedBytes) {
|
|
245
|
+
const bytesRead = await readDescriptor(descriptor, bytes, offset, expectedBytes - offset, offset);
|
|
246
|
+
if (bytesRead === 0) {
|
|
247
|
+
throw invalid(`Hosted base source changed while reading "${relativePath}".`);
|
|
248
|
+
}
|
|
249
|
+
offset += bytesRead;
|
|
250
|
+
}
|
|
251
|
+
const extra = BUFFER_ALLOC_UNSAFE(1);
|
|
252
|
+
if ((await readDescriptor(descriptor, extra, 0, 1, expectedBytes)) !== 0) {
|
|
253
|
+
throw invalid(`Hosted base source changed while reading "${relativePath}".`);
|
|
254
|
+
}
|
|
255
|
+
return hostedPromiseValue(bytes);
|
|
256
|
+
}
|
|
257
|
+
function tooLarge() {
|
|
258
|
+
return invalid('Hosted base source exceeds the snapshot entry or byte limit.');
|
|
259
|
+
}
|
|
260
|
+
function sourceDigest(files) {
|
|
261
|
+
const records = [];
|
|
262
|
+
for (let index = 0; index < files.length; index += 1) {
|
|
263
|
+
const file = files[index];
|
|
264
|
+
appendIntrinsicArray(records, { path: file.path, sha256: file.sha256 });
|
|
265
|
+
}
|
|
266
|
+
return sha256(canonicalize(records));
|
|
267
|
+
}
|
|
268
|
+
function sourceFileAt(files, path) {
|
|
269
|
+
for (let index = 0; index < files.length; index += 1) {
|
|
270
|
+
if (files[index].path === path)
|
|
271
|
+
return files[index];
|
|
272
|
+
}
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
function invalid(message) {
|
|
276
|
+
return new PluginError('plugin_source_invalid', message);
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=hosted-base-snapshot.js.map
|