rdapify 0.1.2 → 0.1.6
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 +60 -0
- package/README.md +11 -9
- package/dist/application/client/RDAPClient.d.ts +13 -0
- package/dist/application/client/RDAPClient.d.ts.map +1 -1
- package/dist/application/client/RDAPClient.js +40 -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/QueryOrchestrator.d.ts +11 -0
- package/dist/application/services/QueryOrchestrator.d.ts.map +1 -1
- package/dist/application/services/QueryOrchestrator.js +254 -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 +227 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -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.map +1 -1
- package/dist/infrastructure/http/BootstrapDiscovery.js +5 -2
- package/dist/infrastructure/http/BootstrapDiscovery.js.map +1 -1
- package/dist/infrastructure/http/ConnectionPool.d.ts +1 -1
- package/dist/infrastructure/http/ConnectionPool.d.ts.map +1 -1
- package/dist/infrastructure/http/ConnectionPool.js +9 -4
- package/dist/infrastructure/http/ConnectionPool.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 +12 -4
- package/dist/infrastructure/http/Fetcher.js.map +1 -1
- package/dist/infrastructure/http/Normalizer.d.ts.map +1 -1
- package/dist/infrastructure/http/Normalizer.js +16 -9
- 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 +37 -0
- package/dist/infrastructure/monitoring/MetricsCollector.d.ts.map +1 -1
- package/dist/infrastructure/monitoring/MetricsCollector.js +186 -6
- package/dist/infrastructure/monitoring/MetricsCollector.js.map +1 -1
- package/dist/infrastructure/security/PIIRedactor.d.ts.map +1 -1
- package/dist/infrastructure/security/PIIRedactor.js +9 -2
- package/dist/infrastructure/security/PIIRedactor.js.map +1 -1
- package/dist/infrastructure/security/SSRFProtection.d.ts.map +1 -1
- package/dist/infrastructure/security/SSRFProtection.js +7 -4
- package/dist/infrastructure/security/SSRFProtection.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.d.ts.map +1 -1
- package/dist/shared/constants/rdap.constants.js +1 -1
- package/dist/shared/constants/rdap.constants.js.map +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/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/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/index.d.ts +1 -0
- package/dist/shared/utils/validators/index.d.ts.map +1 -1
- package/dist/shared/utils/validators/index.js +3 -1
- package/dist/shared/utils/validators/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -11,7 +11,7 @@ class ConnectionPool {
|
|
|
11
11
|
this.cleanupInterval = setInterval(() => this.cleanup(), 30000);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
async acquire(host) {
|
|
14
|
+
async acquire(host, timeout) {
|
|
15
15
|
const hostConnections = this.connections.get(host) || [];
|
|
16
16
|
const available = hostConnections.find((conn) => !conn.inUse);
|
|
17
17
|
if (available) {
|
|
@@ -30,7 +30,7 @@ class ConnectionPool {
|
|
|
30
30
|
this.connections.set(host, hostConnections);
|
|
31
31
|
return connection.id;
|
|
32
32
|
}
|
|
33
|
-
return this.waitForConnection(host);
|
|
33
|
+
return this.waitForConnection(host, timeout ?? 5000);
|
|
34
34
|
}
|
|
35
35
|
release(connectionId) {
|
|
36
36
|
for (const [, connections] of this.connections.entries()) {
|
|
@@ -42,8 +42,9 @@ class ConnectionPool {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
async waitForConnection(host) {
|
|
46
|
-
return new Promise((resolve) => {
|
|
45
|
+
async waitForConnection(host, timeout = 5000) {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
const startTime = Date.now();
|
|
47
48
|
const checkInterval = setInterval(() => {
|
|
48
49
|
const hostConnections = this.connections.get(host) || [];
|
|
49
50
|
const available = hostConnections.find((conn) => !conn.inUse);
|
|
@@ -53,6 +54,10 @@ class ConnectionPool {
|
|
|
53
54
|
available.lastUsed = Date.now();
|
|
54
55
|
resolve(available.id);
|
|
55
56
|
}
|
|
57
|
+
if (Date.now() - startTime >= timeout) {
|
|
58
|
+
clearInterval(checkInterval);
|
|
59
|
+
reject(new Error(`Timeout waiting for connection to ${host} after ${timeout}ms`));
|
|
60
|
+
}
|
|
56
61
|
}, 100);
|
|
57
62
|
});
|
|
58
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionPool.js","sourceRoot":"","sources":["../../../src/infrastructure/http/ConnectionPool.ts"],"names":[],"mappings":";;;AAqBA,MAAa,cAAc;IAOzB,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAG7B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,IAAY;
|
|
1
|
+
{"version":3,"file":"ConnectionPool.js","sourceRoot":"","sources":["../../../src/infrastructure/http/ConnectionPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface FetcherOptions {
|
|
|
8
8
|
followRedirects?: boolean;
|
|
9
9
|
maxRedirects?: number;
|
|
10
10
|
ssrfProtection?: SSRFProtection;
|
|
11
|
+
logRedirect?: (fromUrl: string, toUrl: string) => void;
|
|
11
12
|
}
|
|
12
13
|
export declare class Fetcher {
|
|
13
14
|
private readonly timeout;
|
|
@@ -16,6 +17,7 @@ export declare class Fetcher {
|
|
|
16
17
|
private readonly followRedirects;
|
|
17
18
|
private readonly maxRedirects;
|
|
18
19
|
private readonly ssrfProtection?;
|
|
20
|
+
private readonly logRedirect?;
|
|
19
21
|
constructor(options?: FetcherOptions);
|
|
20
22
|
fetch(url: string): Promise<RawRDAPResponse>;
|
|
21
23
|
private makeRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetcher.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/Fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAM5D,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Fetcher.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/Fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAM5D,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAKD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAA2C;gBAE5D,OAAO,GAAE,cAAmB;IAkBlC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAyBpC,WAAW;IAgHzB,SAAS,IAAI;QACX,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,OAAO,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB;CAQF"}
|
|
@@ -10,11 +10,12 @@ class Fetcher {
|
|
|
10
10
|
request: options.timeout?.request || 10000,
|
|
11
11
|
dns: options.timeout?.dns || 3000,
|
|
12
12
|
};
|
|
13
|
-
this.userAgent = options.userAgent || 'RDAPify/0.1.
|
|
13
|
+
this.userAgent = options.userAgent || 'RDAPify/0.1.4 (https://rdapify.com)';
|
|
14
14
|
this.headers = options.headers || {};
|
|
15
15
|
this.followRedirects = options.followRedirects ?? true;
|
|
16
16
|
this.maxRedirects = options.maxRedirects || 5;
|
|
17
17
|
this.ssrfProtection = options.ssrfProtection;
|
|
18
|
+
this.logRedirect = options.logRedirect;
|
|
18
19
|
}
|
|
19
20
|
async fetch(url) {
|
|
20
21
|
if (this.ssrfProtection) {
|
|
@@ -25,7 +26,7 @@ class Fetcher {
|
|
|
25
26
|
return response;
|
|
26
27
|
}
|
|
27
28
|
catch (error) {
|
|
28
|
-
if (error instanceof errors_1.
|
|
29
|
+
if (error instanceof errors_1.RDAPifyError) {
|
|
29
30
|
throw error;
|
|
30
31
|
}
|
|
31
32
|
throw new errors_1.NetworkError(`Failed to fetch RDAP data: ${error instanceof Error ? error.message : 'Unknown error'}`, undefined, { url, originalError: error });
|
|
@@ -55,6 +56,7 @@ class Fetcher {
|
|
|
55
56
|
throw error;
|
|
56
57
|
}
|
|
57
58
|
if (response.status >= 300 && response.status < 400) {
|
|
59
|
+
const fromUrl = url;
|
|
58
60
|
if (!this.followRedirects) {
|
|
59
61
|
throw new errors_1.NetworkError(`Redirect not allowed (status: ${response.status})`, response.status, { url });
|
|
60
62
|
}
|
|
@@ -62,10 +64,17 @@ class Fetcher {
|
|
|
62
64
|
if (!location) {
|
|
63
65
|
throw new errors_1.NetworkError('Redirect without Location header', response.status, { url });
|
|
64
66
|
}
|
|
65
|
-
|
|
67
|
+
let redirectUrl;
|
|
68
|
+
try {
|
|
69
|
+
redirectUrl = new URL(location, url).toString();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new errors_1.NetworkError('Invalid redirect URL', response.status, { url, location });
|
|
73
|
+
}
|
|
66
74
|
if (this.ssrfProtection) {
|
|
67
75
|
await this.ssrfProtection.validateUrl(redirectUrl);
|
|
68
76
|
}
|
|
77
|
+
this.logRedirect?.(fromUrl, redirectUrl);
|
|
69
78
|
return this.makeRequest(redirectUrl, redirectCount + 1);
|
|
70
79
|
}
|
|
71
80
|
if (!response.ok) {
|
|
@@ -96,7 +105,6 @@ class Fetcher {
|
|
|
96
105
|
if (!data || typeof data !== 'object') {
|
|
97
106
|
throw new errors_1.NetworkError('Invalid RDAP response: not an object', response.status, {
|
|
98
107
|
url,
|
|
99
|
-
data,
|
|
100
108
|
});
|
|
101
109
|
}
|
|
102
110
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetcher.js","sourceRoot":"","sources":["../../../src/infrastructure/http/Fetcher.ts"],"names":[],"mappings":";;;AAMA,
|
|
1
|
+
{"version":3,"file":"Fetcher.js","sourceRoot":"","sources":["../../../src/infrastructure/http/Fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Normalizer.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/Normalizer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EAIf,YAAY,EAGb,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,UAAU;IAIrB,SAAS,CACP,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAe,EACvB,UAAU,GAAE,OAAe,GAC1B,YAAY;IAyBf,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"Normalizer.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/Normalizer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EAIf,YAAY,EAGb,MAAM,oBAAoB,CAAC;AAM5B,qBAAa,UAAU;IAIrB,SAAS,CACP,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAe,EACvB,UAAU,GAAE,OAAe,GAC1B,YAAY;IAyBf,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,gBAAgB;IA+CxB,OAAO,CAAC,eAAe;CAWxB"}
|
|
@@ -98,34 +98,41 @@ class Normalizer {
|
|
|
98
98
|
return response;
|
|
99
99
|
}
|
|
100
100
|
extractNameservers(raw) {
|
|
101
|
-
|
|
101
|
+
const nameservers = raw['nameservers'];
|
|
102
|
+
if (!nameservers || !Array.isArray(nameservers)) {
|
|
102
103
|
return [];
|
|
103
104
|
}
|
|
104
|
-
return
|
|
105
|
-
.map((ns) =>
|
|
106
|
-
|
|
105
|
+
return nameservers
|
|
106
|
+
.map((ns) => {
|
|
107
|
+
if (!ns || typeof ns !== 'object') {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return ns.ldhName || ns.unicodeName;
|
|
111
|
+
})
|
|
112
|
+
.filter((name) => name !== undefined && name !== '');
|
|
107
113
|
}
|
|
108
114
|
extractRegistrar(raw) {
|
|
109
|
-
|
|
115
|
+
const entities = raw['entities'];
|
|
116
|
+
if (!entities || !Array.isArray(entities)) {
|
|
110
117
|
return undefined;
|
|
111
118
|
}
|
|
112
|
-
const registrar =
|
|
119
|
+
const registrar = entities.find((entity) => entity && typeof entity === 'object' && entity.roles?.includes('registrar'));
|
|
113
120
|
if (!registrar) {
|
|
114
121
|
return undefined;
|
|
115
122
|
}
|
|
116
123
|
let name;
|
|
117
|
-
if (registrar.vcardArray && Array.isArray(registrar.vcardArray)) {
|
|
124
|
+
if (registrar.vcardArray && Array.isArray(registrar.vcardArray) && registrar.vcardArray.length >= 2) {
|
|
118
125
|
const vcard = registrar.vcardArray[1];
|
|
119
126
|
if (Array.isArray(vcard)) {
|
|
120
127
|
const fnField = vcard.find((field) => Array.isArray(field) && field[0] === 'fn');
|
|
121
|
-
if (fnField
|
|
128
|
+
if (fnField && Array.isArray(fnField) && fnField.length >= 4) {
|
|
122
129
|
name = fnField[3];
|
|
123
130
|
}
|
|
124
131
|
}
|
|
125
132
|
}
|
|
126
133
|
let url;
|
|
127
134
|
if (registrar.links && Array.isArray(registrar.links)) {
|
|
128
|
-
const selfLink = registrar.links.find((link) => link.rel === 'self');
|
|
135
|
+
const selfLink = registrar.links.find((link) => link && link.rel === 'self');
|
|
129
136
|
if (selfLink) {
|
|
130
137
|
url = selfLink.href;
|
|
131
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Normalizer.js","sourceRoot":"","sources":["../../../src/infrastructure/http/Normalizer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Normalizer.js","sourceRoot":"","sources":["../../../src/infrastructure/http/Normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
export type AuditEventType = 'QUERY_START' | 'QUERY_SUCCESS' | 'QUERY_FAILURE' | 'CACHE_HIT' | 'CACHE_MISS' | 'RATE_LIMIT_EXCEEDED' | 'SSRF_BLOCKED' | 'PII_REDACTED';
|
|
2
|
+
export interface AuditEvent {
|
|
3
|
+
id: string;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
eventType: AuditEventType;
|
|
6
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
7
|
+
query: string;
|
|
8
|
+
normalizedQuery?: string;
|
|
9
|
+
success: boolean;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
cached: boolean;
|
|
12
|
+
serverUrl?: string;
|
|
13
|
+
errorCode?: string;
|
|
14
|
+
errorMessage?: string;
|
|
15
|
+
requestHeaders?: Record<string, string>;
|
|
16
|
+
responseSize?: number;
|
|
17
|
+
sessionId?: string;
|
|
18
|
+
clientId?: string;
|
|
19
|
+
tags?: Record<string, string>;
|
|
20
|
+
}
|
|
21
|
+
export interface AuditLogAdapter {
|
|
22
|
+
write(event: AuditEvent): Promise<void> | void;
|
|
23
|
+
flush?(): Promise<void> | void;
|
|
24
|
+
}
|
|
25
|
+
export interface AuditLoggerOptions {
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
adapter?: AuditLogAdapter;
|
|
28
|
+
includeRequestHeaders?: boolean;
|
|
29
|
+
includeResponseSize?: boolean;
|
|
30
|
+
sensitiveFields?: string[];
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
clientId?: string;
|
|
33
|
+
tags?: Record<string, string>;
|
|
34
|
+
retentionHours?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class InMemoryAuditAdapter implements AuditLogAdapter {
|
|
37
|
+
private events;
|
|
38
|
+
private readonly maxEvents;
|
|
39
|
+
private readonly retentionMs;
|
|
40
|
+
constructor(options?: {
|
|
41
|
+
maxEvents?: number;
|
|
42
|
+
retentionHours?: number;
|
|
43
|
+
});
|
|
44
|
+
write(event: AuditEvent): void;
|
|
45
|
+
getEvents(since?: string): AuditEvent[];
|
|
46
|
+
getEventsByType(type: AuditEventType): AuditEvent[];
|
|
47
|
+
clear(): void;
|
|
48
|
+
size(): number;
|
|
49
|
+
private evict;
|
|
50
|
+
}
|
|
51
|
+
export declare class FileAuditAdapter implements AuditLogAdapter {
|
|
52
|
+
private readonly filePath;
|
|
53
|
+
constructor(filePath: string);
|
|
54
|
+
write(event: AuditEvent): Promise<void>;
|
|
55
|
+
flush(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export declare class AuditLogger {
|
|
58
|
+
private readonly enabled;
|
|
59
|
+
private readonly adapter;
|
|
60
|
+
private readonly includeRequestHeaders;
|
|
61
|
+
private readonly includeResponseSize;
|
|
62
|
+
private readonly sessionId?;
|
|
63
|
+
private readonly clientId?;
|
|
64
|
+
private readonly tags?;
|
|
65
|
+
private eventsLogged;
|
|
66
|
+
constructor(options?: AuditLoggerOptions);
|
|
67
|
+
log(event: Omit<AuditEvent, 'id' | 'timestamp'>): void;
|
|
68
|
+
logQueryStart(params: {
|
|
69
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
70
|
+
query: string;
|
|
71
|
+
sessionId?: string;
|
|
72
|
+
clientId?: string;
|
|
73
|
+
}): void;
|
|
74
|
+
logQuerySuccess(params: {
|
|
75
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
76
|
+
query: string;
|
|
77
|
+
normalizedQuery: string;
|
|
78
|
+
durationMs: number;
|
|
79
|
+
cached: boolean;
|
|
80
|
+
serverUrl?: string;
|
|
81
|
+
responseSize?: number;
|
|
82
|
+
}): void;
|
|
83
|
+
logQueryFailure(params: {
|
|
84
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
85
|
+
query: string;
|
|
86
|
+
durationMs: number;
|
|
87
|
+
errorCode: string;
|
|
88
|
+
errorMessage: string;
|
|
89
|
+
}): void;
|
|
90
|
+
logCacheHit(params: {
|
|
91
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
92
|
+
query: string;
|
|
93
|
+
}): void;
|
|
94
|
+
logRateLimitExceeded(params: {
|
|
95
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
96
|
+
query: string;
|
|
97
|
+
}): void;
|
|
98
|
+
logSSRFBlocked(params: {
|
|
99
|
+
url: string;
|
|
100
|
+
}): void;
|
|
101
|
+
logPIIRedacted(params: {
|
|
102
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
103
|
+
query: string;
|
|
104
|
+
fieldsRedacted: number;
|
|
105
|
+
}): void;
|
|
106
|
+
flush(): Promise<void>;
|
|
107
|
+
isEnabled(): boolean;
|
|
108
|
+
getStats(): {
|
|
109
|
+
enabled: boolean;
|
|
110
|
+
eventsLogged: number;
|
|
111
|
+
};
|
|
112
|
+
private generateId;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=AuditLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLogger.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/logging/AuditLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuditLogger = exports.FileAuditAdapter = exports.InMemoryAuditAdapter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs = tslib_1.__importStar(require("fs/promises"));
|
|
6
|
+
class InMemoryAuditAdapter {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.events = [];
|
|
9
|
+
this.maxEvents = options?.maxEvents ?? 10000;
|
|
10
|
+
this.retentionMs = (options?.retentionHours ?? 24) * 60 * 60 * 1000;
|
|
11
|
+
}
|
|
12
|
+
write(event) {
|
|
13
|
+
this.evict();
|
|
14
|
+
this.events.push(event);
|
|
15
|
+
if (this.events.length > this.maxEvents) {
|
|
16
|
+
this.events = this.events.slice(-this.maxEvents);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getEvents(since) {
|
|
20
|
+
if (!since) {
|
|
21
|
+
return [...this.events];
|
|
22
|
+
}
|
|
23
|
+
const sinceMs = new Date(since).getTime();
|
|
24
|
+
return this.events.filter((e) => new Date(e.timestamp).getTime() >= sinceMs);
|
|
25
|
+
}
|
|
26
|
+
getEventsByType(type) {
|
|
27
|
+
return this.events.filter((e) => e.eventType === type);
|
|
28
|
+
}
|
|
29
|
+
clear() {
|
|
30
|
+
this.events = [];
|
|
31
|
+
}
|
|
32
|
+
size() {
|
|
33
|
+
return this.events.length;
|
|
34
|
+
}
|
|
35
|
+
evict() {
|
|
36
|
+
const cutoff = Date.now() - this.retentionMs;
|
|
37
|
+
this.events = this.events.filter((e) => new Date(e.timestamp).getTime() >= cutoff);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.InMemoryAuditAdapter = InMemoryAuditAdapter;
|
|
41
|
+
class FileAuditAdapter {
|
|
42
|
+
constructor(filePath) {
|
|
43
|
+
this.filePath = filePath;
|
|
44
|
+
}
|
|
45
|
+
async write(event) {
|
|
46
|
+
const line = JSON.stringify(event) + '\n';
|
|
47
|
+
await fs.appendFile(this.filePath, line, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
async flush() {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.FileAuditAdapter = FileAuditAdapter;
|
|
53
|
+
class AuditLogger {
|
|
54
|
+
constructor(options) {
|
|
55
|
+
this.eventsLogged = 0;
|
|
56
|
+
this.enabled = options?.enabled ?? true;
|
|
57
|
+
this.adapter = options?.adapter ?? new InMemoryAuditAdapter({
|
|
58
|
+
retentionHours: options?.retentionHours ?? 24,
|
|
59
|
+
});
|
|
60
|
+
this.includeRequestHeaders = options?.includeRequestHeaders ?? false;
|
|
61
|
+
this.includeResponseSize = options?.includeResponseSize ?? false;
|
|
62
|
+
this.sessionId = options?.sessionId;
|
|
63
|
+
this.clientId = options?.clientId;
|
|
64
|
+
this.tags = options?.tags;
|
|
65
|
+
}
|
|
66
|
+
log(event) {
|
|
67
|
+
if (!this.enabled)
|
|
68
|
+
return;
|
|
69
|
+
const fullEvent = {
|
|
70
|
+
...event,
|
|
71
|
+
id: this.generateId(),
|
|
72
|
+
timestamp: new Date().toISOString(),
|
|
73
|
+
};
|
|
74
|
+
if (!this.includeRequestHeaders) {
|
|
75
|
+
delete fullEvent.requestHeaders;
|
|
76
|
+
}
|
|
77
|
+
if (!this.includeResponseSize) {
|
|
78
|
+
delete fullEvent.responseSize;
|
|
79
|
+
}
|
|
80
|
+
if (this.tags) {
|
|
81
|
+
fullEvent.tags = { ...this.tags, ...fullEvent.tags };
|
|
82
|
+
}
|
|
83
|
+
this.adapter.write(fullEvent);
|
|
84
|
+
this.eventsLogged++;
|
|
85
|
+
}
|
|
86
|
+
logQueryStart(params) {
|
|
87
|
+
this.log({
|
|
88
|
+
eventType: 'QUERY_START',
|
|
89
|
+
queryType: params.queryType,
|
|
90
|
+
query: params.query,
|
|
91
|
+
success: false,
|
|
92
|
+
durationMs: 0,
|
|
93
|
+
cached: false,
|
|
94
|
+
sessionId: params.sessionId ?? this.sessionId,
|
|
95
|
+
clientId: params.clientId ?? this.clientId,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
logQuerySuccess(params) {
|
|
99
|
+
this.log({
|
|
100
|
+
eventType: 'QUERY_SUCCESS',
|
|
101
|
+
queryType: params.queryType,
|
|
102
|
+
query: params.query,
|
|
103
|
+
normalizedQuery: params.normalizedQuery,
|
|
104
|
+
success: true,
|
|
105
|
+
durationMs: params.durationMs,
|
|
106
|
+
cached: params.cached,
|
|
107
|
+
serverUrl: params.serverUrl,
|
|
108
|
+
responseSize: this.includeResponseSize ? params.responseSize : undefined,
|
|
109
|
+
sessionId: this.sessionId,
|
|
110
|
+
clientId: this.clientId,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
logQueryFailure(params) {
|
|
114
|
+
this.log({
|
|
115
|
+
eventType: 'QUERY_FAILURE',
|
|
116
|
+
queryType: params.queryType,
|
|
117
|
+
query: params.query,
|
|
118
|
+
success: false,
|
|
119
|
+
durationMs: params.durationMs,
|
|
120
|
+
cached: false,
|
|
121
|
+
errorCode: params.errorCode,
|
|
122
|
+
errorMessage: params.errorMessage,
|
|
123
|
+
sessionId: this.sessionId,
|
|
124
|
+
clientId: this.clientId,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
logCacheHit(params) {
|
|
128
|
+
this.log({
|
|
129
|
+
eventType: 'CACHE_HIT',
|
|
130
|
+
queryType: params.queryType,
|
|
131
|
+
query: params.query,
|
|
132
|
+
success: true,
|
|
133
|
+
durationMs: 0,
|
|
134
|
+
cached: true,
|
|
135
|
+
sessionId: this.sessionId,
|
|
136
|
+
clientId: this.clientId,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
logRateLimitExceeded(params) {
|
|
140
|
+
this.log({
|
|
141
|
+
eventType: 'RATE_LIMIT_EXCEEDED',
|
|
142
|
+
queryType: params.queryType,
|
|
143
|
+
query: params.query,
|
|
144
|
+
success: false,
|
|
145
|
+
durationMs: 0,
|
|
146
|
+
cached: false,
|
|
147
|
+
sessionId: this.sessionId,
|
|
148
|
+
clientId: this.clientId,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
logSSRFBlocked(params) {
|
|
152
|
+
this.log({
|
|
153
|
+
eventType: 'SSRF_BLOCKED',
|
|
154
|
+
queryType: 'domain',
|
|
155
|
+
query: params.url,
|
|
156
|
+
success: false,
|
|
157
|
+
durationMs: 0,
|
|
158
|
+
cached: false,
|
|
159
|
+
sessionId: this.sessionId,
|
|
160
|
+
clientId: this.clientId,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
logPIIRedacted(params) {
|
|
164
|
+
this.log({
|
|
165
|
+
eventType: 'PII_REDACTED',
|
|
166
|
+
queryType: params.queryType,
|
|
167
|
+
query: params.query,
|
|
168
|
+
success: true,
|
|
169
|
+
durationMs: 0,
|
|
170
|
+
cached: false,
|
|
171
|
+
tags: { fieldsRedacted: String(params.fieldsRedacted) },
|
|
172
|
+
sessionId: this.sessionId,
|
|
173
|
+
clientId: this.clientId,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
async flush() {
|
|
177
|
+
if (this.adapter.flush) {
|
|
178
|
+
await this.adapter.flush();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
isEnabled() {
|
|
182
|
+
return this.enabled;
|
|
183
|
+
}
|
|
184
|
+
getStats() {
|
|
185
|
+
return {
|
|
186
|
+
enabled: this.enabled,
|
|
187
|
+
eventsLogged: this.eventsLogged,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
generateId() {
|
|
191
|
+
return Date.now().toString(36) + Math.random().toString(36).slice(2, 9);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
exports.AuditLogger = AuditLogger;
|
|
195
|
+
//# sourceMappingURL=AuditLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLogger.js","sourceRoot":"","sources":["../../../src/infrastructure/logging/AuditLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/logging/Logger.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACpC;AAKD,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;gBAEU,OAAO,GAAE,aAAkB;IAYvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO1D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO1D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAO3D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/logging/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,11 @@ class Logger {
|
|
|
33
33
|
logRequest(type, query, context) {
|
|
34
34
|
if (!this.logRequests)
|
|
35
35
|
return;
|
|
36
|
-
this.info(`REQUEST → ${type}: ${query}`,
|
|
36
|
+
this.info(`REQUEST → ${type}: ${query}`, {
|
|
37
|
+
queryType: type,
|
|
38
|
+
queryValue: query,
|
|
39
|
+
...context,
|
|
40
|
+
});
|
|
37
41
|
}
|
|
38
42
|
logResponse(type, query, success, duration, context) {
|
|
39
43
|
if (!this.logResponses)
|
|
@@ -41,18 +45,38 @@ class Logger {
|
|
|
41
45
|
const status = success ? '✓' : '✗';
|
|
42
46
|
const message = `RESPONSE ${status} ${type}: ${query} (${duration}ms)`;
|
|
43
47
|
if (success) {
|
|
44
|
-
this.info(message,
|
|
48
|
+
this.info(message, {
|
|
49
|
+
queryType: type,
|
|
50
|
+
queryValue: query,
|
|
51
|
+
success,
|
|
52
|
+
durationMs: duration,
|
|
53
|
+
...context,
|
|
54
|
+
});
|
|
45
55
|
}
|
|
46
56
|
else {
|
|
47
|
-
this.warn(message,
|
|
57
|
+
this.warn(message, {
|
|
58
|
+
queryType: type,
|
|
59
|
+
queryValue: query,
|
|
60
|
+
success,
|
|
61
|
+
durationMs: duration,
|
|
62
|
+
...context,
|
|
63
|
+
});
|
|
48
64
|
}
|
|
49
65
|
}
|
|
50
66
|
logPerformance(operation, duration, context) {
|
|
51
|
-
this.debug(`PERFORMANCE: ${operation} took ${duration}ms`,
|
|
67
|
+
this.debug(`PERFORMANCE: ${operation} took ${duration}ms`, {
|
|
68
|
+
operation,
|
|
69
|
+
durationMs: duration,
|
|
70
|
+
...context,
|
|
71
|
+
});
|
|
52
72
|
}
|
|
53
73
|
logCache(operation, key, context) {
|
|
54
74
|
const emoji = operation === 'hit' ? '✓' : operation === 'miss' ? '✗' : '→';
|
|
55
|
-
this.debug(`CACHE ${emoji} ${operation}: ${key}`,
|
|
75
|
+
this.debug(`CACHE ${emoji} ${operation}: ${key}`, {
|
|
76
|
+
operation,
|
|
77
|
+
cacheKey: key,
|
|
78
|
+
...context,
|
|
79
|
+
});
|
|
56
80
|
}
|
|
57
81
|
log(level, message, context) {
|
|
58
82
|
if (!this.enabled)
|