@slicedearth/whoisleuth-cli 2.5.1 → 2.7.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 (170) hide show
  1. package/DISCLOSURE +9 -6
  2. package/NOTICE +3 -2
  3. package/README.md +60 -67
  4. package/cli/artifact-validation/case-response.mjs +6 -814
  5. package/cli/artifact-validation/lookup-evidence.mjs +30 -3
  6. package/cli/artifact-validation/signed-review.mjs +2 -51
  7. package/cli/artifact-verify.mjs +41 -3
  8. package/cli/bulk-command-runner.mjs +4 -6
  9. package/cli/case-command.mjs +92 -16
  10. package/cli/case-pack.mjs +14 -3
  11. package/cli/ci-report.mjs +17 -5
  12. package/cli/command-definition.mjs +7 -6
  13. package/cli/discovery-scan-command-runner.mjs +4 -6
  14. package/cli/doctor.mjs +37 -3
  15. package/cli/domain-feed.mjs +61 -0
  16. package/cli/formatters/html.mjs +3 -0
  17. package/cli/formatters/json.mjs +9 -14
  18. package/cli/formatters/terminal-lookup.mjs +24 -1
  19. package/cli/history-command-definitions.mjs +1 -1
  20. package/cli/indicator-set-command.mjs +1 -2
  21. package/cli/intake-command.mjs +43 -3
  22. package/cli/investigation-artifacts.mjs +2 -3
  23. package/cli/investigation-package-review.mjs +2 -0
  24. package/cli/investigation-plan.mjs +15 -0
  25. package/cli/local-mmdb-review.mjs +27 -4
  26. package/cli/lookup-brief.mjs +11 -5
  27. package/cli/lookup-command-runner.mjs +21 -13
  28. package/cli/offline-evidence-review.mjs +51 -5
  29. package/cli/review-arguments.mjs +3 -2
  30. package/cli/review-command-definitions.mjs +23 -17
  31. package/cli/review-command-runner.mjs +6 -3
  32. package/cli/risk-calibration.mjs +6 -4
  33. package/cli/saved-lookup.mjs +22 -7
  34. package/cli/selected-input-worker.mjs +12 -2
  35. package/cli/source-reliability.mjs +12 -10
  36. package/cli/support-arguments.mjs +1 -1
  37. package/cli/support-command-definitions.mjs +5 -4
  38. package/cli/support-command-runner.mjs +9 -7
  39. package/cli/watchlist-review.mjs +43 -0
  40. package/cli/workflow-arguments.mjs +14 -0
  41. package/cli/workflow-command-definitions.mjs +27 -1
  42. package/cli/workflow-command-runner.mjs +32 -0
  43. package/docs/cli-reference.md +49 -11
  44. package/docs/cli.md +200 -26
  45. package/docs/contextual-reviews.md +38 -5
  46. package/docs/infrastructure-observations.md +135 -0
  47. package/docs/offline-intake-context.md +213 -0
  48. package/lib/credential-form-attribution.mjs +136 -0
  49. package/lib/credential-surface-profile.mjs +6 -2
  50. package/lib/dmarc-discovery.mjs +4 -2
  51. package/lib/dns-delegation-health.mjs +23 -7
  52. package/lib/dns-inheritance-review.mjs +14 -1
  53. package/lib/dns-intelligence.mjs +18 -4
  54. package/lib/domain-posture-analysis.mjs +53 -2
  55. package/lib/domain-posture-parsers.mjs +9 -0
  56. package/lib/domain-posture.mjs +29 -10
  57. package/lib/evidence-export-privacy.mjs +5 -2
  58. package/lib/evidence-export.mjs +10 -4
  59. package/lib/evidence-report.mjs +3 -1
  60. package/lib/favicon.mjs +13 -4
  61. package/lib/generated/cisa-kev-catalog.mjs +17 -4
  62. package/lib/generated/registrar-standing-catalogue.mjs +7 -7
  63. package/lib/generated/retire-browser-catalog.mjs +178 -5
  64. package/lib/html-signals.mjs +6 -0
  65. package/lib/idn-confusables.mjs +5 -1
  66. package/lib/lookup-child-profile-contract.mjs +28 -11
  67. package/lib/lookup-collection-receipt.mjs +52 -0
  68. package/lib/lookup-diagnostics.mjs +2 -12
  69. package/lib/lookup-progress.mjs +29 -31
  70. package/lib/lookup-response-contract.mjs +10 -0
  71. package/lib/lookup-response.mjs +15 -14
  72. package/lib/lookup-source-progress.mjs +4 -2
  73. package/lib/lookup.mjs +33 -2
  74. package/lib/operation-budget.mjs +4 -0
  75. package/lib/rdap-capabilities.mjs +43 -9
  76. package/lib/registry-insights.mjs +17 -6
  77. package/lib/service-binding-dns.mjs +19 -2
  78. package/lib/sslbl-certificates.generated.mjs +142 -140
  79. package/lib/static-html-analysis.mjs +32 -4
  80. package/lib/technology-evidence-role.mjs +1 -51
  81. package/lib/tls-intelligence.mjs +30 -5
  82. package/lib/website-enrichment.mjs +39 -23
  83. package/lib/whois-authority.mjs +56 -1
  84. package/lib/whois-chain.mjs +14 -4
  85. package/lib/whois-common-formats.mjs +3 -1
  86. package/lib/whois-contacts.mjs +13 -2
  87. package/lib/whois-contracts.mjs +2 -0
  88. package/lib/whois-normalization.mjs +4 -4
  89. package/package.json +9 -7
  90. package/packages/analysis/bounded-json.mjs +12 -2
  91. package/packages/analysis/risk-scoring.mjs +12 -9
  92. package/packages/cases/case-attachment-model.mjs +36 -1
  93. package/packages/cases/case-checkpoint-receipts.mjs +68 -0
  94. package/packages/cases/case-containment-handoff.mjs +195 -0
  95. package/packages/cases/case-evidence-links.mjs +44 -0
  96. package/packages/cases/case-evidence-model.mjs +51 -7
  97. package/packages/cases/case-migration-model.mjs +9 -1
  98. package/packages/cases/case-object-coverage.mjs +119 -0
  99. package/packages/cases/case-packet-correction.mjs +106 -0
  100. package/packages/cases/case-recheck-model.mjs +35 -5
  101. package/packages/cases/case-record-operations.mjs +87 -9
  102. package/packages/cases/case-record-projection.mjs +43 -5
  103. package/packages/cases/case-record-version-input.mjs +23 -1
  104. package/packages/cases/case-report.mjs +35 -4
  105. package/packages/cases/case-requested-evidence.mjs +1 -1
  106. package/packages/cases/case-response-actions.mjs +57 -1
  107. package/packages/cases/case-response-model.mjs +7 -0
  108. package/packages/cases/case-response-object.mjs +119 -0
  109. package/packages/cases/case-response-outcomes.mjs +81 -14
  110. package/packages/cases/case-response-packet-render.mjs +22 -3
  111. package/packages/cases/case-response-packet-validation.mjs +880 -0
  112. package/packages/cases/case-response-packet-vocabulary.mjs +12 -1
  113. package/packages/cases/case-response-packet.mjs +32 -17
  114. package/packages/cases/case-response-review-inputs.mjs +66 -8
  115. package/packages/cases/case-type-presentation.mjs +10 -0
  116. package/packages/cases/case-workflow-metadata.mjs +1 -17
  117. package/packages/comparison/capture-context.mjs +3 -2
  118. package/packages/contracts/analyst-interchange.mjs +7 -5
  119. package/packages/contracts/analyst-review-state-contract.mjs +1 -1
  120. package/packages/contracts/candidate-watch-review.mjs +54 -0
  121. package/packages/contracts/case-portability.mjs +292 -43
  122. package/packages/contracts/cli-command-semantics.mjs +3 -0
  123. package/packages/contracts/cli-doctor.mjs +4 -0
  124. package/packages/contracts/cli-lookup.mjs +57 -46
  125. package/packages/contracts/context-review.mjs +2 -1
  126. package/packages/contracts/external-observation-interchange.mjs +96 -28
  127. package/packages/contracts/lookup-evidence.mjs +13 -2
  128. package/packages/contracts/message-intake.mjs +7 -1
  129. package/packages/contracts/registry-insights.mjs +6 -0
  130. package/packages/contracts/risk-calibration.mjs +44 -29
  131. package/packages/contracts/schema-lifecycle.mjs +3 -1
  132. package/packages/contracts/web-capture.mjs +1 -1
  133. package/packages/contracts/workspace-portability.mjs +86 -16
  134. package/packages/evidence/collection-quality.mjs +1 -1
  135. package/packages/evidence/credential-form-attribution.mjs +60 -0
  136. package/packages/evidence/dmarc-policy-context.mjs +80 -0
  137. package/packages/evidence/image-regions.mjs +15 -0
  138. package/packages/evidence/lookup-collection-receipt.mjs +140 -0
  139. package/packages/evidence/lookup-collection-review.mjs +74 -0
  140. package/packages/evidence/record-identity.mjs +60 -16
  141. package/packages/evidence/technology-evidence-role.mjs +51 -0
  142. package/packages/interchange/external-findings-import.mjs +40 -21
  143. package/packages/interchange/json-output.mjs +14 -0
  144. package/packages/interchange/managed-indicator-export.mjs +3 -2
  145. package/packages/interchange/managed-indicator-set.mjs +13 -0
  146. package/packages/investigation/acquisition-decision-packet.mjs +78 -0
  147. package/packages/investigation/bulk-mail-exposure.mjs +2 -2
  148. package/packages/investigation/context-review.mjs +3 -3
  149. package/packages/investigation/document-intake.mjs +9 -3
  150. package/packages/investigation/domain-history-review.mjs +50 -12
  151. package/packages/investigation/domain-transition-review.mjs +2 -0
  152. package/packages/investigation/infrastructure-observation.mjs +234 -0
  153. package/packages/investigation/intake-context.mjs +284 -0
  154. package/packages/investigation/intake-indicators.mjs +116 -0
  155. package/packages/investigation/intake-phones.mjs +155 -0
  156. package/packages/investigation/intake-report.mjs +2 -1
  157. package/packages/investigation/investigation-manifest.mjs +33 -7
  158. package/packages/investigation/link-intake.mjs +38 -8
  159. package/packages/investigation/message-intake.mjs +55 -15
  160. package/packages/monitoring/domain-feed.mjs +321 -0
  161. package/packages/workspace/brand-candidate-workflow.mjs +351 -0
  162. package/packages/workspace/brand-keyword-campaign.mjs +241 -0
  163. package/packages/workspace/brand-profile-model.mjs +46 -2
  164. package/packages/workspace/bulk-session-model.mjs +12 -0
  165. package/packages/workspace/candidate-watch-handoff.mjs +195 -0
  166. package/packages/workspace/detection-rule-model.mjs +10 -2
  167. package/packages/workspace/shortlist-model.mjs +10 -2
  168. package/packages/workspace/watchlist-history.mjs +31 -4
  169. package/packages/workspace/watchlist-store.mjs +136 -7
  170. package/third-party-notices.txt +30 -30
package/DISCLOSURE CHANGED
@@ -1,4 +1,4 @@
1
- WHOISleuth is a defensive domain investigation and brand-protection tool. Its
1
+ WHOISleuth is a defensive domain investigation and brand protection tool. Its
2
2
  command-line package can collect bounded WHOIS, RDAP, DNS, HTTP, TLS,
3
3
  certificate-transparency, website, and related infrastructure evidence. It can
4
4
  also generate and review lookalike-domain candidates, compare saved evidence,
@@ -9,12 +9,15 @@ WHOISleuth is intended for authorised defensive investigation, abuse response,
9
9
  threat research, domain acquisition due diligence, asset review, and education.
10
10
  Network collection is initiated explicitly by the operator, uses bounded
11
11
  requests, and keeps source provenance and incomplete results visible. Hosted
12
- and distributable collection does not exploit targets, bypass access controls,
12
+ and main-CLI collection does not exploit targets, bypass access controls,
13
13
  submit credentials, execute remote page scripts, or automate enforcement
14
- actions. The separate repo-local rendered-capture package is an explicit
15
- authorised exception: it executes page JavaScript in a disposable,
16
- network-bounded browser and writes only a local screenshot plus sanitised
17
- digest and manifest artefacts for operator-controlled review and deletion.
14
+ actions. The separate optional rendered-capture companion is distributed as a
15
+ locally assembled archive, not as part of the hosted application or main CLI,
16
+ and is not published to a package registry. It executes page JavaScript only
17
+ after explicit authorisation, in a disposable, sandboxed, network-bounded
18
+ browser. Admitted resource operators receive their requested URLs; screenshots
19
+ and sanitised digest/manifest artefacts remain local for operator-controlled
20
+ review and deletion.
18
21
 
19
22
  Operators are responsible for using WHOISleuth only on systems and data they
20
23
  are authorised to examine and in accordance with applicable laws, provider
package/NOTICE CHANGED
@@ -13,8 +13,9 @@ which are licensed under the Mozilla Public License 2.0. These packages are not
13
13
  part of the production runtime.
14
14
 
15
15
  The generated browser-library catalogue projection is derived from the
16
- Retire.js browser repository, version 5.4.3, and has been modified by selecting
17
- and bounding the fields used by WHOISleuth. Retire.js is licensed under the
16
+ Retire.js browser repository, with its source version and digest recorded in
17
+ the projection, and has been modified by selecting and bounding the fields
18
+ used by WHOISleuth. Retire.js is licensed under the
18
19
  Apache License 2.0. See LICENSES/Retire.js-Apache-2.0.txt for the full licence
19
20
  text.
20
21
 
package/README.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # WHOISleuth CLI
2
2
 
3
- WHOISleuth's command-line interface runs local WHOIS, RDAP, DNS, HTTP, TLS,
4
- certificate, posture and lookalike investigation commands. Networked commands
5
- run from the operator's machine; offline commands read only selected local input.
6
- It does not use the hosted WHOISleuth login or workspace.
3
+ Investigate domains, IP addresses and ASNs from your terminal, review selected
4
+ local files, and prepare evidence for a browser or offline handoff. Networked
5
+ commands run from your computer; offline commands read selected local input.
6
+ The CLI does not use the hosted WHOISleuth login or workspace.
7
7
 
8
- ## Install
8
+ [CLI guide](https://github.com/slicedearth/whoisleuth/blob/main/docs/cli.md) ·
9
+ [Searchable commands](https://www.whoisleuth.com/cli) ·
10
+ [Compatibility reference](https://github.com/slicedearth/whoisleuth/blob/main/docs/cli-reference.md)
9
11
 
10
- WHOISleuth requires Node.js 24 or later. Run the public package directly:
12
+ ## Install and update
13
+
14
+ Use Node.js 24 or later. Run without a global installation:
11
15
 
12
16
  ```bash
13
17
  npm exec --yes --ignore-scripts --package=@slicedearth/whoisleuth-cli -- whoisleuth --help
@@ -17,95 +21,84 @@ Or install the `whoisleuth` command globally:
17
21
 
18
22
  ```bash
19
23
  npm install --global --ignore-scripts @slicedearth/whoisleuth-cli
24
+ whoisleuth --version
20
25
  whoisleuth doctor
21
26
  ```
22
27
 
23
- The package has no dependency lifecycle scripts. Its version follows the
24
- application version.
28
+ Update an existing installation with
29
+ `npm install --global --ignore-scripts @slicedearth/whoisleuth-cli@latest`, then
30
+ check `whoisleuth --version` and `whoisleuth doctor` again. The package requires
31
+ no lifecycle scripts; its version follows the application version.
25
32
 
26
- ## Quick start
33
+ ## First commands
27
34
 
28
- Inspect the installed command set and plan a Lookup:
35
+ Browse the installed commands and plan a Lookup without collecting:
29
36
 
30
37
  ```bash
31
- whoisleuth --help
32
38
  whoisleuth commands --common
33
39
  whoisleuth lookup example.test --plan --json
34
40
  ```
35
41
 
36
- Run common commands:
42
+ For a target you are authorised to assess, use Fast or Deep Lookup:
37
43
 
38
44
  ```bash
39
45
  whoisleuth example.test
40
46
  whoisleuth lookup example.test --deep --summary
41
- whoisleuth bulk domains.txt --csv
42
- whoisleuth discover example.test --preset common --jsonl
43
- whoisleuth compare lookup.json --json
44
- whoisleuth mail-headers message.eml --json
45
- whoisleuth verify-artifact lookup.json --json --strict-exit
46
47
  ```
47
48
 
48
- One strict domain, IP address or ASN can occupy command position as Lookup
49
- shorthand. URL-like or ambiguous input requires the explicit `lookup` command;
50
- only `bulk` accepts multiple targets.
49
+ Fast is registration-first; Deep adds the applicable DNS, website, TLS and
50
+ other declared sources. `whoisleuth <command> --help` explains that command's
51
+ inputs, request boundaries, output formats and exit policy.
51
52
 
52
- ## Command groups
53
+ ## Save, verify and continue in the browser
53
54
 
54
- Use the installed registry to browse Investigate, Respond, Assure and Utilities:
55
+ Save a private Lookup by closing the interactive evidence browser normally,
56
+ verify it offline, then create the separate browser-compatible export:
55
57
 
56
58
  ```bash
57
- whoisleuth commands --group investigate
58
- whoisleuth commands --group respond --mode offline
59
- whoisleuth commands --json
60
- whoisleuth manual | man -l -
59
+ whoisleuth lookup example.test --deep --browse --save-lookup lookup.json
60
+ whoisleuth verify-artifact lookup.json --json
61
+ whoisleuth export lookup.json --output evidence.json
62
+ whoisleuth verify-artifact evidence.json --json
61
63
  ```
62
64
 
63
- ## Collection and output
64
-
65
- Fast Lookup is registration-first. Deep Lookup explicitly adds the applicable
66
- WHOIS, DNS, website, TLS, registrar-RDAP and observed-network sources. Compact
67
- Deep Bulk retains only the fields needed for comparison. Authorised active
68
- commands require their dedicated command and per-run acknowledgement.
69
-
70
- Focused `whoisleuth <command> --help` states the exact target, request, input and
71
- output limits. `lookup --plan` lists planned sources before collection.
72
-
73
- Terminal text is the default. Commands expose JSON, JSONL, CSV, Markdown, HTML
74
- or domain-only output only where declared. `--output` writes a private local
75
- file atomically and refuses an existing path unless `--force` is selected.
76
- `--strict-exit` and `--fail-on` expose selected evidence states to automation.
77
-
78
- `case open --domain example.test --output cases.json` creates an ordinary local
79
- Case file. `case show`, `note`, `pin`, `assess` and `recheck` review or update it
80
- offline. Mutations require explicit output and preserve earlier retained evidence;
81
- see `docs/cli.md#local-case-files` for JSON inputs and conflict handling. Working
82
- files contain private analyst content, not attached file bytes.
65
+ In the console's Lookup page, open **Replay exported evidence** and select
66
+ `evidence.json`. Review its digest and source states before retaining evidence
67
+ in a case. Keep `lookup.json` as the private CLI original; it can contain raw
68
+ registration responses and is not the browser replay format. The evidence
69
+ export excludes raw registration payloads and expanded contacts; replay does
70
+ not upload either file.
83
71
 
84
- `manifest --package --output evidence.wlep --passphrase-file ./passphrase.txt`
85
- encrypts selected evidence files and their manifest. Use the same explicit
86
- passphrase file with `verify-artifact --package` to authenticate and verify it
87
- offline. Ordinary ZIPs and folder exports remain unencrypted; see `docs/cli.md`
88
- for complete examples and file-handling boundaries.
72
+ ## Work with selected files
89
73
 
90
- `workflow-run` pauses on a partial collection. Resume retains it without
91
- recollection and keeps exit code 4 even if later steps finish. Failed validation
92
- or export steps remain retryable. See `docs/cli.md` for checkpoint compatibility.
74
+ ```bash
75
+ whoisleuth bulk domains.txt --csv-with-metadata
76
+ whoisleuth mail-headers message.eml --json
77
+ whoisleuth compare lookup.json --json
78
+ ```
93
79
 
94
- The included `docs/cli-reference.md` lists common exit codes and compatibility
95
- contracts. A completed command can still contain partial source evidence.
80
+ `domains.txt` contains one target per line. `message.eml` is a message file you
81
+ select for local review. `lookup.json` is the saved CLI document from the
82
+ example above. Bulk performs collection; the mail-header and comparison
83
+ commands in this example are offline.
96
84
 
97
- ## Repository checkout
85
+ Use `whoisleuth commands --group respond --mode offline` to find local case,
86
+ packet and handoff tools. The [case-file guide](https://github.com/slicedearth/whoisleuth/blob/main/docs/cli.md#local-case-files)
87
+ covers ordinary case files, JSON inputs and conflict handling. Output written
88
+ with `--output` is private and atomic, and existing files require explicit
89
+ `--force`. A completed command can still contain partial source evidence.
98
90
 
99
- Contributors can run the source command without installing the package:
91
+ ## Separate tools and security
100
92
 
101
- ```bash
102
- node bin/whoisleuth.mts --help
103
- node bin/whoisleuth.mts lookup example.test --plan --json
104
- npm run cli:package:check
105
- ```
93
+ The [rendered-capture companion](https://github.com/slicedearth/whoisleuth/tree/main/packages/web-capture)
94
+ and [filesystem-local application](https://github.com/slicedearth/whoisleuth/tree/main/packages/local-application)
95
+ are separate, locally assembled archives—not included in this CLI or published
96
+ as npm packages. Their guides cover installation and their distinct storage
97
+ and collection boundaries.
106
98
 
107
- The package includes `docs/cli.md` for usage and `docs/cli-reference.md` for
108
- compatibility, privacy and evidence contracts. Report suspected vulnerabilities
109
- through the private channel in `SECURITY.md`.
99
+ The package also includes `docs/cli.md` and `docs/cli-reference.md` for offline
100
+ reading. Report suspected vulnerabilities through the private channel in the
101
+ [security policy](https://github.com/slicedearth/whoisleuth/blob/main/SECURITY.md).
110
102
 
111
- Copyright 2026 slicedearth. Licensed under AGPL-3.0-only.
103
+ Copyright 2026 slicedearth. Licensed under
104
+ [AGPL-3.0-only](https://github.com/slicedearth/whoisleuth/blob/main/LICENSE).