rdapify 0.1.3 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -94
- package/README.md +168 -146
- package/dist/application/client/RDAPClient.d.ts +16 -1
- package/dist/application/client/RDAPClient.d.ts.map +1 -1
- package/dist/application/client/RDAPClient.js +46 -1
- package/dist/application/client/RDAPClient.js.map +1 -1
- package/dist/application/deduplication/QueryDeduplicator.d.ts +20 -0
- package/dist/application/deduplication/QueryDeduplicator.d.ts.map +1 -0
- package/dist/application/deduplication/QueryDeduplicator.js +46 -0
- package/dist/application/deduplication/QueryDeduplicator.js.map +1 -0
- package/dist/application/hooks/MiddlewareHooks.d.ts +48 -0
- package/dist/application/hooks/MiddlewareHooks.d.ts.map +1 -0
- package/dist/application/hooks/MiddlewareHooks.js +46 -0
- package/dist/application/hooks/MiddlewareHooks.js.map +1 -0
- package/dist/application/services/BatchProcessor.d.ts +1 -0
- package/dist/application/services/BatchProcessor.d.ts.map +1 -1
- package/dist/application/services/BatchProcessor.js +9 -0
- package/dist/application/services/BatchProcessor.js.map +1 -1
- package/dist/application/services/QueryOrchestrator.d.ts +14 -1
- package/dist/application/services/QueryOrchestrator.d.ts.map +1 -1
- package/dist/application/services/QueryOrchestrator.js +446 -38
- package/dist/application/services/QueryOrchestrator.js.map +1 -1
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +300 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/cache/CacheManager.d.ts.map +1 -1
- package/dist/infrastructure/cache/CacheManager.js +8 -1
- package/dist/infrastructure/cache/CacheManager.js.map +1 -1
- package/dist/infrastructure/cache/RedisCache.d.ts +35 -0
- package/dist/infrastructure/cache/RedisCache.d.ts.map +1 -0
- package/dist/infrastructure/cache/RedisCache.js +75 -0
- package/dist/infrastructure/cache/RedisCache.js.map +1 -0
- package/dist/infrastructure/cache/index.d.ts +1 -0
- package/dist/infrastructure/cache/index.d.ts.map +1 -1
- package/dist/infrastructure/cache/index.js +3 -1
- package/dist/infrastructure/cache/index.js.map +1 -1
- package/dist/infrastructure/http/BootstrapDiscovery.d.ts +1 -0
- package/dist/infrastructure/http/BootstrapDiscovery.d.ts.map +1 -1
- package/dist/infrastructure/http/BootstrapDiscovery.js +19 -0
- package/dist/infrastructure/http/BootstrapDiscovery.js.map +1 -1
- package/dist/infrastructure/http/Fetcher.d.ts +2 -0
- package/dist/infrastructure/http/Fetcher.d.ts.map +1 -1
- package/dist/infrastructure/http/Fetcher.js +5 -3
- package/dist/infrastructure/http/Fetcher.js.map +1 -1
- package/dist/infrastructure/http/Normalizer.d.ts +2 -0
- package/dist/infrastructure/http/Normalizer.d.ts.map +1 -1
- package/dist/infrastructure/http/Normalizer.js +57 -0
- package/dist/infrastructure/http/Normalizer.js.map +1 -1
- package/dist/infrastructure/logging/AuditLogger.d.ts +114 -0
- package/dist/infrastructure/logging/AuditLogger.d.ts.map +1 -0
- package/dist/infrastructure/logging/AuditLogger.js +195 -0
- package/dist/infrastructure/logging/AuditLogger.js.map +1 -0
- package/dist/infrastructure/logging/Logger.d.ts.map +1 -1
- package/dist/infrastructure/logging/Logger.js +29 -5
- package/dist/infrastructure/logging/Logger.js.map +1 -1
- package/dist/infrastructure/monitoring/MetricsCollector.d.ts +39 -2
- package/dist/infrastructure/monitoring/MetricsCollector.d.ts.map +1 -1
- package/dist/infrastructure/monitoring/MetricsCollector.js +179 -0
- package/dist/infrastructure/monitoring/MetricsCollector.js.map +1 -1
- package/dist/infrastructure/security/PIIRedactor.js +1 -1
- package/dist/infrastructure/security/PIIRedactor.js.map +1 -1
- package/dist/infrastructure/validation/ResponseValidator.d.ts +38 -0
- package/dist/infrastructure/validation/ResponseValidator.d.ts.map +1 -0
- package/dist/infrastructure/validation/ResponseValidator.js +200 -0
- package/dist/infrastructure/validation/ResponseValidator.js.map +1 -0
- package/dist/shared/constants/rdap.constants.d.ts +1 -1
- package/dist/shared/constants/rdap.constants.js +1 -1
- package/dist/shared/errors/base.error.d.ts +8 -0
- package/dist/shared/errors/base.error.d.ts.map +1 -1
- package/dist/shared/errors/base.error.js +30 -1
- package/dist/shared/errors/base.error.js.map +1 -1
- package/dist/shared/types/generics.d.ts +6 -3
- package/dist/shared/types/generics.d.ts.map +1 -1
- package/dist/shared/types/index.d.ts +1 -1
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/shared/types/options.d.ts +21 -2
- package/dist/shared/types/options.d.ts.map +1 -1
- package/dist/shared/types/options.js +6 -1
- package/dist/shared/types/options.js.map +1 -1
- package/dist/shared/types/responses.d.ts +42 -2
- package/dist/shared/types/responses.d.ts.map +1 -1
- package/dist/shared/utils/helpers/index.d.ts +1 -1
- package/dist/shared/utils/helpers/index.d.ts.map +1 -1
- package/dist/shared/utils/helpers/index.js +2 -1
- package/dist/shared/utils/helpers/index.js.map +1 -1
- package/dist/shared/utils/helpers/runtime.d.ts +1 -0
- package/dist/shared/utils/helpers/runtime.d.ts.map +1 -1
- package/dist/shared/utils/helpers/runtime.js +11 -1
- package/dist/shared/utils/helpers/runtime.js.map +1 -1
- package/dist/shared/utils/validators/config-validation.d.ts +3 -0
- package/dist/shared/utils/validators/config-validation.d.ts.map +1 -0
- package/dist/shared/utils/validators/config-validation.js +97 -0
- package/dist/shared/utils/validators/config-validation.js.map +1 -0
- package/dist/shared/utils/validators/entity.d.ts +3 -0
- package/dist/shared/utils/validators/entity.d.ts.map +1 -0
- package/dist/shared/utils/validators/entity.js +27 -0
- package/dist/shared/utils/validators/entity.js.map +1 -0
- package/dist/shared/utils/validators/index.d.ts +3 -0
- package/dist/shared/utils/validators/index.d.ts.map +1 -1
- package/dist/shared/utils/validators/index.js +9 -1
- package/dist/shared/utils/validators/index.js.map +1 -1
- package/dist/shared/utils/validators/nameserver.d.ts +3 -0
- package/dist/shared/utils/validators/nameserver.d.ts.map +1 -0
- package/dist/shared/utils/validators/nameserver.js +49 -0
- package/dist/shared/utils/validators/nameserver.js.map +1 -0
- package/package.json +9 -10
|
@@ -2,5 +2,6 @@ export declare function isNode(): boolean;
|
|
|
2
2
|
export declare function isBrowser(): boolean;
|
|
3
3
|
export declare function isDeno(): boolean;
|
|
4
4
|
export declare function isBun(): boolean;
|
|
5
|
+
export declare function isCloudflareWorkers(): boolean;
|
|
5
6
|
export declare function getRuntimeName(): string;
|
|
6
7
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/helpers/runtime.ts"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/helpers/runtime.ts"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,IAAI,OAAO,CAKhC;AAKD,wBAAgB,SAAS,IAAI,OAAO,CAInC;AAKD,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAKD,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAKD,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C;AAKD,wBAAgB,cAAc,IAAI,MAAM,CAOvC"}
|
|
@@ -4,9 +4,11 @@ exports.isNode = isNode;
|
|
|
4
4
|
exports.isBrowser = isBrowser;
|
|
5
5
|
exports.isDeno = isDeno;
|
|
6
6
|
exports.isBun = isBun;
|
|
7
|
+
exports.isCloudflareWorkers = isCloudflareWorkers;
|
|
7
8
|
exports.getRuntimeName = getRuntimeName;
|
|
8
9
|
function isNode() {
|
|
9
|
-
return (process
|
|
10
|
+
return (typeof process !== 'undefined' &&
|
|
11
|
+
process.versions?.node != null);
|
|
10
12
|
}
|
|
11
13
|
function isBrowser() {
|
|
12
14
|
return typeof globalThis !== 'undefined' &&
|
|
@@ -19,11 +21,19 @@ function isDeno() {
|
|
|
19
21
|
function isBun() {
|
|
20
22
|
return typeof globalThis !== 'undefined' && 'Bun' in globalThis;
|
|
21
23
|
}
|
|
24
|
+
function isCloudflareWorkers() {
|
|
25
|
+
return (typeof globalThis !== 'undefined' &&
|
|
26
|
+
'caches' in globalThis &&
|
|
27
|
+
typeof globalThis.navigator !== 'undefined' &&
|
|
28
|
+
globalThis.navigator?.userAgent === 'Cloudflare-Workers');
|
|
29
|
+
}
|
|
22
30
|
function getRuntimeName() {
|
|
23
31
|
if (isDeno())
|
|
24
32
|
return 'Deno';
|
|
25
33
|
if (isBun())
|
|
26
34
|
return 'Bun';
|
|
35
|
+
if (isCloudflareWorkers())
|
|
36
|
+
return 'Cloudflare Workers';
|
|
27
37
|
if (isNode())
|
|
28
38
|
return 'Node.js';
|
|
29
39
|
if (isBrowser())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/shared/utils/helpers/runtime.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/shared/utils/helpers/runtime.ts"],"names":[],"mappings":";;AAQA,wBAKC;AAKD,8BAIC;AAKD,wBAEC;AAKD,sBAEC;AAKD,kDAOC;AAKD,wCAOC;AApDD,SAAgB,MAAM;IACpB,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAC/B,CAAC;AACJ,CAAC;AAKD,SAAgB,SAAS;IACvB,OAAO,OAAO,UAAU,KAAK,WAAW;QACjC,QAAQ,IAAI,UAAU;QACtB,OAAQ,UAAkB,CAAC,MAAM,KAAK,WAAW,CAAC;AAC3D,CAAC;AAKD,SAAgB,MAAM;IACpB,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI,MAAM,IAAI,UAAU,CAAC;AACnE,CAAC;AAKD,SAAgB,KAAK;IACnB,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI,KAAK,IAAI,UAAU,CAAC;AAClE,CAAC;AAKD,SAAgB,mBAAmB;IACjC,OAAO,CACL,OAAO,UAAU,KAAK,WAAW;QACjC,QAAQ,IAAI,UAAU;QACtB,OAAQ,UAAkB,CAAC,SAAS,KAAK,WAAW;QACnD,UAAkB,CAAC,SAAS,EAAE,SAAS,KAAK,oBAAoB,CAClE,CAAC;AACJ,CAAC;AAKD,SAAgB,cAAc;IAC5B,IAAI,MAAM,EAAE;QAAE,OAAO,MAAM,CAAC;IAC5B,IAAI,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,mBAAmB,EAAE;QAAE,OAAO,oBAAoB,CAAC;IACvD,IAAI,MAAM,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,SAAS,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validation.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/validators/config-validation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA6GtE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateClientOptions = validateClientOptions;
|
|
4
|
+
const errors_1 = require("../../errors");
|
|
5
|
+
function validateClientOptions(options) {
|
|
6
|
+
if (options.timeout !== undefined) {
|
|
7
|
+
if (typeof options.timeout === 'number') {
|
|
8
|
+
if (options.timeout < 100 || options.timeout > 60000) {
|
|
9
|
+
throw new errors_1.ValidationError('Timeout must be between 100ms and 60s', {
|
|
10
|
+
field: 'timeout',
|
|
11
|
+
value: options.timeout,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else if (typeof options.timeout === 'object') {
|
|
16
|
+
const { connect, request, dns } = options.timeout;
|
|
17
|
+
if (connect !== undefined && (connect < 100 || connect > 60000)) {
|
|
18
|
+
throw new errors_1.ValidationError('Connect timeout must be between 100ms and 60s', {
|
|
19
|
+
field: 'timeout.connect',
|
|
20
|
+
value: connect,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (request !== undefined && (request < 100 || request > 60000)) {
|
|
24
|
+
throw new errors_1.ValidationError('Request timeout must be between 100ms and 60s', {
|
|
25
|
+
field: 'timeout.request',
|
|
26
|
+
value: request,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (dns !== undefined && (dns < 100 || dns > 60000)) {
|
|
30
|
+
throw new errors_1.ValidationError('DNS timeout must be between 100ms and 60s', {
|
|
31
|
+
field: 'timeout.dns',
|
|
32
|
+
value: dns,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (options.maxRedirects !== undefined) {
|
|
38
|
+
if (options.maxRedirects < 0 || options.maxRedirects > 100) {
|
|
39
|
+
throw new errors_1.ValidationError('maxRedirects must be between 0 and 100', {
|
|
40
|
+
field: 'maxRedirects',
|
|
41
|
+
value: options.maxRedirects,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (options.cache !== undefined && typeof options.cache === 'object') {
|
|
46
|
+
const { ttl, maxSize } = options.cache;
|
|
47
|
+
if (ttl !== undefined && (ttl < 1 || ttl > 86400)) {
|
|
48
|
+
throw new errors_1.ValidationError('Cache TTL must be between 1 and 86400 seconds', {
|
|
49
|
+
field: 'cache.ttl',
|
|
50
|
+
value: ttl,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (maxSize !== undefined && (maxSize < 1 || maxSize > 100000)) {
|
|
54
|
+
throw new errors_1.ValidationError('Cache maxSize must be between 1 and 100000', {
|
|
55
|
+
field: 'cache.maxSize',
|
|
56
|
+
value: maxSize,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (options.retry !== undefined && typeof options.retry === 'object') {
|
|
61
|
+
const { maxAttempts, initialDelay, maxDelay } = options.retry;
|
|
62
|
+
if (maxAttempts !== undefined && (maxAttempts < 1 || maxAttempts > 10)) {
|
|
63
|
+
throw new errors_1.ValidationError('maxAttempts must be between 1 and 10', {
|
|
64
|
+
field: 'retry.maxAttempts',
|
|
65
|
+
value: maxAttempts,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (initialDelay !== undefined && (initialDelay < 100 || initialDelay > 10000)) {
|
|
69
|
+
throw new errors_1.ValidationError('initialDelay must be between 100ms and 10s', {
|
|
70
|
+
field: 'retry.initialDelay',
|
|
71
|
+
value: initialDelay,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (maxDelay !== undefined && (maxDelay < 1000 || maxDelay > 60000)) {
|
|
75
|
+
throw new errors_1.ValidationError('maxDelay must be between 1s and 60s', {
|
|
76
|
+
field: 'retry.maxDelay',
|
|
77
|
+
value: maxDelay,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (options.rateLimit !== undefined && typeof options.rateLimit === 'object') {
|
|
82
|
+
const { maxRequests, windowMs } = options.rateLimit;
|
|
83
|
+
if (maxRequests !== undefined && (maxRequests < 1 || maxRequests > 10000)) {
|
|
84
|
+
throw new errors_1.ValidationError('maxRequests must be between 1 and 10000', {
|
|
85
|
+
field: 'rateLimit.maxRequests',
|
|
86
|
+
value: maxRequests,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (windowMs !== undefined && (windowMs < 1000 || windowMs > 3600000)) {
|
|
90
|
+
throw new errors_1.ValidationError('windowMs must be between 1s and 1 hour', {
|
|
91
|
+
field: 'rateLimit.windowMs',
|
|
92
|
+
value: windowMs,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=config-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validation.js","sourceRoot":"","sources":["../../../../src/shared/utils/validators/config-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/validators/entity.ts"],"names":[],"mappings":"AAcA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAyBzD;AAQD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateEntityHandle = validateEntityHandle;
|
|
4
|
+
exports.normalizeEntityHandle = normalizeEntityHandle;
|
|
5
|
+
const errors_1 = require("../../types/errors");
|
|
6
|
+
function validateEntityHandle(handle) {
|
|
7
|
+
if (!handle || typeof handle !== 'string') {
|
|
8
|
+
throw new errors_1.ValidationError('Entity handle must be a non-empty string', { handle });
|
|
9
|
+
}
|
|
10
|
+
const trimmed = handle.trim();
|
|
11
|
+
if (trimmed.length === 0) {
|
|
12
|
+
throw new errors_1.ValidationError('Entity handle cannot be empty', { handle });
|
|
13
|
+
}
|
|
14
|
+
if (trimmed.length > 255) {
|
|
15
|
+
throw new errors_1.ValidationError('Entity handle exceeds maximum length of 255 characters', {
|
|
16
|
+
handle,
|
|
17
|
+
length: trimmed.length,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (!/^[a-zA-Z0-9][\w\-.]*$/.test(trimmed)) {
|
|
21
|
+
throw new errors_1.ValidationError('Entity handle contains invalid characters. Must start with alphanumeric and contain only letters, digits, hyphens, underscores, or dots.', { handle });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function normalizeEntityHandle(handle) {
|
|
25
|
+
return handle.trim();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../../src/shared/utils/validators/entity.ts"],"names":[],"mappings":";;AAcA,oDAyBC;AAQD,sDAEC;AA5CD,+CAAqD;AASrD,SAAgB,oBAAoB,CAAC,MAAc;IACjD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,wBAAe,CAAC,0CAA0C,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAe,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAe,CAAC,wDAAwD,EAAE;YAClF,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,wBAAe,CACvB,0IAA0I,EAC1I,EAAE,MAAM,EAAE,CACX,CAAC;IACJ,CAAC;AACH,CAAC;AAQD,SAAgB,qBAAqB,CAAC,MAAc;IAClD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { validateDomain, normalizeDomain } from './domain';
|
|
2
2
|
export { validateIP, validateIPv4, validateIPv6, normalizeIP } from './ip';
|
|
3
3
|
export { validateASN, normalizeASN } from './asn';
|
|
4
|
+
export { validateNameserver, normalizeNameserver } from './nameserver';
|
|
5
|
+
export { validateEntityHandle, normalizeEntityHandle } from './entity';
|
|
4
6
|
export { isPrivateIP, isLocalhost, isLinkLocal } from './network';
|
|
7
|
+
export { validateClientOptions } from './config-validation';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/validators/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/validators/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isLinkLocal = exports.isLocalhost = exports.isPrivateIP = exports.normalizeASN = exports.validateASN = exports.normalizeIP = exports.validateIPv6 = exports.validateIPv4 = exports.validateIP = exports.normalizeDomain = exports.validateDomain = void 0;
|
|
3
|
+
exports.validateClientOptions = exports.isLinkLocal = exports.isLocalhost = exports.isPrivateIP = exports.normalizeEntityHandle = exports.validateEntityHandle = exports.normalizeNameserver = exports.validateNameserver = exports.normalizeASN = exports.validateASN = exports.normalizeIP = exports.validateIPv6 = exports.validateIPv4 = exports.validateIP = exports.normalizeDomain = exports.validateDomain = void 0;
|
|
4
4
|
var domain_1 = require("./domain");
|
|
5
5
|
Object.defineProperty(exports, "validateDomain", { enumerable: true, get: function () { return domain_1.validateDomain; } });
|
|
6
6
|
Object.defineProperty(exports, "normalizeDomain", { enumerable: true, get: function () { return domain_1.normalizeDomain; } });
|
|
@@ -12,8 +12,16 @@ Object.defineProperty(exports, "normalizeIP", { enumerable: true, get: function
|
|
|
12
12
|
var asn_1 = require("./asn");
|
|
13
13
|
Object.defineProperty(exports, "validateASN", { enumerable: true, get: function () { return asn_1.validateASN; } });
|
|
14
14
|
Object.defineProperty(exports, "normalizeASN", { enumerable: true, get: function () { return asn_1.normalizeASN; } });
|
|
15
|
+
var nameserver_1 = require("./nameserver");
|
|
16
|
+
Object.defineProperty(exports, "validateNameserver", { enumerable: true, get: function () { return nameserver_1.validateNameserver; } });
|
|
17
|
+
Object.defineProperty(exports, "normalizeNameserver", { enumerable: true, get: function () { return nameserver_1.normalizeNameserver; } });
|
|
18
|
+
var entity_1 = require("./entity");
|
|
19
|
+
Object.defineProperty(exports, "validateEntityHandle", { enumerable: true, get: function () { return entity_1.validateEntityHandle; } });
|
|
20
|
+
Object.defineProperty(exports, "normalizeEntityHandle", { enumerable: true, get: function () { return entity_1.normalizeEntityHandle; } });
|
|
15
21
|
var network_1 = require("./network");
|
|
16
22
|
Object.defineProperty(exports, "isPrivateIP", { enumerable: true, get: function () { return network_1.isPrivateIP; } });
|
|
17
23
|
Object.defineProperty(exports, "isLocalhost", { enumerable: true, get: function () { return network_1.isLocalhost; } });
|
|
18
24
|
Object.defineProperty(exports, "isLinkLocal", { enumerable: true, get: function () { return network_1.isLinkLocal; } });
|
|
25
|
+
var config_validation_1 = require("./config-validation");
|
|
26
|
+
Object.defineProperty(exports, "validateClientOptions", { enumerable: true, get: function () { return config_validation_1.validateClientOptions; } });
|
|
19
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/utils/validators/index.ts"],"names":[],"mappings":";;;AAKA,mCAA2D;AAAlD,wGAAA,cAAc,OAAA;AAAE,yGAAA,eAAe,OAAA;AACxC,2BAA2E;AAAlE,gGAAA,UAAU,OAAA;AAAE,kGAAA,YAAY,OAAA;AAAE,kGAAA,YAAY,OAAA;AAAE,iGAAA,WAAW,OAAA;AAC5D,6BAAkD;AAAzC,kGAAA,WAAW,OAAA;AAAE,mGAAA,YAAY,OAAA;AAClC,qCAAkE;AAAzD,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/utils/validators/index.ts"],"names":[],"mappings":";;;AAKA,mCAA2D;AAAlD,wGAAA,cAAc,OAAA;AAAE,yGAAA,eAAe,OAAA;AACxC,2BAA2E;AAAlE,gGAAA,UAAU,OAAA;AAAE,kGAAA,YAAY,OAAA;AAAE,kGAAA,YAAY,OAAA;AAAE,iGAAA,WAAW,OAAA;AAC5D,6BAAkD;AAAzC,kGAAA,WAAW,OAAA;AAAE,mGAAA,YAAY,OAAA;AAClC,2CAAuE;AAA9D,gHAAA,kBAAkB,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAChD,mCAAuE;AAA9D,8GAAA,oBAAoB,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AACpD,qCAAkE;AAAzD,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAG9C,yDAA4D;AAAnD,0HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nameserver.d.ts","sourceRoot":"","sources":["../../../../src/shared/utils/validators/nameserver.ts"],"names":[],"mappings":"AAcA,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmD3D;AAQD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateNameserver = validateNameserver;
|
|
4
|
+
exports.normalizeNameserver = normalizeNameserver;
|
|
5
|
+
const errors_1 = require("../../types/errors");
|
|
6
|
+
function validateNameserver(nameserver) {
|
|
7
|
+
if (!nameserver || typeof nameserver !== 'string') {
|
|
8
|
+
throw new errors_1.ValidationError('Nameserver must be a non-empty string', { nameserver });
|
|
9
|
+
}
|
|
10
|
+
const trimmed = nameserver.trim();
|
|
11
|
+
if (trimmed.length === 0) {
|
|
12
|
+
throw new errors_1.ValidationError('Nameserver cannot be empty', { nameserver });
|
|
13
|
+
}
|
|
14
|
+
if (trimmed.length > 253) {
|
|
15
|
+
throw new errors_1.ValidationError('Nameserver hostname exceeds maximum length of 253 characters', {
|
|
16
|
+
nameserver,
|
|
17
|
+
length: trimmed.length,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
if (!trimmed.includes('.')) {
|
|
21
|
+
throw new errors_1.ValidationError('Nameserver must be a fully-qualified hostname (e.g., ns1.example.com)', { nameserver });
|
|
22
|
+
}
|
|
23
|
+
const labels = trimmed.split('.');
|
|
24
|
+
for (const label of labels) {
|
|
25
|
+
if (label.length === 0) {
|
|
26
|
+
throw new errors_1.ValidationError('Nameserver hostname contains empty label (double dot or leading/trailing dot)', {
|
|
27
|
+
nameserver,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (label.length > 63) {
|
|
31
|
+
throw new errors_1.ValidationError(`Nameserver label "${label}" exceeds maximum length of 63 characters`, {
|
|
32
|
+
nameserver,
|
|
33
|
+
label,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/.test(label) && !/^[a-zA-Z0-9]$/.test(label)) {
|
|
37
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9-]*$/.test(label)) {
|
|
38
|
+
throw new errors_1.ValidationError(`Nameserver label "${label}" contains invalid characters`, {
|
|
39
|
+
nameserver,
|
|
40
|
+
label,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function normalizeNameserver(nameserver) {
|
|
47
|
+
return nameserver.trim().toLowerCase();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=nameserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nameserver.js","sourceRoot":"","sources":["../../../../src/shared/utils/validators/nameserver.ts"],"names":[],"mappings":";;AAcA,gDAmDC;AAQD,kDAEC;AAtED,+CAAqD;AASrD,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,wBAAe,CAAC,uCAAuC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAElC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAe,CAAC,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAe,CAAC,8DAA8D,EAAE;YACxF,UAAU;YACV,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,wBAAe,CACvB,uEAAuE,EACvE,EAAE,UAAU,EAAE,CACf,CAAC;IACJ,CAAC;IAGD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,wBAAe,CAAC,+EAA+E,EAAE;gBACzG,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,wBAAe,CAAC,qBAAqB,KAAK,2CAA2C,EAAE;gBAC/F,UAAU;gBACV,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAE5F,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,wBAAe,CAAC,qBAAqB,KAAK,+BAA+B,EAAE;oBACnF,UAAU;oBACV,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAQD,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdapify",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Unified, secure, high-performance RDAP client
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"description": "Unified, secure, high-performance RDAP client with built-in SSRF protection and privacy controls",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -26,6 +26,9 @@
|
|
|
26
26
|
"import": "./dist/shared/utils/validators/index.js"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
+
"bin": {
|
|
30
|
+
"rdapify": "./dist/cli/index.js"
|
|
31
|
+
},
|
|
29
32
|
"sideEffects": false,
|
|
30
33
|
"files": [
|
|
31
34
|
"dist",
|
|
@@ -101,25 +104,21 @@
|
|
|
101
104
|
},
|
|
102
105
|
"devDependencies": {
|
|
103
106
|
"@types/jest": "^29.5.11",
|
|
104
|
-
"@types/node": "^
|
|
107
|
+
"@types/node": "^25.5.0",
|
|
105
108
|
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
|
106
109
|
"@typescript-eslint/parser": "^8.53.1",
|
|
107
110
|
"eslint": "^8.56.0",
|
|
108
|
-
"eslint-config-prettier": "^
|
|
111
|
+
"eslint-config-prettier": "^10.1.8",
|
|
109
112
|
"eslint-plugin-import": "^2.32.0",
|
|
110
113
|
"eslint-plugin-prettier": "^5.1.3",
|
|
111
114
|
"eslint-plugin-security": "^3.0.1",
|
|
112
|
-
"husky": "^
|
|
115
|
+
"husky": "^9.1.7",
|
|
113
116
|
"jest": "^29.7.0",
|
|
114
117
|
"prettier": "^3.2.4",
|
|
115
|
-
"rimraf": "^
|
|
118
|
+
"rimraf": "^6.1.3",
|
|
116
119
|
"ts-jest": "^29.1.1",
|
|
117
120
|
"typescript": "^5.9.3"
|
|
118
121
|
},
|
|
119
|
-
"funding": {
|
|
120
|
-
"type": "opencollective",
|
|
121
|
-
"url": "https://opencollective.com/rdapify"
|
|
122
|
-
},
|
|
123
122
|
"dependencies": {
|
|
124
123
|
"ipaddr.js": "^2.3.0",
|
|
125
124
|
"tslib": "^2.8.1"
|