Repository navigation
Releases
Releases · neopunisher/node-knock
v1.1.0 — MCP server
Added
- MCP server:
knock --mcpserves the Model Context Protocol over stdio
withknock_enumerate,knock_ct_lookupandknock_registrable_domain
tools (structured output, progress notifications, cancellation). Hand-rolled
JSON-RPC, so still zero runtime dependencies. llms.txt, an agent-oriented API reference shipped in the package, and
AGENTS.md/CLAUDE.mdcontributor guidance for coding agents.
v1.0.0 — Certificate Transparency + PSL rewrite
Changelog
1.0.0 (2026)
Complete modernization — a rewrite of the 2014-era 0.1.0.
Added
- Certificate Transparency source: passive subdomain discovery via crt.sh
(certSubdomains(), on by default inknock()), with DNS verification and
anunresolvedlist for stale/internal certificate names. - Actual enumeration (the old
lib.jsstopped at normalizing the domain):
wordlist DNS brute force with a bounded concurrency pool, wildcard DNS
detection/suppression, optional http/https probing,AbortSignalsupport,
streamingonResultcallback, per-run stats. - Real CLI (
knock <domain>):--passive,--no-ct,--no-verify,
--full-host,--list,--concurrency,--server,--ipv6,--web,
--json,--quiet. - Public Suffix List support with a vendored snapshot (
npm run update-psl):
targets reduce to their registrable domain by default (whattldtoolsdid
in 0.x), withgetRegistrableDomain/getPublicSuffix/
loadPublicSuffixListexported andbaseDomainOnly/icannOnly/psl
options onknock(). - TypeScript type definitions,
node:testsuite, CI (Node 20/22/24), and npm
trusted publishing (OIDC) with provenance.
Changed
- Breaking: ESM-only, Node >= 22, and a new API —
knock(domain, opts)returns a Promise of a report instead of taking a
callback. - Rewritten in TypeScript (
src/, compiled todist/; tests run the.ts
sources directly via Node's type stripping). - Zero runtime dependencies:
request,optimist,step,glob,
tldtoolsand the undeclaredunderscoreare gone, replaced by
node:dns/promises,fetch,util.parseArgsand async/await. - The bundled
subs.txt/org.txtwordlists are unchanged and now exposed
via thewordlistsexport.