@springmusk/who-is
Version:
Professional WHOIS data scraping module with structured parsing and batch processing capabilities
200 lines (147 loc) • 4.87 kB
Markdown
# who-is
[](https://opensource.org/licenses/MIT)
[](http://www.typescriptlang.org/)
A professional WHOIS data scraping module with structured parsing and batch processing capabilities.
## Features
- 🔍 **WHOIS Scraping** - Extract WHOIS data from domains
- 📊 **Structured Parsing** - Convert raw WHOIS data into structured JSON
- 🚀 **Batch Processing** - Process multiple domains concurrently
- 🔄 **Automatic Retry** - Built-in retry mechanism for failed requests
- ⚡ **TypeScript Support** - Full type definitions included
- 🛡️ **Error Handling** - Custom error classes for better error management
## Installation
```bash
npm i @springmusk/who-is
```
## Quick Start
```javascript
const { Whois } = require('@springmusk/who-is');
const scraper = new Whois();
async function main() {
try {
// Single domain lookup
const result = await scraper.scrape('example.com');
console.log('Domain info:', result);
// Batch processing
const batchResults = await scraper.scrapeMultiple([
'example.com',
'github.com',
'stackoverflow.com'
]);
console.log('Batch results:', batchResults);
} catch (error) {
console.error('Error:', error.message);
}
}
main();
```
### TypeScript Usage
```typescript
import { Whois, WhoisResult, WhoisConfig } from '@springmusk/who-is';
const scraper = new Whois({
outputFormat: 'json',
http: {
timeout: 30000,
maxRetries: 3
}
});
const result: WhoisResult = await scraper.scrape('example.com');
```
## API Reference
### Whois
The main class for WHOIS data scraping operations.
#### Constructor
```typescript
constructor(config?: WhoisConfig)
```
Configuration options:
- `outputFormat`: 'json' | 'raw' (default: 'json')
- `http`: HTTP client configuration
- `timeout`: Request timeout in ms (default: 30000)
- `maxRetries`: Maximum retry attempts (default: 3)
- `retryDelay`: Delay between retries in ms (default: 1000)
- `userAgent`: Custom user agent string
#### Methods
##### scrape(domain: string): Promise<WhoisResult>
Scrapes WHOIS data for a single domain.
**Parameters:**
- `domain` (string): The domain name to lookup
**Returns:** Promise resolving to `WhoisResult`
**Throws:**
- `WhoisScrapingError`: When scraping fails
- `WhoisParsingError`: When data parsing fails
##### scrapeMultiple(domains: string[], options?: ScrapingOptions): Promise<BatchResult>
Scrapes WHOIS data for multiple domains.
**Parameters:**
- `domains` (string[]): Array of domain names
- `options`: Optional configuration
- `concurrent`: Number of concurrent requests (default: 3)
- `continueOnError`: Continue on error (default: true)
### Interfaces
```typescript
interface WhoisConfig {
outputFormat?: 'json' | 'raw';
baseUrl?: string;
http?: HttpClientConfig;
}
interface WhoisResult {
domain: string;
scrapedAt: string;
pageTitle: string;
registry: ParsedWhoisData | string | null;
registrar: ParsedWhoisData | string | null;
}
interface BatchResult {
results: WhoisResult[];
errors?: BatchError[];
summary: {
total: number;
successful: number;
failed: number;
};
}
```
## Error Handling
```javascript
const { Whois, WhoisScrapingError, WhoisParsingError } = require('@springmusk/who-is');
try {
const result = await scraper.scrape('example.com');
} catch (error) {
if (error instanceof WhoisScrapingError) {
console.error('Scraping failed:', error.message);
} else if (error instanceof WhoisParsingError) {
console.error('Parsing failed:', error.message);
}
}
```
## Example: Batch Processing with Error Handling
```javascript
async function safeBatchProcess(domains) {
const scraper = new Whois({
http: { timeout: 30000, maxRetries: 2 }
});
const results = await scraper.scrapeMultiple(domains, {
concurrent: 2,
continueOnError: true
});
// Process successful results
results.results.forEach(result => {
console.log(`✅ ${result.domain}: ${result.registry?.registrar || 'N/A'}`);
});
// Handle errors
results.errors?.forEach(error => {
console.error(`❌ ${error.domain}: ${error.error}`);
});
return results;
}
```
## Requirements
- Node.js >= 14.0.0
- npm >= 6.0.0
## License
MIT
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## Support
- 🐛 **Bug Reports**: [GitHub Issues](https://github.com/springmusk026/who-is/issues)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/springmusk026/who-is/discussions)