Pin dependency policy exceptions to versions

This commit is contained in:
2026-08-27 12:51:53 +01:00
parent f28b9ee87d
commit 8098495abf
10 changed files with 125 additions and 27 deletions
+20
View File
@@ -115,6 +115,26 @@ test("rejects direct lifecycle scripts and untrusted maintainers", async () => {
assert.ok(result.failures.some((message) => message.includes("registry maintainer set changed")));
});
test("permits a direct lifecycle script only for the reviewed version", async () => {
const document = packageDocument({ version: { scripts: { postinstall: "node setup.js" } } });
const policy = structuredClone(DEFAULT_POLICY);
policy.allowDirectLifecycleScripts.alpha = {
versions: ["1.2.3"],
reason: "Reviewed package setup script required by this exact release.",
expiresAt: "2025-02-01T00:00:00Z",
};
const dependencies = {
remoteRefs: async () => [{ sha: document.versions["1.2.3"].gitHead, ref: "refs/tags/v1.2.3" }],
now,
timeoutMs: 100,
};
const accepted = await verifyDirectPackage(item, document, policy, dependencies);
assert.ok(!accepted.failures.some((message) => message.includes("lifecycle hook")));
policy.allowDirectLifecycleScripts.alpha.versions = ["1.2.2"];
const rejected = await verifyDirectPackage(item, document, policy, dependencies);
assert.ok(rejected.failures.some((message) => message.includes("lifecycle hook")));
});
test("rejects a missing previously trusted maintainer", async () => {
const document = packageDocument({ version: { maintainers: [{ name: "alice" }] } });
const policy = structuredClone(DEFAULT_POLICY);