domsniper 0.1.0 → 0.1.1
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.
- package/README.md +148 -196
- package/package.json +1 -1
- package/src/core/features/http-probe.ts +12 -3
- package/src/core/features/tech-stack.ts +2 -2
- package/src/core/whois.ts +6 -6
- package/src/index.tsx +1 -1
package/README.md
CHANGED
|
@@ -1,246 +1,198 @@
|
|
|
1
|
-
#
|
|
1
|
+
# domsniper
|
|
2
2
|
|
|
3
|
-
All-in-one domain intelligence toolkit -- WHOIS, DNS, security recon, portfolio management, and
|
|
3
|
+
All-in-one domain intelligence toolkit -- WHOIS, DNS, security recon, portfolio management, and automated domain sniping. Built with Bun.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/domsniper)
|
|
6
|
+
[](LICENSE)
|
|
4
7
|
|
|
5
8
|
## Install
|
|
6
9
|
|
|
7
10
|
```bash
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
# Run directly (no install)
|
|
12
|
+
bunx domsniper
|
|
13
|
+
|
|
14
|
+
# Install globally
|
|
15
|
+
bun add -g domsniper
|
|
16
|
+
|
|
17
|
+
# Or clone for development
|
|
18
|
+
git clone https://github.com/t-rhex/domain-sniper.git
|
|
19
|
+
cd domain-sniper && bun install
|
|
11
20
|
```
|
|
12
21
|
|
|
22
|
+
**Requirements:** [Bun](https://bun.sh) runtime, `whois` and `dig` CLI tools.
|
|
23
|
+
|
|
13
24
|
## Quick Start
|
|
14
25
|
|
|
15
26
|
```bash
|
|
16
|
-
# Interactive TUI
|
|
17
|
-
|
|
27
|
+
# Interactive TUI
|
|
28
|
+
domsniper
|
|
29
|
+
|
|
30
|
+
# Check a domain
|
|
31
|
+
domsniper example.com --headless
|
|
18
32
|
|
|
19
|
-
#
|
|
20
|
-
|
|
33
|
+
# JSON output (pipe to jq)
|
|
34
|
+
domsniper --headless --json example.com
|
|
21
35
|
|
|
22
|
-
# Full security recon
|
|
23
|
-
|
|
36
|
+
# Full security recon
|
|
37
|
+
domsniper recon example.com
|
|
38
|
+
|
|
39
|
+
# Generate name ideas
|
|
40
|
+
domsniper suggest startup --check
|
|
41
|
+
|
|
42
|
+
# Snipe a domain (auto-register when it drops)
|
|
43
|
+
domsniper snipe add expiring-domain.com
|
|
44
|
+
domsniper snipe run
|
|
24
45
|
```
|
|
25
46
|
|
|
26
47
|
## Features
|
|
27
48
|
|
|
28
|
-
### Intelligence
|
|
29
|
-
- **WHOIS & RDAP** -- Registration
|
|
30
|
-
- **DNS Records** -- A, AAAA, MX, TXT, CNAME
|
|
31
|
-
- **HTTP Probe** -- Status
|
|
32
|
-
- **SSL Certificates** -- Issuer, expiry, SANs, protocol
|
|
33
|
-
- **Domain Scoring** -- 0-100
|
|
34
|
-
- **Wayback Machine** -- Archive history
|
|
35
|
-
- **Social Media** -- Username availability
|
|
36
|
-
- **Tech Stack** --
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
49
|
+
### Domain Intelligence
|
|
50
|
+
- **WHOIS & RDAP** -- Registration, expiry, registrar details
|
|
51
|
+
- **DNS Records** -- A, AAAA, MX, TXT, CNAME
|
|
52
|
+
- **HTTP Probe** -- Status, redirects, parked domain detection
|
|
53
|
+
- **SSL Certificates** -- Issuer, expiry, SANs, protocol
|
|
54
|
+
- **Domain Scoring** -- 0-100 (length, TLD, readability, brandability, SEO)
|
|
55
|
+
- **Wayback Machine** -- Archive history, snapshot count
|
|
56
|
+
- **Social Media** -- Username availability (12 platforms)
|
|
57
|
+
- **Tech Stack** -- 40+ technologies (CMS, frameworks, CDN, analytics)
|
|
58
|
+
- **Backlinks** -- PageRank + CommonCrawl estimation
|
|
59
|
+
- **Suggestions** -- Name ideas from keywords
|
|
39
60
|
- **TLD Expansion** -- Check a name across all major TLDs
|
|
40
61
|
- **Variations** -- Typos, plurals, prefixes, suffixes
|
|
41
62
|
|
|
42
|
-
### Security Recon
|
|
43
|
-
- **Port Scanner** --
|
|
44
|
-
- **Security Headers** --
|
|
45
|
-
- **Email Security** -- SPF
|
|
46
|
-
- **WAF Detection** --
|
|
47
|
-
- **Blacklist Check** --
|
|
48
|
-
- **Sensitive Paths** --
|
|
49
|
-
- **CORS Check** --
|
|
50
|
-
- **
|
|
51
|
-
- **Subdomain Takeover** --
|
|
63
|
+
### Security Recon (toggle with `n` key)
|
|
64
|
+
- **Port Scanner** -- 20 ports, banner grabbing
|
|
65
|
+
- **Security Headers** -- 9 headers, A+ to F grading
|
|
66
|
+
- **Email Security** -- SPF/DKIM/DMARC audit
|
|
67
|
+
- **WAF Detection** -- 10 firewalls (Cloudflare, AWS, Akamai, etc.)
|
|
68
|
+
- **Blacklist Check** -- 8 DNS blocklists
|
|
69
|
+
- **Sensitive Paths** -- 37 paths (.env, .git, admin panels, SQL dumps)
|
|
70
|
+
- **CORS Check** -- 6 attack vectors
|
|
71
|
+
- **Cert Transparency** -- Subdomain discovery via crt.sh
|
|
72
|
+
- **Subdomain Takeover** -- 16 services (GitHub Pages, Heroku, S3, etc.)
|
|
52
73
|
- **DNS Zone Transfer** -- AXFR vulnerability check
|
|
53
|
-
- **Reverse IP** --
|
|
54
|
-
- **ASN/Geolocation** -- Network, ISP,
|
|
74
|
+
- **Reverse IP** -- Shared hosting discovery
|
|
75
|
+
- **ASN/Geolocation** -- Network, ISP, location
|
|
55
76
|
|
|
56
|
-
### Portfolio
|
|
57
|
-
- Track
|
|
58
|
-
-
|
|
59
|
-
- Renewal calendar with 90/60/30/7
|
|
60
|
-
- Health monitoring
|
|
61
|
-
- Categories,
|
|
62
|
-
- CSV export
|
|
77
|
+
### Portfolio Manager
|
|
78
|
+
- Track domains with purchase price, renewal dates, registrar
|
|
79
|
+
- P&L tracking, transactions, valuations, ROI
|
|
80
|
+
- Renewal calendar with alerts (90/60/30/7 days)
|
|
81
|
+
- Health monitoring (WHOIS, DNS, HTTP, SSL)
|
|
82
|
+
- Categories, pipeline, bulk operations
|
|
83
|
+
- CSV export (portfolio, transactions, tax)
|
|
63
84
|
|
|
64
85
|
### Automation
|
|
65
|
-
- **
|
|
66
|
-
- **
|
|
67
|
-
- **
|
|
68
|
-
- **Webhooks** -- Slack, Discord,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
|
79
|
-
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `p` | Add to portfolio |
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `h` | Scan history |
|
|
93
|
-
| `c` | Clear cache |
|
|
94
|
-
| `x` | Export CSV/JSON |
|
|
95
|
-
| `Ctrl+S` | Save session |
|
|
96
|
-
| `Ctrl+L` | Load session |
|
|
97
|
-
| `?` | Help |
|
|
98
|
-
| `q` | Quit |
|
|
86
|
+
- **Snipe Engine** -- Watch -> detect expiry -> auto-register -> notify
|
|
87
|
+
- **Watch Mode** -- Hourly monitoring
|
|
88
|
+
- **Drop Catch** -- 30-second polling for pending-delete domains
|
|
89
|
+
- **Webhooks** -- Slack, Discord, email notifications
|
|
90
|
+
|
|
91
|
+
### HTTP Proxy
|
|
92
|
+
- Intercept and log HTTP traffic
|
|
93
|
+
- Request replay
|
|
94
|
+
- CA cert generation for HTTPS
|
|
95
|
+
- Credential redaction in logs
|
|
96
|
+
|
|
97
|
+
## TUI Shortcuts
|
|
98
|
+
|
|
99
|
+
| Key | Action | Key | Action |
|
|
100
|
+
|-----|--------|-----|--------|
|
|
101
|
+
| `/` | Scan domains | `Tab` | Cycle intel tabs |
|
|
102
|
+
| `e` | TLD expansion | `n` | Toggle recon mode |
|
|
103
|
+
| `f` | Load from file | `s` | Cycle status filter |
|
|
104
|
+
| `v` | Variations | `o/O` | Sort field/order |
|
|
105
|
+
| `d` | Suggestions | `Space` | Tag/untag |
|
|
106
|
+
| `r` | Register | `R` | Bulk register |
|
|
107
|
+
| `S` | Snipe domain | `D` | Drop catch |
|
|
108
|
+
| `p` | Add to portfolio | `P` | Portfolio dashboard |
|
|
109
|
+
| `M` | Marketplace | `w` | Watch tagged |
|
|
110
|
+
| `h` | Scan history | `c` | Clear cache |
|
|
111
|
+
| `x` | Export CSV/JSON | `?` | Help |
|
|
112
|
+
| `Ctrl+S` | Save session | `q` | Quit |
|
|
99
113
|
|
|
100
114
|
## CLI Commands
|
|
101
115
|
|
|
102
|
-
| Command | Description |
|
|
103
|
-
|---------|-------------|
|
|
104
|
-
| `domain-sniper` | Interactive TUI mode |
|
|
105
|
-
| `domain-sniper example.com --headless` | Quick check |
|
|
106
|
-
| `domain-sniper --headless --json example.com` | JSON output |
|
|
107
|
-
| `domain-sniper recon example.com` | Full security recon |
|
|
108
|
-
| `domain-sniper suggest startup` | Generate domain name ideas |
|
|
109
|
-
| `domain-sniper portfolio --dashboard` | Portfolio overview |
|
|
110
|
-
| `domain-sniper portfolio --health` | Run health checks |
|
|
111
|
-
| `domain-sniper portfolio --pnl` | Profit & loss report |
|
|
112
|
-
| `domain-sniper portfolio --renewals` | Renewal calendar |
|
|
113
|
-
| `domain-sniper portfolio --export-csv domains.csv` | Export portfolio |
|
|
114
|
-
| `domain-sniper expiring --tld com` | Browse expiring domains |
|
|
115
|
-
| `domain-sniper dropcatch example.com` | Auto-snipe dropping domain |
|
|
116
|
-
| `domain-sniper market browse` | Browse marketplace |
|
|
117
|
-
| `domain-sniper market list example.com -p 500` | List for sale |
|
|
118
|
-
| `domain-sniper proxy start` | Start HTTP intercept proxy |
|
|
119
|
-
| `domain-sniper snipe add example.com` | Add snipe target |
|
|
120
|
-
| `domain-sniper db --stats` | Database statistics |
|
|
121
|
-
| `domain-sniper config --show` | View configuration |
|
|
122
|
-
| `domain-sniper completions zsh` | Shell completions |
|
|
123
|
-
|
|
124
|
-
## Marketplace
|
|
125
|
-
|
|
126
|
-
A self-hostable domain marketplace with authentication, listings, offers, messaging, and domain ownership verification.
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
# Start the marketplace server
|
|
130
|
-
bun run serve
|
|
131
|
-
|
|
132
|
-
# Browse from CLI
|
|
133
|
-
domain-sniper market browse
|
|
134
|
-
|
|
135
|
-
# List a domain for sale
|
|
136
|
-
domain-sniper market list mydomain.com --price 500
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
See [marketplace/README.md](marketplace/README.md) for full API documentation, verification methods, and self-hosting instructions.
|
|
140
|
-
|
|
141
|
-
## HTTP Proxy
|
|
142
|
-
|
|
143
|
-
Intercept and inspect HTTP/HTTPS traffic for domain intelligence gathering.
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# Start the proxy
|
|
147
|
-
domain-sniper proxy start
|
|
148
|
-
|
|
149
|
-
# Start with custom port
|
|
150
|
-
domain-sniper proxy start --port 8888
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
The proxy generates a local CA certificate at `~/.domain-sniper/ca/`. Install it in your browser to inspect HTTPS traffic.
|
|
154
|
-
|
|
155
|
-
## Snipe Engine
|
|
156
|
-
|
|
157
|
-
Automatically register domains the moment they become available.
|
|
158
|
-
|
|
159
116
|
```bash
|
|
160
|
-
#
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
#
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
#
|
|
167
|
-
|
|
117
|
+
# Scanning
|
|
118
|
+
domsniper example.com --headless # Quick check
|
|
119
|
+
domsniper --headless --json example.com # JSON output
|
|
120
|
+
domsniper --headless --recon example.com # With security recon
|
|
121
|
+
domsniper recon example.com # Standalone recon report
|
|
122
|
+
|
|
123
|
+
# Domain discovery
|
|
124
|
+
domsniper suggest startup --check # Generate + check ideas
|
|
125
|
+
domsniper expiring --tld com # Browse expiring domains
|
|
126
|
+
|
|
127
|
+
# Sniping
|
|
128
|
+
domsniper snipe add example.com # Add snipe target
|
|
129
|
+
domsniper snipe list # List targets
|
|
130
|
+
domsniper snipe run # Start snipe engine
|
|
131
|
+
domsniper dropcatch example.com # Direct drop catch
|
|
132
|
+
|
|
133
|
+
# Portfolio
|
|
134
|
+
domsniper portfolio --dashboard # Overview
|
|
135
|
+
domsniper portfolio --pnl # Profit & loss
|
|
136
|
+
domsniper portfolio --health # Health check all domains
|
|
137
|
+
domsniper portfolio --renewals # Renewal calendar
|
|
138
|
+
domsniper portfolio --export-csv out.csv # Export
|
|
139
|
+
|
|
140
|
+
# Marketplace
|
|
141
|
+
domsniper market signup # Create account
|
|
142
|
+
domsniper market browse # Browse listings
|
|
143
|
+
domsniper market list example.com -p 500 # List for sale
|
|
144
|
+
domsniper market offer -l 1 -a 300 # Make offer
|
|
145
|
+
|
|
146
|
+
# Proxy
|
|
147
|
+
domsniper proxy start --port 8080 # Start interceptor
|
|
148
|
+
domsniper proxy history --host target.com # Browse captured traffic
|
|
149
|
+
domsniper proxy replay 42 # Replay a request
|
|
150
|
+
|
|
151
|
+
# Utilities
|
|
152
|
+
domsniper db --stats # Database stats
|
|
153
|
+
domsniper config --show # View config
|
|
154
|
+
domsniper check-update # Check for updates
|
|
155
|
+
domsniper completions zsh # Shell completions
|
|
168
156
|
```
|
|
169
157
|
|
|
170
|
-
Requires a registrar API key configured in `.env`.
|
|
171
|
-
|
|
172
158
|
## Configuration
|
|
173
159
|
|
|
174
|
-
Copy `.env.example` to `.env` and configure:
|
|
175
|
-
|
|
176
160
|
```bash
|
|
177
161
|
cp .env.example .env
|
|
178
162
|
```
|
|
179
163
|
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
164
|
+
Key settings:
|
|
165
|
+
- `REGISTRAR_PROVIDER` / `REGISTRAR_API_KEY` -- For domain registration (GoDaddy/Namecheap/Cloudflare)
|
|
166
|
+
- `MARKET_URL` -- Marketplace server URL
|
|
167
|
+
- `S3_BUCKET` / `S3_ACCESS_KEY_ID` -- Cloud export storage
|
|
183
168
|
|
|
184
|
-
### Marketplace
|
|
185
|
-
- Set `BETTER_AUTH_SECRET` (min 32 chars) for auth
|
|
186
|
-
- Set `BETTER_AUTH_URL` for server URL
|
|
187
|
-
- Set `MARKET_URL` to point CLI at your marketplace instance
|
|
188
|
-
|
|
189
|
-
### Persistent config
|
|
190
169
|
```bash
|
|
191
|
-
|
|
192
|
-
|
|
170
|
+
# Persistent config
|
|
171
|
+
domsniper config --set concurrency=10
|
|
172
|
+
domsniper config --set notifications.webhookUrl=https://hooks.slack.com/...
|
|
193
173
|
```
|
|
194
174
|
|
|
195
|
-
## Self-Hosting the Marketplace
|
|
196
|
-
|
|
197
|
-
1. Clone the repo
|
|
198
|
-
2. Set `BETTER_AUTH_SECRET` and `BETTER_AUTH_URL` in `.env`
|
|
199
|
-
3. Run `bun run serve`
|
|
200
|
-
4. Point CLI clients to your server: `domain-sniper market login --server https://your-server.com`
|
|
201
|
-
|
|
202
|
-
For production, consider PostgreSQL, rate limiting, and TLS. See [marketplace/README.md](marketplace/README.md).
|
|
203
|
-
|
|
204
175
|
## Architecture
|
|
205
176
|
|
|
206
177
|
```
|
|
207
|
-
src/core/
|
|
208
|
-
src/
|
|
209
|
-
src/
|
|
210
|
-
src/
|
|
211
|
-
src/
|
|
212
|
-
|
|
178
|
+
src/core/ Portable business logic (40+ modules)
|
|
179
|
+
src/core/db.ts SQLite database (scans, portfolio, cache, snipes)
|
|
180
|
+
src/proxy/ HTTP/HTTPS interceptor
|
|
181
|
+
src/app.tsx TUI (React + @opentui)
|
|
182
|
+
src/index.tsx CLI (Commander)
|
|
183
|
+
src/market-client.ts Marketplace API client
|
|
213
184
|
```
|
|
214
185
|
|
|
215
|
-
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
216
|
-
|
|
217
|
-
## Security
|
|
218
|
-
|
|
219
|
-
- Registrar API keys never leave your machine
|
|
220
|
-
- All inputs validated, all queries parameterized
|
|
221
|
-
- Shell commands use `execFile` (no injection)
|
|
222
|
-
- File paths confined to allowed directories
|
|
223
|
-
|
|
224
|
-
See [docs/SECURITY.md](docs/SECURITY.md) for the full security model.
|
|
225
|
-
|
|
226
|
-
## Tech Stack
|
|
227
|
-
|
|
228
|
-
- **Runtime:** Bun
|
|
229
|
-
- **Language:** TypeScript (strict mode)
|
|
230
|
-
- **TUI:** @opentui/react
|
|
231
|
-
- **Database:** SQLite (bun:sqlite)
|
|
232
|
-
- **Auth:** Better Auth
|
|
233
|
-
- **Tests:** bun:test
|
|
186
|
+
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) and [docs/SECURITY.md](docs/SECURITY.md).
|
|
234
187
|
|
|
235
188
|
## Contributing
|
|
236
189
|
|
|
237
|
-
1. Fork
|
|
238
|
-
2.
|
|
239
|
-
3. Write tests
|
|
240
|
-
4.
|
|
241
|
-
5.
|
|
242
|
-
6. Submit a pull request
|
|
190
|
+
1. Fork and clone
|
|
191
|
+
2. `bun install`
|
|
192
|
+
3. Write tests: `bun test`
|
|
193
|
+
4. Type check: `bunx tsc --noEmit`
|
|
194
|
+
5. Submit PR
|
|
243
195
|
|
|
244
196
|
## License
|
|
245
197
|
|
|
246
|
-
MIT
|
|
198
|
+
MIT
|
package/package.json
CHANGED
|
@@ -2,9 +2,18 @@ import { assertValidDomain } from "../validate.js";
|
|
|
2
2
|
import type { HttpProbeResult } from "../types.js";
|
|
3
3
|
|
|
4
4
|
const PARKED_INDICATORS = [
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"this domain
|
|
5
|
+
"this domain is parked",
|
|
6
|
+
"domain is for sale",
|
|
7
|
+
"buy this domain",
|
|
8
|
+
"domain parking",
|
|
9
|
+
"this domain may be for sale",
|
|
10
|
+
"hugedomains.com",
|
|
11
|
+
"dan.com/buy-domain",
|
|
12
|
+
"this domain is for sale",
|
|
13
|
+
"under construction",
|
|
14
|
+
"parked by",
|
|
15
|
+
"domain has expired",
|
|
16
|
+
"renew this domain",
|
|
8
17
|
];
|
|
9
18
|
|
|
10
19
|
export async function httpProbe(domain: string): Promise<HttpProbeResult> {
|
|
@@ -24,14 +24,14 @@ const HTML_PATTERNS: { name: string; category: string; pattern: RegExp }[] = [
|
|
|
24
24
|
{ name: "WordPress", category: "CMS", pattern: /wp-content|wp-includes|wordpress/i },
|
|
25
25
|
{ name: "Drupal", category: "CMS", pattern: /drupal|sites\/default\/files/i },
|
|
26
26
|
{ name: "Joomla", category: "CMS", pattern: /joomla|\/media\/system\/js/i },
|
|
27
|
-
{ name: "Shopify", category: "CMS", pattern: /
|
|
27
|
+
{ name: "Shopify", category: "CMS", pattern: /cdn\.shopify\.com|myshopify\.com|Shopify\.theme/i },
|
|
28
28
|
{ name: "Squarespace", category: "CMS", pattern: /squarespace|sqsp/i },
|
|
29
29
|
{ name: "Wix", category: "CMS", pattern: /wix\.com|wixstatic\.com/i },
|
|
30
30
|
{ name: "Webflow", category: "CMS", pattern: /webflow/i },
|
|
31
31
|
{ name: "Ghost", category: "CMS", pattern: /ghost\.io|ghost-api/i },
|
|
32
32
|
{ name: "Hugo", category: "CMS", pattern: /hugo-/i },
|
|
33
33
|
// Frameworks
|
|
34
|
-
{ name: "React", category: "Framework", pattern: /react|
|
|
34
|
+
{ name: "React", category: "Framework", pattern: /react\.production\.min|reactDOM|data-reactroot|__react/i },
|
|
35
35
|
{ name: "Next.js", category: "Framework", pattern: /_next\/|__NEXT_DATA__/i },
|
|
36
36
|
{ name: "Vue.js", category: "Framework", pattern: /vue\.js|__vue|nuxt/i },
|
|
37
37
|
{ name: "Nuxt", category: "Framework", pattern: /__nuxt|nuxt\.js/i },
|
package/src/core/whois.ts
CHANGED
|
@@ -83,15 +83,15 @@ function parseWhoisResponse(domain: string, raw: string): WhoisResult {
|
|
|
83
83
|
result.registrar = line.split(":").slice(1).join(":").trim();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
// Created date
|
|
86
|
+
// Created date — prefer "Creation Date:" (registrar-level) over "created:" (TLD-level)
|
|
87
87
|
if (
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
lower.startsWith("created date:") ||
|
|
92
|
-
lower.startsWith("registration date:"))
|
|
88
|
+
lower.startsWith("creation date:") ||
|
|
89
|
+
lower.startsWith("created date:") ||
|
|
90
|
+
lower.startsWith("registration date:")
|
|
93
91
|
) {
|
|
94
92
|
result.createdDate = line.split(":").slice(1).join(":").trim();
|
|
93
|
+
} else if (!result.createdDate && lower.startsWith("created:")) {
|
|
94
|
+
result.createdDate = line.split(":").slice(1).join(":").trim();
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
// Updated date
|
package/src/index.tsx
CHANGED
|
@@ -43,7 +43,7 @@ const program = new Command();
|
|
|
43
43
|
program
|
|
44
44
|
.name("dsniper")
|
|
45
45
|
.description("All-in-one domain intelligence toolkit — availability checker, security recon, portfolio manager")
|
|
46
|
-
.version("0.1.
|
|
46
|
+
.version("0.1.1")
|
|
47
47
|
.argument("[domains...]", "Domain(s) to check")
|
|
48
48
|
.option("-f, --file <path>", "Path to file with domains (one per line)")
|
|
49
49
|
.option("-a, --auto-register", "Automatically register available domains", false)
|