daycare-cli 0.0.30 → 0.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -0
- package/dist/commands/add.js.map +1 -1
- package/dist/config/configResolve.js +2 -1
- package/dist/config/configResolve.js.map +1 -1
- package/dist/config/configResolve.spec.js +10 -1
- package/dist/config/configResolve.spec.js.map +1 -1
- package/dist/config/configSettingsParse.d.ts.map +1 -1
- package/dist/config/configSettingsParse.js +2 -1
- package/dist/config/configSettingsParse.js.map +1 -1
- package/dist/config/configSettingsParse.spec.d.ts +2 -0
- package/dist/config/configSettingsParse.spec.d.ts.map +1 -0
- package/dist/config/configSettingsParse.spec.js +13 -0
- package/dist/config/configSettingsParse.spec.js.map +1 -0
- package/dist/engine/agents/agent.d.ts +1 -0
- package/dist/engine/agents/agent.d.ts.map +1 -1
- package/dist/engine/agents/agent.js +109 -66
- package/dist/engine/agents/agent.js.map +1 -1
- package/dist/engine/agents/agentSystem.spec.js +4 -2
- package/dist/engine/agents/agentSystem.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryContextBuild.d.ts +8 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.js +86 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.js.map +1 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.spec.d.ts +2 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.spec.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.spec.js +80 -0
- package/dist/engine/agents/ops/agentHistoryContextBuild.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.d.ts +11 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.js +32 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.js.map +1 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.spec.d.ts +2 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.spec.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.spec.js +106 -0
- package/dist/engine/agents/ops/agentHistoryPendingRlmResolve.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentHistoryPendingToolResultsBuild.js +1 -1
- package/dist/engine/agents/ops/agentHistoryPendingToolResultsBuild.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryPendingToolResultsBuild.spec.js +2 -4
- package/dist/engine/agents/ops/agentHistoryPendingToolResultsBuild.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.js +43 -0
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.js.map +1 -1
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.spec.d.ts +2 -0
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.spec.d.ts.map +1 -0
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.spec.js +107 -0
- package/dist/engine/agents/ops/agentHistoryRecordsLoad.spec.js.map +1 -0
- package/dist/engine/agents/ops/agentHistorySummaryBuild.js +4 -0
- package/dist/engine/agents/ops/agentHistorySummaryBuild.js.map +1 -1
- package/dist/engine/agents/ops/agentHistorySummaryBuild.spec.js +9 -2
- package/dist/engine/agents/ops/agentHistorySummaryBuild.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.js +118 -20
- package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.spec.js +338 -21
- package/dist/engine/agents/ops/agentLoopRun.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentTypes.d.ts +36 -1
- package/dist/engine/agents/ops/agentTypes.d.ts.map +1 -1
- package/dist/engine/agents/ops/contextEstimateTokens.spec.js +3 -6
- package/dist/engine/agents/ops/contextEstimateTokens.spec.js.map +1 -1
- package/dist/engine/apps/appExecute.spec.js +2 -4
- package/dist/engine/apps/appExecute.spec.js.map +1 -1
- package/dist/engine/apps/appInstallToolBuild.js +1 -1
- package/dist/engine/apps/appInstallToolBuild.js.map +1 -1
- package/dist/engine/apps/appRuleToolBuild.js +1 -1
- package/dist/engine/apps/appRuleToolBuild.js.map +1 -1
- package/dist/engine/apps/appRuleToolBuild.spec.js +1 -2
- package/dist/engine/apps/appRuleToolBuild.spec.js.map +1 -1
- package/dist/engine/apps/appToolBuild.js +1 -1
- package/dist/engine/apps/appToolBuild.js.map +1 -1
- package/dist/engine/apps/appToolExecutorBuild.d.ts.map +1 -1
- package/dist/engine/apps/appToolExecutorBuild.js +2 -4
- package/dist/engine/apps/appToolExecutorBuild.js.map +1 -1
- package/dist/engine/apps/appToolExecutorBuild.spec.js +1 -2
- package/dist/engine/apps/appToolExecutorBuild.spec.js.map +1 -1
- package/dist/engine/cron/crons.d.ts +4 -0
- package/dist/engine/cron/crons.d.ts.map +1 -1
- package/dist/engine/cron/crons.js +13 -9
- package/dist/engine/cron/crons.js.map +1 -1
- package/dist/engine/cron/crons.spec.d.ts +2 -0
- package/dist/engine/cron/crons.spec.d.ts.map +1 -0
- package/dist/engine/cron/crons.spec.js +73 -0
- package/dist/engine/cron/crons.spec.js.map +1 -0
- package/dist/engine/cron/ops/cronScheduler.d.ts +2 -2
- package/dist/engine/cron/ops/cronScheduler.d.ts.map +1 -1
- package/dist/engine/cron/ops/cronScheduler.js +27 -8
- package/dist/engine/cron/ops/cronScheduler.js.map +1 -1
- package/dist/engine/cron/ops/cronScheduler.spec.js +77 -7
- package/dist/engine/cron/ops/cronScheduler.spec.js.map +1 -1
- package/dist/engine/engine.d.ts +2 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +27 -3
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/engine.spec.js +20 -0
- package/dist/engine/engine.spec.js.map +1 -1
- package/dist/engine/expose/exposeProxy.d.ts +23 -0
- package/dist/engine/expose/exposeProxy.d.ts.map +1 -0
- package/dist/engine/expose/exposeProxy.js +188 -0
- package/dist/engine/expose/exposeProxy.js.map +1 -0
- package/dist/engine/expose/exposeProxy.spec.d.ts +2 -0
- package/dist/engine/expose/exposeProxy.spec.d.ts.map +1 -0
- package/dist/engine/expose/exposeProxy.spec.js +179 -0
- package/dist/engine/expose/exposeProxy.spec.js.map +1 -0
- package/dist/engine/expose/exposeTypes.d.ts +89 -0
- package/dist/engine/expose/exposeTypes.d.ts.map +1 -0
- package/dist/engine/expose/exposeTypes.js +106 -0
- package/dist/engine/expose/exposeTypes.js.map +1 -0
- package/dist/engine/expose/exposeTypes.spec.d.ts +2 -0
- package/dist/engine/expose/exposeTypes.spec.d.ts.map +1 -0
- package/dist/engine/expose/exposeTypes.spec.js +64 -0
- package/dist/engine/expose/exposeTypes.spec.js.map +1 -0
- package/dist/engine/expose/exposes.d.ts +55 -0
- package/dist/engine/expose/exposes.d.ts.map +1 -0
- package/dist/engine/expose/exposes.js +377 -0
- package/dist/engine/expose/exposes.js.map +1 -0
- package/dist/engine/expose/exposes.spec.d.ts +2 -0
- package/dist/engine/expose/exposes.spec.d.ts.map +1 -0
- package/dist/engine/expose/exposes.spec.js +304 -0
- package/dist/engine/expose/exposes.spec.js.map +1 -0
- package/dist/engine/heartbeat/heartbeatTypes.d.ts +1 -1
- package/dist/engine/heartbeat/heartbeatTypes.d.ts.map +1 -1
- package/dist/engine/heartbeat/heartbeats.d.ts +4 -0
- package/dist/engine/heartbeat/heartbeats.d.ts.map +1 -1
- package/dist/engine/heartbeat/heartbeats.js +13 -9
- package/dist/engine/heartbeat/heartbeats.js.map +1 -1
- package/dist/engine/heartbeat/heartbeats.spec.d.ts +2 -0
- package/dist/engine/heartbeat/heartbeats.spec.d.ts.map +1 -0
- package/dist/engine/heartbeat/heartbeats.spec.js +66 -0
- package/dist/engine/heartbeat/heartbeats.spec.js.map +1 -0
- package/dist/engine/heartbeat/ops/heartbeatScheduler.d.ts +1 -1
- package/dist/engine/heartbeat/ops/heartbeatScheduler.d.ts.map +1 -1
- package/dist/engine/heartbeat/ops/heartbeatScheduler.js +25 -8
- package/dist/engine/heartbeat/ops/heartbeatScheduler.js.map +1 -1
- package/dist/engine/heartbeat/ops/heartbeatScheduler.spec.js +76 -7
- package/dist/engine/heartbeat/ops/heartbeatScheduler.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmConvert.spec.js +2 -4
- package/dist/engine/modules/rlm/rlmConvert.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmErrorTextBuild.d.ts +6 -0
- package/dist/engine/modules/rlm/rlmErrorTextBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmErrorTextBuild.js +22 -0
- package/dist/engine/modules/rlm/rlmErrorTextBuild.js.map +1 -0
- package/dist/engine/modules/rlm/rlmExecute.d.ts +3 -2
- package/dist/engine/modules/rlm/rlmExecute.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmExecute.js +69 -11
- package/dist/engine/modules/rlm/rlmExecute.js.map +1 -1
- package/dist/engine/modules/rlm/rlmExecute.spec.js +20 -8
- package/dist/engine/modules/rlm/rlmExecute.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmHistoryCompleteErrorRecordBuild.d.ts +7 -0
- package/dist/engine/modules/rlm/rlmHistoryCompleteErrorRecordBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmHistoryCompleteErrorRecordBuild.js +17 -0
- package/dist/engine/modules/rlm/rlmHistoryCompleteErrorRecordBuild.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.d.ts +6 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.js +9 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.spec.d.ts +2 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.spec.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.spec.js +16 -0
- package/dist/engine/modules/rlm/rlmNoToolsExtract.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.d.ts +10 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.js +8 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.spec.d.ts +2 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.spec.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.spec.js +11 -0
- package/dist/engine/modules/rlm/rlmNoToolsModeIs.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.d.ts +8 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.js +50 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.spec.d.ts +2 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.spec.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.spec.js +35 -0
- package/dist/engine/modules/rlm/rlmNoToolsPromptBuild.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.d.ts +14 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.js +22 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.js.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.spec.d.ts +2 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.spec.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.spec.js +33 -0
- package/dist/engine/modules/rlm/rlmNoToolsResultMessageBuild.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmRestore.d.ts +9 -0
- package/dist/engine/modules/rlm/rlmRestore.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmRestore.js +166 -0
- package/dist/engine/modules/rlm/rlmRestore.js.map +1 -0
- package/dist/engine/modules/rlm/rlmRestore.spec.d.ts +2 -0
- package/dist/engine/modules/rlm/rlmRestore.spec.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmRestore.spec.js +120 -0
- package/dist/engine/modules/rlm/rlmRestore.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmResultTextBuild.d.ts +7 -0
- package/dist/engine/modules/rlm/rlmResultTextBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmResultTextBuild.js +15 -0
- package/dist/engine/modules/rlm/rlmResultTextBuild.js.map +1 -0
- package/dist/engine/modules/rlm/rlmTool.d.ts.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.js +9 -37
- package/dist/engine/modules/rlm/rlmTool.js.map +1 -1
- package/dist/engine/modules/rlm/rlmTool.spec.js +17 -2
- package/dist/engine/modules/rlm/rlmTool.spec.js.map +1 -1
- package/dist/engine/modules/rlm/rlmToolResultBuild.d.ts +10 -0
- package/dist/engine/modules/rlm/rlmToolResultBuild.d.ts.map +1 -0
- package/dist/engine/modules/rlm/rlmToolResultBuild.js +16 -0
- package/dist/engine/modules/rlm/rlmToolResultBuild.js.map +1 -0
- package/dist/engine/modules/say/sayFileExtract.d.ts +11 -0
- package/dist/engine/modules/say/sayFileExtract.d.ts.map +1 -0
- package/dist/engine/modules/say/sayFileExtract.js +34 -0
- package/dist/engine/modules/say/sayFileExtract.js.map +1 -0
- package/dist/engine/modules/say/sayFileExtract.spec.d.ts +2 -0
- package/dist/engine/modules/say/sayFileExtract.spec.d.ts.map +1 -0
- package/dist/engine/modules/say/sayFileExtract.spec.js +33 -0
- package/dist/engine/modules/say/sayFileExtract.spec.js.map +1 -0
- package/dist/engine/modules/say/sayFileResolve.d.ts +18 -0
- package/dist/engine/modules/say/sayFileResolve.d.ts.map +1 -0
- package/dist/engine/modules/say/sayFileResolve.js +117 -0
- package/dist/engine/modules/say/sayFileResolve.js.map +1 -0
- package/dist/engine/modules/say/sayFileResolve.spec.d.ts +2 -0
- package/dist/engine/modules/say/sayFileResolve.spec.d.ts.map +1 -0
- package/dist/engine/modules/say/sayFileResolve.spec.js +105 -0
- package/dist/engine/modules/say/sayFileResolve.spec.js.map +1 -0
- package/dist/engine/modules/toolResolver.d.ts.map +1 -1
- package/dist/engine/modules/toolResolver.js +7 -4
- package/dist/engine/modules/toolResolver.js.map +1 -1
- package/dist/engine/modules/toolResolver.spec.d.ts +2 -0
- package/dist/engine/modules/toolResolver.spec.d.ts.map +1 -0
- package/dist/engine/modules/toolResolver.spec.js +103 -0
- package/dist/engine/modules/toolResolver.spec.js.map +1 -0
- package/dist/engine/modules/tools/background.js +2 -2
- package/dist/engine/modules/tools/background.js.map +1 -1
- package/dist/engine/modules/tools/channelCreateTool.js +1 -1
- package/dist/engine/modules/tools/channelCreateTool.js.map +1 -1
- package/dist/engine/modules/tools/channelHistoryTool.js +1 -1
- package/dist/engine/modules/tools/channelHistoryTool.js.map +1 -1
- package/dist/engine/modules/tools/channelMemberTool.js +2 -2
- package/dist/engine/modules/tools/channelMemberTool.js.map +1 -1
- package/dist/engine/modules/tools/channelSendTool.js +1 -1
- package/dist/engine/modules/tools/channelSendTool.js.map +1 -1
- package/dist/engine/modules/tools/cron.js +5 -5
- package/dist/engine/modules/tools/cron.js.map +1 -1
- package/dist/engine/modules/tools/exposeCreateToolBuild.d.ts +8 -0
- package/dist/engine/modules/tools/exposeCreateToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/exposeCreateToolBuild.js +75 -0
- package/dist/engine/modules/tools/exposeCreateToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/exposeListToolBuild.d.ts +8 -0
- package/dist/engine/modules/tools/exposeListToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/exposeListToolBuild.js +46 -0
- package/dist/engine/modules/tools/exposeListToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/exposeRemoveToolBuild.d.ts +8 -0
- package/dist/engine/modules/tools/exposeRemoveToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/exposeRemoveToolBuild.js +36 -0
- package/dist/engine/modules/tools/exposeRemoveToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/exposeTools.spec.d.ts +2 -0
- package/dist/engine/modules/tools/exposeTools.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/exposeTools.spec.js +104 -0
- package/dist/engine/modules/tools/exposeTools.spec.js.map +1 -0
- package/dist/engine/modules/tools/exposeUpdateToolBuild.d.ts +8 -0
- package/dist/engine/modules/tools/exposeUpdateToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/exposeUpdateToolBuild.js +50 -0
- package/dist/engine/modules/tools/exposeUpdateToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/heartbeat.js +3 -3
- package/dist/engine/modules/tools/heartbeat.js.map +1 -1
- package/dist/engine/modules/tools/image-generation.d.ts.map +1 -1
- package/dist/engine/modules/tools/image-generation.js +1 -2
- package/dist/engine/modules/tools/image-generation.js.map +1 -1
- package/dist/engine/modules/tools/mermaid-png.d.ts.map +1 -1
- package/dist/engine/modules/tools/mermaid-png.js +2 -11
- package/dist/engine/modules/tools/mermaid-png.js.map +1 -1
- package/dist/engine/modules/tools/mermaid-png.spec.js +4 -7
- package/dist/engine/modules/tools/mermaid-png.spec.js.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.js +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/permissions.js +4 -4
- package/dist/engine/modules/tools/permissions.js.map +1 -1
- package/dist/engine/modules/tools/reaction.js +1 -1
- package/dist/engine/modules/tools/reaction.js.map +1 -1
- package/dist/engine/modules/tools/send-file.d.ts.map +1 -1
- package/dist/engine/modules/tools/send-file.js +1 -4
- package/dist/engine/modules/tools/send-file.js.map +1 -1
- package/dist/engine/modules/tools/sendUserMessageTool.js +1 -1
- package/dist/engine/modules/tools/sendUserMessageTool.js.map +1 -1
- package/dist/engine/modules/tools/sessionHistoryToolBuild.js +13 -1
- package/dist/engine/modules/tools/sessionHistoryToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/signal.js +1 -1
- package/dist/engine/modules/tools/signal.js.map +1 -1
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.js +1 -1
- package/dist/engine/modules/tools/signalEventsCsvToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/signalSubscribeToolBuild.js +1 -1
- package/dist/engine/modules/tools/signalSubscribeToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/signalUnsubscribeToolBuild.js +1 -1
- package/dist/engine/modules/tools/signalUnsubscribeToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/skillToolBuild.js +2 -2
- package/dist/engine/modules/tools/skillToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/toolListContextBuild.d.ts +1 -0
- package/dist/engine/modules/tools/toolListContextBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/toolListContextBuild.js +3 -0
- package/dist/engine/modules/tools/toolListContextBuild.js.map +1 -1
- package/dist/engine/modules/tools/toolListContextBuild.spec.js +14 -0
- package/dist/engine/modules/tools/toolListContextBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/toolResultFormatVerbose.d.ts.map +1 -1
- package/dist/engine/modules/tools/toolResultFormatVerbose.js +1 -4
- package/dist/engine/modules/tools/toolResultFormatVerbose.js.map +1 -1
- package/dist/engine/modules/tools/toolResultFormatVerbose.spec.js +3 -6
- package/dist/engine/modules/tools/toolResultFormatVerbose.spec.js.map +1 -1
- package/dist/engine/modules/tools/toolResultTruncate.spec.js +2 -4
- package/dist/engine/modules/tools/toolResultTruncate.spec.js.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.d.ts +2 -1
- package/dist/engine/modules/tools/topologyToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.js +30 -6
- package/dist/engine/modules/tools/topologyToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.spec.js +21 -3
- package/dist/engine/modules/tools/topologyToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/types.d.ts +4 -2
- package/dist/engine/modules/tools/types.d.ts.map +1 -1
- package/dist/engine/plugins/builtins.spec.js +5 -0
- package/dist/engine/plugins/builtins.spec.js.map +1 -1
- package/dist/engine/plugins/loader.spec.js +5 -0
- package/dist/engine/plugins/loader.spec.js.map +1 -1
- package/dist/engine/plugins/manager.d.ts +3 -0
- package/dist/engine/plugins/manager.d.ts.map +1 -1
- package/dist/engine/plugins/manager.js +12 -0
- package/dist/engine/plugins/manager.js.map +1 -1
- package/dist/engine/plugins/manager.spec.js +39 -5
- package/dist/engine/plugins/manager.spec.js.map +1 -1
- package/dist/engine/plugins/types.d.ts +2 -0
- package/dist/engine/plugins/types.d.ts.map +1 -1
- package/dist/engine/plugins/types.js.map +1 -1
- package/dist/engine/processes/processes.d.ts +10 -0
- package/dist/engine/processes/processes.d.ts.map +1 -1
- package/dist/engine/processes/processes.js +73 -3
- package/dist/engine/processes/processes.js.map +1 -1
- package/dist/engine/processes/processes.spec.js +42 -0
- package/dist/engine/processes/processes.spec.js.map +1 -1
- package/dist/engine/scheduling/gatePermissionRequest.d.ts +21 -0
- package/dist/engine/scheduling/gatePermissionRequest.d.ts.map +1 -0
- package/dist/engine/scheduling/gatePermissionRequest.js +98 -0
- package/dist/engine/scheduling/gatePermissionRequest.js.map +1 -0
- package/dist/engine/scheduling/gatePermissionRequest.spec.d.ts +2 -0
- package/dist/engine/scheduling/gatePermissionRequest.spec.d.ts.map +1 -0
- package/dist/engine/scheduling/gatePermissionRequest.spec.js +126 -0
- package/dist/engine/scheduling/gatePermissionRequest.spec.js.map +1 -0
- package/dist/plugins/anthropic-fetch/plugin.js +1 -1
- package/dist/plugins/anthropic-fetch/plugin.js.map +1 -1
- package/dist/plugins/anthropic-search/plugin.js +1 -1
- package/dist/plugins/anthropic-search/plugin.js.map +1 -1
- package/dist/plugins/brave-search/plugin.js +1 -1
- package/dist/plugins/brave-search/plugin.js.map +1 -1
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.d.ts +10 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.js +56 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.js.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.spec.d.ts +2 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.spec.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.spec.js +23 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareDomainResolve.spec.js.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.d.ts +17 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.js +26 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.js.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.spec.d.ts +2 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.spec.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.spec.js +33 -0
- package/dist/plugins/cloudflare-tunnel/cloudflareTunnelCommandBuild.spec.js.map +1 -0
- package/dist/plugins/cloudflare-tunnel/plugin.d.ts +3 -0
- package/dist/plugins/cloudflare-tunnel/plugin.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/plugin.js +142 -0
- package/dist/plugins/cloudflare-tunnel/plugin.js.map +1 -0
- package/dist/plugins/cloudflare-tunnel/plugin.json +6 -0
- package/dist/plugins/cloudflare-tunnel/plugin.spec.d.ts +2 -0
- package/dist/plugins/cloudflare-tunnel/plugin.spec.d.ts.map +1 -0
- package/dist/plugins/cloudflare-tunnel/plugin.spec.js +156 -0
- package/dist/plugins/cloudflare-tunnel/plugin.spec.js.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.d.ts +9 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.js +32 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.js.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.spec.d.ts +2 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.spec.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.spec.js +23 -0
- package/dist/plugins/custom-tunnel/customTunnelDomainResolve.spec.js.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.d.ts +6 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.js +18 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.js.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.spec.d.ts +2 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.spec.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.spec.js +21 -0
- package/dist/plugins/custom-tunnel/customTunnelScriptRun.spec.js.map +1 -0
- package/dist/plugins/custom-tunnel/plugin.d.ts +6 -0
- package/dist/plugins/custom-tunnel/plugin.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/plugin.js +81 -0
- package/dist/plugins/custom-tunnel/plugin.js.map +1 -0
- package/dist/plugins/custom-tunnel/plugin.json +6 -0
- package/dist/plugins/custom-tunnel/plugin.spec.d.ts +2 -0
- package/dist/plugins/custom-tunnel/plugin.spec.d.ts.map +1 -0
- package/dist/plugins/custom-tunnel/plugin.spec.js +65 -0
- package/dist/plugins/custom-tunnel/plugin.spec.js.map +1 -0
- package/dist/plugins/database/__tests__/plugin.spec.js +5 -0
- package/dist/plugins/database/__tests__/plugin.spec.js.map +1 -1
- package/dist/plugins/database/plugin.js +1 -1
- package/dist/plugins/database/plugin.js.map +1 -1
- package/dist/plugins/exa-ai/plugin.js +1 -1
- package/dist/plugins/exa-ai/plugin.js.map +1 -1
- package/dist/plugins/firecrawl/plugin.js +1 -1
- package/dist/plugins/firecrawl/plugin.js.map +1 -1
- package/dist/plugins/gemini-search/plugin.js +1 -1
- package/dist/plugins/gemini-search/plugin.js.map +1 -1
- package/dist/plugins/local-expose/plugin.d.ts +5 -0
- package/dist/plugins/local-expose/plugin.d.ts.map +1 -0
- package/dist/plugins/local-expose/plugin.js +204 -0
- package/dist/plugins/local-expose/plugin.js.map +1 -0
- package/dist/plugins/local-expose/plugin.json +6 -0
- package/dist/plugins/local-expose/plugin.spec.d.ts +2 -0
- package/dist/plugins/local-expose/plugin.spec.d.ts.map +1 -0
- package/dist/plugins/local-expose/plugin.spec.js +206 -0
- package/dist/plugins/local-expose/plugin.spec.js.map +1 -0
- package/dist/plugins/memory/tool.js +3 -3
- package/dist/plugins/memory/tool.js.map +1 -1
- package/dist/plugins/monty-python/tool.js +1 -1
- package/dist/plugins/monty-python/tool.js.map +1 -1
- package/dist/plugins/nano-banana-pro/__tests__/plugin.integration.spec.js +5 -0
- package/dist/plugins/nano-banana-pro/__tests__/plugin.integration.spec.js.map +1 -1
- package/dist/plugins/openai-search/plugin.js +1 -1
- package/dist/plugins/openai-search/plugin.js.map +1 -1
- package/dist/plugins/perplexity-search/plugin.js +1 -1
- package/dist/plugins/perplexity-search/plugin.js.map +1 -1
- package/dist/plugins/shell/processTools.d.ts.map +1 -1
- package/dist/plugins/shell/processTools.js +5 -10
- package/dist/plugins/shell/processTools.js.map +1 -1
- package/dist/plugins/shell/tool.js +6 -6
- package/dist/plugins/shell/tool.js.map +1 -1
- package/dist/plugins/tailscale/plugin.d.ts +3 -0
- package/dist/plugins/tailscale/plugin.d.ts.map +1 -0
- package/dist/plugins/tailscale/plugin.js +82 -0
- package/dist/plugins/tailscale/plugin.js.map +1 -0
- package/dist/plugins/tailscale/plugin.json +6 -0
- package/dist/plugins/tailscale/plugin.spec.d.ts +2 -0
- package/dist/plugins/tailscale/plugin.spec.d.ts.map +1 -0
- package/dist/plugins/tailscale/plugin.spec.js +67 -0
- package/dist/plugins/tailscale/plugin.spec.js.map +1 -0
- package/dist/plugins/tailscale/tailscale.integration.spec.d.ts +2 -0
- package/dist/plugins/tailscale/tailscale.integration.spec.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscale.integration.spec.js +33 -0
- package/dist/plugins/tailscale/tailscale.integration.spec.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.d.ts +9 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.js +28 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.spec.d.ts +2 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.spec.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.spec.js +26 -0
- package/dist/plugins/tailscale/tailscaleBinaryResolve.spec.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.d.ts +10 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.js +29 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.spec.d.ts +2 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.spec.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.spec.js +15 -0
- package/dist/plugins/tailscale/tailscaleStatusDomainResolve.spec.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.d.ts +22 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.js +33 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.js.map +1 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.spec.d.ts +2 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.spec.d.ts.map +1 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.spec.js +40 -0
- package/dist/plugins/tailscale/tailscaleTunnelCommandBuild.spec.js.map +1 -0
- package/dist/plugins/upgrade/plugin.spec.js +20 -0
- package/dist/plugins/upgrade/plugin.spec.js.map +1 -1
- package/dist/plugins/web-fetch/plugin.js +1 -1
- package/dist/plugins/web-fetch/plugin.js.map +1 -1
- package/dist/prompts/SYSTEM.md +15 -2
- package/dist/release/releaseRun.js +1 -1
- package/dist/release/releaseRun.js.map +1 -1
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/util/shellQuote.d.ts +6 -0
- package/dist/util/shellQuote.d.ts.map +1 -0
- package/dist/util/shellQuote.js +8 -0
- package/dist/util/shellQuote.js.map +1 -0
- package/dist/util/shellQuote.spec.d.ts +2 -0
- package/dist/util/shellQuote.spec.d.ts.map +1 -0
- package/dist/util/shellQuote.spec.js +11 -0
- package/dist/util/shellQuote.spec.js.map +1 -0
- package/dist/util/tagExtract.d.ts +1 -0
- package/dist/util/tagExtract.d.ts.map +1 -1
- package/dist/util/tagExtract.js +1 -1
- package/dist/util/tagExtract.js.map +1 -1
- package/dist/util/tagExtractAllWithAttrs.d.ts +10 -0
- package/dist/util/tagExtractAllWithAttrs.d.ts.map +1 -0
- package/dist/util/tagExtractAllWithAttrs.js +45 -0
- package/dist/util/tagExtractAllWithAttrs.js.map +1 -0
- package/dist/util/tagExtractAllWithAttrs.spec.d.ts +2 -0
- package/dist/util/tagExtractAllWithAttrs.spec.d.ts.map +1 -0
- package/dist/util/tagExtractAllWithAttrs.spec.js +43 -0
- package/dist/util/tagExtractAllWithAttrs.spec.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import http from "node:http";
|
|
2
|
+
import { pipeline } from "node:stream/promises";
|
|
3
|
+
import bcrypt from "bcryptjs";
|
|
4
|
+
import Fastify from "fastify";
|
|
5
|
+
import { exposeDomainNormalize } from "./exposeTypes.js";
|
|
6
|
+
/**
|
|
7
|
+
* Reverse proxy with host-header routing and optional basic auth.
|
|
8
|
+
* Expects: routes are keyed by normalized domain names.
|
|
9
|
+
*/
|
|
10
|
+
export class ExposeProxy {
|
|
11
|
+
server = null;
|
|
12
|
+
routes = new Map();
|
|
13
|
+
listenPort = null;
|
|
14
|
+
async start() {
|
|
15
|
+
if (this.server && this.listenPort !== null) {
|
|
16
|
+
return { port: this.listenPort };
|
|
17
|
+
}
|
|
18
|
+
const server = Fastify({ logger: false });
|
|
19
|
+
server.removeAllContentTypeParsers();
|
|
20
|
+
server.addContentTypeParser("*", { parseAs: "buffer" }, (_request, body, done) => {
|
|
21
|
+
done(null, body);
|
|
22
|
+
});
|
|
23
|
+
server.all("*", async (request, reply) => this.routeRequest(request, reply));
|
|
24
|
+
await server.listen({ host: "127.0.0.1", port: 0 });
|
|
25
|
+
const address = server.server.address();
|
|
26
|
+
if (!address || typeof address === "string") {
|
|
27
|
+
await server.close();
|
|
28
|
+
throw new Error("Expose proxy failed to resolve listen address.");
|
|
29
|
+
}
|
|
30
|
+
this.server = server;
|
|
31
|
+
this.listenPort = address.port;
|
|
32
|
+
return { port: address.port };
|
|
33
|
+
}
|
|
34
|
+
async stop() {
|
|
35
|
+
if (!this.server) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await this.server.close();
|
|
39
|
+
this.server = null;
|
|
40
|
+
this.listenPort = null;
|
|
41
|
+
}
|
|
42
|
+
addRoute(domain, target, passwordHash) {
|
|
43
|
+
const normalizedDomain = exposeDomainNormalize(domain);
|
|
44
|
+
this.routes.set(normalizedDomain, {
|
|
45
|
+
target,
|
|
46
|
+
passwordHash: passwordHash ?? null
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
removeRoute(domain) {
|
|
50
|
+
const normalizedDomain = exposeDomainNormalize(domain);
|
|
51
|
+
this.routes.delete(normalizedDomain);
|
|
52
|
+
}
|
|
53
|
+
updateRoute(domain, update) {
|
|
54
|
+
const normalizedDomain = exposeDomainNormalize(domain);
|
|
55
|
+
const current = this.routes.get(normalizedDomain);
|
|
56
|
+
if (!current) {
|
|
57
|
+
throw new Error(`Expose proxy route not found: ${normalizedDomain}`);
|
|
58
|
+
}
|
|
59
|
+
this.routes.set(normalizedDomain, {
|
|
60
|
+
...current,
|
|
61
|
+
passwordHash: "passwordHash" in update
|
|
62
|
+
? update.passwordHash ?? null
|
|
63
|
+
: current.passwordHash
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async routeRequest(request, reply) {
|
|
67
|
+
const host = hostHeaderNormalize(request.headers.host ?? request.hostname ?? "");
|
|
68
|
+
const route = this.routes.get(host);
|
|
69
|
+
if (!route) {
|
|
70
|
+
reply.status(404).send("Expose route not found.");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (route.passwordHash) {
|
|
74
|
+
const authorized = await authorizationCheck(request.headers.authorization, route.passwordHash);
|
|
75
|
+
if (!authorized) {
|
|
76
|
+
reply
|
|
77
|
+
.status(401)
|
|
78
|
+
.header("WWW-Authenticate", 'Basic realm="daycare"')
|
|
79
|
+
.send("Unauthorized");
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
await this.proxyRequest(request, reply, route.target, route.passwordHash !== null);
|
|
84
|
+
}
|
|
85
|
+
async proxyRequest(request, reply, target, stripAuthorizationHeader) {
|
|
86
|
+
const headers = { ...request.headers };
|
|
87
|
+
delete headers.connection;
|
|
88
|
+
if (stripAuthorizationHeader) {
|
|
89
|
+
delete headers.authorization;
|
|
90
|
+
}
|
|
91
|
+
const options = {
|
|
92
|
+
method: request.raw.method,
|
|
93
|
+
path: request.raw.url,
|
|
94
|
+
headers
|
|
95
|
+
};
|
|
96
|
+
if (target.type === "port") {
|
|
97
|
+
options.hostname = "127.0.0.1";
|
|
98
|
+
options.port = target.port;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
options.socketPath = target.path;
|
|
102
|
+
}
|
|
103
|
+
reply.hijack();
|
|
104
|
+
await new Promise((resolve) => {
|
|
105
|
+
let settled = false;
|
|
106
|
+
const settle = () => {
|
|
107
|
+
if (settled) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
settled = true;
|
|
111
|
+
resolve();
|
|
112
|
+
};
|
|
113
|
+
const upstreamRequest = http.request(options, (upstreamResponse) => {
|
|
114
|
+
const statusCode = upstreamResponse.statusCode ?? 502;
|
|
115
|
+
reply.raw.writeHead(statusCode, upstreamResponse.headers);
|
|
116
|
+
void pipeline(upstreamResponse, reply.raw)
|
|
117
|
+
.catch(() => {
|
|
118
|
+
// Socket errors are expected on abrupt disconnects.
|
|
119
|
+
})
|
|
120
|
+
.finally(settle);
|
|
121
|
+
});
|
|
122
|
+
upstreamRequest.on("error", () => {
|
|
123
|
+
if (!reply.raw.headersSent) {
|
|
124
|
+
reply.raw.statusCode = 502;
|
|
125
|
+
reply.raw.setHeader("content-type", "text/plain; charset=utf-8");
|
|
126
|
+
reply.raw.end("Expose upstream unavailable.");
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
reply.raw.destroy();
|
|
130
|
+
}
|
|
131
|
+
settle();
|
|
132
|
+
});
|
|
133
|
+
const parsedBody = request.body;
|
|
134
|
+
if (Buffer.isBuffer(parsedBody)) {
|
|
135
|
+
if (headers["content-length"] !== undefined) {
|
|
136
|
+
upstreamRequest.setHeader("content-length", parsedBody.length);
|
|
137
|
+
}
|
|
138
|
+
upstreamRequest.end(parsedBody);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
void pipeline(request.raw, upstreamRequest).catch(() => {
|
|
142
|
+
upstreamRequest.destroy();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function hostHeaderNormalize(value) {
|
|
148
|
+
const raw = Array.isArray(value) ? (value[0] ?? "") : value;
|
|
149
|
+
const normalized = raw.trim().toLowerCase();
|
|
150
|
+
if (!normalized) {
|
|
151
|
+
return "";
|
|
152
|
+
}
|
|
153
|
+
if (normalized.startsWith("[")) {
|
|
154
|
+
return normalized;
|
|
155
|
+
}
|
|
156
|
+
const split = normalized.split(":");
|
|
157
|
+
return split[0] ?? normalized;
|
|
158
|
+
}
|
|
159
|
+
async function authorizationCheck(authorization, passwordHash) {
|
|
160
|
+
const value = Array.isArray(authorization)
|
|
161
|
+
? (authorization[0] ?? "")
|
|
162
|
+
: (authorization ?? "");
|
|
163
|
+
if (!value.startsWith("Basic ")) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const encoded = value.slice("Basic ".length).trim();
|
|
167
|
+
if (!encoded) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
let decoded = "";
|
|
171
|
+
try {
|
|
172
|
+
decoded = Buffer.from(encoded, "base64").toString("utf8");
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const separatorIndex = decoded.indexOf(":");
|
|
178
|
+
if (separatorIndex <= 0) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
const username = decoded.slice(0, separatorIndex);
|
|
182
|
+
const password = decoded.slice(separatorIndex + 1);
|
|
183
|
+
if (username !== "daycare") {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
return bcrypt.compare(password, passwordHash);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=exposeProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeProxy.js","sourceRoot":"","sources":["../../../sources/engine/expose/exposeProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeProxy.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/expose/exposeProxy.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import http from "node:http";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import bcrypt from "bcryptjs";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
7
|
+
import { ExposeProxy } from "./exposeProxy.js";
|
|
8
|
+
let proxy;
|
|
9
|
+
const cleanup = [];
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
proxy = new ExposeProxy();
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
await proxy.stop();
|
|
15
|
+
while (cleanup.length > 0) {
|
|
16
|
+
const item = cleanup.pop();
|
|
17
|
+
if (!item) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
await item();
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
describe("ExposeProxy", () => {
|
|
24
|
+
it("routes by host header to local TCP targets", async () => {
|
|
25
|
+
const upstream = await serverStart((request, response) => {
|
|
26
|
+
response.statusCode = 200;
|
|
27
|
+
response.end(`${request.method}:${request.url}`);
|
|
28
|
+
});
|
|
29
|
+
const { port } = await proxy.start();
|
|
30
|
+
proxy.addRoute("app.example.com", { type: "port", port: upstream.port });
|
|
31
|
+
const result = await requestRun({
|
|
32
|
+
port,
|
|
33
|
+
host: "app.example.com",
|
|
34
|
+
path: "/health?check=1",
|
|
35
|
+
method: "POST"
|
|
36
|
+
});
|
|
37
|
+
expect(result.statusCode).toBe(200);
|
|
38
|
+
expect(result.body).toBe("POST:/health?check=1");
|
|
39
|
+
});
|
|
40
|
+
it("forwards JSON request bodies", async () => {
|
|
41
|
+
const upstream = await serverStart((request, response) => {
|
|
42
|
+
const chunks = [];
|
|
43
|
+
request.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
44
|
+
request.on("end", () => {
|
|
45
|
+
response.statusCode = 200;
|
|
46
|
+
response.end(Buffer.concat(chunks).toString("utf8"));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
const { port } = await proxy.start();
|
|
50
|
+
proxy.addRoute("json.example.com", { type: "port", port: upstream.port });
|
|
51
|
+
const payload = JSON.stringify({ hello: "world" });
|
|
52
|
+
const result = await requestRun({
|
|
53
|
+
port,
|
|
54
|
+
host: "json.example.com",
|
|
55
|
+
path: "/echo",
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: {
|
|
58
|
+
"content-type": "application/json",
|
|
59
|
+
"content-length": String(Buffer.byteLength(payload))
|
|
60
|
+
},
|
|
61
|
+
body: payload
|
|
62
|
+
});
|
|
63
|
+
expect(result.statusCode).toBe(200);
|
|
64
|
+
expect(result.body).toBe(payload);
|
|
65
|
+
});
|
|
66
|
+
it("routes requests to unix socket targets", async () => {
|
|
67
|
+
const tempDir = await mkdtemp(path.join(os.tmpdir(), "daycare-expose-unix-"));
|
|
68
|
+
const socketPath = path.join(tempDir, "server.sock");
|
|
69
|
+
const server = http.createServer((_, response) => {
|
|
70
|
+
response.statusCode = 200;
|
|
71
|
+
response.end("unix-ok");
|
|
72
|
+
});
|
|
73
|
+
await new Promise((resolve, reject) => {
|
|
74
|
+
server.once("error", reject);
|
|
75
|
+
server.listen(socketPath, () => resolve());
|
|
76
|
+
});
|
|
77
|
+
cleanup.push(async () => {
|
|
78
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
79
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
80
|
+
});
|
|
81
|
+
const { port } = await proxy.start();
|
|
82
|
+
proxy.addRoute("unix.example.com", { type: "unix", path: socketPath });
|
|
83
|
+
const result = await requestRun({
|
|
84
|
+
port,
|
|
85
|
+
host: "unix.example.com",
|
|
86
|
+
path: "/"
|
|
87
|
+
});
|
|
88
|
+
expect(result.statusCode).toBe(200);
|
|
89
|
+
expect(result.body).toBe("unix-ok");
|
|
90
|
+
});
|
|
91
|
+
it("enforces basic auth when configured", async () => {
|
|
92
|
+
const upstream = await serverStart((request, response) => {
|
|
93
|
+
response.statusCode = 200;
|
|
94
|
+
response.end(String(request.headers.authorization ?? "none"));
|
|
95
|
+
});
|
|
96
|
+
const passwordHash = await bcrypt.hash("secret", 10);
|
|
97
|
+
const { port } = await proxy.start();
|
|
98
|
+
proxy.addRoute("auth.example.com", { type: "port", port: upstream.port }, passwordHash);
|
|
99
|
+
const noAuth = await requestRun({
|
|
100
|
+
port,
|
|
101
|
+
host: "auth.example.com",
|
|
102
|
+
path: "/"
|
|
103
|
+
});
|
|
104
|
+
expect(noAuth.statusCode).toBe(401);
|
|
105
|
+
expect(noAuth.headers["www-authenticate"]).toBe('Basic realm="daycare"');
|
|
106
|
+
const wrongAuth = await requestRun({
|
|
107
|
+
port,
|
|
108
|
+
host: "auth.example.com",
|
|
109
|
+
path: "/",
|
|
110
|
+
headers: {
|
|
111
|
+
authorization: `Basic ${Buffer.from("daycare:wrong").toString("base64")}`
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
expect(wrongAuth.statusCode).toBe(401);
|
|
115
|
+
const validAuth = await requestRun({
|
|
116
|
+
port,
|
|
117
|
+
host: "auth.example.com",
|
|
118
|
+
path: "/",
|
|
119
|
+
headers: {
|
|
120
|
+
authorization: `Basic ${Buffer.from("daycare:secret").toString("base64")}`
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
expect(validAuth.statusCode).toBe(200);
|
|
124
|
+
expect(validAuth.body).toBe("none");
|
|
125
|
+
proxy.updateRoute("auth.example.com", { passwordHash: null });
|
|
126
|
+
const afterDisable = await requestRun({
|
|
127
|
+
port,
|
|
128
|
+
host: "auth.example.com",
|
|
129
|
+
path: "/",
|
|
130
|
+
headers: {
|
|
131
|
+
authorization: "Bearer local-service-token"
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
expect(afterDisable.statusCode).toBe(200);
|
|
135
|
+
expect(afterDisable.body).toBe("Bearer local-service-token");
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
async function serverStart(handler) {
|
|
139
|
+
const server = http.createServer(handler);
|
|
140
|
+
await new Promise((resolve, reject) => {
|
|
141
|
+
server.once("error", reject);
|
|
142
|
+
server.listen(0, "127.0.0.1", () => resolve());
|
|
143
|
+
});
|
|
144
|
+
cleanup.push(async () => {
|
|
145
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
146
|
+
});
|
|
147
|
+
const address = server.address();
|
|
148
|
+
if (!address || typeof address === "string") {
|
|
149
|
+
throw new Error("Failed to resolve upstream address");
|
|
150
|
+
}
|
|
151
|
+
return { port: address.port };
|
|
152
|
+
}
|
|
153
|
+
async function requestRun(options) {
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
const request = http.request({
|
|
156
|
+
hostname: "127.0.0.1",
|
|
157
|
+
port: options.port,
|
|
158
|
+
path: options.path,
|
|
159
|
+
method: options.method ?? "GET",
|
|
160
|
+
headers: {
|
|
161
|
+
host: options.host,
|
|
162
|
+
...(options.headers ?? {})
|
|
163
|
+
}
|
|
164
|
+
}, (response) => {
|
|
165
|
+
const chunks = [];
|
|
166
|
+
response.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
167
|
+
response.on("end", () => {
|
|
168
|
+
resolve({
|
|
169
|
+
statusCode: response.statusCode ?? 0,
|
|
170
|
+
body: Buffer.concat(chunks).toString("utf8"),
|
|
171
|
+
headers: response.headers
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
request.on("error", reject);
|
|
176
|
+
request.end(options.body ?? "");
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=exposeProxy.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeProxy.spec.js","sourceRoot":"","sources":["../../../sources/engine/expose/exposeProxy.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export type ExposeTarget = {
|
|
2
|
+
type: "port";
|
|
3
|
+
port: number;
|
|
4
|
+
} | {
|
|
5
|
+
type: "unix";
|
|
6
|
+
path: string;
|
|
7
|
+
};
|
|
8
|
+
export type ExposeMode = "public" | "local-network";
|
|
9
|
+
export type ExposeEndpointAuth = {
|
|
10
|
+
enabled: true;
|
|
11
|
+
passwordHash: string;
|
|
12
|
+
};
|
|
13
|
+
export type ExposeEndpoint = {
|
|
14
|
+
id: string;
|
|
15
|
+
target: ExposeTarget;
|
|
16
|
+
provider: string;
|
|
17
|
+
domain: string;
|
|
18
|
+
mode: ExposeMode;
|
|
19
|
+
auth: ExposeEndpointAuth | null;
|
|
20
|
+
createdAt: number;
|
|
21
|
+
updatedAt: number;
|
|
22
|
+
};
|
|
23
|
+
export type ExposeTunnelProvider = {
|
|
24
|
+
instanceId: string;
|
|
25
|
+
domain: string;
|
|
26
|
+
capabilities: {
|
|
27
|
+
public: boolean;
|
|
28
|
+
localNetwork: boolean;
|
|
29
|
+
};
|
|
30
|
+
createTunnel: (proxyPort: number, mode: ExposeMode) => Promise<{
|
|
31
|
+
domain: string;
|
|
32
|
+
}>;
|
|
33
|
+
destroyTunnel: (domain: string) => Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
export type ExposeCreateInput = {
|
|
36
|
+
target: ExposeTarget;
|
|
37
|
+
provider?: string;
|
|
38
|
+
mode: ExposeMode;
|
|
39
|
+
authenticated: boolean;
|
|
40
|
+
};
|
|
41
|
+
export type ExposeUpdateInput = {
|
|
42
|
+
authenticated: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type ExposeProviderRegistrationApi = {
|
|
45
|
+
registerProvider: (provider: ExposeTunnelProvider) => Promise<void>;
|
|
46
|
+
unregisterProvider: (instanceId: string) => Promise<void>;
|
|
47
|
+
listProviders: () => Array<{
|
|
48
|
+
instanceId: string;
|
|
49
|
+
domain: string;
|
|
50
|
+
capabilities: {
|
|
51
|
+
public: boolean;
|
|
52
|
+
localNetwork: boolean;
|
|
53
|
+
};
|
|
54
|
+
}>;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Validates and normalizes an expose target payload.
|
|
58
|
+
* Expects: value is either a port target or unix socket target.
|
|
59
|
+
*/
|
|
60
|
+
export declare function exposeTargetParse(value: unknown): ExposeTarget;
|
|
61
|
+
/**
|
|
62
|
+
* Validates and normalizes expose create arguments.
|
|
63
|
+
* Expects: mode and target are provided.
|
|
64
|
+
*/
|
|
65
|
+
export declare function exposeCreateInputParse(value: unknown): ExposeCreateInput;
|
|
66
|
+
/**
|
|
67
|
+
* Validates expose update arguments.
|
|
68
|
+
* Expects: authenticated boolean is present.
|
|
69
|
+
*/
|
|
70
|
+
export declare function exposeUpdateInputParse(value: unknown): ExposeUpdateInput;
|
|
71
|
+
/**
|
|
72
|
+
* Validates a persisted endpoint object.
|
|
73
|
+
* Expects: timestamps are unix milliseconds.
|
|
74
|
+
*/
|
|
75
|
+
export declare function exposeEndpointParse(value: unknown): ExposeEndpoint;
|
|
76
|
+
/**
|
|
77
|
+
* Normalizes and validates a DNS host value.
|
|
78
|
+
* Expects: domain is a fully-qualified hostname.
|
|
79
|
+
*/
|
|
80
|
+
export declare function exposeDomainNormalize(domain: string): string;
|
|
81
|
+
/**
|
|
82
|
+
* Validates that a mode is supported by provider capabilities.
|
|
83
|
+
* Expects: provider capability flags are explicit booleans.
|
|
84
|
+
*/
|
|
85
|
+
export declare function exposeModeSupported(mode: ExposeMode, capabilities: {
|
|
86
|
+
public: boolean;
|
|
87
|
+
localNetwork: boolean;
|
|
88
|
+
}): boolean;
|
|
89
|
+
//# sourceMappingURL=exposeTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeTypes.d.ts","sourceRoot":"","sources":["../../../sources/engine/expose/exposeTypes.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC;QAChB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,KACb,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,gBAAgB,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,aAAa,EAAE,MAAM,KAAK,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE;YACZ,MAAM,EAAE,OAAO,CAAC;YAChB,YAAY,EAAE,OAAO,CAAC;SACvB,CAAC;KACH,CAAC,CAAC;CACJ,CAAC;AAqDF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAMxE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAExE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAMlE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GACvD,OAAO,CAKT"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const EXPOSE_DOMAIN_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/;
|
|
3
|
+
const exposeTargetSchema = z.discriminatedUnion("type", [
|
|
4
|
+
z
|
|
5
|
+
.object({
|
|
6
|
+
type: z.literal("port"),
|
|
7
|
+
port: z.number().int().min(1).max(65535)
|
|
8
|
+
})
|
|
9
|
+
.strict(),
|
|
10
|
+
z
|
|
11
|
+
.object({
|
|
12
|
+
type: z.literal("unix"),
|
|
13
|
+
path: z.string().trim().min(1)
|
|
14
|
+
})
|
|
15
|
+
.strict()
|
|
16
|
+
]);
|
|
17
|
+
const exposeModeSchema = z.union([z.literal("public"), z.literal("local-network")]);
|
|
18
|
+
const exposeCreateInputSchema = z
|
|
19
|
+
.object({
|
|
20
|
+
target: exposeTargetSchema,
|
|
21
|
+
provider: z.string().trim().min(1).optional(),
|
|
22
|
+
mode: exposeModeSchema,
|
|
23
|
+
authenticated: z.boolean()
|
|
24
|
+
})
|
|
25
|
+
.strict();
|
|
26
|
+
const exposeUpdateInputSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
authenticated: z.boolean()
|
|
29
|
+
})
|
|
30
|
+
.strict();
|
|
31
|
+
const exposeEndpointSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
id: z.string().trim().min(1),
|
|
34
|
+
target: exposeTargetSchema,
|
|
35
|
+
provider: z.string().trim().min(1),
|
|
36
|
+
domain: z.string().trim().min(1),
|
|
37
|
+
mode: exposeModeSchema,
|
|
38
|
+
auth: z
|
|
39
|
+
.object({
|
|
40
|
+
enabled: z.literal(true),
|
|
41
|
+
passwordHash: z.string().trim().min(1)
|
|
42
|
+
})
|
|
43
|
+
.strict()
|
|
44
|
+
.nullable(),
|
|
45
|
+
createdAt: z.number().int().nonnegative(),
|
|
46
|
+
updatedAt: z.number().int().nonnegative()
|
|
47
|
+
})
|
|
48
|
+
.strict();
|
|
49
|
+
/**
|
|
50
|
+
* Validates and normalizes an expose target payload.
|
|
51
|
+
* Expects: value is either a port target or unix socket target.
|
|
52
|
+
*/
|
|
53
|
+
export function exposeTargetParse(value) {
|
|
54
|
+
return exposeTargetSchema.parse(value);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validates and normalizes expose create arguments.
|
|
58
|
+
* Expects: mode and target are provided.
|
|
59
|
+
*/
|
|
60
|
+
export function exposeCreateInputParse(value) {
|
|
61
|
+
const parsed = exposeCreateInputSchema.parse(value);
|
|
62
|
+
return {
|
|
63
|
+
...parsed,
|
|
64
|
+
provider: parsed.provider?.trim()
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates expose update arguments.
|
|
69
|
+
* Expects: authenticated boolean is present.
|
|
70
|
+
*/
|
|
71
|
+
export function exposeUpdateInputParse(value) {
|
|
72
|
+
return exposeUpdateInputSchema.parse(value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validates a persisted endpoint object.
|
|
76
|
+
* Expects: timestamps are unix milliseconds.
|
|
77
|
+
*/
|
|
78
|
+
export function exposeEndpointParse(value) {
|
|
79
|
+
const parsed = exposeEndpointSchema.parse(value);
|
|
80
|
+
return {
|
|
81
|
+
...parsed,
|
|
82
|
+
domain: exposeDomainNormalize(parsed.domain)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Normalizes and validates a DNS host value.
|
|
87
|
+
* Expects: domain is a fully-qualified hostname.
|
|
88
|
+
*/
|
|
89
|
+
export function exposeDomainNormalize(domain) {
|
|
90
|
+
const normalized = domain.trim().toLowerCase();
|
|
91
|
+
if (!EXPOSE_DOMAIN_PATTERN.test(normalized)) {
|
|
92
|
+
throw new Error(`Invalid expose domain: ${domain}`);
|
|
93
|
+
}
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validates that a mode is supported by provider capabilities.
|
|
98
|
+
* Expects: provider capability flags are explicit booleans.
|
|
99
|
+
*/
|
|
100
|
+
export function exposeModeSupported(mode, capabilities) {
|
|
101
|
+
if (mode === "public") {
|
|
102
|
+
return capabilities.public;
|
|
103
|
+
}
|
|
104
|
+
return capabilities.localNetwork;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=exposeTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeTypes.js","sourceRoot":"","sources":["../../../sources/engine/expose/exposeTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exposeTypes.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/expose/exposeTypes.spec.ts"],"names":[],"mappings":""}
|