{"_id":"@egebese/whoiz","_rev":"4-1e69c7cc325f58c63bd55170379bfef7","name":"@egebese/whoiz","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@egebese/whoiz","version":"0.1.0","keywords":["whois","domain","cli","tui","epp","redemption","expiry","registrar","spaceship"],"author":{"name":"Ege Beşe"},"license":"MIT","_id":"@egebese/whoiz@0.1.0","maintainers":[{"name":"egebese","email":"egebese@gmail.com"}],"homepage":"https://github.com/egebese/whoiz#readme","bugs":{"url":"https://github.com/egebese/whoiz/issues"},"bin":{"whoiz":"bin/whoiz.js"},"dist":{"shasum":"fe3fabd30aa992fbb027f55cf1b3b86269132963","tarball":"https://registry.npmjs.org/@egebese/whoiz/-/whoiz-0.1.0.tgz","fileCount":11,"integrity":"sha512-STgz52li4tHFumvFtJ67YCoddjXuAw0GEQG4Ek/n5UWN5c14+kpgmh/s1LvoAFI0jSF4mMC6gqwbB/QU9gOA3A==","signatures":[{"sig":"MEYCIQDHaX+Slb6zjcqxkfdX6gYMg9PMwgeIRCNHKS3tqcYejwIhAMlmY5/4Ndvh9ugfhp0KJuieJdq2ly7tCs7GM6dRLm0X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48181},"main":"./dist/cli.js","type":"module","engines":{"node":">=18"},"gitHead":"362813d0f631144c5a7a29dae5e8c5a3f8e8a5d7","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start":"node bin/whoiz.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"egebese","email":"egebese@gmail.com"},"repository":{"url":"git+https://github.com/egebese/whoiz.git","type":"git"},"_npmVersion":"11.12.1","description":"Pretty whois CLI — bulk lookups, EPP status & period explanations, instant register link","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","meow":"^13.2.0","open":"^10.1.0","react":"^18.3.1","whoiser":"^1.18.0","picocolors":"^1.1.1","string-width":"^7.2.0","ink-text-input":"^6.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.3","@types/node":"^22.7.5","@types/react":"^18.3.11"},"_npmOperationalInternal":{"tmp":"tmp/whoiz_0.1.0_1777465898138_0.682676776902412","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@egebese/whoiz","version":"0.2.0","keywords":["whois","domain","cli","tui","epp","redemption","expiry","registrar","spaceship"],"author":{"name":"Ege Beşe"},"license":"MIT","_id":"@egebese/whoiz@0.2.0","maintainers":[{"name":"egebese","email":"egebese@gmail.com"}],"homepage":"https://github.com/egebese/whoiz#readme","bugs":{"url":"https://github.com/egebese/whoiz/issues"},"bin":{"whoiz":"bin/whoiz.js"},"dist":{"shasum":"ff5fa4d0e09d4c7af00da6345742f31a2cd8e5c7","tarball":"https://registry.npmjs.org/@egebese/whoiz/-/whoiz-0.2.0.tgz","fileCount":13,"integrity":"sha512-LHO+duLRPO5uWBO3g40y8Z/HkHgOK0B6KgaXEfdPTs1jTguvFug6kc6dj/hJtR651ALaic0jRpZIhGL8gSibTQ==","signatures":[{"sig":"MEYCIQDM64QE6tDL0jofBK8nl97Tqgp5Rl9eD9vnaQ/klqUUyAIhAOHZjFYB6uNExSs/eL/cjAD60JLJs6vAFABHpAB17hgs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63195},"main":"./dist/cli.js","type":"module","engines":{"node":">=18"},"gitHead":"f5e396a2dcb1441211bc7a0f139d9c97f1be9416","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start":"node bin/whoiz.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"egebese","email":"egebese@gmail.com"},"repository":{"url":"git+https://github.com/egebese/whoiz.git","type":"git"},"_npmVersion":"11.12.1","description":"Pretty whois CLI — bulk lookups, EPP status & period explanations, instant register link","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","meow":"^13.2.0","open":"^10.1.0","react":"^18.3.1","whoiser":"^1.18.0","picocolors":"^1.1.1","string-width":"^7.2.0","ink-text-input":"^6.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.3","@types/node":"^22.7.5","@types/react":"^18.3.11"},"_npmOperationalInternal":{"tmp":"tmp/whoiz_0.2.0_1777468218246_0.9053078515781232","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@egebese/whoiz","version":"0.3.0","keywords":["whois","whois-history","domain","domain-monitor","domain-expiry","cli","tui","epp","redemption","expiry","registrar","launchd","schtasks","systemd-timer","spaceship"],"author":{"name":"Ege Beşe"},"license":"MIT","_id":"@egebese/whoiz@0.3.0","maintainers":[{"name":"egebese","email":"egebese@gmail.com"}],"homepage":"https://github.com/egebese/whoiz#readme","bugs":{"url":"https://github.com/egebese/whoiz/issues"},"bin":{"whoiz":"bin/whoiz.js"},"dist":{"shasum":"f6bc45a932cb156f2b2440c9dab044a9932843b2","tarball":"https://registry.npmjs.org/@egebese/whoiz/-/whoiz-0.3.0.tgz","fileCount":21,"integrity":"sha512-NJi/bGNXhMTRnTDptd+TsD/Pc+VZAux2AgcbWcxOW+Wvq69EVrf5mKn8zMDS3mq4cDeUUsNuN2+IEbn8hd6fIg==","signatures":[{"sig":"MEQCIDOHHSDCMiIW+79N9liDTFBPbrYq5gIYEjSr4dfV13QAAiAphnsFmC2qJHgP67Q/wMA49xw3Cts6k4pQv+fDPlCmfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109650},"main":"./dist/cli.js","type":"module","engines":{"node":">=18"},"gitHead":"bd187996e916e3b6218e599cff378ab1c7333d66","scripts":{"dev":"tsc -p tsconfig.json --watch","build":"tsc -p tsconfig.json","start":"node bin/whoiz.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"egebese","email":"egebese@gmail.com"},"repository":{"url":"git+https://github.com/egebese/whoiz.git","type":"git"},"_npmVersion":"11.12.1","description":"Pretty whois CLI — bulk lookups, EPP status & period explanations, instant register link","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ink":"^5.1.0","meow":"^13.2.0","open":"^10.1.0","react":"^18.3.1","whoiser":"^1.18.0","picocolors":"^1.1.1","string-width":"^7.2.0","ink-text-input":"^6.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.3","@types/node":"^22.7.5","@types/react":"^18.3.11"},"_npmOperationalInternal":{"tmp":"tmp/whoiz_0.3.0_1777468924205_0.7369491410827205","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@egebese/whoiz","version":"0.3.1","publishConfig":{"access":"public"},"description":"Pretty whois CLI — bulk lookups, EPP status & period explanations, instant register link","keywords":["whois","whois-history","domain","domain-monitor","domain-expiry","cli","tui","epp","redemption","expiry","registrar","launchd","schtasks","systemd-timer","spaceship"],"type":"module","bin":{"whoiz":"bin/whoiz.js"},"main":"./dist/cli.js","scripts":{"build":"tsc -p tsconfig.json","dev":"tsc -p tsconfig.json --watch","start":"node bin/whoiz.js","prepublishOnly":"npm run build"},"engines":{"node":">=18"},"dependencies":{"ink":"^5.1.0","ink-text-input":"^6.0.0","meow":"^13.2.0","open":"^10.1.0","picocolors":"^1.1.1","react":"^18.3.1","string-width":"^7.2.0","whoiser":"^1.18.0"},"devDependencies":{"@types/node":"^22.7.5","@types/react":"^18.3.11","typescript":"^5.6.3"},"repository":{"type":"git","url":"git+https://github.com/egebese/whoiz.git"},"homepage":"https://github.com/egebese/whoiz#readme","bugs":{"url":"https://github.com/egebese/whoiz/issues"},"author":{"name":"Ege Beşe"},"license":"MIT","gitHead":"8aeee6b5c736bce2302329012919c32b46321add","_id":"@egebese/whoiz@0.3.1","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-VVvIblb9+3dTh0bAhxInRJiEbJgXf7TGFLS4NTZ6lzO5gBbxMyFjAWhlRt9RlufF3w4W3G4svacwNr//+XG1oQ==","shasum":"02905555b0d226ba76965364f61388107f56bc57","tarball":"https://registry.npmjs.org/@egebese/whoiz/-/whoiz-0.3.1.tgz","fileCount":21,"unpackedSize":110940,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBFcfbi+VP1HId/KqQ+EUCRcS5yrH2+8oUxwpFiLVvboAiAXgpHd+0VRSZ/y4opa1iuYjRoWrtKLhlSRd3ar/YESnA=="}]},"_npmUser":{"name":"egebese","email":"egebese@gmail.com"},"directories":{},"maintainers":[{"name":"egebese","email":"egebese@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/whoiz_0.3.1_1778050433732_0.03001093851385339"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-29T12:31:37.834Z","modified":"2026-05-06T06:53:54.300Z","0.1.0":"2026-04-29T12:31:38.330Z","0.2.0":"2026-04-29T13:10:18.374Z","0.3.0":"2026-04-29T13:22:04.403Z","0.3.1":"2026-05-06T06:53:53.877Z"},"bugs":{"url":"https://github.com/egebese/whoiz/issues"},"author":{"name":"Ege Beşe"},"license":"MIT","homepage":"https://github.com/egebese/whoiz#readme","keywords":["whois","whois-history","domain","domain-monitor","domain-expiry","cli","tui","epp","redemption","expiry","registrar","launchd","schtasks","systemd-timer","spaceship"],"repository":{"type":"git","url":"git+https://github.com/egebese/whoiz.git"},"description":"Pretty whois CLI — bulk lookups, EPP status & period explanations, instant register link","maintainers":[{"name":"egebese","email":"egebese@gmail.com"}],"readme":"# whoiz\n\nPretty `whois` for humans. Bulk lookups, EPP status decoding, redemption-period\nexplanations, and a one-keystroke jump to a registrar when a domain is free.\n\n```bash\nnpx @egebese/whoiz google.com\n```\n\n[![npm version](https://img.shields.io/npm/v/@egebese/whoiz.svg?color=cb3837&logo=npm)](https://www.npmjs.com/package/@egebese/whoiz)\n[![npm downloads](https://img.shields.io/npm/dm/@egebese/whoiz.svg?color=cb3837)](https://www.npmjs.com/package/@egebese/whoiz)\n[![GitHub stars](https://img.shields.io/github/stars/egebese/whoiz.svg?style=social)](https://github.com/egebese/whoiz/stargazers)\n[![GitHub issues](https://img.shields.io/github/issues/egebese/whoiz.svg)](https://github.com/egebese/whoiz/issues)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)\n\n## Features\n\n- **Bulk lookups** — `whoiz a.com b.io c.shop` runs in parallel.\n- **Field queries** — `whoiz a.com status,period` shows only what you asked for.\n- **EPP status decoder** — every `clientTransferProhibited` etc. comes with a plain-language explanation.\n- **Lifecycle awareness** — knows the difference between `redemptionPeriod`, `pendingDelete`, auto-renew grace, and gives an ETA for when a domain becomes registerable again.\n- **Available? Browser opens.** — when a domain is free, `whoiz` opens a Spaceship search so you can grab it in one step. (`--no-open` to disable.)\n- **TUI mode** — `whoiz a.com b.com --tui` for an interactive Ink-based viewer.\n- **Background watch** — `whoiz watch add domain.com` installs a launchd / Schtasks / systemd-timer agent that re-polls on an adaptive cadence (weekly when 6 months out, daily near expiry, every 6h in redemption) and notifies on state change. Auto-uninstalls when nothing's left to watch.\n- **WHOIS history** — every probe writes a snapshot, `whoiz history domain.com` shows every registrar / nameserver / status change since you started watching.\n- **Foreground watch** — `whoiz a.com --watch` re-polls in place, default every 60s, for live monitoring in a terminal pane.\n- **ccTLD-aware** — falls back to system `whois` for TLDs like `.tr`, `.de`, `.fr`, `.nl`, `.it`, `.ru` and decodes their non-EPP status codes.\n- **Shell completion** — `whoiz --completion bash|zsh|fish` ships ready-to-source scripts.\n- **JSON output** — `--json` for scripting.\n\n## Install\n\n```bash\n# one-off via npx\nnpx @egebese/whoiz google.com\n\n# or install globally\nnpm i -g @egebese/whoiz\nwhoiz google.com\n```\n\nThe CLI command is `whoiz` regardless of how you install it.\n\n## Usage\n\n```bash\nwhoiz <domain> [<domain> …] [fields]\n```\n\n### Single lookup\n\n```bash\nwhoiz cloudflare.com\n```\n\n### Bulk\n\n```bash\nwhoiz cloudflare.com vercel.com github.com\n```\n\n### Field-only output\n\nBoth comma and slash separators work:\n\n```bash\nwhoiz google.com status,period\nwhoiz google.com status/period/expiry\nwhoiz google.com -f registrar,ns\n```\n\nAvailable field tokens: `status`, `period`, `expiry`, `created`, `updated`,\n`registrar`, `ns`, `dnssec`, `links`, `raw`.\n\n### TUI mode\n\nBare `whoiz` (no arguments) launches the interactive TUI. You can also start\nwith domains preloaded:\n\n```bash\nwhoiz                       # empty TUI, type to query\nwhoiz --tui                 # same thing, explicit\nwhoiz cloudflare.com --tui  # preload one or more lookups\n```\n\nIn the TUI:\n\n- Type a domain (or several, separated by space/comma) and press **Enter** to look up.\n- **Tab** / **Shift+Tab** — switch between previous lookups.\n- **Ctrl+O** — open the current domain on Spaceship in your browser.\n- **Ctrl+D** — drop the current entry from history.\n- **Esc** or **Ctrl+C** — quit.\n\n### JSON\n\n```bash\nwhoiz cloudflare.com --json\n```\n\n### Disable browser auto-open\n\n```bash\nwhoiz somenewname.io --no-open\n```\n\n### Force the register flow\n\n```bash\nwhoiz mybrand.shop -r\n```\n\n### Foreground watch\n\nPolls the same domain(s) on a schedule and redraws the box in place. Best for\nshort-lived monitoring inside a terminal — for set-and-forget monitoring use\n`whoiz watch add` (below).\n\n```bash\nwhoiz google.com --watch              # every 60s (default)\nwhoiz google.com --watch -i 30        # every 30s\nwhoiz a.com b.com --watch -i 600      # check both, every 10min\n```\n\nStop with Ctrl+C.\n\n### Background watch (launchd / Schtasks / systemd)\n\nAdds a domain to a tiny on-disk watchlist and registers a single OS scheduler\nentry that wakes once an hour to process due entries. The polling cadence is\nadaptive:\n\n| Time-to-expiry | Probe every |\n| --- | --- |\n| > 1 year | 30 days |\n| 180 d – 1 y | 14 days |\n| 30 – 180 d | 7 days |\n| 14 – 30 d | 2 days |\n| 3 – 14 d | 1 day |\n| ≤ 3 d / hold / redemption / pendingDelete | 6 hours |\n\n```bash\nwhoiz watch add mydomain.com                 # start watching\nwhoiz watch add a.com b.com --note \"personal\"\nwhoiz watch list                             # see tier + next probe\nwhoiz watch run mydomain.com                 # manual probe now\nwhoiz watch remove mydomain.com              # stop watching\nwhoiz watch status                           # is the scheduler installed?\nwhoiz watch doctor                           # detailed diagnostics + recent log\n```\n\nNotifications use the OS-native channel — `osascript display notification` on\nmacOS, `Windows.UI.Notifications` on Windows, `notify-send` on Linux — so no\nextra dependencies. State lives in `~/.whoiz/`.\n\nSelf-cleaning: when the last watch is removed (or a watched domain becomes\navailable) the scheduler entry is uninstalled automatically. Nothing keeps\nrunning once you've stopped watching.\n\nResource cost: hourly wake, ~50 ms of work per fire if nothing is due. Mac and\nLinux entries are marked `LowPriorityIO` / `IOSchedulingClass=idle`; Windows is\n`LIMITED` privilege.\n\n### History\n\nEvery probe (foreground or background) records a normalized snapshot to\n`~/.whoiz/history/<domain>.jsonl`. `whoiz history` walks that and shows only\nthe changes between snapshots:\n\n```bash\nwhoiz history mydomain.com\nwhoiz history mydomain.com --json\n```\n\n```\n2026-02-15T00:00:00Z  3 changes\n  registrar  OldReg → NewReg\n  expiry     2026-12-31T00:00:00Z → 2027-12-31T00:00:00Z\n  ns         +c.example.com  -b.example.com\n\n2026-04-01T00:00:00Z  2 changes\n  state      registered → redemption\n  statuses   +redemptionperiod  -clienttransferprohibited\n```\n\nHistory is local-only — there's no service to query for retroactive data, but\nonce a domain is on your watchlist whoiz will catch every registrar / NS /\nstatus / expiry change going forward.\n\n### Shell completion\n\n```bash\n# bash\nwhoiz --completion bash > /usr/local/etc/bash_completion.d/whoiz\n\n# zsh\nwhoiz --completion zsh > \"${fpath[1]}/_whoiz\" && compinit\n\n# fish\nwhoiz --completion fish > ~/.config/fish/completions/whoiz.fish\n```\n\n## How the lifecycle is interpreted\n\n| State            | Meaning                                                                         |\n| ---------------- | ------------------------------------------------------------------------------- |\n| AVAILABLE        | TLD's whois says no record exists. Register link opens automatically.            |\n| REGISTERED       | Active registration; expiry countdown shown.                                    |\n| REDEMPTION       | `redemptionPeriod` set — owner can restore for a high fee, public can't grab.   |\n| PENDING DELETE   | `pendingDelete` set — drop in ~5 days, then public registration opens.          |\n| PENDING TRANSFER | `pendingTransfer` set — transfer in flight (~5 days).                           |\n| HOLD             | `clientHold` / `serverHold` set — DNS suspended.                                |\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for the full release history.\n\n## Contributing\n\nPRs and issues welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening\none — it covers local setup, the project layout, what makes a good change, and\nthe release flow.\n\nIf `whoiz` saved you a tab, a star helps others find it:\n[![Star on GitHub](https://img.shields.io/github/stars/egebese/whoiz?style=social)](https://github.com/egebese/whoiz/stargazers)\n\n## Star history\n\n[![Star History Chart](https://api.star-history.com/svg?repos=egebese/whoiz&type=Date)](https://star-history.com/#egebese/whoiz&Date)\n\n## License\n\nMIT © Ege Beşe\n","readmeFilename":"README.md"}