scoutline 0.19.7 → 0.20.0

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 (38) hide show
  1. package/dist/command-invocation.d.ts.map +1 -1
  2. package/dist/command-invocation.js +5 -0
  3. package/dist/command-invocation.js.map +1 -1
  4. package/dist/commands/archive.d.ts +111 -0
  5. package/dist/commands/archive.d.ts.map +1 -0
  6. package/dist/commands/archive.js +426 -0
  7. package/dist/commands/archive.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +8 -0
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +39 -4
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/fetch.d.ts +75 -0
  13. package/dist/commands/fetch.d.ts.map +1 -0
  14. package/dist/commands/fetch.js +592 -0
  15. package/dist/commands/fetch.js.map +1 -0
  16. package/dist/commands/read.d.ts.map +1 -1
  17. package/dist/commands/read.js +14 -0
  18. package/dist/commands/read.js.map +1 -1
  19. package/dist/index.d.ts +2 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +92 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/lib/artifacts.d.ts +5 -1
  24. package/dist/lib/artifacts.d.ts.map +1 -1
  25. package/dist/lib/artifacts.js +7 -2
  26. package/dist/lib/artifacts.js.map +1 -1
  27. package/dist/lib/async-file-lock.d.ts +2 -2
  28. package/dist/lib/async-file-lock.d.ts.map +1 -1
  29. package/dist/lib/async-file-lock.js +7 -4
  30. package/dist/lib/async-file-lock.js.map +1 -1
  31. package/dist/lib/pdf.d.ts +22 -0
  32. package/dist/lib/pdf.d.ts.map +1 -0
  33. package/dist/lib/pdf.js +1213 -0
  34. package/dist/lib/pdf.js.map +1 -0
  35. package/dist/lib/tty.d.ts.map +1 -1
  36. package/dist/lib/tty.js +10 -1
  37. package/dist/lib/tty.js.map +1 -1
  38. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"command-invocation.d.ts","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAgDnE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,EAC7D,UAAU,EAAE,UAAU,EACtB,GAAG,GAAE,MAAM,MAAiB,EAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,IAAI,CAAC,EAAE,QAAQ,GACd,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
1
+ {"version":3,"file":"command-invocation.d.ts","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;AAElF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAsDnE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,aAAa,CAAC,EAC7D,UAAU,EAAE,UAAU,EACtB,GAAG,GAAE,MAAM,MAAiB,EAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,IAAI,CAAC,EAAE,QAAQ,GACd,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
@@ -36,6 +36,11 @@ function isTextOutputMode(mode) {
36
36
  * credential-shaped fields), so legitimate output is unchanged.
37
37
  */
38
38
  function selectOutput(result, outputMode, now, secrets) {
39
+ if (outputMode === "json" || outputMode === "pretty") {
40
+ const data = result.kind === "text" ? result.text : result.data;
41
+ const redactedData = redactSecrets(data, secrets);
42
+ return formatSuccessOutput(redactedData, outputMode, now);
43
+ }
39
44
  if (result.kind === "text") {
40
45
  return redactSecrets(result.text, secrets);
41
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-invocation.js","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-invocation.js","sourceRoot":"","sources":["../src/command-invocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * archive command — Internet Archive Wayback Machine integration (ADR-0006).
3
+ *
4
+ * Implements temporal archival intelligence:
5
+ *
6
+ * - `archive cdx <url-or-pattern> [--from TS] [--to TS] [--status 200] [--limit N]`:
7
+ * Queries the CDX Server API to enumerate historical captures.
8
+ * - `archive get <url> [--at <timestamp|best>] [--raw]`:
9
+ * Replays a capture using Wayback's `id_` verbatim mode (toolbar stripped),
10
+ * auto-resolving the best snapshot via the Availability API when omitted.
11
+ *
12
+ * Credential-free (public, keyless API) dispatched before config load.
13
+ */
14
+ import type { CommandResult } from "../command-invocation.js";
15
+ import type { OutputMode } from "../lib/output.js";
16
+ import type { HandlerDependencies } from "../index.js";
17
+ export declare const ARCHIVE_HELP: string;
18
+ export declare const WAYBACK_CDX_ENDPOINT = "https://web.archive.org/cdx/search/cdx";
19
+ export declare const WAYBACK_AVAILABILITY_ENDPOINT = "https://archive.org/wayback/available";
20
+ export declare const DEFAULT_ARCHIVE_TIMEOUT_MS = 30000;
21
+ export interface ArchiveCapture {
22
+ readonly timestamp: string;
23
+ readonly statusCode: number;
24
+ readonly length: number;
25
+ readonly digest: string;
26
+ readonly originalUrl: string;
27
+ }
28
+ export interface ArchiveCdxReport {
29
+ readonly schemaVersion: 1;
30
+ readonly url: string;
31
+ readonly total: number;
32
+ readonly captures: readonly ArchiveCapture[];
33
+ }
34
+ export interface ArchiveGetReport {
35
+ readonly schemaVersion: 1;
36
+ readonly url: string;
37
+ readonly snapshotTimestamp: string;
38
+ readonly archiveUrl: string;
39
+ readonly statusCode: number;
40
+ readonly bytes: number;
41
+ readonly contentType?: string;
42
+ readonly content?: string;
43
+ }
44
+ export interface ArchiveCdxOptions {
45
+ readonly from?: string;
46
+ readonly to?: string;
47
+ readonly status?: string;
48
+ readonly limit?: number;
49
+ readonly timeout?: number;
50
+ }
51
+ export interface ArchiveGetOptions {
52
+ readonly at?: string;
53
+ readonly raw?: boolean;
54
+ readonly timeout?: number;
55
+ }
56
+ /**
57
+ * Fetch with exponential backoff on HTTP 429/503 (rate limiting).
58
+ */
59
+ export declare function fetchWithArchiveBackoff<T = Response>(url: string, options?: {
60
+ timeout?: number;
61
+ headers?: Record<string, string>;
62
+ sleep?: (ms: number) => Promise<void>;
63
+ }, consumer?: (res: Response) => Promise<T>): Promise<T>;
64
+ /**
65
+ * Enumerate captures via CDX server.
66
+ */
67
+ export declare function executeArchiveCdx(urlOrPattern: string, options?: ArchiveCdxOptions, dependencies?: {
68
+ sleep?: (ms: number) => Promise<void>;
69
+ cdxEndpoint?: string;
70
+ }): Promise<ArchiveCdxReport>;
71
+ /**
72
+ * Resolve snapshot timestamp via Wayback Availability API.
73
+ */
74
+ export declare function resolveAvailableSnapshot(url: string, timestampHint?: string, dependencies?: {
75
+ sleep?: (ms: number) => Promise<void>;
76
+ timeout?: number;
77
+ availabilityEndpoint?: string;
78
+ }): Promise<{
79
+ timestamp: string;
80
+ archiveUrl: string;
81
+ }>;
82
+ /**
83
+ * Fetch raw capture content via Wayback's `id_` verbatim mode.
84
+ */
85
+ export declare function executeArchiveGet(url: string, options?: ArchiveGetOptions, dependencies?: {
86
+ sleep?: (ms: number) => Promise<void>;
87
+ availabilityEndpoint?: string;
88
+ replayBaseUrl?: string;
89
+ }): Promise<ArchiveGetReport>;
90
+ /**
91
+ * Invocation-seam wrapper for archive cdx.
92
+ */
93
+ export declare function archiveCdxCommand(urlOrPattern: string, options?: ArchiveCdxOptions): Promise<CommandResult<ArchiveCdxReport>>;
94
+ /**
95
+ * Invocation-seam wrapper for archive get.
96
+ */
97
+ export declare function archiveGetCommand(url: string, options?: ArchiveGetOptions): Promise<CommandResult<ArchiveGetReport>>;
98
+ /**
99
+ * Parse CLI args for archive command.
100
+ */
101
+ export declare function parseArchiveArgs(args: readonly string[]): {
102
+ readonly subcommand?: string;
103
+ readonly positional: readonly string[];
104
+ readonly flags: Record<string, string | boolean>;
105
+ readonly showHelp: boolean;
106
+ };
107
+ /**
108
+ * Dispatcher handler for `archive` in `src/index.ts`.
109
+ */
110
+ export declare function handleArchive(args: string[], outputMode: OutputMode, deps: HandlerDependencies, forceRaw?: boolean): Promise<number>;
111
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,426 @@
1
+ /**
2
+ * archive command — Internet Archive Wayback Machine integration (ADR-0006).
3
+ *
4
+ * Implements temporal archival intelligence:
5
+ *
6
+ * - `archive cdx <url-or-pattern> [--from TS] [--to TS] [--status 200] [--limit N]`:
7
+ * Queries the CDX Server API to enumerate historical captures.
8
+ * - `archive get <url> [--at <timestamp|best>] [--raw]`:
9
+ * Replays a capture using Wayback's `id_` verbatim mode (toolbar stripped),
10
+ * auto-resolving the best snapshot via the Availability API when omitted.
11
+ *
12
+ * Credential-free (public, keyless API) dispatched before config load.
13
+ */
14
+ import { invokeCommand } from "../command-invocation.js";
15
+ import { ValidationError, TimeoutError, NetworkError } from "../lib/errors.js";
16
+ import { readBoundedResponseBody } from "./fetch.js";
17
+ export const ARCHIVE_HELP = `
18
+ scoutline archive <subcommand> [args] [options] - Internet Archive Wayback Machine
19
+
20
+ Subcommands:
21
+ cdx <url-or-pattern> Query the CDX Server index to enumerate captures
22
+ get <url> Fetch a capture's raw original content (toolbar stripped)
23
+
24
+ Options for 'archive cdx':
25
+ --from <timestamp> Earliest timestamp (e.g. 2020, 20200101)
26
+ --to <timestamp> Latest timestamp (e.g. 2025, 20251231)
27
+ --status <statuscode> Filter by HTTP status code (e.g. 200)
28
+ --limit <number> Max records to return (default: 50, max: 10000)
29
+
30
+ Options for 'archive get':
31
+ --at <timestamp|best> Target timestamp or 'best' for nearest (default: best)
32
+ --raw Emit raw body content directly
33
+
34
+ Global Options:
35
+ --output-format, -O Output format: data, json, pretty, compact, markdown, refs, tty
36
+ `.trim();
37
+ export const WAYBACK_CDX_ENDPOINT = "https://web.archive.org/cdx/search/cdx";
38
+ export const WAYBACK_AVAILABILITY_ENDPOINT = "https://archive.org/wayback/available";
39
+ export const DEFAULT_ARCHIVE_TIMEOUT_MS = 30000;
40
+ /**
41
+ * Fetch with exponential backoff on HTTP 429/503 (rate limiting).
42
+ */
43
+ export async function fetchWithArchiveBackoff(url, options = {}, consumer) {
44
+ const timeoutMs = options.timeout ?? DEFAULT_ARCHIVE_TIMEOUT_MS;
45
+ const sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
46
+ const maxRetries = 3;
47
+ let delay = 1000;
48
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
49
+ const controller = new AbortController();
50
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
51
+ try {
52
+ const res = await fetch(url, {
53
+ headers: {
54
+ "User-Agent": "scoutline/1.0 (archive client; investigative research)",
55
+ Accept: "*/*",
56
+ ...options.headers,
57
+ },
58
+ signal: controller.signal,
59
+ });
60
+ if (res.status === 429 || res.status === 503) {
61
+ if (attempt < maxRetries) {
62
+ clearTimeout(timer);
63
+ const jitter = 0.8 + Math.random() * 0.4;
64
+ await sleep(Math.round(delay * jitter));
65
+ delay *= 2;
66
+ continue;
67
+ }
68
+ throw new NetworkError(`Archive request rate-limited (HTTP ${res.status}). Please wait before retrying.`);
69
+ }
70
+ if (consumer) {
71
+ return await consumer(res);
72
+ }
73
+ return res;
74
+ }
75
+ catch (err) {
76
+ if (err instanceof NetworkError || err instanceof TimeoutError || err instanceof ValidationError) {
77
+ throw err;
78
+ }
79
+ if (controller.signal.aborted) {
80
+ throw new TimeoutError(timeoutMs, `Archive request timed out after ${timeoutMs}ms`);
81
+ }
82
+ if (attempt === maxRetries) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ throw new NetworkError(`Archive request failed: ${msg}`);
85
+ }
86
+ await sleep(delay);
87
+ delay *= 2;
88
+ }
89
+ finally {
90
+ clearTimeout(timer);
91
+ }
92
+ }
93
+ throw new NetworkError("Archive request failed after retries.");
94
+ }
95
+ /**
96
+ * Enumerate captures via CDX server.
97
+ */
98
+ export async function executeArchiveCdx(urlOrPattern, options = {}, dependencies = {}) {
99
+ if (!urlOrPattern || urlOrPattern.trim().length === 0) {
100
+ throw new ValidationError("URL or pattern is required for archive cdx.");
101
+ }
102
+ const queryParams = new URLSearchParams({
103
+ url: urlOrPattern,
104
+ output: "json",
105
+ fl: "timestamp,statuscode,length,digest,original",
106
+ });
107
+ if (options.from)
108
+ queryParams.set("from", options.from);
109
+ if (options.to)
110
+ queryParams.set("to", options.to);
111
+ if (options.status)
112
+ queryParams.set("filter", `statuscode:${options.status}`);
113
+ if (options.limit !== undefined) {
114
+ if (options.limit <= 0 || options.limit > 10000) {
115
+ throw new ValidationError(`--limit must be between 1 and 10000, got ${options.limit}.`);
116
+ }
117
+ queryParams.set("limit", String(options.limit));
118
+ }
119
+ else {
120
+ queryParams.set("limit", "50");
121
+ }
122
+ const endpoint = dependencies.cdxEndpoint ?? WAYBACK_CDX_ENDPOINT;
123
+ const reqUrl = `${endpoint}?${queryParams.toString()}`;
124
+ const raw = await fetchWithArchiveBackoff(reqUrl, {
125
+ timeout: options.timeout,
126
+ sleep: dependencies.sleep,
127
+ }, async (res) => {
128
+ if (!res.ok) {
129
+ throw new NetworkError(`CDX query failed with HTTP ${res.status}: ${res.statusText}`);
130
+ }
131
+ return (await res.json());
132
+ });
133
+ if (!Array.isArray(raw)) {
134
+ return {
135
+ schemaVersion: 1,
136
+ url: urlOrPattern,
137
+ total: 0,
138
+ captures: [],
139
+ };
140
+ }
141
+ // Row 0 is header columns ["timestamp", "statuscode", "length", "digest", "original"]
142
+ const dataRows = raw.slice(1);
143
+ const captures = [];
144
+ for (const row of dataRows) {
145
+ if (Array.isArray(row) && row.length >= 5) {
146
+ captures.push({
147
+ timestamp: String(row[0]),
148
+ statusCode: Number(row[1]) || 0,
149
+ length: Number(row[2]) || 0,
150
+ digest: String(row[3]),
151
+ originalUrl: String(row[4]),
152
+ });
153
+ }
154
+ }
155
+ return {
156
+ schemaVersion: 1,
157
+ url: urlOrPattern,
158
+ total: captures.length,
159
+ captures,
160
+ };
161
+ }
162
+ /**
163
+ * Resolve snapshot timestamp via Wayback Availability API.
164
+ */
165
+ export async function resolveAvailableSnapshot(url, timestampHint, dependencies = {}) {
166
+ const queryParams = new URLSearchParams({ url });
167
+ if (timestampHint && timestampHint !== "best") {
168
+ queryParams.set("timestamp", timestampHint);
169
+ }
170
+ const endpoint = dependencies.availabilityEndpoint ?? WAYBACK_AVAILABILITY_ENDPOINT;
171
+ const reqUrl = `${endpoint}?${queryParams.toString()}`;
172
+ const data = await fetchWithArchiveBackoff(reqUrl, {
173
+ timeout: dependencies.timeout,
174
+ sleep: dependencies.sleep,
175
+ }, async (res) => {
176
+ if (!res.ok) {
177
+ throw new NetworkError(`Wayback availability check failed with HTTP ${res.status}: ${res.statusText}`);
178
+ }
179
+ return (await res.json());
180
+ });
181
+ const closest = data.archived_snapshots?.closest;
182
+ if (!closest || !closest.available || !closest.timestamp) {
183
+ throw new ValidationError(`No archived snapshot found for "${url}".`, "Use 'scoutline archive cdx <url>' to check if any captures exist.");
184
+ }
185
+ return {
186
+ timestamp: closest.timestamp,
187
+ archiveUrl: closest.url ?? `https://web.archive.org/web/${closest.timestamp}/${url}`,
188
+ };
189
+ }
190
+ /**
191
+ * Fetch raw capture content via Wayback's `id_` verbatim mode.
192
+ */
193
+ export async function executeArchiveGet(url, options = {}, dependencies = {}) {
194
+ if (!url || url.trim().length === 0) {
195
+ throw new ValidationError("URL is required for archive get.");
196
+ }
197
+ if (options.at !== undefined && options.at !== "best" && !/^\d{4,14}$/.test(options.at)) {
198
+ throw new ValidationError(`Invalid --at timestamp: "${options.at}".`, 'Allowed values: "best" or a 4 to 14 digit timestamp (YYYYMMDDhhmmss).');
199
+ }
200
+ let snapshotTimestamp;
201
+ let archiveUrl;
202
+ if (options.at && options.at !== "best") {
203
+ snapshotTimestamp = options.at;
204
+ archiveUrl = `https://web.archive.org/web/${snapshotTimestamp}/${url}`;
205
+ }
206
+ else {
207
+ const resolved = await resolveAvailableSnapshot(url, options.at, {
208
+ ...dependencies,
209
+ // The availability check honors the caller timeout like the replay
210
+ // request does (default only when the caller did not set one).
211
+ ...(options.timeout !== undefined ? { timeout: options.timeout } : {}),
212
+ });
213
+ snapshotTimestamp = resolved.timestamp;
214
+ archiveUrl = resolved.archiveUrl;
215
+ }
216
+ // Notice the `id_` flag right after the timestamp: tells Wayback to return raw original bytes
217
+ const replayBase = dependencies.replayBaseUrl ?? "https://web.archive.org/web";
218
+ const verbatimFetchUrl = `${replayBase}/${snapshotTimestamp}id_/${url}`;
219
+ const { statusCode, contentType, buffer } = await fetchWithArchiveBackoff(verbatimFetchUrl, {
220
+ timeout: options.timeout,
221
+ sleep: dependencies.sleep,
222
+ }, async (res) => {
223
+ const contentLength = res.headers.get("content-length");
224
+ const MAX_ARCHIVE_IN_MEMORY = 50 * 1024 * 1024;
225
+ if (contentLength && Number(contentLength) > MAX_ARCHIVE_IN_MEMORY) {
226
+ throw new ValidationError(`Archive capture size (${contentLength} bytes) exceeds in-memory limit (50MB).`);
227
+ }
228
+ const buffer = await readBoundedResponseBody(res.body, MAX_ARCHIVE_IN_MEMORY, "Archive capture size");
229
+ return {
230
+ statusCode: res.status,
231
+ contentType: res.headers.get("content-type") || undefined,
232
+ buffer,
233
+ };
234
+ });
235
+ const bytes = buffer.length;
236
+ let content;
237
+ const isExplicitBinary = Boolean(contentType &&
238
+ /application\/(pdf|zip|gzip|octet-stream)|image\/|audio\/|video\//i.test(contentType));
239
+ const isTextualMime = Boolean(contentType &&
240
+ (contentType.startsWith("text/") ||
241
+ /application\/(json|xml|javascript|atom\+xml|rss\+xml)/i.test(contentType)));
242
+ if (!isExplicitBinary) {
243
+ if (isTextualMime) {
244
+ try {
245
+ content = new TextDecoder("utf-8", { fatal: true }).decode(buffer);
246
+ }
247
+ catch {
248
+ content = buffer.toString("utf8");
249
+ }
250
+ }
251
+ else {
252
+ try {
253
+ content = new TextDecoder("utf-8", { fatal: true }).decode(buffer);
254
+ }
255
+ catch {
256
+ // Leave undefined if binary
257
+ }
258
+ }
259
+ }
260
+ return {
261
+ schemaVersion: 1,
262
+ url,
263
+ snapshotTimestamp,
264
+ archiveUrl,
265
+ statusCode,
266
+ bytes,
267
+ ...(contentType ? { contentType } : {}),
268
+ ...(content !== undefined ? { content } : {}),
269
+ };
270
+ }
271
+ /**
272
+ * Invocation-seam wrapper for archive cdx.
273
+ */
274
+ export async function archiveCdxCommand(urlOrPattern, options = {}) {
275
+ const data = await executeArchiveCdx(urlOrPattern, options);
276
+ const lines = [
277
+ `Archive CDX Index for ${data.url} (${data.total} captures found):`,
278
+ "Timestamp Status Bytes Digest Original URL",
279
+ "--------------------------------------------------------------------------------",
280
+ ];
281
+ for (const c of data.captures.slice(0, 20)) {
282
+ const ts = c.timestamp.padEnd(16);
283
+ const st = String(c.statusCode).padEnd(7);
284
+ const sz = String(c.length).padEnd(7);
285
+ const dg = c.digest.slice(0, 32).padEnd(33);
286
+ lines.push(`${ts} ${st} ${sz} ${dg} ${c.originalUrl}`);
287
+ }
288
+ if (data.total > 20) {
289
+ lines.push(`... and ${data.total - 20} more captures.`);
290
+ }
291
+ const text = lines.join("\n");
292
+ const presentations = {
293
+ tty: text,
294
+ compact: text,
295
+ markdown: text,
296
+ refs: text,
297
+ };
298
+ return {
299
+ kind: "data",
300
+ data,
301
+ presentations,
302
+ };
303
+ }
304
+ /**
305
+ * Invocation-seam wrapper for archive get.
306
+ */
307
+ export async function archiveGetCommand(url, options = {}) {
308
+ const data = await executeArchiveGet(url, options);
309
+ let presentationText = "";
310
+ if (data.content !== undefined) {
311
+ // Same contract as fetch: the body IS the presentation; `--raw`
312
+ // routes output to a text mode (no JSON envelope) in the
313
+ // dispatcher rather than changing this string.
314
+ presentationText = data.content;
315
+ }
316
+ else {
317
+ presentationText = `[Archived snapshot: ${data.snapshotTimestamp}, ${data.bytes} bytes, HTTP ${data.statusCode}]`;
318
+ }
319
+ const presentations = {
320
+ tty: presentationText,
321
+ compact: presentationText,
322
+ markdown: presentationText,
323
+ refs: presentationText,
324
+ };
325
+ return {
326
+ kind: "data",
327
+ data,
328
+ presentations,
329
+ exitCode: data.statusCode >= 400 ? 1 : 0,
330
+ };
331
+ }
332
+ /**
333
+ * Parse CLI args for archive command.
334
+ */
335
+ export function parseArchiveArgs(args) {
336
+ let showHelp = false;
337
+ const flags = {};
338
+ const positional = [];
339
+ let i = 0;
340
+ while (i < args.length) {
341
+ const arg = args[i];
342
+ if (arg === undefined)
343
+ break;
344
+ if (arg === "--help" || arg === "-h") {
345
+ showHelp = true;
346
+ i++;
347
+ }
348
+ else if (arg.startsWith("--")) {
349
+ const key = arg.slice(2);
350
+ const next = args[i + 1];
351
+ if (next && !next.startsWith("-")) {
352
+ flags[key] = next;
353
+ i += 2;
354
+ }
355
+ else {
356
+ flags[key] = true;
357
+ i++;
358
+ }
359
+ }
360
+ else if (!arg.startsWith("-")) {
361
+ positional.push(arg);
362
+ i++;
363
+ }
364
+ else {
365
+ i++;
366
+ }
367
+ }
368
+ const subcommand = positional[0];
369
+ const remainingPositional = positional.slice(1);
370
+ return {
371
+ subcommand,
372
+ positional: remainingPositional,
373
+ flags,
374
+ showHelp,
375
+ };
376
+ }
377
+ /**
378
+ * Dispatcher handler for `archive` in `src/index.ts`.
379
+ */
380
+ export async function handleArchive(args, outputMode, deps, forceRaw = false) {
381
+ const { subcommand, positional, flags, showHelp } = parseArchiveArgs(args);
382
+ if (showHelp || subcommand === undefined) {
383
+ deps.invocation.writeStdout(ARCHIVE_HELP);
384
+ return 0;
385
+ }
386
+ if (subcommand === "cdx") {
387
+ const urlOrPattern = positional[0];
388
+ if (!urlOrPattern) {
389
+ throw new ValidationError("URL or pattern is required for archive cdx.", "Example: scoutline archive cdx https://example.com/*");
390
+ }
391
+ let limit;
392
+ if (typeof flags.limit === "string") {
393
+ if (!/^\d+$/.test(flags.limit)) {
394
+ throw new ValidationError("Invalid --limit: must be a positive integer.");
395
+ }
396
+ const parsedLimit = Number(flags.limit);
397
+ if (parsedLimit <= 0 || parsedLimit > 10000) {
398
+ throw new ValidationError(`--limit must be between 1 and 10000, got ${parsedLimit}.`);
399
+ }
400
+ limit = parsedLimit;
401
+ }
402
+ const options = {
403
+ ...(typeof flags.from === "string" ? { from: flags.from } : {}),
404
+ ...(typeof flags.to === "string" ? { to: flags.to } : {}),
405
+ ...(typeof flags.status === "string" ? { status: flags.status } : {}),
406
+ ...(limit !== undefined ? { limit } : {}),
407
+ };
408
+ return invokeCommand(deps.invocation, () => archiveCdxCommand(urlOrPattern, options), outputMode, deps.now, deps.secrets);
409
+ }
410
+ if (subcommand === "get") {
411
+ const url = positional[0];
412
+ if (!url) {
413
+ throw new ValidationError("URL is required for archive get.", "Example: scoutline archive get https://example.com --at best");
414
+ }
415
+ if (typeof flags.at === "string" && flags.at !== "best" && !/^\d{4,14}$/.test(flags.at)) {
416
+ throw new ValidationError(`Invalid --at timestamp: "${flags.at}".`, 'Allowed values: "best" or a 4 to 14 digit timestamp (YYYYMMDDhhmmss).');
417
+ }
418
+ const options = {
419
+ ...(typeof flags.at === "string" ? { at: flags.at } : {}),
420
+ ...(flags.raw === true || forceRaw ? { raw: true } : {}),
421
+ };
422
+ return invokeCommand(deps.invocation, () => archiveGetCommand(url, options), outputMode, deps.now, deps.secrets);
423
+ }
424
+ throw new ValidationError(`Unknown archive subcommand "${subcommand}".`, "Valid subcommands: cdx, get.");
425
+ }
426
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ import { type ProviderAvailability } from "../lib/availability.js";
25
25
  import { type QuotaState } from "../lib/quota-store.js";
26
26
  export interface DoctorDiagnosticsDependencies {
27
27
  readonly noTools: boolean;
28
+ readonly healthProbe?: boolean;
28
29
  readonly effectiveProvider: ProviderId;
29
30
  readonly descriptors: readonly ProviderDescriptor[];
30
31
  readonly env: NodeJS.ProcessEnv;
@@ -115,6 +116,12 @@ export interface DoctorDiagnosticsDependencies {
115
116
  */
116
117
  readonly availableOnly?: boolean;
117
118
  }
119
+ export interface ProviderHealthCheck {
120
+ readonly healthy: boolean;
121
+ readonly latencyMs: number;
122
+ readonly status: "ok" | "error" | "auth_error";
123
+ readonly error?: string;
124
+ }
118
125
  /**
119
126
  * A {@link ProviderDiagnostic} row carrying the additive `availability`
120
127
  * classification (#94). Additive under DiagnosticsReport schema
@@ -125,6 +132,7 @@ export interface DoctorDiagnosticsDependencies {
125
132
  */
126
133
  export interface ProviderDiagnosticWithAvailability extends ProviderDiagnostic {
127
134
  readonly availability: ProviderAvailability;
135
+ readonly health?: ProviderHealthCheck;
128
136
  }
129
137
  /**
130
138
  * The {@link DiagnosticsReport} shape built by
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}