rdapify 0.1.0-alpha.4 → 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.
Files changed (214) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +209 -46
  3. package/dist/{client → application/client}/RDAPClient.d.ts +3 -2
  4. package/dist/application/client/RDAPClient.d.ts.map +1 -0
  5. package/dist/application/client/RDAPClient.js +109 -0
  6. package/dist/application/client/RDAPClient.js.map +1 -0
  7. package/dist/application/client/index.d.ts +2 -0
  8. package/dist/application/client/index.d.ts.map +1 -0
  9. package/dist/application/client/index.js +6 -0
  10. package/dist/application/client/index.js.map +1 -0
  11. package/dist/application/services/QueryOrchestrator.d.ts +23 -0
  12. package/dist/application/services/QueryOrchestrator.d.ts.map +1 -0
  13. package/dist/application/services/QueryOrchestrator.js +59 -0
  14. package/dist/application/services/QueryOrchestrator.js.map +1 -0
  15. package/dist/application/services/index.d.ts +2 -0
  16. package/dist/application/services/index.d.ts.map +1 -0
  17. package/dist/application/services/index.js +6 -0
  18. package/dist/application/services/index.js.map +1 -0
  19. package/dist/core/ports/bootstrap.port.d.ts +8 -0
  20. package/dist/core/ports/bootstrap.port.d.ts.map +1 -0
  21. package/dist/core/ports/bootstrap.port.js +3 -0
  22. package/dist/core/ports/bootstrap.port.js.map +1 -0
  23. package/dist/core/ports/cache.port.d.ts +10 -0
  24. package/dist/core/ports/cache.port.d.ts.map +1 -0
  25. package/dist/core/ports/cache.port.js +3 -0
  26. package/dist/core/ports/cache.port.js.map +1 -0
  27. package/dist/core/ports/fetcher.port.d.ts +5 -0
  28. package/dist/core/ports/fetcher.port.d.ts.map +1 -0
  29. package/dist/core/ports/fetcher.port.js +3 -0
  30. package/dist/core/ports/fetcher.port.js.map +1 -0
  31. package/dist/core/ports/index.d.ts +6 -0
  32. package/dist/core/ports/index.d.ts.map +1 -0
  33. package/dist/core/ports/index.js +9 -0
  34. package/dist/core/ports/index.js.map +1 -0
  35. package/dist/core/ports/normalizer.port.d.ts +5 -0
  36. package/dist/core/ports/normalizer.port.d.ts.map +1 -0
  37. package/dist/core/ports/normalizer.port.js +3 -0
  38. package/dist/core/ports/normalizer.port.js.map +1 -0
  39. package/dist/core/ports/pii-redactor.port.d.ts +6 -0
  40. package/dist/core/ports/pii-redactor.port.d.ts.map +1 -0
  41. package/dist/core/ports/pii-redactor.port.js +3 -0
  42. package/dist/core/ports/pii-redactor.port.js.map +1 -0
  43. package/dist/index.d.ts +8 -8
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +7 -7
  46. package/dist/index.js.map +1 -1
  47. package/dist/{cache → infrastructure/cache}/CacheManager.d.ts +2 -2
  48. package/dist/infrastructure/cache/CacheManager.d.ts.map +1 -0
  49. package/dist/{cache → infrastructure/cache}/CacheManager.js +1 -1
  50. package/dist/infrastructure/cache/CacheManager.js.map +1 -0
  51. package/dist/{cache → infrastructure/cache}/InMemoryCache.d.ts +1 -1
  52. package/dist/infrastructure/cache/InMemoryCache.d.ts.map +1 -0
  53. package/dist/infrastructure/cache/InMemoryCache.js.map +1 -0
  54. package/dist/infrastructure/cache/index.d.ts +3 -0
  55. package/dist/infrastructure/cache/index.d.ts.map +1 -0
  56. package/dist/infrastructure/cache/index.js +8 -0
  57. package/dist/infrastructure/cache/index.js.map +1 -0
  58. package/dist/infrastructure/http/BootstrapDiscovery.d.ts.map +1 -0
  59. package/dist/{fetcher → infrastructure/http}/BootstrapDiscovery.js +2 -2
  60. package/dist/infrastructure/http/BootstrapDiscovery.js.map +1 -0
  61. package/dist/{fetcher → infrastructure/http}/Fetcher.d.ts +3 -3
  62. package/dist/infrastructure/http/Fetcher.d.ts.map +1 -0
  63. package/dist/{fetcher → infrastructure/http}/Fetcher.js +2 -2
  64. package/dist/infrastructure/http/Fetcher.js.map +1 -0
  65. package/dist/{normalizer → infrastructure/http}/Normalizer.d.ts +1 -1
  66. package/dist/infrastructure/http/Normalizer.d.ts.map +1 -0
  67. package/dist/{normalizer → infrastructure/http}/Normalizer.js +1 -1
  68. package/dist/infrastructure/http/Normalizer.js.map +1 -0
  69. package/dist/infrastructure/http/index.d.ts +4 -0
  70. package/dist/infrastructure/http/index.d.ts.map +1 -0
  71. package/dist/infrastructure/http/index.js +10 -0
  72. package/dist/infrastructure/http/index.js.map +1 -0
  73. package/dist/{normalizer → infrastructure/security}/PIIRedactor.d.ts +2 -2
  74. package/dist/infrastructure/security/PIIRedactor.d.ts.map +1 -0
  75. package/dist/infrastructure/security/PIIRedactor.js.map +1 -0
  76. package/dist/{fetcher → infrastructure/security}/SSRFProtection.d.ts +1 -1
  77. package/dist/infrastructure/security/SSRFProtection.d.ts.map +1 -0
  78. package/dist/{fetcher → infrastructure/security}/SSRFProtection.js +2 -2
  79. package/dist/infrastructure/security/SSRFProtection.js.map +1 -0
  80. package/dist/infrastructure/security/index.d.ts +3 -0
  81. package/dist/infrastructure/security/index.d.ts.map +1 -0
  82. package/dist/infrastructure/security/index.js +8 -0
  83. package/dist/infrastructure/security/index.js.map +1 -0
  84. package/dist/shared/constants/http.constants.d.ts +26 -0
  85. package/dist/shared/constants/http.constants.d.ts.map +1 -0
  86. package/dist/shared/constants/http.constants.js +29 -0
  87. package/dist/shared/constants/http.constants.js.map +1 -0
  88. package/dist/shared/constants/index.d.ts +3 -0
  89. package/dist/shared/constants/index.d.ts.map +1 -0
  90. package/dist/shared/constants/index.js +6 -0
  91. package/dist/shared/constants/index.js.map +1 -0
  92. package/dist/shared/constants/rdap.constants.d.ts +9 -0
  93. package/dist/shared/constants/rdap.constants.d.ts.map +1 -0
  94. package/dist/shared/constants/rdap.constants.js +21 -0
  95. package/dist/shared/constants/rdap.constants.js.map +1 -0
  96. package/dist/shared/errors/base.error.d.ts +39 -0
  97. package/dist/shared/errors/base.error.d.ts.map +1 -0
  98. package/dist/shared/errors/base.error.js +91 -0
  99. package/dist/shared/errors/base.error.js.map +1 -0
  100. package/dist/shared/errors/index.d.ts +2 -0
  101. package/dist/shared/errors/index.d.ts.map +1 -0
  102. package/dist/shared/errors/index.js +5 -0
  103. package/dist/shared/errors/index.js.map +1 -0
  104. package/dist/shared/types/entities.d.ts +50 -0
  105. package/dist/shared/types/entities.d.ts.map +1 -0
  106. package/dist/shared/types/entities.js +3 -0
  107. package/dist/shared/types/entities.js.map +1 -0
  108. package/dist/shared/types/enums.d.ts +10 -0
  109. package/dist/shared/types/enums.d.ts.map +1 -0
  110. package/dist/shared/types/enums.js +3 -0
  111. package/dist/shared/types/enums.js.map +1 -0
  112. package/dist/shared/types/errors.d.ts.map +1 -0
  113. package/dist/shared/types/errors.js.map +1 -0
  114. package/dist/shared/types/index.d.ts +4 -0
  115. package/dist/shared/types/index.d.ts.map +1 -0
  116. package/dist/{types → shared/types}/index.js.map +1 -1
  117. package/dist/shared/types/options.d.ts.map +1 -0
  118. package/dist/shared/types/options.js.map +1 -0
  119. package/dist/shared/types/responses.d.ts +76 -0
  120. package/dist/shared/types/responses.d.ts.map +1 -0
  121. package/dist/shared/types/responses.js +3 -0
  122. package/dist/shared/types/responses.js.map +1 -0
  123. package/dist/shared/utils/helpers/async.d.ts +9 -0
  124. package/dist/shared/utils/helpers/async.d.ts.map +1 -0
  125. package/dist/shared/utils/helpers/async.js +47 -0
  126. package/dist/shared/utils/helpers/async.js.map +1 -0
  127. package/dist/shared/utils/helpers/cache.d.ts +2 -0
  128. package/dist/shared/utils/helpers/cache.d.ts.map +1 -0
  129. package/dist/shared/utils/helpers/cache.js +7 -0
  130. package/dist/shared/utils/helpers/cache.js.map +1 -0
  131. package/dist/shared/utils/helpers/format.d.ts +3 -0
  132. package/dist/shared/utils/helpers/format.d.ts.map +1 -0
  133. package/dist/shared/utils/helpers/format.js +22 -0
  134. package/dist/shared/utils/helpers/format.js.map +1 -0
  135. package/dist/shared/utils/helpers/http.d.ts +2 -0
  136. package/dist/shared/utils/helpers/http.d.ts.map +1 -0
  137. package/dist/shared/utils/helpers/http.js +17 -0
  138. package/dist/shared/utils/helpers/http.js.map +1 -0
  139. package/dist/shared/utils/helpers/index.d.ts +8 -0
  140. package/dist/shared/utils/helpers/index.d.ts.map +1 -0
  141. package/dist/shared/utils/helpers/index.js +29 -0
  142. package/dist/shared/utils/helpers/index.js.map +1 -0
  143. package/dist/shared/utils/helpers/object.d.ts +3 -0
  144. package/dist/shared/utils/helpers/object.d.ts.map +1 -0
  145. package/dist/shared/utils/helpers/object.js +24 -0
  146. package/dist/shared/utils/helpers/object.js.map +1 -0
  147. package/dist/shared/utils/helpers/runtime.d.ts +6 -0
  148. package/dist/shared/utils/helpers/runtime.d.ts.map +1 -0
  149. package/dist/shared/utils/helpers/runtime.js +33 -0
  150. package/dist/shared/utils/helpers/runtime.js.map +1 -0
  151. package/dist/shared/utils/helpers/string.d.ts +4 -0
  152. package/dist/shared/utils/helpers/string.d.ts.map +1 -0
  153. package/dist/shared/utils/helpers/string.js +29 -0
  154. package/dist/shared/utils/helpers/string.js.map +1 -0
  155. package/dist/shared/utils/validators/asn.d.ts +3 -0
  156. package/dist/shared/utils/validators/asn.d.ts.map +1 -0
  157. package/dist/shared/utils/validators/asn.js +30 -0
  158. package/dist/shared/utils/validators/asn.js.map +1 -0
  159. package/dist/shared/utils/validators/domain.d.ts +3 -0
  160. package/dist/shared/utils/validators/domain.d.ts.map +1 -0
  161. package/dist/shared/utils/validators/domain.js +34 -0
  162. package/dist/shared/utils/validators/domain.js.map +1 -0
  163. package/dist/shared/utils/validators/index.d.ts +5 -0
  164. package/dist/shared/utils/validators/index.d.ts.map +1 -0
  165. package/dist/shared/utils/validators/index.js +19 -0
  166. package/dist/shared/utils/validators/index.js.map +1 -0
  167. package/dist/shared/utils/validators/ip.d.ts +5 -0
  168. package/dist/shared/utils/validators/ip.d.ts.map +1 -0
  169. package/dist/shared/utils/validators/ip.js +55 -0
  170. package/dist/shared/utils/validators/ip.js.map +1 -0
  171. package/dist/shared/utils/validators/network.d.ts +4 -0
  172. package/dist/shared/utils/validators/network.d.ts.map +1 -0
  173. package/dist/shared/utils/validators/network.js +48 -0
  174. package/dist/shared/utils/validators/network.js.map +1 -0
  175. package/package.json +11 -7
  176. package/dist/cache/CacheManager.d.ts.map +0 -1
  177. package/dist/cache/CacheManager.js.map +0 -1
  178. package/dist/cache/InMemoryCache.d.ts.map +0 -1
  179. package/dist/cache/InMemoryCache.js.map +0 -1
  180. package/dist/client/RDAPClient.d.ts.map +0 -1
  181. package/dist/client/RDAPClient.js +0 -138
  182. package/dist/client/RDAPClient.js.map +0 -1
  183. package/dist/fetcher/BootstrapDiscovery.d.ts.map +0 -1
  184. package/dist/fetcher/BootstrapDiscovery.js.map +0 -1
  185. package/dist/fetcher/Fetcher.d.ts.map +0 -1
  186. package/dist/fetcher/Fetcher.js.map +0 -1
  187. package/dist/fetcher/SSRFProtection.d.ts.map +0 -1
  188. package/dist/fetcher/SSRFProtection.js.map +0 -1
  189. package/dist/normalizer/Normalizer.d.ts.map +0 -1
  190. package/dist/normalizer/Normalizer.js.map +0 -1
  191. package/dist/normalizer/PIIRedactor.d.ts.map +0 -1
  192. package/dist/normalizer/PIIRedactor.js.map +0 -1
  193. package/dist/types/errors.d.ts.map +0 -1
  194. package/dist/types/errors.js.map +0 -1
  195. package/dist/types/index.d.ts +0 -131
  196. package/dist/types/index.d.ts.map +0 -1
  197. package/dist/types/options.d.ts.map +0 -1
  198. package/dist/types/options.js.map +0 -1
  199. package/dist/utils/helpers.d.ts +0 -23
  200. package/dist/utils/helpers.d.ts.map +0 -1
  201. package/dist/utils/helpers.js +0 -161
  202. package/dist/utils/helpers.js.map +0 -1
  203. package/dist/utils/validators.d.ts +0 -12
  204. package/dist/utils/validators.d.ts.map +0 -1
  205. package/dist/utils/validators.js +0 -156
  206. package/dist/utils/validators.js.map +0 -1
  207. /package/dist/{cache → infrastructure/cache}/InMemoryCache.js +0 -0
  208. /package/dist/{fetcher → infrastructure/http}/BootstrapDiscovery.d.ts +0 -0
  209. /package/dist/{normalizer → infrastructure/security}/PIIRedactor.js +0 -0
  210. /package/dist/{types → shared/types}/errors.d.ts +0 -0
  211. /package/dist/{types → shared/types}/errors.js +0 -0
  212. /package/dist/{types → shared/types}/index.js +0 -0
  213. /package/dist/{types → shared/types}/options.d.ts +0 -0
  214. /package/dist/{types → shared/types}/options.js +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,92 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2025-01-25
11
+
12
+ ### Added
13
+ - Initial public release of RDAPify
14
+ - Core RDAP client with domain, IP, and ASN query support
15
+ - Automatic RDAP server discovery via IANA Bootstrap
16
+ - SSRF protection with proper CIDR matching for IPv4 and IPv6
17
+ - PII redaction for GDPR/CCPA compliance
18
+ - In-memory caching with configurable TTL
19
+ - Data normalization for consistent response format
20
+ - Comprehensive TypeScript types and interfaces
21
+ - Input validation for domains, IPs, and ASNs
22
+ - Retry logic with configurable backoff strategies
23
+ - Interactive playground for testing RDAP queries
24
+ - Playground API proxy server with Express
25
+ - Comprehensive community health files (SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SUPPORT.md)
26
+ - Issue templates (bug report, feature request, question)
27
+ - Pull request template with comprehensive checklist
28
+ - Funding configuration for GitHub Sponsors and Open Collective
29
+ - Organization profile with professional presentation
30
+
31
+ ### Infrastructure
32
+ - CI/CD workflows for Node.js 16, 18, and 20
33
+ - CodeQL security analysis (weekly scans)
34
+ - Dependabot for automated dependency updates
35
+ - Dependency review for pull requests
36
+ - Automated testing and linting
37
+ - GitHub Actions for release automation
38
+
39
+ ### Security
40
+ - SSRF protection blocks private IPs, localhost, and internal domains
41
+ - Certificate validation enforced (HTTPS only)
42
+ - Proper CIDR matching using ipaddr.js library
43
+ - Input validation prevents injection attacks
44
+ - Automated security scanning with CodeQL
45
+ - Secret scanning configuration
46
+ - Dependabot security updates
47
+
48
+ ### Documentation
49
+ - Comprehensive README with examples
50
+ - API documentation
51
+ - Security policy
52
+ - Contributing guidelines
53
+ - Code of conduct
54
+ - Support resources
55
+
56
+ ### Testing
57
+ - 146+ unit and integration tests
58
+ - Mocked fixtures for reliable testing
59
+ - Coverage reporting
60
+
61
+ ## [0.1.0-alpha.4] - 2025-01-25
62
+
63
+ ### Added
64
+ - Dependabot configuration for automated dependency updates
65
+ - Enhanced CI/CD workflows with multi-version Node.js testing (Node.js 16, 18, 20)
66
+ - CodeQL security analysis workflow (weekly scans)
67
+ - Dependency review workflow for pull requests
68
+ - Interactive playground for testing RDAP queries
69
+ - Playground API proxy server with Express
70
+ - Comprehensive community health files (SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SUPPORT.md)
71
+ - Issue templates (bug report, feature request, question)
72
+ - Pull request template with comprehensive checklist
73
+ - Funding configuration for GitHub Sponsors and Open Collective
74
+ - Organization profile with professional presentation
75
+
76
+ ### Changed
77
+ - Improved CI workflow to test on multiple Node.js versions
78
+ - Simplified CodeQL configuration
79
+ - Updated organization profile with professional presentation
80
+ - Enhanced documentation structure
81
+ - Improved .gitignore to exclude .kiro directory
82
+
83
+ ### Security
84
+ - Added automated security scanning with CodeQL
85
+ - Enabled dependency review for pull requests
86
+ - Configured Dependabot for security updates
87
+ - Set up weekly security scans
88
+
89
+ ### Infrastructure
90
+ - Added CI/CD workflows for automated testing
91
+ - Configured Dependabot for dependency management
92
+ - Set up CodeQL for security analysis
93
+
8
94
  ## [0.1.0-alpha.2] - 2026-01-22
9
95
 
10
96
  ### Fixed
package/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # RDAPify - Unified, Secure, High-Performance RDAP Client for Enterprise Applications
2
2
 
3
- > **⚠️ ALPHA RELEASE**: This is v0.1.0-alpha.1core functionality is working and tested, but some advanced features are still in development. See [What's Ready](#-whats-ready-in-v010-alpha1) below.
3
+ > **🎉 STABLE RELEASE**: This is v0.1.0 — the first stable public release with production-ready core functionality. See [What's Ready](#-whats-ready-in-v010) below.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/rdapify?style=flat-square)](https://www.npmjs.com/package/rdapify)
6
6
  [![License](https://img.shields.io/npm/l/rdapify?style=flat-square)](LICENSE)
7
7
  [![Security](https://img.shields.io/badge/security-SSRF%20Protected-brightgreen?style=flat-square)](SECURITY.md)
8
+ [![Website](https://img.shields.io/badge/website-rdapify.com-blue?style=flat-square)](https://rdapify.com)
9
+ [![GitHub](https://img.shields.io/github/stars/rdapify/RDAPify?style=flat-square)](https://github.com/rdapify/RDAPify)
8
10
 
9
11
  **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
12
 
@@ -27,7 +29,7 @@ RDAPify intelligently addresses these challenges:
27
29
  - ✅ **Data Normalization**: Consistent response regardless of source registry
28
30
  - ✅ **SSRF Protection**: Prevent attacks on internal infrastructure
29
31
  - ✅ **Exceptional Performance**: Smart caching, parallel processing, memory optimization
30
- - ✅ **Broad Compatibility**: Works on Node.js, Bun, Deno, Cloudflare Workers
32
+ - ✅ **Node.js Compatibility**: Verified working on Node.js (target: 16+; Bun, Deno, Cloudflare Workers: untested)
31
33
  - ✅ **GDPR-ready**: Built-in tools for automatically redacting personal data
32
34
 
33
35
  ## 📦 Quick Installation
@@ -41,26 +43,23 @@ yarn add rdapify
41
43
 
42
44
  # Using pnpm
43
45
  pnpm add rdapify
46
+ ```
44
47
 
45
- # Using Bun
48
+ **Experimental (untested):**
49
+ ```bash
50
+ # Using Bun (untested)
46
51
  bun add rdapify
47
52
  ```
48
53
 
49
54
  ## ⚡ Get Started in 30 Seconds
50
55
 
56
+ ### Basic Usage
57
+
51
58
  ```typescript
52
59
  import { RDAPClient } from 'rdapify';
53
60
 
54
- // Create a secure client with optimized defaults
55
- const client = new RDAPClient({
56
- cache: true, // Automatic caching (1 hour TTL)
57
- redactPII: true, // Automatically redact personal information
58
- retry: {
59
- // Smart retries for transient failures
60
- maxAttempts: 3,
61
- backoff: 'exponential',
62
- },
63
- });
61
+ // Create a client with default settings
62
+ const client = new RDAPClient();
64
63
 
65
64
  // Query a domain
66
65
  const result = await client.domain('example.com');
@@ -75,7 +74,29 @@ console.log({
75
74
  });
76
75
  ```
77
76
 
78
- **Output:**
77
+ ### With Security & Performance Options
78
+
79
+ ```typescript
80
+ import { RDAPClient } from 'rdapify';
81
+
82
+ // Create a secure client with optimized defaults
83
+ const client = new RDAPClient({
84
+ cache: true, // Automatic caching (1 hour TTL)
85
+ redactPII: true, // Automatically redact personal information
86
+ retry: {
87
+ // Smart retries for transient failures
88
+ maxAttempts: 3,
89
+ backoff: 'exponential',
90
+ },
91
+ });
92
+
93
+ // Query domain, IP, or ASN
94
+ const domain = await client.domain('example.com');
95
+ const ip = await client.ip('8.8.8.8');
96
+ const asn = await client.asn('AS15169');
97
+ ```
98
+
99
+ **Example Output:**
79
100
 
80
101
  ```json
81
102
  {
@@ -100,21 +121,23 @@ console.log({
100
121
 
101
122
  ### ⚡ Exceptional Performance
102
123
 
103
- - **Advanced Caching**: Supports In-memory, Redis, and geo-distributed caching
104
- - **Parallel Processing**: Handle 1000+ domains in seconds
124
+ - **Smart Caching**: In-memory LRU cache with configurable TTL (Redis support planned)
125
+ - **Batch Processing**: Process multiple queries efficiently
105
126
  - **Registry Discovery**: Automatic IANA Bootstrap for finding the correct registry
106
- - **Offline Mode**: Work with cached data during network outages
107
- - **Priority Queues**: Ensure critical requests are processed first
127
+ - **Offline Mode**: Work with cached data during network outages (planned)
128
+ - **Optimized Parsing**: Fast JSONPath-based normalization
108
129
 
109
130
  ### 🧩 Seamless Integration
110
131
 
111
132
  - **Full TypeScript Support**: Strongly typed with embedded documentation
112
- - **Multi-environment Support**: Works on Node.js (16+), Bun, Deno, Cloudflare Workers
113
- - **Interactive CLI**: For quick queries and testing
114
- - **Web Playground**: Try the library directly in your browser
115
- - **Pre-built Templates**: For AWS Lambda, Azure Functions, Kubernetes, and more
133
+ - **Node.js Support**: Verified working (target: Node.js 16+; other runtimes untested)
134
+ - **Interactive CLI**: For quick queries and testing (planned)
135
+ - **Web Playground**: Try the library directly in your browser (planned)
136
+ - **Pre-built Templates**: For AWS Lambda, Azure Functions, Kubernetes, and more (planned)
137
+
138
+ ### 📊 Advanced Analytics (Planned)
116
139
 
117
- ### 📊 Advanced Analytics
140
+ Future releases will include:
118
141
 
119
142
  - **Customizable Dashboards**: Track critical domains and assets
120
143
  - **Automated Reports**: Schedule expiration alerts and important changes
@@ -155,15 +178,16 @@ Read our [Security Whitepaper](security/whitepaper.md) for deeper technical deta
155
178
 
156
179
  ## 📚 Documentation
157
180
 
158
- RDAPify provides comprehensive documentation:
181
+ RDAPify provides comprehensive documentation in the repository:
159
182
 
160
- - **[Getting Started](docs/getting_started/)** - Installation and first query
161
- - **[API Reference](docs/api_reference/)** - Complete TypeScript documentation
162
- - **[Core Concepts](docs/core_concepts/)** - RDAP fundamentals and architecture
163
- - **[Security Guide](docs/security/)** - SSRF protection and PII redaction
164
- - **[Guides](docs/guides/)** - Error handling, caching, performance
183
+ - **[Getting Started](docs/getting_started/)** - Installation, quick start, and first query
184
+ - **[API Reference](docs/api_reference/)** - Complete TypeScript API documentation
185
+ - **[Core Concepts](docs/core_concepts/)** - RDAP fundamentals, architecture, and normalization
186
+ - **[Security Guide](docs/security/)** - SSRF protection, PII redaction, and best practices
187
+ - **[Guides](docs/guides/)** - Error handling, caching strategies, and performance optimization
188
+ - **[Examples](examples/)** - Real-world code examples and use cases
165
189
 
166
- > **Note**: Full documentation site (rdapify.com) is planned for future release. For now, browse the [docs/](docs/) directory.
190
+ > **Note**: Full documentation site is planned for future release. For now, browse the [docs/](docs/) directory in the repository.
167
191
 
168
192
  ## 🌐 Interactive Playground
169
193
 
@@ -177,11 +201,22 @@ RDAPify provides comprehensive documentation:
177
201
 
178
202
  RDAPify is an open source project. Get help or contribute:
179
203
 
180
- - **[GitHub Issues](https://github.com/rdapify/rdapify/issues)** - Bug reports and feature requests
181
- - **[GitHub Discussions](https://github.com/rdapify/rdapify/discussions)** - Questions and ideas
204
+ ### 🐛 Bug Reports & Feature Requests
205
+ - **[GitHub Issues](https://github.com/rdapify/RDAPify/issues)** - Report bugs or request features
206
+
207
+ ### 💬 Questions & Discussions
208
+ - **[GitHub Discussions](https://github.com/rdapify/RDAPify/discussions)** - Ask questions, share ideas, and show what you've built
209
+
210
+ ### 📧 Direct Contact
211
+ - **General inquiries**: contact@rdapify.com
212
+ - **Security issues**: security@rdapify.com (see [SECURITY.md](SECURITY.md))
213
+ - **Support**: support@rdapify.com
214
+
215
+ ### 🤝 Contributing
182
216
  - **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines
217
+ - **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** - Community standards
183
218
 
184
- > **Note**: Community chat and enterprise support options are planned for future releases.
219
+ > **Enterprise Support**: For SLA-backed support, consulting, or custom features, contact enterprise@rdapify.com
185
220
 
186
221
  ## 🤝 Contributing
187
222
 
@@ -196,11 +231,11 @@ Start by reading our [Contribution Guide](CONTRIBUTING.md) and [Code of Conduct]
196
231
 
197
232
  ## 🚧 Project Status
198
233
 
199
- **Current Release**: v0.1.0-alpha.1 (Alpha)
234
+ **Current Release**: v0.1.0 (Stable)
200
235
 
201
- ### ✅ What's Ready in v0.1.0-alpha.1
236
+ ### ✅ What's Ready in v0.1.0
202
237
 
203
- Core functionality is implemented and tested:
238
+ Core functionality is production-ready and fully tested:
204
239
 
205
240
  - ✅ **RDAP Client**: Domain, IP, and ASN queries with automatic bootstrap discovery
206
241
  - ✅ **SSRF Protection**: Blocks private IPs, localhost, link-local, with proper CIDR matching (IPv4/IPv6)
@@ -210,22 +245,99 @@ Core functionality is implemented and tested:
210
245
  - ✅ **Error Handling**: Structured errors with retry logic (exponential backoff)
211
246
  - ✅ **TypeScript Support**: Full type definitions and strict mode
212
247
  - ✅ **Test Coverage**: 146 tests passing (unit + integration with mocked fixtures)
213
- - ✅ **Node.js Support**: Tested on Node.js 16+
248
+ - ✅ **Node.js Support**: Verified working (CommonJS + ESM imports functional)
214
249
 
215
- ### 🔄 Alpha Limitations
250
+ ### 🔄 Planned Features
216
251
 
217
- These features are documented but not yet implemented:
252
+ These features are planned for future releases:
218
253
 
219
- - ⏳ **Redis/External Cache**: Only in-memory cache available
220
- - ⏳ **CLI Tool**: Not yet available (use programmatic API only)
221
- - ⏳ **Interactive Playground**: Coming in future release
222
- - ⏳ **Bun/Deno/Cloudflare Workers**: Not tested yet (Node.js only for now)
223
- - ⏳ **Advanced Analytics**: Dashboard and reporting features planned
224
- - ⏳ **Geo-distributed Caching**: Single-node caching only
254
+ - ⏳ **Redis/External Cache**: External cache adapters coming in v0.2.0
255
+ - ⏳ **CLI Tool**: Command-line interface planned
256
+ - ⏳ **Interactive Playground**: Web-based testing environment
257
+ - ⏳ **Bun/Deno/Cloudflare Workers**: Additional runtime support
258
+ - ⏳ **Advanced Analytics**: Dashboard and reporting features
259
+ - ⏳ **Geo-distributed Caching**: Multi-region cache support
225
260
 
226
261
  ### 📋 Roadmap to v0.2.0
227
262
 
228
263
  - Redis cache adapter
264
+ - CLI tool
265
+ - Rate limiting improvements
266
+ - Batch processing optimization
267
+
268
+ See [ROADMAP.md](ROADMAP.md) for the complete roadmap.
269
+
270
+ ## 🏗️ Code Architecture
271
+
272
+ RDAPify follows a clean, modular architecture with clear separation of concerns:
273
+
274
+ ### Source Structure (`/src`)
275
+
276
+ ```
277
+ src/
278
+ ├── client/ # Client orchestration layer
279
+ │ ├── RDAPClient.ts # Main client (242 LOC)
280
+ │ └── QueryOrchestrator.ts # Query pattern extraction (169 LOC)
281
+
282
+ ├── fetcher/ # HTTP and registry discovery
283
+ │ ├── Fetcher.ts # HTTP client (196 LOC)
284
+ │ ├── BootstrapDiscovery.ts # IANA bootstrap (224 LOC)
285
+ │ └── SSRFProtection.ts # Security validation (219 LOC)
286
+
287
+ ├── normalizer/ # Data transformation
288
+ │ ├── Normalizer.ts # Response normalization (239 LOC)
289
+ │ └── PIIRedactor.ts # Privacy protection (140 LOC)
290
+
291
+ ├── cache/ # Caching layer
292
+ │ ├── CacheManager.ts # Cache orchestration (188 LOC)
293
+ │ └── InMemoryCache.ts # LRU implementation (185 LOC)
294
+
295
+ ├── types/ # TypeScript definitions
296
+ │ ├── enums.ts # Type aliases (87 LOC)
297
+ │ ├── entities.ts # Entity interfaces (74 LOC)
298
+ │ ├── responses.ts # Response types (100 LOC)
299
+ │ ├── errors.ts # Error classes (154 LOC)
300
+ │ ├── options.ts # Configuration types (201 LOC)
301
+ │ └── index.ts # Barrel export (36 LOC)
302
+
303
+ └── utils/ # Utilities
304
+ ├── validators/ # Input validation
305
+ │ ├── domain.ts # Domain validation (55 LOC)
306
+ │ ├── ip.ts # IP validation (86 LOC)
307
+ │ ├── asn.ts # ASN validation (42 LOC)
308
+ │ └── network.ts # Network utilities (76 LOC)
309
+
310
+ └── helpers/ # Helper functions
311
+ ├── async.ts # Async utilities (77 LOC)
312
+ ├── string.ts # String manipulation (38 LOC)
313
+ ├── object.ts # Object utilities (33 LOC)
314
+ ├── cache.ts # Cache helpers (11 LOC)
315
+ ├── http.ts # HTTP utilities (25 LOC)
316
+ ├── format.ts # Formatting (27 LOC)
317
+ └── runtime.ts # Runtime detection (47 LOC)
318
+ ```
319
+
320
+ ### Key Design Principles
321
+
322
+ 1. **Modular Architecture**: Each file has a single, clear responsibility
323
+ 2. **Small Files**: All files <250 LOC for easy maintenance
324
+ 3. **Type Safety**: Strict TypeScript with explicit types throughout
325
+ 4. **Testability**: 146 tests with >90% coverage
326
+ 5. **Security First**: SSRF protection and PII redaction built-in
327
+ 6. **Performance**: Smart caching and optimized parsing
328
+
329
+ ### Recent Improvements (Phase 2 Refactoring)
330
+
331
+ - ✅ Extracted QueryOrchestrator from RDAPClient (-29% LOC)
332
+ - ✅ Split validators into focused modules (-87% in main file)
333
+ - ✅ Split helpers into focused modules (-80% in main file)
334
+ - ✅ Split types into enums, entities, responses (-87% in main file)
335
+ - ✅ 712 lines of duplication eliminated
336
+ - ✅ 100% backward compatible (re-export shims)
337
+
338
+ See [REFACTOR_STATUS.md](REFACTOR_STATUS.md) for detailed refactoring progress.
339
+
340
+ ### 📋 Roadmap to v0.2.0 (Continued)
229
341
  - CLI tool with interactive mode
230
342
  - Bun/Deno runtime compatibility testing
231
343
  - Live integration tests (optional via LIVE_TESTS=1)
@@ -234,6 +346,44 @@ These features are documented but not yet implemented:
234
346
 
235
347
  **Want to contribute?** Check out our [CONTRIBUTING.md](CONTRIBUTING.md) and [ROADMAP.md](ROADMAP.md)!
236
348
 
349
+ ## 🔍 Version Verification
350
+
351
+ 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:
352
+
353
+ ```javascript
354
+ // ❌ This will throw ERR_PACKAGE_PATH_NOT_EXPORTED (expected behavior)
355
+ const pkg = require('rdapify/package.json');
356
+ // Error: Package subpath './package.json' is not defined by "exports"
357
+ ```
358
+
359
+ ### Safe Version Verification Methods
360
+
361
+ **Method 1: Using npm (recommended)**
362
+ ```bash
363
+ npm ls rdapify
364
+ # Output: rdapify@0.1.0
365
+ ```
366
+
367
+ **Method 2: Programmatic check via require.resolve**
368
+ ```javascript
369
+ const fs = require('fs');
370
+ const path = require('path');
371
+
372
+ const entry = require.resolve('rdapify');
373
+ const pkgPath = path.join(path.dirname(entry), '..', 'package.json');
374
+ const version = JSON.parse(fs.readFileSync(pkgPath, 'utf8')).version;
375
+
376
+ console.log('rdapify version:', version);
377
+ // Output: 0.1.0
378
+ ```
379
+
380
+ **Method 3: Check installed version in package.json**
381
+ ```bash
382
+ cat node_modules/rdapify/package.json | grep version
383
+ ```
384
+
385
+ This design decision prevents accidental exposure of internal package metadata and maintains a minimal public API surface.
386
+
237
387
  ## 🏢 Early Adopters & Feedback
238
388
 
239
389
  We're looking for early adopters and beta testers! If you're interested in:
@@ -241,8 +391,21 @@ We're looking for early adopters and beta testers! If you're interested in:
241
391
  - Testing the library in your environment
242
392
  - Providing feedback on the API design
243
393
  - Contributing to the codebase
394
+ - Reporting bugs or suggesting features
395
+
396
+ **Get involved**:
397
+ - 🌐 Visit our website: [rdapify.com](https://rdapify.com)
398
+ - 🐛 Open a [GitHub Issue](https://github.com/rdapify/RDAPify/issues) for bugs or feature requests
399
+ - 💬 Start a [GitHub Discussion](https://github.com/rdapify/RDAPify/discussions) for questions or ideas
400
+ - 📖 Read the [Documentation](https://rdapify.com/docs)
401
+ - 🤝 Check out [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines
402
+
403
+ ### Known Issues & Limitations
244
404
 
245
- **Get involved**: Open a [GitHub Issue](https://github.com/rdapify/rdapify/issues) or [Discussion](https://github.com/rdapify/rdapify/discussions)
405
+ - Only in-memory caching available (Redis adapter planned for v0.2.0)
406
+ - No CLI tool yet (programmatic API only)
407
+ - Bun/Deno/Cloudflare Workers compatibility not yet tested
408
+ - Live RDAP server tests disabled by default (use `LIVE_TESTS=1` to enable)
246
409
 
247
410
  ## 📜 License
248
411
 
@@ -1,5 +1,5 @@
1
- import type { DomainResponse, IPResponse, ASNResponse } from '../types';
2
- import type { RDAPClientOptions } from '../types/options';
1
+ import type { DomainResponse, IPResponse, ASNResponse } from '../../shared/types';
2
+ import type { RDAPClientOptions } from '../../shared/types/options';
3
3
  export declare class RDAPClient {
4
4
  private readonly options;
5
5
  private readonly cache;
@@ -8,6 +8,7 @@ export declare class RDAPClient {
8
8
  private readonly bootstrap;
9
9
  private readonly normalizer;
10
10
  private readonly piiRedactor;
11
+ private readonly orchestrator;
11
12
  constructor(options?: RDAPClientOptions);
12
13
  domain(domain: string): Promise<DomainResponse>;
13
14
  ip(ip: string): Promise<IPResponse>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RDAPClient.d.ts","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,4BAA4B,CAAC;AAkBpC,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;gBAErC,OAAO,GAAE,iBAAsB;IA2ErC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiB/C,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBnC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAOvC,cAAc;IA0C5B,OAAO,CAAC,gBAAgB;IAOlB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,QAAQ,IAAI,OAAO,CAAC;QACxB,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,OAAO,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC;KACH,CAAC;IAUF,SAAS,IAAI,QAAQ,CAAC,iBAAiB,CAAC;CAGzC"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RDAPClient = void 0;
4
+ const cache_1 = require("../../infrastructure/cache");
5
+ const http_1 = require("../../infrastructure/http");
6
+ const http_2 = require("../../infrastructure/http");
7
+ const security_1 = require("../../infrastructure/security");
8
+ const http_3 = require("../../infrastructure/http");
9
+ const security_2 = require("../../infrastructure/security");
10
+ const errors_1 = require("../../shared/errors");
11
+ const options_1 = require("../../shared/types/options");
12
+ const helpers_1 = require("../../shared/utils/helpers");
13
+ const services_1 = require("../services");
14
+ class RDAPClient {
15
+ constructor(options = {}) {
16
+ this.options = this.normalizeOptions(options);
17
+ const ssrfOptions = typeof this.options.ssrfProtection === 'boolean'
18
+ ? { enabled: this.options.ssrfProtection }
19
+ : this.options.ssrfProtection;
20
+ this.ssrfProtection = new security_1.SSRFProtection(ssrfOptions);
21
+ this.fetcher = new http_2.Fetcher({
22
+ timeout: typeof this.options.timeout === 'number'
23
+ ? {
24
+ request: this.options.timeout,
25
+ connect: this.options.timeout,
26
+ dns: this.options.timeout,
27
+ }
28
+ : this.options.timeout,
29
+ userAgent: this.options.userAgent,
30
+ headers: this.options.headers,
31
+ followRedirects: this.options.followRedirects,
32
+ maxRedirects: this.options.maxRedirects,
33
+ ssrfProtection: this.ssrfProtection,
34
+ });
35
+ this.bootstrap = new http_1.BootstrapDiscovery(this.options.bootstrapUrl, this.fetcher);
36
+ const cacheOptions = typeof this.options.cache === 'boolean'
37
+ ? this.options.cache
38
+ ? options_1.DEFAULT_OPTIONS.cache
39
+ : { strategy: 'none' }
40
+ : this.options.cache;
41
+ this.cache = new cache_1.CacheManager(cacheOptions);
42
+ this.normalizer = new http_3.Normalizer();
43
+ const privacyOptions = typeof this.options.privacy === 'boolean'
44
+ ? { redactPII: this.options.privacy }
45
+ : this.options.privacy;
46
+ this.piiRedactor = new security_2.PIIRedactor(privacyOptions);
47
+ this.orchestrator = new services_1.QueryOrchestrator({
48
+ cache: this.cache,
49
+ bootstrap: this.bootstrap,
50
+ fetcher: this.fetcher,
51
+ normalizer: this.normalizer,
52
+ piiRedactor: this.piiRedactor,
53
+ includeRaw: this.options.includeRaw,
54
+ fetchWithRetry: this.fetchWithRetry.bind(this),
55
+ });
56
+ }
57
+ async domain(domain) {
58
+ return this.orchestrator.queryDomain(domain);
59
+ }
60
+ async ip(ip) {
61
+ return this.orchestrator.queryIP(ip);
62
+ }
63
+ async asn(asn) {
64
+ return this.orchestrator.queryASN(asn);
65
+ }
66
+ async fetchWithRetry(url) {
67
+ const retryOptions = typeof this.options.retry === 'boolean'
68
+ ? this.options.retry
69
+ ? options_1.DEFAULT_OPTIONS.retry
70
+ : { maxAttempts: 1 }
71
+ : this.options.retry;
72
+ let lastError;
73
+ for (let attempt = 1; attempt <= (retryOptions.maxAttempts || 1); attempt++) {
74
+ try {
75
+ return await this.fetcher.fetch(url);
76
+ }
77
+ catch (error) {
78
+ lastError = error;
79
+ if (error instanceof errors_1.ValidationError) {
80
+ throw error;
81
+ }
82
+ if (attempt < (retryOptions.maxAttempts || 1)) {
83
+ const delay = (0, helpers_1.calculateBackoff)(attempt, retryOptions.backoff || 'exponential', retryOptions.initialDelay || 1000, retryOptions.maxDelay || 10000);
84
+ await (0, helpers_1.sleep)(delay);
85
+ continue;
86
+ }
87
+ }
88
+ }
89
+ throw lastError;
90
+ }
91
+ normalizeOptions(options) {
92
+ return (0, helpers_1.deepMerge)(options_1.DEFAULT_OPTIONS, options);
93
+ }
94
+ async clearCache() {
95
+ await this.cache.clear();
96
+ this.bootstrap.clearCache();
97
+ }
98
+ async getStats() {
99
+ return {
100
+ cache: await this.cache.getStats(),
101
+ bootstrap: this.bootstrap.getCacheStats(),
102
+ };
103
+ }
104
+ getConfig() {
105
+ return { ...this.options };
106
+ }
107
+ }
108
+ exports.RDAPClient = RDAPClient;
109
+ //# sourceMappingURL=RDAPClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RDAPClient.js","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":";;;AAKA,sDAA0D;AAC1D,oDAA+D;AAC/D,oDAAoD;AACpD,4DAA+D;AAC/D,oDAAuD;AACvD,4DAA4D;AAE5D,gDAAsD;AACtD,wDAA6D;AAM7D,wDAAgF;AAChF,0CAAgD;AAgBhD,MAAa,UAAU;IAUrB,YAAY,UAA6B,EAAE;QAEzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAG9C,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;YAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAC1C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,CAAC,WAAW,CAAC,CAAC;QAGtD,IAAI,CAAC,OAAO,GAAG,IAAI,cAAO,CAAC;YACzB,OAAO,EACL,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ;gBACtC,CAAC,CAAC;oBACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC7B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;iBAC1B;gBACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QAGH,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAGjF,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAE,yBAAe,CAAC,KAAsB;gBACzC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAe,EAAE;YACjC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAY,CAAC,YAAY,CAAC,CAAC;QAG5C,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAU,EAAE,CAAC;QAGnC,MAAM,cAAc,GAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,sBAAW,CAAC,cAAc,CAAC,CAAC;QAGnD,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAiB,CAAC;YACxC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAeD,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAeD,KAAK,CAAC,EAAE,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAcD,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAKO,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAE,yBAAe,CAAC,KAAsB;gBACzC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEzB,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5E,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAG3B,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;oBACrC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAGD,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,IAAA,0BAAgB,EAC5B,OAAO,EACP,YAAY,CAAC,OAAO,IAAI,aAAa,EACrC,YAAY,CAAC,YAAY,IAAI,IAAI,EACjC,YAAY,CAAC,QAAQ,IAAI,KAAK,CAC/B,CAAC;oBAEF,MAAM,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAKO,gBAAgB,CAAC,OAA0B;QACjD,OAAO,IAAA,mBAAS,EAAC,yBAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAKD,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IAKD,KAAK,CAAC,QAAQ;QAWZ,OAAO;YACL,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;SAC1C,CAAC;IACJ,CAAC;IAKD,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF;AA7MD,gCA6MC"}
@@ -0,0 +1,2 @@
1
+ export { RDAPClient } from './RDAPClient';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/client/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RDAPClient = void 0;
4
+ var RDAPClient_1 = require("./RDAPClient");
5
+ Object.defineProperty(exports, "RDAPClient", { enumerable: true, get: function () { return RDAPClient_1.RDAPClient; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/client/index.ts"],"names":[],"mappings":";;;AAKA,2CAA0C;AAAjC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1,23 @@
1
+ import type { CacheManager } from '../../infrastructure/cache';
2
+ import type { BootstrapDiscovery } from '../../infrastructure/http';
3
+ import type { Fetcher } from '../../infrastructure/http';
4
+ import type { Normalizer } from '../../infrastructure/http';
5
+ import type { PIIRedactor } from '../../infrastructure/security';
6
+ import type { DomainResponse, IPResponse, ASNResponse } from '../../shared/types';
7
+ export interface QueryOrchestratorConfig {
8
+ cache: CacheManager;
9
+ bootstrap: BootstrapDiscovery;
10
+ fetcher: Fetcher;
11
+ normalizer: Normalizer;
12
+ piiRedactor: PIIRedactor;
13
+ includeRaw: boolean;
14
+ fetchWithRetry: (url: string) => Promise<any>;
15
+ }
16
+ export declare class QueryOrchestrator {
17
+ private readonly config;
18
+ constructor(config: QueryOrchestratorConfig);
19
+ queryDomain(domain: string): Promise<DomainResponse>;
20
+ queryIP(ip: string): Promise<IPResponse>;
21
+ queryASN(asn: string | number): Promise<ASNResponse>;
22
+ }
23
+ //# sourceMappingURL=QueryOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/application/services/QueryOrchestrator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAclF,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC/C;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,MAAM,EAAE,uBAAuB;IAOrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwCpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA2CxC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAoC3D"}