import { printTunnelWarning } from '../cloudflare-tunnel.js'; import { createTunnelService } from '../tunnels/index.js'; import { createTunnelRoutesRuntime } from '../tunnels/routes.js'; export const createTunnelWiringRuntime = (dependencies) => { const { crypto, URL, tunnelProviderRegistry, tunnelAuthController, readSettingsFromDiskMigrated, readManagedRemoteTunnelConfigFromDisk, normalizeTunnelProvider, normalizeTunnelMode, normalizeOptionalPath, normalizeManagedRemoteTunnelHostname, normalizeTunnelBootstrapTtlMs, normalizeTunnelSessionTtlMs, isSupportedTunnelMode, upsertManagedRemoteTunnelToken, resolveManagedRemoteTunnelToken, TUNNEL_MODE_QUICK, TUNNEL_MODE_MANAGED_LOCAL, TUNNEL_MODE_MANAGED_REMOTE, TUNNEL_PROVIDER_CLOUDFLARE, TunnelServiceError, getActiveTunnelController, setActiveTunnelController, getRuntimeManagedRemoteTunnelHostname, setRuntimeManagedRemoteTunnelHostname, getRuntimeManagedRemoteTunnelToken, setRuntimeManagedRemoteTunnelToken, } = dependencies; const initialize = (app, initialPort) => { let activePort = initialPort; const tunnelService = createTunnelService({ registry: tunnelProviderRegistry, getController: getActiveTunnelController, setController: setActiveTunnelController, getActivePort: () => activePort, onQuickTunnelWarning: () => { printTunnelWarning(); }, }); const tunnelRoutesRuntime = createTunnelRoutesRuntime({ crypto, URL, tunnelService, tunnelProviderRegistry, tunnelAuthController, readSettingsFromDiskMigrated, readManagedRemoteTunnelConfigFromDisk, normalizeTunnelProvider, normalizeTunnelMode, normalizeOptionalPath, normalizeManagedRemoteTunnelHostname, normalizeTunnelBootstrapTtlMs, normalizeTunnelSessionTtlMs, isSupportedTunnelMode, upsertManagedRemoteTunnelToken, resolveManagedRemoteTunnelToken, TUNNEL_MODE_QUICK, TUNNEL_MODE_MANAGED_LOCAL, TUNNEL_MODE_MANAGED_REMOTE, TUNNEL_PROVIDER_CLOUDFLARE, TunnelServiceError, getActivePort: () => activePort, getRuntimeManagedRemoteTunnelHostname, setRuntimeManagedRemoteTunnelHostname, getRuntimeManagedRemoteTunnelToken, setRuntimeManagedRemoteTunnelToken, getActiveTunnelController, setActiveTunnelController, }); tunnelRoutesRuntime.registerRoutes(app); return { tunnelService, startTunnelWithNormalizedRequest: (...args) => tunnelRoutesRuntime.startTunnelWithNormalizedRequest(...args), getActivePort: () => activePort, setActivePort: (value) => { activePort = value; }, }; }; return { initialize, }; };