@0xrama/bnpm 0.0.1
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/README.md +83 -0
- package/dist/package.json +45 -0
- package/dist/src/cache/archive.d.ts +15 -0
- package/dist/src/cache/archive.js +163 -0
- package/dist/src/cache/archive.js.map +1 -0
- package/dist/src/cache/commands.d.ts +15 -0
- package/dist/src/cache/commands.js +168 -0
- package/dist/src/cache/commands.js.map +1 -0
- package/dist/src/cache/quarantine.d.ts +18 -0
- package/dist/src/cache/quarantine.js +104 -0
- package/dist/src/cache/quarantine.js.map +1 -0
- package/dist/src/cache/store.d.ts +10 -0
- package/dist/src/cache/store.js +155 -0
- package/dist/src/cache/store.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +4 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/diff.d.ts +34 -0
- package/dist/src/commands/diff.js +223 -0
- package/dist/src/commands/diff.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +14 -0
- package/dist/src/commands/doctor.js +42 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/edit.d.ts +12 -0
- package/dist/src/commands/edit.js +100 -0
- package/dist/src/commands/edit.js.map +1 -0
- package/dist/src/commands/fund.d.ts +10 -0
- package/dist/src/commands/fund.js +32 -0
- package/dist/src/commands/fund.js.map +1 -0
- package/dist/src/commands/graph.d.ts +29 -0
- package/dist/src/commands/graph.js +90 -0
- package/dist/src/commands/graph.js.map +1 -0
- package/dist/src/commands/index.d.ts +20 -0
- package/dist/src/commands/index.js +1753 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/navigation.d.ts +2 -0
- package/dist/src/commands/navigation.js +47 -0
- package/dist/src/commands/navigation.js.map +1 -0
- package/dist/src/commands/outdated.d.ts +17 -0
- package/dist/src/commands/outdated.js +69 -0
- package/dist/src/commands/outdated.js.map +1 -0
- package/dist/src/commands/process.d.ts +11 -0
- package/dist/src/commands/process.js +189 -0
- package/dist/src/commands/process.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +6 -0
- package/dist/src/commands/prompts.js +86 -0
- package/dist/src/commands/prompts.js.map +1 -0
- package/dist/src/commands/query.d.ts +48 -0
- package/dist/src/commands/query.js +639 -0
- package/dist/src/commands/query.js.map +1 -0
- package/dist/src/commands/rebuild.d.ts +16 -0
- package/dist/src/commands/rebuild.js +44 -0
- package/dist/src/commands/rebuild.js.map +1 -0
- package/dist/src/commands/sbom.d.ts +6 -0
- package/dist/src/commands/sbom.js +31 -0
- package/dist/src/commands/sbom.js.map +1 -0
- package/dist/src/commands/script-approvals.d.ts +22 -0
- package/dist/src/commands/script-approvals.js +128 -0
- package/dist/src/commands/script-approvals.js.map +1 -0
- package/dist/src/commands/shrinkwrap.d.ts +6 -0
- package/dist/src/commands/shrinkwrap.js +97 -0
- package/dist/src/commands/shrinkwrap.js.map +1 -0
- package/dist/src/commands/stage.d.ts +20 -0
- package/dist/src/commands/stage.js +40 -0
- package/dist/src/commands/stage.js.map +1 -0
- package/dist/src/commands/token.d.ts +2 -0
- package/dist/src/commands/token.js +47 -0
- package/dist/src/commands/token.js.map +1 -0
- package/dist/src/commands/trust.d.ts +5 -0
- package/dist/src/commands/trust.js +41 -0
- package/dist/src/commands/trust.js.map +1 -0
- package/dist/src/config/commands.d.ts +5 -0
- package/dist/src/config/commands.js +91 -0
- package/dist/src/config/commands.js.map +1 -0
- package/dist/src/config/configuration.d.ts +40 -0
- package/dist/src/config/configuration.js +157 -0
- package/dist/src/config/configuration.js.map +1 -0
- package/dist/src/config/interactive.d.ts +16 -0
- package/dist/src/config/interactive.js +19 -0
- package/dist/src/config/interactive.js.map +1 -0
- package/dist/src/config/paths.d.ts +22 -0
- package/dist/src/config/paths.js +46 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/types.d.ts +15 -0
- package/dist/src/config/types.js +6 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/core/cli-parser.d.ts +102 -0
- package/dist/src/core/cli-parser.js +1148 -0
- package/dist/src/core/cli-parser.js.map +1 -0
- package/dist/src/core/cli-runner.d.ts +15 -0
- package/dist/src/core/cli-runner.js +261 -0
- package/dist/src/core/cli-runner.js.map +1 -0
- package/dist/src/core/exit-codes.d.ts +13 -0
- package/dist/src/core/exit-codes.js +13 -0
- package/dist/src/core/exit-codes.js.map +1 -0
- package/dist/src/core/output.d.ts +23 -0
- package/dist/src/core/output.js +123 -0
- package/dist/src/core/output.js.map +1 -0
- package/dist/src/installer/install.d.ts +73 -0
- package/dist/src/installer/install.js +596 -0
- package/dist/src/installer/install.js.map +1 -0
- package/dist/src/installer/mutations.d.ts +5 -0
- package/dist/src/installer/mutations.js +160 -0
- package/dist/src/installer/mutations.js.map +1 -0
- package/dist/src/linker/project-linker.d.ts +9 -0
- package/dist/src/linker/project-linker.js +223 -0
- package/dist/src/linker/project-linker.js.map +1 -0
- package/dist/src/lockfile/index.d.ts +27 -0
- package/dist/src/lockfile/index.js +221 -0
- package/dist/src/lockfile/index.js.map +1 -0
- package/dist/src/package/authoring.d.ts +31 -0
- package/dist/src/package/authoring.js +125 -0
- package/dist/src/package/authoring.js.map +1 -0
- package/dist/src/package/pack.d.ts +22 -0
- package/dist/src/package/pack.js +238 -0
- package/dist/src/package/pack.js.map +1 -0
- package/dist/src/package/provenance.d.ts +28 -0
- package/dist/src/package/provenance.js +162 -0
- package/dist/src/package/provenance.js.map +1 -0
- package/dist/src/package/publish.d.ts +28 -0
- package/dist/src/package/publish.js +189 -0
- package/dist/src/package/publish.js.map +1 -0
- package/dist/src/package/trusted-publishing.d.ts +7 -0
- package/dist/src/package/trusted-publishing.js +84 -0
- package/dist/src/package/trusted-publishing.js.map +1 -0
- package/dist/src/project/dependency-error.d.ts +3 -0
- package/dist/src/project/dependency-error.js +7 -0
- package/dist/src/project/dependency-error.js.map +1 -0
- package/dist/src/project/dev-engines.d.ts +10 -0
- package/dist/src/project/dev-engines.js +70 -0
- package/dist/src/project/dev-engines.js.map +1 -0
- package/dist/src/project/discovery.d.ts +6 -0
- package/dist/src/project/discovery.js +51 -0
- package/dist/src/project/discovery.js.map +1 -0
- package/dist/src/project/global.d.ts +3 -0
- package/dist/src/project/global.js +43 -0
- package/dist/src/project/global.js.map +1 -0
- package/dist/src/project/invalidation.d.ts +3 -0
- package/dist/src/project/invalidation.js +21 -0
- package/dist/src/project/invalidation.js.map +1 -0
- package/dist/src/project/link.d.ts +21 -0
- package/dist/src/project/link.js +152 -0
- package/dist/src/project/link.js.map +1 -0
- package/dist/src/project/manifest.d.ts +27 -0
- package/dist/src/project/manifest.js +378 -0
- package/dist/src/project/manifest.js.map +1 -0
- package/dist/src/project/pkg.d.ts +5 -0
- package/dist/src/project/pkg.js +94 -0
- package/dist/src/project/pkg.js.map +1 -0
- package/dist/src/project/recovery.d.ts +2 -0
- package/dist/src/project/recovery.js +82 -0
- package/dist/src/project/recovery.js.map +1 -0
- package/dist/src/project/workspaces.d.ts +4 -0
- package/dist/src/project/workspaces.js +59 -0
- package/dist/src/project/workspaces.js.map +1 -0
- package/dist/src/registry/account.d.ts +79 -0
- package/dist/src/registry/account.js +305 -0
- package/dist/src/registry/account.js.map +1 -0
- package/dist/src/registry/audit.d.ts +18 -0
- package/dist/src/registry/audit.js +74 -0
- package/dist/src/registry/audit.js.map +1 -0
- package/dist/src/registry/client.d.ts +19 -0
- package/dist/src/registry/client.js +102 -0
- package/dist/src/registry/client.js.map +1 -0
- package/dist/src/registry/configuration.d.ts +36 -0
- package/dist/src/registry/configuration.js +133 -0
- package/dist/src/registry/configuration.js.map +1 -0
- package/dist/src/registry/operations.d.ts +163 -0
- package/dist/src/registry/operations.js +502 -0
- package/dist/src/registry/operations.js.map +1 -0
- package/dist/src/registry/types.d.ts +30 -0
- package/dist/src/registry/types.js +2 -0
- package/dist/src/registry/types.js.map +1 -0
- package/dist/src/resolver/registry-resolver.d.ts +40 -0
- package/dist/src/resolver/registry-resolver.js +354 -0
- package/dist/src/resolver/registry-resolver.js.map +1 -0
- package/dist/src/resolver/source-provider.d.ts +17 -0
- package/dist/src/resolver/source-provider.js +336 -0
- package/dist/src/resolver/source-provider.js.map +1 -0
- package/dist/src/resolver/types.d.ts +28 -0
- package/dist/src/resolver/types.js +2 -0
- package/dist/src/resolver/types.js.map +1 -0
- package/dist/src/security/analyzer.d.ts +38 -0
- package/dist/src/security/analyzer.js +241 -0
- package/dist/src/security/analyzer.js.map +1 -0
- package/dist/src/security/audit.d.ts +19 -0
- package/dist/src/security/audit.js +61 -0
- package/dist/src/security/audit.js.map +1 -0
- package/dist/src/security/findings.d.ts +23 -0
- package/dist/src/security/findings.js +2 -0
- package/dist/src/security/findings.js.map +1 -0
- package/dist/src/security/integrity.d.ts +14 -0
- package/dist/src/security/integrity.js +40 -0
- package/dist/src/security/integrity.js.map +1 -0
- package/dist/src/security/policy.d.ts +16 -0
- package/dist/src/security/policy.js +24 -0
- package/dist/src/security/policy.js.map +1 -0
- package/dist/src/security/recent-release.d.ts +19 -0
- package/dist/src/security/recent-release.js +27 -0
- package/dist/src/security/recent-release.js.map +1 -0
- package/dist/src/security/script-runner.d.ts +13 -0
- package/dist/src/security/script-runner.js +73 -0
- package/dist/src/security/script-runner.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { lstat, open, readFile, realpath } from "node:fs/promises";
|
|
4
|
+
import { basename, join, posix, relative, resolve, sep } from "node:path";
|
|
5
|
+
import { createGzip } from "node:zlib";
|
|
6
|
+
import packlist from "npm-packlist";
|
|
7
|
+
import semver from "semver";
|
|
8
|
+
import tar from "tar-stream";
|
|
9
|
+
const maxFiles = 100_000;
|
|
10
|
+
const maxUnpackedBytes = 1024 * 1024 * 1024;
|
|
11
|
+
const maxFileBytes = 128 * 1024 * 1024;
|
|
12
|
+
const portableTime = new Date("1985-10-26T08:15:00.000Z");
|
|
13
|
+
const packageName = /^(?:@[^/@\s]+\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
14
|
+
export class PackError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(`Pack error: ${message}`);
|
|
17
|
+
this.name = "PackError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function record(value, source) {
|
|
21
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
22
|
+
throw new PackError(`${source} must contain a JSON object`);
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
function safePath(root, entry) {
|
|
26
|
+
if (!entry || entry.includes("\0") || entry.includes("\\") || entry.startsWith("/") || /^[A-Za-z]:/.test(entry)) {
|
|
27
|
+
throw new PackError(`unsafe package path ${JSON.stringify(entry)}`);
|
|
28
|
+
}
|
|
29
|
+
const normalized = posix.normalize(entry);
|
|
30
|
+
if (normalized === ".." || normalized.startsWith("../"))
|
|
31
|
+
throw new PackError(`package path escapes the root: ${entry}`);
|
|
32
|
+
const target = resolve(root, ...normalized.split("/"));
|
|
33
|
+
if (target !== root && !target.startsWith(`${root}${sep}`))
|
|
34
|
+
throw new PackError(`package path escapes the root: ${entry}`);
|
|
35
|
+
return target;
|
|
36
|
+
}
|
|
37
|
+
async function readRegularFile(root, entry, allowedRoots) {
|
|
38
|
+
const path = safePath(root, entry);
|
|
39
|
+
const info = await lstat(path);
|
|
40
|
+
if (!info.isFile())
|
|
41
|
+
throw new PackError(`unsupported non-file entry ${entry}`);
|
|
42
|
+
if (info.size > maxFileBytes)
|
|
43
|
+
throw new PackError(`${entry} exceeds the ${maxFileBytes}-byte per-file limit`);
|
|
44
|
+
const canonical = await realpath(path);
|
|
45
|
+
if (canonical !== root && !canonical.startsWith(`${root}${sep}`) && ![...allowedRoots].some((allowed) => canonical === allowed || canonical.startsWith(`${allowed}${sep}`))) {
|
|
46
|
+
throw new PackError(`${entry} resolves outside the package root and bundled dependencies`);
|
|
47
|
+
}
|
|
48
|
+
const handle = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
49
|
+
try {
|
|
50
|
+
const current = await handle.stat();
|
|
51
|
+
if (!current.isFile())
|
|
52
|
+
throw new PackError(`unsupported non-file entry ${entry}`);
|
|
53
|
+
const bytes = await handle.readFile();
|
|
54
|
+
if (bytes.length !== current.size || bytes.length > maxFileBytes)
|
|
55
|
+
throw new PackError(`${entry} changed while it was being packed`);
|
|
56
|
+
return { bytes, mode: (current.mode & 0o111) === 0 ? 0o644 : 0o755 };
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
await handle.close();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function dependencyNames(manifest, field) {
|
|
63
|
+
const value = manifest[field];
|
|
64
|
+
if (value === undefined)
|
|
65
|
+
return [];
|
|
66
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
67
|
+
throw new PackError(`package.json ${field} must be an object`);
|
|
68
|
+
return Object.keys(value).sort((left, right) => left.localeCompare(right));
|
|
69
|
+
}
|
|
70
|
+
async function installedTree(path, manifest, isProjectRoot, cache) {
|
|
71
|
+
const canonical = await realpath(path);
|
|
72
|
+
const existing = cache.get(canonical);
|
|
73
|
+
if (existing)
|
|
74
|
+
return existing;
|
|
75
|
+
const edgesOut = new Map();
|
|
76
|
+
const tree = { path, package: manifest, isProjectRoot, edgesOut };
|
|
77
|
+
cache.set(canonical, tree);
|
|
78
|
+
const prod = new Set([...dependencyNames(manifest, "dependencies"), ...dependencyNames(manifest, "optionalDependencies")]);
|
|
79
|
+
const dev = new Set(dependencyNames(manifest, "devDependencies"));
|
|
80
|
+
const peer = new Set(dependencyNames(manifest, "peerDependencies"));
|
|
81
|
+
const relevant = isProjectRoot
|
|
82
|
+
? Array.isArray(manifest.bundleDependencies) ? manifest.bundleDependencies.filter((name) => typeof name === "string") : []
|
|
83
|
+
: [...prod];
|
|
84
|
+
const kinds = [...new Set(relevant)].map((name) => ({ name, peer: !prod.has(name) && peer.has(name), dev: !prod.has(name) && dev.has(name) }));
|
|
85
|
+
for (const kind of kinds.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
86
|
+
if (edgesOut.has(kind.name))
|
|
87
|
+
continue;
|
|
88
|
+
const logical = join(path, "node_modules", ...kind.name.split("/"));
|
|
89
|
+
try {
|
|
90
|
+
const info = await lstat(logical);
|
|
91
|
+
const targetPath = await realpath(logical);
|
|
92
|
+
const raw = record(JSON.parse(await readFile(join(targetPath, "package.json"), "utf8")), join(targetPath, "package.json"));
|
|
93
|
+
const target = await installedTree(targetPath, raw, false, cache);
|
|
94
|
+
edgesOut.set(kind.name, { peer: kind.peer, dev: kind.dev, to: { path: logical, target, isLink: info.isSymbolicLink() || targetPath !== logical } });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error.code !== "ENOENT")
|
|
98
|
+
throw error;
|
|
99
|
+
edgesOut.set(kind.name, { peer: kind.peer, dev: kind.dev });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return tree;
|
|
103
|
+
}
|
|
104
|
+
function bundledEdges(tree) {
|
|
105
|
+
const names = tree.isProjectRoot
|
|
106
|
+
? Array.isArray(tree.package.bundleDependencies) ? tree.package.bundleDependencies.filter((name) => typeof name === "string") : []
|
|
107
|
+
: [...dependencyNames(tree.package, "dependencies"), ...dependencyNames(tree.package, "optionalDependencies")];
|
|
108
|
+
return [...new Set(names)].sort((left, right) => left.localeCompare(right)).flatMap((name) => {
|
|
109
|
+
const edge = tree.edgesOut.get(name);
|
|
110
|
+
return edge && !edge.peer && !edge.dev ? [[name, edge]] : [];
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function treeRoots(tree, seen = new Set(), roots = new Set()) {
|
|
114
|
+
if (seen.has(tree))
|
|
115
|
+
return roots;
|
|
116
|
+
seen.add(tree);
|
|
117
|
+
roots.add(await realpath(tree.path));
|
|
118
|
+
for (const [, edge] of bundledEdges(tree))
|
|
119
|
+
if (edge.to)
|
|
120
|
+
await treeRoots(edge.to.target, seen, roots);
|
|
121
|
+
return roots;
|
|
122
|
+
}
|
|
123
|
+
async function bundleMappings(tree, root, logical = root, seen = new Set(), mappings = []) {
|
|
124
|
+
const key = `${await realpath(tree.path)}\0${logical}`;
|
|
125
|
+
if (seen.has(key))
|
|
126
|
+
return mappings;
|
|
127
|
+
seen.add(key);
|
|
128
|
+
for (const [name, edge] of bundledEdges(tree)) {
|
|
129
|
+
if (!edge.to)
|
|
130
|
+
continue;
|
|
131
|
+
const real = await realpath(edge.to.target.path);
|
|
132
|
+
const childLogical = join(logical, "node_modules", ...name.split("/"));
|
|
133
|
+
mappings.push({ real, logical: childLogical });
|
|
134
|
+
await bundleMappings(edge.to.target, root, childLogical, seen, mappings);
|
|
135
|
+
}
|
|
136
|
+
return mappings.sort((left, right) => right.real.length - left.real.length);
|
|
137
|
+
}
|
|
138
|
+
async function logicalSelection(root, entry, mappings) {
|
|
139
|
+
const absolute = resolve(root, ...entry.split("/"));
|
|
140
|
+
if (absolute === root || absolute.startsWith(`${root}${sep}`))
|
|
141
|
+
return entry;
|
|
142
|
+
const canonical = await realpath(absolute);
|
|
143
|
+
const mapping = mappings.find(({ real }) => canonical === real || canonical.startsWith(`${real}${sep}`));
|
|
144
|
+
if (!mapping)
|
|
145
|
+
throw new PackError(`packlist selected a path outside the package and bundled dependencies: ${entry}`);
|
|
146
|
+
return relative(root, join(mapping.logical, relative(mapping.real, canonical))).split(sep).join("/");
|
|
147
|
+
}
|
|
148
|
+
function normalizeBundles(manifest) {
|
|
149
|
+
const value = manifest.bundleDependencies ?? manifest.bundledDependencies;
|
|
150
|
+
if (value === undefined || value === false)
|
|
151
|
+
return { ...manifest, bundleDependencies: [] };
|
|
152
|
+
if (value === true)
|
|
153
|
+
return { ...manifest, bundleDependencies: dependencyNames(manifest, "dependencies") };
|
|
154
|
+
if (!Array.isArray(value) || value.some((name) => typeof name !== "string" || !packageName.test(name)))
|
|
155
|
+
throw new PackError("bundleDependencies must be a boolean or an array of package names");
|
|
156
|
+
return { ...manifest, bundleDependencies: [...new Set(value)].sort((left, right) => left.localeCompare(right)) };
|
|
157
|
+
}
|
|
158
|
+
async function archive(entries) {
|
|
159
|
+
const pack = tar.pack();
|
|
160
|
+
const gzip = createGzip({ level: 9 });
|
|
161
|
+
const chunks = [];
|
|
162
|
+
const completion = new Promise((resolvePromise, reject) => {
|
|
163
|
+
gzip.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
164
|
+
gzip.once("end", () => resolvePromise(Buffer.concat(chunks)));
|
|
165
|
+
gzip.once("error", reject);
|
|
166
|
+
pack.once("error", reject);
|
|
167
|
+
});
|
|
168
|
+
pack.pipe(gzip);
|
|
169
|
+
for (const entry of entries) {
|
|
170
|
+
await new Promise((resolvePromise, reject) => {
|
|
171
|
+
pack.entry({
|
|
172
|
+
name: `package/${entry.path}`,
|
|
173
|
+
type: "file",
|
|
174
|
+
size: entry.bytes.length,
|
|
175
|
+
mode: entry.mode,
|
|
176
|
+
uid: 0,
|
|
177
|
+
gid: 0,
|
|
178
|
+
uname: "",
|
|
179
|
+
gname: "",
|
|
180
|
+
mtime: portableTime,
|
|
181
|
+
}, entry.bytes, (error) => error ? reject(error) : resolvePromise());
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
pack.finalize();
|
|
185
|
+
return completion;
|
|
186
|
+
}
|
|
187
|
+
export async function packPackage(directory) {
|
|
188
|
+
const root = await realpath(directory);
|
|
189
|
+
let manifest;
|
|
190
|
+
try {
|
|
191
|
+
manifest = record(JSON.parse(await readFile(join(root, "package.json"), "utf8")), join(root, "package.json"));
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (error instanceof PackError)
|
|
195
|
+
throw error;
|
|
196
|
+
throw new PackError(`${join(root, "package.json")} is missing or invalid JSON`);
|
|
197
|
+
}
|
|
198
|
+
const name = manifest.name;
|
|
199
|
+
const version = manifest.version;
|
|
200
|
+
if (typeof name !== "string" || !packageName.test(name))
|
|
201
|
+
throw new PackError("package.json requires a valid name");
|
|
202
|
+
if (typeof version !== "string" || semver.valid(version) !== version)
|
|
203
|
+
throw new PackError("package.json requires an exact semantic version");
|
|
204
|
+
const tree = await installedTree(root, normalizeBundles(manifest), true, new Map());
|
|
205
|
+
const selected = await packlist(tree);
|
|
206
|
+
const allowedRoots = await treeRoots(tree);
|
|
207
|
+
const mappings = await bundleMappings(tree, root);
|
|
208
|
+
const logicalFiles = await Promise.all(selected.map((entry) => logicalSelection(root, entry, mappings)));
|
|
209
|
+
if (logicalFiles.length > maxFiles)
|
|
210
|
+
throw new PackError(`package exceeds the ${maxFiles}-file limit`);
|
|
211
|
+
const entries = [];
|
|
212
|
+
let unpackedSize = 0;
|
|
213
|
+
for (const entry of [...new Set(logicalFiles)].sort((left, right) => left.localeCompare(right, "en"))) {
|
|
214
|
+
const file = await readRegularFile(root, entry, allowedRoots);
|
|
215
|
+
unpackedSize += file.bytes.length;
|
|
216
|
+
if (unpackedSize > maxUnpackedBytes)
|
|
217
|
+
throw new PackError(`package exceeds the ${maxUnpackedBytes}-byte unpacked-size limit`);
|
|
218
|
+
entries.push({ path: entry, ...file });
|
|
219
|
+
}
|
|
220
|
+
if (!entries.some((entry) => entry.path === "package.json"))
|
|
221
|
+
throw new PackError("packlist omitted package.json");
|
|
222
|
+
const tarball = await archive(entries);
|
|
223
|
+
const filename = `${name.replace(/^@/, "").replaceAll("/", "-")}-${version}.tgz`;
|
|
224
|
+
return {
|
|
225
|
+
id: `${name}@${version}`,
|
|
226
|
+
name,
|
|
227
|
+
version,
|
|
228
|
+
filename,
|
|
229
|
+
size: tarball.length,
|
|
230
|
+
unpackedSize,
|
|
231
|
+
shasum: createHash("sha1").update(tarball).digest("hex"),
|
|
232
|
+
integrity: `sha512-${createHash("sha512").update(tarball).digest("base64")}`,
|
|
233
|
+
files: entries.map((entry) => ({ path: entry.path, size: entry.bytes.length, mode: entry.mode })),
|
|
234
|
+
manifest,
|
|
235
|
+
tarball,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../../src/package/pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SignOptions } from "sigstore";
|
|
2
|
+
import type { PackedPackage } from "./pack.js";
|
|
3
|
+
export interface ProvenanceBundle {
|
|
4
|
+
readonly mediaType: string;
|
|
5
|
+
readonly dsseEnvelope: {
|
|
6
|
+
readonly payload: string;
|
|
7
|
+
};
|
|
8
|
+
readonly [key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface ProvenanceServices {
|
|
11
|
+
readonly verify: (bundle: ProvenanceBundle) => Promise<unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface ProvenanceSigner {
|
|
14
|
+
(payload: Buffer, payloadType: string, options?: SignOptions): Promise<ProvenanceBundle>;
|
|
15
|
+
}
|
|
16
|
+
export declare class ProvenanceError extends Error {
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
19
|
+
export declare function provenanceSubject(artifact: PackedPackage): {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
readonly digest: {
|
|
22
|
+
readonly sha512: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export declare function extractProvenancePayload(bundle: ProvenanceBundle): Record<string, unknown>;
|
|
26
|
+
export declare function loadProvenance(artifact: PackedPackage, path: string, services?: ProvenanceServices): Promise<ProvenanceBundle>;
|
|
27
|
+
export declare function generateProvenance(artifact: PackedPackage, environment?: NodeJS.ProcessEnv, signer?: ProvenanceSigner): Promise<ProvenanceBundle>;
|
|
28
|
+
export declare function transparencyLogUrl(bundle: ProvenanceBundle): string | undefined;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import npa from "npm-package-arg";
|
|
3
|
+
const maxProvenanceBytes = 10 * 1024 * 1024;
|
|
4
|
+
export class ProvenanceError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(`Provenance error: ${message}`);
|
|
7
|
+
this.name = "ProvenanceError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function record(value, message) {
|
|
11
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
12
|
+
throw new Error(message);
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function packagePurl(name, version) {
|
|
16
|
+
const api = npa;
|
|
17
|
+
return api.toPurl(npa.resolve(name, version));
|
|
18
|
+
}
|
|
19
|
+
function sha512Hex(integrity) {
|
|
20
|
+
const value = integrity.match(/^sha512-([A-Za-z0-9+/]+={0,2})$/)?.[1];
|
|
21
|
+
if (!value)
|
|
22
|
+
throw new Error("Packed package has invalid SHA-512 integrity");
|
|
23
|
+
return Buffer.from(value, "base64").toString("hex");
|
|
24
|
+
}
|
|
25
|
+
export function provenanceSubject(artifact) {
|
|
26
|
+
return { name: packagePurl(artifact.name, artifact.version), digest: { sha512: sha512Hex(artifact.integrity) } };
|
|
27
|
+
}
|
|
28
|
+
export function extractProvenancePayload(bundle) {
|
|
29
|
+
if (!bundle.dsseEnvelope || typeof bundle.dsseEnvelope.payload !== "string" || bundle.dsseEnvelope.payload.length === 0) {
|
|
30
|
+
throw new Error("No dsseEnvelope with payload found in Sigstore bundle");
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return record(JSON.parse(Buffer.from(bundle.dsseEnvelope.payload, "base64").toString("utf8")), "Sigstore payload must be an object");
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new Error(`Failed to parse payload from dsseEnvelope: ${error instanceof Error ? error.message : String(error)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function loadProvenance(artifact, path, services = { verify: async (bundle) => (await import("sigstore")).verify(bundle) }) {
|
|
40
|
+
let info;
|
|
41
|
+
try {
|
|
42
|
+
info = await stat(path);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new ProvenanceError(`cannot read provenance file: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
|
+
}
|
|
47
|
+
if (!info.isFile() || info.size > maxProvenanceBytes)
|
|
48
|
+
throw new ProvenanceError(`file must be a regular file no larger than ${maxProvenanceBytes} bytes`);
|
|
49
|
+
let bundle;
|
|
50
|
+
try {
|
|
51
|
+
const parsed = record(JSON.parse(await readFile(path, "utf8")), "Sigstore bundle must be an object");
|
|
52
|
+
if (typeof parsed.mediaType !== "string" || parsed.mediaType.length === 0)
|
|
53
|
+
throw new Error("Sigstore bundle has no mediaType");
|
|
54
|
+
const envelope = record(parsed.dsseEnvelope, "Sigstore bundle has no dsseEnvelope");
|
|
55
|
+
if (typeof envelope.payload !== "string")
|
|
56
|
+
throw new Error("Sigstore bundle has no payload");
|
|
57
|
+
bundle = parsed;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
throw new ProvenanceError(`invalid bundle: ${error instanceof Error ? error.message : String(error)}`);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const payload = extractProvenancePayload(bundle);
|
|
64
|
+
if (!Array.isArray(payload.subject) || payload.subject.length !== 1)
|
|
65
|
+
throw new Error("Sigstore bundle must contain exactly one subject");
|
|
66
|
+
const subject = record(payload.subject[0], "Sigstore bundle subject must be an object");
|
|
67
|
+
const digest = record(subject.digest, "Sigstore bundle subject must contain a digest");
|
|
68
|
+
const expected = provenanceSubject(artifact);
|
|
69
|
+
if (subject.name !== expected.name)
|
|
70
|
+
throw new Error(`subject ${String(subject.name)} does not match the package: ${expected.name}`);
|
|
71
|
+
if (digest.sha512 !== expected.digest.sha512)
|
|
72
|
+
throw new Error("subject digest does not match the package");
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new ProvenanceError(error instanceof Error ? error.message : String(error));
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
await services.verify(bundle);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new ProvenanceError(`signature verification failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
82
|
+
}
|
|
83
|
+
return bundle;
|
|
84
|
+
}
|
|
85
|
+
function required(environment, name) {
|
|
86
|
+
const value = environment[name];
|
|
87
|
+
if (!value)
|
|
88
|
+
throw new ProvenanceError(`missing required CI environment variable ${name}`);
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
function githubStatement(artifact, environment) {
|
|
92
|
+
required(environment, "ACTIONS_ID_TOKEN_REQUEST_URL");
|
|
93
|
+
const repository = required(environment, "GITHUB_REPOSITORY");
|
|
94
|
+
const server = required(environment, "GITHUB_SERVER_URL");
|
|
95
|
+
const workflowRefValue = required(environment, "GITHUB_WORKFLOW_REF").replace(`${repository}/`, "");
|
|
96
|
+
const delimiter = workflowRefValue.indexOf("@");
|
|
97
|
+
if (delimiter <= 0 || delimiter === workflowRefValue.length - 1)
|
|
98
|
+
throw new ProvenanceError("GITHUB_WORKFLOW_REF is malformed");
|
|
99
|
+
return {
|
|
100
|
+
_type: "https://in-toto.io/Statement/v1",
|
|
101
|
+
subject: [provenanceSubject(artifact)],
|
|
102
|
+
predicateType: "https://slsa.dev/provenance/v1",
|
|
103
|
+
predicate: {
|
|
104
|
+
buildDefinition: {
|
|
105
|
+
buildType: "https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",
|
|
106
|
+
externalParameters: { workflow: { ref: workflowRefValue.slice(delimiter + 1), repository: `${server}/${repository}`, path: workflowRefValue.slice(0, delimiter) } },
|
|
107
|
+
internalParameters: { github: { event_name: environment.GITHUB_EVENT_NAME, repository_id: environment.GITHUB_REPOSITORY_ID, repository_owner_id: environment.GITHUB_REPOSITORY_OWNER_ID } },
|
|
108
|
+
resolvedDependencies: [{ uri: `git+${server}/${repository}@${required(environment, "GITHUB_REF")}`, digest: { gitCommit: required(environment, "GITHUB_SHA") } }],
|
|
109
|
+
},
|
|
110
|
+
runDetails: {
|
|
111
|
+
builder: { id: `https://github.com/actions/runner/${required(environment, "RUNNER_ENVIRONMENT")}` },
|
|
112
|
+
metadata: { invocationId: `${server}/${repository}/actions/runs/${required(environment, "GITHUB_RUN_ID")}/attempts/${required(environment, "GITHUB_RUN_ATTEMPT")}` },
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function gitlabStatement(artifact, environment) {
|
|
118
|
+
const projectUrl = required(environment, "CI_PROJECT_URL");
|
|
119
|
+
const commit = required(environment, "CI_COMMIT_SHA");
|
|
120
|
+
return {
|
|
121
|
+
_type: "https://in-toto.io/Statement/v0.1",
|
|
122
|
+
subject: [provenanceSubject(artifact)],
|
|
123
|
+
predicateType: "https://slsa.dev/provenance/v0.2",
|
|
124
|
+
predicate: {
|
|
125
|
+
buildType: "https://github.com/npm/cli/gitlab/v0alpha1",
|
|
126
|
+
builder: { id: `${projectUrl}/-/runners/${required(environment, "CI_RUNNER_ID")}` },
|
|
127
|
+
invocation: {
|
|
128
|
+
configSource: { uri: `git+${projectUrl}`, digest: { sha1: commit }, entryPoint: required(environment, "CI_JOB_NAME") },
|
|
129
|
+
parameters: { CI: environment.CI, CI_COMMIT_REF_NAME: environment.CI_COMMIT_REF_NAME, CI_PIPELINE_SOURCE: environment.CI_PIPELINE_SOURCE },
|
|
130
|
+
environment: { server: environment.CI_SERVER_URL, project: environment.CI_PROJECT_PATH, job: { id: environment.CI_JOB_ID }, pipeline: { id: environment.CI_PIPELINE_ID, ref: environment.CI_CONFIG_PATH } },
|
|
131
|
+
},
|
|
132
|
+
metadata: { buildInvocationId: required(environment, "CI_JOB_URL"), completeness: { parameters: true, environment: true, materials: false }, reproducible: false },
|
|
133
|
+
materials: [{ uri: `git+${projectUrl}`, digest: { sha1: commit } }],
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export async function generateProvenance(artifact, environment = process.env, signer = async (payload, payloadType, options) => (await import("sigstore")).attest(payload, payloadType, options)) {
|
|
138
|
+
let statement;
|
|
139
|
+
let signOptions;
|
|
140
|
+
if (environment.GITHUB_ACTIONS === "true") {
|
|
141
|
+
statement = githubStatement(artifact, environment);
|
|
142
|
+
}
|
|
143
|
+
else if (environment.GITLAB_CI === "true") {
|
|
144
|
+
statement = gitlabStatement(artifact, environment);
|
|
145
|
+
signOptions = { identityToken: required(environment, "SIGSTORE_ID_TOKEN") };
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
throw new ProvenanceError("automatic generation is supported only in GitHub Actions or GitLab CI");
|
|
149
|
+
}
|
|
150
|
+
return signer(Buffer.from(JSON.stringify(statement)), "application/vnd.in-toto+json", signOptions);
|
|
151
|
+
}
|
|
152
|
+
export function transparencyLogUrl(bundle) {
|
|
153
|
+
const material = bundle.verificationMaterial;
|
|
154
|
+
if (typeof material !== "object" || material === null || Array.isArray(material))
|
|
155
|
+
return undefined;
|
|
156
|
+
const entries = material.tlogEntries;
|
|
157
|
+
if (!Array.isArray(entries) || typeof entries[0] !== "object" || entries[0] === null)
|
|
158
|
+
return undefined;
|
|
159
|
+
const index = entries[0].logIndex;
|
|
160
|
+
return typeof index === "number" || typeof index === "string" ? `https://search.sigstore.dev/?logIndex=${encodeURIComponent(String(index))}` : undefined;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../../src/package/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BnpmPaths } from "../config/paths.js";
|
|
2
|
+
import type { PackedPackage } from "./pack.js";
|
|
3
|
+
import { type ProvenanceBundle } from "./provenance.js";
|
|
4
|
+
export interface PublishOptions {
|
|
5
|
+
readonly artifact: PackedPackage;
|
|
6
|
+
readonly paths: BnpmPaths;
|
|
7
|
+
readonly registry?: URL;
|
|
8
|
+
readonly tag?: string;
|
|
9
|
+
readonly access?: "public" | "restricted";
|
|
10
|
+
readonly otp?: string;
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
13
|
+
readonly provenance?: ProvenanceBundle;
|
|
14
|
+
readonly generateProvenance?: boolean;
|
|
15
|
+
readonly provenanceGenerator?: (artifact: PackedPackage) => Promise<ProvenanceBundle>;
|
|
16
|
+
readonly environment?: Readonly<Record<string, string | undefined>>;
|
|
17
|
+
readonly stage?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface PublishResult {
|
|
20
|
+
readonly registry: string;
|
|
21
|
+
readonly tag: string;
|
|
22
|
+
readonly access?: "public" | "restricted";
|
|
23
|
+
readonly status: number;
|
|
24
|
+
readonly provenance: boolean;
|
|
25
|
+
readonly transparencyLogUrl?: string;
|
|
26
|
+
readonly stageId?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function publishPackage(options: PublishOptions): Promise<PublishResult>;
|