@undefineds.co/xpod 0.2.34 → 0.2.35

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.
Files changed (32) hide show
  1. package/dist/api/container/local.js +1 -5
  2. package/dist/api/container/local.js.map +1 -1
  3. package/dist/api/container/routes.js +16 -1
  4. package/dist/api/container/routes.js.map +1 -1
  5. package/dist/api/handlers/PodManagementHandler.d.ts +8 -0
  6. package/dist/api/handlers/PodManagementHandler.js +5 -3
  7. package/dist/api/handlers/PodManagementHandler.js.map +1 -1
  8. package/dist/api/handlers/WebIdProfileHandler.js +64 -6
  9. package/dist/api/handlers/WebIdProfileHandler.js.map +1 -1
  10. package/dist/api/runtime.js +11 -6
  11. package/dist/api/runtime.js.map +1 -1
  12. package/dist/components/components.jsonld +1 -0
  13. package/dist/components/context.jsonld +36 -0
  14. package/dist/edge/LocalNetworkManager.d.ts +2 -7
  15. package/dist/edge/LocalNetworkManager.js +7 -34
  16. package/dist/edge/LocalNetworkManager.js.map +1 -1
  17. package/dist/index.d.ts +2 -1
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/provision/LocalPodProvisioningService.d.ts +34 -0
  21. package/dist/provision/LocalPodProvisioningService.js +294 -0
  22. package/dist/provision/LocalPodProvisioningService.js.map +1 -0
  23. package/dist/provision/LocalPodProvisioningService.jsonld +142 -0
  24. package/dist/provision/ProvisionPodCreator.js +3 -4
  25. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  26. package/dist/tunnel/LocalTunnelProvider.d.ts +2 -2
  27. package/dist/tunnel/LocalTunnelProvider.js +12 -14
  28. package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
  29. package/dist/tunnel/TunnelProvider.d.ts +2 -0
  30. package/dist/tunnel/TunnelProvider.js.map +1 -1
  31. package/dist/tunnel/TunnelProvider.jsonld +4 -0
  32. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/api/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { asValue, type AwilixContainer } from 'awilix';\nimport { setGlobalLoggerFactory, getLoggerFor } from 'global-logger-factory';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { createApiContainer, loadConfigFromEnv, type ApiContainerConfig, type ApiContainerCradle } from './container';\nimport { registerRoutes } from './container/routes';\nimport type { AuthContext } from './auth/AuthContext';\nimport { OpenAuthMiddleware } from './middleware/OpenAuthMiddleware';\nimport type { RuntimeHost } from '../runtime/host/types';\n\nexport interface StartApiServiceOptions {\n config?: ApiContainerConfig;\n open?: boolean;\n authContext?: AuthContext;\n initializeLogger?: boolean;\n runtimeHost?: RuntimeHost;\n}\n\nexport interface ApiServiceHandle {\n config: ApiContainerConfig;\n container: AwilixContainer<ApiContainerCradle>;\n stop: () => Promise<void>;\n}\n\nfunction initApiLogger(): void {\n const loggerFactory = new ConfigurableLoggerFactory(process.env.CSS_LOGGING_LEVEL || 'info', {\n fileName: './logs/xpod-%DATE%.log',\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n\nasync function registerPrimaryServiceToken(\n container: AwilixContainer<ApiContainerCradle>,\n config: ApiContainerConfig,\n logger: ReturnType<typeof getLoggerFor>,\n): Promise<void> {\n try {\n const serviceToken = process.env.XPOD_SERVICE_TOKEN;\n if (!serviceToken) {\n return;\n }\n\n const serviceTokenRepo = container.resolve('serviceTokenRepo') as any;\n const serviceType = config.edition === 'cloud' ? 'cloud' : 'local';\n const serviceId = process.env.XPOD_NODE_ID || (config.edition === 'cloud' ? 'cloud-1' : 'local-1');\n\n await serviceTokenRepo.registerToken(serviceToken, {\n serviceType,\n serviceId,\n scopes: ['quota:write', 'usage:read', 'account:manage'],\n });\n\n logger.info(`Registered service token for ${serviceType}:${serviceId}`);\n } catch (error) {\n logger.error(`Failed to register service token: ${error}`);\n }\n}\n\nasync function startBackgroundServices(\n container: AwilixContainer<ApiContainerCradle>,\n logger: ReturnType<typeof getLoggerFor>,\n): Promise<void> {\n try {\n const localNetworkManager = container.resolve('localNetworkManager', { allowUnregistered: true }) as any;\n if (localNetworkManager) {\n localNetworkManager.start();\n }\n } catch (error) {\n logger.error(`Failed to initialize LocalNetworkManager: ${error}`);\n }\n\n try {\n const ddnsManager = container.resolve('ddnsManager', { allowUnregistered: true }) as any;\n if (ddnsManager) {\n await ddnsManager.start();\n logger.info('DDNS Manager started');\n }\n } catch (error) {\n logger.error(`Failed to initialize DdnsManager: ${error}`);\n }\n\n try {\n const localNetworkManager = container.resolve('localNetworkManager', { allowUnregistered: true });\n const localTunnelProvider = container.resolve('localTunnelProvider', { allowUnregistered: true }) as any;\n\n if (!localNetworkManager && localTunnelProvider) {\n logger.info('Starting Cloudflare Tunnel (standalone mode)...');\n await localTunnelProvider.start();\n logger.info('Cloudflare Tunnel started');\n }\n } catch (error) {\n logger.error(`Failed to start Cloudflare Tunnel: ${error}`);\n }\n}\n\nasync function stopBackgroundServices(container: AwilixContainer<ApiContainerCradle>): Promise<void> {\n try {\n const ddnsManager = container.resolve('ddnsManager', { allowUnregistered: true }) as any;\n ddnsManager?.stop();\n } catch {\n // ignore shutdown errors\n }\n\n try {\n const localNetworkManager = container.resolve('localNetworkManager', { allowUnregistered: true });\n await localNetworkManager?.stop();\n } catch {\n // ignore shutdown errors\n }\n\n try {\n const localTunnelProvider = container.resolve('localTunnelProvider', { allowUnregistered: true }) as any;\n await localTunnelProvider?.stop();\n } catch {\n // ignore shutdown errors\n }\n}\n\nexport async function startApiService(options: StartApiServiceOptions = {}): Promise<ApiServiceHandle> {\n if (options.initializeLogger !== false) {\n initApiLogger();\n }\n\n const baseConfig = options.config ?? loadConfigFromEnv();\n const config = {\n ...baseConfig,\n runtimeHost: options.runtimeHost ?? baseConfig.runtimeHost,\n };\n const logger = getLoggerFor('ApiRuntime');\n\n if (!config.databaseUrl) {\n throw new Error('CSS_IDENTITY_DB_URL or DATABASE_URL environment variable is required');\n }\n\n logger.info(`Starting API Service (edition: ${config.edition})...`);\n\n const container = createApiContainer(config);\n\n if (options.open) {\n container.register({\n authMiddleware: asValue(new OpenAuthMiddleware({ context: options.authContext })),\n });\n }\n\n registerRoutes(container);\n await registerPrimaryServiceToken(container, config, logger);\n await startBackgroundServices(container, logger);\n\n const server = container.resolve('apiServer');\n await server.start();\n logger.info(`API Service active on ${config.socketPath ? `unix://${config.socketPath}` : `${config.host}:${config.port}`}`);\n\n return {\n config,\n container,\n stop: async(): Promise<void> => {\n logger.info('Stopping API Service...');\n await stopBackgroundServices(container);\n await server.stop();\n },\n };\n}\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/api/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { asValue, type AwilixContainer } from 'awilix';\nimport { setGlobalLoggerFactory, getLoggerFor } from 'global-logger-factory';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { createApiContainer, loadConfigFromEnv, type ApiContainerConfig, type ApiContainerCradle } from './container';\nimport { registerRoutes } from './container/routes';\nimport type { AuthContext } from './auth/AuthContext';\nimport { OpenAuthMiddleware } from './middleware/OpenAuthMiddleware';\nimport type { RuntimeHost } from '../runtime/host/types';\n\nexport interface StartApiServiceOptions {\n config?: ApiContainerConfig;\n open?: boolean;\n authContext?: AuthContext;\n initializeLogger?: boolean;\n runtimeHost?: RuntimeHost;\n}\n\nexport interface ApiServiceHandle {\n config: ApiContainerConfig;\n container: AwilixContainer<ApiContainerCradle>;\n stop: () => Promise<void>;\n}\n\nfunction initApiLogger(): void {\n const loggerFactory = new ConfigurableLoggerFactory(process.env.CSS_LOGGING_LEVEL || 'info', {\n fileName: './logs/xpod-%DATE%.log',\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n\nasync function registerPrimaryServiceToken(\n container: AwilixContainer<ApiContainerCradle>,\n config: ApiContainerConfig,\n logger: ReturnType<typeof getLoggerFor>,\n): Promise<void> {\n try {\n const serviceToken = process.env.XPOD_SERVICE_TOKEN;\n if (!serviceToken) {\n return;\n }\n\n const serviceTokenRepo = container.resolve('serviceTokenRepo') as any;\n const serviceType = config.edition === 'cloud' ? 'cloud' : 'local';\n const serviceId = process.env.XPOD_NODE_ID || (config.edition === 'cloud' ? 'cloud-1' : 'local-1');\n\n await serviceTokenRepo.registerToken(serviceToken, {\n serviceType,\n serviceId,\n scopes: ['quota:write', 'usage:read', 'account:manage'],\n });\n\n logger.info(`Registered service token for ${serviceType}:${serviceId}`);\n } catch (error) {\n logger.error(`Failed to register service token: ${error}`);\n }\n}\n\nasync function startBackgroundServices(\n container: AwilixContainer<ApiContainerCradle>,\n logger: ReturnType<typeof getLoggerFor>,\n): Promise<void> {\n try {\n const localNetworkManager = container.resolve('localNetworkManager', { allowUnregistered: true }) as any;\n if (localNetworkManager) {\n localNetworkManager.start();\n }\n } catch (error) {\n logger.error(`Failed to initialize LocalNetworkManager: ${error}`);\n }\n\n try {\n const ddnsManager = container.resolve('ddnsManager', { allowUnregistered: true }) as any;\n if (ddnsManager) {\n await ddnsManager.start();\n logger.info('DDNS Manager started');\n }\n } catch (error) {\n logger.error(`Failed to initialize DdnsManager: ${error}`);\n }\n\n try {\n const localTunnelProvider = container.resolve('localTunnelProvider', { allowUnregistered: true }) as any;\n\n if (localTunnelProvider) {\n logger.info('Starting local tunnel provider...');\n const localPort = Number.parseInt(\n process.env.XPOD_MAIN_PORT ?? process.env.CSS_PORT ?? process.env.PORT ?? '3000',\n 10,\n );\n const config = await localTunnelProvider.setup({\n subdomain: 'local',\n localPort: Number.isFinite(localPort) && localPort > 0 ? localPort : 3000,\n localProtocol: 'http',\n });\n await localTunnelProvider.start(config);\n logger.info('Local tunnel provider started');\n }\n } catch (error) {\n logger.error(`Failed to start local tunnel provider: ${error}`);\n }\n}\n\nasync function stopBackgroundServices(container: AwilixContainer<ApiContainerCradle>): Promise<void> {\n try {\n const ddnsManager = container.resolve('ddnsManager', { allowUnregistered: true }) as any;\n ddnsManager?.stop();\n } catch {\n // ignore shutdown errors\n }\n\n try {\n const localNetworkManager = container.resolve('localNetworkManager', { allowUnregistered: true });\n await localNetworkManager?.stop();\n } catch {\n // ignore shutdown errors\n }\n\n try {\n const localTunnelProvider = container.resolve('localTunnelProvider', { allowUnregistered: true }) as any;\n await localTunnelProvider?.stop();\n } catch {\n // ignore shutdown errors\n }\n}\n\nexport async function startApiService(options: StartApiServiceOptions = {}): Promise<ApiServiceHandle> {\n if (options.initializeLogger !== false) {\n initApiLogger();\n }\n\n const baseConfig = options.config ?? loadConfigFromEnv();\n const config = {\n ...baseConfig,\n runtimeHost: options.runtimeHost ?? baseConfig.runtimeHost,\n };\n const logger = getLoggerFor('ApiRuntime');\n\n if (!config.databaseUrl) {\n throw new Error('CSS_IDENTITY_DB_URL or DATABASE_URL environment variable is required');\n }\n\n logger.info(`Starting API Service (edition: ${config.edition})...`);\n\n const container = createApiContainer(config);\n\n if (options.open) {\n container.register({\n authMiddleware: asValue(new OpenAuthMiddleware({ context: options.authContext })),\n });\n }\n\n registerRoutes(container);\n await registerPrimaryServiceToken(container, config, logger);\n await startBackgroundServices(container, logger);\n\n const server = container.resolve('apiServer');\n await server.start();\n logger.info(`API Service active on ${config.socketPath ? `unix://${config.socketPath}` : `${config.host}:${config.port}`}`);\n\n return {\n config,\n container,\n stop: async(): Promise<void> => {\n logger.info('Stopping API Service...');\n await stopBackgroundServices(container);\n await server.stop();\n },\n };\n}\n"]}
@@ -83,6 +83,7 @@
83
83
  "undefineds:dist/storage/locking/UrlAwareRedisLocker.jsonld",
84
84
  "undefineds:dist/provision/ProvisionPodCreator.jsonld",
85
85
  "undefineds:dist/provision/ProvisionCodeCodec.jsonld",
86
+ "undefineds:dist/provision/LocalPodProvisioningService.jsonld",
86
87
  "undefineds:dist/authorization/AuthModeSelector.jsonld"
87
88
  ]
88
89
  }
@@ -1911,6 +1911,42 @@
1911
1911
  }
1912
1912
  }
1913
1913
  },
1914
+ "LocalPodProvisioningService": {
1915
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService",
1916
+ "@prefix": true,
1917
+ "@context": {
1918
+ "options_baseUrl": {
1919
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_baseUrl"
1920
+ },
1921
+ "options_rootDir": {
1922
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_rootDir"
1923
+ },
1924
+ "options_sparqlEndpoint": {
1925
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_sparqlEndpoint"
1926
+ },
1927
+ "options_identityDbUrl": {
1928
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_identityDbUrl"
1929
+ },
1930
+ "options_oidcIssuer": {
1931
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_oidcIssuer"
1932
+ },
1933
+ "baseUrl": {
1934
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_baseUrl"
1935
+ },
1936
+ "rootDir": {
1937
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_rootDir"
1938
+ },
1939
+ "sparqlEndpoint": {
1940
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_sparqlEndpoint"
1941
+ },
1942
+ "identityDbUrl": {
1943
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_identityDbUrl"
1944
+ },
1945
+ "oidcIssuer": {
1946
+ "@id": "undefineds:dist/provision/LocalPodProvisioningService.jsonld#LocalPodProvisioningService_options_oidcIssuer"
1947
+ }
1948
+ }
1949
+ },
1914
1950
  "AuthModeSelector": {
1915
1951
  "@id": "undefineds:dist/authorization/AuthModeSelector.jsonld#AuthModeSelector",
1916
1952
  "@prefix": true,
@@ -1,11 +1,8 @@
1
1
  import type { EdgeNodeCapabilityDetector } from './EdgeNodeCapabilityDetector';
2
2
  import type { EdgeNodeDnsCoordinator } from './EdgeNodeDnsCoordinator';
3
- import type { TunnelProvider } from '../tunnel/TunnelProvider';
4
3
  export interface LocalNetworkManagerOptions {
5
4
  detector: EdgeNodeCapabilityDetector;
6
5
  dnsCoordinator: EdgeNodeDnsCoordinator;
7
- tunnelProvider?: TunnelProvider;
8
- localPort?: number;
9
6
  intervalMs?: number;
10
7
  }
11
8
  /**
@@ -16,15 +13,13 @@ export interface LocalNetworkManagerOptions {
16
13
  *
17
14
  * 逻辑:
18
15
  * 1. 优先探测公网 IP (IPv6 > IPv4)。
19
- * 2. 如果有公网 IP -> 停止 Tunnel -> 更新 AAAA/A 记录。
20
- * 3. 如果无公网 IP -> 启动 Tunnel (Fallback) -> Tunnel 接管 CNAME。
16
+ * 2. 如果有公网 IP -> 更新 AAAA/A 记录。
17
+ * 3. 如果无公网 IP -> 维持本机/局域网可用,不触发隧道启停。
21
18
  */
22
19
  export declare class LocalNetworkManager {
23
20
  private readonly logger;
24
21
  private readonly detector;
25
22
  private readonly dnsCoordinator;
26
- private readonly tunnelProvider?;
27
- private readonly localPort;
28
23
  private readonly intervalMs;
29
24
  private interval?;
30
25
  private lastState;
@@ -10,8 +10,8 @@ const global_logger_factory_1 = require("global-logger-factory");
10
10
  *
11
11
  * 逻辑:
12
12
  * 1. 优先探测公网 IP (IPv6 > IPv4)。
13
- * 2. 如果有公网 IP -> 停止 Tunnel -> 更新 AAAA/A 记录。
14
- * 3. 如果无公网 IP -> 启动 Tunnel (Fallback) -> Tunnel 接管 CNAME。
13
+ * 2. 如果有公网 IP -> 更新 AAAA/A 记录。
14
+ * 3. 如果无公网 IP -> 维持本机/局域网可用,不触发隧道启停。
15
15
  */
16
16
  class LocalNetworkManager {
17
17
  constructor(options) {
@@ -19,12 +19,9 @@ class LocalNetworkManager {
19
19
  // 状态追踪,用于减少重复日志
20
20
  this.lastState = {
21
21
  hasPublicIp: false,
22
- tunnelRunning: false,
23
22
  };
24
23
  this.detector = options.detector;
25
24
  this.dnsCoordinator = options.dnsCoordinator;
26
- this.tunnelProvider = options.tunnelProvider;
27
- this.localPort = options.localPort ?? 3000;
28
25
  this.intervalMs = options.intervalMs ?? 60_000; // 默认 1 分钟
29
26
  }
30
27
  /**
@@ -47,11 +44,7 @@ class LocalNetworkManager {
47
44
  clearInterval(this.interval);
48
45
  this.interval = undefined;
49
46
  }
50
- // 确保退出时关闭 Tunnel,防止僵尸进程
51
- if (this.tunnelProvider?.getStatus().running) {
52
- this.logger.info('Stopping tunnel before exit...');
53
- await this.tunnelProvider.stop();
54
- }
47
+ // 不管理 tunnel 生命周期
55
48
  }
56
49
  async runMaintenance() {
57
50
  try {
@@ -66,45 +59,25 @@ class LocalNetworkManager {
66
59
  subdomain: '@',
67
60
  };
68
61
  const hasPublicIp = !!(metadata.ipv4 || metadata.ipv6);
69
- const tunnelRunning = !!this.tunnelProvider?.getStatus().running;
70
62
  // 检查状态是否发生变化
71
- const stateChanged = hasPublicIp !== this.lastState.hasPublicIp ||
72
- tunnelRunning !== this.lastState.tunnelRunning;
63
+ const stateChanged = hasPublicIp !== this.lastState.hasPublicIp;
73
64
  if (stateChanged) {
74
- this.logger.info(`Network status changed: IP=${hasPublicIp ? 'Public' : 'Private'}, Tunnel=${tunnelRunning ? 'Running' : 'Stopped'} (IPv4=${metadata.ipv4 || 'none'}, IPv6=${metadata.ipv6 || 'none'})`);
65
+ this.logger.info(`Network status changed: IP=${hasPublicIp ? 'Public' : 'Private'} (IPv4=${metadata.ipv4 || 'none'}, IPv6=${metadata.ipv6 || 'none'})`);
75
66
  }
76
67
  else {
77
68
  // 平时仅打印一条极简的调试信息(如果级别设为 info 则每分钟一条)
78
- this.logger.debug(`Status check: IP=${hasPublicIp ? 'Public' : 'Private'}, Tunnel=${tunnelRunning ? 'Running' : 'Stopped'}`);
69
+ this.logger.debug(`Status check: IP=${hasPublicIp ? 'Public' : 'Private'}`);
79
70
  }
80
71
  if (hasPublicIp) {
81
72
  // === 直连模式 ===
82
- if (tunnelRunning) {
83
- this.logger.info('Stopping tunnel fallback to use direct public IP...');
84
- await this.tunnelProvider.stop();
85
- this.lastState.tunnelRunning = false;
86
- }
87
73
  // 仅在 IP 变化或初次运行且有 IP 时同步 DNS
88
74
  await this.dnsCoordinator.synchronize('local-self', metadata);
89
75
  }
90
76
  else {
91
- // === 隧道模式 (Fallback) ===
92
- if (this.tunnelProvider) {
93
- if (!tunnelRunning) {
94
- this.logger.info('No public IP. Starting Cloudflare Tunnel fallback...');
95
- const config = await this.tunnelProvider.setup({
96
- subdomain: 'local',
97
- localPort: this.localPort,
98
- });
99
- await this.tunnelProvider.start(config);
100
- this.logger.info('Tunnel fallback active.');
101
- this.lastState.tunnelRunning = true;
102
- }
103
- }
77
+ this.logger.info('No public IP. Keep local and LAN routes active; tunnel is managed by the runtime provider if configured.');
104
78
  }
105
79
  // 更新状态追踪
106
80
  this.lastState.hasPublicIp = hasPublicIp;
107
- this.lastState.tunnelRunning = !!this.tunnelProvider?.getStatus().running;
108
81
  }
109
82
  catch (error) {
110
83
  this.logger.error(`Maintenance task failed: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"LocalNetworkManager.js","sourceRoot":"","sources":["../../src/edge/LocalNetworkManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLoggerFor } from 'global-logger-factory';\nimport type { EdgeNodeCapabilityDetector } from './EdgeNodeCapabilityDetector';\nimport type { EdgeNodeDnsCoordinator } from './EdgeNodeDnsCoordinator';\nimport type { TunnelProvider } from '../tunnel/TunnelProvider';\n\nexport interface LocalNetworkManagerOptions {\n detector: EdgeNodeCapabilityDetector;\n dnsCoordinator: EdgeNodeDnsCoordinator;\n tunnelProvider?: TunnelProvider;\n localPort?: number;\n intervalMs?: number;\n}\n\n/**\n * 本地网络管理器\n * \n * 专门用于 Local 模式,定期探测本机 IP 并自动同步到 DNS。\n * 它是“自闭环”的,不依赖外部心跳。\n * \n * 逻辑:\n * 1. 优先探测公网 IP (IPv6 > IPv4)。\n * 2. 如果有公网 IP -> 停止 Tunnel -> 更新 AAAA/A 记录。\n * 3. 如果无公网 IP -> 启动 Tunnel (Fallback) -> Tunnel 接管 CNAME。\n */\nexport class LocalNetworkManager {\n private readonly logger = getLoggerFor(this);\n private readonly detector: EdgeNodeCapabilityDetector;\n private readonly dnsCoordinator: EdgeNodeDnsCoordinator;\n private readonly tunnelProvider?: TunnelProvider;\n private readonly localPort: number;\n private readonly intervalMs: number;\n private interval?: NodeJS.Timeout;\n \n // 状态追踪,用于减少重复日志\n private lastState = {\n hasPublicIp: false,\n tunnelRunning: false,\n };\n\n public constructor(options: LocalNetworkManagerOptions) {\n this.detector = options.detector;\n this.dnsCoordinator = options.dnsCoordinator;\n this.tunnelProvider = options.tunnelProvider;\n this.localPort = options.localPort ?? 3000;\n this.intervalMs = options.intervalMs ?? 60_000; // 默认 1 分钟\n }\n\n /**\n * 启动管理循环\n */\n public start(): void {\n if (this.interval) {\n return;\n }\n this.logger.info(`Starting background loop (interval: ${this.intervalMs}ms)`);\n \n // 立即执行一次,然后开始循环\n void this.runMaintenance();\n this.interval = setInterval(() => this.runMaintenance(), this.intervalMs);\n }\n\n /**\n * 停止\n */\n public async stop(): Promise<void> {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n \n // 确保退出时关闭 Tunnel,防止僵尸进程\n if (this.tunnelProvider?.getStatus().running) {\n this.logger.info('Stopping tunnel before exit...');\n await this.tunnelProvider.stop();\n }\n }\n\n private async runMaintenance(): Promise<void> {\n try {\n this.logger.debug('Starting network detection phase...');\n \n // 1. 探测本机 IP\n const netInfo = await this.detector.detectNetworkAddresses();\n \n // 2. 构造元数据 (只使用公网 IP)\n const metadata: Record<string, unknown> = {\n ipv4: netInfo.ipv4Public,\n ipv6: netInfo.ipv6Public,\n accessMode: 'direct',\n subdomain: '@', \n };\n\n const hasPublicIp = !!(metadata.ipv4 || metadata.ipv6);\n const tunnelRunning = !!this.tunnelProvider?.getStatus().running;\n \n // 检查状态是否发生变化\n const stateChanged = hasPublicIp !== this.lastState.hasPublicIp || \n tunnelRunning !== this.lastState.tunnelRunning;\n\n if (stateChanged) {\n this.logger.info(`Network status changed: IP=${hasPublicIp ? 'Public' : 'Private'}, Tunnel=${tunnelRunning ? 'Running' : 'Stopped'} (IPv4=${metadata.ipv4 || 'none'}, IPv6=${metadata.ipv6 || 'none'})`);\n } else {\n // 平时仅打印一条极简的调试信息(如果级别设为 info 则每分钟一条)\n this.logger.debug(`Status check: IP=${hasPublicIp ? 'Public' : 'Private'}, Tunnel=${tunnelRunning ? 'Running' : 'Stopped'}`);\n }\n\n if (hasPublicIp) {\n // === 直连模式 ===\n if (tunnelRunning) {\n this.logger.info('Stopping tunnel fallback to use direct public IP...');\n await this.tunnelProvider!.stop();\n this.lastState.tunnelRunning = false;\n }\n\n // 仅在 IP 变化或初次运行且有 IP 时同步 DNS\n await this.dnsCoordinator.synchronize('local-self', metadata);\n\n } else {\n // === 隧道模式 (Fallback) ===\n if (this.tunnelProvider) {\n if (!tunnelRunning) {\n this.logger.info('No public IP. Starting Cloudflare Tunnel fallback...');\n const config = await this.tunnelProvider.setup({\n subdomain: 'local',\n localPort: this.localPort,\n });\n \n await this.tunnelProvider.start(config);\n this.logger.info('Tunnel fallback active.');\n this.lastState.tunnelRunning = true;\n }\n }\n }\n \n // 更新状态追踪\n this.lastState.hasPublicIp = hasPublicIp;\n this.lastState.tunnelRunning = !!this.tunnelProvider?.getStatus().running;\n \n } catch (error: unknown) {\n this.logger.error(`Maintenance task failed: ${(error as Error).message}`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"LocalNetworkManager.js","sourceRoot":"","sources":["../../src/edge/LocalNetworkManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLoggerFor } from 'global-logger-factory';\nimport type { EdgeNodeCapabilityDetector } from './EdgeNodeCapabilityDetector';\nimport type { EdgeNodeDnsCoordinator } from './EdgeNodeDnsCoordinator';\n\nexport interface LocalNetworkManagerOptions {\n detector: EdgeNodeCapabilityDetector;\n dnsCoordinator: EdgeNodeDnsCoordinator;\n intervalMs?: number;\n}\n\n/**\n * 本地网络管理器\n * \n * 专门用于 Local 模式,定期探测本机 IP 并自动同步到 DNS。\n * 它是“自闭环”的,不依赖外部心跳。\n * \n * 逻辑:\n * 1. 优先探测公网 IP (IPv6 > IPv4)。\n * 2. 如果有公网 IP -> 更新 AAAA/A 记录。\n * 3. 如果无公网 IP -> 维持本机/局域网可用,不触发隧道启停。\n */\nexport class LocalNetworkManager {\n private readonly logger = getLoggerFor(this);\n private readonly detector: EdgeNodeCapabilityDetector;\n private readonly dnsCoordinator: EdgeNodeDnsCoordinator;\n private readonly intervalMs: number;\n private interval?: NodeJS.Timeout;\n \n // 状态追踪,用于减少重复日志\n private lastState = {\n hasPublicIp: false,\n };\n\n public constructor(options: LocalNetworkManagerOptions) {\n this.detector = options.detector;\n this.dnsCoordinator = options.dnsCoordinator;\n this.intervalMs = options.intervalMs ?? 60_000; // 默认 1 分钟\n }\n\n /**\n * 启动管理循环\n */\n public start(): void {\n if (this.interval) {\n return;\n }\n this.logger.info(`Starting background loop (interval: ${this.intervalMs}ms)`);\n \n // 立即执行一次,然后开始循环\n void this.runMaintenance();\n this.interval = setInterval(() => this.runMaintenance(), this.intervalMs);\n }\n\n /**\n * 停止\n */\n public async stop(): Promise<void> {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n \n // 不管理 tunnel 生命周期\n }\n\n private async runMaintenance(): Promise<void> {\n try {\n this.logger.debug('Starting network detection phase...');\n \n // 1. 探测本机 IP\n const netInfo = await this.detector.detectNetworkAddresses();\n \n // 2. 构造元数据 (只使用公网 IP)\n const metadata: Record<string, unknown> = {\n ipv4: netInfo.ipv4Public,\n ipv6: netInfo.ipv6Public,\n accessMode: 'direct',\n subdomain: '@', \n };\n\n const hasPublicIp = !!(metadata.ipv4 || metadata.ipv6);\n \n // 检查状态是否发生变化\n const stateChanged = hasPublicIp !== this.lastState.hasPublicIp;\n\n if (stateChanged) {\n this.logger.info(`Network status changed: IP=${hasPublicIp ? 'Public' : 'Private'} (IPv4=${metadata.ipv4 || 'none'}, IPv6=${metadata.ipv6 || 'none'})`);\n } else {\n // 平时仅打印一条极简的调试信息(如果级别设为 info 则每分钟一条)\n this.logger.debug(`Status check: IP=${hasPublicIp ? 'Public' : 'Private'}`);\n }\n\n if (hasPublicIp) {\n // === 直连模式 ===\n // 仅在 IP 变化或初次运行且有 IP 时同步 DNS\n await this.dnsCoordinator.synchronize('local-self', metadata);\n\n } else {\n this.logger.info('No public IP. Keep local and LAN routes active; tunnel is managed by the runtime provider if configured.');\n }\n \n // 更新状态追踪\n this.lastState.hasPublicIp = hasPublicIp;\n \n } catch (error: unknown) {\n this.logger.error(`Maintenance task failed: ${(error as Error).message}`);\n }\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -70,6 +70,7 @@ import { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIde
70
70
  import { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';
71
71
  import { ProvisionPodCreator } from './provision/ProvisionPodCreator';
72
72
  import { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';
73
+ import { LocalPodProvisioningService } from './provision/LocalPodProvisioningService';
73
74
  import { AuthModeSelector } from './authorization/AuthModeSelector';
74
75
  export type { DnsProvider, ListDnsRecordsInput, ListableDnsProvider, DeleteDnsRecordInput, DnsRecordSummary, UpsertDnsRecordInput, } from './dns/DnsProvider';
75
76
  export type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';
@@ -79,4 +80,4 @@ export type { EntitlementProvider, AccountEntitlement } from './quota/Entitlemen
79
80
  export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
80
81
  export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
81
82
  export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
82
- export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, WebIdProfileRepository, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, BaseQuintStore, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionCodeCodec, AuthModeSelector, };
83
+ export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, WebIdProfileRepository, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, BaseQuintStore, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionCodeCodec, LocalPodProvisioningService, AuthModeSelector, };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = exports.EdgeNodeAgent = exports.EdgeNodeHealthProbeService = exports.FrpTunnelManager = exports.NoopEdgeNodeTunnelManager = exports.SimpleEdgeNodeTunnelManager = exports.Dns01CertificateProvisioner = exports.EdgeNodeDnsCoordinator = exports.TencentDnsProvider = exports.PerAccountQuotaStrategy = exports.NoopEntitlementProvider = exports.HttpEntitlementProvider = exports.NoopQuotaService = exports.DrizzleQuotaService = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.WebIdProfileRepository = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.SubgraphSparqlHttpHandler = exports.QuintstoreSparqlEngine = exports.QuadstoreSparqlEngine = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.QuintStoreSparqlDataAccessor = exports.QuadstoreSparqlDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
4
- exports.AuthModeSelector = exports.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.BaseQuintStore = exports.PgQuintStore = exports.SqliteQuintStore = void 0;
4
+ exports.AuthModeSelector = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.BaseQuintStore = exports.PgQuintStore = exports.SqliteQuintStore = void 0;
5
5
  require("./runtime/configure-drizzle-solid");
6
6
  const RepresentationPartialConvertingStore_1 = require("./storage/RepresentationPartialConvertingStore");
7
7
  Object.defineProperty(exports, "RepresentationPartialConvertingStore", { enumerable: true, get: function () { return RepresentationPartialConvertingStore_1.RepresentationPartialConvertingStore; } });
@@ -152,6 +152,8 @@ const ProvisionPodCreator_1 = require("./provision/ProvisionPodCreator");
152
152
  Object.defineProperty(exports, "ProvisionPodCreator", { enumerable: true, get: function () { return ProvisionPodCreator_1.ProvisionPodCreator; } });
153
153
  const ProvisionCodeCodec_1 = require("./provision/ProvisionCodeCodec");
154
154
  Object.defineProperty(exports, "ProvisionCodeCodec", { enumerable: true, get: function () { return ProvisionCodeCodec_1.ProvisionCodeCodec; } });
155
+ const LocalPodProvisioningService_1 = require("./provision/LocalPodProvisioningService");
156
+ Object.defineProperty(exports, "LocalPodProvisioningService", { enumerable: true, get: function () { return LocalPodProvisioningService_1.LocalPodProvisioningService; } });
155
157
  // Authorization components
156
158
  const AuthModeSelector_1 = require("./authorization/AuthModeSelector");
157
159
  Object.defineProperty(exports, "AuthModeSelector", { enumerable: true, get: function () { return AuthModeSelector_1.AuthModeSelector; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,6CAA2C;AAC3C,yGAAsG;AA2GlG,qHA3GK,2EAAoC,OA2GL;AA1GxC,6EAA0E;AA2GtE,kGA3GK,qCAAiB,OA2GL;AA1GrB,iGAA8F;AA2G1F,4GA3GK,yDAA2B,OA2GL;AA1G/B,mGAAgG;AA2G5F,6GA3GK,2DAA4B,OA2GL;AA1GhC,yEAAsE;AA2GlE,gGA3GK,iCAAe,OA2GL;AA1GnB,mFAAgF;AA2G5E,0GA3GK,qDAAyB,OA2GL;AA1G7B,8EAA0H;AA4GtH,oGA5GK,yCAAmB,OA4GL;AACnB,sGA7G0B,2CAAqB,OA6G1B;AACrB,uGA9GiD,4CAAsB,OA8GjD;AA5G1B,gFAA6E;AA6GzE,0GA7GK,qDAAyB,OA6GL;AA5G7B,8EAA2E;AA6GvE,sGA7GK,6CAAqB,OA6GL;AA5GzB,mFAAgF;AAuG5E,0GAvGK,qDAAyB,OAuGL;AAtG7B,sEAAmE;AA4G/D,qGA5GK,2CAAoB,OA4GL;AA3GxB,sFAAmF;AA4G/E,6GA5GK,2DAA4B,OA4GL;AA3GhC,0FAAuF;AA4GnF,+GA5GK,+DAA8B,OA4GL;AA3GlC,8EAA2E;AA4GvE,yGA5GK,mDAAwB,OA4GL;AA3G5B,gEAA6D;AA4GzD,kGA5GK,qCAAiB,OA4GL;AA3GrB,4DAAyD;AA4GrD,gGA5GK,iCAAe,OA4GL;AA3GnB,0DAAuD;AA4GnD,+FA5GK,+BAAc,OA4GL;AA3GlB,6EAA0E;AA6GtE,oGA7GK,yCAAmB,OA6GL;AA5GvB,gGAA6F;AA2GzF,+GA3GK,+DAA8B,OA2GL;AA1GlC,gGAA6F;AA4GzF,kHA5GK,qEAAiC,OA4GL;AA3GrC,oFAAiF;AA4G7E,sGA5GK,6CAAqB,OA4GL;AA3GzB,sFAAmF;AA4G/E,uGA5GK,+CAAsB,OA4GL;AA3G1B,wFAAqF;AA4GjF,wGA5GK,iDAAuB,OA4GL;AA3G3B,kFAA+E;AA4G3E,qGA5GK,2CAAoB,OA4GL;AA3GxB,oFAAiF;AA4G7E,sGA5GK,6CAAqB,OA4GL;AA3GzB,qEAAkE;AA4GhE,oGA5GO,yCAAmB,OA4GP;AA3GrB,+DAA4D;AA4G1D,iGA5GO,mCAAgB,OA4GP;AA3GlB,qEAA+F;AA4G7F,wGA5GO,6CAAuB,OA4GP;AACvB,wGA7GgC,6CAAuB,OA6GhC;AA5GzB,qFAAkF;AA6GhF,wGA7GO,iDAAuB,OA6GP;AA5GzB,yEAAsE;AA6GlE,mGA7GK,uCAAkB,OA6GL;AA5GtB,0EAAuE;AA6GnE,uGA7GK,+CAAsB,OA6GL;AA5G1B,oFAAiF;AA6G7E,4GA7GK,yDAA2B,OA6GL;AA5G/B,wEAAsG;AA6GlG,4GA7GK,mDAA2B,OA6GL;AAC3B,0GA9GkC,iDAAyB,OA8GlC;AA7G7B,8DAA2D;AA8GvD,iGA9GK,mCAAgB,OA8GL;AA7GpB,+EAA4E;AAiHxE,uGAjHK,+CAAsB,OAiHL;AAhH1B,kFAA+E;AA6G3E,2GA7GK,uDAA0B,OA6GL;AA5G9B,wDAAqD;AA6GjD,8FA7GK,6BAAa,OA6GL;AA5GjB,qFAAkF;AA6G9E,2GA7GK,uDAA0B,OA6GL;AA3G9B,2EAAwE;AA+GtE,mGA/GO,uCAAkB,OA+GP;AA9GpB,sEAAmE;AA4G/D,qGA5GK,2CAAoB,OA4GL;AA3GxB,4FAAyF;AA4GrF,0GA5GK,qDAAyB,OA4GL;AA3G7B,4FAAyF;AA6GvF,8GA7GO,6DAA6B,OA6GP;AA5G/B,wEAAqE;AA6GnE,sGA7GO,6CAAqB,OA6GP;AA5GvB,wEAAqE;AA6GnE,oGA7GO,yCAAmB,OA6GP;AA5GrB,uEAAoE;AA+GlE,iGA/GO,mCAAgB,OA+GP;AA9GlB,+DAA4D;AA+G1D,6FA/GO,2BAAY,OA+GP;AA9Gd,mEAAgE;AA+G9D,+FA/GO,+BAAc,OA+GP;AA9GhB,iDAAmD;AA2GjD,2FA3GO,kBAAU,OA2GP;AAzGZ,oBAAoB;AACpB,kDAAgF;AA8G9E,kGA9GO,yBAAiB,OA8GP;AACjB,oGA/G0B,2BAAmB,OA+G1B;AA9GrB,uEAAoE;AA+GlE,kGA/GO,qCAAiB,OA+GP;AA9GnB,oEAAiE;AAgH/D,iGAhHO,mCAAgB,OAgHP;AA/GlB,4EAAyE;AAgHvE,qGAhHO,2CAAoB,OAgHP;AA/GtB,oEAAiE;AAgH/D,iGAhHO,mCAAgB,OAgHP;AA/GlB,4EAAyE;AAgHvE,qGAhHO,2CAAoB,OAgHP;AA/GtB,oEAAiE;AAgH/D,iGAhHO,mCAAgB,OAgHP;AA/GlB,4EAAyE;AAgHvE,qGAhHO,2CAAoB,OAgHP;AA/GtB,8DAA2D;AAqGzD,4FArGO,yBAAW,OAqGP;AApGb,kCAAkC;AAClC,gFAA6E;AA+G3E,yGA/GO,mDAAwB,OA+GP;AA9G1B,sEAAmE;AA+GjE,oGA/GO,yCAAmB,OA+GP;AA9GrB,mEAAgE;AA+G9D,iGA/GO,mCAAgB,OA+GP;AA9GlB,+EAA4E;AAuH1E,oGAvHO,yCAAmB,OAuHP;AAtHrB,+BAA+B;AAC/B,oGAAiG;AA8G/F,8GA9GO,6DAA6B,OA8GP;AA7G/B,sGAAmG;AA8GjG,+GA9GO,+DAA8B,OA8GP;AA7GhC,6EAA0E;AA8GxE,oGA9GO,yCAAmB,OA8GP;AA7GrB,qGAAkG;AA8GhG,gHA9GO,iEAA+B,OA8GP;AA7GjC,iFAA8E;AA8G5E,sGA9GO,6CAAqB,OA8GP;AA7GvB,yGAAsG;AA8GpG,kHA9GO,qEAAiC,OA8GP;AA7GnC,mGAAgG;AA8G9F,+GA9GO,+DAA8B,OA8GP;AA7GhC,uBAAuB;AACvB,yEAAsE;AA+GpE,oGA/GO,yCAAmB,OA+GP;AA9GrB,uEAAoE;AA+GlE,mGA/GO,uCAAkB,OA+GP;AA9GpB,2BAA2B;AAC3B,uEAAoE;AA+GlE,iGA/GO,mCAAgB,OA+GP;AAtFlB,uCAAuC;AACvC,sEAAqE;AAA5D,8HAAA,qBAAqB,OAAA","sourcesContent":["import './runtime/configure-drizzle-solid';\nimport { RepresentationPartialConvertingStore } from './storage/RepresentationPartialConvertingStore';\nimport { MinioDataAccessor } from './storage/accessors/MinioDataAccessor';\nimport { QuadstoreSparqlDataAccessor } from './storage/accessors/QuadstoreSparqlDataAccessor';\nimport { QuintStoreSparqlDataAccessor } from './storage/accessors/QuintStoreSparqlDataAccessor';\nimport { MixDataAccessor } from './storage/accessors/MixDataAccessor';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type { SparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nimport { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';\nimport { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';\nimport { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';\nimport { ClusterIngressRouter } from './http/ClusterIngressRouter';\nimport { ClusterWebSocketConfigurator } from './http/ClusterWebSocketConfigurator';\nimport { EdgeNodeDirectDebugHttpHandler } from './http/EdgeNodeDirectDebugHttpHandler';\nimport { EdgeNodeProxyHttpHandler } from './http/EdgeNodeProxyHttpHandler';\nimport { RouterHttpHandler } from './http/RouterHttpHandler';\nimport { RouterHttpRoute } from './http/RouterHttpRoute';\nimport { TracingHandler } from './http/TracingHandler';\nimport { TerminalHttpHandler } from './http/terminal/TerminalHttpHandler';\nimport { EdgeNodeCertificateHttpHandler } from './http/admin/EdgeNodeCertificateHttpHandler';\nimport { ReservedSuffixIdentifierGenerator } from './pods/ReservedSuffixIdentifierGenerator';\nimport { DrizzleIndexedStorage } from './identity/drizzle/DrizzleIndexedStorage';\nimport { WebIdProfileRepository } from './identity/drizzle/WebIdProfileRepository';\nimport { PostgresKeyValueStorage } from './storage/keyvalue/PostgresKeyValueStorage';\nimport { RedisKeyValueStorage } from './storage/keyvalue/RedisKeyValueStorage';\nimport { SqliteKeyValueStorage } from './storage/keyvalue/SqliteKeyValueStorage';\nimport { DrizzleQuotaService } from './quota/DrizzleQuotaService';\nimport { NoopQuotaService } from './quota/NoopQuotaService';\nimport { HttpEntitlementProvider, NoopEntitlementProvider } from './quota/EntitlementProvider';\nimport { PerAccountQuotaStrategy } from './storage/quota/PerAccountQuotaStrategy';\nimport { TencentDnsProvider } from './dns/tencent/TencentDnsProvider';\nimport { EdgeNodeDnsCoordinator } from './edge/EdgeNodeDnsCoordinator';\nimport { Dns01CertificateProvisioner } from './edge/Dns01CertificateProvisioner';\nimport { SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager } from './edge/EdgeNodeTunnelManager';\nimport { FrpTunnelManager } from './edge/FrpTunnelManager';\nimport { AcmeCertificateManager } from './edge/acme/AcmeCertificateManager';\nimport { EdgeNodeHealthProbeService } from './edge/EdgeNodeHealthProbeService';\nimport { EdgeNodeAgent } from './edge/EdgeNodeAgent';\nimport { EdgeNodeCertificateService } from './service/EdgeNodeCertificateService';\nimport { createBandwidthThrottleTransform } from './util/stream/BandwidthThrottleTransform';\nimport { UsageTrackingStore } from './storage/quota/UsageTrackingStore';\nimport { EdgeNodeModeDetector } from './edge/EdgeNodeModeDetector';\nimport { ClusterIdentifierStrategy } from './util/identifiers/ClusterIdentifierStrategy';\nimport { CenterNodeRegistrationService } from './identity/CenterNodeRegistrationService';\nimport { PodRoutingHttpHandler } from './http/PodRoutingHttpHandler';\nimport { ReactAppViewHandler } from './identity/ReactAppViewHandler';\nimport { SqliteQuintStore } from './storage/quint/SqliteQuintStore';\nimport { PgQuintStore } from './storage/quint/PgQuintStore';\nimport { BaseQuintStore } from './storage/quint/BaseQuintStore';\nimport { QuintStore } from './storage/quint/types';\nimport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\n// Vector components\nimport { SqliteVectorStore, PostgresVectorStore } from './storage/vector/index';\nimport { VectorHttpHandler } from './http/vector/VectorHttpHandler';\nimport { ProviderRegistry } from './ai/service/ProviderRegistry';\nimport { ProviderRegistryImpl } from './ai/service/ProviderRegistryImpl';\nimport { EmbeddingService } from './ai/service/EmbeddingService';\nimport { EmbeddingServiceImpl } from './ai/service/EmbeddingServiceImpl';\nimport { CredentialReader } from './ai/service/CredentialReader';\nimport { CredentialReaderImpl } from './ai/service/CredentialReaderImpl';\nimport { VectorStore } from './storage/vector/VectorStore';\n// Tunnel and Subdomain components\nimport { CloudflareTunnelProvider } from './tunnel/CloudflareTunnelProvider';\nimport { LocalTunnelProvider } from './tunnel/LocalTunnelProvider';\nimport { SubdomainService } from './subdomain/SubdomainService';\nimport { UrlAwareRedisLocker } from './storage/locking/UrlAwareRedisLocker';\n// IdP/SP separation components\nimport { MultiDomainIdentifierStrategy } from './util/identifiers/MultiDomainIdentifierStrategy';\nimport { SubdomainPodIdentifierStrategy } from './util/identifiers/SubdomainPodIdentifierStrategy';\nimport { DisabledOidcHandler } from './identity/oidc/DisabledOidcHandler';\nimport { DisabledIdentityProviderHandler } from './identity/oidc/DisabledIdentityProviderHandler';\nimport { AutoDetectOidcHandler } from './identity/oidc/AutoDetectOidcHandler';\nimport { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIdentityProviderHandler';\nimport { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\n// Authorization components\nimport { AuthModeSelector } from './authorization/AuthModeSelector';\nexport type {\n DnsProvider,\n ListDnsRecordsInput,\n ListableDnsProvider,\n DeleteDnsRecordInput,\n DnsRecordSummary,\n UpsertDnsRecordInput,\n} from './dns/DnsProvider';\nexport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\nexport type { EdgeNodeTunnelManager } from './edge/interfaces/EdgeNodeTunnelManager';\nexport type { QuotaService, AccountQuota } from './quota/QuotaService';\nexport type { EntitlementProvider, AccountEntitlement } from './quota/EntitlementProvider';\n// Tunnel and Subdomain types\nexport type {\n TunnelProvider,\n TunnelConfig,\n TunnelSetupOptions,\n TunnelStatus,\n} from './tunnel/TunnelProvider';\nexport type {\n SubdomainRegistration,\n ConnectivityResult,\n SubdomainServiceOptions,\n} from './subdomain/SubdomainService';\n// Export the new AppStaticAssetHandler\nexport { AppStaticAssetHandler } from './http/AppStaticAssetHandler';\n\nexport { \n RepresentationPartialConvertingStore,\n MinioDataAccessor, \n QuadstoreSparqlDataAccessor,\n QuintStoreSparqlDataAccessor,\n MixDataAccessor,\n ConfigurableLoggerFactory,\n SparqlUpdateResourceStore,\n SubgraphQueryEngine,\n QuadstoreSparqlEngine,\n QuintstoreSparqlEngine,\n SubgraphSparqlHttpHandler,\n QuotaAdminHttpHandler,\n ClusterIngressRouter,\n ClusterWebSocketConfigurator,\n EdgeNodeDirectDebugHttpHandler,\n EdgeNodeProxyHttpHandler,\n RouterHttpHandler,\n RouterHttpRoute,\n TracingHandler,\n EdgeNodeCertificateHttpHandler,\n TerminalHttpHandler,\n ReservedSuffixIdentifierGenerator,\n DrizzleIndexedStorage,\n WebIdProfileRepository,\n PostgresKeyValueStorage,\n RedisKeyValueStorage,\n SqliteKeyValueStorage,\n DrizzleQuotaService,\n NoopQuotaService,\n HttpEntitlementProvider,\n NoopEntitlementProvider,\n PerAccountQuotaStrategy,\n TencentDnsProvider,\n EdgeNodeDnsCoordinator,\n Dns01CertificateProvisioner,\n SimpleEdgeNodeTunnelManager,\n NoopEdgeNodeTunnelManager,\n FrpTunnelManager,\n EdgeNodeHealthProbeService,\n EdgeNodeAgent,\n EdgeNodeCertificateService,\n AcmeCertificateManager,\n EdgeNodeModeDetector,\n ClusterIdentifierStrategy,\n UsageTrackingStore,\n CenterNodeRegistrationService,\n PodRoutingHttpHandler,\n ReactAppViewHandler,\n // Quint exports\n QuintStore,\n SqliteQuintStore,\n PgQuintStore,\n BaseQuintStore,\n // Vector exports\n VectorStore,\n SqliteVectorStore,\n PostgresVectorStore,\n VectorHttpHandler,\n // Embedding exports\n ProviderRegistry,\n ProviderRegistryImpl,\n EmbeddingService,\n EmbeddingServiceImpl,\n CredentialReader,\n CredentialReaderImpl,\n // Tunnel and Subdomain exports\n CloudflareTunnelProvider,\n LocalTunnelProvider,\n SubdomainService,\n // IdP/SP separation exports\n MultiDomainIdentifierStrategy,\n SubdomainPodIdentifierStrategy,\n DisabledOidcHandler,\n DisabledIdentityProviderHandler,\n AutoDetectOidcHandler,\n AutoDetectIdentityProviderHandler,\n LoopbackClientIdAdapterFactory,\n UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\n // Authorization exports\n AuthModeSelector,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import './runtime/configure-drizzle-solid';\nimport { RepresentationPartialConvertingStore } from './storage/RepresentationPartialConvertingStore';\nimport { MinioDataAccessor } from './storage/accessors/MinioDataAccessor';\nimport { QuadstoreSparqlDataAccessor } from './storage/accessors/QuadstoreSparqlDataAccessor';\nimport { QuintStoreSparqlDataAccessor } from './storage/accessors/QuintStoreSparqlDataAccessor';\nimport { MixDataAccessor } from './storage/accessors/MixDataAccessor';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type { SparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nimport { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';\nimport { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';\nimport { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';\nimport { ClusterIngressRouter } from './http/ClusterIngressRouter';\nimport { ClusterWebSocketConfigurator } from './http/ClusterWebSocketConfigurator';\nimport { EdgeNodeDirectDebugHttpHandler } from './http/EdgeNodeDirectDebugHttpHandler';\nimport { EdgeNodeProxyHttpHandler } from './http/EdgeNodeProxyHttpHandler';\nimport { RouterHttpHandler } from './http/RouterHttpHandler';\nimport { RouterHttpRoute } from './http/RouterHttpRoute';\nimport { TracingHandler } from './http/TracingHandler';\nimport { TerminalHttpHandler } from './http/terminal/TerminalHttpHandler';\nimport { EdgeNodeCertificateHttpHandler } from './http/admin/EdgeNodeCertificateHttpHandler';\nimport { ReservedSuffixIdentifierGenerator } from './pods/ReservedSuffixIdentifierGenerator';\nimport { DrizzleIndexedStorage } from './identity/drizzle/DrizzleIndexedStorage';\nimport { WebIdProfileRepository } from './identity/drizzle/WebIdProfileRepository';\nimport { PostgresKeyValueStorage } from './storage/keyvalue/PostgresKeyValueStorage';\nimport { RedisKeyValueStorage } from './storage/keyvalue/RedisKeyValueStorage';\nimport { SqliteKeyValueStorage } from './storage/keyvalue/SqliteKeyValueStorage';\nimport { DrizzleQuotaService } from './quota/DrizzleQuotaService';\nimport { NoopQuotaService } from './quota/NoopQuotaService';\nimport { HttpEntitlementProvider, NoopEntitlementProvider } from './quota/EntitlementProvider';\nimport { PerAccountQuotaStrategy } from './storage/quota/PerAccountQuotaStrategy';\nimport { TencentDnsProvider } from './dns/tencent/TencentDnsProvider';\nimport { EdgeNodeDnsCoordinator } from './edge/EdgeNodeDnsCoordinator';\nimport { Dns01CertificateProvisioner } from './edge/Dns01CertificateProvisioner';\nimport { SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager } from './edge/EdgeNodeTunnelManager';\nimport { FrpTunnelManager } from './edge/FrpTunnelManager';\nimport { AcmeCertificateManager } from './edge/acme/AcmeCertificateManager';\nimport { EdgeNodeHealthProbeService } from './edge/EdgeNodeHealthProbeService';\nimport { EdgeNodeAgent } from './edge/EdgeNodeAgent';\nimport { EdgeNodeCertificateService } from './service/EdgeNodeCertificateService';\nimport { createBandwidthThrottleTransform } from './util/stream/BandwidthThrottleTransform';\nimport { UsageTrackingStore } from './storage/quota/UsageTrackingStore';\nimport { EdgeNodeModeDetector } from './edge/EdgeNodeModeDetector';\nimport { ClusterIdentifierStrategy } from './util/identifiers/ClusterIdentifierStrategy';\nimport { CenterNodeRegistrationService } from './identity/CenterNodeRegistrationService';\nimport { PodRoutingHttpHandler } from './http/PodRoutingHttpHandler';\nimport { ReactAppViewHandler } from './identity/ReactAppViewHandler';\nimport { SqliteQuintStore } from './storage/quint/SqliteQuintStore';\nimport { PgQuintStore } from './storage/quint/PgQuintStore';\nimport { BaseQuintStore } from './storage/quint/BaseQuintStore';\nimport { QuintStore } from './storage/quint/types';\nimport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\n// Vector components\nimport { SqliteVectorStore, PostgresVectorStore } from './storage/vector/index';\nimport { VectorHttpHandler } from './http/vector/VectorHttpHandler';\nimport { ProviderRegistry } from './ai/service/ProviderRegistry';\nimport { ProviderRegistryImpl } from './ai/service/ProviderRegistryImpl';\nimport { EmbeddingService } from './ai/service/EmbeddingService';\nimport { EmbeddingServiceImpl } from './ai/service/EmbeddingServiceImpl';\nimport { CredentialReader } from './ai/service/CredentialReader';\nimport { CredentialReaderImpl } from './ai/service/CredentialReaderImpl';\nimport { VectorStore } from './storage/vector/VectorStore';\n// Tunnel and Subdomain components\nimport { CloudflareTunnelProvider } from './tunnel/CloudflareTunnelProvider';\nimport { LocalTunnelProvider } from './tunnel/LocalTunnelProvider';\nimport { SubdomainService } from './subdomain/SubdomainService';\nimport { UrlAwareRedisLocker } from './storage/locking/UrlAwareRedisLocker';\n// IdP/SP separation components\nimport { MultiDomainIdentifierStrategy } from './util/identifiers/MultiDomainIdentifierStrategy';\nimport { SubdomainPodIdentifierStrategy } from './util/identifiers/SubdomainPodIdentifierStrategy';\nimport { DisabledOidcHandler } from './identity/oidc/DisabledOidcHandler';\nimport { DisabledIdentityProviderHandler } from './identity/oidc/DisabledIdentityProviderHandler';\nimport { AutoDetectOidcHandler } from './identity/oidc/AutoDetectOidcHandler';\nimport { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIdentityProviderHandler';\nimport { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\nimport { LocalPodProvisioningService } from './provision/LocalPodProvisioningService';\n// Authorization components\nimport { AuthModeSelector } from './authorization/AuthModeSelector';\nexport type {\n DnsProvider,\n ListDnsRecordsInput,\n ListableDnsProvider,\n DeleteDnsRecordInput,\n DnsRecordSummary,\n UpsertDnsRecordInput,\n} from './dns/DnsProvider';\nexport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\nexport type { EdgeNodeTunnelManager } from './edge/interfaces/EdgeNodeTunnelManager';\nexport type { QuotaService, AccountQuota } from './quota/QuotaService';\nexport type { EntitlementProvider, AccountEntitlement } from './quota/EntitlementProvider';\n// Tunnel and Subdomain types\nexport type {\n TunnelProvider,\n TunnelConfig,\n TunnelSetupOptions,\n TunnelStatus,\n} from './tunnel/TunnelProvider';\nexport type {\n SubdomainRegistration,\n ConnectivityResult,\n SubdomainServiceOptions,\n} from './subdomain/SubdomainService';\n// Export the new AppStaticAssetHandler\nexport { AppStaticAssetHandler } from './http/AppStaticAssetHandler';\n\nexport { \n RepresentationPartialConvertingStore,\n MinioDataAccessor, \n QuadstoreSparqlDataAccessor,\n QuintStoreSparqlDataAccessor,\n MixDataAccessor,\n ConfigurableLoggerFactory,\n SparqlUpdateResourceStore,\n SubgraphQueryEngine,\n QuadstoreSparqlEngine,\n QuintstoreSparqlEngine,\n SubgraphSparqlHttpHandler,\n QuotaAdminHttpHandler,\n ClusterIngressRouter,\n ClusterWebSocketConfigurator,\n EdgeNodeDirectDebugHttpHandler,\n EdgeNodeProxyHttpHandler,\n RouterHttpHandler,\n RouterHttpRoute,\n TracingHandler,\n EdgeNodeCertificateHttpHandler,\n TerminalHttpHandler,\n ReservedSuffixIdentifierGenerator,\n DrizzleIndexedStorage,\n WebIdProfileRepository,\n PostgresKeyValueStorage,\n RedisKeyValueStorage,\n SqliteKeyValueStorage,\n DrizzleQuotaService,\n NoopQuotaService,\n HttpEntitlementProvider,\n NoopEntitlementProvider,\n PerAccountQuotaStrategy,\n TencentDnsProvider,\n EdgeNodeDnsCoordinator,\n Dns01CertificateProvisioner,\n SimpleEdgeNodeTunnelManager,\n NoopEdgeNodeTunnelManager,\n FrpTunnelManager,\n EdgeNodeHealthProbeService,\n EdgeNodeAgent,\n EdgeNodeCertificateService,\n AcmeCertificateManager,\n EdgeNodeModeDetector,\n ClusterIdentifierStrategy,\n UsageTrackingStore,\n CenterNodeRegistrationService,\n PodRoutingHttpHandler,\n ReactAppViewHandler,\n // Quint exports\n QuintStore,\n SqliteQuintStore,\n PgQuintStore,\n BaseQuintStore,\n // Vector exports\n VectorStore,\n SqliteVectorStore,\n PostgresVectorStore,\n VectorHttpHandler,\n // Embedding exports\n ProviderRegistry,\n ProviderRegistryImpl,\n EmbeddingService,\n EmbeddingServiceImpl,\n CredentialReader,\n CredentialReaderImpl,\n // Tunnel and Subdomain exports\n CloudflareTunnelProvider,\n LocalTunnelProvider,\n SubdomainService,\n // IdP/SP separation exports\n MultiDomainIdentifierStrategy,\n SubdomainPodIdentifierStrategy,\n DisabledOidcHandler,\n DisabledIdentityProviderHandler,\n AutoDetectOidcHandler,\n AutoDetectIdentityProviderHandler,\n LoopbackClientIdAdapterFactory,\n UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\n LocalPodProvisioningService,\n // Authorization exports\n AuthModeSelector,\n};\n"]}
@@ -0,0 +1,34 @@
1
+ export interface LocalPodProvisioningInput {
2
+ podName: string;
3
+ webId?: string;
4
+ initialResources?: Record<string, string>;
5
+ }
6
+ export interface LocalPodProvisioningResult {
7
+ podUrl: string;
8
+ accountId: string;
9
+ podId: string;
10
+ }
11
+ export interface LocalPodProvisioningServiceOptions {
12
+ baseUrl: string;
13
+ rootDir: string;
14
+ sparqlEndpoint: string;
15
+ identityDbUrl: string;
16
+ oidcIssuer?: string;
17
+ }
18
+ export declare class LocalPodProvisioningService {
19
+ private readonly logger;
20
+ private readonly baseUrl;
21
+ private readonly rootDir;
22
+ private readonly sparqlDbPath;
23
+ private readonly identityDbPath;
24
+ private readonly oidcIssuer?;
25
+ private readonly sqliteRuntime;
26
+ constructor(options: LocalPodProvisioningServiceOptions);
27
+ createPod(input: LocalPodProvisioningInput): Promise<LocalPodProvisioningResult>;
28
+ private createPodFiles;
29
+ private writeQuints;
30
+ private buildPodQuads;
31
+ private addRootAcrQuads;
32
+ private addPublicReadAcrQuads;
33
+ private writeIdentityIndexes;
34
+ }