@daniel.stefan/metalink 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -0
- package/package.json +96 -0
- package/packages/cli/dist/bin/cli.d.ts +3 -0
- package/packages/cli/dist/bin/cli.d.ts.map +1 -0
- package/packages/cli/dist/bin/cli.js +4 -0
- package/packages/cli/dist/bin/cli.js.map +1 -0
- package/packages/cli/dist/commands/config/init.d.ts +9 -0
- package/packages/cli/dist/commands/config/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/init.js +38 -0
- package/packages/cli/dist/commands/config/init.js.map +1 -0
- package/packages/cli/dist/commands/config/validate.d.ts +9 -0
- package/packages/cli/dist/commands/config/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/validate.js +34 -0
- package/packages/cli/dist/commands/config/validate.js.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts +15 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.js +184 -0
- package/packages/cli/dist/commands/daemon/restart.js.map +1 -0
- package/packages/cli/dist/commands/daemon/start.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/start.js +85 -0
- package/packages/cli/dist/commands/daemon/start.js.map +1 -0
- package/packages/cli/dist/commands/daemon/status.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/status.js +69 -0
- package/packages/cli/dist/commands/daemon/status.js.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts +8 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.js +77 -0
- package/packages/cli/dist/commands/daemon/stop.js.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts +10 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.js +58 -0
- package/packages/cli/dist/commands/import/mcpm.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.js +52 -0
- package/packages/cli/dist/commands/safety/add-risky.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.js +52 -0
- package/packages/cli/dist/commands/safety/add-safe.js.map +1 -0
- package/packages/cli/dist/commands/safety/check.d.ts +9 -0
- package/packages/cli/dist/commands/safety/check.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/check.js +36 -0
- package/packages/cli/dist/commands/safety/check.js.map +1 -0
- package/packages/cli/dist/commands/safety/export.d.ts +10 -0
- package/packages/cli/dist/commands/safety/export.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/export.js +48 -0
- package/packages/cli/dist/commands/safety/export.js.map +1 -0
- package/packages/cli/dist/commands/safety/import.d.ts +12 -0
- package/packages/cli/dist/commands/safety/import.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/import.js +78 -0
- package/packages/cli/dist/commands/safety/import.js.map +1 -0
- package/packages/cli/dist/commands/safety/index.d.ts +8 -0
- package/packages/cli/dist/commands/safety/index.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/index.js +46 -0
- package/packages/cli/dist/commands/safety/index.js.map +1 -0
- package/packages/cli/dist/commands/safety/list.d.ts +6 -0
- package/packages/cli/dist/commands/safety/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/list.js +77 -0
- package/packages/cli/dist/commands/safety/list.js.map +1 -0
- package/packages/cli/dist/commands/safety/remove.d.ts +9 -0
- package/packages/cli/dist/commands/safety/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/remove.js +46 -0
- package/packages/cli/dist/commands/safety/remove.js.map +1 -0
- package/packages/cli/dist/commands/safety/reset.d.ts +9 -0
- package/packages/cli/dist/commands/safety/reset.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/reset.js +46 -0
- package/packages/cli/dist/commands/safety/reset.js.map +1 -0
- package/packages/cli/dist/commands/safety/validate.d.ts +9 -0
- package/packages/cli/dist/commands/safety/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/validate.js +51 -0
- package/packages/cli/dist/commands/safety/validate.js.map +1 -0
- package/packages/cli/dist/commands/secret/get.d.ts +9 -0
- package/packages/cli/dist/commands/secret/get.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/get.js +26 -0
- package/packages/cli/dist/commands/secret/get.js.map +1 -0
- package/packages/cli/dist/commands/secret/set.d.ts +10 -0
- package/packages/cli/dist/commands/secret/set.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/set.js +22 -0
- package/packages/cli/dist/commands/secret/set.js.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts +2 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +234 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js.map +1 -0
- package/packages/cli/dist/commands/server/add.d.ts +14 -0
- package/packages/cli/dist/commands/server/add.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/add.js +86 -0
- package/packages/cli/dist/commands/server/add.js.map +1 -0
- package/packages/cli/dist/commands/server/available.d.ts +10 -0
- package/packages/cli/dist/commands/server/available.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/available.js +62 -0
- package/packages/cli/dist/commands/server/available.js.map +1 -0
- package/packages/cli/dist/commands/server/debug.d.ts +18 -0
- package/packages/cli/dist/commands/server/debug.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/debug.js +165 -0
- package/packages/cli/dist/commands/server/debug.js.map +1 -0
- package/packages/cli/dist/commands/server/info.d.ts +13 -0
- package/packages/cli/dist/commands/server/info.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/info.js +62 -0
- package/packages/cli/dist/commands/server/info.js.map +1 -0
- package/packages/cli/dist/commands/server/list.d.ts +10 -0
- package/packages/cli/dist/commands/server/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/list.js +105 -0
- package/packages/cli/dist/commands/server/list.js.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts +13 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.js +46 -0
- package/packages/cli/dist/commands/server/refresh-tools.js.map +1 -0
- package/packages/cli/dist/commands/server/remove.d.ts +12 -0
- package/packages/cli/dist/commands/server/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/remove.js +39 -0
- package/packages/cli/dist/commands/server/remove.js.map +1 -0
- package/packages/cli/dist/commands/server/restart.d.ts +9 -0
- package/packages/cli/dist/commands/server/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/restart.js +30 -0
- package/packages/cli/dist/commands/server/restart.js.map +1 -0
- package/packages/cli/dist/commands/server/start.d.ts +9 -0
- package/packages/cli/dist/commands/server/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/start.js +37 -0
- package/packages/cli/dist/commands/server/start.js.map +1 -0
- package/packages/cli/dist/commands/server/status.d.ts +9 -0
- package/packages/cli/dist/commands/server/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/status.js +30 -0
- package/packages/cli/dist/commands/server/status.js.map +1 -0
- package/packages/cli/dist/commands/server/stop.d.ts +9 -0
- package/packages/cli/dist/commands/server/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/stop.js +31 -0
- package/packages/cli/dist/commands/server/stop.js.map +1 -0
- package/packages/cli/dist/commands/server/validate.d.ts +15 -0
- package/packages/cli/dist/commands/server/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/validate.js +87 -0
- package/packages/cli/dist/commands/server/validate.js.map +1 -0
- package/packages/cli/dist/commands/stdio.d.ts +36 -0
- package/packages/cli/dist/commands/stdio.d.ts.map +1 -0
- package/packages/cli/dist/commands/stdio.js +85 -0
- package/packages/cli/dist/commands/stdio.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js +98 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute.js +55 -0
- package/packages/cli/dist/commands/tool/execute.js.map +1 -0
- package/packages/cli/dist/commands/tool/list.d.ts +13 -0
- package/packages/cli/dist/commands/tool/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/list.js +91 -0
- package/packages/cli/dist/commands/tool/list.js.map +1 -0
- package/packages/cli/dist/commands/tool/search.d.ts +12 -0
- package/packages/cli/dist/commands/tool/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/search.js +87 -0
- package/packages/cli/dist/commands/tool/search.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +9 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts +18 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.js +69 -0
- package/packages/cli/dist/utils/daemon-checker.js.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts +7 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.js +13 -0
- package/packages/cli/dist/utils/daemon-endpoint.js.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts +43 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.js +141 -0
- package/packages/cli/dist/utils/get-configured-port.js.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts +48 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.js +181 -0
- package/packages/cli/dist/utils/stdio-bridge.js.map +1 -0
- package/packages/cli/package.json +48 -0
- package/packages/core/dist/config/defaults.d.ts +36 -0
- package/packages/core/dist/config/defaults.d.ts.map +1 -0
- package/packages/core/dist/config/defaults.js +324 -0
- package/packages/core/dist/config/defaults.js.map +1 -0
- package/packages/core/dist/config/index.d.ts +9 -0
- package/packages/core/dist/config/index.d.ts.map +1 -0
- package/packages/core/dist/config/index.js +14 -0
- package/packages/core/dist/config/index.js.map +1 -0
- package/packages/core/dist/config/loader.d.ts +269 -0
- package/packages/core/dist/config/loader.d.ts.map +1 -0
- package/packages/core/dist/config/loader.js +777 -0
- package/packages/core/dist/config/loader.js.map +1 -0
- package/packages/core/dist/config/registry.d.ts +212 -0
- package/packages/core/dist/config/registry.d.ts.map +1 -0
- package/packages/core/dist/config/registry.js +754 -0
- package/packages/core/dist/config/registry.js.map +1 -0
- package/packages/core/dist/config/schema.d.ts +4352 -0
- package/packages/core/dist/config/schema.d.ts.map +1 -0
- package/packages/core/dist/config/schema.js +267 -0
- package/packages/core/dist/config/schema.js.map +1 -0
- package/packages/core/dist/daemon.d.ts +7 -0
- package/packages/core/dist/daemon.d.ts.map +1 -0
- package/packages/core/dist/daemon.js +116 -0
- package/packages/core/dist/daemon.js.map +1 -0
- package/packages/core/dist/http-client-retry.d.ts +67 -0
- package/packages/core/dist/http-client-retry.d.ts.map +1 -0
- package/packages/core/dist/http-client-retry.js +133 -0
- package/packages/core/dist/http-client-retry.js.map +1 -0
- package/packages/core/dist/http-client-updated.d.ts +147 -0
- package/packages/core/dist/http-client-updated.d.ts.map +1 -0
- package/packages/core/dist/http-client-updated.js +452 -0
- package/packages/core/dist/http-client-updated.js.map +1 -0
- package/packages/core/dist/http-client.d.ts +207 -0
- package/packages/core/dist/http-client.d.ts.map +1 -0
- package/packages/core/dist/http-client.js +704 -0
- package/packages/core/dist/http-client.js.map +1 -0
- package/packages/core/dist/index.d.ts +13 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +23 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/logging/index.d.ts +46 -0
- package/packages/core/dist/logging/index.d.ts.map +1 -0
- package/packages/core/dist/logging/index.js +74 -0
- package/packages/core/dist/logging/index.js.map +1 -0
- package/packages/core/dist/metrics/index.d.ts +339 -0
- package/packages/core/dist/metrics/index.d.ts.map +1 -0
- package/packages/core/dist/metrics/index.js +792 -0
- package/packages/core/dist/metrics/index.js.map +1 -0
- package/packages/core/dist/plugins/index.d.ts +49 -0
- package/packages/core/dist/plugins/index.d.ts.map +1 -0
- package/packages/core/dist/plugins/index.js +82 -0
- package/packages/core/dist/plugins/index.js.map +1 -0
- package/packages/core/dist/secrets/index.d.ts +6 -0
- package/packages/core/dist/secrets/index.d.ts.map +1 -0
- package/packages/core/dist/secrets/index.js +5 -0
- package/packages/core/dist/secrets/index.js.map +1 -0
- package/packages/core/dist/secrets/keyring.d.ts +54 -0
- package/packages/core/dist/secrets/keyring.d.ts.map +1 -0
- package/packages/core/dist/secrets/keyring.js +141 -0
- package/packages/core/dist/secrets/keyring.js.map +1 -0
- package/packages/core/dist/server/batch-executor.d.ts +83 -0
- package/packages/core/dist/server/batch-executor.d.ts.map +1 -0
- package/packages/core/dist/server/batch-executor.js +291 -0
- package/packages/core/dist/server/batch-executor.js.map +1 -0
- package/packages/core/dist/server/circuit-breaker.d.ts +215 -0
- package/packages/core/dist/server/circuit-breaker.d.ts.map +1 -0
- package/packages/core/dist/server/circuit-breaker.js +330 -0
- package/packages/core/dist/server/circuit-breaker.js.map +1 -0
- package/packages/core/dist/server/client-detection.d.ts +40 -0
- package/packages/core/dist/server/client-detection.d.ts.map +1 -0
- package/packages/core/dist/server/client-detection.js +242 -0
- package/packages/core/dist/server/client-detection.js.map +1 -0
- package/packages/core/dist/server/client-profiles.d.ts +102 -0
- package/packages/core/dist/server/client-profiles.d.ts.map +1 -0
- package/packages/core/dist/server/client-profiles.js +254 -0
- package/packages/core/dist/server/client-profiles.js.map +1 -0
- package/packages/core/dist/server/http.d.ts +386 -0
- package/packages/core/dist/server/http.d.ts.map +1 -0
- package/packages/core/dist/server/http.js +4253 -0
- package/packages/core/dist/server/http.js.map +1 -0
- package/packages/core/dist/server/index.d.ts +7 -0
- package/packages/core/dist/server/index.d.ts.map +1 -0
- package/packages/core/dist/server/index.js +6 -0
- package/packages/core/dist/server/index.js.map +1 -0
- package/packages/core/dist/server/manager.d.ts +458 -0
- package/packages/core/dist/server/manager.d.ts.map +1 -0
- package/packages/core/dist/server/manager.js +3255 -0
- package/packages/core/dist/server/manager.js.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts +69 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js +214 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts +128 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.js +443 -0
- package/packages/core/dist/server/managers/ProcessManager.js.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts +152 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js +426 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js.map +1 -0
- package/packages/core/dist/server/managers/index.d.ts +9 -0
- package/packages/core/dist/server/managers/index.d.ts.map +1 -0
- package/packages/core/dist/server/managers/index.js +9 -0
- package/packages/core/dist/server/managers/index.js.map +1 -0
- package/packages/core/dist/server/metrics.d.ts +134 -0
- package/packages/core/dist/server/metrics.d.ts.map +1 -0
- package/packages/core/dist/server/metrics.js +273 -0
- package/packages/core/dist/server/metrics.js.map +1 -0
- package/packages/core/dist/server/prompts.d.ts +58 -0
- package/packages/core/dist/server/prompts.d.ts.map +1 -0
- package/packages/core/dist/server/prompts.js +405 -0
- package/packages/core/dist/server/prompts.js.map +1 -0
- package/packages/core/dist/server/protocol-versions.d.ts +49 -0
- package/packages/core/dist/server/protocol-versions.d.ts.map +1 -0
- package/packages/core/dist/server/protocol-versions.js +173 -0
- package/packages/core/dist/server/protocol-versions.js.map +1 -0
- package/packages/core/dist/server/resources.d.ts +64 -0
- package/packages/core/dist/server/resources.d.ts.map +1 -0
- package/packages/core/dist/server/resources.js +243 -0
- package/packages/core/dist/server/resources.js.map +1 -0
- package/packages/core/dist/server/schema-store.d.ts +84 -0
- package/packages/core/dist/server/schema-store.d.ts.map +1 -0
- package/packages/core/dist/server/schema-store.js +234 -0
- package/packages/core/dist/server/schema-store.js.map +1 -0
- package/packages/core/dist/server/schema-validator.d.ts +51 -0
- package/packages/core/dist/server/schema-validator.d.ts.map +1 -0
- package/packages/core/dist/server/schema-validator.js +208 -0
- package/packages/core/dist/server/schema-validator.js.map +1 -0
- package/packages/core/dist/server/token-calculator.d.ts +44 -0
- package/packages/core/dist/server/token-calculator.d.ts.map +1 -0
- package/packages/core/dist/server/token-calculator.js +53 -0
- package/packages/core/dist/server/token-calculator.js.map +1 -0
- package/packages/core/dist/server/types.d.ts +45 -0
- package/packages/core/dist/server/types.d.ts.map +1 -0
- package/packages/core/dist/server/types.js +5 -0
- package/packages/core/dist/server/types.js.map +1 -0
- package/packages/core/dist/utils/file-lock.d.ts +73 -0
- package/packages/core/dist/utils/file-lock.d.ts.map +1 -0
- package/packages/core/dist/utils/file-lock.js +235 -0
- package/packages/core/dist/utils/file-lock.js.map +1 -0
- package/packages/core/package.json +36 -0
- package/packages/dashboard/dist/assets/index-B7hvkCMu.css +1 -0
- package/packages/dashboard/dist/assets/index-yZhLPpzr.js +1 -0
- package/packages/dashboard/dist/index.html +14 -0
- package/packages/dashboard/package.json +24 -0
- package/packages/shared/dist/version.d.ts +2 -0
- package/packages/shared/dist/version.d.ts.map +1 -0
- package/packages/shared/dist/version.js +2 -0
- package/packages/shared/dist/version.js.map +1 -0
- package/packages/shared/package.json +18 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Server - Express-based API for MetaLink
|
|
3
|
+
*/
|
|
4
|
+
import { ConfigLoader } from '../config/index.js';
|
|
5
|
+
import { ServerManager } from './manager.js';
|
|
6
|
+
export declare class HttpServer {
|
|
7
|
+
private app;
|
|
8
|
+
private server;
|
|
9
|
+
private serverManager;
|
|
10
|
+
private configLoader;
|
|
11
|
+
private config;
|
|
12
|
+
private eventClients;
|
|
13
|
+
private metricsPersistence;
|
|
14
|
+
private metricsAggregator;
|
|
15
|
+
private sessions;
|
|
16
|
+
private readonly SESSION_TIMEOUT;
|
|
17
|
+
private sessionCleanupInterval;
|
|
18
|
+
private readonly sessionPersistPath;
|
|
19
|
+
private sseConnections;
|
|
20
|
+
private sseEventBuffer;
|
|
21
|
+
private sseEventCounter;
|
|
22
|
+
private readonly MAX_EVENTS_PER_SESSION;
|
|
23
|
+
private toolExecutionRateLimiter;
|
|
24
|
+
private readonly TOOL_RATE_LIMIT_WINDOW_MS;
|
|
25
|
+
private readonly TOOL_RATE_LIMIT_MAX_CALLS;
|
|
26
|
+
private discoveryRateLimiter;
|
|
27
|
+
private readonly DISCOVERY_RATE_LIMIT_WINDOW_MS;
|
|
28
|
+
private readonly DISCOVERY_RATE_LIMIT_MAX_CALLS;
|
|
29
|
+
private readonly startTime;
|
|
30
|
+
constructor(configLoader: ConfigLoader);
|
|
31
|
+
/**
|
|
32
|
+
* Get server manager instance
|
|
33
|
+
*/
|
|
34
|
+
getServerManager(): ServerManager;
|
|
35
|
+
/**
|
|
36
|
+
* Pagination support - Encode cursor data to opaque base64 string
|
|
37
|
+
*/
|
|
38
|
+
private encodeCursor;
|
|
39
|
+
/**
|
|
40
|
+
* Pagination support - Decode cursor from base64 string
|
|
41
|
+
*/
|
|
42
|
+
private decodeCursor;
|
|
43
|
+
/**
|
|
44
|
+
* Pagination support - Truncate string to character limit
|
|
45
|
+
*/
|
|
46
|
+
private truncateToChars;
|
|
47
|
+
/**
|
|
48
|
+
* Pagination support - Apply pagination to tool result
|
|
49
|
+
*
|
|
50
|
+
* @param result - Tool execution result (any type)
|
|
51
|
+
* @param params - Pagination parameters from request
|
|
52
|
+
* @returns Paginated result with metadata
|
|
53
|
+
*/
|
|
54
|
+
private paginateResult;
|
|
55
|
+
/**
|
|
56
|
+
* Setup Express middleware
|
|
57
|
+
*/
|
|
58
|
+
private setupMiddleware;
|
|
59
|
+
/**
|
|
60
|
+
* Authentication middleware
|
|
61
|
+
*/
|
|
62
|
+
private authMiddleware;
|
|
63
|
+
/**
|
|
64
|
+
* Setup API routes
|
|
65
|
+
*/
|
|
66
|
+
private setupRoutes;
|
|
67
|
+
/**
|
|
68
|
+
* SECURITY: Sanitize error messages to prevent credential/path leakage.
|
|
69
|
+
*
|
|
70
|
+
* This function removes or masks sensitive information from error messages
|
|
71
|
+
* before they are sent to clients.
|
|
72
|
+
*
|
|
73
|
+
* OWASP Reference: A3:2017-Sensitive Data Exposure
|
|
74
|
+
*
|
|
75
|
+
* @param message - Original error message
|
|
76
|
+
* @returns Sanitized message safe for client exposure
|
|
77
|
+
*/
|
|
78
|
+
private sanitizeErrorMessage;
|
|
79
|
+
/**
|
|
80
|
+
* Setup Server-Sent Events
|
|
81
|
+
*/
|
|
82
|
+
private setupSSE;
|
|
83
|
+
/**
|
|
84
|
+
* Broadcast event to all SSE clients
|
|
85
|
+
*/
|
|
86
|
+
private broadcastEvent;
|
|
87
|
+
/**
|
|
88
|
+
* List all servers
|
|
89
|
+
*/
|
|
90
|
+
private listServers;
|
|
91
|
+
/**
|
|
92
|
+
* List all available servers (including disabled ones)
|
|
93
|
+
*/
|
|
94
|
+
private listAvailableServers;
|
|
95
|
+
/**
|
|
96
|
+
* Enable a server (add to EXPOSE_SERVERS)
|
|
97
|
+
*/
|
|
98
|
+
private enableServer;
|
|
99
|
+
/**
|
|
100
|
+
* Disable a server (remove from EXPOSE_SERVERS)
|
|
101
|
+
*/
|
|
102
|
+
private disableServer;
|
|
103
|
+
/**
|
|
104
|
+
* Start a server
|
|
105
|
+
*/
|
|
106
|
+
private startServer;
|
|
107
|
+
/**
|
|
108
|
+
* Stop a server
|
|
109
|
+
*/
|
|
110
|
+
private stopServer;
|
|
111
|
+
/**
|
|
112
|
+
* Restart a server
|
|
113
|
+
*/
|
|
114
|
+
private restartServer;
|
|
115
|
+
/**
|
|
116
|
+
* Force refresh tools for a server
|
|
117
|
+
* v1.4.2: Clears cache and re-discovers tools from the MCP server
|
|
118
|
+
*/
|
|
119
|
+
private refreshServerTools;
|
|
120
|
+
/**
|
|
121
|
+
* Get server status
|
|
122
|
+
*/
|
|
123
|
+
private getServerStatus;
|
|
124
|
+
/**
|
|
125
|
+
* Get full server information including configuration and runtime status
|
|
126
|
+
* v1.1.29: Include tools list and support ?forceDiscovery=true to rediscover
|
|
127
|
+
*/
|
|
128
|
+
private getServerInfo;
|
|
129
|
+
/**
|
|
130
|
+
* Get server tools (stub - Phase 2)
|
|
131
|
+
*/
|
|
132
|
+
private getServerTools;
|
|
133
|
+
/**
|
|
134
|
+
* Execute tool (stub - Phase 2)
|
|
135
|
+
*/
|
|
136
|
+
private executeTool;
|
|
137
|
+
/**
|
|
138
|
+
* Get configuration
|
|
139
|
+
*/
|
|
140
|
+
private getConfig;
|
|
141
|
+
/**
|
|
142
|
+
* Update configuration (stub - Phase 2)
|
|
143
|
+
*/
|
|
144
|
+
private updateConfig;
|
|
145
|
+
/**
|
|
146
|
+
* Health check endpoint
|
|
147
|
+
*/
|
|
148
|
+
private healthCheck;
|
|
149
|
+
/**
|
|
150
|
+
* Get MetaLink version
|
|
151
|
+
*/
|
|
152
|
+
private getVersion;
|
|
153
|
+
/**
|
|
154
|
+
* GET /api/v1/metrics - JSON metrics endpoint
|
|
155
|
+
*/
|
|
156
|
+
private getMetrics;
|
|
157
|
+
/**
|
|
158
|
+
* GET /api/v1/metrics/prometheus - Prometheus export endpoint
|
|
159
|
+
*/
|
|
160
|
+
private getPrometheusMetrics;
|
|
161
|
+
/**
|
|
162
|
+
* GET /api/v1/metrics/api - API-level metrics
|
|
163
|
+
*/
|
|
164
|
+
private getApiMetrics;
|
|
165
|
+
/**
|
|
166
|
+
* GET /api/v1/metrics/servers/:name - Server-specific metrics
|
|
167
|
+
*/
|
|
168
|
+
private getServerMetrics;
|
|
169
|
+
/**
|
|
170
|
+
* GET /api/v1/metrics/hourly - Hourly aggregation
|
|
171
|
+
*/
|
|
172
|
+
private getHourlyMetrics;
|
|
173
|
+
/**
|
|
174
|
+
* GET /api/v1/metrics/daily - Daily aggregation
|
|
175
|
+
*/
|
|
176
|
+
private getDailyMetrics;
|
|
177
|
+
/**
|
|
178
|
+
* GET /api/v1/metrics/weekly - Weekly aggregation
|
|
179
|
+
*/
|
|
180
|
+
private getWeeklyMetrics;
|
|
181
|
+
/**
|
|
182
|
+
* GET /api/v1/metrics/errors - Error analytics across all tools
|
|
183
|
+
*/
|
|
184
|
+
private getErrorAnalytics;
|
|
185
|
+
/**
|
|
186
|
+
* GET /api/v1/metrics/errors/:toolName - Per-tool error analytics
|
|
187
|
+
* Query params: ?serverName=<name> (optional)
|
|
188
|
+
*/
|
|
189
|
+
private getToolErrorMetrics;
|
|
190
|
+
/**
|
|
191
|
+
* GET /api/v1/metrics/tools - Granular tool-specific metrics (Test 187)
|
|
192
|
+
* Query params:
|
|
193
|
+
* ?serverName=<name> - Filter by server
|
|
194
|
+
* ?slow=<limit> - Get slowest tools (by p95 latency)
|
|
195
|
+
* ?errors=<threshold> - Get tools with high error rates (default: 5%)
|
|
196
|
+
*/
|
|
197
|
+
private getToolMetrics;
|
|
198
|
+
/**
|
|
199
|
+
* Load persisted metrics on startup (Phase 4 - v1.4.0)
|
|
200
|
+
*/
|
|
201
|
+
private loadPersistedMetrics;
|
|
202
|
+
/**
|
|
203
|
+
* Start periodic metrics persistence (Phase 4 - v1.4.0)
|
|
204
|
+
*/
|
|
205
|
+
private startMetricsPersistence;
|
|
206
|
+
/**
|
|
207
|
+
* Track SSE event for Last-Event-ID resumption
|
|
208
|
+
*/
|
|
209
|
+
private trackSseEvent;
|
|
210
|
+
/**
|
|
211
|
+
* Get events for resumption after Last-Event-ID
|
|
212
|
+
*/
|
|
213
|
+
private getEventsForResumption;
|
|
214
|
+
private createSession;
|
|
215
|
+
/**
|
|
216
|
+
* Get and update session activity with validation logging
|
|
217
|
+
*/
|
|
218
|
+
private getSession;
|
|
219
|
+
/**
|
|
220
|
+
* Clean up expired sessions
|
|
221
|
+
*/
|
|
222
|
+
private cleanupSessions;
|
|
223
|
+
/**
|
|
224
|
+
* Start session cleanup timer
|
|
225
|
+
*/
|
|
226
|
+
private startSessionCleanup;
|
|
227
|
+
/**
|
|
228
|
+
* Stop session cleanup timer
|
|
229
|
+
*/
|
|
230
|
+
private stopSessionCleanup;
|
|
231
|
+
/**
|
|
232
|
+
* Session persistence file format
|
|
233
|
+
*/
|
|
234
|
+
private readonly SESSION_PERSIST_VERSION;
|
|
235
|
+
/**
|
|
236
|
+
* Persist sessions to disk with atomic write (temp file + rename)
|
|
237
|
+
* Called after session creation and cleanup
|
|
238
|
+
*/
|
|
239
|
+
private persistSessions;
|
|
240
|
+
/**
|
|
241
|
+
* Load sessions from disk on startup
|
|
242
|
+
* Filters out expired sessions during load
|
|
243
|
+
*/
|
|
244
|
+
private loadSessions;
|
|
245
|
+
/**
|
|
246
|
+
* Handle Streamable HTTP request (MCP 2025-03-26)
|
|
247
|
+
* Returns tuple of [response, sessionId] for session tracking
|
|
248
|
+
*/
|
|
249
|
+
private handleStreamableRequest;
|
|
250
|
+
/**
|
|
251
|
+
* Handle MCP JSON-RPC requests over HTTP
|
|
252
|
+
*/
|
|
253
|
+
private handleMcpRequest;
|
|
254
|
+
/**
|
|
255
|
+
* Handle JSON-RPC method routing
|
|
256
|
+
*/
|
|
257
|
+
private handleJsonRpcRequest;
|
|
258
|
+
/**
|
|
259
|
+
* Generate execute_tool description
|
|
260
|
+
* v1.3.x: Simplified - removed "Safe by default" list that caused confusion.
|
|
261
|
+
* Now relies solely on annotations.safety from search_tools results.
|
|
262
|
+
*/
|
|
263
|
+
private getExecuteToolDescription;
|
|
264
|
+
/**
|
|
265
|
+
* MCP: tools/list - return available tools
|
|
266
|
+
*
|
|
267
|
+
* SPEAKEASY-INSPIRED 4-TOOL APPROACH (v1.3.52):
|
|
268
|
+
* 1. search_tools - Fuzzy search across all servers
|
|
269
|
+
* 2. describe_tool - Get full schema for specific tool
|
|
270
|
+
* 3. execute_tool - Execute safe/read-only tools (BLOCKS risky tools)
|
|
271
|
+
* 4. execute_tool_confirm - Execute risky/write tools (user confirmed)
|
|
272
|
+
*
|
|
273
|
+
* Optional: Base server tools (if dynamicToolExposure=true in config)
|
|
274
|
+
*/
|
|
275
|
+
private mcpListTools;
|
|
276
|
+
/**
|
|
277
|
+
* MCP: tools/call - route tool calls
|
|
278
|
+
*
|
|
279
|
+
* SECURITY: Includes per-server rate limiting to prevent DOS attacks.
|
|
280
|
+
* Rate limit: 100 calls per server per minute (configurable).
|
|
281
|
+
* Discovery endpoints (search_tools, describe_tool) have separate rate limiting.
|
|
282
|
+
*/
|
|
283
|
+
private mcpCallTool;
|
|
284
|
+
/**
|
|
285
|
+
* SECURITY: Extract server name from tool call for rate limiting.
|
|
286
|
+
*
|
|
287
|
+
* @param name - Tool name (e.g., "execute_tool", "memory-search_nodes")
|
|
288
|
+
* @param args - Tool arguments
|
|
289
|
+
* @returns Server name or null for meta-tools without server context
|
|
290
|
+
*/
|
|
291
|
+
private extractServerNameForRateLimit;
|
|
292
|
+
/**
|
|
293
|
+
* SECURITY: Check and enforce per-server rate limiting.
|
|
294
|
+
*
|
|
295
|
+
* OWASP Reference: A6:2017-Security Misconfiguration - DOS Prevention
|
|
296
|
+
*
|
|
297
|
+
* @param serverName - Name of the server to check rate limit for
|
|
298
|
+
* @throws Error if rate limit exceeded
|
|
299
|
+
*/
|
|
300
|
+
private checkToolRateLimit;
|
|
301
|
+
/**
|
|
302
|
+
* SECURITY: Check discovery endpoint rate limit (P1 - OWASP DOS Prevention)
|
|
303
|
+
* Prevents abuse of search_tools and describe_tool endpoints
|
|
304
|
+
*
|
|
305
|
+
* @param sessionId - Session ID to track rate limit for
|
|
306
|
+
* @throws Error if rate limit exceeded
|
|
307
|
+
*/
|
|
308
|
+
private checkDiscoveryRateLimit;
|
|
309
|
+
/**
|
|
310
|
+
* Execute tool call logic (extracted for metrics tracking)
|
|
311
|
+
*/
|
|
312
|
+
private executeToolCall;
|
|
313
|
+
/**
|
|
314
|
+
* Add a new server to the registry
|
|
315
|
+
*/
|
|
316
|
+
private addServer;
|
|
317
|
+
/**
|
|
318
|
+
* Remove a server from the registry
|
|
319
|
+
*/
|
|
320
|
+
private removeServer;
|
|
321
|
+
/**
|
|
322
|
+
* Validate a server configuration without saving
|
|
323
|
+
*/
|
|
324
|
+
private validateServer;
|
|
325
|
+
/**
|
|
326
|
+
* Start the HTTP server
|
|
327
|
+
* NOTE: This Promise never resolves - it keeps the event loop alive for background mode
|
|
328
|
+
*/
|
|
329
|
+
listen(port: number, host: string): Promise<void>;
|
|
330
|
+
/**
|
|
331
|
+
* Send message via SSE to connected client
|
|
332
|
+
*/
|
|
333
|
+
private sendSSEMessage;
|
|
334
|
+
/**
|
|
335
|
+
* Send notifications/tools/list_changed to all connected SSE clients
|
|
336
|
+
* Throttled to max 1 notification per second
|
|
337
|
+
*/
|
|
338
|
+
private lastToolsListNotification;
|
|
339
|
+
private readonly TOOLS_LIST_NOTIFICATION_THROTTLE_MS;
|
|
340
|
+
private notifyToolsListChanged;
|
|
341
|
+
/**
|
|
342
|
+
* Send response via callback URL (MCP callback protocol for bidirectional communication)
|
|
343
|
+
*/
|
|
344
|
+
private sendViaCallback;
|
|
345
|
+
/**
|
|
346
|
+
* Cleanup
|
|
347
|
+
*/
|
|
348
|
+
/**
|
|
349
|
+
* Get all safety rules
|
|
350
|
+
*/
|
|
351
|
+
private getSafetyRules;
|
|
352
|
+
/**
|
|
353
|
+
* Check if a specific tool is safe or risky
|
|
354
|
+
*/
|
|
355
|
+
private checkToolSafety;
|
|
356
|
+
/**
|
|
357
|
+
* Add a safe tool override
|
|
358
|
+
*/
|
|
359
|
+
private addSafeToolOverride;
|
|
360
|
+
/**
|
|
361
|
+
* Add a risky tool override
|
|
362
|
+
*/
|
|
363
|
+
private addRiskyToolOverride;
|
|
364
|
+
/**
|
|
365
|
+
* Add a safe pattern
|
|
366
|
+
*/
|
|
367
|
+
private addSafePattern;
|
|
368
|
+
/**
|
|
369
|
+
* Add a risky pattern
|
|
370
|
+
*/
|
|
371
|
+
private addRiskyPattern;
|
|
372
|
+
/**
|
|
373
|
+
* Remove a rule (tool override or pattern)
|
|
374
|
+
*/
|
|
375
|
+
private removeRule;
|
|
376
|
+
/**
|
|
377
|
+
* Reset safety rules to defaults
|
|
378
|
+
*/
|
|
379
|
+
private resetSafetyRules;
|
|
380
|
+
/**
|
|
381
|
+
* Import safety rules from JSON
|
|
382
|
+
*/
|
|
383
|
+
private importSafetyRules;
|
|
384
|
+
cleanup(): Promise<void>;
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|