rdapify 0.1.3 → 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/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/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/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 +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/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
|
@@ -3,6 +3,8 @@ import { Logger } from '../../infrastructure/logging/Logger';
|
|
|
3
3
|
import type { DomainResponse, IPResponse, ASNResponse } from '../../shared/types';
|
|
4
4
|
import type { RDAPClientOptions } from '../../shared/types/options';
|
|
5
5
|
import { BatchProcessor } from '../services/BatchProcessor';
|
|
6
|
+
import { MiddlewareManager } from '../hooks/MiddlewareHooks';
|
|
7
|
+
import type { MiddlewareOptions } from '../hooks/MiddlewareHooks';
|
|
6
8
|
export declare class RDAPClient {
|
|
7
9
|
private readonly options;
|
|
8
10
|
private readonly cache;
|
|
@@ -17,6 +19,10 @@ export declare class RDAPClient {
|
|
|
17
19
|
private readonly connectionPool;
|
|
18
20
|
private readonly metricsCollector;
|
|
19
21
|
private readonly logger;
|
|
22
|
+
private readonly middlewareManager;
|
|
23
|
+
private readonly queryDeduplicator;
|
|
24
|
+
private readonly debugEnabled;
|
|
25
|
+
private readonly debugLogger?;
|
|
20
26
|
constructor(options?: RDAPClientOptions);
|
|
21
27
|
domain(domain: string): Promise<DomainResponse>;
|
|
22
28
|
ip(ip: string): Promise<IPResponse>;
|
|
@@ -45,6 +51,13 @@ export declare class RDAPClient {
|
|
|
45
51
|
idleConnections: number;
|
|
46
52
|
hosts: number;
|
|
47
53
|
};
|
|
54
|
+
use(hooks: Partial<MiddlewareOptions>): this;
|
|
55
|
+
getMiddlewareManager(): MiddlewareManager;
|
|
56
|
+
getDeduplicatorStats(): {
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
inflight: number;
|
|
59
|
+
windowMs: number;
|
|
60
|
+
};
|
|
48
61
|
getLogger(): Logger;
|
|
49
62
|
getLogs(count?: number): import("../../infrastructure/logging/Logger").LogEntry[];
|
|
50
63
|
clearAll(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RDAPClient.d.ts","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAIpE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"RDAPClient.d.ts","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAIpE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAyClE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAK3B;gBACU,OAAO,GAAE,iBAAsB;IAkJrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAiB/C,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBnC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YAOvC,cAAc;IA0C5B,OAAO,CAAC,gBAAgB;IAOlB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,QAAQ,IAAI,OAAO,CAAC;QACxB,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,OAAO,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,EAAE,CAAC;SACjB,CAAC;KACH,CAAC;IAUF,SAAS,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAOxC,cAAc,IAAI,WAAW;IAO7B,iBAAiB,IAAI,cAAc;IAOnC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM;IAOzB,sBAAsB;;;;;;IActB,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAQ5C,oBAAoB,IAAI,iBAAiB;IAOzC,oBAAoB;;;;;IAOpB,SAAS,IAAI,MAAM;IAOnB,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM;IAOhB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -13,6 +13,8 @@ const options_1 = require("../../shared/types/options");
|
|
|
13
13
|
const helpers_1 = require("../../shared/utils/helpers");
|
|
14
14
|
const services_1 = require("../services");
|
|
15
15
|
const BatchProcessor_1 = require("../services/BatchProcessor");
|
|
16
|
+
const MiddlewareHooks_1 = require("../hooks/MiddlewareHooks");
|
|
17
|
+
const QueryDeduplicator_1 = require("../deduplication/QueryDeduplicator");
|
|
16
18
|
class RDAPClient {
|
|
17
19
|
constructor(options = {}) {
|
|
18
20
|
this.options = this.normalizeOptions(options);
|
|
@@ -33,6 +35,15 @@ class RDAPClient {
|
|
|
33
35
|
followRedirects: this.options.followRedirects,
|
|
34
36
|
maxRedirects: this.options.maxRedirects,
|
|
35
37
|
ssrfProtection: this.ssrfProtection,
|
|
38
|
+
logRedirect: (fromUrl, toUrl) => {
|
|
39
|
+
this.logger?.warn(`Redirect: ${fromUrl} → ${toUrl}`);
|
|
40
|
+
if (this.debugEnabled && this.debugLogger) {
|
|
41
|
+
this.debugLogger.debug('Redirect occurred', {
|
|
42
|
+
fromUrl,
|
|
43
|
+
toUrl,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
},
|
|
36
47
|
});
|
|
37
48
|
this.bootstrap = new http_1.BootstrapDiscovery(this.options.bootstrapUrl, this.fetcher);
|
|
38
49
|
const cacheOptions = typeof this.options.cache === 'boolean'
|
|
@@ -60,12 +71,26 @@ class RDAPClient {
|
|
|
60
71
|
enabled: true,
|
|
61
72
|
maxMetrics: 10000,
|
|
62
73
|
});
|
|
74
|
+
const validLogLevels = ['debug', 'info', 'warn', 'error'];
|
|
75
|
+
const configuredLevel = this.options.logging?.level;
|
|
76
|
+
const logLevel = configuredLevel && validLogLevels.includes(configuredLevel)
|
|
77
|
+
? configuredLevel
|
|
78
|
+
: 'info';
|
|
63
79
|
this.logger = new Logger_1.Logger({
|
|
64
|
-
level:
|
|
80
|
+
level: logLevel,
|
|
65
81
|
enabled: true,
|
|
66
82
|
logRequests: true,
|
|
67
83
|
logResponses: true,
|
|
68
84
|
});
|
|
85
|
+
const debugOptions = this.options.debug;
|
|
86
|
+
this.debugEnabled = typeof debugOptions === 'boolean' ? debugOptions : debugOptions?.enabled ?? false;
|
|
87
|
+
this.debugLogger = typeof debugOptions === 'object' && debugOptions?.logger ? debugOptions.logger : undefined;
|
|
88
|
+
const middlewareOpts = this.options.middleware;
|
|
89
|
+
this.middlewareManager = new MiddlewareHooks_1.MiddlewareManager(middlewareOpts);
|
|
90
|
+
const dedupOpts = this.options.deduplication;
|
|
91
|
+
this.queryDeduplicator = new QueryDeduplicator_1.QueryDeduplicator(typeof dedupOpts === 'boolean'
|
|
92
|
+
? { enabled: dedupOpts }
|
|
93
|
+
: dedupOpts);
|
|
69
94
|
this.batchProcessor = new BatchProcessor_1.BatchProcessor(this);
|
|
70
95
|
this.orchestrator = new services_1.QueryOrchestrator({
|
|
71
96
|
cache: this.cache,
|
|
@@ -78,6 +103,10 @@ class RDAPClient {
|
|
|
78
103
|
rateLimiter: this.rateLimiter,
|
|
79
104
|
metricsCollector: this.metricsCollector,
|
|
80
105
|
logger: this.logger,
|
|
106
|
+
debugEnabled: this.debugEnabled,
|
|
107
|
+
debugLogger: this.debugLogger,
|
|
108
|
+
middleware: this.middlewareManager,
|
|
109
|
+
deduplicator: this.queryDeduplicator,
|
|
81
110
|
});
|
|
82
111
|
}
|
|
83
112
|
async domain(domain) {
|
|
@@ -142,6 +171,16 @@ class RDAPClient {
|
|
|
142
171
|
getConnectionPoolStats() {
|
|
143
172
|
return this.connectionPool.getStats();
|
|
144
173
|
}
|
|
174
|
+
use(hooks) {
|
|
175
|
+
this.middlewareManager.use(hooks);
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
getMiddlewareManager() {
|
|
179
|
+
return this.middlewareManager;
|
|
180
|
+
}
|
|
181
|
+
getDeduplicatorStats() {
|
|
182
|
+
return this.queryDeduplicator.getStats();
|
|
183
|
+
}
|
|
145
184
|
getLogger() {
|
|
146
185
|
return this.logger;
|
|
147
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RDAPClient.js","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":";;;AAKA,sDAA0D;AAC1D,oDAAoF;AACpF,uEAAoE;AACpE,6EAA0E;AAC1E,4DAA4E;AAC5E,uFAAoF;AACpF,gEAA6D;
|
|
1
|
+
{"version":3,"file":"RDAPClient.js","sourceRoot":"","sources":["../../../src/application/client/RDAPClient.ts"],"names":[],"mappings":";;;AAKA,sDAA0D;AAC1D,oDAAoF;AACpF,uEAAoE;AACpE,6EAA0E;AAC1E,4DAA4E;AAC5E,uFAAoF;AACpF,gEAA6D;AAG7D,gDAAsD;AACtD,wDAA6D;AAO7D,wDAAgF;AAChF,0CAAgD;AAChD,+DAA4D;AAC5D,8DAA6D;AAE7D,0EAAuE;AAwCvE,MAAa,UAAU;IAuBrB,YAAY,UAA6B,EAAE;QAEzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAG9C,MAAM,WAAW,GACf,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;YAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;YAC1C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,CAAC,WAAW,CAAC,CAAC;QAGtD,IAAI,CAAC,OAAO,GAAG,IAAI,cAAO,CAAC;YACzB,OAAO,EACL,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ;gBACtC,CAAC,CAAC;oBACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC7B,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;iBAC1B;gBACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC9B,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE;wBAC1C,OAAO;wBACP,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAGH,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAGjF,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAE,yBAAe,CAAC,KAAsB;gBACzC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAe,EAAE;YACjC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAY,CAAC,YAAY,CAAC,CAAC;QAG5C,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAU,EAAE,CAAC;QAGnC,MAAM,cAAc,GAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,sBAAW,CAAC,cAAc,CAAC,CAAC;QAGnD,MAAM,gBAAgB,GACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YACzC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;gBACtB,CAAC,CAAE,yBAAe,CAAC,SAA8B;gBACjD,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,gBAAgB,CAAC,CAAC;QAGrD,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC;YACvC,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAGH,IAAI,CAAC,gBAAgB,GAAG,IAAI,mCAAgB,CAAC;YAC3C,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QAGH,MAAM,cAAc,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAA2B,CAAC;QAC1E,MAAM,QAAQ,GACZ,eAAe,IAAK,cAA2B,CAAC,QAAQ,CAAC,eAAe,CAAC;YACvE,CAAC,CAAE,eAA4B;YAC/B,CAAC,CAAC,MAAM,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC;YACvB,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAGH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,IAAI,KAAK,CAAC;QACtG,IAAI,CAAC,WAAW,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAG9G,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAA2C,CAAC;QAChF,IAAI,CAAC,iBAAiB,GAAG,IAAI,mCAAiB,CAAC,cAAc,CAAC,CAAC;QAG/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,qCAAiB,CAC5C,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;YACxB,CAAC,CAAE,SAAkE,CACxE,CAAC;QAGF,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,CAAC;QAG/C,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAiB,CAAC;YACxC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,iBAAiB;YAClC,YAAY,EAAE,IAAI,CAAC,iBAAiB;SACrC,CAAC,CAAC;IACL,CAAC;IAeD,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAeD,KAAK,CAAC,EAAE,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAcD,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAKO,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAE,yBAAe,CAAC,KAAsB;gBACzC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAEzB,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5E,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAG3B,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;oBACrC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAGD,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,IAAA,0BAAgB,EAC5B,OAAO,EACP,YAAY,CAAC,OAAO,IAAI,aAAa,EACrC,YAAY,CAAC,YAAY,IAAI,IAAI,EACjC,YAAY,CAAC,QAAQ,IAAI,KAAK,CAC/B,CAAC;oBAEF,MAAM,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAKO,gBAAgB,CAAC,OAA0B;QACjD,OAAO,IAAA,mBAAS,EAAC,yBAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAKD,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IAKD,KAAK,CAAC,QAAQ;QAWZ,OAAO;YACL,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;SAC1C,CAAC;IACJ,CAAC;IAKD,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAKD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAKD,UAAU,CAAC,KAAc;QACvB,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAKD,sBAAsB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAYD,GAAG,CAAC,KAAiC;QACnC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAKD,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAKD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAKD,OAAO,CAAC,KAAc;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAKD,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAKD,OAAO;QACL,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;CACF;AA1XD,gCA0XC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface DeduplicatorOptions {
|
|
2
|
+
windowMs?: number;
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class QueryDeduplicator {
|
|
6
|
+
private readonly inflight;
|
|
7
|
+
private readonly windowMs;
|
|
8
|
+
private readonly enabled;
|
|
9
|
+
constructor(options?: DeduplicatorOptions);
|
|
10
|
+
deduplicate<T>(key: string, fn: () => Promise<T>): Promise<T>;
|
|
11
|
+
getInflightCount(): number;
|
|
12
|
+
getInflightKeys(): string[];
|
|
13
|
+
clear(): void;
|
|
14
|
+
getStats(): {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
inflight: number;
|
|
17
|
+
windowMs: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=QueryDeduplicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryDeduplicator.d.ts","sourceRoot":"","sources":["../../../src/application/deduplication/QueryDeduplicator.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAElC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,CAAC,EAAE,mBAAmB;IAiBzC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwB7D,gBAAgB,IAAI,MAAM;IAK1B,eAAe,IAAI,MAAM,EAAE;IAK3B,KAAK,IAAI,IAAI;IAIb,QAAQ,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAOrE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryDeduplicator = void 0;
|
|
4
|
+
class QueryDeduplicator {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.inflight = new Map();
|
|
7
|
+
this.windowMs = options?.windowMs ?? 100;
|
|
8
|
+
this.enabled = options?.enabled ?? true;
|
|
9
|
+
}
|
|
10
|
+
deduplicate(key, fn) {
|
|
11
|
+
if (!this.enabled) {
|
|
12
|
+
return fn();
|
|
13
|
+
}
|
|
14
|
+
const existing = this.inflight.get(key);
|
|
15
|
+
if (existing !== undefined) {
|
|
16
|
+
return existing;
|
|
17
|
+
}
|
|
18
|
+
const promise = fn().finally(() => {
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
if (this.inflight.get(key) === promise) {
|
|
21
|
+
this.inflight.delete(key);
|
|
22
|
+
}
|
|
23
|
+
}, this.windowMs);
|
|
24
|
+
});
|
|
25
|
+
this.inflight.set(key, promise);
|
|
26
|
+
return promise;
|
|
27
|
+
}
|
|
28
|
+
getInflightCount() {
|
|
29
|
+
return this.inflight.size;
|
|
30
|
+
}
|
|
31
|
+
getInflightKeys() {
|
|
32
|
+
return Array.from(this.inflight.keys());
|
|
33
|
+
}
|
|
34
|
+
clear() {
|
|
35
|
+
this.inflight.clear();
|
|
36
|
+
}
|
|
37
|
+
getStats() {
|
|
38
|
+
return {
|
|
39
|
+
enabled: this.enabled,
|
|
40
|
+
inflight: this.inflight.size,
|
|
41
|
+
windowMs: this.windowMs,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.QueryDeduplicator = QueryDeduplicator;
|
|
46
|
+
//# sourceMappingURL=QueryDeduplicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryDeduplicator.js","sourceRoot":"","sources":["../../../src/application/deduplication/QueryDeduplicator.ts"],"names":[],"mappings":";;;AAkBA,MAAa,iBAAiB;IAK5B,YAAY,OAA6B;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAC1C,CAAC;IAaD,WAAW,CAAI,GAAW,EAAE,EAAoB;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAsB,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAE5C,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;oBACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,gBAAgB;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAGD,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;CACF;AAnED,8CAmEC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { RDAPResponse } from '../../shared/types/responses';
|
|
2
|
+
export interface QueryContext {
|
|
3
|
+
queryType: 'domain' | 'ip' | 'asn';
|
|
4
|
+
query: string;
|
|
5
|
+
normalized: string;
|
|
6
|
+
startTime: number;
|
|
7
|
+
cached?: boolean;
|
|
8
|
+
serverUrl?: string;
|
|
9
|
+
attempt?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface QueryResultContext extends QueryContext {
|
|
12
|
+
duration: number;
|
|
13
|
+
result?: RDAPResponse;
|
|
14
|
+
error?: Error;
|
|
15
|
+
fromCache: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface HookFn<T = void> {
|
|
18
|
+
(context: T): Promise<void> | void;
|
|
19
|
+
}
|
|
20
|
+
export interface MiddlewareOptions {
|
|
21
|
+
beforeQuery?: HookFn<QueryContext>;
|
|
22
|
+
afterQuery?: HookFn<QueryResultContext>;
|
|
23
|
+
onError?: HookFn<QueryResultContext>;
|
|
24
|
+
onCacheHit?: HookFn<QueryContext>;
|
|
25
|
+
onCacheMiss?: HookFn<QueryContext>;
|
|
26
|
+
onRetry?: HookFn<QueryContext & {
|
|
27
|
+
attempt: number;
|
|
28
|
+
delay: number;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export declare class MiddlewareManager {
|
|
32
|
+
private hooks;
|
|
33
|
+
constructor(hooks?: MiddlewareOptions);
|
|
34
|
+
private safeRun;
|
|
35
|
+
runBeforeQuery(ctx: QueryContext): Promise<void>;
|
|
36
|
+
runAfterQuery(ctx: QueryResultContext): Promise<void>;
|
|
37
|
+
runOnError(ctx: QueryResultContext): Promise<void>;
|
|
38
|
+
runOnCacheHit(ctx: QueryContext): Promise<void>;
|
|
39
|
+
runOnCacheMiss(ctx: QueryContext): Promise<void>;
|
|
40
|
+
runOnRetry(ctx: QueryContext & {
|
|
41
|
+
attempt: number;
|
|
42
|
+
delay: number;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
use(hooks: Partial<MiddlewareOptions>): void;
|
|
45
|
+
clear(): void;
|
|
46
|
+
getRegisteredHooks(): string[];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=MiddlewareHooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewareHooks.d.ts","sourceRoot":"","sources":["../../../src/application/hooks/MiddlewareHooks.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAKjE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,IAAI;IAC9B,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpC;AAKD,MAAM,WAAW,iBAAiB;IAEhC,WAAW,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAEnC,UAAU,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAExC,OAAO,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAErC,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAElC,WAAW,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAEnC,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,CAAC,EAAE,iBAAiB;YAMvB,OAAO;IAcf,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,UAAU,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,UAAU,CACd,GAAG,EAAE,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC,IAAI,CAAC;IAUhB,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAK5C,KAAK,IAAI,IAAI;IAKb,kBAAkB,IAAI,MAAM,EAAE;CAK/B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiddlewareManager = void 0;
|
|
4
|
+
class MiddlewareManager {
|
|
5
|
+
constructor(hooks) {
|
|
6
|
+
this.hooks = hooks ?? {};
|
|
7
|
+
}
|
|
8
|
+
async safeRun(fn, ctx) {
|
|
9
|
+
if (!fn)
|
|
10
|
+
return;
|
|
11
|
+
try {
|
|
12
|
+
await fn(ctx);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async runBeforeQuery(ctx) {
|
|
18
|
+
await this.safeRun(this.hooks.beforeQuery, ctx);
|
|
19
|
+
}
|
|
20
|
+
async runAfterQuery(ctx) {
|
|
21
|
+
await this.safeRun(this.hooks.afterQuery, ctx);
|
|
22
|
+
}
|
|
23
|
+
async runOnError(ctx) {
|
|
24
|
+
await this.safeRun(this.hooks.onError, ctx);
|
|
25
|
+
}
|
|
26
|
+
async runOnCacheHit(ctx) {
|
|
27
|
+
await this.safeRun(this.hooks.onCacheHit, ctx);
|
|
28
|
+
}
|
|
29
|
+
async runOnCacheMiss(ctx) {
|
|
30
|
+
await this.safeRun(this.hooks.onCacheMiss, ctx);
|
|
31
|
+
}
|
|
32
|
+
async runOnRetry(ctx) {
|
|
33
|
+
await this.safeRun(this.hooks.onRetry, ctx);
|
|
34
|
+
}
|
|
35
|
+
use(hooks) {
|
|
36
|
+
this.hooks = { ...this.hooks, ...hooks };
|
|
37
|
+
}
|
|
38
|
+
clear() {
|
|
39
|
+
this.hooks = {};
|
|
40
|
+
}
|
|
41
|
+
getRegisteredHooks() {
|
|
42
|
+
return Object.keys(this.hooks).filter((k) => this.hooks[k] !== undefined);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.MiddlewareManager = MiddlewareManager;
|
|
46
|
+
//# sourceMappingURL=MiddlewareHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewareHooks.js","sourceRoot":"","sources":["../../../src/application/hooks/MiddlewareHooks.ts"],"names":[],"mappings":";;;AA2DA,MAAa,iBAAiB;IAG5B,YAAY,KAAyB;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;IAC3B,CAAC;IAIO,KAAK,CAAC,OAAO,CACnB,EAAyB,EACzB,GAAM;QAEN,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAID,KAAK,CAAC,cAAc,CAAC,GAAiB;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAuB;QACzC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAuB;QACtC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAiB;QACnC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAiB;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAsD;QAEtD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAQD,GAAG,CAAC,KAAiC;QACnC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;IAC3C,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAGD,kBAAkB;QAChB,OAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoC,CAAC,MAAM,CACvE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CACnC,CAAC;IACJ,CAAC;CACF;AAtED,8CAsEC"}
|
|
@@ -5,6 +5,8 @@ import type { PIIRedactor } from '../../infrastructure/security';
|
|
|
5
5
|
import type { MetricsCollector } from '../../infrastructure/monitoring/MetricsCollector';
|
|
6
6
|
import type { Logger } from '../../infrastructure/logging/Logger';
|
|
7
7
|
import type { DomainResponse, IPResponse, ASNResponse } from '../../shared/types';
|
|
8
|
+
import type { MiddlewareManager } from '../hooks/MiddlewareHooks';
|
|
9
|
+
import type { QueryDeduplicator } from '../deduplication/QueryDeduplicator';
|
|
8
10
|
export interface QueryOrchestratorConfig {
|
|
9
11
|
cache: CacheManager;
|
|
10
12
|
bootstrap: BootstrapDiscovery;
|
|
@@ -16,6 +18,15 @@ export interface QueryOrchestratorConfig {
|
|
|
16
18
|
rateLimiter?: RateLimiter;
|
|
17
19
|
metricsCollector?: MetricsCollector;
|
|
18
20
|
logger?: Logger;
|
|
21
|
+
middleware?: MiddlewareManager;
|
|
22
|
+
deduplicator?: QueryDeduplicator;
|
|
23
|
+
debugEnabled: boolean;
|
|
24
|
+
debugLogger?: {
|
|
25
|
+
debug: (message: string, metadata?: Record<string, unknown>) => void;
|
|
26
|
+
info: (message: string, metadata?: Record<string, unknown>) => void;
|
|
27
|
+
warn: (message: string, metadata?: Record<string, unknown>) => void;
|
|
28
|
+
error: (message: string, metadata?: Record<string, unknown>) => void;
|
|
29
|
+
};
|
|
19
30
|
}
|
|
20
31
|
export declare class QueryOrchestrator {
|
|
21
32
|
private readonly config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/application/services/QueryOrchestrator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/application/services/QueryOrchestrator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAK5E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IAEpB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QACrE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QACpE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QACpE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KACtE,CAAC;CACH;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,MAAM,EAAE,uBAAuB;IAOrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkMpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqMxC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA+L3D"}
|