@lobu/gateway 2.8.0
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/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +6 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/platform.d.ts +92 -0
- package/dist/api/platform.d.ts.map +1 -0
- package/dist/api/platform.js +236 -0
- package/dist/api/platform.js.map +1 -0
- package/dist/api/response-renderer.d.ts +44 -0
- package/dist/api/response-renderer.d.ts.map +1 -0
- package/dist/api/response-renderer.js +123 -0
- package/dist/api/response-renderer.js.map +1 -0
- package/dist/auth/agent-metadata-store.d.ts +64 -0
- package/dist/auth/agent-metadata-store.d.ts.map +1 -0
- package/dist/auth/agent-metadata-store.js +115 -0
- package/dist/auth/agent-metadata-store.js.map +1 -0
- package/dist/auth/api-auth-middleware.d.ts +19 -0
- package/dist/auth/api-auth-middleware.d.ts.map +1 -0
- package/dist/auth/api-auth-middleware.js +61 -0
- package/dist/auth/api-auth-middleware.js.map +1 -0
- package/dist/auth/api-key-provider-module.d.ts +60 -0
- package/dist/auth/api-key-provider-module.d.ts.map +1 -0
- package/dist/auth/api-key-provider-module.js +148 -0
- package/dist/auth/api-key-provider-module.js.map +1 -0
- package/dist/auth/base-provider-module.d.ts +70 -0
- package/dist/auth/base-provider-module.d.ts.map +1 -0
- package/dist/auth/base-provider-module.js +118 -0
- package/dist/auth/base-provider-module.js.map +1 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts +34 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts.map +1 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.js +136 -0
- package/dist/auth/chatgpt/chatgpt-oauth-module.js.map +1 -0
- package/dist/auth/chatgpt/device-code-client.d.ts +40 -0
- package/dist/auth/chatgpt/device-code-client.d.ts.map +1 -0
- package/dist/auth/chatgpt/device-code-client.js +165 -0
- package/dist/auth/chatgpt/device-code-client.js.map +1 -0
- package/dist/auth/chatgpt/index.d.ts +2 -0
- package/dist/auth/chatgpt/index.d.ts.map +1 -0
- package/dist/auth/chatgpt/index.js +6 -0
- package/dist/auth/chatgpt/index.js.map +1 -0
- package/dist/auth/claude/oauth-module.d.ts +29 -0
- package/dist/auth/claude/oauth-module.d.ts.map +1 -0
- package/dist/auth/claude/oauth-module.js +201 -0
- package/dist/auth/claude/oauth-module.js.map +1 -0
- package/dist/auth/cli/token-service.d.ts +35 -0
- package/dist/auth/cli/token-service.d.ts.map +1 -0
- package/dist/auth/cli/token-service.js +171 -0
- package/dist/auth/cli/token-service.js.map +1 -0
- package/dist/auth/external/client.d.ts +65 -0
- package/dist/auth/external/client.d.ts.map +1 -0
- package/dist/auth/external/client.js +348 -0
- package/dist/auth/external/client.js.map +1 -0
- package/dist/auth/external/device-code-client.d.ts +41 -0
- package/dist/auth/external/device-code-client.d.ts.map +1 -0
- package/dist/auth/external/device-code-client.js +128 -0
- package/dist/auth/external/device-code-client.js.map +1 -0
- package/dist/auth/mcp/config-service.d.ts +70 -0
- package/dist/auth/mcp/config-service.d.ts.map +1 -0
- package/dist/auth/mcp/config-service.js +269 -0
- package/dist/auth/mcp/config-service.js.map +1 -0
- package/dist/auth/mcp/proxy.d.ts +68 -0
- package/dist/auth/mcp/proxy.d.ts.map +1 -0
- package/dist/auth/mcp/proxy.js +783 -0
- package/dist/auth/mcp/proxy.js.map +1 -0
- package/dist/auth/mcp/string-substitution.d.ts +11 -0
- package/dist/auth/mcp/string-substitution.d.ts.map +1 -0
- package/dist/auth/mcp/string-substitution.js +21 -0
- package/dist/auth/mcp/string-substitution.js.map +1 -0
- package/dist/auth/mcp/tool-cache.d.ts +26 -0
- package/dist/auth/mcp/tool-cache.d.ts.map +1 -0
- package/dist/auth/mcp/tool-cache.js +58 -0
- package/dist/auth/mcp/tool-cache.js.map +1 -0
- package/dist/auth/oauth/base-client.d.ts +54 -0
- package/dist/auth/oauth/base-client.d.ts.map +1 -0
- package/dist/auth/oauth/base-client.js +191 -0
- package/dist/auth/oauth/base-client.js.map +1 -0
- package/dist/auth/oauth/client.d.ts +35 -0
- package/dist/auth/oauth/client.d.ts.map +1 -0
- package/dist/auth/oauth/client.js +96 -0
- package/dist/auth/oauth/client.js.map +1 -0
- package/dist/auth/oauth/credentials.d.ts +8 -0
- package/dist/auth/oauth/credentials.d.ts.map +1 -0
- package/dist/auth/oauth/credentials.js +3 -0
- package/dist/auth/oauth/credentials.js.map +1 -0
- package/dist/auth/oauth/providers.d.ts +44 -0
- package/dist/auth/oauth/providers.d.ts.map +1 -0
- package/dist/auth/oauth/providers.js +37 -0
- package/dist/auth/oauth/providers.js.map +1 -0
- package/dist/auth/oauth/state-store.d.ts +62 -0
- package/dist/auth/oauth/state-store.d.ts.map +1 -0
- package/dist/auth/oauth/state-store.js +84 -0
- package/dist/auth/oauth/state-store.js.map +1 -0
- package/dist/auth/oauth-templates.d.ts +15 -0
- package/dist/auth/oauth-templates.d.ts.map +1 -0
- package/dist/auth/oauth-templates.js +161 -0
- package/dist/auth/oauth-templates.js.map +1 -0
- package/dist/auth/provider-catalog.d.ts +52 -0
- package/dist/auth/provider-catalog.d.ts.map +1 -0
- package/dist/auth/provider-catalog.js +155 -0
- package/dist/auth/provider-catalog.js.map +1 -0
- package/dist/auth/provider-model-options.d.ts +3 -0
- package/dist/auth/provider-model-options.d.ts.map +1 -0
- package/dist/auth/provider-model-options.js +29 -0
- package/dist/auth/provider-model-options.js.map +1 -0
- package/dist/auth/settings/agent-settings-store.d.ts +112 -0
- package/dist/auth/settings/agent-settings-store.d.ts.map +1 -0
- package/dist/auth/settings/agent-settings-store.js +376 -0
- package/dist/auth/settings/agent-settings-store.js.map +1 -0
- package/dist/auth/settings/auth-profiles-manager.d.ts +26 -0
- package/dist/auth/settings/auth-profiles-manager.d.ts.map +1 -0
- package/dist/auth/settings/auth-profiles-manager.js +146 -0
- package/dist/auth/settings/auth-profiles-manager.js.map +1 -0
- package/dist/auth/settings/index.d.ts +4 -0
- package/dist/auth/settings/index.d.ts.map +1 -0
- package/dist/auth/settings/index.js +9 -0
- package/dist/auth/settings/index.js.map +1 -0
- package/dist/auth/settings/model-preference-store.d.ts +25 -0
- package/dist/auth/settings/model-preference-store.d.ts.map +1 -0
- package/dist/auth/settings/model-preference-store.js +50 -0
- package/dist/auth/settings/model-preference-store.js.map +1 -0
- package/dist/auth/settings/model-selection.d.ts +11 -0
- package/dist/auth/settings/model-selection.d.ts.map +1 -0
- package/dist/auth/settings/model-selection.js +83 -0
- package/dist/auth/settings/model-selection.js.map +1 -0
- package/dist/auth/settings/resolved-settings-view.d.ts +45 -0
- package/dist/auth/settings/resolved-settings-view.d.ts.map +1 -0
- package/dist/auth/settings/resolved-settings-view.js +152 -0
- package/dist/auth/settings/resolved-settings-view.js.map +1 -0
- package/dist/auth/settings/template-utils.d.ts +3 -0
- package/dist/auth/settings/template-utils.d.ts.map +1 -0
- package/dist/auth/settings/template-utils.js +43 -0
- package/dist/auth/settings/template-utils.js.map +1 -0
- package/dist/auth/settings/token-service.d.ts +86 -0
- package/dist/auth/settings/token-service.d.ts.map +1 -0
- package/dist/auth/settings/token-service.js +3 -0
- package/dist/auth/settings/token-service.js.map +1 -0
- package/dist/auth/system-env-store.d.ts +26 -0
- package/dist/auth/system-env-store.d.ts.map +1 -0
- package/dist/auth/system-env-store.js +92 -0
- package/dist/auth/system-env-store.js.map +1 -0
- package/dist/auth/user-agents-store.d.ts +31 -0
- package/dist/auth/user-agents-store.d.ts.map +1 -0
- package/dist/auth/user-agents-store.js +54 -0
- package/dist/auth/user-agents-store.js.map +1 -0
- package/dist/channels/binding-service.d.ts +69 -0
- package/dist/channels/binding-service.d.ts.map +1 -0
- package/dist/channels/binding-service.js +144 -0
- package/dist/channels/binding-service.js.map +1 -0
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +6 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/gateway.d.ts +31 -0
- package/dist/cli/gateway.d.ts.map +1 -0
- package/dist/cli/gateway.js +1062 -0
- package/dist/cli/gateway.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/built-in-commands.d.ts +10 -0
- package/dist/commands/built-in-commands.d.ts.map +1 -0
- package/dist/commands/built-in-commands.js +63 -0
- package/dist/commands/built-in-commands.js.map +1 -0
- package/dist/commands/command-dispatcher.d.ts +25 -0
- package/dist/commands/command-dispatcher.d.ts.map +1 -0
- package/dist/commands/command-dispatcher.js +50 -0
- package/dist/commands/command-dispatcher.js.map +1 -0
- package/dist/commands/command-reply-adapters.d.ts +3 -0
- package/dist/commands/command-reply-adapters.d.ts.map +1 -0
- package/dist/commands/command-reply-adapters.js +60 -0
- package/dist/commands/command-reply-adapters.js.map +1 -0
- package/dist/config/file-loader.d.ts +23 -0
- package/dist/config/file-loader.d.ts.map +1 -0
- package/dist/config/file-loader.js +495 -0
- package/dist/config/file-loader.js.map +1 -0
- package/dist/config/index.d.ts +96 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +357 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/network-allowlist.d.ts +18 -0
- package/dist/config/network-allowlist.d.ts.map +1 -0
- package/dist/config/network-allowlist.js +60 -0
- package/dist/config/network-allowlist.js.map +1 -0
- package/dist/connections/chat-instance-manager.d.ts +107 -0
- package/dist/connections/chat-instance-manager.d.ts.map +1 -0
- package/dist/connections/chat-instance-manager.js +886 -0
- package/dist/connections/chat-instance-manager.js.map +1 -0
- package/dist/connections/chat-response-bridge.d.ts +31 -0
- package/dist/connections/chat-response-bridge.d.ts.map +1 -0
- package/dist/connections/chat-response-bridge.js +465 -0
- package/dist/connections/chat-response-bridge.js.map +1 -0
- package/dist/connections/index.d.ts +4 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +8 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/interaction-bridge.d.ts +7 -0
- package/dist/connections/interaction-bridge.d.ts.map +1 -0
- package/dist/connections/interaction-bridge.js +593 -0
- package/dist/connections/interaction-bridge.js.map +1 -0
- package/dist/connections/message-handler-bridge.d.ts +21 -0
- package/dist/connections/message-handler-bridge.d.ts.map +1 -0
- package/dist/connections/message-handler-bridge.js +314 -0
- package/dist/connections/message-handler-bridge.js.map +1 -0
- package/dist/connections/platform-auth-methods.d.ts +5 -0
- package/dist/connections/platform-auth-methods.d.ts.map +1 -0
- package/dist/connections/platform-auth-methods.js +13 -0
- package/dist/connections/platform-auth-methods.js.map +1 -0
- package/dist/connections/types.d.ts +52 -0
- package/dist/connections/types.d.ts.map +1 -0
- package/dist/connections/types.js +20 -0
- package/dist/connections/types.js.map +1 -0
- package/dist/gateway/connection-manager.d.ts +87 -0
- package/dist/gateway/connection-manager.d.ts.map +1 -0
- package/dist/gateway/connection-manager.js +216 -0
- package/dist/gateway/connection-manager.js.map +1 -0
- package/dist/gateway/index.d.ts +71 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +509 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/job-router.d.ts +60 -0
- package/dist/gateway/job-router.d.ts.map +1 -0
- package/dist/gateway/job-router.js +148 -0
- package/dist/gateway/job-router.js.map +1 -0
- package/dist/gateway-main.d.ts +81 -0
- package/dist/gateway-main.d.ts.map +1 -0
- package/dist/gateway-main.js +143 -0
- package/dist/gateway-main.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/queue/index.d.ts +8 -0
- package/dist/infrastructure/queue/index.d.ts.map +1 -0
- package/dist/infrastructure/queue/index.js +12 -0
- package/dist/infrastructure/queue/index.js.map +1 -0
- package/dist/infrastructure/queue/queue-producer.d.ts +68 -0
- package/dist/infrastructure/queue/queue-producer.d.ts.map +1 -0
- package/dist/infrastructure/queue/queue-producer.js +72 -0
- package/dist/infrastructure/queue/queue-producer.js.map +1 -0
- package/dist/infrastructure/queue/redis-queue.d.ts +45 -0
- package/dist/infrastructure/queue/redis-queue.d.ts.map +1 -0
- package/dist/infrastructure/queue/redis-queue.js +273 -0
- package/dist/infrastructure/queue/redis-queue.js.map +1 -0
- package/dist/infrastructure/queue/types.d.ts +107 -0
- package/dist/infrastructure/queue/types.d.ts.map +1 -0
- package/dist/infrastructure/queue/types.js +7 -0
- package/dist/infrastructure/queue/types.js.map +1 -0
- package/dist/infrastructure/redis/system-message-limiter.d.ts +35 -0
- package/dist/infrastructure/redis/system-message-limiter.d.ts.map +1 -0
- package/dist/infrastructure/redis/system-message-limiter.js +61 -0
- package/dist/infrastructure/redis/system-message-limiter.js.map +1 -0
- package/dist/interactions/config-request-store.d.ts +41 -0
- package/dist/interactions/config-request-store.d.ts.map +1 -0
- package/dist/interactions/config-request-store.js +103 -0
- package/dist/interactions/config-request-store.js.map +1 -0
- package/dist/interactions.d.ts +134 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +175 -0
- package/dist/interactions.js.map +1 -0
- package/dist/lobu.d.ts +78 -0
- package/dist/lobu.d.ts.map +1 -0
- package/dist/lobu.js +248 -0
- package/dist/lobu.js.map +1 -0
- package/dist/metrics/prometheus.d.ts +6 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +78 -0
- package/dist/metrics/prometheus.js.map +1 -0
- package/dist/modules/module-system.d.ts +82 -0
- package/dist/modules/module-system.d.ts.map +1 -0
- package/dist/modules/module-system.js +53 -0
- package/dist/modules/module-system.js.map +1 -0
- package/dist/orchestration/base-deployment-manager.d.ts +173 -0
- package/dist/orchestration/base-deployment-manager.d.ts.map +1 -0
- package/dist/orchestration/base-deployment-manager.js +553 -0
- package/dist/orchestration/base-deployment-manager.js.map +1 -0
- package/dist/orchestration/deployment-utils.d.ts +25 -0
- package/dist/orchestration/deployment-utils.d.ts.map +1 -0
- package/dist/orchestration/deployment-utils.js +65 -0
- package/dist/orchestration/deployment-utils.js.map +1 -0
- package/dist/orchestration/impl/docker-deployment.d.ts +43 -0
- package/dist/orchestration/impl/docker-deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/docker-deployment.js +480 -0
- package/dist/orchestration/impl/docker-deployment.js.map +1 -0
- package/dist/orchestration/impl/embedded-deployment.d.ts +16 -0
- package/dist/orchestration/impl/embedded-deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/embedded-deployment.js +195 -0
- package/dist/orchestration/impl/embedded-deployment.js.map +1 -0
- package/dist/orchestration/impl/index.d.ts +8 -0
- package/dist/orchestration/impl/index.d.ts.map +1 -0
- package/dist/orchestration/impl/index.js +14 -0
- package/dist/orchestration/impl/index.js.map +1 -0
- package/dist/orchestration/impl/k8s/deployment.d.ts +204 -0
- package/dist/orchestration/impl/k8s/deployment.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/deployment.js +620 -0
- package/dist/orchestration/impl/k8s/deployment.js.map +1 -0
- package/dist/orchestration/impl/k8s/helpers.d.ts +34 -0
- package/dist/orchestration/impl/k8s/helpers.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/helpers.js +377 -0
- package/dist/orchestration/impl/k8s/helpers.js.map +1 -0
- package/dist/orchestration/impl/k8s/index.d.ts +2 -0
- package/dist/orchestration/impl/k8s/index.d.ts.map +1 -0
- package/dist/orchestration/impl/k8s/index.js +6 -0
- package/dist/orchestration/impl/k8s/index.js.map +1 -0
- package/dist/orchestration/index.d.ts +53 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +257 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/message-consumer.d.ts +49 -0
- package/dist/orchestration/message-consumer.d.ts.map +1 -0
- package/dist/orchestration/message-consumer.js +406 -0
- package/dist/orchestration/message-consumer.js.map +1 -0
- package/dist/orchestration/scheduled-wakeup.d.ts +110 -0
- package/dist/orchestration/scheduled-wakeup.d.ts.map +1 -0
- package/dist/orchestration/scheduled-wakeup.js +500 -0
- package/dist/orchestration/scheduled-wakeup.js.map +1 -0
- package/dist/permissions/approval-policy.d.ts +28 -0
- package/dist/permissions/approval-policy.d.ts.map +1 -0
- package/dist/permissions/approval-policy.js +33 -0
- package/dist/permissions/approval-policy.js.map +1 -0
- package/dist/permissions/grant-store.d.ts +52 -0
- package/dist/permissions/grant-store.d.ts.map +1 -0
- package/dist/permissions/grant-store.js +192 -0
- package/dist/permissions/grant-store.js.map +1 -0
- package/dist/platform/file-handler.d.ts +51 -0
- package/dist/platform/file-handler.d.ts.map +1 -0
- package/dist/platform/file-handler.js +6 -0
- package/dist/platform/file-handler.js.map +1 -0
- package/dist/platform/link-buttons.d.ts +21 -0
- package/dist/platform/link-buttons.d.ts.map +1 -0
- package/dist/platform/link-buttons.js +43 -0
- package/dist/platform/link-buttons.js.map +1 -0
- package/dist/platform/renderer-utils.d.ts +10 -0
- package/dist/platform/renderer-utils.d.ts.map +1 -0
- package/dist/platform/renderer-utils.js +42 -0
- package/dist/platform/renderer-utils.js.map +1 -0
- package/dist/platform/response-renderer.d.ts +66 -0
- package/dist/platform/response-renderer.d.ts.map +1 -0
- package/dist/platform/response-renderer.js +8 -0
- package/dist/platform/response-renderer.js.map +1 -0
- package/dist/platform/unified-thread-consumer.d.ts +41 -0
- package/dist/platform/unified-thread-consumer.d.ts.map +1 -0
- package/dist/platform/unified-thread-consumer.js +143 -0
- package/dist/platform/unified-thread-consumer.js.map +1 -0
- package/dist/platform.d.ts +255 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +40 -0
- package/dist/platform.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +32 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +636 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/proxy-manager.d.ts +13 -0
- package/dist/proxy/proxy-manager.d.ts.map +1 -0
- package/dist/proxy/proxy-manager.js +68 -0
- package/dist/proxy/proxy-manager.js.map +1 -0
- package/dist/proxy/secret-proxy.d.ts +78 -0
- package/dist/proxy/secret-proxy.d.ts.map +1 -0
- package/dist/proxy/secret-proxy.js +309 -0
- package/dist/proxy/secret-proxy.js.map +1 -0
- package/dist/proxy/token-refresh-job.d.ts +29 -0
- package/dist/proxy/token-refresh-job.d.ts.map +1 -0
- package/dist/proxy/token-refresh-job.js +104 -0
- package/dist/proxy/token-refresh-job.js.map +1 -0
- package/dist/routes/internal/audio.d.ts +14 -0
- package/dist/routes/internal/audio.d.ts.map +1 -0
- package/dist/routes/internal/audio.js +118 -0
- package/dist/routes/internal/audio.js.map +1 -0
- package/dist/routes/internal/device-auth.d.ts +42 -0
- package/dist/routes/internal/device-auth.d.ts.map +1 -0
- package/dist/routes/internal/device-auth.js +397 -0
- package/dist/routes/internal/device-auth.js.map +1 -0
- package/dist/routes/internal/files.d.ts +9 -0
- package/dist/routes/internal/files.d.ts.map +1 -0
- package/dist/routes/internal/files.js +175 -0
- package/dist/routes/internal/files.js.map +1 -0
- package/dist/routes/internal/history.d.ts +9 -0
- package/dist/routes/internal/history.d.ts.map +1 -0
- package/dist/routes/internal/history.js +55 -0
- package/dist/routes/internal/history.js.map +1 -0
- package/dist/routes/internal/images.d.ts +10 -0
- package/dist/routes/internal/images.d.ts.map +1 -0
- package/dist/routes/internal/images.js +101 -0
- package/dist/routes/internal/images.js.map +1 -0
- package/dist/routes/internal/interactions.d.ts +9 -0
- package/dist/routes/internal/interactions.d.ts.map +1 -0
- package/dist/routes/internal/interactions.js +53 -0
- package/dist/routes/internal/interactions.js.map +1 -0
- package/dist/routes/internal/middleware.d.ts +7 -0
- package/dist/routes/internal/middleware.d.ts.map +1 -0
- package/dist/routes/internal/middleware.js +24 -0
- package/dist/routes/internal/middleware.js.map +1 -0
- package/dist/routes/internal/schedule.d.ts +14 -0
- package/dist/routes/internal/schedule.d.ts.map +1 -0
- package/dist/routes/internal/schedule.js +169 -0
- package/dist/routes/internal/schedule.js.map +1 -0
- package/dist/routes/internal/types.d.ts +22 -0
- package/dist/routes/internal/types.d.ts.map +1 -0
- package/dist/routes/internal/types.js +6 -0
- package/dist/routes/internal/types.js.map +1 -0
- package/dist/routes/openapi-auto.d.ts +8 -0
- package/dist/routes/openapi-auto.d.ts.map +1 -0
- package/dist/routes/openapi-auto.js +196 -0
- package/dist/routes/openapi-auto.js.map +1 -0
- package/dist/routes/public/agent-access.d.ts +11 -0
- package/dist/routes/public/agent-access.d.ts.map +1 -0
- package/dist/routes/public/agent-access.js +11 -0
- package/dist/routes/public/agent-access.js.map +1 -0
- package/dist/routes/public/agent-config.d.ts +42 -0
- package/dist/routes/public/agent-config.d.ts.map +1 -0
- package/dist/routes/public/agent-config.js +415 -0
- package/dist/routes/public/agent-config.js.map +1 -0
- package/dist/routes/public/agent-history.d.ts +17 -0
- package/dist/routes/public/agent-history.d.ts.map +1 -0
- package/dist/routes/public/agent-history.js +335 -0
- package/dist/routes/public/agent-history.js.map +1 -0
- package/dist/routes/public/agent-schedules.d.ts +18 -0
- package/dist/routes/public/agent-schedules.d.ts.map +1 -0
- package/dist/routes/public/agent-schedules.js +242 -0
- package/dist/routes/public/agent-schedules.js.map +1 -0
- package/dist/routes/public/agent.d.ts +23 -0
- package/dist/routes/public/agent.d.ts.map +1 -0
- package/dist/routes/public/agent.js +864 -0
- package/dist/routes/public/agent.js.map +1 -0
- package/dist/routes/public/agents.d.ts +22 -0
- package/dist/routes/public/agents.d.ts.map +1 -0
- package/dist/routes/public/agents.js +257 -0
- package/dist/routes/public/agents.js.map +1 -0
- package/dist/routes/public/channels.d.ts +23 -0
- package/dist/routes/public/channels.d.ts.map +1 -0
- package/dist/routes/public/channels.js +131 -0
- package/dist/routes/public/channels.js.map +1 -0
- package/dist/routes/public/cli-auth.d.ts +12 -0
- package/dist/routes/public/cli-auth.d.ts.map +1 -0
- package/dist/routes/public/cli-auth.js +552 -0
- package/dist/routes/public/cli-auth.js.map +1 -0
- package/dist/routes/public/connections.d.ts +20 -0
- package/dist/routes/public/connections.d.ts.map +1 -0
- package/dist/routes/public/connections.js +464 -0
- package/dist/routes/public/connections.js.map +1 -0
- package/dist/routes/public/landing.d.ts +3 -0
- package/dist/routes/public/landing.d.ts.map +1 -0
- package/dist/routes/public/landing.js +17 -0
- package/dist/routes/public/landing.js.map +1 -0
- package/dist/routes/public/oauth.d.ts +24 -0
- package/dist/routes/public/oauth.d.ts.map +1 -0
- package/dist/routes/public/oauth.js +108 -0
- package/dist/routes/public/oauth.js.map +1 -0
- package/dist/routes/public/settings-auth.d.ts +28 -0
- package/dist/routes/public/settings-auth.d.ts.map +1 -0
- package/dist/routes/public/settings-auth.js +90 -0
- package/dist/routes/public/settings-auth.js.map +1 -0
- package/dist/routes/public/slack.d.ts +4 -0
- package/dist/routes/public/slack.d.ts.map +1 -0
- package/dist/routes/public/slack.js +119 -0
- package/dist/routes/public/slack.js.map +1 -0
- package/dist/routes/shared/agent-ownership.d.ts +15 -0
- package/dist/routes/shared/agent-ownership.d.ts.map +1 -0
- package/dist/routes/shared/agent-ownership.js +61 -0
- package/dist/routes/shared/agent-ownership.js.map +1 -0
- package/dist/routes/shared/token-verifier.d.ts +21 -0
- package/dist/routes/shared/token-verifier.d.ts.map +1 -0
- package/dist/routes/shared/token-verifier.js +25 -0
- package/dist/routes/shared/token-verifier.js.map +1 -0
- package/dist/services/core-services.d.ts +133 -0
- package/dist/services/core-services.d.ts.map +1 -0
- package/dist/services/core-services.js +728 -0
- package/dist/services/core-services.js.map +1 -0
- package/dist/services/image-generation-service.d.ts +38 -0
- package/dist/services/image-generation-service.d.ts.map +1 -0
- package/dist/services/image-generation-service.js +167 -0
- package/dist/services/image-generation-service.js.map +1 -0
- package/dist/services/instruction-service.d.ts +41 -0
- package/dist/services/instruction-service.d.ts.map +1 -0
- package/dist/services/instruction-service.js +252 -0
- package/dist/services/instruction-service.js.map +1 -0
- package/dist/services/mcp-registry.d.ts +31 -0
- package/dist/services/mcp-registry.d.ts.map +1 -0
- package/dist/services/mcp-registry.js +69 -0
- package/dist/services/mcp-registry.js.map +1 -0
- package/dist/services/platform-helpers.d.ts +47 -0
- package/dist/services/platform-helpers.d.ts.map +1 -0
- package/dist/services/platform-helpers.js +200 -0
- package/dist/services/platform-helpers.js.map +1 -0
- package/dist/services/session-manager.d.ts +72 -0
- package/dist/services/session-manager.d.ts.map +1 -0
- package/dist/services/session-manager.js +199 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/services/settings-resolver.d.ts +25 -0
- package/dist/services/settings-resolver.d.ts.map +1 -0
- package/dist/services/settings-resolver.js +55 -0
- package/dist/services/settings-resolver.js.map +1 -0
- package/dist/services/system-config-resolver.d.ts +25 -0
- package/dist/services/system-config-resolver.d.ts.map +1 -0
- package/dist/services/system-config-resolver.js +73 -0
- package/dist/services/system-config-resolver.js.map +1 -0
- package/dist/services/system-skills-service.d.ts +38 -0
- package/dist/services/system-skills-service.d.ts.map +1 -0
- package/dist/services/system-skills-service.js +186 -0
- package/dist/services/system-skills-service.js.map +1 -0
- package/dist/services/transcription-service.d.ts +91 -0
- package/dist/services/transcription-service.d.ts.map +1 -0
- package/dist/services/transcription-service.js +465 -0
- package/dist/services/transcription-service.js.map +1 -0
- package/dist/session.d.ts +75 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +19 -0
- package/dist/session.js.map +1 -0
- package/dist/spaces/index.d.ts +2 -0
- package/dist/spaces/index.d.ts.map +1 -0
- package/dist/spaces/index.js +18 -0
- package/dist/spaces/index.js.map +1 -0
- package/dist/spaces/space-resolver.d.ts +10 -0
- package/dist/spaces/space-resolver.d.ts.map +1 -0
- package/dist/spaces/space-resolver.js +17 -0
- package/dist/spaces/space-resolver.js.map +1 -0
- package/dist/stores/in-memory-agent-store.d.ts +57 -0
- package/dist/stores/in-memory-agent-store.d.ts.map +1 -0
- package/dist/stores/in-memory-agent-store.js +304 -0
- package/dist/stores/in-memory-agent-store.js.map +1 -0
- package/dist/stores/redis-agent-store.d.ts +57 -0
- package/dist/stores/redis-agent-store.d.ts.map +1 -0
- package/dist/stores/redis-agent-store.js +163 -0
- package/dist/stores/redis-agent-store.js.map +1 -0
- package/dist/utils/public-url.d.ts +6 -0
- package/dist/utils/public-url.d.ts.map +1 -0
- package/dist/utils/public-url.js +33 -0
- package/dist/utils/public-url.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +32 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +56 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,636 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.__testOnly = void 0;
|
|
40
|
+
exports.setProxyGrantStore = setProxyGrantStore;
|
|
41
|
+
exports.startHttpProxy = startHttpProxy;
|
|
42
|
+
exports.stopHttpProxy = stopHttpProxy;
|
|
43
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
44
|
+
const dns = __importStar(require("node:dns/promises"));
|
|
45
|
+
const http = __importStar(require("node:http"));
|
|
46
|
+
const net = __importStar(require("node:net"));
|
|
47
|
+
const node_url_1 = require("node:url");
|
|
48
|
+
const core_1 = require("@lobu/core");
|
|
49
|
+
const network_allowlist_1 = require("../config/network-allowlist");
|
|
50
|
+
const logger = (0, core_1.createLogger)("http-proxy");
|
|
51
|
+
const blockedIpv4Ranges = [
|
|
52
|
+
["0.0.0.0", 8],
|
|
53
|
+
["10.0.0.0", 8],
|
|
54
|
+
["100.64.0.0", 10],
|
|
55
|
+
["127.0.0.0", 8],
|
|
56
|
+
["169.254.0.0", 16],
|
|
57
|
+
["172.16.0.0", 12],
|
|
58
|
+
["192.168.0.0", 16],
|
|
59
|
+
["198.18.0.0", 15],
|
|
60
|
+
["224.0.0.0", 4],
|
|
61
|
+
["240.0.0.0", 4],
|
|
62
|
+
];
|
|
63
|
+
const blockedIpv6Ranges = [
|
|
64
|
+
["fc00::", 7],
|
|
65
|
+
["fe80::", 10],
|
|
66
|
+
["ff00::", 8],
|
|
67
|
+
];
|
|
68
|
+
const blockedIpv4List = new net.BlockList();
|
|
69
|
+
for (const [address, prefix] of blockedIpv4Ranges) {
|
|
70
|
+
blockedIpv4List.addSubnet(address, prefix, "ipv4");
|
|
71
|
+
}
|
|
72
|
+
const blockedIpv6List = new net.BlockList();
|
|
73
|
+
blockedIpv6List.addAddress("::", "ipv6");
|
|
74
|
+
blockedIpv6List.addAddress("::1", "ipv6");
|
|
75
|
+
for (const [address, prefix] of blockedIpv6Ranges) {
|
|
76
|
+
blockedIpv6List.addSubnet(address, prefix, "ipv6");
|
|
77
|
+
}
|
|
78
|
+
// Cache for global defaults (used when no deployment identified)
|
|
79
|
+
let globalConfig = null;
|
|
80
|
+
// Module-level grant store reference for domain grant checks
|
|
81
|
+
let proxyGrantStore = null;
|
|
82
|
+
/**
|
|
83
|
+
* Set the grant store for the HTTP proxy to check domain grants.
|
|
84
|
+
* Called during gateway initialization.
|
|
85
|
+
*/
|
|
86
|
+
function setProxyGrantStore(store) {
|
|
87
|
+
proxyGrantStore = store;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get global network config (lazy loaded)
|
|
91
|
+
*/
|
|
92
|
+
function getGlobalConfig() {
|
|
93
|
+
if (!globalConfig) {
|
|
94
|
+
globalConfig = {
|
|
95
|
+
allowedDomains: (0, network_allowlist_1.loadAllowedDomains)(),
|
|
96
|
+
deniedDomains: (0, network_allowlist_1.loadDisallowedDomains)(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return globalConfig;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Unified domain access check: global config → grant store.
|
|
103
|
+
*
|
|
104
|
+
* 1. If denied by global blocklist → block
|
|
105
|
+
* 2. If allowed by global allowlist → check grantStore.isDenied() → allow/block
|
|
106
|
+
* 3. If not in global list → check grantStore.hasGrant() → allow/block
|
|
107
|
+
*/
|
|
108
|
+
async function checkDomainAccess(hostname, agentId) {
|
|
109
|
+
const global = getGlobalConfig();
|
|
110
|
+
// Global blocklist always takes precedence
|
|
111
|
+
if (global.deniedDomains.length > 0 &&
|
|
112
|
+
matchesDomainPattern(hostname, global.deniedDomains)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
// Check if globally allowed (unrestricted or in allowlist)
|
|
116
|
+
const globallyAllowed = isHostnameAllowed(hostname, global.allowedDomains, global.deniedDomains);
|
|
117
|
+
if (globallyAllowed) {
|
|
118
|
+
// Even if globally allowed, a per-agent deny grant can override
|
|
119
|
+
if (proxyGrantStore && agentId) {
|
|
120
|
+
const denied = await proxyGrantStore.isDenied(agentId, hostname);
|
|
121
|
+
if (denied) {
|
|
122
|
+
logger.debug(`Domain ${hostname} denied via grant (agent: ${agentId})`);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
// Not globally allowed — check grant store for per-agent access
|
|
129
|
+
if (proxyGrantStore && agentId) {
|
|
130
|
+
const granted = await proxyGrantStore.hasGrant(agentId, hostname);
|
|
131
|
+
if (granted) {
|
|
132
|
+
logger.debug(`Domain ${hostname} allowed via grant (agent: ${agentId})`);
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
function parseMappedIpv4Address(ip) {
|
|
139
|
+
const normalized = ip.toLowerCase();
|
|
140
|
+
if (!normalized.startsWith("::ffff:")) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const mapped = normalized.substring("::ffff:".length);
|
|
144
|
+
return net.isIP(mapped) === 4 ? mapped : null;
|
|
145
|
+
}
|
|
146
|
+
function parseMappedIpv4HexAddress(ip) {
|
|
147
|
+
const normalized = ip.toLowerCase();
|
|
148
|
+
if (!normalized.startsWith("::ffff:")) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
const mapped = normalized.substring("::ffff:".length);
|
|
152
|
+
if (mapped.includes(".")) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const parts = mapped.split(":");
|
|
156
|
+
if (parts.length !== 2) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const high = Number.parseInt(parts[0] || "", 16);
|
|
160
|
+
const low = Number.parseInt(parts[1] || "", 16);
|
|
161
|
+
if (Number.isNaN(high) ||
|
|
162
|
+
Number.isNaN(low) ||
|
|
163
|
+
high < 0 ||
|
|
164
|
+
high > 0xffff ||
|
|
165
|
+
low < 0 ||
|
|
166
|
+
low > 0xffff) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
return `${(high >> 8) & 0xff}.${high & 0xff}.${(low >> 8) & 0xff}.${low & 0xff}`;
|
|
170
|
+
}
|
|
171
|
+
function isBlockedIpAddress(ip) {
|
|
172
|
+
const ipv6WithoutZone = ip.split("%", 1)[0] || ip;
|
|
173
|
+
const mappedIpv4 = parseMappedIpv4Address(ipv6WithoutZone) ||
|
|
174
|
+
parseMappedIpv4HexAddress(ipv6WithoutZone);
|
|
175
|
+
if (mappedIpv4) {
|
|
176
|
+
return blockedIpv4List.check(mappedIpv4, "ipv4");
|
|
177
|
+
}
|
|
178
|
+
const family = net.isIP(ipv6WithoutZone);
|
|
179
|
+
if (family === 4) {
|
|
180
|
+
return blockedIpv4List.check(ipv6WithoutZone, "ipv4");
|
|
181
|
+
}
|
|
182
|
+
if (family === 6) {
|
|
183
|
+
return blockedIpv6List.check(ipv6WithoutZone, "ipv6");
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
exports.__testOnly = {
|
|
188
|
+
isBlockedIpAddress,
|
|
189
|
+
};
|
|
190
|
+
async function resolveAndValidateTarget(hostname) {
|
|
191
|
+
var _a;
|
|
192
|
+
const ipFamily = net.isIP(hostname);
|
|
193
|
+
if (ipFamily !== 0) {
|
|
194
|
+
if (isBlockedIpAddress(hostname)) {
|
|
195
|
+
return {
|
|
196
|
+
ok: false,
|
|
197
|
+
statusCode: 403,
|
|
198
|
+
clientMessage: `403 Forbidden - Target IP not allowed: ${hostname}`,
|
|
199
|
+
reason: `target is local/private IP (${hostname})`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return { ok: true, resolvedIp: hostname };
|
|
203
|
+
}
|
|
204
|
+
let addresses;
|
|
205
|
+
try {
|
|
206
|
+
addresses = await dns.lookup(hostname, { all: true, verbatim: true });
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
const message = error instanceof Error ? error.message : "unknown error";
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
statusCode: 502,
|
|
213
|
+
clientMessage: `Bad Gateway: Could not resolve target host ${hostname}`,
|
|
214
|
+
reason: `DNS lookup failed for ${hostname}: ${message}`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (addresses.length === 0) {
|
|
218
|
+
return {
|
|
219
|
+
ok: false,
|
|
220
|
+
statusCode: 502,
|
|
221
|
+
clientMessage: `Bad Gateway: No DNS results for ${hostname}`,
|
|
222
|
+
reason: `DNS lookup returned no addresses for ${hostname}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
const blockedAddress = addresses.find((addr) => isBlockedIpAddress(addr.address));
|
|
226
|
+
if (blockedAddress) {
|
|
227
|
+
return {
|
|
228
|
+
ok: false,
|
|
229
|
+
statusCode: 403,
|
|
230
|
+
clientMessage: `403 Forbidden - Target resolves to local/private IP: ${hostname}`,
|
|
231
|
+
reason: `${hostname} resolved to blocked IP ${blockedAddress.address}`,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
return { ok: true, resolvedIp: (_a = addresses[0]) === null || _a === void 0 ? void 0 : _a.address };
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Extract deployment name and token from Proxy-Authorization Basic auth header.
|
|
238
|
+
* Workers send: HTTP_PROXY=http://<deploymentName>:<token>@gateway:8118
|
|
239
|
+
* This creates a Basic auth header with username=deploymentName, password=token
|
|
240
|
+
*/
|
|
241
|
+
function extractProxyCredentials(req) {
|
|
242
|
+
const authHeader = req.headers["proxy-authorization"];
|
|
243
|
+
if (!authHeader || typeof authHeader !== "string") {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
// Parse Basic auth: "Basic base64(username:password)"
|
|
247
|
+
const match = authHeader.match(/^Basic\s+(.+)$/i);
|
|
248
|
+
if (!match || !match[1]) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
try {
|
|
252
|
+
const decoded = Buffer.from(match[1], "base64").toString("utf-8");
|
|
253
|
+
const colonIndex = decoded.indexOf(":");
|
|
254
|
+
if (colonIndex === -1) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
const deploymentName = decoded.substring(0, colonIndex);
|
|
258
|
+
const token = decoded.substring(colonIndex + 1);
|
|
259
|
+
if (!deploymentName || !token) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
return { deploymentName, token };
|
|
263
|
+
}
|
|
264
|
+
catch (_a) {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Validate proxy authentication by verifying the encrypted worker token
|
|
270
|
+
* and cross-checking the claimed deployment name.
|
|
271
|
+
*/
|
|
272
|
+
function validateProxyAuth(req) {
|
|
273
|
+
const creds = extractProxyCredentials(req);
|
|
274
|
+
if (!creds) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const tokenData = (0, core_1.verifyWorkerToken)(creds.token);
|
|
278
|
+
if (!tokenData) {
|
|
279
|
+
logger.warn(`Proxy auth failed: invalid token (claimed deployment: ${creds.deploymentName})`);
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
const deploymentMatch = tokenData.deploymentName.length === creds.deploymentName.length &&
|
|
283
|
+
node_crypto_1.default.timingSafeEqual(Buffer.from(tokenData.deploymentName), Buffer.from(creds.deploymentName));
|
|
284
|
+
if (!deploymentMatch) {
|
|
285
|
+
logger.warn(`Proxy auth failed: deployment mismatch (claimed: ${creds.deploymentName}, token: ${tokenData.deploymentName})`);
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
return { deploymentName: creds.deploymentName, tokenData };
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Check if a hostname matches any domain patterns
|
|
292
|
+
* Supports exact matches and wildcard patterns (.example.com matches *.example.com)
|
|
293
|
+
*/
|
|
294
|
+
function matchesDomainPattern(hostname, patterns) {
|
|
295
|
+
const lowerHostname = hostname.toLowerCase();
|
|
296
|
+
for (const pattern of patterns) {
|
|
297
|
+
const lowerPattern = pattern.toLowerCase();
|
|
298
|
+
if (lowerPattern.startsWith(".")) {
|
|
299
|
+
// Wildcard pattern: .example.com matches *.example.com
|
|
300
|
+
const domain = lowerPattern.substring(1);
|
|
301
|
+
if (lowerHostname === domain || lowerHostname.endsWith(`.${domain}`)) {
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else if (lowerPattern === lowerHostname) {
|
|
306
|
+
// Exact match
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Check if a hostname is allowed based on allowlist/blocklist configuration.
|
|
314
|
+
* Rules:
|
|
315
|
+
* - deniedDomains are checked first (take precedence)
|
|
316
|
+
* - allowedDomains are checked second
|
|
317
|
+
* - If allowedDomains contains "*", unrestricted mode is enabled
|
|
318
|
+
* - If allowedDomains is empty, complete isolation (deny all)
|
|
319
|
+
*/
|
|
320
|
+
function isHostnameAllowed(hostname, allowedDomains, deniedDomains) {
|
|
321
|
+
// Unrestricted mode - allow all except explicitly disallowed
|
|
322
|
+
if ((0, network_allowlist_1.isUnrestrictedMode)(allowedDomains)) {
|
|
323
|
+
if (deniedDomains.length === 0) {
|
|
324
|
+
return true; // No blocklist, allow all
|
|
325
|
+
}
|
|
326
|
+
return !matchesDomainPattern(hostname, deniedDomains);
|
|
327
|
+
}
|
|
328
|
+
// Complete isolation mode - deny all
|
|
329
|
+
if (allowedDomains.length === 0) {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
// Allowlist mode - check if allowed
|
|
333
|
+
const isAllowed = matchesDomainPattern(hostname, allowedDomains);
|
|
334
|
+
// Even if allowed, check blocklist
|
|
335
|
+
if (isAllowed && deniedDomains.length > 0) {
|
|
336
|
+
return !matchesDomainPattern(hostname, deniedDomains);
|
|
337
|
+
}
|
|
338
|
+
return isAllowed;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Extract hostname from CONNECT request
|
|
342
|
+
*/
|
|
343
|
+
function extractConnectHostname(url) {
|
|
344
|
+
// CONNECT requests are in format: "host:port"
|
|
345
|
+
const match = url.match(/^([^:]+):\d+$/);
|
|
346
|
+
return (match === null || match === void 0 ? void 0 : match[1]) ? match[1] : null;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Handle HTTPS CONNECT tunneling with per-deployment network config
|
|
350
|
+
*/
|
|
351
|
+
async function handleConnect(req, clientSocket, head) {
|
|
352
|
+
const url = req.url || "";
|
|
353
|
+
const hostname = extractConnectHostname(url);
|
|
354
|
+
if (!hostname) {
|
|
355
|
+
logger.warn(`Invalid CONNECT request: ${url}`);
|
|
356
|
+
clientSocket.write("HTTP/1.1 400 Bad Request\r\n\r\n");
|
|
357
|
+
clientSocket.end();
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
// Validate worker token
|
|
361
|
+
const auth = validateProxyAuth(req);
|
|
362
|
+
if (!auth) {
|
|
363
|
+
logger.warn(`Proxy auth required for CONNECT to ${hostname}`);
|
|
364
|
+
try {
|
|
365
|
+
clientSocket.write('HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: Basic realm="lobu-proxy"\r\n\r\n');
|
|
366
|
+
clientSocket.end();
|
|
367
|
+
}
|
|
368
|
+
catch (_a) {
|
|
369
|
+
// Client may have already disconnected
|
|
370
|
+
}
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const { deploymentName, tokenData } = auth;
|
|
374
|
+
// Check domain access: global config → grant store
|
|
375
|
+
const allowed = await checkDomainAccess(hostname, tokenData.agentId);
|
|
376
|
+
if (!allowed) {
|
|
377
|
+
logger.warn(`Blocked CONNECT to ${hostname} (deployment: ${deploymentName})`);
|
|
378
|
+
try {
|
|
379
|
+
clientSocket.write(`HTTP/1.1 403 Domain not allowed: ${hostname}. Network access is configured via lobu.toml or the gateway configuration APIs.\r\nContent-Type: text/plain\r\n\r\n403 Forbidden - Domain not allowed: ${hostname}. Network access is configured via lobu.toml or the gateway configuration APIs.\r\n`);
|
|
380
|
+
clientSocket.end();
|
|
381
|
+
}
|
|
382
|
+
catch (_b) {
|
|
383
|
+
// Client may have already disconnected
|
|
384
|
+
}
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
const targetResolution = await resolveAndValidateTarget(hostname);
|
|
388
|
+
if (!targetResolution.ok) {
|
|
389
|
+
logger.warn(`Blocked CONNECT to ${hostname} (deployment: ${deploymentName}) - ${targetResolution.reason}`);
|
|
390
|
+
try {
|
|
391
|
+
clientSocket.write(`HTTP/1.1 ${targetResolution.statusCode} ${targetResolution.statusCode === 403 ? "Forbidden" : "Bad Gateway"}\r\nContent-Type: text/plain\r\n\r\n${targetResolution.clientMessage}\r\n`);
|
|
392
|
+
clientSocket.end();
|
|
393
|
+
}
|
|
394
|
+
catch (_c) {
|
|
395
|
+
// Client may have already disconnected
|
|
396
|
+
}
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
const resolvedIp = targetResolution.resolvedIp;
|
|
400
|
+
if (!resolvedIp) {
|
|
401
|
+
clientSocket.write("HTTP/1.1 500 Internal Server Error\r\n\r\n");
|
|
402
|
+
clientSocket.end();
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
logger.debug(`Allowing CONNECT to ${hostname} via ${resolvedIp}`);
|
|
406
|
+
// Parse host and port
|
|
407
|
+
const [host, portStr] = url.split(":");
|
|
408
|
+
const port = portStr ? parseInt(portStr, 10) || 443 : 443;
|
|
409
|
+
if (!host) {
|
|
410
|
+
logger.warn(`Invalid CONNECT host: ${url}`);
|
|
411
|
+
clientSocket.write("HTTP/1.1 400 Bad Request\r\n\r\n");
|
|
412
|
+
clientSocket.end();
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
// Establish connection to target
|
|
416
|
+
const targetSocket = net.connect(port, resolvedIp, () => {
|
|
417
|
+
// Send success response to client
|
|
418
|
+
clientSocket.write("HTTP/1.1 200 Connection Established\r\n\r\n");
|
|
419
|
+
// Pipe the connection bidirectionally
|
|
420
|
+
targetSocket.write(head);
|
|
421
|
+
targetSocket.pipe(clientSocket);
|
|
422
|
+
clientSocket.pipe(targetSocket);
|
|
423
|
+
});
|
|
424
|
+
targetSocket.on("error", (err) => {
|
|
425
|
+
logger.debug(`Target connection error for ${hostname}: ${err.message}`);
|
|
426
|
+
try {
|
|
427
|
+
clientSocket.end();
|
|
428
|
+
}
|
|
429
|
+
catch (_a) {
|
|
430
|
+
// Ignore errors when closing already-closed socket
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
clientSocket.on("error", (err) => {
|
|
434
|
+
// ECONNRESET is common when clients drop connections - don't log as error
|
|
435
|
+
if (err.code === "ECONNRESET") {
|
|
436
|
+
logger.debug(`Client disconnected for ${hostname} (ECONNRESET)`);
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
logger.debug(`Client connection error for ${hostname}: ${err.message}`);
|
|
440
|
+
}
|
|
441
|
+
try {
|
|
442
|
+
targetSocket.end();
|
|
443
|
+
}
|
|
444
|
+
catch (_a) {
|
|
445
|
+
// Ignore errors when closing already-closed socket
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
// Handle close events to clean up
|
|
449
|
+
targetSocket.on("close", () => {
|
|
450
|
+
try {
|
|
451
|
+
clientSocket.end();
|
|
452
|
+
}
|
|
453
|
+
catch (_a) {
|
|
454
|
+
// Ignore
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
clientSocket.on("close", () => {
|
|
458
|
+
try {
|
|
459
|
+
targetSocket.end();
|
|
460
|
+
}
|
|
461
|
+
catch (_a) {
|
|
462
|
+
// Ignore
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Handle regular HTTP proxy requests with per-deployment network config
|
|
468
|
+
*/
|
|
469
|
+
async function handleProxyRequest(req, res) {
|
|
470
|
+
var _a;
|
|
471
|
+
const targetUrl = req.url;
|
|
472
|
+
if (!targetUrl) {
|
|
473
|
+
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
474
|
+
res.end("Bad Request: No URL provided\n");
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
let parsedUrl;
|
|
478
|
+
try {
|
|
479
|
+
parsedUrl = new node_url_1.URL(targetUrl);
|
|
480
|
+
}
|
|
481
|
+
catch (_b) {
|
|
482
|
+
res.writeHead(400, { "Content-Type": "text/plain" });
|
|
483
|
+
res.end("Bad Request: Invalid URL\n");
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
const hostname = parsedUrl.hostname;
|
|
487
|
+
// Validate worker token
|
|
488
|
+
const auth = validateProxyAuth(req);
|
|
489
|
+
if (!auth) {
|
|
490
|
+
logger.warn(`Proxy auth required for ${req.method} ${hostname}`);
|
|
491
|
+
res.writeHead(407, {
|
|
492
|
+
"Content-Type": "text/plain",
|
|
493
|
+
"Proxy-Authenticate": 'Basic realm="lobu-proxy"',
|
|
494
|
+
});
|
|
495
|
+
res.end("407 Proxy Authentication Required\n");
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
const { deploymentName, tokenData } = auth;
|
|
499
|
+
// Check domain access: global config → grant store
|
|
500
|
+
const allowed = await checkDomainAccess(hostname, tokenData.agentId);
|
|
501
|
+
if (!allowed) {
|
|
502
|
+
logger.warn(`Blocked request to ${hostname} (deployment: ${deploymentName})`);
|
|
503
|
+
res.writeHead(403, `Domain not allowed: ${hostname}`, {
|
|
504
|
+
"Content-Type": "text/plain",
|
|
505
|
+
});
|
|
506
|
+
res.end(`403 Forbidden - Domain not allowed: ${hostname}. Network access is configured via lobu.toml or the gateway configuration APIs.\n`);
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
const targetResolution = await resolveAndValidateTarget(hostname);
|
|
510
|
+
if (!targetResolution.ok) {
|
|
511
|
+
logger.warn(`Blocked request to ${hostname} (deployment: ${deploymentName}) - ${targetResolution.reason}`);
|
|
512
|
+
res.writeHead((_a = targetResolution.statusCode) !== null && _a !== void 0 ? _a : 502, {
|
|
513
|
+
"Content-Type": "text/plain",
|
|
514
|
+
});
|
|
515
|
+
res.end(`${targetResolution.clientMessage}\n`);
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const resolvedIp = targetResolution.resolvedIp;
|
|
519
|
+
if (!resolvedIp) {
|
|
520
|
+
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
521
|
+
res.end("Internal proxy error\n");
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
logger.debug(`Proxying ${req.method} ${hostname}${parsedUrl.pathname} via ${resolvedIp}`);
|
|
525
|
+
// Remove proxy-authorization header before forwarding
|
|
526
|
+
const forwardHeaders = Object.assign({}, req.headers);
|
|
527
|
+
delete forwardHeaders["proxy-authorization"];
|
|
528
|
+
// Forward the request
|
|
529
|
+
const options = {
|
|
530
|
+
hostname: resolvedIp,
|
|
531
|
+
port: parsedUrl.port || (parsedUrl.protocol === "https:" ? 443 : 80),
|
|
532
|
+
path: parsedUrl.pathname + parsedUrl.search,
|
|
533
|
+
method: req.method,
|
|
534
|
+
headers: forwardHeaders,
|
|
535
|
+
};
|
|
536
|
+
const proxyReq = http.request(options, (proxyRes) => {
|
|
537
|
+
// Forward response headers
|
|
538
|
+
res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
|
|
539
|
+
// Stream response body
|
|
540
|
+
proxyRes.pipe(res);
|
|
541
|
+
});
|
|
542
|
+
proxyReq.on("error", (err) => {
|
|
543
|
+
logger.error(`Proxy request error for ${hostname}:`, err.message);
|
|
544
|
+
if (!res.headersSent) {
|
|
545
|
+
res.writeHead(502, { "Content-Type": "text/plain" });
|
|
546
|
+
res.end("Bad Gateway: Could not reach target server\n");
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
res.end();
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
// Stream request body
|
|
553
|
+
req.pipe(proxyReq);
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Start HTTP proxy server with per-deployment network config support.
|
|
557
|
+
*
|
|
558
|
+
* Workers identify themselves via Proxy-Authorization Basic auth:
|
|
559
|
+
* HTTP_PROXY=http://<deploymentName>:<token>@gateway:8118
|
|
560
|
+
*
|
|
561
|
+
* The proxy validates the encrypted worker token, cross-checks the
|
|
562
|
+
* claimed deployment name, and looks up per-deployment network config.
|
|
563
|
+
* Returns 407 if authentication fails.
|
|
564
|
+
*
|
|
565
|
+
* @param port - Port to listen on (default 8118)
|
|
566
|
+
* @param host - Bind address (default "::" for all interfaces)
|
|
567
|
+
* @returns Promise that resolves with the server once listening, or rejects on error
|
|
568
|
+
*/
|
|
569
|
+
function startHttpProxy(port = 8118, host = "::") {
|
|
570
|
+
return new Promise((resolve, reject) => {
|
|
571
|
+
const global = getGlobalConfig();
|
|
572
|
+
const server = http.createServer((req, res) => {
|
|
573
|
+
handleProxyRequest(req, res).catch((err) => {
|
|
574
|
+
logger.error("Error handling proxy request:", err);
|
|
575
|
+
if (!res.headersSent) {
|
|
576
|
+
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
577
|
+
res.end("Internal proxy error\n");
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
});
|
|
581
|
+
// Handle CONNECT method for HTTPS tunneling
|
|
582
|
+
server.on("connect", (req, clientSocket, head) => {
|
|
583
|
+
handleConnect(req, clientSocket, head).catch((err) => {
|
|
584
|
+
logger.error("Error handling CONNECT:", err);
|
|
585
|
+
try {
|
|
586
|
+
clientSocket.write("HTTP/1.1 500 Internal Server Error\r\n\r\n");
|
|
587
|
+
clientSocket.end();
|
|
588
|
+
}
|
|
589
|
+
catch (_a) {
|
|
590
|
+
// Ignore
|
|
591
|
+
}
|
|
592
|
+
});
|
|
593
|
+
});
|
|
594
|
+
server.on("error", (err) => {
|
|
595
|
+
logger.error("HTTP proxy server error:", err);
|
|
596
|
+
reject(err);
|
|
597
|
+
});
|
|
598
|
+
server.listen(port, host, () => {
|
|
599
|
+
// Remove the startup error listener so it doesn't reject later operational errors
|
|
600
|
+
server.removeAllListeners("error");
|
|
601
|
+
server.on("error", (err) => {
|
|
602
|
+
logger.error("HTTP proxy server error:", err);
|
|
603
|
+
});
|
|
604
|
+
let mode;
|
|
605
|
+
if ((0, network_allowlist_1.isUnrestrictedMode)(global.allowedDomains)) {
|
|
606
|
+
mode = "unrestricted";
|
|
607
|
+
}
|
|
608
|
+
else if (global.allowedDomains.length > 0) {
|
|
609
|
+
mode = "allowlist";
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
mode = "complete-isolation";
|
|
613
|
+
}
|
|
614
|
+
logger.debug(`HTTP proxy started on ${host}:${port} (mode=${mode}, allowed=${global.allowedDomains.length}, denied=${global.deniedDomains.length})`);
|
|
615
|
+
resolve(server);
|
|
616
|
+
});
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Stop HTTP proxy server
|
|
621
|
+
*/
|
|
622
|
+
function stopHttpProxy(server) {
|
|
623
|
+
return new Promise((resolve, reject) => {
|
|
624
|
+
server.close((err) => {
|
|
625
|
+
if (err) {
|
|
626
|
+
logger.error("Error stopping HTTP proxy:", err);
|
|
627
|
+
reject(err);
|
|
628
|
+
}
|
|
629
|
+
else {
|
|
630
|
+
logger.info("HTTP proxy stopped");
|
|
631
|
+
resolve();
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
//# sourceMappingURL=http-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/proxy/http-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start filtering HTTP proxy for worker network isolation
|
|
3
|
+
* Workers can only access internet via this proxy, which enforces domain allowlist/blocklist
|
|
4
|
+
*
|
|
5
|
+
* Behavior based on environment configuration:
|
|
6
|
+
* - Empty/unset: Deny all (complete isolation)
|
|
7
|
+
* - WORKER_ALLOWED_DOMAINS=*: Allow all (unrestricted)
|
|
8
|
+
* - WORKER_ALLOWED_DOMAINS=domains: Allowlist mode
|
|
9
|
+
* - WORKER_DISALLOWED_DOMAINS=domains: Blocklist mode
|
|
10
|
+
* - Both set: Allowlist with exceptions
|
|
11
|
+
*/
|
|
12
|
+
export declare function startFilteringProxy(): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=proxy-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-manager.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-manager.ts"],"names":[],"mappings":"AA+BA;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBzD"}
|