@undefineds.co/xpod 0.3.58 → 0.3.62
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 +3 -0
- package/config/cli.json +88 -0
- package/config/cloud.json +32 -1
- package/config/components-ignore.json +3 -0
- package/config/extensions.local.initializer.json +44 -0
- package/config/resolver.json +86 -0
- package/config/xpod.base.json +4 -0
- package/dist/agents/AgentExecutorFactory.d.ts +3 -3
- package/dist/agents/AgentExecutorFactory.js +28 -15
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/BaseAgentExecutor.d.ts +2 -1
- package/dist/agents/BaseAgentExecutor.js +1 -0
- package/dist/agents/BaseAgentExecutor.js.map +1 -1
- package/dist/agents/ClaudeExecutor.d.ts +3 -1
- package/dist/agents/ClaudeExecutor.js +18 -12
- package/dist/agents/ClaudeExecutor.js.map +1 -1
- package/dist/agents/config/resolve.js +0 -21
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/config/types.d.ts +2 -7
- package/dist/agents/config/types.js +2 -1
- package/dist/agents/config/types.js.map +1 -1
- package/dist/agents/types.d.ts +18 -0
- package/dist/agents/types.js.map +1 -1
- package/dist/ai/schema/types.d.ts +2 -1
- package/dist/ai/schema/types.js +1 -0
- package/dist/ai/schema/types.js.map +1 -1
- package/dist/ai/service/CredentialReader.d.ts +3 -1
- package/dist/ai/service/CredentialReader.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
- package/dist/ai/service/CredentialReaderImpl.js +24 -2
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
- package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.d.ts +4 -0
- package/dist/ai/service/ProviderRegistry.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.jsonld +4 -0
- package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
- package/dist/ai/service/ProviderRegistryImpl.js +26 -4
- package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
- package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
- package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
- package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
- package/dist/ai/service/index.d.ts +1 -0
- package/dist/ai/service/index.js +1 -0
- package/dist/ai/service/index.js.map +1 -1
- package/dist/ai/service/types.d.ts +1 -0
- package/dist/ai/service/types.js.map +1 -1
- package/dist/api/ApiServer.js +17 -2
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
- package/dist/api/ai-gateway/AiGatewayService.js +527 -0
- package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
- package/dist/api/ai-gateway/connect/index.d.ts +367 -0
- package/dist/api/ai-gateway/connect/index.js +1061 -0
- package/dist/api/ai-gateway/connect/index.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/errors.d.ts +21 -0
- package/dist/api/ai-gateway/errors.js +50 -0
- package/dist/api/ai-gateway/errors.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
- package/dist/api/ai-gateway/protocol/index.js +10 -0
- package/dist/api/ai-gateway/protocol/index.js.map +1 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/index.d.ts +9 -0
- package/dist/api/ai-gateway/providers/index.js +26 -0
- package/dist/api/ai-gateway/providers/index.js.map +1 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/index.d.ts +6 -0
- package/dist/api/ai-gateway/quota/index.js +23 -0
- package/dist/api/ai-gateway/quota/index.js.map +1 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
- package/dist/api/ai-gateway/types.d.ts +112 -0
- package/dist/api/ai-gateway/types.js +305 -0
- package/dist/api/ai-gateway/types.js.map +1 -0
- package/dist/api/auth/AuthContext.d.ts +18 -3
- package/dist/api/auth/AuthContext.js +13 -2
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/Authenticator.d.ts +3 -0
- package/dist/api/auth/Authenticator.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
- package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
- package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
- package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
- package/dist/api/auth/TokenIdentity.d.ts +6 -0
- package/dist/api/auth/TokenIdentity.js +31 -0
- package/dist/api/auth/TokenIdentity.js.map +1 -0
- package/dist/api/chatkit/ai-provider.d.ts +9 -23
- package/dist/api/chatkit/ai-provider.js +30 -153
- package/dist/api/chatkit/ai-provider.js.map +1 -1
- package/dist/api/chatkit/default-agent.d.ts +24 -15
- package/dist/api/chatkit/default-agent.js +24 -83
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +2 -1
- package/dist/api/chatkit/index.js +3 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +13 -1
- package/dist/api/chatkit/pod-store.js +127 -7
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
- package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
- package/dist/api/chatkit/service.d.ts +8 -1
- package/dist/api/chatkit/service.js +46 -5
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +23 -1
- package/dist/api/chatkit/store.js +56 -0
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +1 -0
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +286 -13
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +126 -6
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +50 -6
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/rdf.d.ts +15 -0
- package/dist/api/container/rdf.js +90 -0
- package/dist/api/container/rdf.js.map +1 -0
- package/dist/api/container/routes.js +151 -11
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +96 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/AdminHandler.d.ts +25 -2
- package/dist/api/handlers/AdminHandler.js +60 -10
- package/dist/api/handlers/AdminHandler.js.map +1 -1
- package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
- package/dist/api/handlers/AiGatewayHandler.js +231 -0
- package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
- package/dist/api/handlers/ChatHandler.d.ts +11 -12
- package/dist/api/handlers/ChatHandler.js +12 -219
- package/dist/api/handlers/ChatHandler.js.map +1 -1
- package/dist/api/handlers/DashboardHandler.js +22 -116
- package/dist/api/handlers/DashboardHandler.js.map +1 -1
- package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
- package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
- package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
- package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
- package/dist/api/handlers/PodSettingsHandler.js +162 -0
- package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
- package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
- package/dist/api/handlers/ProvisionHandler.js +22 -87
- package/dist/api/handlers/ProvisionHandler.js.map +1 -1
- package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
- package/dist/api/handlers/RdfStatsHandler.js +85 -0
- package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
- package/dist/api/handlers/SettingsHandler.d.ts +5 -0
- package/dist/api/handlers/SettingsHandler.js +13 -0
- package/dist/api/handlers/SettingsHandler.js.map +1 -0
- package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
- package/dist/api/handlers/StaticSpaHandler.js +102 -0
- package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
- package/dist/api/http/readBoundedJsonBody.js +58 -0
- package/dist/api/http/readBoundedJsonBody.js.map +1 -0
- package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
- package/dist/api/middleware/AuthMiddleware.js +33 -4
- package/dist/api/middleware/AuthMiddleware.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
- package/dist/api/runs/AgentRuntimeTypes.js +61 -0
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
- package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
- package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
- package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
- package/dist/api/runs/ManagedRunWorker.js +39 -8
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
- package/dist/api/runs/RdfRunContextRetriever.js +277 -0
- package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
- package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
- package/dist/api/runs/RunExecutionBackend.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +18 -3
- package/dist/api/runs/RunStateCenter.js +85 -24
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runtime.js +163 -3
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
- package/dist/api/service/AiClientConfigurationService.js +379 -0
- package/dist/api/service/AiClientConfigurationService.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
- package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
- package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
- package/dist/api/service/RdfSearchIndexingService.js +272 -0
- package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
- package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
- package/dist/api/service/RdfStorageStatsService.js +97 -0
- package/dist/api/service/RdfStorageStatsService.js.map +1 -0
- package/dist/api/service/VectorStoreService.d.ts +2 -0
- package/dist/api/service/VectorStoreService.js +70 -2
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/VercelChatService.d.ts +27 -38
- package/dist/api/service/VercelChatService.js +153 -505
- package/dist/api/service/VercelChatService.js.map +1 -1
- package/dist/api/service/provider-http-transport.d.ts +21 -0
- package/dist/api/service/provider-http-transport.js +108 -2
- package/dist/api/service/provider-http-transport.js.map +1 -1
- package/dist/api/service/provider-registry.d.ts +5 -7
- package/dist/api/service/provider-registry.js +81 -64
- package/dist/api/service/provider-registry.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
- package/dist/api/tasks/TaskMaterializer.js +39 -4
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +5 -1
- package/dist/api/tasks/TaskService.js +3 -0
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/cli/commands/rdf.d.ts +9 -0
- package/dist/cli/commands/rdf.js +66 -1
- package/dist/cli/commands/rdf.js.map +1 -1
- package/dist/cli/commands/start.js +3 -0
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/lib/solid-auth.d.ts +3 -3
- package/dist/cli/lib/solid-auth.js +4 -4
- package/dist/cli/lib/solid-auth.js.map +1 -1
- package/dist/components/components.jsonld +16 -0
- package/dist/components/context.jsonld +815 -28
- package/dist/document/Chunker.jsonld +110 -0
- package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
- package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
- package/dist/document/DocumentReader.js.map +1 -0
- package/dist/document/DocumentReader.jsonld +82 -0
- package/dist/document/HeadingChunker.jsonld +41 -0
- package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
- package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
- package/dist/document/JinaReader.js.map +1 -0
- package/dist/document/JinaReader.jsonld +133 -0
- package/dist/document/L0SourceSummary.d.ts +103 -0
- package/dist/document/L0SourceSummary.js +157 -0
- package/dist/document/L0SourceSummary.js.map +1 -0
- package/dist/document/L0SourceSummary.jsonld +326 -0
- package/dist/document/PaddleOcrReader.d.ts +40 -0
- package/dist/document/PaddleOcrReader.js +53 -0
- package/dist/document/PaddleOcrReader.js.map +1 -0
- package/dist/document/PaddleOcrReader.jsonld +234 -0
- package/dist/document/ReaderAiConfig.d.ts +50 -0
- package/dist/document/ReaderAiConfig.js +109 -0
- package/dist/document/ReaderAiConfig.js.map +1 -0
- package/dist/document/ReaderAiConfig.jsonld +185 -0
- package/dist/document/ReaderPolicy.d.ts +89 -0
- package/dist/document/ReaderPolicy.js +158 -0
- package/dist/document/ReaderPolicy.js.map +1 -0
- package/dist/document/ReaderPolicy.jsonld +218 -0
- package/dist/document/index.d.ts +6 -2
- package/dist/document/index.js +6 -2
- package/dist/document/index.js.map +1 -1
- package/dist/edge/DdnsManager.d.ts +1 -1
- package/dist/edge/DdnsManager.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.d.ts +4 -0
- package/dist/edge/EdgeNodeAgent.js +6 -0
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.jsonld +8 -0
- package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
- package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
- package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
- package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
- package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
- package/dist/edge/acme/AcmeCertificateManager.js +67 -7
- package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
- package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
- package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
- package/dist/edge/acme/ClusterCertificateManager.js +38 -0
- package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
- package/dist/extensions/ExtensionRuntime.d.ts +17 -0
- package/dist/extensions/ExtensionRuntime.js +171 -0
- package/dist/extensions/ExtensionRuntime.js.map +1 -0
- package/dist/extensions/PodCredentialResolver.d.ts +23 -0
- package/dist/extensions/PodCredentialResolver.js +139 -0
- package/dist/extensions/PodCredentialResolver.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/types.d.ts +73 -0
- package/dist/extensions/types.js +3 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
- package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
- package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.js +1 -1
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.js +1 -1
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -1
- package/dist/provision/LocalProvisionState.d.ts +28 -0
- package/dist/provision/LocalProvisionState.js +124 -0
- package/dist/provision/LocalProvisionState.js.map +1 -0
- package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
- package/dist/provision/ProvisionCodeCodec.js +10 -3
- package/dist/provision/ProvisionCodeCodec.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +15 -1
- package/dist/provision/ProvisionPodCreator.js +68 -1
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +31 -0
- package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
- package/dist/provision/ServiceAccessTokenCodec.js +86 -0
- package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
- package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
- package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
- package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
- package/dist/runtime/Proxy.d.ts +10 -0
- package/dist/runtime/Proxy.js +64 -6
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/XpodRuntime.js +1 -0
- package/dist/runtime/XpodRuntime.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +29 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +1 -0
- package/dist/runtime/css-process.js +1 -0
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/lifecycle.d.ts +3 -1
- package/dist/runtime/lifecycle.js +3 -1
- package/dist/runtime/lifecycle.js.map +1 -1
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
- package/dist/runtime/runner/types.d.ts +3 -0
- package/dist/runtime/runner/types.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +2 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/runtime/safe-env.d.ts +15 -0
- package/dist/runtime/safe-env.js +109 -0
- package/dist/runtime/safe-env.js.map +1 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/security/index.js +18 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
- package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
- package/dist/security/secret-cell/SecretCellVault.js +242 -0
- package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
- package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
- package/dist/security/secret-cell/index.d.ts +2 -0
- package/dist/security/secret-cell/index.js +11 -0
- package/dist/security/secret-cell/index.js.map +1 -0
- package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.js +25 -1
- package/dist/solidfs/LocalSolidFS.js.map +1 -1
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
- package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
- package/dist/solidfs/SolidFsMetaNotes.js +103 -0
- package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
- package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
- package/dist/solidfs/SolidFsSyncJournal.js +9 -4
- package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
- package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
- package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
- package/dist/solidfs/WorkspacePrompt.js +42 -0
- package/dist/solidfs/WorkspacePrompt.js.map +1 -0
- package/dist/solidfs/index.d.ts +3 -0
- package/dist/solidfs/index.js +3 -0
- package/dist/solidfs/index.js.map +1 -1
- package/dist/solidfs/types.d.ts +12 -2
- package/dist/solidfs/types.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
- package/dist/storage/accessors/MixDataAccessor.js +222 -23
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
- package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
- package/dist/storage/database/PostgresPoolManager.js +2 -2
- package/dist/storage/database/PostgresPoolManager.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
- package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
- package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
- package/dist/storage/rdf/Rdf3xIndex.js +286 -2
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
- package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
- package/dist/storage/rdf/Rdf3xSchema.js +17 -3
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
- package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
- package/dist/storage/rdf/RdfAccessScope.js +345 -0
- package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
- package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
- package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
- package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
- package/dist/storage/rdf/RdfJoinShape.js +31 -0
- package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
- package/dist/storage/rdf/RdfQuadIndex.js +94 -6
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
- package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
- package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
- package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
- package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
- package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
- package/dist/storage/rdf/RdfTermDictionary.js +139 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
- package/dist/storage/rdf/RdfTextIndex.js +810 -114
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
- package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
- package/dist/storage/rdf/RdfTextProjection.js +258 -0
- package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
- package/dist/storage/rdf/RdfVectorIndex.js +461 -38
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
- package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
- package/dist/storage/rdf/SolidRdfEngine.js +48 -22
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
- package/dist/storage/rdf/index.d.ts +9 -5
- package/dist/storage/rdf/index.js +42 -1
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +264 -2
- package/dist/storage/rdf/models-benchmark.js +4207 -155
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +833 -4
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/rdf/types.jsonld +348 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
- package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
- package/dist/terminal/sandbox/index.js +2 -1
- package/dist/terminal/sandbox/index.js.map +1 -1
- package/dist/test-utils/no-auth-xpod.js +3 -0
- package/dist/test-utils/no-auth-xpod.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
- package/dist/tunnel/LocalTunnelProvider.js +17 -1
- package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
- package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
- package/dist/tunnel/TunnelProfiles.d.ts +22 -0
- package/dist/tunnel/TunnelProfiles.js +208 -0
- package/dist/tunnel/TunnelProfiles.js.map +1 -0
- package/dist/tunnel/index.d.ts +2 -0
- package/dist/tunnel/index.js +4 -1
- package/dist/tunnel/index.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
- package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
- package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
- package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
- package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
- package/node_modules/@undefineds.co/extensions/README.md +101 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts +25 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js +45 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts +31 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js +50 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js +267 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts +18 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js +39 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js +97 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts +141 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js +2 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/package.json +38 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
- package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
- package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
- package/package.json +31 -13
- package/static/app/assets/index-BoYHJ6si.js +230 -0
- package/static/app/assets/inrupt-smoke.js +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +9 -9
- package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
- package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
- package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
- package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
- package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
- package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
- package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
- package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
- package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
- package/static/dashboard/assets/index-RfiFckzb.js +51 -0
- package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
- package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
- package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
- package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
- package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
- package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
- package/static/settings/assets/card-B_bXSIn-.js +1 -0
- package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
- package/static/settings/assets/settings-B30oMfZq.js +305 -0
- package/static/settings/assets/settings-CSdewNeA.css +1 -0
- package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
- package/static/settings/auth.html +21 -0
- package/static/settings/reachability.html +221 -0
- package/static/settings/reachability.svg +7 -0
- package/static/settings/reachability.webmanifest +18 -0
- package/static/settings/settings.html +13 -0
- package/static/settings/signal-pod.html +293 -0
- package/static/settings/vite.svg +1 -0
- package/dist/api/service/ai-gateway-transport.d.ts +0 -25
- package/dist/api/service/ai-gateway-transport.js +0 -136
- package/dist/api/service/ai-gateway-transport.js.map +0 -1
- package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
- package/dist/api/service/chat-protocol-adapters.js +0 -146
- package/dist/api/service/chat-protocol-adapters.js.map +0 -1
- package/dist/api/service/chat-routing.d.ts +0 -8
- package/dist/api/service/chat-routing.js +0 -16
- package/dist/api/service/chat-routing.js.map +0 -1
- package/dist/api/service/platform-ai-config.d.ts +0 -10
- package/dist/api/service/platform-ai-config.js +0 -76
- package/dist/api/service/platform-ai-config.js.map +0 -1
- package/dist/document/DocumentParser.js.map +0 -1
- package/dist/document/JinaDocumentParser.js.map +0 -1
- package/static/app/assets/index-C1yksyT4.js +0 -171
- package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
- package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EdgeNodeAgent.js","sourceRoot":"","sources":["../../src/edge/EdgeNodeAgent.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'node:os';\nimport { spawn } from 'node:child_process';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { EdgeNodeSignalClientOptions } from '../service/EdgeNodeSignalClient';\nimport { EdgeNodeSignalClient } from '../service/EdgeNodeSignalClient';\nimport { FrpcProcessManager, type FrpcRuntimeStatus } from './frp/FrpcProcessManager';\nimport { AcmeCertificateManager } from './acme/AcmeCertificateManager';\nimport { ClusterCertificateManager } from './acme/ClusterCertificateManager';\nimport { EdgeNodeCapabilityDetector, type NetworkAddressInfo } from './EdgeNodeCapabilityDetector';\nimport {\n acceptSignaledRawTcpP2PConnectionOnce,\n createP2PDataPlaneHandler,\n createP2PSignalingClient,\n type AccessRoute,\n type P2PSignalingClient,\n type RawTcpP2PConnectSocket,\n type RawTcpP2PSleep,\n type TcpP2PDataPlaneSocketHandle,\n} from './reachability';\n\ntype EdgeNodeP2PHeartbeatRoute = Omit<AccessRoute, 'canonicalUrl'> & { canonicalUrl?: string };\n\nexport interface EdgeNodeP2PAcceptEvent {\n sessionId: string;\n nodeId: string;\n clientId: string;\n localCandidateCount: number;\n remoteCandidateCount: number;\n nodeAddress: CandidateAddressEvidence;\n clientAddress: CandidateAddressEvidence;\n acceptedAt: string;\n}\n\ntype CandidateAddressEvidence =\n | 'explicit-host'\n | 'explicit-address'\n | 'signal-observed'\n | 'candidate-url'\n | 'port-only';\n\nconst DEFAULT_P2P_ACCEPT_INTERVAL_MS = 1_000;\n\nexport interface EdgeNodeAgentOptions {\n signalEndpoint: string;\n nodeId: string;\n nodeToken: string;\n baseUrl?: string;\n directCandidates?: string | string[];\n pods?: string[];\n includeSystemMetrics?: boolean;\n enableNetworkDetection?: boolean;\n metadata?: Record<string, unknown>;\n intervalMs?: number;\n onHeartbeatResponse?: (data: unknown) => void;\n acme?: {\n mode?: 'local' | 'cluster';\n email?: string;\n domains?: string[];\n directoryUrl?: string;\n accountKeyPath?: string;\n certificateKeyPath: string;\n certificatePath: string;\n fullChainPath?: string;\n renewBeforeDays?: number;\n propagationDelayMs?: number;\n postDeployCommand?: string[];\n };\n frp?: {\n binaryPath: string;\n configPath: string;\n workingDirectory?: string;\n logPrefix?: string;\n autoRestart?: boolean;\n };\n p2p?: {\n enabled?: boolean | string;\n targetBaseUrl: string | URL;\n label?: string;\n host?: string;\n address?: string;\n signaling?: P2PSignalingClient;\n acceptIntervalMs?: number | string;\n connectTimeoutMs?: number | string;\n winnerSelectionWindowMs?: number | string;\n localAddress?: string;\n sleepMs?: RawTcpP2PSleep;\n connectSocket?: RawTcpP2PConnectSocket;\n onP2PAccept?: (event: EdgeNodeP2PAcceptEvent) => void;\n };\n}\n\nexport class EdgeNodeAgent {\n private readonly logger = getLoggerFor(this);\n private heartbeat?: EdgeNodeSignalClient;\n private frpManager?: FrpcProcessManager;\n private clusterCertificate?: ClusterCertificateManager;\n private networkDetector?: EdgeNodeCapabilityDetector;\n private cachedNetworkInfo?: NetworkAddressInfo;\n private lastNetworkDetection = 0;\n private p2pAcceptInterval?: NodeJS.Timeout;\n private p2pAcceptRunning = false;\n private p2pAcceptGeneration = 0;\n private readonly p2pAcceptedSessionIds = new Set<string>();\n private readonly p2pSocketHandles = new Set<TcpP2PDataPlaneSocketHandle>();\n private readonly networkDetectionIntervalMs = 60_000; // 每分钟重新检测一次\n\n public async start(options: EdgeNodeAgentOptions): Promise<void> {\n if (options.acme) {\n const mode = options.acme.mode ?? 'local';\n if (mode === 'cluster') {\n await this.ensureClusterCertificate(options);\n } else {\n await this.issueCertificateLocally(options);\n }\n }\n if (options.frp) {\n this.frpManager = new FrpcProcessManager({\n binaryPath: options.frp.binaryPath,\n configPath: options.frp.configPath,\n workingDirectory: options.frp.workingDirectory,\n logPrefix: options.frp.logPrefix,\n autoRestart: options.frp.autoRestart,\n });\n }\n \n // 初始化网络检测器\n if (options.enableNetworkDetection !== false) {\n this.networkDetector = new EdgeNodeCapabilityDetector({\n dynamicDetection: {\n enableNetworkDetection: true,\n },\n });\n // 执行初始网络检测\n this.cachedNetworkInfo = await this.networkDetector.detectNetworkAddresses();\n this.lastNetworkDetection = Date.now();\n this.logger.info(`Network detection: IPv4=${this.cachedNetworkInfo.ipv4Public ?? this.cachedNetworkInfo.ipv4}, IPv6=${this.cachedNetworkInfo.ipv6Public ?? this.cachedNetworkInfo.ipv6}, hasPublicIPv6=${this.cachedNetworkInfo.hasPublicIPv6}`);\n }\n \n const systemMetrics = options.includeSystemMetrics ? this.collectSystemMetrics() : undefined;\n const metadataPayload = {\n ...this.buildHeartbeatMetadata(options),\n system: systemMetrics,\n } as Record<string, unknown>;\n\n const certificatePayload = this.clusterCertificate?.getHeartbeatPayload();\n const heartbeatOptions: EdgeNodeSignalClientOptions = {\n edgeNodesEnabled: true,\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n baseUrl: options.baseUrl,\n directCandidates: options.directCandidates,\n pods: options.pods,\n intervalMs: options.intervalMs,\n metadata: this.stringifyIfContent(metadataPayload),\n metrics: systemMetrics ? JSON.stringify(systemMetrics) : undefined,\n certificate: certificatePayload ? JSON.stringify(certificatePayload) : undefined,\n onHeartbeatResponse: (data: unknown): void => {\n this.handleHeartbeatResponse(data);\n options.onHeartbeatResponse?.(data);\n },\n networkSupplier: this.networkDetector ? () => this.getNetworkInfo() : undefined,\n };\n if (this.frpManager) {\n heartbeatOptions.tunnelSupplier = () => this.buildTunnelHeartbeatPayload();\n }\n\n this.heartbeat = new EdgeNodeSignalClient(heartbeatOptions);\n this.startP2PAcceptLoop(options);\n }\n\n public stop(): void {\n if (this.heartbeat && typeof (this.heartbeat as any).dispose === 'function') {\n (this.heartbeat as any).dispose();\n }\n this.heartbeat = undefined;\n if (this.p2pAcceptInterval) {\n clearInterval(this.p2pAcceptInterval);\n this.p2pAcceptInterval = undefined;\n }\n this.p2pAcceptGeneration += 1;\n for (const handle of this.p2pSocketHandles) {\n handle.close();\n }\n this.p2pSocketHandles.clear();\n this.p2pAcceptedSessionIds.clear();\n this.p2pAcceptRunning = false;\n void this.frpManager?.stop();\n this.clusterCertificate?.stop();\n }\n\n private startP2PAcceptLoop(options: EdgeNodeAgentOptions): void {\n const p2p = options.p2p;\n if (!p2p || this.normalizeBoolean(p2p.enabled) === false) {\n return;\n }\n const signaling = p2p.signaling ?? createP2PSignalingClient({\n apiBaseUrl: this.resolveP2PApiBaseUrl(options.signalEndpoint),\n nodeId: options.nodeId,\n token: options.nodeToken,\n });\n const handler = createP2PDataPlaneHandler({ targetBaseUrl: p2p.targetBaseUrl });\n const intervalMs = this.normalizePositiveInteger(p2p.acceptIntervalMs) ?? DEFAULT_P2P_ACCEPT_INTERVAL_MS;\n this.p2pAcceptGeneration += 1;\n const generation = this.p2pAcceptGeneration;\n const run = (): void => {\n void this.acceptP2PConnectionOnce({\n generation,\n signaling,\n sourceId: options.nodeId,\n host: p2p.host,\n address: p2p.address,\n handler,\n connectTimeoutMs: this.normalizePositiveInteger(p2p.connectTimeoutMs),\n winnerSelectionWindowMs: this.normalizeNonNegativeInteger(p2p.winnerSelectionWindowMs),\n localAddress: p2p.localAddress,\n sleepMs: p2p.sleepMs,\n connectSocket: p2p.connectSocket,\n onP2PAccept: p2p.onP2PAccept,\n });\n };\n run();\n this.p2pAcceptInterval = setInterval(run, intervalMs);\n }\n\n private async acceptP2PConnectionOnce(options: Parameters<typeof acceptSignaledRawTcpP2PConnectionOnce>[0] & {\n generation: number;\n onP2PAccept?: (event: EdgeNodeP2PAcceptEvent) => void;\n }): Promise<void> {\n if (this.p2pAcceptRunning) {\n return;\n }\n this.p2pAcceptRunning = true;\n try {\n const { generation, onP2PAccept, ...acceptOptions } = options;\n const accepted = await acceptSignaledRawTcpP2PConnectionOnce({\n ...acceptOptions,\n signaling: this.skipAcceptedP2PSessions(acceptOptions.signaling),\n host: acceptOptions.host,\n });\n if (accepted) {\n if (generation !== this.p2pAcceptGeneration) {\n accepted.socketHandle.close();\n return;\n }\n this.p2pAcceptedSessionIds.add(accepted.session.sessionId);\n this.p2pSocketHandles.add(accepted.socketHandle);\n onP2PAccept?.({\n sessionId: accepted.session.sessionId,\n nodeId: accepted.session.nodeId,\n clientId: accepted.session.clientId,\n localCandidateCount: accepted.localCandidates.length,\n remoteCandidateCount: accepted.remoteCandidates.length,\n nodeAddress: addressEvidenceFromCandidates(accepted.localCandidates),\n clientAddress: addressEvidenceFromCandidates(accepted.remoteCandidates),\n acceptedAt: new Date().toISOString(),\n });\n this.logger.info(`Accepted raw TCP P2P session ${accepted.session.sessionId}.`);\n }\n } catch (error: unknown) {\n this.logger.debug(`Raw TCP P2P accept attempt failed: ${(error as Error).message}`);\n } finally {\n this.p2pAcceptRunning = false;\n }\n }\n\n private skipAcceptedP2PSessions(signaling: P2PSignalingClient): P2PSignalingClient {\n return {\n createP2PSession: (request) => signaling.createP2PSession(request),\n getP2PSession: (sessionIdOrUrl) => signaling.getP2PSession(sessionIdOrUrl),\n addP2PCandidates: (sessionIdOrUrl, request) => signaling.addP2PCandidates(sessionIdOrUrl, request),\n listP2PSessions: async () => {\n const sessions = await signaling.listP2PSessions();\n return sessions.filter((session) => !this.p2pAcceptedSessionIds.has(session.sessionId));\n },\n };\n }\n\n private resolveP2PApiBaseUrl(signalEndpoint: string): string {\n try {\n return new URL(signalEndpoint).origin;\n } catch {\n return signalEndpoint;\n }\n }\n\n private stringifyIfContent(data: Record<string, unknown>): string | undefined {\n const sanitized: Record<string, unknown> = {};\n for (const [ key, value ] of Object.entries(data)) {\n if (value !== undefined) {\n sanitized[key] = value;\n }\n }\n return Object.keys(sanitized).length > 0 ? JSON.stringify(sanitized) : undefined;\n }\n\n private collectSystemMetrics(): Record<string, unknown> {\n const load = os.loadavg();\n return {\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n uptime: os.uptime(),\n cpuCount: os.cpus().length,\n load1: load[0],\n load5: load[1],\n load15: load[2],\n totalMem: os.totalmem(),\n freeMem: os.freemem(),\n };\n }\n\n private buildHeartbeatMetadata(options: EdgeNodeAgentOptions): Record<string, unknown> {\n const metadata = { ...(options.metadata ?? {}) } as Record<string, unknown>;\n const p2pRoute = this.buildP2PHeartbeatRoute(options);\n if (p2pRoute) {\n metadata.routes = this.mergeHeartbeatRoutes(metadata.routes, p2pRoute);\n }\n return metadata;\n }\n\n private buildP2PHeartbeatRoute(options: EdgeNodeAgentOptions): EdgeNodeP2PHeartbeatRoute | undefined {\n const p2p = options.p2p;\n if (!p2p || this.normalizeBoolean(p2p.enabled) === false) {\n return undefined;\n }\n const label = typeof p2p.label === 'string' && p2p.label.length > 0 ? p2p.label : undefined;\n return {\n id: 'p2p-raw-tcp',\n nodeId: options.nodeId,\n ...(options.baseUrl ? { canonicalUrl: options.baseUrl } : {}),\n kind: 'p2p',\n targetUrl: `tcp-punch://node/${encodeURIComponent(options.nodeId)}`,\n priority: 40,\n requiresManagedClient: true,\n visibility: 'authorized-client',\n health: 'healthy',\n metadata: {\n protocols: {\n 'raw-tcp-hole-punch': {\n enabled: true,\n ...(label ? { label } : {}),\n },\n },\n },\n };\n }\n\n private mergeHeartbeatRoutes(existing: unknown, p2pRoute: EdgeNodeP2PHeartbeatRoute): EdgeNodeP2PHeartbeatRoute[] {\n const routes = Array.isArray(existing)\n ? existing.filter((entry): entry is EdgeNodeP2PHeartbeatRoute => Boolean(entry) && typeof entry === 'object')\n : [];\n const withoutGeneratedRoute = routes.filter((route) => route.id !== p2pRoute.id);\n return [...withoutGeneratedRoute, p2pRoute];\n }\n\n private normalizePositiveInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n\n private normalizeNonNegativeInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n\n private normalizeBoolean(value: boolean | string | undefined): boolean {\n if (value === undefined) {\n return true;\n }\n if (typeof value === 'boolean') {\n return value;\n }\n const normalized = value.trim().toLowerCase();\n return normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on';\n }\n\n private handleHeartbeatResponse(data: unknown): void {\n if (!data || typeof data !== 'object') {\n return;\n }\n const body = data as Record<string, any>;\n const metadata = body.metadata as Record<string, any> | undefined;\n this.clusterCertificate?.handleHeartbeatMetadata(metadata);\n const tunnel = metadata?.tunnel as Record<string, any> | undefined;\n const config = tunnel?.config as Record<string, any> | undefined;\n if (config) {\n this.logger.debug(`接收到隧道配置: ${JSON.stringify({ entrypoint: tunnel?.entrypoint, proxyName: config.proxyName })}`);\n }\n const entrypoint = typeof tunnel?.entrypoint === 'string' ? tunnel.entrypoint :\n typeof config?.publicUrl === 'string' ? config.publicUrl : undefined;\n void this.frpManager?.applyConfig(config as any, tunnel?.status as string | undefined, entrypoint);\n }\n\n private async issueCertificateLocally(options: EdgeNodeAgentOptions): Promise<void> {\n const acmeOptions = options.acme!;\n if (!acmeOptions.email || !acmeOptions.domains || acmeOptions.domains.length === 0) {\n throw new Error('本地 ACME 模式需要提供 email 与 domains。');\n }\n if (!acmeOptions.accountKeyPath) {\n throw new Error('本地 ACME 模式需要提供 accountKeyPath。');\n }\n const manager = new AcmeCertificateManager({\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n email: acmeOptions.email!,\n domains: acmeOptions.domains!,\n directoryUrl: acmeOptions.directoryUrl,\n accountKeyPath: acmeOptions.accountKeyPath!,\n certificateKeyPath: acmeOptions.certificateKeyPath,\n certificatePath: acmeOptions.certificatePath,\n fullChainPath: acmeOptions.fullChainPath,\n renewBeforeDays: acmeOptions.renewBeforeDays,\n propagationDelayMs: acmeOptions.propagationDelayMs,\n });\n try {\n const issued = await manager.ensureCertificate();\n if (issued && acmeOptions.postDeployCommand && acmeOptions.postDeployCommand.length > 0) {\n await this.runPostDeploy(acmeOptions.postDeployCommand);\n }\n } catch (error: unknown) {\n this.logger.error(`自动签发证书失败:${(error as Error).message}`);\n throw error;\n }\n }\n\n private async ensureClusterCertificate(options: EdgeNodeAgentOptions): Promise<void> {\n const acmeOptions = options.acme!;\n if (!acmeOptions.certificateKeyPath || !acmeOptions.certificatePath) {\n throw new Error('Cluster 模式需要提供 certificateKeyPath 与 certificatePath。');\n }\n const manager = new ClusterCertificateManager({\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n certificateKeyPath: acmeOptions.certificateKeyPath,\n certificatePath: acmeOptions.certificatePath,\n fullChainPath: acmeOptions.fullChainPath,\n renewBeforeDays: acmeOptions.renewBeforeDays,\n onCertificateInstalled: acmeOptions.postDeployCommand ? () => this.runPostDeploy(acmeOptions.postDeployCommand!) : undefined,\n });\n this.clusterCertificate = manager;\n await manager.start();\n }\n\n private async runPostDeploy(command: string[]): Promise<void> {\n const [ executable, ...args ] = command;\n if (!executable) {\n return;\n }\n await new Promise<void>((resolve, reject) => {\n const child = spawn(executable, args, { stdio: 'inherit' });\n child.on('error', reject);\n child.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`命令 ${executable} 退出码 ${code}`));\n }\n });\n });\n }\n\n private buildTunnelHeartbeatPayload(): Record<string, unknown> | undefined {\n const status: FrpcRuntimeStatus | undefined = this.frpManager?.getStatus();\n if (!status) {\n return undefined;\n }\n return { client: status };\n }\n\n /**\n * 获取网络信息(带缓存,每分钟刷新一次)\n */\n private async getNetworkInfo(): Promise<{ ipv4?: string; ipv6?: string }> {\n const now = Date.now();\n \n // 如果缓存过期,重新检测\n if (!this.cachedNetworkInfo || (now - this.lastNetworkDetection) > this.networkDetectionIntervalMs) {\n if (this.networkDetector) {\n try {\n this.cachedNetworkInfo = await this.networkDetector.detectNetworkAddresses();\n this.lastNetworkDetection = now;\n } catch (error: unknown) {\n this.logger.debug(`Network detection failed: ${(error as Error).message}`);\n }\n }\n }\n \n // 优先返回公网地址\n return {\n ipv4: this.cachedNetworkInfo?.ipv4Public ?? this.cachedNetworkInfo?.ipv4,\n ipv6: this.cachedNetworkInfo?.ipv6Public ?? this.cachedNetworkInfo?.ipv6,\n };\n }\n}\n\nfunction addressEvidenceFromCandidates(candidates: Array<{ host?: string; address?: string; url?: string }>): CandidateAddressEvidence {\n const evidence = candidates.map(candidateAddressEvidence);\n return evidence.find((entry) => entry === 'explicit-host')\n ?? evidence.find((entry) => entry === 'explicit-address')\n ?? evidence.find((entry) => entry === 'signal-observed')\n ?? evidence.find((entry) => entry === 'candidate-url')\n ?? 'port-only';\n}\n\nfunction candidateAddressEvidence(candidate: { host?: string; address?: string; url?: string }): CandidateAddressEvidence {\n if (candidate.host) {\n return 'explicit-host';\n }\n if (candidate.address && candidate.url) {\n return 'explicit-address';\n }\n if (candidate.address) {\n return 'signal-observed';\n }\n if (candidate.url) {\n return 'candidate-url';\n }\n return 'port-only';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EdgeNodeAgent.js","sourceRoot":"","sources":["../../src/edge/EdgeNodeAgent.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'node:os';\nimport { spawn } from 'node:child_process';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { EdgeNodeSignalClientOptions } from '../service/EdgeNodeSignalClient';\nimport { EdgeNodeSignalClient } from '../service/EdgeNodeSignalClient';\nimport { FrpcProcessManager, type FrpcRuntimeStatus } from './frp/FrpcProcessManager';\nimport { AcmeCertificateManager } from './acme/AcmeCertificateManager';\nimport { ClusterCertificateManager } from './acme/ClusterCertificateManager';\nimport { EdgeNodeCapabilityDetector, type NetworkAddressInfo } from './EdgeNodeCapabilityDetector';\nimport {\n acceptSignaledRawTcpP2PConnectionOnce,\n createP2PDataPlaneHandler,\n createP2PSignalingClient,\n type AccessRoute,\n type P2PSignalingClient,\n type RawTcpP2PConnectSocket,\n type RawTcpP2PSleep,\n type TcpP2PDataPlaneSocketHandle,\n} from './reachability';\n\ntype EdgeNodeP2PHeartbeatRoute = Omit<AccessRoute, 'canonicalUrl'> & { canonicalUrl?: string };\n\nexport interface EdgeNodeP2PAcceptEvent {\n sessionId: string;\n nodeId: string;\n clientId: string;\n localCandidateCount: number;\n remoteCandidateCount: number;\n nodeAddress: CandidateAddressEvidence;\n clientAddress: CandidateAddressEvidence;\n acceptedAt: string;\n}\n\ntype CandidateAddressEvidence =\n | 'explicit-host'\n | 'explicit-address'\n | 'signal-observed'\n | 'candidate-url'\n | 'port-only';\n\nconst DEFAULT_P2P_ACCEPT_INTERVAL_MS = 1_000;\n\nexport interface EdgeNodeAgentOptions {\n signalEndpoint: string;\n nodeId: string;\n nodeToken: string;\n baseUrl?: string;\n directCandidates?: string | string[];\n pods?: string[];\n includeSystemMetrics?: boolean;\n enableNetworkDetection?: boolean;\n metadata?: Record<string, unknown>;\n intervalMs?: number;\n onHeartbeatResponse?: (data: unknown) => void;\n acme?: {\n mode?: 'local' | 'cluster';\n email?: string;\n domains?: string[];\n directoryUrl?: string;\n accountKeyPath?: string;\n certificateKeyPath: string;\n certificatePath: string;\n fullChainPath?: string;\n renewBeforeDays?: number;\n propagationDelayMs?: number;\n postDeployCommand?: string[];\n };\n frp?: {\n binaryPath: string;\n configPath: string;\n workingDirectory?: string;\n logPrefix?: string;\n autoRestart?: boolean;\n };\n p2p?: {\n enabled?: boolean | string;\n targetBaseUrl: string | URL;\n label?: string;\n host?: string;\n address?: string;\n signaling?: P2PSignalingClient;\n acceptIntervalMs?: number | string;\n connectTimeoutMs?: number | string;\n winnerSelectionWindowMs?: number | string;\n localAddress?: string;\n sleepMs?: RawTcpP2PSleep;\n connectSocket?: RawTcpP2PConnectSocket;\n onP2PAccept?: (event: EdgeNodeP2PAcceptEvent) => void;\n };\n}\n\nexport class EdgeNodeAgent {\n private readonly logger = getLoggerFor(this);\n private heartbeat?: EdgeNodeSignalClient;\n private frpManager?: FrpcProcessManager;\n private localCertificate?: AcmeCertificateManager;\n private clusterCertificate?: ClusterCertificateManager;\n private networkDetector?: EdgeNodeCapabilityDetector;\n private cachedNetworkInfo?: NetworkAddressInfo;\n private lastNetworkDetection = 0;\n private p2pAcceptInterval?: NodeJS.Timeout;\n private p2pAcceptRunning = false;\n private p2pAcceptGeneration = 0;\n private readonly p2pAcceptedSessionIds = new Set<string>();\n private readonly p2pSocketHandles = new Set<TcpP2PDataPlaneSocketHandle>();\n private readonly networkDetectionIntervalMs = 60_000; // 每分钟重新检测一次\n\n public async start(options: EdgeNodeAgentOptions): Promise<void> {\n if (options.acme) {\n const mode = options.acme.mode ?? 'local';\n if (mode === 'cluster') {\n await this.ensureClusterCertificate(options);\n } else {\n await this.issueCertificateLocally(options);\n }\n }\n if (options.frp) {\n this.frpManager = new FrpcProcessManager({\n binaryPath: options.frp.binaryPath,\n configPath: options.frp.configPath,\n workingDirectory: options.frp.workingDirectory,\n logPrefix: options.frp.logPrefix,\n autoRestart: options.frp.autoRestart,\n });\n }\n \n // 初始化网络检测器\n if (options.enableNetworkDetection !== false) {\n this.networkDetector = new EdgeNodeCapabilityDetector({\n dynamicDetection: {\n enableNetworkDetection: true,\n },\n });\n // 执行初始网络检测\n this.cachedNetworkInfo = await this.networkDetector.detectNetworkAddresses();\n this.lastNetworkDetection = Date.now();\n this.logger.info(`Network detection: IPv4=${this.cachedNetworkInfo.ipv4Public ?? this.cachedNetworkInfo.ipv4}, IPv6=${this.cachedNetworkInfo.ipv6Public ?? this.cachedNetworkInfo.ipv6}, hasPublicIPv6=${this.cachedNetworkInfo.hasPublicIPv6}`);\n }\n \n const systemMetrics = options.includeSystemMetrics ? this.collectSystemMetrics() : undefined;\n const metadataPayload = {\n ...this.buildHeartbeatMetadata(options),\n system: systemMetrics,\n } as Record<string, unknown>;\n\n const certificatePayload = this.clusterCertificate?.getHeartbeatPayload();\n const heartbeatOptions: EdgeNodeSignalClientOptions = {\n edgeNodesEnabled: true,\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n baseUrl: options.baseUrl,\n directCandidates: options.directCandidates,\n pods: options.pods,\n intervalMs: options.intervalMs,\n metadata: this.stringifyIfContent(metadataPayload),\n metrics: systemMetrics ? JSON.stringify(systemMetrics) : undefined,\n certificate: certificatePayload ? JSON.stringify(certificatePayload) : undefined,\n onHeartbeatResponse: (data: unknown): void => {\n this.handleHeartbeatResponse(data);\n options.onHeartbeatResponse?.(data);\n },\n networkSupplier: this.networkDetector ? () => this.getNetworkInfo() : undefined,\n };\n if (this.frpManager) {\n heartbeatOptions.tunnelSupplier = () => this.buildTunnelHeartbeatPayload();\n }\n\n this.heartbeat = new EdgeNodeSignalClient(heartbeatOptions);\n this.startP2PAcceptLoop(options);\n }\n\n public stop(): void {\n if (this.heartbeat && typeof (this.heartbeat as any).dispose === 'function') {\n (this.heartbeat as any).dispose();\n }\n this.heartbeat = undefined;\n if (this.p2pAcceptInterval) {\n clearInterval(this.p2pAcceptInterval);\n this.p2pAcceptInterval = undefined;\n }\n this.p2pAcceptGeneration += 1;\n for (const handle of this.p2pSocketHandles) {\n handle.close();\n }\n this.p2pSocketHandles.clear();\n this.p2pAcceptedSessionIds.clear();\n this.p2pAcceptRunning = false;\n void this.frpManager?.stop();\n this.clusterCertificate?.stop();\n this.localCertificate = undefined;\n this.clusterCertificate = undefined;\n }\n\n public getCertificateRuntime(): AcmeCertificateManager | ClusterCertificateManager | undefined {\n return this.clusterCertificate ?? this.localCertificate;\n }\n\n private startP2PAcceptLoop(options: EdgeNodeAgentOptions): void {\n const p2p = options.p2p;\n if (!p2p || this.normalizeBoolean(p2p.enabled) === false) {\n return;\n }\n const signaling = p2p.signaling ?? createP2PSignalingClient({\n apiBaseUrl: this.resolveP2PApiBaseUrl(options.signalEndpoint),\n nodeId: options.nodeId,\n token: options.nodeToken,\n });\n const handler = createP2PDataPlaneHandler({ targetBaseUrl: p2p.targetBaseUrl });\n const intervalMs = this.normalizePositiveInteger(p2p.acceptIntervalMs) ?? DEFAULT_P2P_ACCEPT_INTERVAL_MS;\n this.p2pAcceptGeneration += 1;\n const generation = this.p2pAcceptGeneration;\n const run = (): void => {\n void this.acceptP2PConnectionOnce({\n generation,\n signaling,\n sourceId: options.nodeId,\n host: p2p.host,\n address: p2p.address,\n handler,\n connectTimeoutMs: this.normalizePositiveInteger(p2p.connectTimeoutMs),\n winnerSelectionWindowMs: this.normalizeNonNegativeInteger(p2p.winnerSelectionWindowMs),\n localAddress: p2p.localAddress,\n sleepMs: p2p.sleepMs,\n connectSocket: p2p.connectSocket,\n onP2PAccept: p2p.onP2PAccept,\n });\n };\n run();\n this.p2pAcceptInterval = setInterval(run, intervalMs);\n }\n\n private async acceptP2PConnectionOnce(options: Parameters<typeof acceptSignaledRawTcpP2PConnectionOnce>[0] & {\n generation: number;\n onP2PAccept?: (event: EdgeNodeP2PAcceptEvent) => void;\n }): Promise<void> {\n if (this.p2pAcceptRunning) {\n return;\n }\n this.p2pAcceptRunning = true;\n try {\n const { generation, onP2PAccept, ...acceptOptions } = options;\n const accepted = await acceptSignaledRawTcpP2PConnectionOnce({\n ...acceptOptions,\n signaling: this.skipAcceptedP2PSessions(acceptOptions.signaling),\n host: acceptOptions.host,\n });\n if (accepted) {\n if (generation !== this.p2pAcceptGeneration) {\n accepted.socketHandle.close();\n return;\n }\n this.p2pAcceptedSessionIds.add(accepted.session.sessionId);\n this.p2pSocketHandles.add(accepted.socketHandle);\n onP2PAccept?.({\n sessionId: accepted.session.sessionId,\n nodeId: accepted.session.nodeId,\n clientId: accepted.session.clientId,\n localCandidateCount: accepted.localCandidates.length,\n remoteCandidateCount: accepted.remoteCandidates.length,\n nodeAddress: addressEvidenceFromCandidates(accepted.localCandidates),\n clientAddress: addressEvidenceFromCandidates(accepted.remoteCandidates),\n acceptedAt: new Date().toISOString(),\n });\n this.logger.info(`Accepted raw TCP P2P session ${accepted.session.sessionId}.`);\n }\n } catch (error: unknown) {\n this.logger.debug(`Raw TCP P2P accept attempt failed: ${(error as Error).message}`);\n } finally {\n this.p2pAcceptRunning = false;\n }\n }\n\n private skipAcceptedP2PSessions(signaling: P2PSignalingClient): P2PSignalingClient {\n return {\n createP2PSession: (request) => signaling.createP2PSession(request),\n getP2PSession: (sessionIdOrUrl) => signaling.getP2PSession(sessionIdOrUrl),\n addP2PCandidates: (sessionIdOrUrl, request) => signaling.addP2PCandidates(sessionIdOrUrl, request),\n listP2PSessions: async () => {\n const sessions = await signaling.listP2PSessions();\n return sessions.filter((session) => !this.p2pAcceptedSessionIds.has(session.sessionId));\n },\n };\n }\n\n private resolveP2PApiBaseUrl(signalEndpoint: string): string {\n try {\n return new URL(signalEndpoint).origin;\n } catch {\n return signalEndpoint;\n }\n }\n\n private stringifyIfContent(data: Record<string, unknown>): string | undefined {\n const sanitized: Record<string, unknown> = {};\n for (const [ key, value ] of Object.entries(data)) {\n if (value !== undefined) {\n sanitized[key] = value;\n }\n }\n return Object.keys(sanitized).length > 0 ? JSON.stringify(sanitized) : undefined;\n }\n\n private collectSystemMetrics(): Record<string, unknown> {\n const load = os.loadavg();\n return {\n hostname: os.hostname(),\n platform: os.platform(),\n arch: os.arch(),\n uptime: os.uptime(),\n cpuCount: os.cpus().length,\n load1: load[0],\n load5: load[1],\n load15: load[2],\n totalMem: os.totalmem(),\n freeMem: os.freemem(),\n };\n }\n\n private buildHeartbeatMetadata(options: EdgeNodeAgentOptions): Record<string, unknown> {\n const metadata = { ...(options.metadata ?? {}) } as Record<string, unknown>;\n const p2pRoute = this.buildP2PHeartbeatRoute(options);\n if (p2pRoute) {\n metadata.routes = this.mergeHeartbeatRoutes(metadata.routes, p2pRoute);\n }\n return metadata;\n }\n\n private buildP2PHeartbeatRoute(options: EdgeNodeAgentOptions): EdgeNodeP2PHeartbeatRoute | undefined {\n const p2p = options.p2p;\n if (!p2p || this.normalizeBoolean(p2p.enabled) === false) {\n return undefined;\n }\n const label = typeof p2p.label === 'string' && p2p.label.length > 0 ? p2p.label : undefined;\n return {\n id: 'p2p-raw-tcp',\n nodeId: options.nodeId,\n ...(options.baseUrl ? { canonicalUrl: options.baseUrl } : {}),\n kind: 'p2p',\n targetUrl: `tcp-punch://node/${encodeURIComponent(options.nodeId)}`,\n priority: 40,\n requiresManagedClient: true,\n visibility: 'authorized-client',\n health: 'healthy',\n metadata: {\n protocols: {\n 'raw-tcp-hole-punch': {\n enabled: true,\n ...(label ? { label } : {}),\n },\n },\n },\n };\n }\n\n private mergeHeartbeatRoutes(existing: unknown, p2pRoute: EdgeNodeP2PHeartbeatRoute): EdgeNodeP2PHeartbeatRoute[] {\n const routes = Array.isArray(existing)\n ? existing.filter((entry): entry is EdgeNodeP2PHeartbeatRoute => Boolean(entry) && typeof entry === 'object')\n : [];\n const withoutGeneratedRoute = routes.filter((route) => route.id !== p2pRoute.id);\n return [...withoutGeneratedRoute, p2pRoute];\n }\n\n private normalizePositiveInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n\n private normalizeNonNegativeInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n\n private normalizeBoolean(value: boolean | string | undefined): boolean {\n if (value === undefined) {\n return true;\n }\n if (typeof value === 'boolean') {\n return value;\n }\n const normalized = value.trim().toLowerCase();\n return normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on';\n }\n\n private handleHeartbeatResponse(data: unknown): void {\n if (!data || typeof data !== 'object') {\n return;\n }\n const body = data as Record<string, any>;\n const metadata = body.metadata as Record<string, any> | undefined;\n this.clusterCertificate?.handleHeartbeatMetadata(metadata);\n const tunnel = metadata?.tunnel as Record<string, any> | undefined;\n const config = tunnel?.config as Record<string, any> | undefined;\n if (config) {\n this.logger.debug(`接收到隧道配置: ${JSON.stringify({ entrypoint: tunnel?.entrypoint, proxyName: config.proxyName })}`);\n }\n const entrypoint = typeof tunnel?.entrypoint === 'string' ? tunnel.entrypoint :\n typeof config?.publicUrl === 'string' ? config.publicUrl : undefined;\n void this.frpManager?.applyConfig(config as any, tunnel?.status as string | undefined, entrypoint);\n }\n\n private async issueCertificateLocally(options: EdgeNodeAgentOptions): Promise<void> {\n const acmeOptions = options.acme!;\n if (!acmeOptions.email || !acmeOptions.domains || acmeOptions.domains.length === 0) {\n throw new Error('本地 ACME 模式需要提供 email 与 domains。');\n }\n if (!acmeOptions.accountKeyPath) {\n throw new Error('本地 ACME 模式需要提供 accountKeyPath。');\n }\n const manager = new AcmeCertificateManager({\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n email: acmeOptions.email!,\n domains: acmeOptions.domains!,\n directoryUrl: acmeOptions.directoryUrl,\n accountKeyPath: acmeOptions.accountKeyPath!,\n certificateKeyPath: acmeOptions.certificateKeyPath,\n certificatePath: acmeOptions.certificatePath,\n fullChainPath: acmeOptions.fullChainPath,\n renewBeforeDays: acmeOptions.renewBeforeDays,\n propagationDelayMs: acmeOptions.propagationDelayMs,\n });\n this.localCertificate = manager;\n try {\n const issued = await manager.ensureCertificate();\n if (issued && acmeOptions.postDeployCommand && acmeOptions.postDeployCommand.length > 0) {\n await this.runPostDeploy(acmeOptions.postDeployCommand);\n }\n } catch (error: unknown) {\n this.logger.error(`自动签发证书失败:${(error as Error).message}`);\n throw error;\n }\n }\n\n private async ensureClusterCertificate(options: EdgeNodeAgentOptions): Promise<void> {\n const acmeOptions = options.acme!;\n if (!acmeOptions.certificateKeyPath || !acmeOptions.certificatePath) {\n throw new Error('Cluster 模式需要提供 certificateKeyPath 与 certificatePath。');\n }\n const manager = new ClusterCertificateManager({\n signalEndpoint: options.signalEndpoint,\n nodeId: options.nodeId,\n nodeToken: options.nodeToken,\n certificateKeyPath: acmeOptions.certificateKeyPath,\n certificatePath: acmeOptions.certificatePath,\n fullChainPath: acmeOptions.fullChainPath,\n renewBeforeDays: acmeOptions.renewBeforeDays,\n onCertificateInstalled: acmeOptions.postDeployCommand ? () => this.runPostDeploy(acmeOptions.postDeployCommand!) : undefined,\n });\n this.clusterCertificate = manager;\n await manager.start();\n }\n\n private async runPostDeploy(command: string[]): Promise<void> {\n const [ executable, ...args ] = command;\n if (!executable) {\n return;\n }\n await new Promise<void>((resolve, reject) => {\n const child = spawn(executable, args, { stdio: 'inherit' });\n child.on('error', reject);\n child.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`命令 ${executable} 退出码 ${code}`));\n }\n });\n });\n }\n\n private buildTunnelHeartbeatPayload(): Record<string, unknown> | undefined {\n const status: FrpcRuntimeStatus | undefined = this.frpManager?.getStatus();\n if (!status) {\n return undefined;\n }\n return { client: status };\n }\n\n /**\n * 获取网络信息(带缓存,每分钟刷新一次)\n */\n private async getNetworkInfo(): Promise<{ ipv4?: string; ipv6?: string }> {\n const now = Date.now();\n \n // 如果缓存过期,重新检测\n if (!this.cachedNetworkInfo || (now - this.lastNetworkDetection) > this.networkDetectionIntervalMs) {\n if (this.networkDetector) {\n try {\n this.cachedNetworkInfo = await this.networkDetector.detectNetworkAddresses();\n this.lastNetworkDetection = now;\n } catch (error: unknown) {\n this.logger.debug(`Network detection failed: ${(error as Error).message}`);\n }\n }\n }\n \n // 优先返回公网地址\n return {\n ipv4: this.cachedNetworkInfo?.ipv4Public ?? this.cachedNetworkInfo?.ipv4,\n ipv6: this.cachedNetworkInfo?.ipv6Public ?? this.cachedNetworkInfo?.ipv6,\n };\n }\n}\n\nfunction addressEvidenceFromCandidates(candidates: Array<{ host?: string; address?: string; url?: string }>): CandidateAddressEvidence {\n const evidence = candidates.map(candidateAddressEvidence);\n return evidence.find((entry) => entry === 'explicit-host')\n ?? evidence.find((entry) => entry === 'explicit-address')\n ?? evidence.find((entry) => entry === 'signal-observed')\n ?? evidence.find((entry) => entry === 'candidate-url')\n ?? 'port-only';\n}\n\nfunction candidateAddressEvidence(candidate: { host?: string; address?: string; url?: string }): CandidateAddressEvidence {\n if (candidate.host) {\n return 'explicit-host';\n }\n if (candidate.address && candidate.url) {\n return 'explicit-address';\n }\n if (candidate.address) {\n return 'signal-observed';\n }\n if (candidate.url) {\n return 'candidate-url';\n }\n return 'port-only';\n}\n"]}
|
|
@@ -128,6 +128,10 @@
|
|
|
128
128
|
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_frpManager",
|
|
129
129
|
"memberFieldName": "frpManager"
|
|
130
130
|
},
|
|
131
|
+
{
|
|
132
|
+
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_localCertificate",
|
|
133
|
+
"memberFieldName": "localCertificate"
|
|
134
|
+
},
|
|
131
135
|
{
|
|
132
136
|
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_clusterCertificate",
|
|
133
137
|
"memberFieldName": "clusterCertificate"
|
|
@@ -176,6 +180,10 @@
|
|
|
176
180
|
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_stop",
|
|
177
181
|
"memberFieldName": "stop"
|
|
178
182
|
},
|
|
183
|
+
{
|
|
184
|
+
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_getCertificateRuntime",
|
|
185
|
+
"memberFieldName": "getCertificateRuntime"
|
|
186
|
+
},
|
|
179
187
|
{
|
|
180
188
|
"@id": "undefineds:dist/edge/EdgeNodeAgent.jsonld#EdgeNodeAgent__member_startP2PAcceptLoop",
|
|
181
189
|
"memberFieldName": "startP2PAcceptLoop"
|
|
@@ -20,6 +20,18 @@ export interface EdgeNodeAgentInitializerOptions {
|
|
|
20
20
|
p2pAcceptIntervalMs?: number | string;
|
|
21
21
|
p2pConnectTimeoutMs?: number | string;
|
|
22
22
|
p2pWinnerSelectionWindowMs?: number | string;
|
|
23
|
+
certificateBridgeId?: string;
|
|
24
|
+
acmeMode?: 'local' | 'cluster' | string;
|
|
25
|
+
acmeEmail?: string;
|
|
26
|
+
acmeDomains?: string | string[];
|
|
27
|
+
acmeDirectoryUrl?: string;
|
|
28
|
+
acmeAccountKeyPath?: string;
|
|
29
|
+
acmeCertificateKeyPath?: string;
|
|
30
|
+
acmeCertificatePath?: string;
|
|
31
|
+
acmeFullChainPath?: string;
|
|
32
|
+
acmeRenewBeforeDays?: number | string;
|
|
33
|
+
acmePropagationDelayMs?: number | string;
|
|
34
|
+
acmePostDeployCommand?: string | string[];
|
|
23
35
|
}
|
|
24
36
|
/**
|
|
25
37
|
* Initializer that starts the EdgeNodeAgent.
|
|
@@ -30,13 +42,17 @@ export declare class EdgeNodeAgentInitializer extends Initializer {
|
|
|
30
42
|
private readonly agent;
|
|
31
43
|
private readonly options;
|
|
32
44
|
private readonly enabled;
|
|
45
|
+
private readonly certificateBridge?;
|
|
33
46
|
constructor(options: EdgeNodeAgentInitializerOptions);
|
|
34
47
|
handle(): Promise<void>;
|
|
48
|
+
stop(): void;
|
|
35
49
|
/**
|
|
36
50
|
* 确保启用时必需参数存在
|
|
37
51
|
*/
|
|
38
52
|
private validateOptions;
|
|
39
53
|
private buildAgentOptions;
|
|
54
|
+
private buildAcmeOptions;
|
|
55
|
+
private normalizeStringList;
|
|
40
56
|
private normalizeBoolean;
|
|
41
57
|
private normalizePositiveInteger;
|
|
42
58
|
private normalizeNonNegativeInteger;
|
|
@@ -4,6 +4,8 @@ exports.EdgeNodeAgentInitializer = void 0;
|
|
|
4
4
|
const community_server_1 = require("@solid/community-server");
|
|
5
5
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
6
6
|
const EdgeNodeAgent_1 = require("./EdgeNodeAgent");
|
|
7
|
+
const EdgeNodeCertificateCapabilityBridge_1 = require("./EdgeNodeCertificateCapabilityBridge");
|
|
8
|
+
const certificateBridgeSourceReleases = new WeakMap();
|
|
7
9
|
/**
|
|
8
10
|
* Initializer that starts the EdgeNodeAgent.
|
|
9
11
|
* Designed to be safe to configure even when disabled or missing dependent variables.
|
|
@@ -15,6 +17,11 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
15
17
|
this.options = options;
|
|
16
18
|
this.agent = new EdgeNodeAgent_1.EdgeNodeAgent();
|
|
17
19
|
this.enabled = this.normalizeBoolean(options.enabled);
|
|
20
|
+
const bridgeId = options.certificateBridgeId ?? (0, EdgeNodeCertificateCapabilityBridge_1.resolveEdgeNodeCertificateCapabilityBridgeId)({
|
|
21
|
+
nodeId: options.nodeId,
|
|
22
|
+
baseUrl: options.baseUrl,
|
|
23
|
+
});
|
|
24
|
+
this.certificateBridge = bridgeId ? (0, EdgeNodeCertificateCapabilityBridge_1.getEdgeNodeCertificateCapabilityBridge)(bridgeId) : undefined;
|
|
18
25
|
}
|
|
19
26
|
async handle() {
|
|
20
27
|
if (!this.enabled) {
|
|
@@ -26,6 +33,10 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
26
33
|
this.validateOptions(this.options);
|
|
27
34
|
try {
|
|
28
35
|
await this.agent.start(this.buildAgentOptions(this.options));
|
|
36
|
+
const release = this.certificateBridge?.setSource(() => this.agent.getCertificateRuntime());
|
|
37
|
+
if (release) {
|
|
38
|
+
certificateBridgeSourceReleases.set(this, release);
|
|
39
|
+
}
|
|
29
40
|
this.logger.info(`EdgeNodeAgent started (Node: ${this.options.nodeId})`);
|
|
30
41
|
}
|
|
31
42
|
catch (error) {
|
|
@@ -33,6 +44,11 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
33
44
|
throw error;
|
|
34
45
|
}
|
|
35
46
|
}
|
|
47
|
+
stop() {
|
|
48
|
+
certificateBridgeSourceReleases.get(this)?.();
|
|
49
|
+
certificateBridgeSourceReleases.delete(this);
|
|
50
|
+
this.agent.stop();
|
|
51
|
+
}
|
|
36
52
|
/**
|
|
37
53
|
* 确保启用时必需参数存在
|
|
38
54
|
*/
|
|
@@ -53,6 +69,7 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
53
69
|
}
|
|
54
70
|
buildAgentOptions(options) {
|
|
55
71
|
const p2pEnabled = this.normalizeBoolean(options.p2pEnabled);
|
|
72
|
+
const acme = this.buildAcmeOptions(options);
|
|
56
73
|
return {
|
|
57
74
|
signalEndpoint: options.signalEndpoint,
|
|
58
75
|
nodeId: options.nodeId,
|
|
@@ -64,6 +81,7 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
64
81
|
enableNetworkDetection: options.enableNetworkDetection,
|
|
65
82
|
metadata: options.metadata,
|
|
66
83
|
intervalMs: this.normalizePositiveInteger(options.intervalMs),
|
|
84
|
+
...(acme ? { acme } : {}),
|
|
67
85
|
...(p2pEnabled ? {
|
|
68
86
|
p2p: {
|
|
69
87
|
enabled: true,
|
|
@@ -76,6 +94,39 @@ class EdgeNodeAgentInitializer extends community_server_1.Initializer {
|
|
|
76
94
|
} : {}),
|
|
77
95
|
};
|
|
78
96
|
}
|
|
97
|
+
buildAcmeOptions(options) {
|
|
98
|
+
if (!options.acmeCertificateKeyPath && !options.acmeCertificatePath) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
if (!options.acmeCertificateKeyPath || !options.acmeCertificatePath) {
|
|
102
|
+
throw new Error('EdgeNodeAgent ACME configuration requires acmeCertificateKeyPath and acmeCertificatePath together.');
|
|
103
|
+
}
|
|
104
|
+
const domains = this.normalizeStringList(options.acmeDomains);
|
|
105
|
+
return {
|
|
106
|
+
mode: options.acmeMode === 'cluster' ? 'cluster' : 'local',
|
|
107
|
+
email: options.acmeEmail,
|
|
108
|
+
domains,
|
|
109
|
+
directoryUrl: options.acmeDirectoryUrl,
|
|
110
|
+
accountKeyPath: options.acmeAccountKeyPath,
|
|
111
|
+
certificateKeyPath: options.acmeCertificateKeyPath,
|
|
112
|
+
certificatePath: options.acmeCertificatePath,
|
|
113
|
+
fullChainPath: options.acmeFullChainPath,
|
|
114
|
+
renewBeforeDays: this.normalizePositiveInteger(options.acmeRenewBeforeDays),
|
|
115
|
+
propagationDelayMs: this.normalizePositiveInteger(options.acmePropagationDelayMs),
|
|
116
|
+
postDeployCommand: this.normalizeStringList(options.acmePostDeployCommand),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
normalizeStringList(value) {
|
|
120
|
+
if (Array.isArray(value)) {
|
|
121
|
+
const entries = value.map((entry) => entry.trim()).filter(Boolean);
|
|
122
|
+
return entries.length > 0 ? entries : undefined;
|
|
123
|
+
}
|
|
124
|
+
if (typeof value === 'string') {
|
|
125
|
+
const entries = value.split(',').map((entry) => entry.trim()).filter(Boolean);
|
|
126
|
+
return entries.length > 0 ? entries : undefined;
|
|
127
|
+
}
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
79
130
|
normalizeBoolean(value) {
|
|
80
131
|
if (typeof value === 'boolean') {
|
|
81
132
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EdgeNodeAgentInitializer.js","sourceRoot":"","sources":["../../src/edge/EdgeNodeAgentInitializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Initializer } from '@solid/community-server';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { EdgeNodeAgent, type EdgeNodeAgentOptions } from './EdgeNodeAgent';\n\n/**\n * 所有配置项设为可选,以便在 disabled 状态下即使缺少 CLI 变量也能成功实例化。\n */\nexport interface EdgeNodeAgentInitializerOptions {\n enabled?: boolean | string;\n signalEndpoint?: string;\n nodeId?: string;\n nodeToken?: string;\n baseUrl?: string;\n directCandidates?: string | string[];\n pods?: string[];\n includeSystemMetrics?: boolean;\n enableNetworkDetection?: boolean;\n metadata?: Record<string, unknown>;\n intervalMs?: number | string;\n p2pEnabled?: boolean | string;\n p2pTargetBaseUrl?: string;\n p2pLabel?: string;\n p2pAcceptIntervalMs?: number | string;\n p2pConnectTimeoutMs?: number | string;\n p2pWinnerSelectionWindowMs?: number | string;\n}\n\n/**\n * Initializer that starts the EdgeNodeAgent.\n * Designed to be safe to configure even when disabled or missing dependent variables.\n */\nexport class EdgeNodeAgentInitializer extends Initializer {\n protected readonly logger = getLoggerFor(this);\n private readonly agent: EdgeNodeAgent;\n private readonly options: EdgeNodeAgentInitializerOptions;\n private readonly enabled: boolean;\n\n public constructor(options: EdgeNodeAgentInitializerOptions) {\n super();\n this.options = options;\n this.agent = new EdgeNodeAgent();\n this.enabled = this.normalizeBoolean(options.enabled);\n }\n\n public override async handle(): Promise<void> {\n if (!this.enabled) {\n this.logger.debug('EdgeNodeAgent is disabled, skipping startup.');\n return;\n }\n\n this.logger.info('Enabling EdgeNodeAgent...');\n \n // 运行时严格校验参数\n this.validateOptions(this.options);\n\n try {\n await this.agent.start(this.buildAgentOptions(this.options));\n this.logger.info(`EdgeNodeAgent started (Node: ${this.options.nodeId})`);\n } catch (error: unknown) {\n this.logger.error(`Failed to start EdgeNodeAgent: ${(error as Error).message}`);\n throw error;\n }\n }\n\n /**\n * 确保启用时必需参数存在\n */\n private validateOptions(options: EdgeNodeAgentInitializerOptions): void {\n const missing: string[] = [];\n \n if (!options.signalEndpoint) missing.push('signalEndpoint');\n if (!options.nodeId) missing.push('nodeId');\n if (!options.nodeToken) missing.push('nodeToken');\n if (this.normalizeBoolean(options.p2pEnabled) && !options.p2pTargetBaseUrl) {\n missing.push('p2pTargetBaseUrl');\n }\n\n if (missing.length > 0) {\n throw new Error(`EdgeNodeAgent enabled but missing required configuration: ${missing.join(', ')}`);\n }\n }\n\n private buildAgentOptions(options: EdgeNodeAgentInitializerOptions): EdgeNodeAgentOptions {\n const p2pEnabled = this.normalizeBoolean(options.p2pEnabled);\n return {\n signalEndpoint: options.signalEndpoint!,\n nodeId: options.nodeId!,\n nodeToken: options.nodeToken!,\n baseUrl: options.baseUrl,\n directCandidates: options.directCandidates,\n pods: options.pods,\n includeSystemMetrics: options.includeSystemMetrics,\n enableNetworkDetection: options.enableNetworkDetection,\n metadata: options.metadata,\n intervalMs: this.normalizePositiveInteger(options.intervalMs),\n ...(p2pEnabled ? {\n p2p: {\n enabled: true,\n targetBaseUrl: options.p2pTargetBaseUrl!,\n label: options.p2pLabel,\n acceptIntervalMs: this.normalizePositiveInteger(options.p2pAcceptIntervalMs),\n connectTimeoutMs: this.normalizePositiveInteger(options.p2pConnectTimeoutMs),\n winnerSelectionWindowMs: this.normalizeNonNegativeInteger(options.p2pWinnerSelectionWindowMs),\n },\n } : {}),\n };\n }\n\n private normalizeBoolean(value: string | boolean | undefined): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n return normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on';\n }\n return false;\n }\n\n private normalizePositiveInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return undefined;\n }\n\n private normalizeNonNegativeInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"EdgeNodeAgentInitializer.js","sourceRoot":"","sources":["../../src/edge/EdgeNodeAgentInitializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Initializer } from '@solid/community-server';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { EdgeNodeAgent, type EdgeNodeAgentOptions } from './EdgeNodeAgent';\nimport {\n getEdgeNodeCertificateCapabilityBridge,\n resolveEdgeNodeCertificateCapabilityBridgeId,\n type EdgeNodeCertificateCapabilityBridge,\n} from './EdgeNodeCertificateCapabilityBridge';\n\nconst certificateBridgeSourceReleases = new WeakMap<EdgeNodeAgentInitializer, () => void>();\n\n/**\n * 所有配置项设为可选,以便在 disabled 状态下即使缺少 CLI 变量也能成功实例化。\n */\nexport interface EdgeNodeAgentInitializerOptions {\n enabled?: boolean | string;\n signalEndpoint?: string;\n nodeId?: string;\n nodeToken?: string;\n baseUrl?: string;\n directCandidates?: string | string[];\n pods?: string[];\n includeSystemMetrics?: boolean;\n enableNetworkDetection?: boolean;\n metadata?: Record<string, unknown>;\n intervalMs?: number | string;\n p2pEnabled?: boolean | string;\n p2pTargetBaseUrl?: string;\n p2pLabel?: string;\n p2pAcceptIntervalMs?: number | string;\n p2pConnectTimeoutMs?: number | string;\n p2pWinnerSelectionWindowMs?: number | string;\n certificateBridgeId?: string;\n acmeMode?: 'local' | 'cluster' | string;\n acmeEmail?: string;\n acmeDomains?: string | string[];\n acmeDirectoryUrl?: string;\n acmeAccountKeyPath?: string;\n acmeCertificateKeyPath?: string;\n acmeCertificatePath?: string;\n acmeFullChainPath?: string;\n acmeRenewBeforeDays?: number | string;\n acmePropagationDelayMs?: number | string;\n acmePostDeployCommand?: string | string[];\n}\n\n/**\n * Initializer that starts the EdgeNodeAgent.\n * Designed to be safe to configure even when disabled or missing dependent variables.\n */\nexport class EdgeNodeAgentInitializer extends Initializer {\n protected readonly logger = getLoggerFor(this);\n private readonly agent: EdgeNodeAgent;\n private readonly options: EdgeNodeAgentInitializerOptions;\n private readonly enabled: boolean;\n private readonly certificateBridge?: EdgeNodeCertificateCapabilityBridge;\n\n public constructor(options: EdgeNodeAgentInitializerOptions) {\n super();\n this.options = options;\n this.agent = new EdgeNodeAgent();\n this.enabled = this.normalizeBoolean(options.enabled);\n const bridgeId = options.certificateBridgeId ?? resolveEdgeNodeCertificateCapabilityBridgeId({\n nodeId: options.nodeId,\n baseUrl: options.baseUrl,\n });\n this.certificateBridge = bridgeId ? getEdgeNodeCertificateCapabilityBridge(bridgeId) : undefined;\n }\n\n public override async handle(): Promise<void> {\n if (!this.enabled) {\n this.logger.debug('EdgeNodeAgent is disabled, skipping startup.');\n return;\n }\n\n this.logger.info('Enabling EdgeNodeAgent...');\n \n // 运行时严格校验参数\n this.validateOptions(this.options);\n\n try {\n await this.agent.start(this.buildAgentOptions(this.options));\n const release = this.certificateBridge?.setSource(() => this.agent.getCertificateRuntime());\n if (release) {\n certificateBridgeSourceReleases.set(this, release);\n }\n this.logger.info(`EdgeNodeAgent started (Node: ${this.options.nodeId})`);\n } catch (error: unknown) {\n this.logger.error(`Failed to start EdgeNodeAgent: ${(error as Error).message}`);\n throw error;\n }\n }\n\n public stop(): void {\n certificateBridgeSourceReleases.get(this)?.();\n certificateBridgeSourceReleases.delete(this);\n this.agent.stop();\n }\n\n /**\n * 确保启用时必需参数存在\n */\n private validateOptions(options: EdgeNodeAgentInitializerOptions): void {\n const missing: string[] = [];\n \n if (!options.signalEndpoint) missing.push('signalEndpoint');\n if (!options.nodeId) missing.push('nodeId');\n if (!options.nodeToken) missing.push('nodeToken');\n if (this.normalizeBoolean(options.p2pEnabled) && !options.p2pTargetBaseUrl) {\n missing.push('p2pTargetBaseUrl');\n }\n\n if (missing.length > 0) {\n throw new Error(`EdgeNodeAgent enabled but missing required configuration: ${missing.join(', ')}`);\n }\n }\n\n private buildAgentOptions(options: EdgeNodeAgentInitializerOptions): EdgeNodeAgentOptions {\n const p2pEnabled = this.normalizeBoolean(options.p2pEnabled);\n const acme = this.buildAcmeOptions(options);\n return {\n signalEndpoint: options.signalEndpoint!,\n nodeId: options.nodeId!,\n nodeToken: options.nodeToken!,\n baseUrl: options.baseUrl,\n directCandidates: options.directCandidates,\n pods: options.pods,\n includeSystemMetrics: options.includeSystemMetrics,\n enableNetworkDetection: options.enableNetworkDetection,\n metadata: options.metadata,\n intervalMs: this.normalizePositiveInteger(options.intervalMs),\n ...(acme ? { acme } : {}),\n ...(p2pEnabled ? {\n p2p: {\n enabled: true,\n targetBaseUrl: options.p2pTargetBaseUrl!,\n label: options.p2pLabel,\n acceptIntervalMs: this.normalizePositiveInteger(options.p2pAcceptIntervalMs),\n connectTimeoutMs: this.normalizePositiveInteger(options.p2pConnectTimeoutMs),\n winnerSelectionWindowMs: this.normalizeNonNegativeInteger(options.p2pWinnerSelectionWindowMs),\n },\n } : {}),\n };\n }\n\n private buildAcmeOptions(options: EdgeNodeAgentInitializerOptions): EdgeNodeAgentOptions['acme'] | undefined {\n if (!options.acmeCertificateKeyPath && !options.acmeCertificatePath) {\n return undefined;\n }\n if (!options.acmeCertificateKeyPath || !options.acmeCertificatePath) {\n throw new Error('EdgeNodeAgent ACME configuration requires acmeCertificateKeyPath and acmeCertificatePath together.');\n }\n const domains = this.normalizeStringList(options.acmeDomains);\n return {\n mode: options.acmeMode === 'cluster' ? 'cluster' : 'local',\n email: options.acmeEmail,\n domains,\n directoryUrl: options.acmeDirectoryUrl,\n accountKeyPath: options.acmeAccountKeyPath,\n certificateKeyPath: options.acmeCertificateKeyPath,\n certificatePath: options.acmeCertificatePath,\n fullChainPath: options.acmeFullChainPath,\n renewBeforeDays: this.normalizePositiveInteger(options.acmeRenewBeforeDays),\n propagationDelayMs: this.normalizePositiveInteger(options.acmePropagationDelayMs),\n postDeployCommand: this.normalizeStringList(options.acmePostDeployCommand),\n };\n }\n\n private normalizeStringList(value: string | string[] | undefined): string[] | undefined {\n if (Array.isArray(value)) {\n const entries = value.map((entry) => entry.trim()).filter(Boolean);\n return entries.length > 0 ? entries : undefined;\n }\n if (typeof value === 'string') {\n const entries = value.split(',').map((entry) => entry.trim()).filter(Boolean);\n return entries.length > 0 ? entries : undefined;\n }\n return undefined;\n }\n\n private normalizeBoolean(value: string | boolean | undefined): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n return normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on';\n }\n return false;\n }\n\n private normalizePositiveInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return undefined;\n }\n\n private normalizeNonNegativeInteger(value: number | string | undefined): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {\n return Math.floor(value);\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return Math.floor(parsed);\n }\n }\n return undefined;\n }\n}\n"]}
|