@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 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAE9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEjD"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Health check configuration schema - common to both stdio and HTTP servers
|
|
4
|
+
*/
|
|
5
|
+
export const HealthCheckSchema = z.object({
|
|
6
|
+
enabled: z.boolean().optional().default(true),
|
|
7
|
+
interval: z.number().int().positive().optional().default(30000), // 30 seconds
|
|
8
|
+
timeout: z.number().int().positive().optional().default(5000), // 5 seconds
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Authentication schema for HTTP servers
|
|
12
|
+
*/
|
|
13
|
+
export const HttpAuthSchema = z.object({
|
|
14
|
+
type: z.enum(['bearer', 'oauth2', 'api-key']).optional().default('bearer'),
|
|
15
|
+
token: z.string().optional(), // Can use ${secret:token_name} syntax
|
|
16
|
+
headerName: z.string().optional().default('Authorization'),
|
|
17
|
+
clientId: z.string().optional(), // For OAuth2
|
|
18
|
+
clientSecret: z.string().optional(), // For OAuth2
|
|
19
|
+
}).optional();
|
|
20
|
+
/**
|
|
21
|
+
* Session management schema for HTTP servers
|
|
22
|
+
*/
|
|
23
|
+
export const HttpSessionSchema = z.object({
|
|
24
|
+
enabled: z.boolean().optional().default(true),
|
|
25
|
+
headerName: z.string().optional().default('Mcp-Session-Id'),
|
|
26
|
+
allowClientTermination: z.boolean().optional().default(false),
|
|
27
|
+
}).optional();
|
|
28
|
+
/**
|
|
29
|
+
* CORS schema for HTTP servers
|
|
30
|
+
*/
|
|
31
|
+
export const HttpCorsSchema = z.object({
|
|
32
|
+
enabled: z.boolean().optional().default(false),
|
|
33
|
+
allowOrigin: z.string().optional().default('*'),
|
|
34
|
+
}).optional();
|
|
35
|
+
export const ServerSafetySchema = z.enum(['safe', 'risky', 'default']).optional()
|
|
36
|
+
.describe('Server-level safety: "safe" = all tools safe, "risky" = all tools risky, "default" = use tool-level classification (default)');
|
|
37
|
+
/**
|
|
38
|
+
* Stdio (command-based) server configuration
|
|
39
|
+
*/
|
|
40
|
+
export const StdioServerConfigSchema = z.object({
|
|
41
|
+
name: z.string().min(1, 'Server name is required'),
|
|
42
|
+
transport: z.literal('stdio').optional().default('stdio'),
|
|
43
|
+
command: z.string().min(1, 'Command is required for stdio servers'),
|
|
44
|
+
args: z.array(z.string()).optional().default([]),
|
|
45
|
+
env: z.record(z.string()).optional().default({}),
|
|
46
|
+
cwd: z.string().optional()
|
|
47
|
+
.describe('Working directory for the server process (default: daemon working directory). Use ~ for home directory.'),
|
|
48
|
+
healthCheck: HealthCheckSchema.optional().default({}),
|
|
49
|
+
// v1.3.x: Server-level safety classification (optional, defaults to 'default')
|
|
50
|
+
safety: ServerSafetySchema,
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* HTTP (remote) server configuration
|
|
54
|
+
*/
|
|
55
|
+
export const HttpServerConfigSchema = z.object({
|
|
56
|
+
name: z.string().min(1, 'Server name is required'),
|
|
57
|
+
transport: z.enum(['http', 'sse', 'sse-first', 'http-stream']),
|
|
58
|
+
url: z.string().url('URL must be a valid HTTP(S) endpoint'),
|
|
59
|
+
auth: HttpAuthSchema,
|
|
60
|
+
session: HttpSessionSchema,
|
|
61
|
+
cors: HttpCorsSchema,
|
|
62
|
+
env: z.record(z.string()).optional().default({}), // For additional environment context
|
|
63
|
+
healthCheck: HealthCheckSchema.optional().default({}),
|
|
64
|
+
// v1.3.x: Server-level safety classification
|
|
65
|
+
safety: ServerSafetySchema,
|
|
66
|
+
// P1: Timeout configuration
|
|
67
|
+
requestTimeoutMs: z.number().int().positive().optional()
|
|
68
|
+
.default(30000)
|
|
69
|
+
.describe('Per-request timeout in milliseconds (default 30s)'),
|
|
70
|
+
streamTimeoutMs: z.number().int().positive().optional()
|
|
71
|
+
.default(120000)
|
|
72
|
+
.describe('SSE/HTTP-stream response timeout in milliseconds (default 2min)'),
|
|
73
|
+
connectTimeoutMs: z.number().int().positive().optional()
|
|
74
|
+
.default(10000)
|
|
75
|
+
.describe('Connection initialization timeout in milliseconds (default 10s)'),
|
|
76
|
+
});
|
|
77
|
+
/**
|
|
78
|
+
* Server configuration schema - supports both stdio and HTTP transports
|
|
79
|
+
* Uses discriminated union to enforce correct fields per transport type
|
|
80
|
+
*/
|
|
81
|
+
export const ServerConfigSchema = z.discriminatedUnion('transport', [
|
|
82
|
+
StdioServerConfigSchema,
|
|
83
|
+
HttpServerConfigSchema,
|
|
84
|
+
]);
|
|
85
|
+
/**
|
|
86
|
+
* Daemon configuration schema
|
|
87
|
+
* Defines HTTP server, authentication, rate limiting settings
|
|
88
|
+
*/
|
|
89
|
+
export const DaemonConfigSchema = z.object({
|
|
90
|
+
port: z.number().int().min(1).max(65535).optional().default(3000),
|
|
91
|
+
host: z.string().optional().default('0.0.0.0'),
|
|
92
|
+
logLevel: z.enum(['debug', 'info', 'warn', 'error']).optional().default('info'),
|
|
93
|
+
auth: z.object({
|
|
94
|
+
enabled: z.boolean().optional().default(false),
|
|
95
|
+
type: z.enum(['bearer', 'api-key']).optional().default('bearer'),
|
|
96
|
+
secret: z.string().optional(), // ${secret:auth_secret}
|
|
97
|
+
}).optional().default({}),
|
|
98
|
+
rateLimit: z.object({
|
|
99
|
+
enabled: z.boolean().optional().default(true),
|
|
100
|
+
windowMs: z.number().int().positive().optional().default(60000), // 1 minute
|
|
101
|
+
max: z.number().int().positive().optional().default(500), // 500 requests per minute
|
|
102
|
+
keyGenerator: z.enum(['ip', 'user']).optional().default('ip'),
|
|
103
|
+
}).optional().default({}),
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* Plugin configuration schema
|
|
107
|
+
* Allows extending functionality via before/after hooks
|
|
108
|
+
*/
|
|
109
|
+
export const PluginConfigSchema = z.object({
|
|
110
|
+
name: z.string().min(1),
|
|
111
|
+
enabled: z.boolean().optional().default(true),
|
|
112
|
+
path: z.string().optional(), // Path to plugin module
|
|
113
|
+
config: z.record(z.unknown()).optional().default({}),
|
|
114
|
+
});
|
|
115
|
+
/**
|
|
116
|
+
* Profile configuration schema
|
|
117
|
+
* Supports multi-environment configurations (dev, prod, staging)
|
|
118
|
+
*/
|
|
119
|
+
export const ProfileConfigSchema = z.object({
|
|
120
|
+
name: z.string().min(1),
|
|
121
|
+
description: z.string().optional(),
|
|
122
|
+
daemon: DaemonConfigSchema.optional(),
|
|
123
|
+
servers: z.array(ServerConfigSchema).optional().default([]),
|
|
124
|
+
environment: z.record(z.string()).optional().default({}),
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* Root configuration schema
|
|
128
|
+
* Complete metalink.config.yaml/json structure
|
|
129
|
+
*/
|
|
130
|
+
export const MetalinkConfigSchema = z.object({
|
|
131
|
+
version: z.string().optional().default('1.0.0'),
|
|
132
|
+
description: z.string().optional(),
|
|
133
|
+
daemon: DaemonConfigSchema.optional(),
|
|
134
|
+
servers: z.array(ServerConfigSchema).optional().default([]),
|
|
135
|
+
plugins: z.array(PluginConfigSchema).optional().default([]),
|
|
136
|
+
profiles: z.array(ProfileConfigSchema).optional().default([]),
|
|
137
|
+
// Global environment variables (interpolated in server env)
|
|
138
|
+
environment: z.record(z.string()).optional().default({}),
|
|
139
|
+
// Secrets configuration
|
|
140
|
+
secrets: z.object({
|
|
141
|
+
provider: z.enum(['env', 'keyring', 'vault']).optional().default('env'),
|
|
142
|
+
keyringService: z.string().optional().default('metalink'),
|
|
143
|
+
}).optional().default({}),
|
|
144
|
+
// Schema caching configuration (in milliseconds)
|
|
145
|
+
schemasCacheTTL: z.number().int().positive().optional().default(300000), // 5 minutes default
|
|
146
|
+
// Schema cache directory path (v1.3.62: global cache across versions)
|
|
147
|
+
schemasCachePath: z.string().optional().default('~/.config/metalink/schemas'),
|
|
148
|
+
// Maximum number of schemas to keep in memory (LRU eviction)
|
|
149
|
+
maxSchemaCacheEntries: z.number().int().positive().optional().default(100),
|
|
150
|
+
// Enable background refresh of schemas
|
|
151
|
+
schemasBackgroundRefresh: z.boolean().optional().default(true),
|
|
152
|
+
// Enable background population of missing schemas (v1.3.62)
|
|
153
|
+
backgroundSchemaPopulation: z.boolean().optional().default(false),
|
|
154
|
+
// Base servers to auto-start on daemon init (always available and instant)
|
|
155
|
+
// If not specified, no servers are auto-started
|
|
156
|
+
base_servers: z.array(z.string()).optional(),
|
|
157
|
+
// Auto-start base servers on daemon init (default: true)
|
|
158
|
+
// When true: base servers start immediately for instant availability
|
|
159
|
+
// When false: base servers behave like regular servers (on-demand start)
|
|
160
|
+
base_servers_auto_start: z.boolean().optional().default(true),
|
|
161
|
+
// Expose base server tools in tools/list (default: false for token optimization)
|
|
162
|
+
// When false: base servers pre-started but tools hidden (optimal tokens + instant availability)
|
|
163
|
+
// When true: base server tools exposed in tools/list (legacy behavior)
|
|
164
|
+
base_servers_auto_expose_tools: z.boolean().optional().default(false),
|
|
165
|
+
// Tool safety classification rules for execute_tool vs execute_tool_confirm
|
|
166
|
+
toolSafetyRules: z.object({
|
|
167
|
+
// Regex patterns for safe operations (read-only)
|
|
168
|
+
safePatterns: z.array(z.string()).optional(),
|
|
169
|
+
// Regex patterns for risky operations (write/destructive)
|
|
170
|
+
riskyPatterns: z.array(z.string()).optional(),
|
|
171
|
+
// Explicit safe tool overrides (server:tool format, supports wildcards)
|
|
172
|
+
safeToolOverrides: z.array(z.string()).optional(),
|
|
173
|
+
// Explicit risky tool overrides (server:tool format, supports wildcards)
|
|
174
|
+
riskyToolOverrides: z.array(z.string()).optional(),
|
|
175
|
+
// v1.1.29: Argument-level inspection for command-based tools
|
|
176
|
+
argumentInspectionRules: z.array(z.object({
|
|
177
|
+
// Tool identifier (e.g., "ssh:runRemoteCommand")
|
|
178
|
+
tool: z.string(),
|
|
179
|
+
// Which argument field to inspect (e.g., "command")
|
|
180
|
+
argumentField: z.string(),
|
|
181
|
+
// Safe command patterns (regex applied to argument value)
|
|
182
|
+
safeCommandPatterns: z.array(z.string()).optional(),
|
|
183
|
+
// Risky command patterns (regex applied to argument value)
|
|
184
|
+
riskyCommandPatterns: z.array(z.string()).optional(),
|
|
185
|
+
// Whitelist mode: if true, only safeCommandPatterns are allowed
|
|
186
|
+
whitelistMode: z.boolean().optional().default(false),
|
|
187
|
+
// v1.1.55: Optional field mode - if field is missing, skip inspection (return null)
|
|
188
|
+
// Use for tools with multiple modes (e.g., metabase:execute with SQL or card_id)
|
|
189
|
+
optionalField: z.boolean().optional().default(false),
|
|
190
|
+
})).optional(),
|
|
191
|
+
}).optional(),
|
|
192
|
+
// Discovery TTL (v1.4.0): Time in milliseconds before discovered tools expire
|
|
193
|
+
// Default: 600000 (10 minutes). Set to 0 to disable expiration.
|
|
194
|
+
// Discovered tools are removed from tools/list after TTL of inactivity.
|
|
195
|
+
// Tool calls reset the timer (activity refresh pattern).
|
|
196
|
+
discoveryTTL: z.number().optional(),
|
|
197
|
+
// Dynamic tool exposure (v1.3.51 - Speakeasy optimization):
|
|
198
|
+
// false (default): Only expose 4 meta-tools (search_tools, describe_tool, execute_tool, execute_tool_confirm)
|
|
199
|
+
// Reduces token usage to ~280 tokens (fixed, regardless of server count)
|
|
200
|
+
// true: Expose all discovered tools dynamically in tools/list (original behavior)
|
|
201
|
+
// Token usage scales with discovery: 280 + (N servers × M tools × 70 tokens)
|
|
202
|
+
dynamicToolExposure: z.boolean().optional().default(false),
|
|
203
|
+
// Timeout configuration (in milliseconds)
|
|
204
|
+
timeouts: z.object({
|
|
205
|
+
// Server initialization timeout - time to wait for server to start and respond
|
|
206
|
+
serverInit: z.number().int().positive().optional().default(10000), // 10s
|
|
207
|
+
// Tool fetch timeout - time to wait for server to return tools/list
|
|
208
|
+
toolFetch: z.number().int().positive().optional().default(60000), // 60s
|
|
209
|
+
// Tool execution timeout - time to wait for tool execution to complete
|
|
210
|
+
toolExecution: z.number().int().positive().optional().default(300000), // 5min
|
|
211
|
+
// Graceful shutdown timeout - time to wait for server to shutdown gracefully before SIGKILL
|
|
212
|
+
gracefulShutdown: z.number().int().positive().optional().default(5000), // 5s
|
|
213
|
+
}).optional().default({}),
|
|
214
|
+
// Circuit breaker configuration for preventing cascade failures
|
|
215
|
+
circuitBreaker: z.object({
|
|
216
|
+
// Number of consecutive failures before opening circuit
|
|
217
|
+
failureThreshold: z.number().int().positive().optional().default(3),
|
|
218
|
+
// Time in milliseconds before attempting to close circuit after opening
|
|
219
|
+
resetTimeout: z.number().int().positive().optional().default(30000), // 30s
|
|
220
|
+
// Number of consecutive successes in HALF_OPEN state to close circuit
|
|
221
|
+
halfOpenSuccessThreshold: z.number().int().positive().optional().default(1),
|
|
222
|
+
}).optional().default({}),
|
|
223
|
+
// Auto-restart configuration for failed servers
|
|
224
|
+
autoRestart: z.object({
|
|
225
|
+
// Enable auto-restart for failed servers
|
|
226
|
+
enabled: z.boolean().optional().default(true),
|
|
227
|
+
// Maximum number of restart attempts before giving up
|
|
228
|
+
maxRetries: z.number().int().nonnegative().optional().default(3),
|
|
229
|
+
// Base delay in milliseconds for exponential backoff (first retry)
|
|
230
|
+
baseDelay: z.number().int().positive().optional().default(5000), // 5s
|
|
231
|
+
// Maximum delay in milliseconds between restart attempts
|
|
232
|
+
maxDelay: z.number().int().positive().optional().default(300000), // 5 minutes
|
|
233
|
+
// Multiplier for exponential backoff (delay = baseDelay * multiplier^attempt)
|
|
234
|
+
backoffMultiplier: z.number().positive().optional().default(2),
|
|
235
|
+
}).optional().default({}),
|
|
236
|
+
});
|
|
237
|
+
/**
|
|
238
|
+
* Export all schemas for use in loader
|
|
239
|
+
*/
|
|
240
|
+
export const ConfigSchemas = {
|
|
241
|
+
ServerConfig: ServerConfigSchema,
|
|
242
|
+
StdioServerConfig: StdioServerConfigSchema,
|
|
243
|
+
HttpServerConfig: HttpServerConfigSchema,
|
|
244
|
+
HealthCheck: HealthCheckSchema,
|
|
245
|
+
HttpAuth: HttpAuthSchema,
|
|
246
|
+
HttpSession: HttpSessionSchema,
|
|
247
|
+
HttpCors: HttpCorsSchema,
|
|
248
|
+
DaemonConfig: DaemonConfigSchema,
|
|
249
|
+
PluginConfig: PluginConfigSchema,
|
|
250
|
+
ProfileConfig: ProfileConfigSchema,
|
|
251
|
+
MetalinkConfig: MetalinkConfigSchema,
|
|
252
|
+
};
|
|
253
|
+
/**
|
|
254
|
+
* Validates configuration against schema
|
|
255
|
+
* Returns parsed config or throws ZodError
|
|
256
|
+
*/
|
|
257
|
+
export function validateConfig(config) {
|
|
258
|
+
return MetalinkConfigSchema.parse(config);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Safely validates configuration without throwing
|
|
262
|
+
* Returns { success: true, data } or { success: false, errors }
|
|
263
|
+
*/
|
|
264
|
+
export function validateConfigSafe(config) {
|
|
265
|
+
return MetalinkConfigSchema.safeParse(config);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MetaLink Daemon
|
|
4
|
+
* Main entry point for the HTTP server
|
|
5
|
+
*/
|
|
6
|
+
import { config as dotenvConfig } from 'dotenv';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { initializeConfigSync, HttpServer, getConfigLoader } from './index.js';
|
|
9
|
+
async function main() {
|
|
10
|
+
try {
|
|
11
|
+
console.log('[MetaLink] Starting daemon...');
|
|
12
|
+
// Load environment variables from ~/.config/metalink/.env
|
|
13
|
+
// This allows credentials to be stored separately from mcp-registry.json
|
|
14
|
+
const envPath = path.join(process.env.HOME || '~', '.config', 'metalink', '.env');
|
|
15
|
+
const envResult = dotenvConfig({ path: envPath });
|
|
16
|
+
if (envResult.parsed) {
|
|
17
|
+
console.log(`[MetaLink] Loaded ${Object.keys(envResult.parsed).length} env vars from ${envPath}`);
|
|
18
|
+
}
|
|
19
|
+
else if (envResult.error && envResult.error.code !== 'ENOENT') {
|
|
20
|
+
console.warn(`[MetaLink] Warning: Could not load .env file: ${envResult.error.message}`);
|
|
21
|
+
}
|
|
22
|
+
// Note: ENOENT (file not found) is silently ignored - .env is optional
|
|
23
|
+
console.log(`[MetaLink] Working directory: ${process.cwd()}`);
|
|
24
|
+
console.log(`[MetaLink] HOME: ${process.env.HOME}`);
|
|
25
|
+
console.log(`[MetaLink] METALINK_CONFIG: ${process.env.METALINK_CONFIG || 'not set'}`);
|
|
26
|
+
// Load configuration
|
|
27
|
+
initializeConfigSync(process.env.METALINK_CONFIG);
|
|
28
|
+
const configLoader = getConfigLoader();
|
|
29
|
+
console.log(`[MetaLink] Configuration loaded successfully`);
|
|
30
|
+
console.log(`[MetaLink] Registry path: ${configLoader['getRegistryPath']?.() || 'unknown'}`);
|
|
31
|
+
// Get daemon settings (check METALINK_PORT first, then PORT for backward compat)
|
|
32
|
+
const daemonConfig = configLoader.getDaemon();
|
|
33
|
+
const port = process.env.METALINK_PORT
|
|
34
|
+
? parseInt(process.env.METALINK_PORT, 10)
|
|
35
|
+
: (process.env.PORT
|
|
36
|
+
? parseInt(process.env.PORT, 10)
|
|
37
|
+
: daemonConfig.port || 3000);
|
|
38
|
+
const host = process.env.HOST || daemonConfig.host || '0.0.0.0';
|
|
39
|
+
const branch = process.env.BRANCH || 'unknown';
|
|
40
|
+
const logLevel = daemonConfig.logLevel || 'info';
|
|
41
|
+
// Warn about deprecated PORT variable
|
|
42
|
+
if (process.env.PORT && !process.env.METALINK_PORT) {
|
|
43
|
+
console.warn('⚠️ PORT environment variable is deprecated, use METALINK_PORT instead');
|
|
44
|
+
}
|
|
45
|
+
// Port validation
|
|
46
|
+
if (port < 1024 || port > 65535) {
|
|
47
|
+
throw new Error(`[MetaLink] Invalid METALINK_PORT: ${port}. Must be 1024-65535.`);
|
|
48
|
+
}
|
|
49
|
+
// Conventional port validation (warning only, not enforced)
|
|
50
|
+
const CONVENTIONAL_PORTS = {
|
|
51
|
+
production: 6655,
|
|
52
|
+
staging: 6656
|
|
53
|
+
};
|
|
54
|
+
if (CONVENTIONAL_PORTS[branch] && port !== CONVENTIONAL_PORTS[branch]) {
|
|
55
|
+
console.warn(`⚠️ BRANCH=${branch} conventionally uses port ${CONVENTIONAL_PORTS[branch]}, but METALINK_PORT=${port}`);
|
|
56
|
+
}
|
|
57
|
+
// Log startup context
|
|
58
|
+
console.log(`[MetaLink] Starting daemon on port ${port} (BRANCH: ${branch})`);
|
|
59
|
+
// Set log level
|
|
60
|
+
if (logLevel === 'debug') {
|
|
61
|
+
console.log('[MetaLink] Debug mode enabled');
|
|
62
|
+
}
|
|
63
|
+
// Create and start HTTP server
|
|
64
|
+
console.log('[MetaLink] Creating HTTP server...');
|
|
65
|
+
const httpServer = new HttpServer(configLoader);
|
|
66
|
+
console.log('[MetaLink] HTTP server created successfully');
|
|
67
|
+
// Register signal handlers BEFORE starting server
|
|
68
|
+
// This ensures they're active when daemon starts in background mode
|
|
69
|
+
process.on('SIGINT', async () => {
|
|
70
|
+
console.log('\n[MetaLink] Shutting down gracefully...');
|
|
71
|
+
await httpServer.cleanup();
|
|
72
|
+
process.exit(0);
|
|
73
|
+
});
|
|
74
|
+
process.on('SIGTERM', async () => {
|
|
75
|
+
console.log('[MetaLink] Received SIGTERM, shutting down...');
|
|
76
|
+
await httpServer.cleanup();
|
|
77
|
+
process.exit(0);
|
|
78
|
+
});
|
|
79
|
+
// Start HTTP server FIRST so validation can connect immediately
|
|
80
|
+
console.log(`[MetaLink] Starting HTTP server on ${host}:${port}...`);
|
|
81
|
+
await httpServer.listen(port, host);
|
|
82
|
+
// Initialize base servers in background (non-blocking for faster startup)
|
|
83
|
+
const baseServersAutoStart = configLoader.getConfig().base_servers_auto_start ?? true;
|
|
84
|
+
if (baseServersAutoStart) {
|
|
85
|
+
console.log('[MetaLink] Initializing base servers in background...');
|
|
86
|
+
// Don't await - let base servers initialize while HTTP server is already listening
|
|
87
|
+
httpServer.getServerManager().initializeBaseServers(configLoader)
|
|
88
|
+
.then(() => {
|
|
89
|
+
console.log('[MetaLink] Base servers initialized successfully');
|
|
90
|
+
})
|
|
91
|
+
.catch((error) => {
|
|
92
|
+
console.error('[MetaLink] Error initializing base servers:', error);
|
|
93
|
+
// Base servers are not critical for HTTP server operation
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.log('[MetaLink] Base servers auto-start disabled (base_servers_auto_start: false)');
|
|
98
|
+
}
|
|
99
|
+
console.log(`[MetaLink] Daemon started successfully on ${host}:${port}`);
|
|
100
|
+
// Background schema population (v1.3.62) - runs AFTER daemon is fully started
|
|
101
|
+
const backgroundSchemaPopulation = configLoader.getConfig().backgroundSchemaPopulation ?? false;
|
|
102
|
+
if (backgroundSchemaPopulation) {
|
|
103
|
+
console.log('[MetaLink] Background schema population enabled, starting...');
|
|
104
|
+
// Run in background without blocking
|
|
105
|
+
httpServer.getServerManager().populateMissingSchemas(configLoader)
|
|
106
|
+
.then(() => console.log('[MetaLink] Background schema population complete'))
|
|
107
|
+
.catch(error => console.error('[MetaLink] Background schema population failed:', error));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error('[MetaLink] Fatal error:', error);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
main();
|
|
116
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry Logic for HttpClient
|
|
3
|
+
*
|
|
4
|
+
* Provides exponential backoff retry mechanism for transient HTTP failures.
|
|
5
|
+
* This code is meant to be integrated into http-client.ts
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* HTTP status codes that indicate retryable errors
|
|
9
|
+
*/
|
|
10
|
+
declare const RETRYABLE_STATUS_CODES: Set<number>;
|
|
11
|
+
/**
|
|
12
|
+
* HTTP status codes that should never be retried
|
|
13
|
+
*/
|
|
14
|
+
declare const NON_RETRYABLE_STATUS_CODES: Set<number>;
|
|
15
|
+
/**
|
|
16
|
+
* Network error patterns that are retryable
|
|
17
|
+
*/
|
|
18
|
+
declare const RETRYABLE_ERROR_PATTERNS: string[];
|
|
19
|
+
/**
|
|
20
|
+
* Retry configuration
|
|
21
|
+
*/
|
|
22
|
+
interface RetryConfig {
|
|
23
|
+
maxRetries: number;
|
|
24
|
+
initialDelayMs: number;
|
|
25
|
+
maxDelayMs: number;
|
|
26
|
+
jitterMs: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error type with optional status code
|
|
30
|
+
*/
|
|
31
|
+
interface HttpError extends Error {
|
|
32
|
+
statusCode?: number;
|
|
33
|
+
isRetryable?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if an error or response is retryable
|
|
37
|
+
*
|
|
38
|
+
* @param error - Error object or Response
|
|
39
|
+
* @returns true if the error should be retried
|
|
40
|
+
*/
|
|
41
|
+
declare function isRetryable(error: Error | Response | HttpError): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate exponential backoff delay with jitter
|
|
44
|
+
* Formula: min(baseDelay * 2^attempt + random(0, jitter), maxDelay)
|
|
45
|
+
*
|
|
46
|
+
* @param attempt - Retry attempt number (0-based)
|
|
47
|
+
* @param config - Retry configuration
|
|
48
|
+
* @returns Delay in milliseconds
|
|
49
|
+
*/
|
|
50
|
+
declare function calculateBackoffDelay(attempt: number, config: RetryConfig): number;
|
|
51
|
+
/**
|
|
52
|
+
* Sleep for specified duration
|
|
53
|
+
* @param ms - Milliseconds to sleep
|
|
54
|
+
*/
|
|
55
|
+
declare function sleep(ms: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Execute fetch with exponential backoff retry
|
|
58
|
+
*
|
|
59
|
+
* @param url - URL to fetch
|
|
60
|
+
* @param options - Fetch options
|
|
61
|
+
* @param retryConfig - Retry configuration
|
|
62
|
+
* @returns Response object
|
|
63
|
+
* @throws Error if all retries exhausted
|
|
64
|
+
*/
|
|
65
|
+
declare function fetchWithRetry(url: string, options: RequestInit, retryConfig?: RetryConfig): Promise<Response>;
|
|
66
|
+
export { fetchWithRetry, isRetryable, calculateBackoffDelay, sleep, RETRYABLE_STATUS_CODES, NON_RETRYABLE_STATUS_CODES, RETRYABLE_ERROR_PATTERNS, type RetryConfig, type HttpError, };
|
|
67
|
+
//# sourceMappingURL=http-client-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client-retry.d.ts","sourceRoot":"","sources":["../src/http-client-retry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,QAAA,MAAM,sBAAsB,aAA2B,CAAC;AAExD;;GAEG;AACH,QAAA,MAAM,0BAA0B,aAAgC,CAAC;AAEjE;;GAEG;AACH,QAAA,MAAM,wBAAwB,UAO7B,CAAC;AAEF;;GAEG;AACH,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,SAAU,SAAQ,KAAK;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CA2BjE;AAED;;;;;;;GAOG;AACH,iBAAS,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAK3E;AAED;;;GAGG;AACH,iBAAS,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExC;AAED;;;;;;;;GAQG;AACH,iBAAe,cAAc,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EACpB,WAAW,GAAE,WAKZ,GACA,OAAO,CAAC,QAAQ,CAAC,CAkDnB;AAED,OAAO,EACL,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,KAAK,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry Logic for HttpClient
|
|
3
|
+
*
|
|
4
|
+
* Provides exponential backoff retry mechanism for transient HTTP failures.
|
|
5
|
+
* This code is meant to be integrated into http-client.ts
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* HTTP status codes that indicate retryable errors
|
|
9
|
+
*/
|
|
10
|
+
const RETRYABLE_STATUS_CODES = new Set([502, 503, 504]);
|
|
11
|
+
/**
|
|
12
|
+
* HTTP status codes that should never be retried
|
|
13
|
+
*/
|
|
14
|
+
const NON_RETRYABLE_STATUS_CODES = new Set([400, 401, 403, 404]);
|
|
15
|
+
/**
|
|
16
|
+
* Network error patterns that are retryable
|
|
17
|
+
*/
|
|
18
|
+
const RETRYABLE_ERROR_PATTERNS = [
|
|
19
|
+
'ECONNREFUSED',
|
|
20
|
+
'ECONNRESET',
|
|
21
|
+
'ETIMEDOUT',
|
|
22
|
+
'EHOSTUNREACH',
|
|
23
|
+
'ENETUNREACH',
|
|
24
|
+
'ERR_HTTP2_STREAM_RESET',
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Check if an error or response is retryable
|
|
28
|
+
*
|
|
29
|
+
* @param error - Error object or Response
|
|
30
|
+
* @returns true if the error should be retried
|
|
31
|
+
*/
|
|
32
|
+
function isRetryable(error) {
|
|
33
|
+
// Handle Response objects (failed fetch)
|
|
34
|
+
if (error instanceof Response) {
|
|
35
|
+
if (NON_RETRYABLE_STATUS_CODES.has(error.status)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return RETRYABLE_STATUS_CODES.has(error.status);
|
|
39
|
+
}
|
|
40
|
+
// Handle Error objects
|
|
41
|
+
if (error instanceof Error) {
|
|
42
|
+
const message = error.message;
|
|
43
|
+
const httpError = error;
|
|
44
|
+
// Check if status code is set (from HTTP response)
|
|
45
|
+
if (httpError.statusCode) {
|
|
46
|
+
if (NON_RETRYABLE_STATUS_CODES.has(httpError.statusCode)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return RETRYABLE_STATUS_CODES.has(httpError.statusCode);
|
|
50
|
+
}
|
|
51
|
+
// Check for retryable network error patterns
|
|
52
|
+
return RETRYABLE_ERROR_PATTERNS.some(pattern => message.includes(pattern));
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Calculate exponential backoff delay with jitter
|
|
58
|
+
* Formula: min(baseDelay * 2^attempt + random(0, jitter), maxDelay)
|
|
59
|
+
*
|
|
60
|
+
* @param attempt - Retry attempt number (0-based)
|
|
61
|
+
* @param config - Retry configuration
|
|
62
|
+
* @returns Delay in milliseconds
|
|
63
|
+
*/
|
|
64
|
+
function calculateBackoffDelay(attempt, config) {
|
|
65
|
+
const baseDelay = config.initialDelayMs * Math.pow(2, attempt);
|
|
66
|
+
const jitter = Math.random() * config.jitterMs;
|
|
67
|
+
const delayWithJitter = baseDelay + jitter;
|
|
68
|
+
return Math.min(delayWithJitter, config.maxDelayMs);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Sleep for specified duration
|
|
72
|
+
* @param ms - Milliseconds to sleep
|
|
73
|
+
*/
|
|
74
|
+
function sleep(ms) {
|
|
75
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute fetch with exponential backoff retry
|
|
79
|
+
*
|
|
80
|
+
* @param url - URL to fetch
|
|
81
|
+
* @param options - Fetch options
|
|
82
|
+
* @param retryConfig - Retry configuration
|
|
83
|
+
* @returns Response object
|
|
84
|
+
* @throws Error if all retries exhausted
|
|
85
|
+
*/
|
|
86
|
+
async function fetchWithRetry(url, options, retryConfig = {
|
|
87
|
+
maxRetries: 3,
|
|
88
|
+
initialDelayMs: 100,
|
|
89
|
+
maxDelayMs: 30000,
|
|
90
|
+
jitterMs: 1000,
|
|
91
|
+
}) {
|
|
92
|
+
let lastError = null;
|
|
93
|
+
for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {
|
|
94
|
+
try {
|
|
95
|
+
const response = await fetch(url, options);
|
|
96
|
+
// Success: return immediately
|
|
97
|
+
if (response.ok) {
|
|
98
|
+
return response;
|
|
99
|
+
}
|
|
100
|
+
// Non-retryable status code: throw immediately
|
|
101
|
+
if (!isRetryable(response)) {
|
|
102
|
+
const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
103
|
+
error.statusCode = response.status;
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
// Retryable status code - will retry below
|
|
107
|
+
lastError = response;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
111
|
+
// Non-retryable error: throw immediately
|
|
112
|
+
if (!isRetryable(lastError)) {
|
|
113
|
+
throw lastError;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// If this was the last attempt, throw
|
|
117
|
+
if (attempt === retryConfig.maxRetries) {
|
|
118
|
+
const message = lastError instanceof Response
|
|
119
|
+
? `HTTP ${lastError.status} after ${retryConfig.maxRetries} retries`
|
|
120
|
+
: lastError instanceof Error
|
|
121
|
+
? lastError.message
|
|
122
|
+
: 'Unknown error';
|
|
123
|
+
throw new Error(`Failed to fetch ${url}: ${message}`);
|
|
124
|
+
}
|
|
125
|
+
// Calculate backoff and wait
|
|
126
|
+
const delayMs = calculateBackoffDelay(attempt, retryConfig);
|
|
127
|
+
await sleep(delayMs);
|
|
128
|
+
}
|
|
129
|
+
// Should not reach here, but satisfy TypeScript
|
|
130
|
+
throw lastError || new Error('Unknown error in retry loop');
|
|
131
|
+
}
|
|
132
|
+
export { fetchWithRetry, isRetryable, calculateBackoffDelay, sleep, RETRYABLE_STATUS_CODES, NON_RETRYABLE_STATUS_CODES, RETRYABLE_ERROR_PATTERNS, };
|
|
133
|
+
//# sourceMappingURL=http-client-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client-retry.js","sourceRoot":"","sources":["../src/http-client-retry.ts"],"names":[],"mappings":"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"}
|