audit-tools 0.55.6 → 0.55.7

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.
Files changed (128) hide show
  1. package/dist/audit/cli/lineIndex.d.ts.map +1 -1
  2. package/dist/audit/cli/lineIndex.js +19 -41
  3. package/dist/audit/cli/lineIndex.js.map +1 -1
  4. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  5. package/dist/audit/cli/nextStepCommand.js +5 -2
  6. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  7. package/dist/audit/cli/nextStepHelpers.d.ts +6 -6
  8. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  9. package/dist/audit/cli/nextStepHelpers.js +52 -129
  10. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  11. package/dist/audit/extractors/disposition.d.ts.map +1 -1
  12. package/dist/audit/extractors/disposition.js +14 -38
  13. package/dist/audit/extractors/disposition.js.map +1 -1
  14. package/dist/audit/extractors/readFileText.d.ts.map +1 -1
  15. package/dist/audit/extractors/readFileText.js +34 -5
  16. package/dist/audit/extractors/readFileText.js.map +1 -1
  17. package/dist/audit/orchestrator/acquisitionExecutor.d.ts +5 -2
  18. package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -1
  19. package/dist/audit/orchestrator/acquisitionExecutor.js +28 -22
  20. package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -1
  21. package/dist/audit/orchestrator/reviewPacketSizing.d.ts +4 -4
  22. package/dist/audit/orchestrator/reviewPacketSizing.d.ts.map +1 -1
  23. package/dist/audit/orchestrator/reviewPacketSizing.js +5 -5
  24. package/dist/audit/orchestrator/reviewPacketSizing.js.map +1 -1
  25. package/dist/audit/orchestrator/reviewPackets.d.ts.map +1 -1
  26. package/dist/audit/orchestrator/reviewPackets.js +10 -5
  27. package/dist/audit/orchestrator/reviewPackets.js.map +1 -1
  28. package/dist/audit/orchestrator/runtimeCommand.d.ts +9 -2
  29. package/dist/audit/orchestrator/runtimeCommand.d.ts.map +1 -1
  30. package/dist/audit/orchestrator/runtimeCommand.js +14 -22
  31. package/dist/audit/orchestrator/runtimeCommand.js.map +1 -1
  32. package/dist/audit/orchestrator/scopeIndexBaseline.d.ts.map +1 -1
  33. package/dist/audit/orchestrator/scopeIndexBaseline.js +7 -29
  34. package/dist/audit/orchestrator/scopeIndexBaseline.js.map +1 -1
  35. package/dist/audit/orchestrator/selectiveDeepening/conflict.d.ts +6 -2
  36. package/dist/audit/orchestrator/selectiveDeepening/conflict.d.ts.map +1 -1
  37. package/dist/audit/orchestrator/selectiveDeepening/conflict.js +45 -4
  38. package/dist/audit/orchestrator/selectiveDeepening/conflict.js.map +1 -1
  39. package/dist/audit/orchestrator/selectiveDeepening/index.d.ts.map +1 -1
  40. package/dist/audit/orchestrator/selectiveDeepening/index.js +4 -4
  41. package/dist/audit/orchestrator/selectiveDeepening/index.js.map +1 -1
  42. package/dist/remediate/phases/close.d.ts.map +1 -1
  43. package/dist/remediate/phases/close.js +10 -7
  44. package/dist/remediate/phases/close.js.map +1 -1
  45. package/dist/remediate/phases/closeAcceptance.d.ts.map +1 -1
  46. package/dist/remediate/phases/closeAcceptance.js +2 -0
  47. package/dist/remediate/phases/closeAcceptance.js.map +1 -1
  48. package/dist/remediate/phases/closeVerifyAnalyzerLeads.d.ts +2 -1
  49. package/dist/remediate/phases/closeVerifyAnalyzerLeads.d.ts.map +1 -1
  50. package/dist/remediate/phases/closeVerifyAnalyzerLeads.js +10 -9
  51. package/dist/remediate/phases/closeVerifyAnalyzerLeads.js.map +1 -1
  52. package/dist/remediate/state/dirtyBaseline.d.ts +10 -0
  53. package/dist/remediate/state/dirtyBaseline.d.ts.map +1 -0
  54. package/dist/remediate/state/dirtyBaseline.js +18 -0
  55. package/dist/remediate/state/dirtyBaseline.js.map +1 -0
  56. package/dist/remediate/state/store.d.ts +4 -4
  57. package/dist/remediate/state/store.d.ts.map +1 -1
  58. package/dist/remediate/state/store.js +8 -0
  59. package/dist/remediate/state/store.js.map +1 -1
  60. package/dist/remediate/steps/dispatch/hostCorroboration.d.ts.map +1 -1
  61. package/dist/remediate/steps/dispatch/hostCorroboration.js +34 -82
  62. package/dist/remediate/steps/dispatch/hostCorroboration.js.map +1 -1
  63. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  64. package/dist/remediate/steps/dispatch/hostHandoff.js +6 -1
  65. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  66. package/dist/remediate/steps/finalGate.d.ts.map +1 -1
  67. package/dist/remediate/steps/finalGate.js +11 -5
  68. package/dist/remediate/steps/finalGate.js.map +1 -1
  69. package/dist/remediate/steps/gateCommands.d.ts +1 -0
  70. package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
  71. package/dist/remediate/steps/gateCommands.js +7 -11
  72. package/dist/remediate/steps/gateCommands.js.map +1 -1
  73. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  74. package/dist/remediate/steps/nextStep.js +37 -14
  75. package/dist/remediate/steps/nextStep.js.map +1 -1
  76. package/dist/shared/analyzers/acquisitionEngine.d.ts +12 -5
  77. package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
  78. package/dist/shared/analyzers/acquisitionEngine.js +86 -38
  79. package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
  80. package/dist/shared/analyzers/binaryAcquisition.d.ts +17 -41
  81. package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
  82. package/dist/shared/analyzers/binaryAcquisition.js +260 -227
  83. package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
  84. package/dist/shared/analyzers/binaryFetcher.d.ts +4 -0
  85. package/dist/shared/analyzers/binaryFetcher.d.ts.map +1 -0
  86. package/dist/shared/analyzers/binaryFetcher.js +79 -0
  87. package/dist/shared/analyzers/binaryFetcher.js.map +1 -0
  88. package/dist/shared/analyzers/binaryVersions.d.ts +5 -0
  89. package/dist/shared/analyzers/binaryVersions.d.ts.map +1 -0
  90. package/dist/shared/analyzers/binaryVersions.js +31 -0
  91. package/dist/shared/analyzers/binaryVersions.js.map +1 -0
  92. package/dist/shared/analyzers/candidates.d.ts +3 -3
  93. package/dist/shared/analyzers/candidates.d.ts.map +1 -1
  94. package/dist/shared/analyzers/candidates.js +35 -12
  95. package/dist/shared/analyzers/candidates.js.map +1 -1
  96. package/dist/shared/git.d.ts +28 -1
  97. package/dist/shared/git.d.ts.map +1 -1
  98. package/dist/shared/git.js +150 -51
  99. package/dist/shared/git.js.map +1 -1
  100. package/dist/shared/gitTrackedPaths.d.ts +39 -0
  101. package/dist/shared/gitTrackedPaths.d.ts.map +1 -0
  102. package/dist/shared/gitTrackedPaths.js +29 -0
  103. package/dist/shared/gitTrackedPaths.js.map +1 -0
  104. package/dist/shared/index.d.ts +4 -2
  105. package/dist/shared/index.d.ts.map +1 -1
  106. package/dist/shared/index.js +4 -2
  107. package/dist/shared/index.js.map +1 -1
  108. package/dist/shared/io/sourcePath.d.ts +8 -0
  109. package/dist/shared/io/sourcePath.d.ts.map +1 -0
  110. package/dist/shared/io/sourcePath.js +38 -0
  111. package/dist/shared/io/sourcePath.js.map +1 -0
  112. package/dist/shared/tooling/exec.d.ts +1 -0
  113. package/dist/shared/tooling/exec.d.ts.map +1 -1
  114. package/dist/shared/tooling/exec.js +20 -4
  115. package/dist/shared/tooling/exec.js.map +1 -1
  116. package/dist/shared/tooling/resolveExecutable.d.ts +10 -0
  117. package/dist/shared/tooling/resolveExecutable.d.ts.map +1 -0
  118. package/dist/shared/tooling/resolveExecutable.js +46 -0
  119. package/dist/shared/tooling/resolveExecutable.js.map +1 -0
  120. package/dist/shared/validation/citationGrounding.d.ts +1 -1
  121. package/dist/shared/validation/citationGrounding.d.ts.map +1 -1
  122. package/dist/shared/validation/citationGrounding.js +24 -11
  123. package/dist/shared/validation/citationGrounding.js.map +1 -1
  124. package/dist/shared/validation/findingGrounding.d.ts +1 -1
  125. package/dist/shared/validation/findingGrounding.d.ts.map +1 -1
  126. package/dist/shared/validation/findingGrounding.js +11 -23
  127. package/dist/shared/validation/findingGrounding.js.map +1 -1
  128. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
+ // sites-pinned: tests/shared/binary-acquisition.test.ts, tests/shared/binary-acquisition-contract.test.ts, tests/shared/binary-acquisition-process.test.ts, tests/shared/analyzer-default-runner-deadline.test.ts
1
2
  import { hashContent } from "../hash.js";
2
- import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
- import { join, relative } from "node:path";
3
+ import { chmodSync, accessSync, constants, lstatSync, mkdtempSync, renameSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync, } from "node:fs";
4
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
4
5
  import { homedir } from "node:os";
5
6
  import { AUDIT_TOOLS_DIRNAME } from "../io/auditToolsPaths.js";
6
- import { resolveWithinRoot } from "../io/pathContainment.js";
7
- import { resolveSpawnDeadline, runTrackedAsync, TRACKED_CHILD_DEADLINE_MS, } from "../tooling/exec.js";
7
+ import { withFileLock, FileLockTimeoutError } from "../io/fileLock.js";
8
+ import { resolveSpawnDeadline, resolveExecutableFile, runTrackedAsync, TRACKED_CHILD_DEADLINE_MS, } from "../tooling/exec.js";
8
9
  /**
9
10
  * Per-USER cache root, deliberately NOT the system temp dir. Defaults to
10
11
  * `~/.audit-tools/bincache`; `AUDIT_TOOLS_BINARY_CACHE` overrides it so a run can be
@@ -29,260 +30,292 @@ export function defaultCacheDir() {
29
30
  return override;
30
31
  return join(homedir(), AUDIT_TOOLS_DIRNAME, "bincache");
31
32
  }
32
- /**
33
- * Create the cache root restricted to its owner where the platform honours modes.
34
- * On win32 the mode is ignored (ACLs govern), and the per-user home root is the
35
- * protection there.
36
- *
37
- * ⚠ The mode applies AT CREATION ONLY. An existing directory keeps whatever mode it
38
- * already has — `mkdirSync` does not chmod one it did not create — so a root that was
39
- * created loosely by something else is not repaired here.
40
- */
41
- function ensureCacheRoot(cacheDir) {
42
- try {
43
- mkdirSync(cacheDir, { recursive: true, mode: 0o700 });
44
- }
45
- catch {
46
- /* a later mkdir of the version dir surfaces any real failure */
33
+ /** Parse a `<sha256>␠␠<asset>` checksums file for one asset's expected digest. */
34
+ export function expectedSha256For(checksumsText, assetName) {
35
+ for (const line of checksumsText.split(/\r?\n/)) {
36
+ const match = line.trim().match(/^([0-9a-fA-F]{64})\s+\*?(.+)$/);
37
+ if (match && match[2].trim() === assetName)
38
+ return match[1].toLowerCase();
47
39
  }
40
+ return null;
48
41
  }
49
- function exeName(binaryName, platform) {
50
- return platform === "win32" ? `${binaryName}.exe` : binaryName;
42
+ const MANIFEST = ".audit-tools-binary.json";
43
+ class AcquisitionFailure extends Error {
44
+ reason;
45
+ constructor(reason, message) {
46
+ super(message);
47
+ this.reason = reason;
48
+ }
51
49
  }
52
- /** `unavailable` with its cause carried in BOTH forms — machine member + human note. */
53
50
  function unavailable(reason, note) {
54
- return { status: "unavailable", command: null, reason, note };
51
+ return { status: "unavailable", command: null, reason, note: note.slice(0, 1000) };
55
52
  }
56
- /**
57
- * Cache manifest filename. Written beside the cached executable at download time and
58
- * the ONLY evidence that these bytes came from a checksum-verified acquisition.
59
- */
60
- const CACHE_MANIFEST_FILENAME = ".audit-tools-binary.json";
61
- /** Remove a cache version dir wholesale; best-effort, never throws. */
62
- function purgeVersionDir(versionDir) {
63
- try {
64
- rmSync(versionDir, { recursive: true, force: true });
65
- }
66
- catch {
67
- /* best-effort — a later resolution re-verifies regardless */
68
- }
53
+ function directory(path) {
54
+ const entry = lstatSync(path);
55
+ if (!entry.isDirectory() || entry.isSymbolicLink())
56
+ throw new Error("managed directory is not a physical directory");
69
57
  }
70
- function writeCacheManifest(versionDir, spec, executablePath) {
71
- try {
72
- const manifest = {
73
- binaryName: spec.binaryName,
74
- version: spec.version,
75
- executable_relative_path: relative(versionDir, executablePath).replace(/\\/g, "/"),
76
- executable_sha256: hashContent(readFileSync(executablePath)),
77
- };
78
- writeFileSync(join(versionDir, CACHE_MANIFEST_FILENAME), `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
58
+ function executableWithin(root, path, platform) {
59
+ directory(root);
60
+ if (!path || isAbsolute(path) || path.includes("\\") || path.split("/").some(part => !part || part === "." || part === "..")) {
61
+ throw new Error("invalid executable relative path");
79
62
  }
80
- catch {
81
- /* An unwritable manifest simply means the next resolution re-downloads. */
63
+ const absolute = resolve(root, path);
64
+ if (!absolute.startsWith(resolve(root) + sep))
65
+ throw new Error("executable escapes cache identity");
66
+ const parts = path.split("/");
67
+ let parent = root;
68
+ for (const part of parts.slice(0, -1)) {
69
+ parent = join(parent, part);
70
+ directory(parent);
82
71
  }
72
+ if (!lstatSync(absolute).isFile())
73
+ throw new Error("executable is not a regular physical file");
74
+ if (platform !== "win32")
75
+ accessSync(absolute, constants.X_OK);
76
+ return absolute;
83
77
  }
84
- /**
85
- * The cached executable's path — but ONLY when its bytes still hash to the digest
86
- * recorded when it was acquired. A missing, unreadable, or mismatched manifest, an
87
- * escaping relative path, or drifted bytes all return null and the caller purges:
88
- * filename existence is never sufficient to execute.
89
- */
90
- function verifiedCachedExecutable(versionDir, spec) {
91
- let manifest;
78
+ function verified(root, identity) {
92
79
  try {
93
- manifest = JSON.parse(readFileSync(join(versionDir, CACHE_MANIFEST_FILENAME), "utf8"));
80
+ directory(root);
81
+ if (!lstatSync(join(root, MANIFEST)).isFile())
82
+ return null;
83
+ const manifest = JSON.parse(readFileSync(join(root, MANIFEST), "utf8"));
84
+ if (JSON.stringify(manifest.identity) !== JSON.stringify(identity) ||
85
+ typeof manifest.executable_relative_path !== "string" ||
86
+ typeof manifest.executable_sha256 !== "string" || !/^[a-f0-9]{64}$/.test(manifest.executable_sha256))
87
+ return null;
88
+ const file = executableWithin(root, manifest.executable_relative_path, identity[3]);
89
+ return hashContent(readFileSync(file)) === manifest.executable_sha256 ? file : null;
94
90
  }
95
91
  catch {
96
92
  return null;
97
93
  }
98
- if (!manifest ||
99
- manifest.binaryName !== spec.binaryName ||
100
- manifest.version !== spec.version ||
101
- typeof manifest.executable_relative_path !== "string" ||
102
- manifest.executable_relative_path.length === 0 ||
103
- typeof manifest.executable_sha256 !== "string" ||
104
- manifest.executable_sha256.length !== 64) {
105
- return null;
106
- }
107
- const executablePath = join(versionDir, manifest.executable_relative_path);
108
- if (resolveWithinRoot(versionDir, executablePath) === null)
109
- return null;
94
+ }
95
+ function exists(path) {
110
96
  try {
111
- if (hashContent(readFileSync(executablePath)) !== manifest.executable_sha256.toLowerCase()) {
112
- return null;
113
- }
97
+ lstatSync(path);
98
+ return true;
114
99
  }
115
- catch {
116
- return null;
100
+ catch (error) {
101
+ if (error.code === "ENOENT")
102
+ return false;
103
+ throw error;
117
104
  }
118
- return executablePath;
119
105
  }
120
- /** Parse a `<sha256>␠␠<asset>` checksums file for one asset's expected digest. */
121
- export function expectedSha256For(checksumsText, assetName) {
122
- for (const line of checksumsText.split(/\r?\n/)) {
123
- const match = line.trim().match(/^([0-9a-fA-F]{64})\s+\*?(.+)$/);
124
- if (match && match[2].trim() === assetName)
125
- return match[1].toLowerCase();
106
+ /** Reject every link/special entry, including unused ones, without following it. */
107
+ function findExecutable(root, name) {
108
+ let found = null;
109
+ const visit = (dir) => {
110
+ directory(dir);
111
+ for (const entry of readdirSync(dir)) {
112
+ const path = join(dir, entry);
113
+ const stat = lstatSync(path);
114
+ if (stat.isDirectory())
115
+ visit(path);
116
+ else if (stat.isFile()) {
117
+ if (!found && entry === name)
118
+ found = path;
119
+ }
120
+ else
121
+ throw new Error("unsupported archive topology");
122
+ }
123
+ };
124
+ visit(root);
125
+ return found;
126
+ }
127
+ /** No injected byte fetch can reenter mutation after the deadline wins. */
128
+ async function fetchBytes(fetcher, url, signal) {
129
+ let onAbort = () => undefined;
130
+ const abort = new Promise((_resolve, reject) => {
131
+ onAbort = () => reject(new AcquisitionFailure("deadline_exceeded", "binary acquisition deadline exceeded"));
132
+ signal.addEventListener("abort", onAbort, { once: true });
133
+ if (signal.aborted)
134
+ onAbort();
135
+ });
136
+ const bytes = Promise.resolve().then(() => {
137
+ if (signal.aborted)
138
+ throw new AcquisitionFailure("deadline_exceeded", "binary acquisition deadline exceeded");
139
+ return fetcher(url, signal);
140
+ });
141
+ void bytes.then(() => undefined, () => undefined);
142
+ try {
143
+ return await Promise.race([bytes, abort]);
144
+ }
145
+ finally {
146
+ signal.removeEventListener("abort", onAbort);
126
147
  }
127
- return null;
128
148
  }
129
- /**
130
- * Resolve an executable for `spec`, acquiring it if necessary. Async (download is
131
- * network I/O); never throws. The result's `command` is what the engine spawns,
132
- * or null when the tool could not be made available.
133
- */
134
149
  export async function resolveBinary(spec, options = {}) {
150
+ const cwd = process.cwd();
151
+ const env = { ...process.env };
135
152
  const platform = options.platform ?? process.platform;
136
153
  const arch = options.arch ?? process.arch;
137
- // Declared deadline (INV-SSF residual): the version probe and the archive
138
- // extraction are both short; without a timeout runTrackedAsync arms no timer
139
- // and a hung child hangs the resolution forever.
140
- const run = options.run ??
141
- ((argv, cwd, timeoutMs) => runTrackedAsync(argv, { cwd, timeout: timeoutMs ?? TRACKED_CHILD_DEADLINE_MS }));
142
- const cacheDir = options.cacheDir ?? defaultCacheDir();
143
- // 1. PATH — already installed. Nothing below this point runs, so a tool the machine
144
- // already has must not cause a cache directory to be created as a side effect.
145
- const probe = await run(spec.versionProbeArgs, process.cwd(), resolveSpawnDeadline(options.deadline, TRACKED_CHILD_DEADLINE_MS));
146
- if (!probe.error && probe.status === 0) {
147
- return { status: "path", command: spec.binaryName };
148
- }
149
- // 2. cache — a previously-downloaded pinned binary, RE-VERIFIED on every
150
- // resolution. The cache path is derivable from public pinned constants, so a
151
- // file at the expected name is a claim, not a proof: it is executed only when its
152
- // bytes still match the digest recorded at acquisition. Anything else — including
153
- // a version dir a failed extraction left behind — is purged and re-acquired.
154
- const versionDir = join(cacheDir, `${spec.binaryName}-${spec.version}`);
155
- if (existsSync(versionDir)) {
156
- const verified = verifiedCachedExecutable(versionDir, spec);
157
- if (verified)
158
- return { status: "cached", command: verified };
159
- // Unverifiable bytes, or a dir a failed extraction left behind: purge so nothing
160
- // half-written or pre-planted can become a later "cache hit".
161
- purgeVersionDir(versionDir);
162
- }
163
- // 3. download — pinned release asset, SHA256-verified, then extracted.
164
- const fetch = options.fetch;
165
- if (!fetch) {
166
- return unavailable("offline", "no fetcher configured (offline)");
167
- }
168
- const assetName = spec.assetFor(platform, arch);
169
- if (!assetName) {
170
- return unavailable("no_asset_for_platform", `no release asset for ${platform}/${arch}`);
171
- }
172
- let assetBytes;
173
- let checksumsBytes;
154
+ const deadline = options.deadline ?? { at: Date.now() + TRACKED_CHILD_DEADLINE_MS };
155
+ if (!Number.isFinite(deadline.at))
156
+ return unavailable("invalid_budget", "invalid nonfinite binary acquisition deadline");
157
+ const controller = new AbortController();
158
+ let timer;
159
+ const check = () => {
160
+ if (Date.now() >= deadline.at || controller.signal.aborted) {
161
+ controller.abort();
162
+ throw new AcquisitionFailure("deadline_exceeded", "binary acquisition deadline exceeded");
163
+ }
164
+ };
165
+ const arm = () => {
166
+ const remaining = deadline.at - Date.now();
167
+ if (remaining <= 0)
168
+ controller.abort();
169
+ else
170
+ timer = setTimeout(arm, Math.min(remaining, 2_147_483_647));
171
+ };
172
+ const run = options.run ?? ((argv, at, timeout) => runTrackedAsync(argv, { cwd: at, timeout }));
173
+ const cacheDir = resolve(options.cacheDir ?? defaultCacheDir());
174
+ let diagnostic = "";
175
+ let stage;
174
176
  try {
175
- const checksumsAssetName = typeof spec.checksumsAsset === "function"
176
- ? spec.checksumsAsset(assetName)
177
- : spec.checksumsAsset;
178
- checksumsBytes = await fetch(spec.releaseUrlForAsset(checksumsAssetName));
179
- assetBytes = await fetch(spec.releaseUrlForAsset(assetName));
180
- }
181
- catch (error) {
182
- return unavailable("download_failed", `download failed: ${error instanceof Error ? error.message : String(error)}`);
183
- }
184
- if (!checksumsBytes || !assetBytes) {
185
- return unavailable("download_empty", "download returned no bytes");
186
- }
187
- const expected = expectedSha256For(Buffer.from(checksumsBytes).toString("utf8"), assetName);
188
- if (!expected) {
189
- return unavailable("no_checksum_for_asset", `no checksum for ${assetName}`);
190
- }
191
- const actual = hashContent(assetBytes);
192
- if (actual !== expected) {
193
- return unavailable("checksum_mismatch", `checksum mismatch for ${assetName} (expected ${expected}, got ${actual})`);
194
- }
195
- // Only here — past the PATH probe, past a cache miss, past verification — is
196
- // anything about to be WRITTEN. Creating the root any earlier would grow an empty
197
- // cache directory on every resolution that never caches anything: a tool already on
198
- // PATH, an offline degrade, an unsupported platform. Read paths only ever ask
199
- // whether the directory exists.
200
- ensureCacheRoot(cacheDir);
201
- // Non-archived asset (e.g. osv-scanner): the verified bytes ARE the
202
- // executable — write directly to the cached path, no `tar` involved.
203
- if (spec.archived === false) {
204
- try {
205
- mkdirSync(versionDir, { recursive: true });
206
- const resolved = join(versionDir, exeName(spec.binaryName, platform));
207
- writeFileSync(resolved, assetBytes);
208
- if (platform !== "win32") {
177
+ check();
178
+ arm();
179
+ const executable = (options.resolveExecutable ?? resolveExecutableFile)(spec.binaryName, { cwd, env, platform });
180
+ check();
181
+ if (executable !== null) {
182
+ const probe = await run([executable, ...spec.versionProbeArgs.slice(1)], cwd, resolveSpawnDeadline(deadline, TRACKED_CHILD_DEADLINE_MS));
183
+ check();
184
+ if (!probe.error && probe.status === 0 && spec.parseVersion?.(probe.stdout) === spec.version) {
185
+ return { status: "path", command: executable };
186
+ }
187
+ diagnostic = "PATH executable did not report the exact pinned version; ";
188
+ }
189
+ const asset = spec.assetFor(platform, arch);
190
+ if (!asset)
191
+ return unavailable("no_asset_for_platform", diagnostic + `no release asset for ${platform}/${arch}`);
192
+ const checksumAsset = typeof spec.checksumsAsset === "function" ? spec.checksumsAsset(asset) : spec.checksumsAsset;
193
+ const identity = [2, spec.binaryName, spec.version, platform, arch, asset,
194
+ spec.releaseUrlForAsset(asset), spec.releaseUrlForAsset(checksumAsset), spec.archived !== false];
195
+ const key = hashContent(JSON.stringify(identity));
196
+ const final = join(cacheDir, key);
197
+ check();
198
+ if (exists(cacheDir))
199
+ directory(cacheDir);
200
+ const warm = verified(final, identity);
201
+ check();
202
+ if (warm)
203
+ return { status: "cached", command: warm };
204
+ const fetcher = options.fetch;
205
+ if (!fetcher)
206
+ return unavailable("offline", diagnostic + "no fetcher configured (offline)");
207
+ // Online attempts create a private root/lock before requesting the checksum.
208
+ check();
209
+ mkdirSync(cacheDir, { recursive: true, mode: 0o700 });
210
+ directory(cacheDir);
211
+ check();
212
+ const result = await withFileLock(join(cacheDir, `${key}.lock`), async () => {
213
+ check(); // acquireLock may recover a stale lock after its timeout.
214
+ const existing = verified(final, identity);
215
+ check();
216
+ if (existing)
217
+ return { status: "cached", command: existing };
218
+ if (exists(final))
219
+ rmSync(final, { recursive: true, force: true });
220
+ check();
221
+ const request = async (url) => {
222
+ check();
209
223
  try {
210
- chmodSync(resolved, 0o755);
224
+ const bytes = await fetchBytes(fetcher, url, controller.signal);
225
+ check();
226
+ return bytes;
227
+ }
228
+ catch (error) {
229
+ check();
230
+ throw new AcquisitionFailure("download_failed", `download failed: ${String(error)}`);
231
+ }
232
+ };
233
+ const checksums = await request(identity[7]);
234
+ check();
235
+ if (!checksums || checksums.byteLength === 0)
236
+ throw new AcquisitionFailure("download_empty", "checksum download returned no bytes");
237
+ const expected = expectedSha256For(Buffer.from(checksums).toString("utf8"), asset);
238
+ if (!expected)
239
+ throw new AcquisitionFailure("no_checksum_for_asset", `no checksum for ${asset}`);
240
+ const bytes = await request(identity[6]);
241
+ check();
242
+ if (!bytes || bytes.byteLength === 0)
243
+ throw new AcquisitionFailure("download_empty", "asset download returned no bytes");
244
+ if (hashContent(bytes) !== expected)
245
+ throw new AcquisitionFailure("checksum_mismatch", `checksum mismatch for ${asset}`);
246
+ check();
247
+ stage = mkdtempSync(join(cacheDir, `${key}.stage-`));
248
+ try {
249
+ const name = platform === "win32" ? `${spec.binaryName}.exe` : spec.binaryName;
250
+ if (!name || name.includes("/") || name.includes("\\") || name === "." || name === "..")
251
+ throw new Error("invalid binary filename");
252
+ if (identity[8]) {
253
+ const archive = join(stage, ".download-archive");
254
+ writeFileSync(archive, bytes, { flag: "wx" });
255
+ check();
256
+ // Await actual settlement under the lock; never race an active extractor.
257
+ let extraction;
258
+ try {
259
+ extraction = await run(["tar", "-xf", archive, "-C", stage], stage, resolveSpawnDeadline(deadline, TRACKED_CHILD_DEADLINE_MS));
260
+ }
261
+ catch (error) {
262
+ check();
263
+ throw new AcquisitionFailure("extract_failed", `extract failed: ${String(error)}`);
264
+ }
265
+ check();
266
+ if (extraction.error || extraction.status !== 0)
267
+ throw new AcquisitionFailure("extract_failed", `extract failed: ${extraction.error?.message ?? extraction.status}`);
268
+ rmSync(archive);
211
269
  }
212
- catch {
213
- /* best-effort */
270
+ else
271
+ writeFileSync(join(stage, name), bytes, { flag: "wx" });
272
+ check();
273
+ const file = findExecutable(stage, name);
274
+ if (!file)
275
+ throw new AcquisitionFailure("not_found_in_archive", "binary not found in archive");
276
+ if (platform !== "win32")
277
+ chmodSync(file, 0o755);
278
+ const path = relative(stage, file).split(sep).join("/");
279
+ executableWithin(stage, path, platform);
280
+ check();
281
+ const manifest = { identity, executable_relative_path: path, executable_sha256: hashContent(readFileSync(file)) };
282
+ writeFileSync(join(stage, MANIFEST), JSON.stringify(manifest) + "\n", { flag: "wx" });
283
+ check();
284
+ if (!verified(stage, identity))
285
+ throw new Error("staged cache verification failed");
286
+ check();
287
+ if (exists(final)) {
288
+ const winner = verified(final, identity);
289
+ check();
290
+ if (!winner)
291
+ throw new Error("unexpected invalid publication winner");
292
+ return { status: "cached", command: winner };
214
293
  }
294
+ renameSync(stage, final);
295
+ stage = undefined; // Publication transfers ownership. Never clean final in catch/finally.
296
+ return { status: "downloaded", command: join(final, path) };
215
297
  }
216
- writeCacheManifest(versionDir, spec, resolved);
217
- return { status: "downloaded", command: resolved };
218
- }
219
- catch (error) {
220
- purgeVersionDir(versionDir);
221
- return unavailable("write_failed", `write error: ${error instanceof Error ? error.message : String(error)}`);
222
- }
223
- }
224
- // Verified — write the archive and extract it with the system `tar` (bsdtar
225
- // ships on win32 / darwin / linux and reads both .tar.gz and .zip).
226
- try {
227
- mkdirSync(versionDir, { recursive: true });
228
- const archivePath = join(versionDir, assetName);
229
- writeFileSync(archivePath, assetBytes);
230
- const extract = await run(["tar", "-xf", archivePath, "-C", versionDir], versionDir, resolveSpawnDeadline(options.deadline, TRACKED_CHILD_DEADLINE_MS));
231
- rmSync(archivePath, { force: true });
232
- if (extract.error || extract.status !== 0) {
233
- // Whatever tar managed to write before failing must NOT survive as a cache hit.
234
- purgeVersionDir(versionDir);
235
- return unavailable("extract_failed", `extract failed: ${extract.error?.message ?? `tar exit ${extract.status}`}`);
236
- }
298
+ finally {
299
+ if (stage) {
300
+ const owned = stage;
301
+ stage = undefined;
302
+ rmSync(owned, { recursive: true, force: true });
303
+ }
304
+ }
305
+ }, Math.max(1, deadline.at - Date.now()));
306
+ check();
307
+ return result;
237
308
  }
238
309
  catch (error) {
239
- purgeVersionDir(versionDir);
240
- return unavailable("extract_failed", `extract error: ${error instanceof Error ? error.message : String(error)}`);
310
+ if (error instanceof AcquisitionFailure)
311
+ return unavailable(error.reason, diagnostic + error.message);
312
+ if (error instanceof FileLockTimeoutError)
313
+ return unavailable("deadline_exceeded", diagnostic + "binary acquisition lock deadline exceeded");
314
+ return unavailable("write_failed", diagnostic + `acquisition failed: ${String(error)}`);
241
315
  }
242
- // Locate the executable (archives may nest it); chmod +x on POSIX.
243
- const resolved = findExecutable(versionDir, exeName(spec.binaryName, platform));
244
- if (!resolved) {
245
- purgeVersionDir(versionDir);
246
- return unavailable("not_found_in_archive", "binary not found in archive");
316
+ finally {
317
+ if (timer !== undefined)
318
+ clearTimeout(timer);
247
319
  }
248
- if (platform !== "win32") {
249
- try {
250
- chmodSync(resolved, 0o755);
251
- }
252
- catch {
253
- /* best-effort */
254
- }
255
- }
256
- writeCacheManifest(versionDir, spec, resolved);
257
- return { status: "downloaded", command: resolved };
258
- }
259
- /** Shallow-then-recursive search for `name` under `dir`. */
260
- function findExecutable(dir, name) {
261
- const direct = join(dir, name);
262
- if (existsSync(direct))
263
- return direct;
264
- let entries;
265
- try {
266
- entries = readdirSync(dir);
267
- }
268
- catch {
269
- return null;
270
- }
271
- for (const entry of entries) {
272
- const full = join(dir, entry);
273
- let isDir = false;
274
- try {
275
- isDir = statSync(full).isDirectory();
276
- }
277
- catch {
278
- continue;
279
- }
280
- if (isDir) {
281
- const nested = findExecutable(full, name);
282
- if (nested)
283
- return nested;
284
- }
285
- }
286
- return null;
287
320
  }
288
321
  //# sourceMappingURL=binaryAcquisition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BinaryFetcher } from "./binaryAcquisition.js";
2
+ /** Response-owning transport. Cancellation requests are bounded, never cleanup awaits. */
3
+ export declare const defaultBinaryFetcher: BinaryFetcher;
4
+ //# sourceMappingURL=binaryFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binaryFetcher.d.ts","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryFetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,EAAE,aA0DlC,CAAC"}