[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"navigation_docs":3,"-guide":68,"-guide-surround":408},[4,32],{"title":5,"path":6,"stem":7,"children":8,"icon":31},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Discovering URLs","\u002Fguide\u002Fdiscover","1.guide\u002F2.discover",{"title":16,"path":17,"stem":18},"Filters and scope","\u002Fguide\u002Ffilters","1.guide\u002F3.filters",{"title":20,"path":21,"stem":22},"CLI","\u002Fguide\u002Fcli","1.guide\u002F4.cli",{"title":24,"path":25,"stem":26},"Agents","\u002Fguide\u002Fagents","1.guide\u002F5.agents",{"title":28,"path":29,"stem":30},"Custom providers","\u002Fguide\u002Fcustom","1.guide\u002F6.custom","i-lucide-book-open",{"title":33,"path":34,"stem":35,"children":36,"icon":67},"Providers","\u002Fproviders","2.providers\u002F0.index",[37,39,43,47,51,55,59,63],{"title":38,"path":34,"stem":35},"Overview",{"title":40,"path":41,"stem":42},"AlienVault OTX","\u002Fproviders\u002Falienvault","2.providers\u002F01.alienvault",{"title":44,"path":45,"stem":46},"Arquivo.pt","\u002Fproviders\u002Farquivo","2.providers\u002F02.arquivo",{"title":48,"path":49,"stem":50},"Common Crawl","\u002Fproviders\u002Fcommoncrawl","2.providers\u002F03.commoncrawl",{"title":52,"path":53,"stem":54},"URLScan","\u002Fproviders\u002Furlscan","2.providers\u002F04.urlscan",{"title":56,"path":57,"stem":58},"Vefsafn","\u002Fproviders\u002Fvefsafn","2.providers\u002F05.vefsafn",{"title":60,"path":61,"stem":62},"VirusTotal","\u002Fproviders\u002Fvirustotal","2.providers\u002F06.virustotal",{"title":64,"path":65,"stem":66},"Wayback Machine","\u002Fproviders\u002Fwayback","2.providers\u002F07.wayback","i-lucide-library",{"id":69,"title":10,"body":70,"description":401,"extension":402,"links":403,"meta":404,"navigation":242,"path":6,"seo":405,"stem":7,"__hash__":407},"docs\u002F1.guide\u002F1.index.md",{"type":71,"value":72,"toc":391},"minimark",[73,78,83,87,102,107,110,114,117,142,145,149,177,185,196,206,210,340,346,352,356,359,363,387],[74,75,77],"warning",{"title":76},"Pre-1.0","The API, the source list and the MCP tools can still change. Pin an exact version if you build on it now.",[79,80,82],"h2",{"id":81},"why-would-you-want-this","Why would you want this?",[84,85,86],"p",{},"Wayback remembers one URL, AlienVault OTX knows another, URLScan saw a third one last week. Each of them speaks its own dialect: CDX text, CDX as NDJSON, paged JSON, search cursors. Ask all of them yourself and you're writing a client per source for what sounded like one question.",[84,88,89,93,94,101],{},[90,91,92],"code",{},"@agntn\u002Furls"," asks them for you. Same call, same options, same record back. It's a TypeScript take on the question ",[95,96,100],"a",{"href":97,"rel":98},"https:\u002F\u002Fgithub.com\u002Fprojectdiscovery\u002Furlfinder",[99],"nofollow","ProjectDiscovery's urlfinder"," answers.",[103,104,106],"h3",{"id":105},"what-passive-means-here","What \"passive\" means here",[84,108,109],{},"Requests go to the sources, never to the domain you're asking about. The site doesn't see a single hit from you. What you get back is what somebody else saw, sometimes years ago.",[79,111,113],{"id":112},"install","Install",[84,115,116],{},"Node.js 26 or newer.",[118,119,124],"pre",{"className":120,"code":121,"language":122,"meta":123,"style":123},"language-bash shiki shiki-themes urls urls urls","pnpm add @agntn\u002Furls\n","bash","",[90,125,126],{"__ignoreMap":123},[127,128,131,135,139],"span",{"class":129,"line":130},"line",1,[127,132,134],{"class":133},"sK71F","pnpm",[127,136,138],{"class":137},"shU9J"," add",[127,140,141],{"class":137}," @agntn\u002Furls\n",[84,143,144],{},"The npm release is still pending, so for now this works from a checkout.",[79,146,148],{"id":147},"first-call-from-the-cli","First call from the CLI",[118,150,152],{"className":120,"code":151,"language":122,"meta":123,"style":123},"urls discover example.com -p wayback -n 2\n",[90,153,154],{"__ignoreMap":123},[127,155,156,159,162,165,168,171,174],{"class":129,"line":130},[127,157,158],{"class":133},"urls",[127,160,161],{"class":137}," discover",[127,163,164],{"class":137}," example.com",[127,166,167],{"class":137}," -p",[127,169,170],{"class":137}," wayback",[127,172,173],{"class":137}," -n",[127,175,176],{"class":137}," 2\n",[118,178,183],{"className":179,"code":181,"language":182,"meta":123},[180],"language-text","http:\u002F\u002Fexample.com:80\u002F\nhttp:\u002F\u002Fwww.example.com:80\u002F\n","text",[90,184,181],{"__ignoreMap":123},[84,186,187,188,191,192,195],{},"No API key needed. Even ",[90,189,190],{},"example.com"," has a past ;) The ",[90,193,194],{},":80"," is how Wayback wrote it down in 2002, and the library keeps the first spelling it saw instead of prettifying it.",[84,197,198,199,202,203,205],{},"Without ",[90,200,201],{},"-p"," the CLI picks a source for you. ",[95,204,12],{"href":13}," explains which one and when it moves on.",[79,207,209],{"id":208},"first-call-from-code","First call from code",[118,211,216],{"className":212,"code":213,"filename":214,"language":215,"meta":123,"style":123},"language-ts shiki shiki-themes urls urls urls","import { create } from \"@agntn\u002Furls\";\n\nconst wayback = await create(\"wayback\");\nconst hits = await wayback.discover(\"example.com\", { limit: 20 });\n\nfor (const hit of hits) {\n  console.log(hit.source, hit.url, hit.firstSeen);\n}\n","first.ts","ts",[90,217,218,237,244,271,297,302,322,334],{"__ignoreMap":123},[127,219,220,224,228,231,234],{"class":129,"line":130},[127,221,223],{"class":222},"skH_V","import",[127,225,227],{"class":226},"s38Sx"," { create } ",[127,229,230],{"class":222},"from",[127,232,233],{"class":137}," \"@agntn\u002Furls\"",[127,235,236],{"class":226},";\n",[127,238,240],{"class":129,"line":239},2,[127,241,243],{"emptyLinePlaceholder":242},true,"\n",[127,245,247,250,253,256,259,262,265,268],{"class":129,"line":246},3,[127,248,249],{"class":222},"const",[127,251,252],{"class":226}," wayback ",[127,254,255],{"class":222},"=",[127,257,258],{"class":222}," await",[127,260,261],{"class":133}," create",[127,263,264],{"class":226},"(",[127,266,267],{"class":137},"\"wayback\"",[127,269,270],{"class":226},");\n",[127,272,274,276,279,281,283,286,289,291,294],{"class":129,"line":273},4,[127,275,249],{"class":222},[127,277,278],{"class":226}," hits ",[127,280,255],{"class":222},[127,282,258],{"class":222},[127,284,285],{"class":226}," wayback.",[127,287,288],{"class":133},"discover",[127,290,264],{"class":226},[127,292,293],{"class":137},"\"example.com\"",[127,295,296],{"class":226},", { limit: 20 });\n",[127,298,300],{"class":129,"line":299},5,[127,301,243],{"emptyLinePlaceholder":242},[127,303,305,308,311,313,316,319],{"class":129,"line":304},6,[127,306,307],{"class":222},"for",[127,309,310],{"class":226}," (",[127,312,249],{"class":222},[127,314,315],{"class":226}," hit ",[127,317,318],{"class":222},"of",[127,320,321],{"class":226}," hits) {\n",[127,323,325,328,331],{"class":129,"line":324},7,[127,326,327],{"class":226},"  console.",[127,329,330],{"class":133},"log",[127,332,333],{"class":226},"(hit.source, hit.url, hit.firstSeen);\n",[127,335,337],{"class":129,"line":336},8,[127,338,339],{"class":226},"}\n",[84,341,342,345],{},[90,343,344],{},"create()"," is async because each source lives in its own module and loads on first use. Ask for Wayback and the others never leave the disk.",[84,347,348,349,351],{},"You get records, not a blob to parse again. ",[95,350,12],{"href":13}," lists the fields.",[79,353,355],{"id":354},"what-it-doesnt-do","What it doesn't do",[84,357,358],{},"No crawling, no page downloads, no check that a URL still answers. A hit means some source saw the URL once. Whether it's alive today is a different question, and a different tool.",[79,360,362],{"id":361},"where-next","Where next",[364,365,366,372,377,382],"ul",{},[367,368,369,371],"li",{},[95,370,12],{"href":13},": one source, the automatic pick, or all of them side by side.",[367,373,374,376],{},[95,375,16],{"href":17},": keep what you came for.",[367,378,379,381],{},[95,380,24],{"href":25},": MCP, AI SDK, Pi and OMP.",[367,383,384,386],{},[95,385,33],{"href":34},": what each source knows and what it needs.",[388,389,390],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":123,"searchDepth":239,"depth":239,"links":392},[393,396,397,398,399,400],{"id":81,"depth":239,"text":82,"children":394},[395],{"id":105,"depth":246,"text":106},{"id":112,"depth":239,"text":113},{"id":147,"depth":239,"text":148},{"id":208,"depth":239,"text":209},{"id":354,"depth":239,"text":355},{"id":361,"depth":239,"text":362},"Install the package and ask one source what URLs it knows for a domain. Library and CLI in a few lines.","md",null,{"icon":31},{"title":406,"description":401},"Get started with passive URL discovery in TypeScript","TdfF3wDewy4rZW9yrDt1PM7YENUGxXAjKvCed-dKGJE",[403,409],{"title":12,"path":13,"stem":14,"description":410,"children":-1},"One source by name. The automatic pick with fallback. Or every source side by side with its own results and errors.",1790685300951]