doc-detective 4.0.2-dev.11 → 4.0.2-dev.13

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 (29) hide show
  1. package/dist/common/src/schemas/schemas.json +868 -112
  2. package/dist/common/src/types/generated/checkLink_v3.d.ts +6 -0
  3. package/dist/common/src/types/generated/checkLink_v3.d.ts.map +1 -1
  4. package/dist/common/src/types/generated/config_v3.d.ts +6 -0
  5. package/dist/common/src/types/generated/config_v3.d.ts.map +1 -1
  6. package/dist/common/src/types/generated/goTo_v3.d.ts +6 -0
  7. package/dist/common/src/types/generated/goTo_v3.d.ts.map +1 -1
  8. package/dist/common/src/types/generated/resolvedTests_v3.d.ts +6 -0
  9. package/dist/common/src/types/generated/resolvedTests_v3.d.ts.map +1 -1
  10. package/dist/common/src/types/generated/screenshot_v3.d.ts +2 -2
  11. package/dist/common/src/types/generated/step_v3.d.ts +14 -2
  12. package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
  13. package/dist/common/src/types/generated/test_v3.d.ts +28 -4
  14. package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
  15. package/dist/core/tests/checkLink.d.ts.map +1 -1
  16. package/dist/core/tests/checkLink.js +17 -2
  17. package/dist/core/tests/checkLink.js.map +1 -1
  18. package/dist/core/tests/goTo.d.ts.map +1 -1
  19. package/dist/core/tests/goTo.js +17 -2
  20. package/dist/core/tests/goTo.js.map +1 -1
  21. package/dist/core/tests/saveScreenshot.d.ts.map +1 -1
  22. package/dist/core/tests/saveScreenshot.js +130 -33
  23. package/dist/core/tests/saveScreenshot.js.map +1 -1
  24. package/dist/core/utils.d.ts +9 -2
  25. package/dist/core/utils.d.ts.map +1 -1
  26. package/dist/core/utils.js +234 -14
  27. package/dist/core/utils.js.map +1 -1
  28. package/dist/index.cjs +1140 -148
  29. package/package.json +1 -1
@@ -2,9 +2,11 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import crypto from "node:crypto";
5
+ import dns from "node:dns/promises";
6
+ import net from "node:net";
5
7
  import axios from "axios";
6
8
  import { spawn } from "node:child_process";
7
- export { outputResults, loadEnvs, log, timestamp, replaceEnvs, spawnCommand, inContainer, cleanTemp, calculateFractionalDifference, fetchFile, isRelativeUrl, };
9
+ export { outputResults, loadEnvs, log, timestamp, getOrInitRunTimestamp, replaceEnvs, spawnCommand, inContainer, cleanTemp, calculateFractionalDifference, fetchFile, isRelativeUrl, appendQueryParams, redactUrlForOutput, assertUrlHostIsPublic, sanitizeFilesystemName, };
8
10
  function isRelativeUrl(url) {
9
11
  try {
10
12
  new URL(url);
@@ -16,6 +18,47 @@ function isRelativeUrl(url) {
16
18
  return true;
17
19
  }
18
20
  }
21
+ function appendQueryParams(url, params) {
22
+ if (!params || typeof params !== "object" || Array.isArray(params))
23
+ return url;
24
+ const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null);
25
+ if (entries.length === 0)
26
+ return url;
27
+ // Split off the fragment so new params land before it, not inside.
28
+ const hashIdx = url.indexOf("#");
29
+ const fragment = hashIdx >= 0 ? url.slice(hashIdx) : "";
30
+ const base = hashIdx >= 0 ? url.slice(0, hashIdx) : url;
31
+ const queryIdx = base.indexOf("?");
32
+ const pathAndAuthority = queryIdx >= 0 ? base.slice(0, queryIdx) : base;
33
+ const existingQuery = queryIdx >= 0 ? base.slice(queryIdx + 1) : "";
34
+ // Walk the existing query and drop only the segments whose key collides
35
+ // with a new entry; everything else is preserved byte-for-byte. Then
36
+ // append the new pairs (encoded fresh). This avoids re-encoding any
37
+ // non-colliding pair — `URLSearchParams.toString()` would otherwise
38
+ // normalize `+` for spaces and percent-encode `:` / `,` etc., which
39
+ // breaks signed URLs and strict backends. New params always go through
40
+ // encodeURIComponent so callers can pass arbitrary strings.
41
+ const newKeys = new Set(entries.map(([k]) => k));
42
+ const preservedSegments = existingQuery
43
+ ? existingQuery.split("&").filter((segment) => {
44
+ if (!segment)
45
+ return false;
46
+ const eqIdx = segment.indexOf("=");
47
+ const rawKey = eqIdx >= 0 ? segment.slice(0, eqIdx) : segment;
48
+ let decodedKey;
49
+ try {
50
+ decodedKey = decodeURIComponent(rawKey);
51
+ }
52
+ catch {
53
+ decodedKey = rawKey;
54
+ }
55
+ return !newKeys.has(decodedKey);
56
+ })
57
+ : [];
58
+ const newPairs = entries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`);
59
+ const query = [...preservedSegments, ...newPairs].join("&");
60
+ return pathAndAuthority + (query ? "?" + query : "") + fragment;
61
+ }
19
62
  // Delete all contents of doc-detective temp directory
20
63
  function cleanTemp() {
21
64
  const tempDir = path.join(os.tmpdir(), "doc-detective");
@@ -32,29 +75,196 @@ function cleanTemp() {
32
75
  });
33
76
  }
34
77
  }
35
- // Fetch a file from a URL and save to a temp directory
36
- // If the file is not JSON, return the contents as a string
37
- // If the file is not found, return an error
38
- async function fetchFile(fileURL) {
78
+ // Fetch a file from a URL and save to a temp directory.
79
+ // With `{ binary: true }`, fetches as arraybuffer and preserves raw bytes —
80
+ // required for images and other non-text payloads. Binary fetches also apply
81
+ // hard limits (timeout, max body size, max redirects) so a misbehaving server
82
+ // can't stall or OOM the run.
83
+ // Otherwise, non-JSON responses are stringified (text pass-through).
84
+ // Returns `{ result: "error", message }` on failure.
85
+ const FETCH_BINARY_DEFAULTS = {
86
+ responseType: "arraybuffer",
87
+ timeout: 30_000,
88
+ maxContentLength: 50 * 1024 * 1024,
89
+ maxBodyLength: 50 * 1024 * 1024,
90
+ maxRedirects: 5,
91
+ };
92
+ // Replace characters that are invalid in filenames on Windows (and often
93
+ // problematic on other platforms) with `_`. Keeps dots, hyphens, and
94
+ // alphanumerics untouched so names stay recognizable. Also rejects leading
95
+ // dots that could turn the file into a traversal segment.
96
+ function sanitizeFilesystemName(name, fallback) {
97
+ if (!name || name === "." || name === "..")
98
+ return fallback;
99
+ // Control chars 0x00-0x1f + Windows reserved: < > : " / \ | ? *
100
+ const cleaned = name.replace(/[\x00-\x1f<>:"/\\|?*]/g, "_");
101
+ // After replacement, guard against all-dots or empty results.
102
+ if (!cleaned || /^\.+$/.test(cleaned))
103
+ return fallback;
104
+ return cleaned;
105
+ }
106
+ // Derive a safe on-disk filename from a URL. URL-derived strings can contain
107
+ // path separators (`/`, `\`), traversal segments (`..`), or characters that
108
+ // are invalid in filenames on Windows (`:<>"|?*`). `path.basename` strips
109
+ // directory components; `sanitizeFilesystemName` then neutralizes remaining
110
+ // unsafe characters so `fetchFile` works on every platform.
111
+ function safeFilenameFromUrl(fileURL, fallback) {
112
+ let raw;
113
+ try {
114
+ raw = new URL(fileURL).pathname;
115
+ }
116
+ catch {
117
+ raw = fileURL;
118
+ }
119
+ raw = raw.split("?")[0].split("#")[0];
120
+ const base = path.basename(raw.replace(/\\/g, "/"));
121
+ return sanitizeFilesystemName(base, fallback);
122
+ }
123
+ // Strip query string and fragment from a URL for display/logging. S3
124
+ // pre-signed URLs carry tokens/signatures in the query; leaking them into
125
+ // step descriptions, debug logs, or result outputs exposes credentials.
126
+ // The full URL with query is still used for the fetch itself — only the
127
+ // *reported* form is redacted.
128
+ function redactUrlForOutput(value) {
129
+ try {
130
+ const url = new URL(value);
131
+ url.search = "";
132
+ url.hash = "";
133
+ return url.toString();
134
+ }
135
+ catch {
136
+ return value.split("?")[0].split("#")[0];
137
+ }
138
+ }
139
+ // Private/loopback/link-local IP ranges that binary URL fetches refuse to
140
+ // reach by default. Covers IPv4 RFC1918, loopback, link-local (169.254/16),
141
+ // carrier-grade NAT (100.64/10), and the cloud-metadata special cases
142
+ // (169.254.169.254 is inside link-local and thus covered).
143
+ function isPrivateOrLoopbackAddress(ip) {
144
+ if (!ip)
145
+ return false;
146
+ if (net.isIPv4(ip)) {
147
+ const [a, b] = ip.split(".").map(Number);
148
+ if (a === 10)
149
+ return true;
150
+ if (a === 127)
151
+ return true;
152
+ if (a === 0)
153
+ return true;
154
+ if (a === 169 && b === 254)
155
+ return true;
156
+ if (a === 172 && b >= 16 && b <= 31)
157
+ return true;
158
+ if (a === 192 && b === 168)
159
+ return true;
160
+ if (a === 100 && b >= 64 && b <= 127)
161
+ return true;
162
+ return false;
163
+ }
164
+ if (net.isIPv6(ip)) {
165
+ const normalized = ip.toLowerCase();
166
+ if (normalized === "::1")
167
+ return true;
168
+ if (normalized === "::")
169
+ return true;
170
+ if (normalized.startsWith("fc") || normalized.startsWith("fd"))
171
+ return true; // unique local
172
+ if (normalized.startsWith("fe80:"))
173
+ return true; // link-local
174
+ if (normalized.startsWith("::ffff:")) {
175
+ // IPv4-mapped: recurse on the embedded v4
176
+ return isPrivateOrLoopbackAddress(normalized.replace("::ffff:", ""));
177
+ }
178
+ return false;
179
+ }
180
+ return false;
181
+ }
182
+ // Reject URLs whose host resolves to a loopback/private IP, unless the
183
+ // caller explicitly opts in (DOC_DETECTIVE_ALLOW_LOCAL_URLS=true). Tests
184
+ // and trusted internal integrations set the env var; normal doc-spec input
185
+ // does not, so an untrusted spec can't pivot through doc-detective to hit
186
+ // cloud metadata or intranet services.
187
+ //
188
+ // Note: this is a best-effort check. DNS rebinding and TOCTOU races are
189
+ // possible between resolution and connect; for true SSRF-grade isolation,
190
+ // wire in an agent that validates the actual remote address at connect
191
+ // time. This guard covers the common misuse cases.
192
+ async function assertUrlHostIsPublic(fileURL) {
193
+ if (process.env.DOC_DETECTIVE_ALLOW_LOCAL_URLS === "true")
194
+ return;
195
+ let parsed;
196
+ try {
197
+ parsed = new URL(fileURL);
198
+ }
199
+ catch {
200
+ throw new Error(`Invalid URL: ${redactUrlForOutput(fileURL)}`);
201
+ }
202
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
203
+ throw new Error(`Unsupported URL scheme (${parsed.protocol}) for ${redactUrlForOutput(fileURL)}`);
204
+ }
205
+ const host = parsed.hostname.replace(/^\[|\]$/g, "");
206
+ // Direct IP literals: check immediately.
207
+ if (net.isIP(host)) {
208
+ if (isPrivateOrLoopbackAddress(host)) {
209
+ throw new Error(`Refusing to fetch private/loopback address (${host}). Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
210
+ }
211
+ return;
212
+ }
213
+ // Hostnames: resolve and check every answer (A + AAAA).
214
+ const lower = host.toLowerCase();
215
+ if (lower === "localhost" || lower.endsWith(".localhost")) {
216
+ throw new Error(`Refusing to fetch localhost (${host}). Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
217
+ }
218
+ let addresses;
219
+ try {
220
+ addresses = await dns.lookup(host, { all: true });
221
+ }
222
+ catch (error) {
223
+ throw new Error(`Couldn't resolve host ${host} for SSRF check: ${error.message}`);
224
+ }
225
+ for (const { address } of addresses) {
226
+ if (isPrivateOrLoopbackAddress(address)) {
227
+ throw new Error(`Host ${host} resolves to a private/loopback address (${address}); refusing to fetch. Set DOC_DETECTIVE_ALLOW_LOCAL_URLS=true to allow.`);
228
+ }
229
+ }
230
+ }
231
+ async function fetchFile(fileURL, opts = {}) {
39
232
  try {
40
- const response = await axios.get(fileURL);
41
- if (typeof response.data === "object") {
42
- response.data = JSON.stringify(response.data, null, 2);
233
+ if (opts.binary) {
234
+ // Only gate binary fetches for now — the text path is an internal
235
+ // loader used by the test-detection pipeline and pre-dates this
236
+ // change; expanding SSRF coverage there belongs in its own PR.
237
+ await assertUrlHostIsPublic(fileURL);
238
+ }
239
+ const response = await axios.get(fileURL, opts.binary ? FETCH_BINARY_DEFAULTS : undefined);
240
+ let data;
241
+ if (opts.binary) {
242
+ data = Buffer.from(response.data);
243
+ }
244
+ else if (typeof response.data === "object") {
245
+ data = JSON.stringify(response.data, null, 2);
43
246
  }
44
247
  else {
45
- response.data = response.data.toString();
248
+ data = response.data.toString();
46
249
  }
47
- const fileName = fileURL.split("/").pop() || "fetched_file";
48
- const hash = crypto.createHash("md5").update(response.data).digest("hex");
250
+ const fileName = safeFilenameFromUrl(fileURL, "fetched_file");
251
+ const hash = crypto.createHash("md5").update(data).digest("hex");
49
252
  const ddTempDir = path.join(os.tmpdir(), "doc-detective");
50
253
  const filePath = path.join(ddTempDir, `${hash}_${fileName}`);
51
- // If doc-detective temp directory doesn't exist, create it
254
+ // Defense in depth: ensure the resolved path is still inside ddTempDir.
255
+ const resolvedDir = path.resolve(ddTempDir);
256
+ const resolvedFile = path.resolve(filePath);
257
+ if (!resolvedFile.startsWith(resolvedDir + path.sep)) {
258
+ return {
259
+ result: "error",
260
+ message: new Error(`Refusing to write outside temp dir: ${resolvedFile}`),
261
+ };
262
+ }
52
263
  if (!fs.existsSync(ddTempDir)) {
53
264
  fs.mkdirSync(ddTempDir, { recursive: true });
54
265
  }
55
- // If file doesn't exist, write it
56
266
  if (!fs.existsSync(filePath)) {
57
- fs.writeFileSync(filePath, response.data);
267
+ fs.writeFileSync(filePath, data);
58
268
  }
59
269
  return { result: "success", path: filePath };
60
270
  }
@@ -179,6 +389,16 @@ function timestamp() {
179
389
  let timestamp = new Date();
180
390
  return `${timestamp.getFullYear()}${("0" + (timestamp.getMonth() + 1)).slice(-2)}${("0" + timestamp.getDate()).slice(-2)}-${("0" + timestamp.getHours()).slice(-2)}${("0" + timestamp.getMinutes()).slice(-2)}${("0" + timestamp.getSeconds()).slice(-2)}`;
181
391
  }
392
+ // Memoize one timestamp per run on the config object so every URL-referenced
393
+ // screenshot in a single run lands in the same folder.
394
+ function getOrInitRunTimestamp(config) {
395
+ if (!config)
396
+ return timestamp();
397
+ if (!config.__runTimestamp) {
398
+ config.__runTimestamp = timestamp();
399
+ }
400
+ return config.__runTimestamp;
401
+ }
182
402
  // Perform a native command in the current working directory.
183
403
  /**
184
404
  * Executes a command in a child process using the `spawn` function from the `child_process` module.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}