@relayflows/sdk 2.0.24 → 2.0.26
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 +8 -0
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +40 -1
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-flow-loader.d.ts +15 -2
- package/dist/authored-flow-loader.d.ts.map +1 -1
- package/dist/authored-flow-loader.js +33 -4
- package/dist/authored-flow-loader.js.map +1 -1
- package/dist/authored-hooks.d.ts +29 -0
- package/dist/authored-hooks.d.ts.map +1 -0
- package/dist/authored-hooks.js +117 -0
- package/dist/authored-hooks.js.map +1 -0
- package/dist/authored-node-entry.js +1 -0
- package/dist/authored-node-entry.js.map +1 -1
- package/dist/authored-root.d.ts +7 -0
- package/dist/authored-root.d.ts.map +1 -1
- package/dist/authored-root.js +14 -1
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-source-authority.d.ts.map +1 -1
- package/dist/authored-source-authority.js +6 -0
- package/dist/authored-source-authority.js.map +1 -1
- package/dist/babysitter-catalog-export.d.ts +9 -0
- package/dist/babysitter-catalog-export.d.ts.map +1 -0
- package/dist/babysitter-catalog-export.js +36 -0
- package/dist/babysitter-catalog-export.js.map +1 -0
- package/dist/bundle-extensions.d.ts +19 -0
- package/dist/bundle-extensions.d.ts.map +1 -0
- package/dist/bundle-extensions.js +95 -0
- package/dist/bundle-extensions.js.map +1 -0
- package/dist/bundle-typescript.js +1 -1
- package/dist/bundle-typescript.js.map +1 -1
- package/dist/bundle.d.ts +11 -0
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +13 -4
- package/dist/bundle.js.map +1 -1
- package/dist/cli/add-extension.d.ts +28 -0
- package/dist/cli/add-extension.d.ts.map +1 -0
- package/dist/cli/add-extension.js +135 -0
- package/dist/cli/add-extension.js.map +1 -0
- package/dist/cli/add.d.ts +3 -0
- package/dist/cli/add.d.ts.map +1 -1
- package/dist/cli/add.js +8 -0
- package/dist/cli/add.js.map +1 -1
- package/dist/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +7 -2
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/check-helper-body.d.ts.map +1 -1
- package/dist/cli/check-helper-body.js +4 -0
- package/dist/cli/check-helper-body.js.map +1 -1
- package/dist/cli/check-triggers.d.ts.map +1 -1
- package/dist/cli/check-triggers.js +25 -2
- package/dist/cli/check-triggers.js.map +1 -1
- package/dist/cli/check-typescript.d.ts.map +1 -1
- package/dist/cli/check-typescript.js +5 -1
- package/dist/cli/check-typescript.js.map +1 -1
- package/dist/cli/check.d.ts +24 -0
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-deploy.d.ts +1 -0
- package/dist/cli/cloud-deploy.d.ts.map +1 -1
- package/dist/cli/cloud-deploy.js +11 -1
- package/dist/cli/cloud-deploy.js.map +1 -1
- package/dist/cli/plugin.d.ts +50 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +295 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli-commands.d.ts +46 -3
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +32 -2
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -1
- package/dist/cli.js.map +1 -1
- package/dist/cloud-deploy.d.ts +5 -0
- package/dist/cloud-deploy.d.ts.map +1 -1
- package/dist/cloud-deploy.js +7 -6
- package/dist/cloud-deploy.js.map +1 -1
- package/dist/cloud-run.d.ts +2 -0
- package/dist/cloud-run.d.ts.map +1 -1
- package/dist/cloud-run.js +14 -4
- package/dist/cloud-run.js.map +1 -1
- package/dist/failure-kinds.d.ts +2 -2
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/flow-extension-compat.d.ts +18 -0
- package/dist/flow-extension-compat.d.ts.map +1 -0
- package/dist/flow-extension-compat.js +33 -0
- package/dist/flow-extension-compat.js.map +1 -0
- package/dist/flow-extension-loader.d.ts +92 -0
- package/dist/flow-extension-loader.d.ts.map +1 -0
- package/dist/flow-extension-loader.js +241 -0
- package/dist/flow-extension-loader.js.map +1 -0
- package/dist/flow-extension-manifest.d.ts +61 -0
- package/dist/flow-extension-manifest.d.ts.map +1 -0
- package/dist/flow-extension-manifest.js +188 -0
- package/dist/flow-extension-manifest.js.map +1 -0
- package/dist/flow-extension-submit.d.ts +38 -0
- package/dist/flow-extension-submit.d.ts.map +1 -0
- package/dist/flow-extension-submit.js +94 -0
- package/dist/flow-extension-submit.js.map +1 -0
- package/dist/flow-requirements.d.ts +13 -3
- package/dist/flow-requirements.d.ts.map +1 -1
- package/dist/flow-requirements.js +30 -0
- package/dist/flow-requirements.js.map +1 -1
- package/dist/plugin-github.d.ts +35 -0
- package/dist/plugin-github.d.ts.map +1 -0
- package/dist/plugin-github.js +92 -0
- package/dist/plugin-github.js.map +1 -0
- package/dist/plugin-loader.d.ts.map +1 -1
- package/dist/plugin-loader.js +5 -1
- package/dist/plugin-loader.js.map +1 -1
- package/dist/plugin-lock.d.ts +79 -0
- package/dist/plugin-lock.d.ts.map +1 -0
- package/dist/plugin-lock.js +203 -0
- package/dist/plugin-lock.js.map +1 -0
- package/dist/plugin-manifest.d.ts +5 -1
- package/dist/plugin-manifest.d.ts.map +1 -1
- package/dist/plugin-manifest.js +18 -0
- package/dist/plugin-manifest.js.map +1 -1
- package/dist/plugin-source.d.ts +38 -0
- package/dist/plugin-source.d.ts.map +1 -0
- package/dist/plugin-source.js +84 -0
- package/dist/plugin-source.js.map +1 -0
- package/dist/plugin-store.d.ts +30 -0
- package/dist/plugin-store.d.ts.map +1 -0
- package/dist/plugin-store.js +133 -0
- package/dist/plugin-store.js.map +1 -0
- package/dist/semver-range.d.ts +10 -0
- package/dist/semver-range.d.ts.map +1 -0
- package/dist/semver-range.js +88 -0
- package/dist/semver-range.js.map +1 -0
- package/package.json +9 -4
- package/src/authored-flow-executor.ts +60 -1
- package/src/authored-flow-loader.ts +49 -6
- package/src/authored-hooks.ts +136 -0
- package/src/authored-node-entry.ts +1 -0
- package/src/authored-root.ts +22 -1
- package/src/authored-source-authority.ts +6 -0
- package/src/babysitter-catalog-export.ts +44 -0
- package/src/bundle-extensions.ts +85 -0
- package/src/bundle-typescript.ts +1 -1
- package/src/bundle.ts +14 -4
- package/src/cli/add-extension.ts +134 -0
- package/src/cli/add.ts +9 -0
- package/src/cli/build.ts +7 -2
- package/src/cli/check-helper-body.ts +4 -0
- package/src/cli/check-triggers.ts +27 -2
- package/src/cli/check-typescript.ts +5 -1
- package/src/cli/check.ts +23 -0
- package/src/cli/cloud-deploy.ts +11 -1
- package/src/cli/plugin.ts +286 -0
- package/src/cli-commands.ts +32 -2
- package/src/cli.ts +23 -1
- package/src/cloud-deploy.ts +18 -8
- package/src/cloud-run.ts +16 -6
- package/src/flow-extension-compat.ts +35 -0
- package/src/flow-extension-loader.ts +304 -0
- package/src/flow-extension-manifest.ts +190 -0
- package/src/flow-extension-submit.ts +120 -0
- package/src/flow-requirements.ts +44 -3
- package/src/plugin-github.ts +98 -0
- package/src/plugin-loader.ts +5 -1
- package/src/plugin-lock.ts +194 -0
- package/src/plugin-manifest.ts +18 -0
- package/src/plugin-source.ts +91 -0
- package/src/plugin-store.ts +105 -0
- package/src/semver-range.ts +74 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { payloadManifest, safePath, sha256 } from './bundle.js';
|
|
2
|
+
import { PluginError } from './plugin-manifest.js';
|
|
3
|
+
import { SHA } from './plugin-source.js';
|
|
4
|
+
export const MAX_PLUGIN_FILE_BYTES = 256_000;
|
|
5
|
+
export const MAX_PLUGIN_TOTAL_BYTES = 2_000_000;
|
|
6
|
+
export const MAX_PLUGIN_FILES = 500;
|
|
7
|
+
const TIMEOUT_MS = 15_000;
|
|
8
|
+
const API = 'https://api.github.com';
|
|
9
|
+
const RAW = 'https://raw.githubusercontent.com';
|
|
10
|
+
async function request(fetch, url, accept) {
|
|
11
|
+
let response;
|
|
12
|
+
try {
|
|
13
|
+
response = await fetch(url, { headers: { accept, 'user-agent': 'relayflows-sdk' }, signal: AbortSignal.timeout(TIMEOUT_MS) });
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw new PluginError('plugin_fetch_failed', `GitHub request failed: ${url} (${error instanceof Error ? error.message : String(error)}).`);
|
|
17
|
+
}
|
|
18
|
+
if (response.status === 404)
|
|
19
|
+
throw new PluginError('plugin_source_unresolved', `Not found on GitHub (or not public): ${url}.`);
|
|
20
|
+
if (!response.ok)
|
|
21
|
+
throw new PluginError('plugin_fetch_failed', `GitHub answered ${response.status} for ${url}.`);
|
|
22
|
+
return response;
|
|
23
|
+
}
|
|
24
|
+
/** Branch, tag, or commit → the commit sha it names right now; a sha input is verified to exist. */
|
|
25
|
+
export async function resolveGithubSha(source, fetch = globalThis.fetch) {
|
|
26
|
+
const url = `${API}/repos/${source.owner}/${source.repo}/commits/${encodeURIComponent(source.ref)}`;
|
|
27
|
+
const sha = (await (await request(fetch, url, 'application/vnd.github.sha')).text()).trim();
|
|
28
|
+
if (!SHA.test(sha))
|
|
29
|
+
throw new PluginError('plugin_fetch_failed', `GitHub returned a malformed commit sha for ${source.ref}.`);
|
|
30
|
+
if (SHA.test(source.ref) && sha !== source.ref)
|
|
31
|
+
throw new PluginError('plugin_source_unresolved', `Commit ${source.ref} resolved to ${sha}.`);
|
|
32
|
+
return Object.freeze({ ...source, sha });
|
|
33
|
+
}
|
|
34
|
+
async function listTree(source, fetch) {
|
|
35
|
+
const url = `${API}/repos/${source.owner}/${source.repo}/git/trees/${source.sha}?recursive=1`;
|
|
36
|
+
let body;
|
|
37
|
+
try {
|
|
38
|
+
body = await (await request(fetch, url, 'application/vnd.github+json')).json();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
throw new PluginError('plugin_fetch_failed', 'GitHub tree listing is not JSON.');
|
|
42
|
+
}
|
|
43
|
+
const tree = typeof body === 'object' && body !== null ? body : {};
|
|
44
|
+
if (tree.truncated === true)
|
|
45
|
+
throw new PluginError('plugin_fetch_failed', 'GitHub truncated the tree listing; the repository is too large to enumerate safely.');
|
|
46
|
+
if (!Array.isArray(tree.tree))
|
|
47
|
+
throw new PluginError('plugin_fetch_failed', 'GitHub tree listing has no entries.');
|
|
48
|
+
return tree.tree.filter((e) => typeof e === 'object' && e !== null
|
|
49
|
+
&& typeof e.path === 'string' && typeof e.mode === 'string' && typeof e.type === 'string');
|
|
50
|
+
}
|
|
51
|
+
/** Enumerate and download the plugin directory at the pinned commit, bounded and verified. */
|
|
52
|
+
export async function fetchGithubPlugin(source, fetch = globalThis.fetch) {
|
|
53
|
+
const prefix = source.path === '' ? '' : `${source.path}/`;
|
|
54
|
+
const entries = (await listTree(source, fetch)).filter(e => e.path.startsWith(prefix));
|
|
55
|
+
if (source.path !== '' && entries.length === 0)
|
|
56
|
+
throw new PluginError('plugin_source_unresolved', `${source.path} does not exist at ${source.sha}.`);
|
|
57
|
+
const blobs = [];
|
|
58
|
+
let total = 0;
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
const relative = entry.path.slice(prefix.length);
|
|
61
|
+
if (entry.type === 'tree')
|
|
62
|
+
continue;
|
|
63
|
+
if (entry.type === 'commit')
|
|
64
|
+
throw new PluginError('plugin_path_invalid', `${entry.path} is a submodule; plugins must be plain files.`);
|
|
65
|
+
if (entry.mode === '120000')
|
|
66
|
+
throw new PluginError('plugin_path_invalid', `${entry.path} is a symlink; plugins must be plain files.`);
|
|
67
|
+
if (entry.type !== 'blob' || !safePath(relative))
|
|
68
|
+
throw new PluginError('plugin_path_invalid', `${entry.path} is not a plain repository file.`);
|
|
69
|
+
if (!Number.isSafeInteger(entry.size) || entry.size < 0)
|
|
70
|
+
throw new PluginError('plugin_fetch_failed', `${entry.path} has no size in the tree listing.`);
|
|
71
|
+
if (entry.size > MAX_PLUGIN_FILE_BYTES)
|
|
72
|
+
throw new PluginError('plugin_too_large', `${entry.path} is ${entry.size} bytes; the limit is ${MAX_PLUGIN_FILE_BYTES}.`);
|
|
73
|
+
total += entry.size;
|
|
74
|
+
if (total > MAX_PLUGIN_TOTAL_BYTES)
|
|
75
|
+
throw new PluginError('plugin_too_large', `Plugin exceeds ${MAX_PLUGIN_TOTAL_BYTES} bytes in total.`);
|
|
76
|
+
blobs.push({ path: relative, size: entry.size });
|
|
77
|
+
if (blobs.length > MAX_PLUGIN_FILES)
|
|
78
|
+
throw new PluginError('plugin_too_large', `Plugin has more than ${MAX_PLUGIN_FILES} files.`);
|
|
79
|
+
}
|
|
80
|
+
if (!blobs.some(b => b.path === 'flows-plugin.json'))
|
|
81
|
+
throw new PluginError('plugin_manifest_missing', `${source.owner}/${source.repo}@${source.sha}${prefix === '' ? '' : `#${source.path}`} has no flows-plugin.json.`);
|
|
82
|
+
const files = [];
|
|
83
|
+
for (const blob of blobs.sort((a, b) => a.path < b.path ? -1 : 1)) {
|
|
84
|
+
const url = `${RAW}/${source.owner}/${source.repo}/${source.sha}/${prefix}${blob.path}`;
|
|
85
|
+
const data = Buffer.from(await (await request(fetch, url, 'application/octet-stream')).arrayBuffer());
|
|
86
|
+
if (data.length !== blob.size)
|
|
87
|
+
throw new PluginError('plugin_source_drift', `${blob.path}: fetched ${data.length} bytes, tree lists ${blob.size}.`);
|
|
88
|
+
files.push(Object.freeze({ path: blob.path, data }));
|
|
89
|
+
}
|
|
90
|
+
return Object.freeze({ source, files: Object.freeze(files), digest: sha256(payloadManifest(files)) });
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=plugin-github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-github.js","sourceRoot":"","sources":["../src/plugin-github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG3J,MAAM,WAAW,YAAY;IAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;CAAE;AAC/F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AACD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAS/E;AACD,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3G;AACD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CA8BjF;AACD,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczK;AACD,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlI"}
|
package/dist/plugin-loader.js
CHANGED
|
@@ -4,6 +4,7 @@ import { pathToFileURL } from 'node:url';
|
|
|
4
4
|
import { Ajv } from 'ajv';
|
|
5
5
|
import { snapshotJsonValue } from './json-value.js';
|
|
6
6
|
import { assertSupportedPlugin, PluginError, pluginPackageName, validatePluginManifest } from './plugin-manifest.js';
|
|
7
|
+
import { isGithubPluginRef } from './plugin-source.js';
|
|
7
8
|
export function findPluginProject(start) {
|
|
8
9
|
let current = resolve(start);
|
|
9
10
|
for (;;) {
|
|
@@ -61,8 +62,11 @@ export async function loadPlugins(start) {
|
|
|
61
62
|
if (config === null || typeof config !== 'object' || (config.plugins !== undefined && (!Array.isArray(config.plugins) || !config.plugins.every(p => typeof p === 'string')))) {
|
|
62
63
|
throw new PluginError('plugin_manifest_invalid', 'flows.json plugins must be package names.');
|
|
63
64
|
}
|
|
65
|
+
// Flow extensions (github:… entries) are not helpers: the authored flow
|
|
66
|
+
// loader verifies and composes them (flow-extension-loader.ts). Here they
|
|
67
|
+
// are simply not helper packages, so they are left out of the helper set.
|
|
64
68
|
const scope = join(root, 'node_modules/@flows');
|
|
65
|
-
const names = new Set(config.plugins?.map(pluginPackageName));
|
|
69
|
+
const names = new Set(config.plugins?.filter(p => !isGithubPluginRef(p)).map(pluginPackageName));
|
|
66
70
|
if (existsSync(scope))
|
|
67
71
|
for (const name of readdirSync(scope).sort()) {
|
|
68
72
|
if (name.startsWith('helper-') && !names.has(`@flows/${name}`)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,iBAAiB,EAAE,sBAAsB,EAAwC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../src/plugin-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type PluginSourceRef } from './plugin-source.js';
|
|
2
|
+
/**
|
|
3
|
+
* `flows.lock.json` — the project's plugin provenance. `flows.json.plugins`
|
|
4
|
+
* says *what* is declared; the lockfile says exactly which bytes that meant:
|
|
5
|
+
* the commit, the content digest, the manifest hash, and the order the
|
|
6
|
+
* operator declared. Version 2 is also the sealed bundle `lockfile.json`
|
|
7
|
+
* shape when the bundle carries plugins (RFC-0001 decision 14).
|
|
8
|
+
*/
|
|
9
|
+
export declare const PLUGIN_LOCK_FILE = "flows.lock.json";
|
|
10
|
+
export declare const PLUGIN_LOCK_VERSION = 2;
|
|
11
|
+
export interface PluginLockEntry {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly kind: 'flow-extension';
|
|
14
|
+
readonly version: string;
|
|
15
|
+
readonly source: {
|
|
16
|
+
readonly host: 'github';
|
|
17
|
+
readonly owner: string;
|
|
18
|
+
readonly repo: string;
|
|
19
|
+
readonly sha: string;
|
|
20
|
+
readonly path: string;
|
|
21
|
+
};
|
|
22
|
+
/** sha256 of the payload manifest — the `@sha256:` in `.flows/plugins`. */
|
|
23
|
+
readonly digest: string;
|
|
24
|
+
/** sha256 of the `flows-plugin.json` bytes as installed. */
|
|
25
|
+
readonly manifestSha256: string;
|
|
26
|
+
/**
|
|
27
|
+
* 1-based position among the flow-extension (`github:`) entries of
|
|
28
|
+
* `flows.json.plugins`, in declaration order. Helper entries interspersed in
|
|
29
|
+
* that list do not count, so the order is the composition order exactly.
|
|
30
|
+
*/
|
|
31
|
+
readonly order: number;
|
|
32
|
+
readonly resolvedAt: string;
|
|
33
|
+
}
|
|
34
|
+
export interface PluginLock {
|
|
35
|
+
readonly version: 2;
|
|
36
|
+
readonly plugins: readonly PluginLockEntry[];
|
|
37
|
+
}
|
|
38
|
+
export declare function parsePluginLock(input: unknown): PluginLock;
|
|
39
|
+
/** Absent file → empty lock; unreadable or malformed → refusal. */
|
|
40
|
+
export declare function readPluginLock(root: string): PluginLock;
|
|
41
|
+
export declare function writePluginLock(root: string, lock: PluginLock): void;
|
|
42
|
+
/**
|
|
43
|
+
* Finish or abort a two-file update left by a process crash. The lock temp is
|
|
44
|
+
* written first: by itself it is only preparation and can be discarded. Once
|
|
45
|
+
* the config temp exists, both complete snapshots exist and recovery rolls
|
|
46
|
+
* them forward in the same lock-then-declaration order as the writer.
|
|
47
|
+
*/
|
|
48
|
+
export declare function recoverFlowsAndLock(root: string, configPath?: string): void;
|
|
49
|
+
/** Write complete snapshots, then recover them as one roll-forward transaction. */
|
|
50
|
+
export declare function writeFlowsAndLock(root: string, configPath: string, config: Record<string, unknown>, plugins: readonly string[], lock: PluginLock): void;
|
|
51
|
+
/**
|
|
52
|
+
* Rebuild the entry list in `flows.json.plugins` order: `order` is derived from
|
|
53
|
+
* the declaration list, never stored independently, so the two cannot disagree.
|
|
54
|
+
* Lock entries that are no longer declared are dropped; a declaration with no
|
|
55
|
+
* matching lock entry is a refusal.
|
|
56
|
+
*/
|
|
57
|
+
export declare function lockForDeclared(lock: PluginLock, declared: readonly string[]): PluginLock;
|
|
58
|
+
export declare function lockWithPlugin(lock: PluginLock, declared: readonly string[], entry: Omit<PluginLockEntry, 'kind' | 'order'>): PluginLock;
|
|
59
|
+
/** Lock entries paired with their declared reference, in declaration order. */
|
|
60
|
+
export declare function lockedPlugins(lock: PluginLock): readonly {
|
|
61
|
+
ref: string;
|
|
62
|
+
entry: PluginLockEntry;
|
|
63
|
+
source: PluginSourceRef;
|
|
64
|
+
}[];
|
|
65
|
+
/** The `github:` entries of `flows.json.plugins`, in declaration order; helper entries are left out. */
|
|
66
|
+
export declare function declaredExtensionRefs(root: string): readonly string[];
|
|
67
|
+
/**
|
|
68
|
+
* The three records that must agree before an extension is trusted:
|
|
69
|
+
* `flows.json.plugins` (declaration), `flows.lock.json` (provenance), and —
|
|
70
|
+
* checked by the caller against the returned digests — `.flows/plugins`
|
|
71
|
+
* (bytes). Any declaration without a lock entry, lock entry without a
|
|
72
|
+
* declaration, or order disagreement is `plugin_lock_invalid`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function reconcileDeclaredExtensions(root: string): readonly {
|
|
75
|
+
ref: string;
|
|
76
|
+
entry: PluginLockEntry;
|
|
77
|
+
source: PluginSourceRef;
|
|
78
|
+
}[];
|
|
79
|
+
//# sourceMappingURL=plugin-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-lock.d.ts","sourceRoot":"","sources":["../src/plugin-lock.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE/H;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAClD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAGrC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzI,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AACD,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE;AAMjG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAuB1D;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQvD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAyB,GAAG,IAAI,CAoC3F;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAOvJ;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAQzF;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC7C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,GAC7C,UAAU,CAIZ;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EAAE,CAK3H;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CASrE;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EAAE,CAQrI"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { PluginError } from './plugin-manifest.js';
|
|
4
|
+
import { SHA, canonicalPluginRef, isGithubPluginRef, parseCanonicalPluginRef } from './plugin-source.js';
|
|
5
|
+
/**
|
|
6
|
+
* `flows.lock.json` — the project's plugin provenance. `flows.json.plugins`
|
|
7
|
+
* says *what* is declared; the lockfile says exactly which bytes that meant:
|
|
8
|
+
* the commit, the content digest, the manifest hash, and the order the
|
|
9
|
+
* operator declared. Version 2 is also the sealed bundle `lockfile.json`
|
|
10
|
+
* shape when the bundle carries plugins (RFC-0001 decision 14).
|
|
11
|
+
*/
|
|
12
|
+
export const PLUGIN_LOCK_FILE = 'flows.lock.json';
|
|
13
|
+
export const PLUGIN_LOCK_VERSION = 2;
|
|
14
|
+
const FLOWS_FILE = 'flows.json';
|
|
15
|
+
const HEX64 = /^[0-9a-f]{64}$/;
|
|
16
|
+
const object = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
17
|
+
const invalid = (message) => { throw new PluginError('plugin_lock_invalid', `${PLUGIN_LOCK_FILE}: ${message}`); };
|
|
18
|
+
export function parsePluginLock(input) {
|
|
19
|
+
if (!object(input) || input.version !== PLUGIN_LOCK_VERSION || !Array.isArray(input.plugins)
|
|
20
|
+
|| Object.keys(input).some(k => !['version', 'plugins'].includes(k)))
|
|
21
|
+
return invalid(`expected { version: ${PLUGIN_LOCK_VERSION}, plugins: [] }.`);
|
|
22
|
+
const names = new Set();
|
|
23
|
+
const plugins = input.plugins.map((entry, index) => {
|
|
24
|
+
if (!object(entry) || Object.keys(entry).sort().join(',') !== 'digest,kind,manifestSha256,name,order,resolvedAt,source,version'
|
|
25
|
+
|| entry.kind !== 'flow-extension' || typeof entry.name !== 'string' || typeof entry.version !== 'string'
|
|
26
|
+
|| typeof entry.digest !== 'string' || !HEX64.test(entry.digest)
|
|
27
|
+
|| typeof entry.manifestSha256 !== 'string' || !HEX64.test(entry.manifestSha256)
|
|
28
|
+
|| entry.order !== index + 1 || typeof entry.resolvedAt !== 'string' || Number.isNaN(Date.parse(entry.resolvedAt))
|
|
29
|
+
|| !object(entry.source) || entry.source.host !== 'github' || typeof entry.source.owner !== 'string'
|
|
30
|
+
|| typeof entry.source.repo !== 'string' || typeof entry.source.sha !== 'string' || !SHA.test(entry.source.sha)
|
|
31
|
+
|| typeof entry.source.path !== 'string')
|
|
32
|
+
return invalid(`plugins[${index}] is malformed.`);
|
|
33
|
+
if (names.has(entry.name))
|
|
34
|
+
return invalid(`plugin ${entry.name} is listed twice.`);
|
|
35
|
+
names.add(entry.name);
|
|
36
|
+
const source = parseCanonicalPluginRef(canonicalPluginRef({ host: 'github', owner: entry.source.owner, repo: entry.source.repo, ref: entry.source.sha, sha: entry.source.sha, path: entry.source.path }));
|
|
37
|
+
return Object.freeze({
|
|
38
|
+
name: entry.name, kind: 'flow-extension', version: entry.version,
|
|
39
|
+
source: Object.freeze({ host: 'github', owner: source.owner, repo: source.repo, sha: source.sha, path: source.path }),
|
|
40
|
+
digest: entry.digest, manifestSha256: entry.manifestSha256, order: entry.order, resolvedAt: entry.resolvedAt,
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return Object.freeze({ version: PLUGIN_LOCK_VERSION, plugins: Object.freeze(plugins) });
|
|
44
|
+
}
|
|
45
|
+
/** Absent file → empty lock; unreadable or malformed → refusal. */
|
|
46
|
+
export function readPluginLock(root) {
|
|
47
|
+
recoverFlowsAndLock(root);
|
|
48
|
+
const path = join(root, PLUGIN_LOCK_FILE);
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return Object.freeze({ version: PLUGIN_LOCK_VERSION, plugins: Object.freeze([]) });
|
|
51
|
+
let parsed;
|
|
52
|
+
try {
|
|
53
|
+
parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return invalid('not valid JSON.');
|
|
57
|
+
}
|
|
58
|
+
return parsePluginLock(parsed);
|
|
59
|
+
}
|
|
60
|
+
export function writePluginLock(root, lock) {
|
|
61
|
+
writeFileSync(join(root, PLUGIN_LOCK_FILE), `${JSON.stringify(parsePluginLock(lock), null, 2)}\n`);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Finish or abort a two-file update left by a process crash. The lock temp is
|
|
65
|
+
* written first: by itself it is only preparation and can be discarded. Once
|
|
66
|
+
* the config temp exists, both complete snapshots exist and recovery rolls
|
|
67
|
+
* them forward in the same lock-then-declaration order as the writer.
|
|
68
|
+
*/
|
|
69
|
+
export function recoverFlowsAndLock(root, configPath = join(root, FLOWS_FILE)) {
|
|
70
|
+
const jsonTmp = `${configPath}.tmp`;
|
|
71
|
+
const lockPath = join(root, PLUGIN_LOCK_FILE);
|
|
72
|
+
const lockTmp = `${lockPath}.tmp`;
|
|
73
|
+
const hasJson = existsSync(jsonTmp);
|
|
74
|
+
const hasLock = existsSync(lockTmp);
|
|
75
|
+
if (!hasJson && !hasLock)
|
|
76
|
+
return;
|
|
77
|
+
if (!hasJson) {
|
|
78
|
+
unlinkSync(lockTmp);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let pendingConfig;
|
|
82
|
+
try {
|
|
83
|
+
pendingConfig = JSON.parse(readFileSync(jsonTmp, 'utf8'));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
if (hasLock) {
|
|
87
|
+
unlinkSync(jsonTmp);
|
|
88
|
+
unlinkSync(lockTmp);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
return invalid('pending transaction has invalid flows.json.tmp.');
|
|
92
|
+
}
|
|
93
|
+
if (!object(pendingConfig) || !Array.isArray(pendingConfig.plugins)
|
|
94
|
+
|| !pendingConfig.plugins.every(plugin => typeof plugin === 'string')) {
|
|
95
|
+
if (hasLock) {
|
|
96
|
+
unlinkSync(jsonTmp);
|
|
97
|
+
unlinkSync(lockTmp);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
return invalid('pending transaction has invalid flows.json.tmp.');
|
|
101
|
+
}
|
|
102
|
+
const lockSource = hasLock ? lockTmp : lockPath;
|
|
103
|
+
let pendingLock;
|
|
104
|
+
try {
|
|
105
|
+
pendingLock = JSON.parse(readFileSync(lockSource, 'utf8'));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
if (hasLock) {
|
|
109
|
+
unlinkSync(jsonTmp);
|
|
110
|
+
unlinkSync(lockTmp);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
return invalid('pending transaction has no valid lock snapshot.');
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
parsePluginLock(pendingLock);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (hasLock) {
|
|
120
|
+
unlinkSync(jsonTmp);
|
|
121
|
+
unlinkSync(lockTmp);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
if (hasLock)
|
|
127
|
+
renameSync(lockTmp, lockPath);
|
|
128
|
+
renameSync(jsonTmp, configPath);
|
|
129
|
+
}
|
|
130
|
+
/** Write complete snapshots, then recover them as one roll-forward transaction. */
|
|
131
|
+
export function writeFlowsAndLock(root, configPath, config, plugins, lock) {
|
|
132
|
+
const jsonTmp = `${configPath}.tmp`;
|
|
133
|
+
const lockPath = join(root, PLUGIN_LOCK_FILE);
|
|
134
|
+
const lockTmp = `${lockPath}.tmp`;
|
|
135
|
+
writeFileSync(lockTmp, `${JSON.stringify(parsePluginLock(lock), null, 2)}\n`);
|
|
136
|
+
writeFileSync(jsonTmp, `${JSON.stringify({ ...config, plugins: [...plugins] }, null, 2)}\n`);
|
|
137
|
+
recoverFlowsAndLock(root, configPath);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Rebuild the entry list in `flows.json.plugins` order: `order` is derived from
|
|
141
|
+
* the declaration list, never stored independently, so the two cannot disagree.
|
|
142
|
+
* Lock entries that are no longer declared are dropped; a declaration with no
|
|
143
|
+
* matching lock entry is a refusal.
|
|
144
|
+
*/
|
|
145
|
+
export function lockForDeclared(lock, declared) {
|
|
146
|
+
const byRef = new Map(lock.plugins.map(p => [canonicalPluginRef({ ...p.source, ref: p.source.sha }), p]));
|
|
147
|
+
const plugins = declared.filter(isGithubPluginRef).map((ref, index) => {
|
|
148
|
+
const found = byRef.get(ref);
|
|
149
|
+
if (found === undefined)
|
|
150
|
+
return invalid(`flows.json declares ${ref} but the lockfile has no entry for it; run flows add ${ref}.`);
|
|
151
|
+
return Object.freeze({ ...found, order: index + 1 });
|
|
152
|
+
});
|
|
153
|
+
return Object.freeze({ version: PLUGIN_LOCK_VERSION, plugins: Object.freeze(plugins) });
|
|
154
|
+
}
|
|
155
|
+
export function lockWithPlugin(lock, declared, entry) {
|
|
156
|
+
const byRef = new Map(lock.plugins.map(p => [canonicalPluginRef({ ...p.source, ref: p.source.sha }), p]));
|
|
157
|
+
byRef.set(canonicalPluginRef({ ...entry.source, ref: entry.source.sha }), { ...entry, kind: 'flow-extension', order: 0 });
|
|
158
|
+
return lockForDeclared({ version: PLUGIN_LOCK_VERSION, plugins: Object.freeze([...byRef.values()]) }, declared);
|
|
159
|
+
}
|
|
160
|
+
/** Lock entries paired with their declared reference, in declaration order. */
|
|
161
|
+
export function lockedPlugins(lock) {
|
|
162
|
+
return lock.plugins.map(entry => {
|
|
163
|
+
const source = { ...entry.source, ref: entry.source.sha };
|
|
164
|
+
return { ref: canonicalPluginRef(source), entry, source };
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/** The `github:` entries of `flows.json.plugins`, in declaration order; helper entries are left out. */
|
|
168
|
+
export function declaredExtensionRefs(root) {
|
|
169
|
+
recoverFlowsAndLock(root);
|
|
170
|
+
let config;
|
|
171
|
+
try {
|
|
172
|
+
config = JSON.parse(readFileSync(join(root, 'flows.json'), 'utf8'));
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
throw new PluginError('plugin_manifest_invalid', 'Invalid flows.json.');
|
|
176
|
+
}
|
|
177
|
+
if (config === null || typeof config !== 'object' || (config.plugins !== undefined && (!Array.isArray(config.plugins) || !config.plugins.every(p => typeof p === 'string')))) {
|
|
178
|
+
throw new PluginError('plugin_manifest_invalid', 'flows.json plugins must be strings.');
|
|
179
|
+
}
|
|
180
|
+
return Object.freeze((config.plugins ?? []).filter(isGithubPluginRef));
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* The three records that must agree before an extension is trusted:
|
|
184
|
+
* `flows.json.plugins` (declaration), `flows.lock.json` (provenance), and —
|
|
185
|
+
* checked by the caller against the returned digests — `.flows/plugins`
|
|
186
|
+
* (bytes). Any declaration without a lock entry, lock entry without a
|
|
187
|
+
* declaration, or order disagreement is `plugin_lock_invalid`.
|
|
188
|
+
*/
|
|
189
|
+
export function reconcileDeclaredExtensions(root) {
|
|
190
|
+
const declared = declaredExtensionRefs(root);
|
|
191
|
+
const locked = lockedPlugins(readPluginLock(root));
|
|
192
|
+
const lockedRefs = locked.map(p => p.ref);
|
|
193
|
+
for (const ref of declared)
|
|
194
|
+
if (!lockedRefs.includes(ref))
|
|
195
|
+
throw new PluginError('plugin_lock_invalid', `flows.json declares ${ref} but flows.lock.json has no entry for it.`);
|
|
196
|
+
for (const ref of lockedRefs)
|
|
197
|
+
if (!declared.includes(ref))
|
|
198
|
+
throw new PluginError('plugin_lock_invalid', `flows.lock.json records ${ref} but flows.json does not declare it.`);
|
|
199
|
+
if (declared.some((ref, index) => lockedRefs[index] !== ref))
|
|
200
|
+
throw new PluginError('plugin_lock_invalid', 'flows.lock.json order differs from flows.json.plugins.');
|
|
201
|
+
return locked;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=plugin-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-lock.js","sourceRoot":"","sources":["../src/plugin-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const PLUGIN_FAILURE_KINDS: readonly ["plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable"];
|
|
1
|
+
export declare const PLUGIN_FAILURE_KINDS: readonly ["plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable", "plugin_kind_invalid", "plugin_incompatible", "plugin_event_unroutable", "plugin_source_invalid", "plugin_event_ambiguous", "plugin_source_unresolved", "plugin_fetch_failed", "plugin_path_invalid", "plugin_too_large", "plugin_source_drift", "plugin_lock_invalid"];
|
|
2
2
|
export type PluginFailureKind = typeof PLUGIN_FAILURE_KINDS[number];
|
|
3
3
|
export declare class PluginError extends Error {
|
|
4
4
|
readonly code: PluginFailureKind;
|
|
@@ -10,6 +10,10 @@ export interface PluginVerb {
|
|
|
10
10
|
lowersTo: 'run' | 'llm' | 'agent' | 'effect' | 'wait';
|
|
11
11
|
args: Record<string, unknown>;
|
|
12
12
|
}
|
|
13
|
+
/** The kind a `flows-plugin.json` declares; absent means the schema-1 helper plugin. */
|
|
14
|
+
export type PluginKind = 'helper' | 'flow-extension';
|
|
15
|
+
export declare function pluginKindOf(input: unknown): PluginKind;
|
|
16
|
+
/** A schema-1 helper plugin: verbs that lower to kernel primitives. */
|
|
13
17
|
export interface PluginManifest {
|
|
14
18
|
name: string;
|
|
15
19
|
version: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifest.d.ts","sourceRoot":"","sources":["../src/plugin-manifest.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"plugin-manifest.d.ts","sourceRoot":"","sources":["../src/plugin-manifest.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,ohBASvB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACpE,qBAAa,WAAY,SAAQ,KAAK;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB;gBAAvB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM;CAC9D;AACD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AACD,wFAAwF;AACxF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AACrD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAKvD;AACD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,SAAS,EAAE;QAAE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC3E;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMtD;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,cAAc,CAqC3F;AACD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIpE"}
|
package/dist/plugin-manifest.js
CHANGED
|
@@ -4,6 +4,11 @@ export const PLUGIN_FAILURE_KINDS = [
|
|
|
4
4
|
'plugin_unknown', 'plugin_unlisted', 'plugin_install_failed', 'plugin_manifest_missing',
|
|
5
5
|
'plugin_manifest_invalid', 'plugin_preflight_missing', 'plugin_verb_unknown_primitive',
|
|
6
6
|
'plugin_unsupported', 'plugin_credential_missing', 'plugin_server_unreachable',
|
|
7
|
+
// schema 2 flow extensions (see flow-extension-manifest.ts, plugin-source.ts, plugin-github.ts)
|
|
8
|
+
'plugin_kind_invalid', 'plugin_incompatible', 'plugin_event_unroutable', 'plugin_source_invalid',
|
|
9
|
+
'plugin_event_ambiguous',
|
|
10
|
+
'plugin_source_unresolved', 'plugin_fetch_failed', 'plugin_path_invalid', 'plugin_too_large',
|
|
11
|
+
'plugin_source_drift', 'plugin_lock_invalid',
|
|
7
12
|
];
|
|
8
13
|
export class PluginError extends Error {
|
|
9
14
|
code;
|
|
@@ -12,6 +17,14 @@ export class PluginError extends Error {
|
|
|
12
17
|
this.code = code;
|
|
13
18
|
}
|
|
14
19
|
}
|
|
20
|
+
export function pluginKindOf(input) {
|
|
21
|
+
const kind = typeof input === 'object' && input !== null && !Array.isArray(input) ? input.kind : undefined;
|
|
22
|
+
if (kind === undefined || kind === 'helper')
|
|
23
|
+
return 'helper';
|
|
24
|
+
if (kind === 'flow-extension')
|
|
25
|
+
return 'flow-extension';
|
|
26
|
+
throw new PluginError('plugin_kind_invalid', `Unknown plugin kind ${JSON.stringify(kind)}; expected "helper" or "flow-extension".`);
|
|
27
|
+
}
|
|
15
28
|
const identifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
16
29
|
const reserved = new Set(['run', 'llm', 'agent', 'human', 'dispatch', 'done', 'cloud', 'memory', 'mcp', 'slack', '__proto__', 'constructor', 'prototype', 'then']);
|
|
17
30
|
const object = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
@@ -34,6 +47,11 @@ export function validatePluginManifest(input, packageName) {
|
|
|
34
47
|
const invalid = (message) => { throw new PluginError('plugin_manifest_invalid', message); };
|
|
35
48
|
if (!object(v))
|
|
36
49
|
return invalid('Expected a plugin manifest object.');
|
|
50
|
+
if (pluginKindOf(v) !== 'helper') {
|
|
51
|
+
throw new PluginError('plugin_kind_invalid', 'A flow-extension manifest installs from a GitHub reference (flows add github:<owner>/<repo>@<ref>#<path>), not as a helper package.');
|
|
52
|
+
}
|
|
53
|
+
if (v.schema !== undefined && v.schema !== 1)
|
|
54
|
+
return invalid('Helper plugin manifests are schema 1.');
|
|
37
55
|
if (!Object.hasOwn(v, 'preflight'))
|
|
38
56
|
throw new PluginError('plugin_preflight_missing', 'Plugin must declare preflight.');
|
|
39
57
|
if (typeof v.name !== 'string' || typeof v.version !== 'string' || !v.version.trim())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manifest.js","sourceRoot":"","sources":["../src/plugin-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,yBAAyB;IACvF,yBAAyB,EAAE,0BAA0B,EAAE,+BAA+B;IACtF,oBAAoB,EAAE,2BAA2B,EAAE,2BAA2B;
|
|
1
|
+
{"version":3,"file":"plugin-manifest.js","sourceRoot":"","sources":["../src/plugin-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a flow-extension plugin comes from: a public GitHub repository, pinned
|
|
3
|
+
* to a commit. A branch or tag is accepted as *input* only; what gets written
|
|
4
|
+
* to `flows.json` and the lockfile is always the canonical 40-hex form,
|
|
5
|
+
* `github:<owner>/<repo>@<sha>#<path>`, so a later reader can never resolve
|
|
6
|
+
* to different bytes than the installer saw.
|
|
7
|
+
*/
|
|
8
|
+
export interface PluginSourceInput {
|
|
9
|
+
readonly host: 'github';
|
|
10
|
+
readonly owner: string;
|
|
11
|
+
readonly repo: string;
|
|
12
|
+
/** Branch, tag, or commit as typed. */
|
|
13
|
+
readonly ref: string;
|
|
14
|
+
/** Directory inside the repository holding `flows-plugin.json`; `''` is the root. */
|
|
15
|
+
readonly path: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PluginSourceRef extends PluginSourceInput {
|
|
18
|
+
/** Exactly 40 lowercase hex characters. */
|
|
19
|
+
readonly sha: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const SHA: RegExp;
|
|
22
|
+
export declare function isGithubPluginRef(value: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Accepts `github:<owner>/<repo>@<ref>#<path>`,
|
|
25
|
+
* `https://github.com/<owner>/<repo>/tree/<ref>/<path>` (or `/blob/`), and
|
|
26
|
+
* `github:<owner>/<repo>@<ref>` for a root-level plugin.
|
|
27
|
+
*
|
|
28
|
+
* In the URL form the ref is the single segment after `tree/`: GitHub itself
|
|
29
|
+
* disambiguates `tree/feat/x/dir` against the repository's refs, which an
|
|
30
|
+
* offline parser cannot. A ref containing `/` must use the `github:` form,
|
|
31
|
+
* where `@ref#path` is unambiguous.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parsePluginSource(input: string): PluginSourceInput;
|
|
34
|
+
/** The one spelling that is ever persisted. */
|
|
35
|
+
export declare function canonicalPluginRef(source: PluginSourceRef): string;
|
|
36
|
+
/** Parses a persisted reference; refuses anything but the canonical sha form. */
|
|
37
|
+
export declare function parseCanonicalPluginRef(value: string): PluginSourceRef;
|
|
38
|
+
//# sourceMappingURL=plugin-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-source.d.ts","sourceRoot":"","sources":["../src/plugin-source.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AACD,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAKD,eAAO,MAAM,GAAG,QAAmB,CAAC;AAMpC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CA6BlE;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAElE;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAMtE"}
|