rdapify 0.1.0 → 0.1.2
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/CHANGELOG.md +316 -0
- package/README.md +456 -69
- package/dist/application/client/RDAPClient.d.ts +53 -0
- package/dist/application/client/RDAPClient.d.ts.map +1 -0
- package/dist/application/client/RDAPClient.js +163 -0
- package/dist/application/client/RDAPClient.js.map +1 -0
- package/dist/application/client/index.d.ts +2 -0
- package/dist/application/client/index.d.ts.map +1 -0
- package/dist/application/client/index.js +6 -0
- package/dist/application/client/index.js.map +1 -0
- package/dist/application/services/BatchProcessor.d.ts +27 -0
- package/dist/application/services/BatchProcessor.d.ts.map +1 -0
- package/dist/application/services/BatchProcessor.js +89 -0
- package/dist/application/services/BatchProcessor.js.map +1 -0
- package/dist/application/services/QueryOrchestrator.d.ts +27 -0
- package/dist/application/services/QueryOrchestrator.d.ts.map +1 -0
- package/dist/application/services/QueryOrchestrator.js +201 -0
- package/dist/application/services/QueryOrchestrator.js.map +1 -0
- package/dist/application/services/QueryPriority.d.ts +35 -0
- package/dist/application/services/QueryPriority.d.ts.map +1 -0
- package/dist/application/services/QueryPriority.js +114 -0
- package/dist/application/services/QueryPriority.js.map +1 -0
- package/dist/application/services/index.d.ts +3 -0
- package/dist/application/services/index.d.ts.map +1 -0
- package/dist/application/services/index.js +8 -0
- package/dist/application/services/index.js.map +1 -0
- package/dist/core/ports/bootstrap.port.d.ts +8 -0
- package/dist/core/ports/bootstrap.port.d.ts.map +1 -0
- package/dist/core/ports/bootstrap.port.js +3 -0
- package/dist/core/ports/bootstrap.port.js.map +1 -0
- package/dist/core/ports/cache.port.d.ts +10 -0
- package/dist/core/ports/cache.port.d.ts.map +1 -0
- package/dist/core/ports/cache.port.js +3 -0
- package/dist/core/ports/cache.port.js.map +1 -0
- package/dist/core/ports/fetcher.port.d.ts +5 -0
- package/dist/core/ports/fetcher.port.d.ts.map +1 -0
- package/dist/core/ports/fetcher.port.js +3 -0
- package/dist/core/ports/fetcher.port.js.map +1 -0
- package/dist/core/ports/index.d.ts +6 -0
- package/dist/core/ports/index.d.ts.map +1 -0
- package/dist/core/ports/index.js +9 -0
- package/dist/core/ports/index.js.map +1 -0
- package/dist/core/ports/normalizer.port.d.ts +5 -0
- package/dist/core/ports/normalizer.port.d.ts.map +1 -0
- package/dist/core/ports/normalizer.port.js +3 -0
- package/dist/core/ports/normalizer.port.js.map +1 -0
- package/dist/core/ports/pii-redactor.port.d.ts +6 -0
- package/dist/core/ports/pii-redactor.port.d.ts.map +1 -0
- package/dist/core/ports/pii-redactor.port.js +3 -0
- package/dist/core/ports/pii-redactor.port.js.map +1 -0
- package/dist/index.d.ts +26 -7
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -16
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/cache/CacheManager.d.ts +28 -0
- package/dist/infrastructure/cache/CacheManager.d.ts.map +1 -0
- package/dist/infrastructure/cache/CacheManager.js +117 -0
- package/dist/infrastructure/cache/CacheManager.js.map +1 -0
- package/dist/infrastructure/cache/InMemoryCache.d.ts +24 -0
- package/dist/infrastructure/cache/InMemoryCache.d.ts.map +1 -0
- package/dist/infrastructure/cache/InMemoryCache.js +96 -0
- package/dist/infrastructure/cache/InMemoryCache.js.map +1 -0
- package/dist/infrastructure/cache/PersistentCache.d.ts +39 -0
- package/dist/infrastructure/cache/PersistentCache.d.ts.map +1 -0
- package/dist/infrastructure/cache/PersistentCache.js +194 -0
- package/dist/infrastructure/cache/PersistentCache.js.map +1 -0
- package/dist/infrastructure/cache/index.d.ts +3 -0
- package/dist/infrastructure/cache/index.d.ts.map +1 -0
- package/dist/infrastructure/cache/index.js +8 -0
- package/dist/infrastructure/cache/index.js.map +1 -0
- package/dist/infrastructure/http/AuthenticationManager.d.ts +38 -0
- package/dist/infrastructure/http/AuthenticationManager.d.ts.map +1 -0
- package/dist/infrastructure/http/AuthenticationManager.js +99 -0
- package/dist/infrastructure/http/AuthenticationManager.js.map +1 -0
- package/dist/infrastructure/http/BootstrapDiscovery.d.ts +21 -0
- package/dist/infrastructure/http/BootstrapDiscovery.d.ts.map +1 -0
- package/dist/infrastructure/http/BootstrapDiscovery.js +130 -0
- package/dist/infrastructure/http/BootstrapDiscovery.js.map +1 -0
- package/dist/infrastructure/http/CompressionManager.d.ts +30 -0
- package/dist/infrastructure/http/CompressionManager.d.ts.map +1 -0
- package/dist/infrastructure/http/CompressionManager.js +86 -0
- package/dist/infrastructure/http/CompressionManager.js.map +1 -0
- package/dist/infrastructure/http/ConnectionPool.d.ts +25 -0
- package/dist/infrastructure/http/ConnectionPool.d.ts.map +1 -0
- package/dist/infrastructure/http/ConnectionPool.js +101 -0
- package/dist/infrastructure/http/ConnectionPool.js.map +1 -0
- package/dist/infrastructure/http/Fetcher.d.ts +29 -0
- package/dist/infrastructure/http/Fetcher.d.ts.map +1 -0
- package/dist/infrastructure/http/Fetcher.js +114 -0
- package/dist/infrastructure/http/Fetcher.js.map +1 -0
- package/dist/infrastructure/http/Normalizer.d.ts +11 -0
- package/dist/infrastructure/http/Normalizer.d.ts.map +1 -0
- package/dist/infrastructure/http/Normalizer.js +151 -0
- package/dist/infrastructure/http/Normalizer.js.map +1 -0
- package/dist/infrastructure/http/ProxyManager.d.ts +43 -0
- package/dist/infrastructure/http/ProxyManager.d.ts.map +1 -0
- package/dist/infrastructure/http/ProxyManager.js +87 -0
- package/dist/infrastructure/http/ProxyManager.js.map +1 -0
- package/dist/infrastructure/http/RateLimiter.d.ts +28 -0
- package/dist/infrastructure/http/RateLimiter.d.ts.map +1 -0
- package/dist/infrastructure/http/RateLimiter.js +101 -0
- package/dist/infrastructure/http/RateLimiter.js.map +1 -0
- package/dist/infrastructure/http/RetryStrategy.d.ts +58 -0
- package/dist/infrastructure/http/RetryStrategy.d.ts.map +1 -0
- package/dist/infrastructure/http/RetryStrategy.js +136 -0
- package/dist/infrastructure/http/RetryStrategy.js.map +1 -0
- package/dist/infrastructure/http/index.d.ts +4 -0
- package/dist/infrastructure/http/index.d.ts.map +1 -0
- package/dist/infrastructure/http/index.js +10 -0
- package/dist/infrastructure/http/index.js.map +1 -0
- package/dist/infrastructure/logging/Logger.d.ts +49 -0
- package/dist/infrastructure/logging/Logger.d.ts.map +1 -0
- package/dist/infrastructure/logging/Logger.js +126 -0
- package/dist/infrastructure/logging/Logger.js.map +1 -0
- package/dist/infrastructure/monitoring/MetricsCollector.d.ts +53 -0
- package/dist/infrastructure/monitoring/MetricsCollector.d.ts.map +1 -0
- package/dist/infrastructure/monitoring/MetricsCollector.js +109 -0
- package/dist/infrastructure/monitoring/MetricsCollector.js.map +1 -0
- package/dist/infrastructure/security/PIIRedactor.d.ts +13 -0
- package/dist/infrastructure/security/PIIRedactor.d.ts.map +1 -0
- package/dist/infrastructure/security/PIIRedactor.js +83 -0
- package/dist/infrastructure/security/PIIRedactor.js.map +1 -0
- package/dist/infrastructure/security/SSRFProtection.d.ts +13 -0
- package/dist/infrastructure/security/SSRFProtection.d.ts.map +1 -0
- package/dist/infrastructure/security/SSRFProtection.js +142 -0
- package/dist/infrastructure/security/SSRFProtection.js.map +1 -0
- package/dist/infrastructure/security/index.d.ts +3 -0
- package/dist/infrastructure/security/index.d.ts.map +1 -0
- package/dist/infrastructure/security/index.js +8 -0
- package/dist/infrastructure/security/index.js.map +1 -0
- package/dist/shared/constants/http.constants.d.ts +26 -0
- package/dist/shared/constants/http.constants.d.ts.map +1 -0
- package/dist/shared/constants/http.constants.js +29 -0
- package/dist/shared/constants/http.constants.js.map +1 -0
- package/dist/shared/constants/index.d.ts +3 -0
- package/dist/shared/constants/index.d.ts.map +1 -0
- package/dist/shared/constants/index.js +6 -0
- package/dist/shared/constants/index.js.map +1 -0
- package/dist/shared/constants/rdap.constants.d.ts +9 -0
- package/dist/shared/constants/rdap.constants.d.ts.map +1 -0
- package/dist/shared/constants/rdap.constants.js +21 -0
- package/dist/shared/constants/rdap.constants.js.map +1 -0
- package/dist/shared/errors/base.error.d.ts +44 -0
- package/dist/shared/errors/base.error.d.ts.map +1 -0
- package/dist/shared/errors/base.error.js +122 -0
- package/dist/shared/errors/base.error.js.map +1 -0
- package/dist/shared/errors/index.d.ts +2 -0
- package/dist/shared/errors/index.d.ts.map +1 -0
- package/dist/shared/errors/index.js +5 -0
- package/dist/shared/errors/index.js.map +1 -0
- package/dist/shared/types/entities.d.ts +50 -0
- package/dist/shared/types/entities.d.ts.map +1 -0
- package/dist/shared/types/entities.js +3 -0
- package/dist/shared/types/entities.js.map +1 -0
- package/dist/shared/types/enums.d.ts +10 -0
- package/dist/shared/types/enums.d.ts.map +1 -0
- package/dist/shared/types/enums.js +3 -0
- package/dist/shared/types/enums.js.map +1 -0
- package/dist/shared/types/errors.d.ts +40 -0
- package/dist/shared/types/errors.d.ts.map +1 -0
- package/dist/shared/types/errors.js +101 -0
- package/dist/shared/types/errors.js.map +1 -0
- package/dist/shared/types/generics.d.ts +32 -0
- package/dist/shared/types/generics.d.ts.map +1 -0
- package/dist/shared/types/generics.js +3 -0
- package/dist/shared/types/generics.js.map +1 -0
- package/dist/shared/types/index.d.ts +4 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +3 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/options.d.ts +60 -0
- package/dist/shared/types/options.d.ts.map +1 -0
- package/dist/shared/types/options.js +50 -0
- package/dist/shared/types/options.js.map +1 -0
- package/dist/shared/types/responses.d.ts +76 -0
- package/dist/shared/types/responses.d.ts.map +1 -0
- package/dist/shared/types/responses.js +3 -0
- package/dist/shared/types/responses.js.map +1 -0
- package/dist/shared/utils/enhanced-validators.d.ts +18 -0
- package/dist/shared/utils/enhanced-validators.d.ts.map +1 -0
- package/dist/shared/utils/enhanced-validators.js +162 -0
- package/dist/shared/utils/enhanced-validators.js.map +1 -0
- package/dist/shared/utils/helpers/async.d.ts +9 -0
- package/dist/shared/utils/helpers/async.d.ts.map +1 -0
- package/dist/shared/utils/helpers/async.js +47 -0
- package/dist/shared/utils/helpers/async.js.map +1 -0
- package/dist/shared/utils/helpers/cache.d.ts +2 -0
- package/dist/shared/utils/helpers/cache.d.ts.map +1 -0
- package/dist/shared/utils/helpers/cache.js +7 -0
- package/dist/shared/utils/helpers/cache.js.map +1 -0
- package/dist/shared/utils/helpers/format.d.ts +3 -0
- package/dist/shared/utils/helpers/format.d.ts.map +1 -0
- package/dist/shared/utils/helpers/format.js +22 -0
- package/dist/shared/utils/helpers/format.js.map +1 -0
- package/dist/shared/utils/helpers/http.d.ts +2 -0
- package/dist/shared/utils/helpers/http.d.ts.map +1 -0
- package/dist/shared/utils/helpers/http.js +17 -0
- package/dist/shared/utils/helpers/http.js.map +1 -0
- package/dist/shared/utils/helpers/index.d.ts +8 -0
- package/dist/shared/utils/helpers/index.d.ts.map +1 -0
- package/dist/shared/utils/helpers/index.js +29 -0
- package/dist/shared/utils/helpers/index.js.map +1 -0
- package/dist/shared/utils/helpers/object.d.ts +3 -0
- package/dist/shared/utils/helpers/object.d.ts.map +1 -0
- package/dist/shared/utils/helpers/object.js +24 -0
- package/dist/shared/utils/helpers/object.js.map +1 -0
- package/dist/shared/utils/helpers/runtime.d.ts +6 -0
- package/dist/shared/utils/helpers/runtime.d.ts.map +1 -0
- package/dist/shared/utils/helpers/runtime.js +33 -0
- package/dist/shared/utils/helpers/runtime.js.map +1 -0
- package/dist/shared/utils/helpers/string.d.ts +4 -0
- package/dist/shared/utils/helpers/string.d.ts.map +1 -0
- package/dist/shared/utils/helpers/string.js +29 -0
- package/dist/shared/utils/helpers/string.js.map +1 -0
- package/dist/shared/utils/validators/asn.d.ts +3 -0
- package/dist/shared/utils/validators/asn.d.ts.map +1 -0
- package/dist/shared/utils/validators/asn.js +30 -0
- package/dist/shared/utils/validators/asn.js.map +1 -0
- package/dist/shared/utils/validators/domain.d.ts +3 -0
- package/dist/shared/utils/validators/domain.d.ts.map +1 -0
- package/dist/shared/utils/validators/domain.js +34 -0
- package/dist/shared/utils/validators/domain.js.map +1 -0
- package/dist/shared/utils/validators/index.d.ts +5 -0
- package/dist/shared/utils/validators/index.d.ts.map +1 -0
- package/dist/shared/utils/validators/index.js +19 -0
- package/dist/shared/utils/validators/index.js.map +1 -0
- package/dist/shared/utils/validators/ip.d.ts +5 -0
- package/dist/shared/utils/validators/ip.d.ts.map +1 -0
- package/dist/shared/utils/validators/ip.js +55 -0
- package/dist/shared/utils/validators/ip.js.map +1 -0
- package/dist/shared/utils/validators/network.d.ts +4 -0
- package/dist/shared/utils/validators/network.d.ts.map +1 -0
- package/dist/shared/utils/validators/network.js +48 -0
- package/dist/shared/utils/validators/network.js.map +1 -0
- package/package.json +108 -20
package/README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# RDAPify - Unified, Secure, High-Performance RDAP Client for Enterprise Applications
|
|
2
2
|
|
|
3
|
+
> **🎉 LATEST RELEASE**: v0.1.2 — Production-ready with interactive playground, advanced features including authentication, proxy support, compression, retry strategies, and comprehensive monitoring. See [What's New in v0.1.2](#-whats-new-in-v012) below.
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/rdapify)
|
|
4
6
|
[](LICENSE)
|
|
5
|
-
[](SECURITY.md)
|
|
8
|
+
[](#)
|
|
9
|
+
[](https://rdapify.com)
|
|
10
|
+
[](https://github.com/rdapify/RDAPify)
|
|
8
11
|
|
|
9
12
|
**RDAPify** unifies RDAP queries across all global registries (Verisign, ARIN, RIPE, APNIC, LACNIC) with robust security protection, exceptional performance, and an integrated developer experience. This isn't just another RDAP client — it's a complete platform for processing registration data securely.
|
|
10
13
|
|
|
@@ -23,10 +26,11 @@ Direct RDAP queries are complex — each registry uses different formats, rate l
|
|
|
23
26
|
```
|
|
24
27
|
|
|
25
28
|
RDAPify intelligently addresses these challenges:
|
|
29
|
+
|
|
26
30
|
- ✅ **Data Normalization**: Consistent response regardless of source registry
|
|
27
31
|
- ✅ **SSRF Protection**: Prevent attacks on internal infrastructure
|
|
28
32
|
- ✅ **Exceptional Performance**: Smart caching, parallel processing, memory optimization
|
|
29
|
-
- ✅ **
|
|
33
|
+
- ✅ **Node.js Compatibility**: Verified working on Node.js (target: 16+; Bun, Deno, Cloudflare Workers: untested)
|
|
30
34
|
- ✅ **GDPR-ready**: Built-in tools for automatically redacting personal data
|
|
31
35
|
|
|
32
36
|
## 📦 Quick Installation
|
|
@@ -40,25 +44,23 @@ yarn add rdapify
|
|
|
40
44
|
|
|
41
45
|
# Using pnpm
|
|
42
46
|
pnpm add rdapify
|
|
47
|
+
```
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
**Experimental (untested):**
|
|
50
|
+
```bash
|
|
51
|
+
# Using Bun (untested)
|
|
45
52
|
bun add rdapify
|
|
46
53
|
```
|
|
47
54
|
|
|
48
55
|
## ⚡ Get Started in 30 Seconds
|
|
49
56
|
|
|
57
|
+
### Basic Usage
|
|
58
|
+
|
|
50
59
|
```typescript
|
|
51
60
|
import { RDAPClient } from 'rdapify';
|
|
52
61
|
|
|
53
|
-
// Create a
|
|
54
|
-
const client = new RDAPClient(
|
|
55
|
-
cache: true, // Automatic caching (1 hour TTL)
|
|
56
|
-
redactPII: true, // Automatically redact personal information
|
|
57
|
-
retry: { // Smart retries for transient failures
|
|
58
|
-
maxAttempts: 3,
|
|
59
|
-
backoff: 'exponential'
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
+
// Create a client with default settings
|
|
63
|
+
const client = new RDAPClient();
|
|
62
64
|
|
|
63
65
|
// Query a domain
|
|
64
66
|
const result = await client.domain('example.com');
|
|
@@ -68,12 +70,35 @@ console.log({
|
|
|
68
70
|
registrar: result.registrar?.name,
|
|
69
71
|
status: result.status,
|
|
70
72
|
nameservers: result.nameservers,
|
|
71
|
-
created: result.events.find(e => e.type === 'created')?.date,
|
|
72
|
-
expires: result.events.find(e => e.type === 'expiration')?.date
|
|
73
|
+
created: result.events.find((e) => e.type === 'created')?.date,
|
|
74
|
+
expires: result.events.find((e) => e.type === 'expiration')?.date,
|
|
73
75
|
});
|
|
74
76
|
```
|
|
75
77
|
|
|
76
|
-
|
|
78
|
+
### With Security & Performance Options
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { RDAPClient } from 'rdapify';
|
|
82
|
+
|
|
83
|
+
// Create a secure client with optimized defaults
|
|
84
|
+
const client = new RDAPClient({
|
|
85
|
+
cache: true, // Automatic caching (1 hour TTL)
|
|
86
|
+
redactPII: true, // Automatically redact personal information
|
|
87
|
+
retry: {
|
|
88
|
+
// Smart retries for transient failures
|
|
89
|
+
maxAttempts: 3,
|
|
90
|
+
backoff: 'exponential',
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Query domain, IP, or ASN
|
|
95
|
+
const domain = await client.domain('example.com');
|
|
96
|
+
const ip = await client.ip('8.8.8.8');
|
|
97
|
+
const asn = await client.asn('AS15169');
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Example Output:**
|
|
101
|
+
|
|
77
102
|
```json
|
|
78
103
|
{
|
|
79
104
|
"domain": "example.com",
|
|
@@ -85,30 +110,169 @@ console.log({
|
|
|
85
110
|
}
|
|
86
111
|
```
|
|
87
112
|
|
|
113
|
+
### With Monitoring & Metrics (v0.1.2+)
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { RDAPClient } from 'rdapify';
|
|
117
|
+
|
|
118
|
+
// Create client with monitoring enabled
|
|
119
|
+
const client = new RDAPClient({
|
|
120
|
+
cache: true,
|
|
121
|
+
logging: {
|
|
122
|
+
level: 'info', // debug, info, warn, error
|
|
123
|
+
enabled: true,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// Perform queries
|
|
128
|
+
await client.domain('example.com');
|
|
129
|
+
await client.ip('8.8.8.8');
|
|
130
|
+
|
|
131
|
+
// Get performance metrics
|
|
132
|
+
const metrics = client.getMetrics();
|
|
133
|
+
console.log(`Success Rate: ${metrics.successRate}%`);
|
|
134
|
+
console.log(`Avg Response Time: ${metrics.avgResponseTime}ms`);
|
|
135
|
+
console.log(`Cache Hit Rate: ${metrics.cacheHitRate}%`);
|
|
136
|
+
|
|
137
|
+
// Get connection pool statistics
|
|
138
|
+
const poolStats = client.getConnectionPoolStats();
|
|
139
|
+
console.log(`Active Connections: ${poolStats.activeConnections}`);
|
|
140
|
+
|
|
141
|
+
// Get recent logs
|
|
142
|
+
const logs = client.getLogs(10);
|
|
143
|
+
logs.forEach((log) => {
|
|
144
|
+
console.log(`[${log.level}] ${log.message}`);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Clean up resources
|
|
148
|
+
client.destroy();
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### With Authentication & Proxy (v0.1.3+)
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { RDAPClient, AuthenticationManager, ProxyManager } from 'rdapify';
|
|
155
|
+
|
|
156
|
+
// Setup authentication
|
|
157
|
+
const auth = new AuthenticationManager({
|
|
158
|
+
type: 'bearer', // 'basic' | 'bearer' | 'apiKey' | 'oauth2'
|
|
159
|
+
token: 'your-api-token',
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
// Setup proxy
|
|
163
|
+
const proxy = new ProxyManager({
|
|
164
|
+
host: 'proxy.example.com',
|
|
165
|
+
port: 8080,
|
|
166
|
+
protocol: 'http', // 'http' | 'https' | 'socks4' | 'socks5'
|
|
167
|
+
auth: {
|
|
168
|
+
username: 'proxyuser',
|
|
169
|
+
password: 'proxypass',
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Add bypass patterns
|
|
174
|
+
proxy.addBypass('*.internal.com');
|
|
175
|
+
|
|
176
|
+
// Use in your HTTP client configuration
|
|
177
|
+
const headers = auth.getAuthHeaders();
|
|
178
|
+
const proxyUrl = proxy.shouldBypass('example.com')
|
|
179
|
+
? undefined
|
|
180
|
+
: proxy.getProxyUrl();
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### With Advanced Features (v0.1.3+)
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import {
|
|
187
|
+
RDAPClient,
|
|
188
|
+
RetryStrategy,
|
|
189
|
+
QueryPriorityQueue,
|
|
190
|
+
PersistentCache,
|
|
191
|
+
CompressionManager,
|
|
192
|
+
} from 'rdapify';
|
|
193
|
+
|
|
194
|
+
// Setup retry strategy with circuit breaker
|
|
195
|
+
const retry = new RetryStrategy({
|
|
196
|
+
strategy: 'exponential-jitter',
|
|
197
|
+
maxAttempts: 5,
|
|
198
|
+
circuitBreaker: {
|
|
199
|
+
enabled: true,
|
|
200
|
+
threshold: 3,
|
|
201
|
+
timeout: 60000,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// Setup priority queue
|
|
206
|
+
const queue = new QueryPriorityQueue(5, async (domain) => {
|
|
207
|
+
return await client.domain(domain);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// Enqueue with priority
|
|
211
|
+
await queue.enqueue('critical.com', 'high');
|
|
212
|
+
await queue.enqueue('normal.com', 'normal');
|
|
213
|
+
await queue.enqueue('background.com', 'low');
|
|
214
|
+
|
|
215
|
+
// Setup persistent cache
|
|
216
|
+
const cache = new PersistentCache({
|
|
217
|
+
storage: 'file',
|
|
218
|
+
path: './cache/rdap-cache.json',
|
|
219
|
+
ttl: 3600000, // 1 hour
|
|
220
|
+
autoSave: true,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
// Setup compression
|
|
224
|
+
const compression = new CompressionManager({
|
|
225
|
+
enabled: true,
|
|
226
|
+
types: ['br', 'gzip', 'deflate'],
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
|
|
88
230
|
## 🌟 Core Features
|
|
89
231
|
|
|
90
232
|
### 🔒 Enterprise Security
|
|
233
|
+
|
|
91
234
|
- **Built-in SSRF Protection**: Prevent queries to internal IP addresses or dangerous domains
|
|
92
235
|
- **Certificate Validation**: Reject insecure connections to RDAP servers
|
|
93
236
|
- **Rate Limiting**: Prevent service blocking due to excessive requests
|
|
94
237
|
- **Secure Data Handling**: PII redaction according to GDPR/CCPA requirements
|
|
238
|
+
- **Authentication Support** (v0.1.3+): Basic, Bearer Token, API Key, OAuth2
|
|
239
|
+
- **Proxy Support** (v0.1.3+): HTTP/HTTPS/SOCKS4/SOCKS5 with authentication
|
|
95
240
|
- **Full Audit Trail**: Track all critical operations for compliance purposes
|
|
96
241
|
|
|
97
242
|
### ⚡ Exceptional Performance
|
|
98
|
-
|
|
99
|
-
- **
|
|
243
|
+
|
|
244
|
+
- **Smart Caching**: In-memory LRU cache with configurable TTL
|
|
245
|
+
- **Persistent Cache** (v0.1.3+): File-based cache that survives restarts
|
|
246
|
+
- **Connection Pooling** (v0.1.2+): HTTP connection reuse for 30-40% performance improvement
|
|
247
|
+
- **Batch Processing**: Process multiple queries efficiently (5-10x faster)
|
|
248
|
+
- **Response Compression** (v0.1.3+): gzip/brotli support for 60-80% bandwidth reduction
|
|
249
|
+
- **Retry Strategies** (v0.1.3+): Circuit breaker with exponential backoff
|
|
250
|
+
- **Query Prioritization** (v0.1.3+): High/normal/low priority queue
|
|
100
251
|
- **Registry Discovery**: Automatic IANA Bootstrap for finding the correct registry
|
|
101
|
-
- **
|
|
102
|
-
|
|
252
|
+
- **Optimized Parsing**: Fast JSONPath-based normalization
|
|
253
|
+
|
|
254
|
+
### 📊 Monitoring & Observability (v0.1.2+)
|
|
255
|
+
|
|
256
|
+
- **Metrics Collection**: Track query performance, success rates, and cache effectiveness
|
|
257
|
+
- **Request/Response Logging**: Detailed logging with configurable levels (debug, info, warn, error)
|
|
258
|
+
- **Performance Analysis**: Monitor response times, identify bottlenecks, and optimize queries
|
|
259
|
+
- **Connection Pool Stats**: Track connection reuse and resource utilization
|
|
260
|
+
- **Time-based Filtering**: Analyze metrics over specific time periods
|
|
261
|
+
- **Export Capabilities**: Export metrics and logs for external analysis
|
|
103
262
|
|
|
104
263
|
### 🧩 Seamless Integration
|
|
264
|
+
|
|
105
265
|
- **Full TypeScript Support**: Strongly typed with embedded documentation
|
|
106
|
-
- **
|
|
107
|
-
- **
|
|
108
|
-
- **
|
|
109
|
-
- **
|
|
266
|
+
- **Node.js Support**: Verified working (target: Node.js 20+)
|
|
267
|
+
- **Enhanced Validation** (v0.1.3+): IDN domains, IPv6 zones, ASN ranges
|
|
268
|
+
- **Interactive CLI**: For quick queries and testing (planned)
|
|
269
|
+
- **Web Playground**: Try the library directly in your browser (planned)
|
|
270
|
+
- **Pre-built Templates**: For AWS Lambda, Azure Functions, Kubernetes, and more (planned)
|
|
271
|
+
|
|
272
|
+
### 📊 Advanced Analytics (Planned)
|
|
273
|
+
|
|
274
|
+
Future releases will include:
|
|
110
275
|
|
|
111
|
-
### 📊 Advanced Analytics
|
|
112
276
|
- **Customizable Dashboards**: Track critical domains and assets
|
|
113
277
|
- **Automated Reports**: Schedule expiration alerts and important changes
|
|
114
278
|
- **Pattern Detection**: Identify suspicious registration behaviors or potential attacks
|
|
@@ -136,60 +300,62 @@ style G fill:#2196F3,stroke:#0D47A1
|
|
|
136
300
|
|
|
137
301
|
We don't treat security as an add-on feature — it's fundamental to our design. RDAPify protects your applications from:
|
|
138
302
|
|
|
139
|
-
| Threat
|
|
140
|
-
|
|
141
|
-
| SSRF
|
|
142
|
-
| DoS
|
|
143
|
-
| Data Leaks
|
|
144
|
-
| MitM
|
|
145
|
-
| Data Injection | Schema validation, strict parsing
|
|
303
|
+
| Threat | Protection Mechanism | Criticality |
|
|
304
|
+
| -------------- | ---------------------------------------- | ------------ |
|
|
305
|
+
| SSRF | Domain validation, blocking internal IPs | 🔴 Critical |
|
|
306
|
+
| DoS | Rate limiting, timeouts | 🟠 Important |
|
|
307
|
+
| Data Leaks | PII redaction, no raw response storage | 🔴 Critical |
|
|
308
|
+
| MitM | Mandatory HTTPS, certificate validation | 🟠 Important |
|
|
309
|
+
| Data Injection | Schema validation, strict parsing | 🟠 Important |
|
|
146
310
|
|
|
147
311
|
Read our [Security Whitepaper](security/whitepaper.md) for deeper technical details and advanced scenarios.
|
|
148
312
|
|
|
149
|
-
## 📚
|
|
313
|
+
## 📚 Documentation
|
|
150
314
|
|
|
151
|
-
RDAPify provides
|
|
315
|
+
RDAPify provides comprehensive documentation in the repository:
|
|
152
316
|
|
|
153
|
-
- **[Getting Started](docs/
|
|
154
|
-
- **[
|
|
155
|
-
- **[
|
|
156
|
-
- **[Security
|
|
157
|
-
- **[
|
|
158
|
-
- **[
|
|
159
|
-
- **[Analytics](docs/analytics/)** - Dashboard and reporting recipes
|
|
317
|
+
- **[Getting Started](docs/getting_started/)** - Installation, quick start, and first query
|
|
318
|
+
- **[API Reference](docs/api_reference/)** - Complete TypeScript API documentation
|
|
319
|
+
- **[Core Concepts](docs/core_concepts/)** - RDAP fundamentals, architecture, and normalization
|
|
320
|
+
- **[Security Guide](docs/security/)** - SSRF protection, PII redaction, and best practices
|
|
321
|
+
- **[Guides](docs/guides/)** - Error handling, caching strategies, and performance optimization
|
|
322
|
+
- **[Examples](examples/)** - Real-world code examples and use cases
|
|
160
323
|
|
|
161
|
-
|
|
324
|
+
> **Note**: Full documentation site is planned for future release. For now, browse the [docs/](docs/) directory in the repository.
|
|
162
325
|
|
|
163
326
|
## 🌐 Interactive Playground
|
|
164
327
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-

|
|
328
|
+
> **Coming Soon**: Interactive playground is planned for a future release. For now, install the package and try the examples in the [docs/](docs/) directory.
|
|
168
329
|
|
|
169
330
|
## 📊 Performance Benchmarks
|
|
170
331
|
|
|
171
|
-
|
|
172
|
-
| Library | Time (seconds) | Memory Usage | Avg Response Time |
|
|
173
|
-
|---------|----------------|--------------|-------------------|
|
|
174
|
-
| **RDAPify** | **3.2** | **85 MB** | **1.8 ms** |
|
|
175
|
-
| rdap-client | 42.7 | 310 MB | 214 ms |
|
|
176
|
-
| node-rdap | 58.1 | 420 MB | 290 ms |
|
|
177
|
-
| whois-json | 196.5 | 580 MB | 982 ms |
|
|
178
|
-
|
|
179
|
-
> Benchmarks run on Node.js 20, Intel i7, 32GB RAM, 1Gbps connection. Includes caching benefits.
|
|
332
|
+
> **Coming Soon**: Comprehensive benchmarks with real-world data will be published in future releases. Current alpha focuses on correctness and security over performance optimization.
|
|
180
333
|
|
|
181
334
|
## 👥 Community & Support
|
|
182
335
|
|
|
183
|
-
RDAPify is an open source project
|
|
336
|
+
RDAPify is an open source project. Get help or contribute:
|
|
337
|
+
|
|
338
|
+
### 🐛 Bug Reports & Feature Requests
|
|
339
|
+
- **[GitHub Issues](https://github.com/rdapify/RDAPify/issues)** - Report bugs or request features
|
|
340
|
+
|
|
341
|
+
### 💬 Questions & Discussions
|
|
342
|
+
- **[GitHub Discussions](https://github.com/rdapify/RDAPify/discussions)** - Ask questions, share ideas, and show what you've built
|
|
343
|
+
|
|
344
|
+
### 📧 Direct Contact
|
|
345
|
+
- **General inquiries**: contact@rdapify.com
|
|
346
|
+
- **Security issues**: security@rdapify.com (see [SECURITY.md](SECURITY.md))
|
|
347
|
+
- **Support**: support@rdapify.com
|
|
348
|
+
|
|
349
|
+
### 🤝 Contributing
|
|
350
|
+
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines
|
|
351
|
+
- **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** - Community standards
|
|
184
352
|
|
|
185
|
-
|
|
186
|
-
- **[GitHub Discussions](https://github.com/rdapify/rdapify/discussions)** - Questions and ideas
|
|
187
|
-
- **[Weekly Office Hours](https://rdapify.dev/community/office-hours)** - Live sessions every Thursday
|
|
188
|
-
- **[Enterprise Support](https://rdapify.dev/enterprise)** - SLA-backed support for businesses
|
|
353
|
+
> **Enterprise Support**: For SLA-backed support, consulting, or custom features, contact enterprise@rdapify.com
|
|
189
354
|
|
|
190
355
|
## 🤝 Contributing
|
|
191
356
|
|
|
192
357
|
We welcome contributions! Whether you're a:
|
|
358
|
+
|
|
193
359
|
- Developer wanting to fix bugs or add features
|
|
194
360
|
- Writer improving documentation
|
|
195
361
|
- Tester reporting issues
|
|
@@ -197,16 +363,237 @@ We welcome contributions! Whether you're a:
|
|
|
197
363
|
|
|
198
364
|
Start by reading our [Contribution Guide](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
199
365
|
|
|
200
|
-
##
|
|
366
|
+
## 🚧 Project Status
|
|
367
|
+
|
|
368
|
+
**Current Release**: v0.1.2 (Production Ready)
|
|
369
|
+
|
|
370
|
+
### 🎉 What's New in v0.1.2
|
|
371
|
+
|
|
372
|
+
**Interactive Playground & Developer Experience**
|
|
373
|
+
- ✅ **Try Before Install**: Interactive playground at rdapify.com/playground
|
|
374
|
+
- ✅ **Client ID Tracking**: Stable browser identification with localStorage
|
|
375
|
+
- ✅ **Quota Management**: Real-time quota display (remainingToday, resetAt)
|
|
376
|
+
- ✅ **Rate Limit Handling**: Graceful 429 responses with retry hints
|
|
377
|
+
- ✅ **Multi-Package Manager**: npm, yarn, and pnpm install commands
|
|
378
|
+
- ✅ **Website Integration**: Playground accessible from main navigation
|
|
379
|
+
- ✅ **Code Quality**: ESLint errors resolved (6 issues fixed)
|
|
380
|
+
|
|
381
|
+
**Previous Releases**
|
|
382
|
+
|
|
383
|
+
**Phase 3: Authentication & Network** (52 new tests - v0.1.1+)
|
|
384
|
+
- ✅ **Authentication Support**: Basic, Bearer Token, API Key, OAuth2
|
|
385
|
+
- ✅ **Proxy Support**: HTTP/HTTPS/SOCKS4/SOCKS5 with bypass lists
|
|
386
|
+
- ✅ **Response Compression**: gzip, brotli, deflate (60-80% bandwidth reduction)
|
|
387
|
+
|
|
388
|
+
**Phase 2: Advanced Features** (55 new tests)
|
|
389
|
+
- ✅ **Retry Strategies**: Circuit breaker with exponential backoff
|
|
390
|
+
- ✅ **Query Prioritization**: High/normal/low priority queue
|
|
391
|
+
- ✅ **Enhanced Validation**: IDN domains, IPv6 zones, ASN ranges
|
|
392
|
+
- ✅ **Persistent Cache**: File-based storage that survives restarts
|
|
393
|
+
|
|
394
|
+
**Phase 1: Core Improvements** (38 new tests)
|
|
395
|
+
- ✅ **Connection Pooling**: 30-40% performance improvement
|
|
396
|
+
- ✅ **Metrics & Monitoring**: Comprehensive query tracking
|
|
397
|
+
- ✅ **Request/Response Logging**: Detailed debugging capabilities
|
|
398
|
+
|
|
399
|
+
**Total Improvements**: 11 major features, 145+ tests (all passing)
|
|
400
|
+
|
|
401
|
+
See [ALL_PHASES_COMPLETE.md](./docs/releases/ALL_PHASES_COMPLETE.md) for detailed documentation.
|
|
402
|
+
|
|
403
|
+
### ✅ What's Ready in v0.1.2
|
|
404
|
+
|
|
405
|
+
Core functionality is production-ready and fully tested:
|
|
406
|
+
|
|
407
|
+
- ✅ **Interactive Playground**: Try RDAPify without installing (rdapify.com/playground)
|
|
408
|
+
- ✅ **RDAP Client**: Domain, IP, and ASN queries with automatic bootstrap discovery
|
|
409
|
+
- ✅ **SSRF Protection**: Blocks private IPs, localhost, link-local, with proper CIDR matching (IPv4/IPv6)
|
|
410
|
+
- ✅ **Data Normalization**: Consistent response format across all registries
|
|
411
|
+
- ✅ **PII Redaction**: Automatic redaction of emails, phones, addresses
|
|
412
|
+
- ✅ **In-Memory Caching**: LRU cache with TTL support
|
|
413
|
+
- ✅ **Persistent Cache**: File-based cache that survives restarts
|
|
414
|
+
- ✅ **Connection Pooling**: HTTP connection reuse (30-40% faster)
|
|
415
|
+
- ✅ **Metrics & Monitoring**: Comprehensive query tracking and analysis
|
|
416
|
+
- ✅ **Request/Response Logging**: Detailed logging with multiple levels
|
|
417
|
+
- ✅ **Retry Strategies**: Circuit breaker with exponential backoff
|
|
418
|
+
- ✅ **Query Prioritization**: High/normal/low priority queue
|
|
419
|
+
- ✅ **Enhanced Validation**: IDN domains, IPv6 zones, ASN ranges
|
|
420
|
+
- ✅ **Authentication Support**: Basic, Bearer, API Key, OAuth2
|
|
421
|
+
- ✅ **Proxy Support**: HTTP/HTTPS/SOCKS4/SOCKS5
|
|
422
|
+
- ✅ **Response Compression**: gzip, brotli, deflate
|
|
423
|
+
- ✅ **Error Handling**: Structured errors with retry logic
|
|
424
|
+
- ✅ **TypeScript Support**: Full type definitions and strict mode
|
|
425
|
+
- ✅ **Test Coverage**: 145+ new tests passing (unit + integration)
|
|
426
|
+
- ✅ **Node.js Support**: Verified working (Node.js 20+)
|
|
427
|
+
|
|
428
|
+
### 🔄 Planned Features
|
|
429
|
+
|
|
430
|
+
These features are planned for future releases:
|
|
431
|
+
|
|
432
|
+
- ⏳ **Redis/External Cache**: External cache adapters coming in v0.2.0
|
|
433
|
+
- ⏳ **CLI Tool**: Command-line interface planned
|
|
434
|
+
- ⏳ **Bun/Deno/Cloudflare Workers**: Additional runtime support
|
|
435
|
+
- ⏳ **Advanced Analytics**: Dashboard and reporting features
|
|
436
|
+
- ⏳ **Geo-distributed Caching**: Multi-region cache support
|
|
437
|
+
- ⏳ **Smart Caching**: Predictive caching with adaptive TTL
|
|
438
|
+
- ⏳ **Real-time Updates**: WebSocket/SSE support
|
|
439
|
+
|
|
440
|
+
### 📋 Roadmap to v0.2.0
|
|
441
|
+
|
|
442
|
+
- Redis cache adapter
|
|
443
|
+
- CLI tool with interactive mode
|
|
444
|
+
- Rate limiting improvements
|
|
445
|
+
- Batch processing optimization
|
|
446
|
+
- Bun/Deno runtime compatibility testing
|
|
447
|
+
|
|
448
|
+
See [ROADMAP.md](ROADMAP.md) for the complete roadmap and [CHANGELOG.md](CHANGELOG.md) for detailed version history.
|
|
449
|
+
|
|
450
|
+
## 🏗️ Code Architecture
|
|
451
|
+
|
|
452
|
+
RDAPify follows a clean, modular architecture with clear separation of concerns:
|
|
453
|
+
|
|
454
|
+
### Source Structure (`/src`)
|
|
455
|
+
|
|
456
|
+
```
|
|
457
|
+
src/
|
|
458
|
+
├── client/ # Client orchestration layer
|
|
459
|
+
│ ├── RDAPClient.ts # Main client (242 LOC)
|
|
460
|
+
│ └── QueryOrchestrator.ts # Query pattern extraction (169 LOC)
|
|
461
|
+
│
|
|
462
|
+
├── fetcher/ # HTTP and registry discovery
|
|
463
|
+
│ ├── Fetcher.ts # HTTP client (196 LOC)
|
|
464
|
+
│ ├── BootstrapDiscovery.ts # IANA bootstrap (224 LOC)
|
|
465
|
+
│ └── SSRFProtection.ts # Security validation (219 LOC)
|
|
466
|
+
│
|
|
467
|
+
├── normalizer/ # Data transformation
|
|
468
|
+
│ ├── Normalizer.ts # Response normalization (239 LOC)
|
|
469
|
+
│ └── PIIRedactor.ts # Privacy protection (140 LOC)
|
|
470
|
+
│
|
|
471
|
+
├── cache/ # Caching layer
|
|
472
|
+
│ ├── CacheManager.ts # Cache orchestration (188 LOC)
|
|
473
|
+
│ └── InMemoryCache.ts # LRU implementation (185 LOC)
|
|
474
|
+
│
|
|
475
|
+
├── types/ # TypeScript definitions
|
|
476
|
+
│ ├── enums.ts # Type aliases (87 LOC)
|
|
477
|
+
│ ├── entities.ts # Entity interfaces (74 LOC)
|
|
478
|
+
│ ├── responses.ts # Response types (100 LOC)
|
|
479
|
+
│ ├── errors.ts # Error classes (154 LOC)
|
|
480
|
+
│ ├── options.ts # Configuration types (201 LOC)
|
|
481
|
+
│ └── index.ts # Barrel export (36 LOC)
|
|
482
|
+
│
|
|
483
|
+
└── utils/ # Utilities
|
|
484
|
+
├── validators/ # Input validation
|
|
485
|
+
│ ├── domain.ts # Domain validation (55 LOC)
|
|
486
|
+
│ ├── ip.ts # IP validation (86 LOC)
|
|
487
|
+
│ ├── asn.ts # ASN validation (42 LOC)
|
|
488
|
+
│ └── network.ts # Network utilities (76 LOC)
|
|
489
|
+
│
|
|
490
|
+
└── helpers/ # Helper functions
|
|
491
|
+
├── async.ts # Async utilities (77 LOC)
|
|
492
|
+
├── string.ts # String manipulation (38 LOC)
|
|
493
|
+
├── object.ts # Object utilities (33 LOC)
|
|
494
|
+
├── cache.ts # Cache helpers (11 LOC)
|
|
495
|
+
├── http.ts # HTTP utilities (25 LOC)
|
|
496
|
+
├── format.ts # Formatting (27 LOC)
|
|
497
|
+
└── runtime.ts # Runtime detection (47 LOC)
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Key Design Principles
|
|
501
|
+
|
|
502
|
+
1. **Modular Architecture**: Each file has a single, clear responsibility
|
|
503
|
+
2. **Small Files**: All files <250 LOC for easy maintenance
|
|
504
|
+
3. **Type Safety**: Strict TypeScript with explicit types throughout
|
|
505
|
+
4. **Testability**: 146 tests with >90% coverage
|
|
506
|
+
5. **Security First**: SSRF protection and PII redaction built-in
|
|
507
|
+
6. **Performance**: Smart caching and optimized parsing
|
|
508
|
+
|
|
509
|
+
### Recent Improvements (Phase 2 Refactoring)
|
|
510
|
+
|
|
511
|
+
- ✅ Extracted QueryOrchestrator from RDAPClient (-29% LOC)
|
|
512
|
+
- ✅ Split validators into focused modules (-87% in main file)
|
|
513
|
+
- ✅ Split helpers into focused modules (-80% in main file)
|
|
514
|
+
- ✅ Split types into enums, entities, responses (-87% in main file)
|
|
515
|
+
- ✅ 712 lines of duplication eliminated
|
|
516
|
+
- ✅ 100% backward compatible (re-export shims)
|
|
517
|
+
|
|
518
|
+
See [REFACTOR_STATUS.md](REFACTOR_STATUS.md) for detailed refactoring progress.
|
|
519
|
+
|
|
520
|
+
### 📋 Roadmap to v0.2.0 (Continued)
|
|
521
|
+
- Live integration tests (optional via LIVE_TESTS=1)
|
|
522
|
+
- Performance benchmarks with real data
|
|
523
|
+
- Advanced analytics dashboard
|
|
524
|
+
|
|
525
|
+
**Want to contribute?** Check out our [CONTRIBUTING.md](CONTRIBUTING.md) and [ROADMAP.md](ROADMAP.md)!
|
|
526
|
+
|
|
527
|
+
## 📚 Additional Documentation
|
|
528
|
+
|
|
529
|
+
- **[Release Documentation](./docs/releases/)** - Complete phase documentation
|
|
530
|
+
- **[ALL_PHASES_COMPLETE.md](./docs/releases/ALL_PHASES_COMPLETE.md)** - Complete overview
|
|
531
|
+
- **[PHASE_1_COMPLETE.md](./docs/releases/PHASE_1_COMPLETE.md)** - Core improvements
|
|
532
|
+
- **[PHASE_2_COMPLETE.md](./docs/releases/PHASE_2_COMPLETE.md)** - Advanced features
|
|
533
|
+
- **[PHASE_3_COMPLETE.md](./docs/releases/PHASE_3_COMPLETE.md)** - Authentication & network
|
|
534
|
+
- **[CHANGELOG.md](./CHANGELOG.md)** - Detailed version history
|
|
535
|
+
- **[ADDITIONAL_IMPROVEMENTS.md](./ADDITIONAL_IMPROVEMENTS.md)** - Implementation status
|
|
536
|
+
|
|
537
|
+
## 🔍 Version Verification
|
|
538
|
+
|
|
539
|
+
RDAPify intentionally does **not** export `./package.json` in the package exports for security and API surface minimization. Attempting to import it will throw an expected error:
|
|
540
|
+
|
|
541
|
+
```javascript
|
|
542
|
+
// ❌ This will throw ERR_PACKAGE_PATH_NOT_EXPORTED (expected behavior)
|
|
543
|
+
const pkg = require('rdapify/package.json');
|
|
544
|
+
// Error: Package subpath './package.json' is not defined by "exports"
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Safe Version Verification Methods
|
|
548
|
+
|
|
549
|
+
**Method 1: Using npm (recommended)**
|
|
550
|
+
```bash
|
|
551
|
+
npm ls rdapify
|
|
552
|
+
# Output: rdapify@0.1.0
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
**Method 2: Programmatic check via require.resolve**
|
|
556
|
+
```javascript
|
|
557
|
+
const fs = require('fs');
|
|
558
|
+
const path = require('path');
|
|
559
|
+
|
|
560
|
+
const entry = require.resolve('rdapify');
|
|
561
|
+
const pkgPath = path.join(path.dirname(entry), '..', 'package.json');
|
|
562
|
+
const version = JSON.parse(fs.readFileSync(pkgPath, 'utf8')).version;
|
|
563
|
+
|
|
564
|
+
console.log('rdapify version:', version);
|
|
565
|
+
// Output: 0.1.0
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
**Method 3: Check installed version in package.json**
|
|
569
|
+
```bash
|
|
570
|
+
cat node_modules/rdapify/package.json | grep version
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
This design decision prevents accidental exposure of internal package metadata and maintains a minimal public API surface.
|
|
574
|
+
|
|
575
|
+
## 🏢 Early Adopters & Feedback
|
|
576
|
+
|
|
577
|
+
We're looking for early adopters and beta testers! If you're interested in:
|
|
578
|
+
|
|
579
|
+
- Testing the library in your environment
|
|
580
|
+
- Providing feedback on the API design
|
|
581
|
+
- Contributing to the codebase
|
|
582
|
+
- Reporting bugs or suggesting features
|
|
201
583
|
|
|
202
|
-
|
|
584
|
+
**Get involved**:
|
|
585
|
+
- 🌐 Visit our website: [rdapify.com](https://rdapify.com)
|
|
586
|
+
- 🐛 Open a [GitHub Issue](https://github.com/rdapify/RDAPify/issues) for bugs or feature requests
|
|
587
|
+
- 💬 Start a [GitHub Discussion](https://github.com/rdapify/RDAPify/discussions) for questions or ideas
|
|
588
|
+
- 📖 Read the [Documentation](https://rdapify.com/docs)
|
|
589
|
+
- 🤝 Check out [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines
|
|
203
590
|
|
|
204
|
-
|
|
205
|
-
[](https://example.com)
|
|
206
|
-
[](https://example.com)
|
|
207
|
-
[](https://example.com)
|
|
591
|
+
### Known Issues & Limitations
|
|
208
592
|
|
|
209
|
-
|
|
593
|
+
- Bun/Deno/Cloudflare Workers compatibility not yet tested
|
|
594
|
+
- Live RDAP server tests disabled by default (use `LIVE_TESTS=1` to enable)
|
|
595
|
+
- CLI tool not yet available (programmatic API only)
|
|
596
|
+
- Redis cache adapter planned for v0.2.0
|
|
210
597
|
|
|
211
598
|
## 📜 License
|
|
212
599
|
|
|
@@ -220,5 +607,5 @@ We thank the global RDAP community, IANA teams, and Regional Internet Registry (
|
|
|
220
607
|
|
|
221
608
|
> **Note:** RDAPify is an independent project not affiliated with any domain registry or official internet authority. All trademarks and products mentioned are property of their respective owners.
|
|
222
609
|
>
|
|
223
|
-
> © 2025 RDAPify — Built for enterprises that don't compromise on quality and security.
|
|
224
|
-
> [Security Policy](SECURITY.md) • [Privacy Policy](PRIVACY.md) • [
|
|
610
|
+
> © 2025 RDAPify Contributors — Built for enterprises that don't compromise on quality and security.
|
|
611
|
+
> [Security Policy](SECURITY.md) • [Privacy Policy](PRIVACY.md) • [License](LICENSE)
|