rdapify 0.2.3 → 0.3.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 (499) hide show
  1. package/README.ar.md +572 -0
  2. package/README.md +74 -77
  3. package/dist/{application → cjs/application}/client/RDAPClient.js +197 -6
  4. package/dist/{application → cjs/application}/client/index.js +0 -1
  5. package/dist/{application → cjs/application}/deduplication/QueryDeduplicator.js +0 -1
  6. package/dist/{application → cjs/application}/hooks/MiddlewareHooks.js +0 -1
  7. package/dist/{application → cjs/application}/services/BatchProcessor.js +0 -1
  8. package/dist/{application → cjs/application}/services/QueryOrchestrator.js +0 -1
  9. package/dist/{application → cjs/application}/services/QueryPriority.js +0 -1
  10. package/dist/{application → cjs/application}/services/index.js +0 -1
  11. package/dist/{cli → cjs/cli}/index.js +0 -1
  12. package/dist/cjs/core/ports/bootstrap.port.js +2 -0
  13. package/dist/cjs/core/ports/cache.port.js +2 -0
  14. package/dist/cjs/core/ports/fetcher.port.js +2 -0
  15. package/dist/{core → cjs/core}/ports/index.js +0 -1
  16. package/dist/cjs/core/ports/normalizer.port.js +2 -0
  17. package/dist/cjs/core/ports/pii-redactor.port.js +2 -0
  18. package/dist/{index.js → cjs/index.js} +8 -4
  19. package/dist/{infrastructure → cjs/infrastructure}/cache/CacheManager.js +4 -1
  20. package/dist/{infrastructure → cjs/infrastructure}/cache/InMemoryCache.js +0 -1
  21. package/dist/{infrastructure → cjs/infrastructure}/cache/PersistentCache.js +0 -1
  22. package/dist/{infrastructure → cjs/infrastructure}/cache/RedisCache.js +0 -1
  23. package/dist/cjs/infrastructure/cache/StaleWhileRevalidateCache.js +47 -0
  24. package/dist/{infrastructure → cjs/infrastructure}/cache/index.js +0 -1
  25. package/dist/{infrastructure → cjs/infrastructure}/http/AuthenticationManager.js +0 -1
  26. package/dist/{infrastructure → cjs/infrastructure}/http/BootstrapDiscovery.js +0 -1
  27. package/dist/{infrastructure → cjs/infrastructure}/http/BrowserFetcher.js +0 -1
  28. package/dist/{infrastructure → cjs/infrastructure}/http/BunFetcher.js +0 -1
  29. package/dist/{infrastructure → cjs/infrastructure}/http/CircuitBreaker.js +0 -1
  30. package/dist/{infrastructure → cjs/infrastructure}/http/CloudflareWorkersFetcher.js +0 -1
  31. package/dist/{infrastructure → cjs/infrastructure}/http/CompressionManager.js +0 -1
  32. package/dist/{infrastructure → cjs/infrastructure}/http/ConnectionPool.js +0 -1
  33. package/dist/{infrastructure → cjs/infrastructure}/http/DenoFetcher.js +0 -1
  34. package/dist/cjs/infrastructure/http/DistributedRateLimiter.js +26 -0
  35. package/dist/{infrastructure → cjs/infrastructure}/http/Fetcher.js +5 -1
  36. package/dist/{infrastructure → cjs/infrastructure}/http/Normalizer.js +23 -1
  37. package/dist/{infrastructure → cjs/infrastructure}/http/ProxyManager.js +0 -1
  38. package/dist/{infrastructure → cjs/infrastructure}/http/RateLimiter.js +6 -1
  39. package/dist/{infrastructure → cjs/infrastructure}/http/RetryStrategy.js +0 -1
  40. package/dist/{infrastructure → cjs/infrastructure}/http/index.js +0 -1
  41. package/dist/{infrastructure → cjs/infrastructure}/logging/AuditLogger.js +0 -1
  42. package/dist/{infrastructure → cjs/infrastructure}/logging/Logger.js +0 -1
  43. package/dist/{infrastructure → cjs/infrastructure}/monitoring/GrafanaDashboard.js +0 -1
  44. package/dist/{infrastructure → cjs/infrastructure}/monitoring/MetricsCollector.js +0 -1
  45. package/dist/{infrastructure → cjs/infrastructure}/monitoring/PrometheusExporter.js +0 -1
  46. package/dist/{infrastructure → cjs/infrastructure}/monitoring/TelemetryExporter.js +0 -1
  47. package/dist/{infrastructure → cjs/infrastructure}/native/NativeBackend.js +0 -1
  48. package/dist/{infrastructure → cjs/infrastructure}/security/PIIRedactor.js +0 -1
  49. package/dist/{infrastructure → cjs/infrastructure}/security/SSRFProtection.js +23 -1
  50. package/dist/{infrastructure → cjs/infrastructure}/security/index.js +0 -1
  51. package/dist/cjs/infrastructure/telemetry/UsageTelemetry.js +89 -0
  52. package/dist/{infrastructure → cjs/infrastructure}/validation/ResponseValidator.js +0 -1
  53. package/dist/{integrations → cjs/integrations}/express.js +0 -1
  54. package/dist/{integrations → cjs/integrations}/graphql.js +0 -1
  55. package/dist/{integrations → cjs/integrations}/nestjs.js +0 -1
  56. package/dist/{shared → cjs/shared}/constants/http.constants.js +0 -1
  57. package/dist/{shared → cjs/shared}/constants/index.js +0 -1
  58. package/dist/{shared → cjs/shared}/constants/rdap.constants.js +0 -1
  59. package/dist/{shared → cjs/shared}/errors/base.error.js +7 -2
  60. package/dist/{shared → cjs/shared}/errors/index.js +0 -1
  61. package/dist/{shared → cjs/shared}/types/entities.js +0 -1
  62. package/dist/{shared → cjs/shared}/types/enums.js +0 -1
  63. package/dist/{shared → cjs/shared}/types/errors.js +0 -1
  64. package/dist/{shared → cjs/shared}/types/generics.js +0 -1
  65. package/dist/{shared → cjs/shared}/types/index.js +0 -1
  66. package/dist/{shared → cjs/shared}/types/options.js +5 -1
  67. package/dist/cjs/shared/types/responses.js +2 -0
  68. package/dist/{shared → cjs/shared}/utils/deprecation.js +0 -1
  69. package/dist/{shared → cjs/shared}/utils/enhanced-validators.js +0 -1
  70. package/dist/{shared → cjs/shared}/utils/helpers/async.js +0 -1
  71. package/dist/{shared → cjs/shared}/utils/helpers/cache.js +0 -1
  72. package/dist/{shared → cjs/shared}/utils/helpers/format.js +0 -1
  73. package/dist/{shared → cjs/shared}/utils/helpers/http.js +0 -1
  74. package/dist/{shared → cjs/shared}/utils/helpers/index.js +0 -1
  75. package/dist/{shared → cjs/shared}/utils/helpers/object.js +0 -1
  76. package/dist/{shared → cjs/shared}/utils/helpers/runtime.js +0 -1
  77. package/dist/{shared → cjs/shared}/utils/helpers/string.js +0 -1
  78. package/dist/{shared → cjs/shared}/utils/validators/asn.js +0 -1
  79. package/dist/{shared → cjs/shared}/utils/validators/config-validation.js +0 -1
  80. package/dist/{shared → cjs/shared}/utils/validators/domain.js +0 -1
  81. package/dist/{shared → cjs/shared}/utils/validators/entity.js +0 -1
  82. package/dist/{shared → cjs/shared}/utils/validators/index.js +0 -1
  83. package/dist/{shared → cjs/shared}/utils/validators/ip.js +0 -1
  84. package/dist/{shared → cjs/shared}/utils/validators/nameserver.js +0 -1
  85. package/dist/{shared → cjs/shared}/utils/validators/network.js +0 -1
  86. package/dist/esm/application/client/RDAPClient.js +439 -0
  87. package/dist/esm/application/client/index.js +1 -0
  88. package/dist/esm/application/deduplication/QueryDeduplicator.js +41 -0
  89. package/dist/esm/application/hooks/MiddlewareHooks.js +79 -0
  90. package/dist/esm/application/services/BatchProcessor.js +145 -0
  91. package/dist/esm/application/services/QueryOrchestrator.js +615 -0
  92. package/dist/esm/application/services/QueryPriority.js +109 -0
  93. package/dist/esm/application/services/index.js +2 -0
  94. package/dist/esm/cli/index.js +297 -0
  95. package/dist/esm/core/ports/bootstrap.port.js +1 -0
  96. package/dist/esm/core/ports/cache.port.js +1 -0
  97. package/dist/esm/core/ports/fetcher.port.js +1 -0
  98. package/dist/esm/core/ports/index.js +5 -0
  99. package/dist/esm/core/ports/normalizer.port.js +1 -0
  100. package/dist/esm/core/ports/pii-redactor.port.js +1 -0
  101. package/dist/esm/index.js +40 -0
  102. package/dist/esm/infrastructure/cache/CacheManager.js +123 -0
  103. package/dist/esm/infrastructure/cache/InMemoryCache.js +91 -0
  104. package/dist/esm/infrastructure/cache/PersistentCache.js +188 -0
  105. package/dist/esm/infrastructure/cache/RedisCache.js +106 -0
  106. package/dist/esm/infrastructure/cache/StaleWhileRevalidateCache.js +43 -0
  107. package/dist/esm/infrastructure/cache/index.js +3 -0
  108. package/dist/esm/infrastructure/http/AuthenticationManager.js +94 -0
  109. package/dist/esm/infrastructure/http/BootstrapDiscovery.js +189 -0
  110. package/dist/esm/infrastructure/http/BrowserFetcher.js +42 -0
  111. package/dist/esm/infrastructure/http/BunFetcher.js +46 -0
  112. package/dist/esm/infrastructure/http/CircuitBreaker.js +98 -0
  113. package/dist/esm/infrastructure/http/CloudflareWorkersFetcher.js +39 -0
  114. package/dist/esm/infrastructure/http/CompressionManager.js +80 -0
  115. package/dist/esm/infrastructure/http/ConnectionPool.js +101 -0
  116. package/dist/esm/infrastructure/http/DenoFetcher.js +38 -0
  117. package/dist/esm/infrastructure/http/DistributedRateLimiter.js +22 -0
  118. package/dist/esm/infrastructure/http/Fetcher.js +127 -0
  119. package/dist/esm/infrastructure/http/Normalizer.js +233 -0
  120. package/dist/esm/infrastructure/http/ProxyManager.js +82 -0
  121. package/dist/esm/infrastructure/http/RateLimiter.js +102 -0
  122. package/dist/esm/infrastructure/http/RetryStrategy.js +131 -0
  123. package/dist/esm/infrastructure/http/index.js +3 -0
  124. package/dist/esm/infrastructure/logging/AuditLogger.js +187 -0
  125. package/dist/esm/infrastructure/logging/Logger.js +145 -0
  126. package/dist/esm/infrastructure/monitoring/GrafanaDashboard.js +115 -0
  127. package/dist/esm/infrastructure/monitoring/MetricsCollector.js +284 -0
  128. package/dist/esm/infrastructure/monitoring/PrometheusExporter.js +72 -0
  129. package/dist/esm/infrastructure/monitoring/TelemetryExporter.js +112 -0
  130. package/dist/esm/infrastructure/native/NativeBackend.js +86 -0
  131. package/dist/esm/infrastructure/security/PIIRedactor.js +85 -0
  132. package/dist/esm/infrastructure/security/SSRFProtection.js +162 -0
  133. package/dist/esm/infrastructure/security/index.js +2 -0
  134. package/dist/esm/infrastructure/telemetry/UsageTelemetry.js +84 -0
  135. package/dist/esm/infrastructure/validation/ResponseValidator.js +194 -0
  136. package/dist/esm/integrations/express.js +43 -0
  137. package/dist/esm/integrations/graphql.js +80 -0
  138. package/dist/esm/integrations/nestjs.js +23 -0
  139. package/dist/esm/shared/constants/http.constants.js +25 -0
  140. package/dist/esm/shared/constants/index.js +2 -0
  141. package/dist/esm/shared/constants/rdap.constants.js +17 -0
  142. package/dist/esm/shared/errors/base.error.js +140 -0
  143. package/dist/esm/shared/errors/index.js +1 -0
  144. package/dist/esm/shared/types/entities.js +1 -0
  145. package/dist/esm/shared/types/enums.js +1 -0
  146. package/dist/esm/shared/types/errors.js +82 -0
  147. package/dist/esm/shared/types/generics.js +1 -0
  148. package/dist/esm/shared/types/index.js +1 -0
  149. package/dist/esm/shared/types/options.js +66 -0
  150. package/dist/esm/shared/types/responses.js +1 -0
  151. package/dist/esm/shared/utils/deprecation.js +20 -0
  152. package/dist/esm/shared/utils/enhanced-validators.js +148 -0
  153. package/dist/esm/shared/utils/helpers/async.js +40 -0
  154. package/dist/esm/shared/utils/helpers/cache.js +3 -0
  155. package/dist/esm/shared/utils/helpers/format.js +17 -0
  156. package/dist/esm/shared/utils/helpers/http.js +13 -0
  157. package/dist/esm/shared/utils/helpers/index.js +7 -0
  158. package/dist/esm/shared/utils/helpers/object.js +19 -0
  159. package/dist/esm/shared/utils/helpers/runtime.js +34 -0
  160. package/dist/esm/shared/utils/helpers/string.js +23 -0
  161. package/dist/esm/shared/utils/validators/asn.js +25 -0
  162. package/dist/esm/shared/utils/validators/config-validation.js +93 -0
  163. package/dist/esm/shared/utils/validators/domain.js +29 -0
  164. package/dist/esm/shared/utils/validators/entity.js +22 -0
  165. package/dist/esm/shared/utils/validators/index.js +7 -0
  166. package/dist/esm/shared/utils/validators/ip.js +48 -0
  167. package/dist/esm/shared/utils/validators/nameserver.js +44 -0
  168. package/dist/esm/shared/utils/validators/network.js +42 -0
  169. package/dist/{application → types/application}/client/RDAPClient.d.ts +10 -1
  170. package/dist/types/application/client/RDAPClient.d.ts.map +1 -0
  171. package/dist/types/application/client/index.d.ts.map +1 -0
  172. package/dist/types/application/deduplication/QueryDeduplicator.d.ts.map +1 -0
  173. package/dist/types/application/hooks/MiddlewareHooks.d.ts.map +1 -0
  174. package/dist/types/application/services/BatchProcessor.d.ts.map +1 -0
  175. package/dist/types/application/services/QueryOrchestrator.d.ts.map +1 -0
  176. package/dist/types/application/services/QueryPriority.d.ts.map +1 -0
  177. package/dist/types/application/services/index.d.ts.map +1 -0
  178. package/dist/{cli → types/cli}/index.d.ts.map +1 -1
  179. package/dist/types/core/ports/bootstrap.port.d.ts.map +1 -0
  180. package/dist/types/core/ports/cache.port.d.ts.map +1 -0
  181. package/dist/types/core/ports/fetcher.port.d.ts.map +1 -0
  182. package/dist/types/core/ports/index.d.ts.map +1 -0
  183. package/dist/types/core/ports/normalizer.port.d.ts.map +1 -0
  184. package/dist/types/core/ports/pii-redactor.port.d.ts.map +1 -0
  185. package/dist/{index.d.ts → types/index.d.ts} +6 -3
  186. package/dist/types/index.d.ts.map +1 -0
  187. package/dist/types/infrastructure/cache/CacheManager.d.ts.map +1 -0
  188. package/dist/types/infrastructure/cache/InMemoryCache.d.ts.map +1 -0
  189. package/dist/types/infrastructure/cache/PersistentCache.d.ts.map +1 -0
  190. package/dist/types/infrastructure/cache/RedisCache.d.ts.map +1 -0
  191. package/dist/types/infrastructure/cache/StaleWhileRevalidateCache.d.ts +16 -0
  192. package/dist/types/infrastructure/cache/StaleWhileRevalidateCache.d.ts.map +1 -0
  193. package/dist/types/infrastructure/cache/index.d.ts.map +1 -0
  194. package/dist/types/infrastructure/http/AuthenticationManager.d.ts.map +1 -0
  195. package/dist/types/infrastructure/http/BootstrapDiscovery.d.ts.map +1 -0
  196. package/dist/types/infrastructure/http/BrowserFetcher.d.ts.map +1 -0
  197. package/dist/types/infrastructure/http/BunFetcher.d.ts.map +1 -0
  198. package/dist/types/infrastructure/http/CircuitBreaker.d.ts.map +1 -0
  199. package/dist/types/infrastructure/http/CloudflareWorkersFetcher.d.ts.map +1 -0
  200. package/dist/types/infrastructure/http/CompressionManager.d.ts.map +1 -0
  201. package/dist/types/infrastructure/http/ConnectionPool.d.ts.map +1 -0
  202. package/dist/types/infrastructure/http/DenoFetcher.d.ts.map +1 -0
  203. package/dist/types/infrastructure/http/DistributedRateLimiter.d.ts +12 -0
  204. package/dist/types/infrastructure/http/DistributedRateLimiter.d.ts.map +1 -0
  205. package/dist/{infrastructure → types/infrastructure}/http/Fetcher.d.ts +2 -0
  206. package/dist/types/infrastructure/http/Fetcher.d.ts.map +1 -0
  207. package/dist/types/infrastructure/http/Normalizer.d.ts.map +1 -0
  208. package/dist/types/infrastructure/http/ProxyManager.d.ts.map +1 -0
  209. package/dist/{infrastructure → types/infrastructure}/http/RateLimiter.d.ts +5 -0
  210. package/dist/types/infrastructure/http/RateLimiter.d.ts.map +1 -0
  211. package/dist/types/infrastructure/http/RetryStrategy.d.ts.map +1 -0
  212. package/dist/types/infrastructure/http/index.d.ts.map +1 -0
  213. package/dist/types/infrastructure/logging/AuditLogger.d.ts.map +1 -0
  214. package/dist/types/infrastructure/logging/Logger.d.ts.map +1 -0
  215. package/dist/{infrastructure → types/infrastructure}/monitoring/GrafanaDashboard.d.ts.map +1 -1
  216. package/dist/types/infrastructure/monitoring/MetricsCollector.d.ts.map +1 -0
  217. package/dist/types/infrastructure/monitoring/PrometheusExporter.d.ts.map +1 -0
  218. package/dist/types/infrastructure/monitoring/TelemetryExporter.d.ts.map +1 -0
  219. package/dist/types/infrastructure/native/NativeBackend.d.ts.map +1 -0
  220. package/dist/types/infrastructure/security/PIIRedactor.d.ts.map +1 -0
  221. package/dist/{infrastructure → types/infrastructure}/security/SSRFProtection.d.ts +1 -0
  222. package/dist/types/infrastructure/security/SSRFProtection.d.ts.map +1 -0
  223. package/dist/types/infrastructure/security/index.d.ts.map +1 -0
  224. package/dist/types/infrastructure/telemetry/UsageTelemetry.d.ts +13 -0
  225. package/dist/types/infrastructure/telemetry/UsageTelemetry.d.ts.map +1 -0
  226. package/dist/types/infrastructure/validation/ResponseValidator.d.ts.map +1 -0
  227. package/dist/types/integrations/express.d.ts.map +1 -0
  228. package/dist/types/integrations/graphql.d.ts.map +1 -0
  229. package/dist/types/integrations/nestjs.d.ts.map +1 -0
  230. package/dist/types/shared/constants/http.constants.d.ts.map +1 -0
  231. package/dist/types/shared/constants/index.d.ts.map +1 -0
  232. package/dist/types/shared/constants/rdap.constants.d.ts.map +1 -0
  233. package/dist/{shared → types/shared}/errors/base.error.d.ts +3 -0
  234. package/dist/types/shared/errors/base.error.d.ts.map +1 -0
  235. package/dist/types/shared/errors/index.d.ts.map +1 -0
  236. package/dist/types/shared/types/entities.d.ts.map +1 -0
  237. package/dist/{shared → types/shared}/types/enums.d.ts +1 -1
  238. package/dist/types/shared/types/enums.d.ts.map +1 -0
  239. package/dist/types/shared/types/errors.d.ts.map +1 -0
  240. package/dist/types/shared/types/generics.d.ts.map +1 -0
  241. package/dist/{shared → types/shared}/types/index.d.ts +1 -1
  242. package/dist/types/shared/types/index.d.ts.map +1 -0
  243. package/dist/{shared → types/shared}/types/options.d.ts +9 -0
  244. package/dist/types/shared/types/options.d.ts.map +1 -0
  245. package/dist/{shared → types/shared}/types/responses.d.ts +20 -0
  246. package/dist/types/shared/types/responses.d.ts.map +1 -0
  247. package/dist/types/shared/utils/deprecation.d.ts.map +1 -0
  248. package/dist/types/shared/utils/enhanced-validators.d.ts.map +1 -0
  249. package/dist/types/shared/utils/helpers/async.d.ts.map +1 -0
  250. package/dist/types/shared/utils/helpers/cache.d.ts.map +1 -0
  251. package/dist/types/shared/utils/helpers/format.d.ts.map +1 -0
  252. package/dist/types/shared/utils/helpers/http.d.ts.map +1 -0
  253. package/dist/types/shared/utils/helpers/index.d.ts.map +1 -0
  254. package/dist/types/shared/utils/helpers/object.d.ts.map +1 -0
  255. package/dist/types/shared/utils/helpers/runtime.d.ts.map +1 -0
  256. package/dist/types/shared/utils/helpers/string.d.ts.map +1 -0
  257. package/dist/types/shared/utils/validators/asn.d.ts.map +1 -0
  258. package/dist/types/shared/utils/validators/config-validation.d.ts.map +1 -0
  259. package/dist/types/shared/utils/validators/domain.d.ts.map +1 -0
  260. package/dist/types/shared/utils/validators/entity.d.ts.map +1 -0
  261. package/dist/types/shared/utils/validators/index.d.ts.map +1 -0
  262. package/dist/types/shared/utils/validators/ip.d.ts.map +1 -0
  263. package/dist/types/shared/utils/validators/nameserver.d.ts.map +1 -0
  264. package/dist/types/shared/utils/validators/network.d.ts.map +1 -0
  265. package/package.json +29 -25
  266. package/dist/application/client/RDAPClient.d.ts.map +0 -1
  267. package/dist/application/client/RDAPClient.js.map +0 -1
  268. package/dist/application/client/index.d.ts.map +0 -1
  269. package/dist/application/client/index.js.map +0 -1
  270. package/dist/application/deduplication/QueryDeduplicator.d.ts.map +0 -1
  271. package/dist/application/deduplication/QueryDeduplicator.js.map +0 -1
  272. package/dist/application/hooks/MiddlewareHooks.d.ts.map +0 -1
  273. package/dist/application/hooks/MiddlewareHooks.js.map +0 -1
  274. package/dist/application/services/BatchProcessor.d.ts.map +0 -1
  275. package/dist/application/services/BatchProcessor.js.map +0 -1
  276. package/dist/application/services/QueryOrchestrator.d.ts.map +0 -1
  277. package/dist/application/services/QueryOrchestrator.js.map +0 -1
  278. package/dist/application/services/QueryPriority.d.ts.map +0 -1
  279. package/dist/application/services/QueryPriority.js.map +0 -1
  280. package/dist/application/services/index.d.ts.map +0 -1
  281. package/dist/application/services/index.js.map +0 -1
  282. package/dist/cli/index.js.map +0 -1
  283. package/dist/core/ports/bootstrap.port.d.ts.map +0 -1
  284. package/dist/core/ports/bootstrap.port.js +0 -3
  285. package/dist/core/ports/bootstrap.port.js.map +0 -1
  286. package/dist/core/ports/cache.port.d.ts.map +0 -1
  287. package/dist/core/ports/cache.port.js +0 -3
  288. package/dist/core/ports/cache.port.js.map +0 -1
  289. package/dist/core/ports/fetcher.port.d.ts.map +0 -1
  290. package/dist/core/ports/fetcher.port.js +0 -3
  291. package/dist/core/ports/fetcher.port.js.map +0 -1
  292. package/dist/core/ports/index.d.ts.map +0 -1
  293. package/dist/core/ports/index.js.map +0 -1
  294. package/dist/core/ports/normalizer.port.d.ts.map +0 -1
  295. package/dist/core/ports/normalizer.port.js +0 -3
  296. package/dist/core/ports/normalizer.port.js.map +0 -1
  297. package/dist/core/ports/pii-redactor.port.d.ts.map +0 -1
  298. package/dist/core/ports/pii-redactor.port.js +0 -3
  299. package/dist/core/ports/pii-redactor.port.js.map +0 -1
  300. package/dist/index.d.ts.map +0 -1
  301. package/dist/index.js.map +0 -1
  302. package/dist/infrastructure/cache/CacheManager.d.ts.map +0 -1
  303. package/dist/infrastructure/cache/CacheManager.js.map +0 -1
  304. package/dist/infrastructure/cache/InMemoryCache.d.ts.map +0 -1
  305. package/dist/infrastructure/cache/InMemoryCache.js.map +0 -1
  306. package/dist/infrastructure/cache/PersistentCache.d.ts.map +0 -1
  307. package/dist/infrastructure/cache/PersistentCache.js.map +0 -1
  308. package/dist/infrastructure/cache/RedisCache.d.ts.map +0 -1
  309. package/dist/infrastructure/cache/RedisCache.js.map +0 -1
  310. package/dist/infrastructure/cache/index.d.ts.map +0 -1
  311. package/dist/infrastructure/cache/index.js.map +0 -1
  312. package/dist/infrastructure/http/AuthenticationManager.d.ts.map +0 -1
  313. package/dist/infrastructure/http/AuthenticationManager.js.map +0 -1
  314. package/dist/infrastructure/http/BootstrapDiscovery.d.ts.map +0 -1
  315. package/dist/infrastructure/http/BootstrapDiscovery.js.map +0 -1
  316. package/dist/infrastructure/http/BrowserFetcher.d.ts.map +0 -1
  317. package/dist/infrastructure/http/BrowserFetcher.js.map +0 -1
  318. package/dist/infrastructure/http/BunFetcher.d.ts.map +0 -1
  319. package/dist/infrastructure/http/BunFetcher.js.map +0 -1
  320. package/dist/infrastructure/http/CircuitBreaker.d.ts.map +0 -1
  321. package/dist/infrastructure/http/CircuitBreaker.js.map +0 -1
  322. package/dist/infrastructure/http/CloudflareWorkersFetcher.d.ts.map +0 -1
  323. package/dist/infrastructure/http/CloudflareWorkersFetcher.js.map +0 -1
  324. package/dist/infrastructure/http/CompressionManager.d.ts.map +0 -1
  325. package/dist/infrastructure/http/CompressionManager.js.map +0 -1
  326. package/dist/infrastructure/http/ConnectionPool.d.ts.map +0 -1
  327. package/dist/infrastructure/http/ConnectionPool.js.map +0 -1
  328. package/dist/infrastructure/http/DenoFetcher.d.ts.map +0 -1
  329. package/dist/infrastructure/http/DenoFetcher.js.map +0 -1
  330. package/dist/infrastructure/http/Fetcher.d.ts.map +0 -1
  331. package/dist/infrastructure/http/Fetcher.js.map +0 -1
  332. package/dist/infrastructure/http/Normalizer.d.ts.map +0 -1
  333. package/dist/infrastructure/http/Normalizer.js.map +0 -1
  334. package/dist/infrastructure/http/ProxyManager.d.ts.map +0 -1
  335. package/dist/infrastructure/http/ProxyManager.js.map +0 -1
  336. package/dist/infrastructure/http/RateLimiter.d.ts.map +0 -1
  337. package/dist/infrastructure/http/RateLimiter.js.map +0 -1
  338. package/dist/infrastructure/http/RetryStrategy.d.ts.map +0 -1
  339. package/dist/infrastructure/http/RetryStrategy.js.map +0 -1
  340. package/dist/infrastructure/http/index.d.ts.map +0 -1
  341. package/dist/infrastructure/http/index.js.map +0 -1
  342. package/dist/infrastructure/logging/AuditLogger.d.ts.map +0 -1
  343. package/dist/infrastructure/logging/AuditLogger.js.map +0 -1
  344. package/dist/infrastructure/logging/Logger.d.ts.map +0 -1
  345. package/dist/infrastructure/logging/Logger.js.map +0 -1
  346. package/dist/infrastructure/monitoring/GrafanaDashboard.js.map +0 -1
  347. package/dist/infrastructure/monitoring/MetricsCollector.d.ts.map +0 -1
  348. package/dist/infrastructure/monitoring/MetricsCollector.js.map +0 -1
  349. package/dist/infrastructure/monitoring/PrometheusExporter.d.ts.map +0 -1
  350. package/dist/infrastructure/monitoring/PrometheusExporter.js.map +0 -1
  351. package/dist/infrastructure/monitoring/TelemetryExporter.d.ts.map +0 -1
  352. package/dist/infrastructure/monitoring/TelemetryExporter.js.map +0 -1
  353. package/dist/infrastructure/native/NativeBackend.d.ts.map +0 -1
  354. package/dist/infrastructure/native/NativeBackend.js.map +0 -1
  355. package/dist/infrastructure/security/PIIRedactor.d.ts.map +0 -1
  356. package/dist/infrastructure/security/PIIRedactor.js.map +0 -1
  357. package/dist/infrastructure/security/SSRFProtection.d.ts.map +0 -1
  358. package/dist/infrastructure/security/SSRFProtection.js.map +0 -1
  359. package/dist/infrastructure/security/index.d.ts.map +0 -1
  360. package/dist/infrastructure/security/index.js.map +0 -1
  361. package/dist/infrastructure/validation/ResponseValidator.d.ts.map +0 -1
  362. package/dist/infrastructure/validation/ResponseValidator.js.map +0 -1
  363. package/dist/integrations/express.d.ts.map +0 -1
  364. package/dist/integrations/express.js.map +0 -1
  365. package/dist/integrations/graphql.d.ts.map +0 -1
  366. package/dist/integrations/graphql.js.map +0 -1
  367. package/dist/integrations/nestjs.d.ts.map +0 -1
  368. package/dist/integrations/nestjs.js.map +0 -1
  369. package/dist/shared/constants/http.constants.d.ts.map +0 -1
  370. package/dist/shared/constants/http.constants.js.map +0 -1
  371. package/dist/shared/constants/index.d.ts.map +0 -1
  372. package/dist/shared/constants/index.js.map +0 -1
  373. package/dist/shared/constants/rdap.constants.d.ts.map +0 -1
  374. package/dist/shared/constants/rdap.constants.js.map +0 -1
  375. package/dist/shared/errors/base.error.d.ts.map +0 -1
  376. package/dist/shared/errors/base.error.js.map +0 -1
  377. package/dist/shared/errors/index.d.ts.map +0 -1
  378. package/dist/shared/errors/index.js.map +0 -1
  379. package/dist/shared/types/entities.d.ts.map +0 -1
  380. package/dist/shared/types/entities.js.map +0 -1
  381. package/dist/shared/types/enums.d.ts.map +0 -1
  382. package/dist/shared/types/enums.js.map +0 -1
  383. package/dist/shared/types/errors.d.ts.map +0 -1
  384. package/dist/shared/types/errors.js.map +0 -1
  385. package/dist/shared/types/generics.d.ts.map +0 -1
  386. package/dist/shared/types/generics.js.map +0 -1
  387. package/dist/shared/types/index.d.ts.map +0 -1
  388. package/dist/shared/types/index.js.map +0 -1
  389. package/dist/shared/types/options.d.ts.map +0 -1
  390. package/dist/shared/types/options.js.map +0 -1
  391. package/dist/shared/types/responses.d.ts.map +0 -1
  392. package/dist/shared/types/responses.js +0 -3
  393. package/dist/shared/types/responses.js.map +0 -1
  394. package/dist/shared/utils/deprecation.d.ts.map +0 -1
  395. package/dist/shared/utils/deprecation.js.map +0 -1
  396. package/dist/shared/utils/enhanced-validators.d.ts.map +0 -1
  397. package/dist/shared/utils/enhanced-validators.js.map +0 -1
  398. package/dist/shared/utils/helpers/async.d.ts.map +0 -1
  399. package/dist/shared/utils/helpers/async.js.map +0 -1
  400. package/dist/shared/utils/helpers/cache.d.ts.map +0 -1
  401. package/dist/shared/utils/helpers/cache.js.map +0 -1
  402. package/dist/shared/utils/helpers/format.d.ts.map +0 -1
  403. package/dist/shared/utils/helpers/format.js.map +0 -1
  404. package/dist/shared/utils/helpers/http.d.ts.map +0 -1
  405. package/dist/shared/utils/helpers/http.js.map +0 -1
  406. package/dist/shared/utils/helpers/index.d.ts.map +0 -1
  407. package/dist/shared/utils/helpers/index.js.map +0 -1
  408. package/dist/shared/utils/helpers/object.d.ts.map +0 -1
  409. package/dist/shared/utils/helpers/object.js.map +0 -1
  410. package/dist/shared/utils/helpers/runtime.d.ts.map +0 -1
  411. package/dist/shared/utils/helpers/runtime.js.map +0 -1
  412. package/dist/shared/utils/helpers/string.d.ts.map +0 -1
  413. package/dist/shared/utils/helpers/string.js.map +0 -1
  414. package/dist/shared/utils/validators/asn.d.ts.map +0 -1
  415. package/dist/shared/utils/validators/asn.js.map +0 -1
  416. package/dist/shared/utils/validators/config-validation.d.ts.map +0 -1
  417. package/dist/shared/utils/validators/config-validation.js.map +0 -1
  418. package/dist/shared/utils/validators/domain.d.ts.map +0 -1
  419. package/dist/shared/utils/validators/domain.js.map +0 -1
  420. package/dist/shared/utils/validators/entity.d.ts.map +0 -1
  421. package/dist/shared/utils/validators/entity.js.map +0 -1
  422. package/dist/shared/utils/validators/index.d.ts.map +0 -1
  423. package/dist/shared/utils/validators/index.js.map +0 -1
  424. package/dist/shared/utils/validators/ip.d.ts.map +0 -1
  425. package/dist/shared/utils/validators/ip.js.map +0 -1
  426. package/dist/shared/utils/validators/nameserver.d.ts.map +0 -1
  427. package/dist/shared/utils/validators/nameserver.js.map +0 -1
  428. package/dist/shared/utils/validators/network.d.ts.map +0 -1
  429. package/dist/shared/utils/validators/network.js.map +0 -1
  430. /package/dist/{application → types/application}/client/index.d.ts +0 -0
  431. /package/dist/{application → types/application}/deduplication/QueryDeduplicator.d.ts +0 -0
  432. /package/dist/{application → types/application}/hooks/MiddlewareHooks.d.ts +0 -0
  433. /package/dist/{application → types/application}/services/BatchProcessor.d.ts +0 -0
  434. /package/dist/{application → types/application}/services/QueryOrchestrator.d.ts +0 -0
  435. /package/dist/{application → types/application}/services/QueryPriority.d.ts +0 -0
  436. /package/dist/{application → types/application}/services/index.d.ts +0 -0
  437. /package/dist/{cli → types/cli}/index.d.ts +0 -0
  438. /package/dist/{core → types/core}/ports/bootstrap.port.d.ts +0 -0
  439. /package/dist/{core → types/core}/ports/cache.port.d.ts +0 -0
  440. /package/dist/{core → types/core}/ports/fetcher.port.d.ts +0 -0
  441. /package/dist/{core → types/core}/ports/index.d.ts +0 -0
  442. /package/dist/{core → types/core}/ports/normalizer.port.d.ts +0 -0
  443. /package/dist/{core → types/core}/ports/pii-redactor.port.d.ts +0 -0
  444. /package/dist/{infrastructure → types/infrastructure}/cache/CacheManager.d.ts +0 -0
  445. /package/dist/{infrastructure → types/infrastructure}/cache/InMemoryCache.d.ts +0 -0
  446. /package/dist/{infrastructure → types/infrastructure}/cache/PersistentCache.d.ts +0 -0
  447. /package/dist/{infrastructure → types/infrastructure}/cache/RedisCache.d.ts +0 -0
  448. /package/dist/{infrastructure → types/infrastructure}/cache/index.d.ts +0 -0
  449. /package/dist/{infrastructure → types/infrastructure}/http/AuthenticationManager.d.ts +0 -0
  450. /package/dist/{infrastructure → types/infrastructure}/http/BootstrapDiscovery.d.ts +0 -0
  451. /package/dist/{infrastructure → types/infrastructure}/http/BrowserFetcher.d.ts +0 -0
  452. /package/dist/{infrastructure → types/infrastructure}/http/BunFetcher.d.ts +0 -0
  453. /package/dist/{infrastructure → types/infrastructure}/http/CircuitBreaker.d.ts +0 -0
  454. /package/dist/{infrastructure → types/infrastructure}/http/CloudflareWorkersFetcher.d.ts +0 -0
  455. /package/dist/{infrastructure → types/infrastructure}/http/CompressionManager.d.ts +0 -0
  456. /package/dist/{infrastructure → types/infrastructure}/http/ConnectionPool.d.ts +0 -0
  457. /package/dist/{infrastructure → types/infrastructure}/http/DenoFetcher.d.ts +0 -0
  458. /package/dist/{infrastructure → types/infrastructure}/http/Normalizer.d.ts +0 -0
  459. /package/dist/{infrastructure → types/infrastructure}/http/ProxyManager.d.ts +0 -0
  460. /package/dist/{infrastructure → types/infrastructure}/http/RetryStrategy.d.ts +0 -0
  461. /package/dist/{infrastructure → types/infrastructure}/http/index.d.ts +0 -0
  462. /package/dist/{infrastructure → types/infrastructure}/logging/AuditLogger.d.ts +0 -0
  463. /package/dist/{infrastructure → types/infrastructure}/logging/Logger.d.ts +0 -0
  464. /package/dist/{infrastructure → types/infrastructure}/monitoring/GrafanaDashboard.d.ts +0 -0
  465. /package/dist/{infrastructure → types/infrastructure}/monitoring/MetricsCollector.d.ts +0 -0
  466. /package/dist/{infrastructure → types/infrastructure}/monitoring/PrometheusExporter.d.ts +0 -0
  467. /package/dist/{infrastructure → types/infrastructure}/monitoring/TelemetryExporter.d.ts +0 -0
  468. /package/dist/{infrastructure → types/infrastructure}/native/NativeBackend.d.ts +0 -0
  469. /package/dist/{infrastructure → types/infrastructure}/security/PIIRedactor.d.ts +0 -0
  470. /package/dist/{infrastructure → types/infrastructure}/security/index.d.ts +0 -0
  471. /package/dist/{infrastructure → types/infrastructure}/validation/ResponseValidator.d.ts +0 -0
  472. /package/dist/{integrations → types/integrations}/express.d.ts +0 -0
  473. /package/dist/{integrations → types/integrations}/graphql.d.ts +0 -0
  474. /package/dist/{integrations → types/integrations}/nestjs.d.ts +0 -0
  475. /package/dist/{shared → types/shared}/constants/http.constants.d.ts +0 -0
  476. /package/dist/{shared → types/shared}/constants/index.d.ts +0 -0
  477. /package/dist/{shared → types/shared}/constants/rdap.constants.d.ts +0 -0
  478. /package/dist/{shared → types/shared}/errors/index.d.ts +0 -0
  479. /package/dist/{shared → types/shared}/types/entities.d.ts +0 -0
  480. /package/dist/{shared → types/shared}/types/errors.d.ts +0 -0
  481. /package/dist/{shared → types/shared}/types/generics.d.ts +0 -0
  482. /package/dist/{shared → types/shared}/utils/deprecation.d.ts +0 -0
  483. /package/dist/{shared → types/shared}/utils/enhanced-validators.d.ts +0 -0
  484. /package/dist/{shared → types/shared}/utils/helpers/async.d.ts +0 -0
  485. /package/dist/{shared → types/shared}/utils/helpers/cache.d.ts +0 -0
  486. /package/dist/{shared → types/shared}/utils/helpers/format.d.ts +0 -0
  487. /package/dist/{shared → types/shared}/utils/helpers/http.d.ts +0 -0
  488. /package/dist/{shared → types/shared}/utils/helpers/index.d.ts +0 -0
  489. /package/dist/{shared → types/shared}/utils/helpers/object.d.ts +0 -0
  490. /package/dist/{shared → types/shared}/utils/helpers/runtime.d.ts +0 -0
  491. /package/dist/{shared → types/shared}/utils/helpers/string.d.ts +0 -0
  492. /package/dist/{shared → types/shared}/utils/validators/asn.d.ts +0 -0
  493. /package/dist/{shared → types/shared}/utils/validators/config-validation.d.ts +0 -0
  494. /package/dist/{shared → types/shared}/utils/validators/domain.d.ts +0 -0
  495. /package/dist/{shared → types/shared}/utils/validators/entity.d.ts +0 -0
  496. /package/dist/{shared → types/shared}/utils/validators/index.d.ts +0 -0
  497. /package/dist/{shared → types/shared}/utils/validators/ip.d.ts +0 -0
  498. /package/dist/{shared → types/shared}/utils/validators/nameserver.d.ts +0 -0
  499. /package/dist/{shared → types/shared}/utils/validators/network.d.ts +0 -0
package/README.md CHANGED
@@ -397,109 +397,106 @@ RDAPify is an open source project. Get help or contribute:
397
397
 
398
398
  ## 🚧 Project Status
399
399
 
400
- **Current Release**: v0.1.8 (Alpha)
401
-
402
- ### 🎉 What's New in v0.1.7
403
-
404
- **Nameserver & Entity Query Support**
405
- - ✅ **Nameserver Queries**: `client.nameserver('ns1.example.com')` — auto-discovery via IANA DNS bootstrap
406
- - ✅ **Entity Queries**: `client.entity('ARIN-HN-1', serverUrl)` contact/registrant/registrar lookup
407
- - ✅ **CLI Extended**: `rdapify nameserver <hostname>`, `rdapify entity <handle> --server <url>`
408
- - ✅ **New Types**: `NameserverResponse` and `EntityResponse` exported from main entry point
409
- - ✅ **New Validators**: `validateNameserver`, `validateEntityHandle`, `normalizeNameserver`, `normalizeEntityHandle`
410
- - ✅ **All query types** now support full pipeline: caching, middleware hooks, metrics, deduplication, PII redaction
411
-
412
- ### v0.1.6 — CLI Tool & Runtime Support
413
- - **CLI Tool**: `rdapify domain <name>`, `rdapify ip <addr>`, `rdapify asn <num>` zero external dependencies
414
- - ✅ **CLI Flags**: `--json`, `--no-cache`, `--timeout <ms>`, `--version/-v`, `--help/-h`
415
- - ✅ **Cloudflare Workers**: Full runtime detection and support (`isCloudflareWorkers()`)
416
- - ✅ **Critical Redis Fix**: `RedisCache.clear()` no longer wipes the entire database
417
-
418
- **v0.1.5 — Compliance & Middleware**
419
- - **Redis Cache**: Production-ready Redis adapter with peer-dependency pattern
420
- - ✅ **Middleware Hooks**: `beforeQuery`, `afterQuery`, `onError`, `onCacheHit`, `onCacheMiss`, `onRetry` lifecycle hooks
421
- - ✅ **Query Deduplicator**: Collapses concurrent identical in-flight requests into a single Promise
422
- - ✅ **Audit Logger**: GDPR/SOC2/CCPA-compliant audit trail with in-memory and file (NDJSON) adapters
423
- - ✅ **Response Validator**: RFC 7483 schema validation with strict/lenient/off modes
424
-
425
- **v0.1.4TypeScript Strict Mode**
426
- - ✅ TypeScript strict mode throughout the entire codebase
427
-
428
- **v0.1.3 15+ Defensive Bug Fixes**
429
- - ✅ Normalizer null checks, BootstrapDiscovery NaN guard, Fetcher redirect validation
430
- - ConnectionPool acquire timeout, PIIRedactor `structuredClone`, SSRFProtection IPv6 brackets
431
- - ✅ MetricsCollector division-by-zero protection
432
-
433
- **Previous Releases (v0.1.0–v0.1.2)**
434
- - ✅ Authentication (Basic/Bearer/API Key/OAuth2), Proxy (HTTP/HTTPS/SOCKS4/SOCKS5), Compression (gzip/brotli/deflate)
435
- - ✅ Retry strategies with circuit breaker, query prioritization, enhanced validation (IDN, IPv6 zones, ASN ranges)
436
- - ✅ Connection pooling (30-40% faster), metrics & monitoring, request/response logging
437
- - ✅ Persistent cache (file-based), interactive playground
400
+ **Current Release**: v0.3.0 (Alpha)
401
+
402
+ ### 🎉 What's New in v0.3.0
403
+
404
+ **Streaming, Monitoring & Runtime Maturity**
405
+ - ✅ **Streaming Batch API**: `client.streamBatch(queries[])` — `AsyncIterable<QueryResult>` with back-pressure (no overflow at 1000+ queries)
406
+ - ✅ **Prometheus Exporter**: `PrometheusExporter` class with `createHttpHandler()` for metrics scraping
407
+ - ✅ **Grafana Dashboard**: Built-in `RDAPIFY_GRAFANA_DASHBOARD` JSON template import directly into Grafana
408
+ - ✅ **OpenTelemetry Traces**: `TelemetryExporter` + `ClientConfig.telemetry.endpoint` for distributed tracing
409
+ - ✅ **Multi-region Bootstrap**: `ClientConfig.bootstrap.regions: ['us', 'eu', 'ap']` — auto-selects nearest IANA mirror
410
+ - ✅ **Deprecation Engine**: `deprecated()` utility runtime warning via `process.emitWarning`, emitted once per code path
411
+ - ✅ **BrowserFetcher**: Full browser-compatible fetcher for proxy-based browser environments
412
+
413
+ ### v0.2.3Framework Integrations
414
+
415
+ - ✅ **GraphQL Schema**: framework-agnostic `{ typeDefs, resolvers }` — works with graphql-yoga and any GraphQL server
416
+ - ✅ **Express Middleware**: `rdapifyExpress(client)` `GET /domain/:name`, `/ip/:address`, `/asn/:number`
417
+ - ✅ **NestJS Module**: `RdapifyModule.forRoot(config)` + `@InjectRdapClient()` decorator
418
+
419
+ ### v0.2.2 Edge Runtime Support
420
+
421
+ - ✅ **Deno Support**: `DenoFetcher` with `isDeno()` runtime detection
422
+ - ✅ **Cloudflare Workers**: `CloudflareWorkersFetcher` no `fs` or `process` dependencies; edge-compatible
423
+ - ✅ **Package exports**: `./worker`, `./deno`, `./node` entry points
424
+
425
+ ### v0.2.1 — Bun Runtime
426
+
427
+ - ✅ **BunFetcher**: `BunFetcher implements IFetcherPort` — uses `Bun.fetch`; auto-selected when Bun is detected
428
+ - ✅ **CI**: Bun job added to `.github/workflows/ci.yml`
429
+
430
+ ### v0.2.0 Core Enhancements
431
+
432
+ - ✅ **Circuit Breaker**: complete `closed → open → half-open → closed/open` state machine
433
+ - ✅ **Redis Pipeline**: batch `getMany`/`setMany` + SHA-256 key compression for long keys
434
+ - ✅ **Middleware `ctx.abort()`**: `beforeQuery` hooks can now abort queries (`QueryAbortedError`)
435
+ - ✅ **Middleware Priority**: numeric priority ordering (lower = higher priority)
436
+ - ✅ **HTTP/2 Support**: opt-in via `ClientConfig.http2: boolean`
437
+
438
+ ### v0.1.9 — Availability & Bootstrap
439
+
440
+ - ✅ **Domain Availability**: `client.checkAvailability(domain)` — RDAP-only, returns `{ available, expiresAt? }`
441
+ - ✅ **Bulk Availability**: `client.checkAvailabilityBatch(domains[])` — concurrent batch
442
+ - ✅ **Live Integration Tests**: opt-in `npm run test:live` via `LIVE_TESTS=1` (weekly CI workflow, does not block merge)
443
+ - ✅ **Advanced Bootstrap Config**: `customServers`, `ttl` override, `fallback` to IANA
444
+
445
+ **Previous Releases (v0.1.0–v0.1.8)**
446
+ - ✅ Rust native backend (`rdapify-nd`), CLI tool, nameserver/entity queries, TypeScript strict mode
447
+ - ✅ Redis cache, middleware hooks, query deduplication, audit logger, RFC 7483 response validation
448
+ - ✅ Authentication (Basic/Bearer/API Key/OAuth2), proxy (HTTP/HTTPS/SOCKS4/SOCKS5), compression
449
+ - ✅ Retry strategies, circuit breaker, query prioritization, connection pooling, metrics & monitoring
438
450
 
439
451
  See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
440
452
 
441
- ### ✅ Full Feature Set (v0.1.8)
453
+ ### ✅ Full Feature Set (v0.3.0)
442
454
 
443
455
  - ✅ **RDAP Client**: Domain, IP, ASN, Nameserver, and Entity queries with automatic IANA bootstrap discovery
444
- - ✅ **CLI Tool**: Command-line interface with human-readable and JSON output (`domain`, `ip`, `asn`, `nameserver`, `entity`)
456
+ - ✅ **Domain Availability**: `client.checkAvailability()` + `client.checkAvailabilityBatch()` via RDAP
457
+ - ✅ **CLI Tool**: `rdapify domain/ip/asn/nameserver/entity` with `--json`, `--no-cache`, `--timeout`, `--server` flags
445
458
  - ✅ **SSRF Protection**: Blocks private IPs, localhost, link-local, CIDR matching (IPv4/IPv6)
446
459
  - ✅ **Data Normalization**: Consistent response format across all registries
447
460
  - ✅ **PII Redaction**: Automatic redaction of emails, phones, addresses (GDPR/CCPA)
448
461
  - ✅ **Audit Logging**: Compliance-grade audit trail (GDPR/SOC2/CCPA) with NDJSON file adapter
449
462
  - ✅ **In-Memory Cache**: LRU cache with TTL support
450
463
  - ✅ **Persistent Cache**: File-based cache that survives restarts
451
- - ✅ **Redis Cache**: Production-ready Redis adapter
464
+ - ✅ **Redis Cache**: Production-ready Redis adapter with pipeline + key compression
452
465
  - ✅ **Connection Pooling**: HTTP connection reuse (30-40% faster)
453
466
  - ✅ **Metrics & Monitoring**: Comprehensive query tracking and analysis
467
+ - ✅ **Prometheus Exporter**: `PrometheusExporter` + `createHttpHandler()` for metrics scraping
468
+ - ✅ **Grafana Dashboard**: Built-in JSON dashboard template
469
+ - ✅ **OpenTelemetry Traces**: Distributed tracing via `TelemetryExporter`
454
470
  - ✅ **Request/Response Logging**: Structured logging with configurable levels
455
471
  - ✅ **Retry Strategies**: Circuit breaker (closed/open/half-open) with exponential backoff
456
472
  - ✅ **Query Prioritization**: High/normal/low priority queue
457
473
  - ✅ **Query Deduplication**: Collapse concurrent identical requests into one
458
- - ✅ **Middleware Hooks**: Lifecycle hooks for query pipeline customization
474
+ - ✅ **Middleware Hooks**: Lifecycle hooks with `ctx.abort()` support and priority ordering
459
475
  - ✅ **Response Validation**: RFC 7483 schema validation
460
476
  - ✅ **Enhanced Validation**: IDN domains, IPv6 zones, ASN ranges
461
477
  - ✅ **Authentication**: Basic, Bearer, API Key, OAuth2
462
478
  - ✅ **Proxy Support**: HTTP/HTTPS/SOCKS4/SOCKS5 with bypass patterns
463
479
  - ✅ **Response Compression**: gzip, brotli, deflate (60-80% bandwidth reduction)
464
- - ✅ **Rust Native Backend**: optional `rdapify-nd` for lower-latency queries via compiled Rust (`backend: 'auto' | 'native' | 'typescript'`)
465
- - ✅ **Multi-runtime**: Node.js 20+, Bun, Deno, Cloudflare Workers
480
+ - ✅ **HTTP/2 Support**: opt-in via `ClientConfig.http2: boolean`
481
+ - ✅ **Streaming API**: `client.streamBatch()` `AsyncIterable<QueryResult>` with back-pressure
482
+ - ✅ **Multi-region Bootstrap**: `ClientConfig.bootstrap.regions` — nearest IANA mirror selection
483
+ - ✅ **GraphQL Schema**: framework-agnostic `{ typeDefs, resolvers }` for graphql-yoga and others
484
+ - ✅ **Express Middleware**: `rdapifyExpress(client)` — drop-in REST routes
485
+ - ✅ **NestJS Module**: `RdapifyModule.forRoot(config)` + `@InjectRdapClient()` decorator
486
+ - ✅ **Rust Native Backend**: optional `rdapify-nd` (`backend: 'auto' | 'native' | 'typescript'`)
487
+ - ✅ **Multi-runtime**: Node.js 20+, Bun (`BunFetcher`), Deno (`DenoFetcher`), Cloudflare Workers (`CloudflareWorkersFetcher`), Browser (`BrowserFetcher`)
488
+ - ✅ **Deprecation Engine**: runtime warnings via `process.emitWarning`, once per code path
466
489
  - ✅ **TypeScript Strict**: Full type definitions with strict mode
467
- - ✅ **Test Coverage**: 34 test files, 620+ tests (unit + integration)
468
-
469
- ### 🎉 What's New in v0.1.8
490
+ - ✅ **Test Coverage**: 1066+ tests (unit + integration + security), 90.4% branch coverage
470
491
 
471
- **Rust Native Backend (`rdapify-nd`)**
472
- - ✅ **Optional native backend**: install `rdapify-nd` alongside `rdapify` for lower-latency queries powered by compiled Rust
473
- - ✅ **`backend` option**: `'auto'` (default, uses native if available), `'native'` (require native), `'typescript'` (always use TS pipeline)
474
- - ✅ **`isNativeAvailable()`**: runtime detection utility to check if native binary is loaded
475
- - ✅ **Transparent fallback**: when `rdapify-nd` is absent, all existing behaviour is preserved with zero configuration change
492
+ ### 🔜 Coming in v1.0.0-rc.1
476
493
 
477
- ```ts
478
- import { RDAPClient, isNativeAvailable } from 'rdapify';
479
-
480
- console.log(isNativeAvailable()); // true if rdapify-nd is installed
481
-
482
- const client = new RDAPClient({ backend: 'auto' }); // transparent
483
- const client2 = new RDAPClient({ backend: 'native' }); // throws if not installed
484
- const client3 = new RDAPClient({ backend: 'typescript' }); // always TS pipeline
485
- ```
494
+ - ⏳ **API Freeze**: all public exports locked — no breaking changes after this point
495
+ - **External Security Audit**: independent audit firm review of rdapify + rdapify-rust
496
+ - ⏳ **Runtime Certification**: Bun, Deno, and Cloudflare Workers verified in live environments
497
+ - **RC Feedback Period**: 4-week community feedback window before stable release
486
498
 
487
- ### 🔜 Coming in v0.1.9
488
-
489
- - ⏳ **Domain Availability**: `client.checkAvailability('example.com')` — instant availability check via RDAP
490
- - ⏳ **Bulk Availability**: `client.checkAvailabilityBatch(['a.com', 'b.com'])` — check multiple domains at once
491
- - ⏳ **Live Integration Tests**: opt-in via `LIVE_TESTS=1` against real RDAP servers
492
- - ⏳ **Advanced Bootstrap Config**: custom bootstrap servers, TTL overrides, redundancy fallback
493
-
494
- ### 📋 Roadmap to v0.2.0
495
-
496
- - RDAP Testing CLI (`rdapify test server`, `rdapify test benchmark`)
497
- - RDAP Extensions Registry (REGEXT support)
498
- - Bootstrap Store Adapters (File, Redis, Database)
499
- - Advanced Reporting (`client.generateReport()`)
500
- - RFC 9083 / RFC 9535 support
501
-
502
- See [ROADMAP.md](ROADMAP.md) for the complete roadmap and [CHANGELOG.md](CHANGELOG.md) for detailed version history.
499
+ See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
503
500
 
504
501
  ## 🏗️ Code Architecture
505
502
 
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.RDAPClient = void 0;
4
37
  const cache_1 = require("../../infrastructure/cache");
@@ -13,6 +46,8 @@ const security_1 = require("../../infrastructure/security");
13
46
  const MetricsCollector_1 = require("../../infrastructure/monitoring/MetricsCollector");
14
47
  const Logger_1 = require("../../infrastructure/logging/Logger");
15
48
  const errors_1 = require("../../shared/errors");
49
+ const UsageTelemetry_1 = require("../../infrastructure/telemetry/UsageTelemetry");
50
+ const validators_1 = require("../../shared/utils/validators");
16
51
  const options_1 = require("../../shared/types/options");
17
52
  const helpers_1 = require("../../shared/utils/helpers");
18
53
  const services_1 = require("../services");
@@ -69,6 +104,7 @@ class RDAPClient {
69
104
  maxRedirects: this.options.maxRedirects,
70
105
  ssrfProtection: this.ssrfProtection,
71
106
  http2: this.options.http2,
107
+ signal: this.options.signal,
72
108
  logRedirect: (fromUrl, toUrl) => {
73
109
  this.logger?.warn(`Redirect: ${fromUrl} → ${toUrl}`);
74
110
  if (this.debugEnabled && this.debugLogger) {
@@ -155,27 +191,37 @@ class RDAPClient {
155
191
  async domain(domain) {
156
192
  if (this.nativeBackend)
157
193
  return this.nativeBackend.domain(domain);
158
- return this.orchestrator.queryDomain(domain);
194
+ const result = await this.orchestrator.queryDomain(domain);
195
+ this.pingTelemetry('domain');
196
+ return result;
159
197
  }
160
198
  async ip(ip) {
161
199
  if (this.nativeBackend)
162
200
  return this.nativeBackend.ip(ip);
163
- return this.orchestrator.queryIP(ip);
201
+ const result = await this.orchestrator.queryIP(ip);
202
+ this.pingTelemetry('ip');
203
+ return result;
164
204
  }
165
205
  async asn(asn) {
166
206
  if (this.nativeBackend)
167
207
  return this.nativeBackend.asn(asn);
168
- return this.orchestrator.queryASN(asn);
208
+ const result = await this.orchestrator.queryASN(asn);
209
+ this.pingTelemetry('asn');
210
+ return result;
169
211
  }
170
212
  async nameserver(nameserver) {
171
213
  if (this.nativeBackend)
172
214
  return this.nativeBackend.nameserver(nameserver);
173
- return this.orchestrator.queryNameserver(nameserver);
215
+ const result = await this.orchestrator.queryNameserver(nameserver);
216
+ this.pingTelemetry('nameserver');
217
+ return result;
174
218
  }
175
219
  async entity(handle, serverUrl) {
176
220
  if (this.nativeBackend)
177
221
  return this.nativeBackend.entity(handle, serverUrl);
178
- return this.orchestrator.queryEntity(handle, serverUrl);
222
+ const result = await this.orchestrator.queryEntity(handle, serverUrl);
223
+ this.pingTelemetry('entity');
224
+ return result;
179
225
  }
180
226
  async checkAvailability(domain) {
181
227
  try {
@@ -198,6 +244,125 @@ class RDAPClient {
198
244
  }));
199
245
  return new Map(entries);
200
246
  }
247
+ async searchDomains(pattern, serverUrl) {
248
+ const server = serverUrl ?? (await this.bootstrap.discoverDomain('example.com'));
249
+ const url = `${server}/domains?name=${encodeURIComponent(pattern)}`;
250
+ let raw;
251
+ try {
252
+ raw = await this.fetchWithRetry(url);
253
+ }
254
+ catch (error) {
255
+ if (error instanceof errors_1.RDAPServerError &&
256
+ (error.statusCode === 404 || error.statusCode === 501)) {
257
+ throw new errors_1.SearchNotSupportedError(`RDAP server does not support domain search: ${server}`, { pattern, serverUrl: server });
258
+ }
259
+ throw error;
260
+ }
261
+ const domainSearchResults = raw['domainSearchResults'] ?? [];
262
+ const results = domainSearchResults.map((item) => this.normalizer.normalize(item, pattern, server, false, this.options.includeRaw));
263
+ return { results, totalCount: results.length, query: pattern };
264
+ }
265
+ async searchEntities(pattern, serverUrl) {
266
+ if (!serverUrl) {
267
+ throw new errors_1.SearchNotSupportedError('searchEntities requires an explicit serverUrl — there is no global bootstrap for entities', { pattern });
268
+ }
269
+ const url = `${serverUrl}/entities?fn=${encodeURIComponent(pattern)}`;
270
+ let raw;
271
+ try {
272
+ raw = await this.fetchWithRetry(url);
273
+ }
274
+ catch (error) {
275
+ if (error instanceof errors_1.RDAPServerError &&
276
+ (error.statusCode === 404 || error.statusCode === 501)) {
277
+ throw new errors_1.SearchNotSupportedError(`RDAP server does not support entity search: ${serverUrl}`, { pattern, serverUrl });
278
+ }
279
+ throw error;
280
+ }
281
+ const entitySearchResults = raw['entitySearchResults'] ?? [];
282
+ const results = entitySearchResults.map((item) => this.normalizer.normalize(item, pattern, serverUrl, false, this.options.includeRaw));
283
+ return { results, totalCount: results.length, query: pattern };
284
+ }
285
+ async explain(query) {
286
+ const startTime = Date.now();
287
+ let queryType = 'domain';
288
+ let detectedType = 'unknown';
289
+ try {
290
+ if (/^\d+$/.test(query) || /^AS\d+$/i.test(query)) {
291
+ (0, validators_1.validateASN)(query);
292
+ queryType = 'asn';
293
+ detectedType = 'asn';
294
+ }
295
+ else if (query.includes('.') && /^\d/.test(query)) {
296
+ (0, validators_1.validateIP)(query);
297
+ queryType = 'ip';
298
+ detectedType = 'ipv4';
299
+ }
300
+ else if (query.includes(':')) {
301
+ (0, validators_1.validateIP)(query);
302
+ queryType = 'ip';
303
+ detectedType = 'ipv6';
304
+ }
305
+ else {
306
+ (0, validators_1.validateDomain)(query);
307
+ queryType = 'domain';
308
+ detectedType = 'domain';
309
+ }
310
+ }
311
+ catch {
312
+ queryType = 'domain';
313
+ detectedType = 'unknown';
314
+ }
315
+ const cacheEnabled = this.options.cache !== false;
316
+ let cacheStatus = cacheEnabled ? 'miss' : 'disabled';
317
+ if (cacheEnabled) {
318
+ const { generateCacheKey } = await Promise.resolve().then(() => __importStar(require('../../shared/utils/helpers')));
319
+ const cacheKey = generateCacheKey(queryType, query.toLowerCase());
320
+ const cached = await this.cache.get(cacheKey);
321
+ if (cached)
322
+ cacheStatus = 'hit';
323
+ }
324
+ let bootstrapServer = null;
325
+ let builtUrl = null;
326
+ let error;
327
+ try {
328
+ if (queryType === 'domain') {
329
+ bootstrapServer = await this.bootstrap.discoverDomain(query.toLowerCase());
330
+ builtUrl = `${bootstrapServer}/domain/${query.toLowerCase()}`;
331
+ }
332
+ else if (queryType === 'ip') {
333
+ const version = (0, validators_1.validateIP)(query);
334
+ bootstrapServer =
335
+ version === 'v4'
336
+ ? await this.bootstrap.discoverIPv4(query)
337
+ : await this.bootstrap.discoverIPv6(query);
338
+ builtUrl = `${bootstrapServer}/ip/${query}`;
339
+ }
340
+ else if (queryType === 'asn') {
341
+ const asnNum = (0, validators_1.validateASN)(query);
342
+ bootstrapServer = await this.bootstrap.discoverASN(asnNum);
343
+ builtUrl = `${bootstrapServer}/autnum/${asnNum}`;
344
+ }
345
+ }
346
+ catch (err) {
347
+ error = err instanceof Error ? err.message : String(err);
348
+ }
349
+ return {
350
+ query,
351
+ queryType,
352
+ detectedType,
353
+ bootstrapServer,
354
+ builtUrl,
355
+ cacheStatus,
356
+ latencyMs: Date.now() - startTime,
357
+ error,
358
+ };
359
+ }
360
+ pingTelemetry(queryType) {
361
+ const telemetryOpts = this.options.usageTelemetry;
362
+ if (telemetryOpts?.enabled === true) {
363
+ UsageTelemetry_1.UsageTelemetry.ping(queryType, telemetryOpts.endpoint);
364
+ }
365
+ }
201
366
  async fetchWithRetry(url) {
202
367
  const retryOptions = typeof this.options.retry === 'boolean'
203
368
  ? this.options.retry
@@ -226,6 +391,33 @@ class RDAPClient {
226
391
  normalizeOptions(options) {
227
392
  return (0, helpers_1.deepMerge)(options_1.DEFAULT_OPTIONS, options);
228
393
  }
394
+ async validate() {
395
+ const errors = [];
396
+ const warnings = [];
397
+ const bootstrapUrl = this.options.bootstrapUrl;
398
+ if (bootstrapUrl && bootstrapUrl !== 'https://data.iana.org/rdap') {
399
+ try {
400
+ await this.fetcher.fetch(`${bootstrapUrl}/dns.json`);
401
+ }
402
+ catch {
403
+ errors.push(`Bootstrap URL unreachable: ${bootstrapUrl}`);
404
+ }
405
+ }
406
+ const cacheOpts = this.options.cache;
407
+ if (cacheOpts?.strategy === 'redis' && cacheOpts?.redisClient) {
408
+ try {
409
+ await cacheOpts.redisClient.ping();
410
+ }
411
+ catch {
412
+ errors.push('Redis connection failed');
413
+ }
414
+ }
415
+ const ssrfOpts = this.options.ssrfProtection;
416
+ if (ssrfOpts?.enabled === false) {
417
+ warnings.push('SSRF protection disabled — not safe for production');
418
+ }
419
+ return { valid: errors.length === 0, errors, warnings };
420
+ }
229
421
  async clearCache() {
230
422
  await this.cache.clear();
231
423
  this.bootstrap.clearCache();
@@ -282,4 +474,3 @@ class RDAPClient {
282
474
  }
283
475
  }
284
476
  exports.RDAPClient = RDAPClient;
285
- //# sourceMappingURL=RDAPClient.js.map
@@ -3,4 +3,3 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RDAPClient = void 0;
4
4
  var RDAPClient_1 = require("./RDAPClient");
5
5
  Object.defineProperty(exports, "RDAPClient", { enumerable: true, get: function () { return RDAPClient_1.RDAPClient; } });
6
- //# sourceMappingURL=index.js.map
@@ -43,4 +43,3 @@ class QueryDeduplicator {
43
43
  }
44
44
  }
45
45
  exports.QueryDeduplicator = QueryDeduplicator;
46
- //# sourceMappingURL=QueryDeduplicator.js.map
@@ -81,4 +81,3 @@ class MiddlewareManager {
81
81
  }
82
82
  }
83
83
  exports.MiddlewareManager = MiddlewareManager;
84
- //# sourceMappingURL=MiddlewareHooks.js.map
@@ -147,4 +147,3 @@ class BatchProcessor {
147
147
  }
148
148
  }
149
149
  exports.BatchProcessor = BatchProcessor;
150
- //# sourceMappingURL=BatchProcessor.js.map
@@ -617,4 +617,3 @@ class QueryOrchestrator {
617
617
  }
618
618
  }
619
619
  exports.QueryOrchestrator = QueryOrchestrator;
620
- //# sourceMappingURL=QueryOrchestrator.js.map
@@ -111,4 +111,3 @@ class QueryPriorityQueue {
111
111
  }
112
112
  }
113
113
  exports.QueryPriorityQueue = QueryPriorityQueue;
114
- //# sourceMappingURL=QueryPriority.js.map
@@ -5,4 +5,3 @@ var QueryOrchestrator_1 = require("./QueryOrchestrator");
5
5
  Object.defineProperty(exports, "QueryOrchestrator", { enumerable: true, get: function () { return QueryOrchestrator_1.QueryOrchestrator; } });
6
6
  var BatchProcessor_1 = require("./BatchProcessor");
7
7
  Object.defineProperty(exports, "BatchProcessor", { enumerable: true, get: function () { return BatchProcessor_1.BatchProcessor; } });
8
- //# sourceMappingURL=index.js.map
@@ -297,4 +297,3 @@ main().catch((err) => {
297
297
  process.stderr.write(`Fatal: ${message}\n`);
298
298
  process.exit(1);
299
299
  });
300
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -6,4 +6,3 @@ tslib_1.__exportStar(require("./fetcher.port"), exports);
6
6
  tslib_1.__exportStar(require("./normalizer.port"), exports);
7
7
  tslib_1.__exportStar(require("./bootstrap.port"), exports);
8
8
  tslib_1.__exportStar(require("./pii-redactor.port"), exports);
9
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompressionManager = exports.ProxyManager = exports.AuthenticationManager = exports.asciiToIdn = exports.idnToAscii = exports.isPunycodeDomain = exports.isIdnDomain = exports.validateAsnRange = exports.validateIpv6WithZone = exports.validateIdnDomain = exports.PersistentCache = exports.QueryPriorityQueue = exports.RetryStrategy = exports.Logger = exports.MetricsCollector = exports.ConnectionPool = exports.RateLimiter = exports.BatchProcessor = exports.VERSION = exports.normalizeEntityHandle = exports.normalizeNameserver = exports.normalizeASN = exports.normalizeIP = exports.normalizeDomain = exports.isLinkLocal = exports.isLocalhost = exports.isPrivateIP = exports.validateEntityHandle = exports.validateNameserver = exports.validateASN = exports.validateIPv6 = exports.validateIPv4 = exports.validateIP = exports.validateDomain = exports.isRateLimitError = exports.isTimeoutError = exports.isNetworkError = exports.isSSRFProtectionError = exports.isRDAPifyError = exports.RateLimitError = exports.CacheError = exports.ParseError = exports.ValidationError = exports.NoServerFoundError = exports.RDAPServerError = exports.TimeoutError = exports.NetworkError = exports.SSRFProtectionError = exports.RDAPifyError = exports.RDAPClient = void 0;
4
- exports.deprecated = exports.RDAPIFY_GRAFANA_DASHBOARD = exports.TelemetryExporter = exports.PrometheusExporter = exports.RDAPIFY_CLIENT_TOKEN = exports.InjectRdapClient = exports.RdapifyModule = exports.MinimalRouter = exports.rdapifyExpress = exports.RDAPIFY_TYPE_DEFS = exports.createRdapifySchema = exports.BrowserFetcher = exports.CloudflareWorkersFetcher = exports.DenoFetcher = exports.BunFetcher = exports.QueryAbortedError = exports.CircuitOpenError = exports.CircuitBreaker = exports.isNativeAvailable = exports.getRuntimeName = exports.isCloudflareWorkers = exports.isBun = exports.isDeno = exports.isBrowser = exports.isNode = exports.ResponseValidator = exports.FileAuditAdapter = exports.InMemoryAuditAdapter = exports.AuditLogger = exports.QueryDeduplicator = exports.MiddlewareManager = exports.RedisCache = void 0;
3
+ exports.asciiToIdn = exports.idnToAscii = exports.isPunycodeDomain = exports.isIdnDomain = exports.validateAsnRange = exports.validateIpv6WithZone = exports.validateIdnDomain = exports.PersistentCache = exports.QueryPriorityQueue = exports.RetryStrategy = exports.Logger = exports.MetricsCollector = exports.ConnectionPool = exports.DistributedRateLimiter = exports.RateLimiter = exports.BatchProcessor = exports.VERSION = exports.UsageTelemetry = exports.normalizeEntityHandle = exports.normalizeNameserver = exports.normalizeASN = exports.normalizeIP = exports.normalizeDomain = exports.isLinkLocal = exports.isLocalhost = exports.isPrivateIP = exports.validateEntityHandle = exports.validateNameserver = exports.validateASN = exports.validateIPv6 = exports.validateIPv4 = exports.validateIP = exports.validateDomain = exports.isRateLimitError = exports.isTimeoutError = exports.isNetworkError = exports.isSSRFProtectionError = exports.isRDAPifyError = exports.SearchNotSupportedError = exports.RateLimitError = exports.CacheError = exports.ParseError = exports.ValidationError = exports.NoServerFoundError = exports.RDAPServerError = exports.TimeoutError = exports.NetworkError = exports.SSRFProtectionError = exports.RDAPifyError = exports.RDAPClient = void 0;
4
+ exports.deprecated = exports.RDAPIFY_GRAFANA_DASHBOARD = exports.TelemetryExporter = exports.PrometheusExporter = exports.RDAPIFY_CLIENT_TOKEN = exports.InjectRdapClient = exports.RdapifyModule = exports.MinimalRouter = exports.rdapifyExpress = exports.RDAPIFY_TYPE_DEFS = exports.createRdapifySchema = exports.BrowserFetcher = exports.CloudflareWorkersFetcher = exports.DenoFetcher = exports.BunFetcher = exports.QueryAbortedError = exports.CircuitOpenError = exports.CircuitBreaker = exports.isNativeAvailable = exports.getRuntimeName = exports.isCloudflareWorkers = exports.isBun = exports.isDeno = exports.isBrowser = exports.isNode = exports.ResponseValidator = exports.FileAuditAdapter = exports.InMemoryAuditAdapter = exports.AuditLogger = exports.QueryDeduplicator = exports.MiddlewareManager = exports.RedisCache = exports.CompressionManager = exports.ProxyManager = exports.AuthenticationManager = void 0;
5
5
  var client_1 = require("./application/client");
6
6
  Object.defineProperty(exports, "RDAPClient", { enumerable: true, get: function () { return client_1.RDAPClient; } });
7
7
  var errors_1 = require("./shared/errors");
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: funct
15
15
  Object.defineProperty(exports, "ParseError", { enumerable: true, get: function () { return errors_1.ParseError; } });
16
16
  Object.defineProperty(exports, "CacheError", { enumerable: true, get: function () { return errors_1.CacheError; } });
17
17
  Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_1.RateLimitError; } });
18
+ Object.defineProperty(exports, "SearchNotSupportedError", { enumerable: true, get: function () { return errors_1.SearchNotSupportedError; } });
18
19
  Object.defineProperty(exports, "isRDAPifyError", { enumerable: true, get: function () { return errors_1.isRDAPifyError; } });
19
20
  Object.defineProperty(exports, "isSSRFProtectionError", { enumerable: true, get: function () { return errors_1.isSSRFProtectionError; } });
20
21
  Object.defineProperty(exports, "isNetworkError", { enumerable: true, get: function () { return errors_1.isNetworkError; } });
@@ -36,11 +37,15 @@ Object.defineProperty(exports, "normalizeIP", { enumerable: true, get: function
36
37
  Object.defineProperty(exports, "normalizeASN", { enumerable: true, get: function () { return validators_1.normalizeASN; } });
37
38
  Object.defineProperty(exports, "normalizeNameserver", { enumerable: true, get: function () { return validators_1.normalizeNameserver; } });
38
39
  Object.defineProperty(exports, "normalizeEntityHandle", { enumerable: true, get: function () { return validators_1.normalizeEntityHandle; } });
39
- exports.VERSION = '0.3.0';
40
+ var UsageTelemetry_1 = require("./infrastructure/telemetry/UsageTelemetry");
41
+ Object.defineProperty(exports, "UsageTelemetry", { enumerable: true, get: function () { return UsageTelemetry_1.UsageTelemetry; } });
42
+ exports.VERSION = '0.3.1';
40
43
  var BatchProcessor_1 = require("./application/services/BatchProcessor");
41
44
  Object.defineProperty(exports, "BatchProcessor", { enumerable: true, get: function () { return BatchProcessor_1.BatchProcessor; } });
42
45
  var RateLimiter_1 = require("./infrastructure/http/RateLimiter");
43
46
  Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return RateLimiter_1.RateLimiter; } });
47
+ var DistributedRateLimiter_1 = require("./infrastructure/http/DistributedRateLimiter");
48
+ Object.defineProperty(exports, "DistributedRateLimiter", { enumerable: true, get: function () { return DistributedRateLimiter_1.DistributedRateLimiter; } });
44
49
  var ConnectionPool_1 = require("./infrastructure/http/ConnectionPool");
45
50
  Object.defineProperty(exports, "ConnectionPool", { enumerable: true, get: function () { return ConnectionPool_1.ConnectionPool; } });
46
51
  var MetricsCollector_1 = require("./infrastructure/monitoring/MetricsCollector");
@@ -121,4 +126,3 @@ var deprecation_1 = require("./shared/utils/deprecation");
121
126
  Object.defineProperty(exports, "deprecated", { enumerable: true, get: function () { return deprecation_1.deprecated; } });
122
127
  const client_2 = require("./application/client");
123
128
  exports.default = client_2.RDAPClient;
124
- //# sourceMappingURL=index.js.map
@@ -4,6 +4,7 @@ exports.CacheManager = void 0;
4
4
  const errors_1 = require("../../shared/errors");
5
5
  const InMemoryCache_1 = require("./InMemoryCache");
6
6
  const RedisCache_1 = require("./RedisCache");
7
+ const StaleWhileRevalidateCache_1 = require("./StaleWhileRevalidateCache");
7
8
  class CacheManager {
8
9
  constructor(options = {}) {
9
10
  this.ttl = options.ttl || 3600;
@@ -30,6 +31,9 @@ class CacheManager {
30
31
  case 'none':
31
32
  this.cache = new NoOpCache();
32
33
  break;
34
+ case 'stale-while-revalidate':
35
+ this.cache = new StaleWhileRevalidateCache_1.StaleWhileRevalidateCache(options.maxSize || 1000, options.revalidateCallback);
36
+ break;
33
37
  }
34
38
  }
35
39
  async get(key) {
@@ -121,4 +125,3 @@ class NoOpCache {
121
125
  return 0;
122
126
  }
123
127
  }
124
- //# sourceMappingURL=CacheManager.js.map
@@ -93,4 +93,3 @@ class InMemoryCache {
93
93
  }
94
94
  }
95
95
  exports.InMemoryCache = InMemoryCache;
96
- //# sourceMappingURL=InMemoryCache.js.map
@@ -191,4 +191,3 @@ class PersistentCache {
191
191
  }
192
192
  }
193
193
  exports.PersistentCache = PersistentCache;
194
- //# sourceMappingURL=PersistentCache.js.map
@@ -108,4 +108,3 @@ class RedisCache {
108
108
  }
109
109
  }
110
110
  exports.RedisCache = RedisCache;
111
- //# sourceMappingURL=RedisCache.js.map