@undefineds.co/xpod 0.4.13 → 0.4.15

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 (331) hide show
  1. package/config/cloud.json +0 -3
  2. package/config/components-ignore.json +11 -7
  3. package/config/local.json +0 -3
  4. package/config/xpod.base.json +0 -24
  5. package/dist/api/ai-config/AiConfigStore.d.ts +2 -2
  6. package/dist/api/ai-config/AiConfigStore.js +4 -1
  7. package/dist/api/ai-gateway/auth/CallerPodAccess.d.ts +2 -5
  8. package/dist/api/ai-gateway/auth/CallerPodAccess.js +3 -42
  9. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +2 -1
  10. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +1 -1
  11. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +3 -8
  12. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +9 -32
  13. package/dist/api/ai-gateway/connect/index.d.ts +3 -3
  14. package/dist/api/ai-gateway/connect/index.js +9 -38
  15. package/dist/api/ai-gateway/errors.js +2 -1
  16. package/dist/api/ai-gateway/models/PodModelSelectionRepository.d.ts +3 -3
  17. package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -11
  18. package/dist/api/ai-gateway/pod/HostedPodRoute.d.ts +27 -0
  19. package/dist/api/ai-gateway/pod/HostedPodRoute.js +47 -0
  20. package/dist/api/ai-gateway/pod/OwnerPodAccess.d.ts +79 -0
  21. package/dist/api/ai-gateway/pod/OwnerPodAccess.js +192 -0
  22. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.d.ts +52 -0
  23. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.js +61 -0
  24. package/dist/api/ai-gateway/providers/ProviderRegistry.js +1 -1
  25. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +3 -3
  26. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +7 -32
  27. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.d.ts +1 -1
  28. package/dist/api/ai-gateway/service-access/AiConnectionsServiceAccess.js +1 -1
  29. package/dist/api/auth/ClientCredentialsAuthenticator.js +5 -28
  30. package/dist/api/auth/TokenEndpointRoute.d.ts +18 -0
  31. package/dist/api/auth/TokenEndpointRoute.js +36 -0
  32. package/dist/api/chatkit/pod-store.d.ts +4 -4
  33. package/dist/api/chatkit/pod-store.js +24 -95
  34. package/dist/api/container/common.js +36 -23
  35. package/dist/api/container/index.js +1 -0
  36. package/dist/api/container/local.js +88 -37
  37. package/dist/api/container/routes.js +41 -7
  38. package/dist/api/container/types.d.ts +4 -2
  39. package/dist/api/handlers/AdminHandler.d.ts +17 -1
  40. package/dist/api/handlers/AdminHandler.js +40 -3
  41. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +6 -0
  42. package/dist/api/handlers/AiGatewayManagementHandler.js +17 -4
  43. package/dist/api/handlers/EdgeNodeSignalHandler.js +10 -2
  44. package/dist/api/handlers/NetworkSettingsHandler.d.ts +44 -5
  45. package/dist/api/handlers/NetworkSettingsHandler.js +46 -11
  46. package/dist/api/handlers/PodSettingsHandler.d.ts +3 -3
  47. package/dist/api/handlers/PodSettingsHandler.js +3 -3
  48. package/dist/api/handlers/ProvisionHandler.d.ts +35 -1
  49. package/dist/api/handlers/ProvisionHandler.js +53 -2
  50. package/dist/api/handlers/ReachabilityHandler.d.ts +6 -0
  51. package/dist/api/handlers/ReachabilityHandler.js +25 -6
  52. package/dist/api/network/NetworkEnvironmentConfigurationStore.d.ts +6 -1
  53. package/dist/api/network/NetworkEnvironmentConfigurationStore.js +72 -16
  54. package/dist/api/runtime.d.ts +18 -0
  55. package/dist/api/runtime.js +28 -2
  56. package/dist/api/service/AiClientConfigurationService.d.ts +1 -1
  57. package/dist/api/service/AiClientConfigurationService.js +1 -1
  58. package/dist/cli/commands/start.d.ts +26 -1
  59. package/dist/cli/commands/start.js +69 -5
  60. package/dist/components/components.jsonld +1 -1
  61. package/dist/components/context.jsonld +35 -42
  62. package/dist/edge/EdgeNodeAgent.d.ts +16 -0
  63. package/dist/edge/EdgeNodeAgent.js +56 -1
  64. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  65. package/dist/edge/EdgeNodeAgentInitializer.d.ts +2 -0
  66. package/dist/edge/EdgeNodeAgentInitializer.js +1 -0
  67. package/dist/edge/EdgeNodeAgentInitializer.jsonld +19 -0
  68. package/dist/edge/EdgeNodeDnsCoordinator.d.ts +11 -1
  69. package/dist/edge/EdgeNodeDnsCoordinator.js +12 -2
  70. package/dist/edge/EdgeNodeHealthProbeService.d.ts +15 -0
  71. package/dist/edge/EdgeNodeHealthProbeService.js +44 -12
  72. package/dist/edge/EdgeNodeHealthProbeService.jsonld +77 -0
  73. package/dist/edge/ProbeTargetGuard.d.ts +35 -0
  74. package/dist/edge/ProbeTargetGuard.js +142 -0
  75. package/dist/edge/reachability/NodeAccessResolver.d.ts +16 -0
  76. package/dist/edge/reachability/NodeAccessResolver.js +30 -0
  77. package/dist/edge/reachability/ReachabilitySessionService.js +4 -1
  78. package/dist/edge/reachability/RouteSetBuilder.d.ts +18 -1
  79. package/dist/edge/reachability/RouteSetBuilder.js +47 -0
  80. package/dist/edge/reachability/RouteSetBuilder.jsonld +29 -0
  81. package/dist/edge/reachability/types.d.ts +8 -2
  82. package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -25
  83. package/dist/http/SubgraphSparqlHttpHandler.js +0 -100
  84. package/dist/http/SubgraphSparqlHttpHandler.jsonld +0 -8
  85. package/dist/identity/drizzle/PodInterfaceKeyRepository.d.ts +33 -0
  86. package/dist/identity/drizzle/PodInterfaceKeyRepository.js +78 -0
  87. package/dist/identity/drizzle/db.d.ts +7 -0
  88. package/dist/identity/drizzle/db.js +30 -0
  89. package/dist/identity/drizzle/schema.pg.d.ts +9 -0
  90. package/dist/identity/drizzle/schema.pg.js +16 -1
  91. package/dist/identity/drizzle/schema.sqlite.d.ts +106 -0
  92. package/dist/identity/drizzle/schema.sqlite.js +16 -1
  93. package/dist/index.d.ts +3 -2
  94. package/dist/index.js +9 -5
  95. package/dist/main.js +7 -0
  96. package/dist/runtime/GatewayAdminProxyAuth.d.ts +1 -16
  97. package/dist/runtime/GatewayAdminProxyAuth.js +2 -71
  98. package/dist/runtime/Proxy.d.ts +32 -1
  99. package/dist/runtime/Proxy.js +125 -31
  100. package/dist/runtime/bootstrap.d.ts +21 -0
  101. package/dist/runtime/bootstrap.js +45 -1
  102. package/dist/runtime/css-process.d.ts +1 -0
  103. package/dist/runtime/css-process.js +1 -0
  104. package/dist/runtime/host/node/NodeRuntimeHost.js +6 -1
  105. package/dist/runtime/host/types.d.ts +6 -0
  106. package/dist/runtime/index.d.ts +1 -1
  107. package/dist/runtime/index.js +4 -1
  108. package/dist/runtime/js-runtime.js +10 -3
  109. package/dist/runtime/lifecycle.js +6 -4
  110. package/dist/runtime/port-finder.d.ts +26 -0
  111. package/dist/runtime/port-finder.js +64 -0
  112. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +1 -0
  113. package/dist/runtime/runner/types.d.ts +5 -0
  114. package/dist/runtime/runtime-types.d.ts +1 -0
  115. package/dist/test-utils/local-managed-client-p2p-e2e-smoke.js +1 -1
  116. package/dist/tunnel/AutoTunnelProvider.d.ts +56 -0
  117. package/dist/tunnel/AutoTunnelProvider.js +181 -0
  118. package/dist/tunnel/LocalTunnelProvider.d.ts +15 -0
  119. package/dist/tunnel/LocalTunnelProvider.js +87 -18
  120. package/dist/tunnel/LocalTunnelProvider.jsonld +27 -0
  121. package/dist/tunnel/NgrokTunnelProvider.d.ts +4 -0
  122. package/dist/tunnel/NgrokTunnelProvider.js +117 -43
  123. package/dist/tunnel/NgrokTunnelProvider.jsonld +4 -0
  124. package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +65 -3
  125. package/dist/tunnel/SakuraFrpTunnelProvider.js +268 -25
  126. package/dist/tunnel/TunnelLifecycle.d.ts +14 -0
  127. package/dist/tunnel/TunnelLifecycle.js +34 -0
  128. package/dist/tunnel/TunnelProfiles.d.ts +33 -3
  129. package/dist/tunnel/TunnelProfiles.js +105 -78
  130. package/dist/tunnel/TunnelProvider.d.ts +15 -2
  131. package/dist/tunnel/TunnelProvider.jsonld +8 -0
  132. package/dist/tunnel/TunnelProviderCatalog.d.ts +62 -0
  133. package/dist/tunnel/TunnelProviderCatalog.js +130 -0
  134. package/dist/tunnel/index.d.ts +1 -0
  135. package/dist/tunnel/index.js +3 -1
  136. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.d.ts +1 -1
  137. package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +1 -1
  138. package/node_modules/@undefineds.co/ai-connections/dist/AiAuthorizationActions.d.ts +1 -1
  139. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.d.ts +1 -1
  140. package/node_modules/@undefineds.co/ai-connections/dist/AiClientConfigurationSection.js +1 -1
  141. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.d.ts +1 -1
  142. package/node_modules/@undefineds.co/ai-connections/dist/AiConnectionsPanel.d.ts +1 -1
  143. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +1 -1
  144. package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialRow.d.ts +1 -1
  145. package/node_modules/@undefineds.co/ai-connections/dist/AiCustomProviderDialog.d.ts +1 -1
  146. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.d.ts +1 -1
  147. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.d.ts +1 -1
  148. package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayModelsSection.d.ts +1 -1
  149. package/node_modules/@undefineds.co/ai-connections/dist/AiOfferingDetails.d.ts +1 -1
  150. package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +1 -1
  151. package/node_modules/@undefineds.co/ai-connections/dist/AiQuotaCard.d.ts +1 -1
  152. package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.d.ts +1 -1
  153. package/node_modules/@undefineds.co/ai-connections/dist/authorization-methods.d.ts +1 -1
  154. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.d.ts +1 -1
  155. package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +3 -3
  156. package/node_modules/@undefineds.co/ai-connections/dist/collections.d.ts +1 -1
  157. package/node_modules/@undefineds.co/ai-connections/dist/collections.js +3 -3
  158. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/ai-connections-client.d.ts +1 -1
  159. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/ai-connections-client.js +1 -1
  160. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/index.cjs +8 -8
  161. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/index.d.ts +1 -1
  162. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/index.js +1 -1
  163. package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/provider-catalog.cjs +3 -3
  164. package/node_modules/@undefineds.co/ai-connections/dist/controller.d.ts +1 -1
  165. package/node_modules/@undefineds.co/ai-connections/dist/controller.js +1 -1
  166. package/node_modules/@undefineds.co/ai-connections/dist/credential-labels.d.ts +1 -1
  167. package/node_modules/@undefineds.co/ai-connections/dist/display-wording.d.ts +1 -1
  168. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.d.ts +1 -1
  169. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +8 -3
  170. package/node_modules/@undefineds.co/ai-connections/dist/gateway-endpoints.js +1 -1
  171. package/node_modules/@undefineds.co/ai-connections/dist/offering-endpoints.d.ts +1 -1
  172. package/node_modules/@undefineds.co/ai-connections/dist/offering-label.d.ts +1 -1
  173. package/node_modules/@undefineds.co/ai-connections/dist/provider-visuals.d.ts +1 -1
  174. package/node_modules/@undefineds.co/ai-connections/dist/service-access.js +1 -1
  175. package/node_modules/@undefineds.co/ai-connections/dist/useAiConnectDialog.d.ts +1 -1
  176. package/node_modules/@undefineds.co/ai-connections/package.json +31 -1
  177. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.cjs +230 -0
  178. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.d.ts +76 -0
  179. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.js +115 -0
  180. package/node_modules/@undefineds.co/solid-sdk/dist/index.cjs +89 -0
  181. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +1 -0
  182. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +1 -0
  183. package/node_modules/@undefineds.co/solid-sdk/package.json +6 -1
  184. package/package.json +5 -6
  185. package/static/app/assets/inrupt-smoke.js +23 -23
  186. package/static/app/assets/main.css +1 -1
  187. package/static/auth-callback/assets/{AiConfigContext-DlFyEWy9.js → AiConfigContext-Bx0HCAW5.js} +1 -1
  188. package/static/auth-callback/assets/{AiConfigPage-CkYk-SFW.js → AiConfigPage-ChQImMbm.js} +1 -1
  189. package/static/auth-callback/assets/{DocumentProcessingPanel-CqIr3JqN.js → DocumentProcessingPanel-D830H4SH.js} +1 -1
  190. package/static/auth-callback/assets/{IndexLifecyclePanel-C1GKV3Vx.js → IndexLifecyclePanel-CnlkjMF8.js} +1 -1
  191. package/static/auth-callback/assets/{IndexSubjectPanel-ro9lC6XW.js → IndexSubjectPanel-CdEfg_CO.js} +1 -1
  192. package/static/auth-callback/assets/{ModelAssignmentsPanel-DxNdyKRJ.js → ModelAssignmentsPanel-D-8A8dZx.js} +1 -1
  193. package/static/auth-callback/assets/{ModelsPage-BVtWSPBU.js → ModelsPage-Cim7cubp.js} +3 -3
  194. package/static/auth-callback/assets/NetworkPage-CfK3x-pb.js +2 -0
  195. package/static/auth-callback/assets/{PaneListHeader-ByKw8ada.js → PaneListHeader-Bf_kEd4U.js} +1 -1
  196. package/static/auth-callback/assets/{SearchIndexingPanel-CulBKcYT.js → SearchIndexingPanel-4kD4RBEQ.js} +1 -1
  197. package/static/auth-callback/assets/{StatusSubjectPanel-VOcfrt8o.js → StatusSubjectPanel-Bw9AiTSf.js} +1 -1
  198. package/static/auth-callback/assets/{StatusWorkspace-Jsz6hAdE.js → StatusWorkspace-C-301H-0.js} +1 -1
  199. package/static/auth-callback/assets/{SystemSettingsPage-BFNvGAle.js → SystemSettingsPage-BbWn-eG6.js} +1 -1
  200. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-DFRdrSfK.js → SystemSettingsSubjectPanel-DA4wvNSm.js} +1 -1
  201. package/static/auth-callback/assets/{XpodAiConnectionsPodStore-C6KpvHVg.js → XpodAiConnectionsPodStore-CohdyLoX.js} +1 -1
  202. package/static/auth-callback/assets/{activity-DnTlb9iM.js → activity-CCsb9Oam.js} +1 -1
  203. package/static/auth-callback/assets/ai-connections-DexTPyfC.js +1 -0
  204. package/static/auth-callback/assets/{auth-callback-D2UkK5Xj.js → auth-callback-Ds-c62W3.js} +5 -5
  205. package/static/auth-callback/assets/auth-callback-rk080mvG.css +1 -0
  206. package/static/auth-callback/assets/{badge-D7IJuuTM.js → badge-CQm5OyzR.js} +1 -1
  207. package/static/auth-callback/assets/{collection-runtime-wT1n4GS2.js → collection-runtime-DlAuU5TW.js} +1 -1
  208. package/static/auth-callback/assets/{dialog-DickLu5z.js → dialog-CnGzg5Ff.js} +1 -1
  209. package/static/auth-callback/assets/{download-kn8WnRu3.js → download-DwMONJvm.js} +1 -1
  210. package/static/auth-callback/assets/{external-link-B6B8jfSn.js → external-link-Bu5AGqCO.js} +1 -1
  211. package/static/auth-callback/assets/{index-DHF97YLP.js → index-B0T-1YO8.js} +1 -1
  212. package/static/auth-callback/assets/{index-Dz83EEHD.js → index-C8QZf_4W.js} +1 -1
  213. package/static/auth-callback/assets/index-DwIlrIDG.js +4 -0
  214. package/static/auth-callback/assets/{index-browser-CSghinyi.js → index-browser-lRsMcP_7.js} +1 -1
  215. package/static/auth-callback/assets/{key-round-ChkOx3E1.js → key-round-BDMtU57P.js} +1 -1
  216. package/static/auth-callback/assets/{rotate-ccw-B3hE-nyd.js → rotate-ccw-CoKIGCsQ.js} +1 -1
  217. package/static/auth-callback/assets/{skeleton-kEqR7tpI.js → skeleton-CPoSWHDr.js} +1 -1
  218. package/static/auth-callback/assets/{waypoints-D6Jo-SZa.js → waypoints-BeYHxqHv.js} +1 -1
  219. package/static/auth-callback/assets/{workspace-layout-BHwT_cHd.js → workspace-layout-xA5YxiK3.js} +1 -1
  220. package/static/auth-callback/auth-callback.html +2 -2
  221. package/static/dashboard/assets/{AiConfigContext-BfC3v-x2.js → AiConfigContext-rWx4TyiH.js} +1 -1
  222. package/static/dashboard/assets/{AiConfigPage-QNS3u7Ff.js → AiConfigPage-StVJpDFT.js} +1 -1
  223. package/static/dashboard/assets/{DocumentProcessingPanel-Dr4XLeT4.js → DocumentProcessingPanel-DJ5yul2O.js} +1 -1
  224. package/static/dashboard/assets/{IndexLifecyclePanel-KtM_gpeO.js → IndexLifecyclePanel-CpjtgezK.js} +1 -1
  225. package/static/dashboard/assets/{IndexSubjectPanel-DLaiKdLc.js → IndexSubjectPanel-BVKcot1_.js} +1 -1
  226. package/static/dashboard/assets/{ModelAssignmentsPanel-Bk7TvQRq.js → ModelAssignmentsPanel-BxVgWZPc.js} +1 -1
  227. package/static/dashboard/assets/{ModelsPage-Cci3vlos.js → ModelsPage-CECBwmeO.js} +3 -3
  228. package/static/dashboard/assets/NetworkPage-zQgFscEW.js +2 -0
  229. package/static/dashboard/assets/{PaneListHeader-qHME_s08.js → PaneListHeader-DIPe8pS6.js} +1 -1
  230. package/static/dashboard/assets/{SearchIndexingPanel-HZPKj8H9.js → SearchIndexingPanel-lalFJ3c8.js} +1 -1
  231. package/static/dashboard/assets/{StatusSubjectPanel-ij7IpI8d.js → StatusSubjectPanel-CpY_KU-G.js} +1 -1
  232. package/static/dashboard/assets/{StatusWorkspace-Cp02JcaN.js → StatusWorkspace-BwWCii3A.js} +1 -1
  233. package/static/dashboard/assets/{SystemSettingsPage-BSeuvb8X.js → SystemSettingsPage-BKZxX-_n.js} +1 -1
  234. package/static/dashboard/assets/{SystemSettingsSubjectPanel-CP4_luGS.js → SystemSettingsSubjectPanel-BZrqb2C5.js} +1 -1
  235. package/static/dashboard/assets/{XpodAiConnectionsPodStore-urO6zaHL.js → XpodAiConnectionsPodStore-Bbpx9dTN.js} +1 -1
  236. package/static/dashboard/assets/{activity-DxjgQNvr.js → activity-BJ15TLVP.js} +1 -1
  237. package/static/dashboard/assets/ai-connections-GG6qkTJt.js +1 -0
  238. package/static/dashboard/assets/{badge-53qCrRbl.js → badge-BBX5FlaB.js} +1 -1
  239. package/static/dashboard/assets/{collection-runtime-BPAmHG46.js → collection-runtime-UBbHBzdf.js} +1 -1
  240. package/static/dashboard/assets/{dashboard-BcT2ByXw.js → dashboard-7Y6BHyV9.js} +62 -62
  241. package/static/dashboard/assets/dashboard-rk080mvG.css +1 -0
  242. package/static/dashboard/assets/{dialog-B28YtNhS.js → dialog-QrOJ-hB0.js} +1 -1
  243. package/static/dashboard/assets/{download-DkLNceJ4.js → download-DK9x-VOP.js} +1 -1
  244. package/static/dashboard/assets/{external-link-D3TXnlo3.js → external-link-Cnkn87mJ.js} +1 -1
  245. package/static/dashboard/assets/index-B1z84it5.js +4 -0
  246. package/static/dashboard/assets/{index-CIiBu9mr.js → index-DzjauX3N.js} +1 -1
  247. package/static/dashboard/assets/{index-CFIenkeK.js → index-cIa8_efI.js} +1 -1
  248. package/static/dashboard/assets/{key-round-B5ccp6nx.js → key-round-BoS6UqKz.js} +1 -1
  249. package/static/dashboard/assets/{rotate-ccw-DUpfkNnk.js → rotate-ccw-BeWV76i0.js} +1 -1
  250. package/static/dashboard/assets/{skeleton-BRe19fO0.js → skeleton-CypcJL07.js} +1 -1
  251. package/static/dashboard/assets/{waypoints-BKDMxEvu.js → waypoints-zHOOqfhi.js} +1 -1
  252. package/static/dashboard/assets/{workspace-layout-ZTF7C16h.js → workspace-layout-DZ9JuxnM.js} +1 -1
  253. package/static/dashboard/dashboard.html +2 -2
  254. package/static/settings/assets/{AiConfigContext-DsyWgu2i.js → AiConfigContext-D3b1l_Kw.js} +1 -1
  255. package/static/settings/assets/{AiConfigPage-CSCBckKo.js → AiConfigPage-DYKw-atP.js} +1 -1
  256. package/static/settings/assets/{DocumentProcessingPanel-w9yQDbBe.js → DocumentProcessingPanel-DguRfsIV.js} +1 -1
  257. package/static/settings/assets/{IndexLifecyclePanel-CUUXI8mP.js → IndexLifecyclePanel-B85qJJA4.js} +1 -1
  258. package/static/settings/assets/{IndexSubjectPanel-BypAU5TJ.js → IndexSubjectPanel-CsN7IxaV.js} +1 -1
  259. package/static/settings/assets/{ModelAssignmentsPanel-BetgXw1G.js → ModelAssignmentsPanel-DEp9byI6.js} +1 -1
  260. package/static/settings/assets/{ModelsPage-DZpTlTZ3.js → ModelsPage-CzTnPs_G.js} +3 -3
  261. package/static/settings/assets/NetworkPage-BDVnmUU0.js +2 -0
  262. package/static/settings/assets/{PaneListHeader-BGOqGec4.js → PaneListHeader-Cpe39N76.js} +1 -1
  263. package/static/settings/assets/{SearchIndexingPanel-DYAbpZ_9.js → SearchIndexingPanel-DA9w8lLL.js} +1 -1
  264. package/static/settings/assets/{StatusSubjectPanel-CFgzeQ8Q.js → StatusSubjectPanel-BU0Aq0CS.js} +1 -1
  265. package/static/settings/assets/{StatusWorkspace-4Z6g4Jvv.js → StatusWorkspace-D1AC1i5N.js} +1 -1
  266. package/static/settings/assets/{SystemSettingsPage-C1tlrgvI.js → SystemSettingsPage-ChKvOioO.js} +1 -1
  267. package/static/settings/assets/{SystemSettingsSubjectPanel-CcURI-1L.js → SystemSettingsSubjectPanel-DyTpOnD2.js} +1 -1
  268. package/static/settings/assets/{XpodAiConnectionsPodStore-owBQc5nY.js → XpodAiConnectionsPodStore-VU5Bsz1a.js} +1 -1
  269. package/static/settings/assets/{activity-CtBc9cNy.js → activity-DGpLfsQB.js} +1 -1
  270. package/static/settings/assets/ai-connections-DexTPyfC.js +1 -0
  271. package/static/settings/assets/{badge--r-FDIhU.js → badge-_hCrrWRP.js} +1 -1
  272. package/static/settings/assets/{collection-runtime-CnhPmwAM.js → collection-runtime-E40TZ8Cl.js} +1 -1
  273. package/static/settings/assets/{dialog-B7ZRsjN7.js → dialog-DTr2JkHn.js} +1 -1
  274. package/static/settings/assets/{download-DgQ1F8QR.js → download-B_D21DDX.js} +1 -1
  275. package/static/settings/assets/{external-link-Bz7NckNO.js → external-link-BATYaM13.js} +1 -1
  276. package/static/settings/assets/index-BAlAVi-J.js +4 -0
  277. package/static/settings/assets/{index-CkGda_Pg.js → index-Ckh4h9jj.js} +1 -1
  278. package/static/settings/assets/{index-Vv-8Vslg.js → index-DOiwLF4B.js} +1 -1
  279. package/static/settings/assets/{index-browser-Dq7omlpY.js → index-browser-DFFWN3Kr.js} +1 -1
  280. package/static/settings/assets/{key-round-CvuhloKV.js → key-round-ZTVU_1O1.js} +1 -1
  281. package/static/settings/assets/{rotate-ccw-DgFKDaz7.js → rotate-ccw-DDdw8PTU.js} +1 -1
  282. package/static/settings/assets/{settings-BvqY7K96.js → settings-CyLnISOv.js} +62 -62
  283. package/static/settings/assets/settings-rk080mvG.css +1 -0
  284. package/static/settings/assets/{skeleton-D3OeFDF6.js → skeleton-DEzA3hc2.js} +1 -1
  285. package/static/settings/assets/{waypoints-C4WbspTb.js → waypoints-BSdfNvEb.js} +1 -1
  286. package/static/settings/assets/{workspace-layout-B9H1Tqrk.js → workspace-layout-BOQnl_3d.js} +1 -1
  287. package/static/settings/settings.html +2 -2
  288. package/dist/api/ai-gateway/pod/HostedPodDataAccess.d.ts +0 -31
  289. package/dist/api/ai-gateway/pod/HostedPodDataAccess.js +0 -330
  290. package/dist/http/InternalPodDataHttpHandler.d.ts +0 -57
  291. package/dist/http/InternalPodDataHttpHandler.js +0 -551
  292. package/dist/http/InternalPodDataHttpHandler.jsonld +0 -243
  293. package/node_modules/@undefineds.co/ai-connections-core/package.json +0 -61
  294. package/static/auth-callback/assets/NetworkPage-cEvxRMAl.js +0 -2
  295. package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +0 -1
  296. package/static/auth-callback/assets/auth-callback-Cx9D_1qj.css +0 -1
  297. package/static/auth-callback/assets/index-Cu0EguPo.js +0 -4
  298. package/static/dashboard/assets/NetworkPage-Ot4G2dX5.js +0 -2
  299. package/static/dashboard/assets/ai-connections-CXp5gd1J.js +0 -1
  300. package/static/dashboard/assets/dashboard-Cx9D_1qj.css +0 -1
  301. package/static/dashboard/assets/index-Gp3cLolR.js +0 -4
  302. package/static/settings/assets/NetworkPage-BVkasFGM.js +0 -2
  303. package/static/settings/assets/ai-connections-C6yaE6WQ.js +0 -1
  304. package/static/settings/assets/index-BdXwm8nh.js +0 -4
  305. package/static/settings/assets/settings-Cx9D_1qj.css +0 -1
  306. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/normalize.d.ts +0 -0
  307. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/normalize.js +0 -0
  308. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/request.d.ts +0 -0
  309. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/request.js +0 -0
  310. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/types.d.ts +0 -0
  311. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client/types.js +0 -0
  312. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/base-adapter.d.ts +0 -0
  313. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/base-adapter.js +0 -0
  314. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/codex.d.ts +0 -0
  315. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/codex.js +0 -0
  316. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/index.d.ts +0 -0
  317. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/index.js +0 -0
  318. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/json-env-adapter.d.ts +0 -0
  319. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/json-env-adapter.js +0 -0
  320. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/pi.d.ts +0 -0
  321. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/pi.js +0 -0
  322. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/transaction.d.ts +0 -0
  323. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/transaction.js +0 -0
  324. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/types.d.ts +0 -0
  325. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/client-config/types.js +0 -0
  326. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/credential-storage.d.ts +0 -0
  327. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/credential-storage.js +0 -0
  328. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/endpoint-urls.d.ts +0 -0
  329. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/endpoint-urls.js +0 -0
  330. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/provider-catalog.d.ts +0 -0
  331. /package/node_modules/@undefineds.co/{ai-connections-core/dist → ai-connections/dist/contract}/provider-catalog.js +0 -0
@@ -33,6 +33,7 @@ exports.isDatabaseSqlite = isDatabaseSqlite;
33
33
  exports.executeQuery = executeQuery;
34
34
  exports.executeStatement = executeStatement;
35
35
  exports.executePostgresLockedStatements = executePostgresLockedStatements;
36
+ exports.ensurePodInterfaceKeyTable = ensurePodInterfaceKeyTable;
36
37
  exports.ensureCloudClusterTables = ensureCloudClusterTables;
37
38
  exports.toDbTimestamp = toDbTimestamp;
38
39
  exports.fromDbTimestamp = fromDbTimestamp;
@@ -260,6 +261,35 @@ async function executePostgresLockedStatements(db, lockKey, statements) {
260
261
  client.release();
261
262
  }
262
263
  }
264
+ /**
265
+ * Creates the per-owner interface-key table.
266
+ *
267
+ * The table holds the owner's Pod credential, which the runtime needs *before* it can read
268
+ * anything inside that Pod, so it is created on first use rather than by a Pod-side migration.
269
+ */
270
+ async function ensurePodInterfaceKeyTable(db) {
271
+ if (isDatabaseSqlite(db)) {
272
+ db.run((0, drizzle_orm_1.sql) `
273
+ CREATE TABLE IF NOT EXISTS identity_pod_interface_key (
274
+ owner_web_id TEXT PRIMARY KEY,
275
+ client_id TEXT NOT NULL,
276
+ sealed_secret TEXT NOT NULL,
277
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
278
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
279
+ )
280
+ `);
281
+ return;
282
+ }
283
+ await db.execute((0, drizzle_orm_1.sql) `
284
+ CREATE TABLE IF NOT EXISTS identity_pod_interface_key (
285
+ owner_web_id TEXT PRIMARY KEY,
286
+ client_id TEXT NOT NULL,
287
+ sealed_secret TEXT NOT NULL,
288
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
289
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
290
+ )
291
+ `);
292
+ }
263
293
  async function ensureCloudClusterTables(db) {
264
294
  await ensureDatabaseReady(db);
265
295
  if (db && typeof db === 'object') {
@@ -10,3 +10,12 @@ export declare const edgeNodes: any;
10
10
  * 用于服务间认证 (Business, Local SP, Cloud, Compute)
11
11
  */
12
12
  export declare const serviceTokens: any;
13
+ /**
14
+ * Per-owner interface access key.
15
+ *
16
+ * A server-side component acts for a user through that user's own Pod credentials, so the
17
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
18
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
19
+ * grants access to the Pod.
20
+ */
21
+ export declare const podInterfaceKeys: any;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
3
+ exports.podInterfaceKeys = exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
4
4
  const pg_core_1 = require("drizzle-orm/pg-core");
5
5
  const bigint_1 = require("drizzle-orm/pg-core/columns/bigint");
6
6
  const integer_1 = require("drizzle-orm/pg-core/columns/integer");
@@ -79,4 +79,19 @@ exports.serviceTokens = (0, pg_core_1.pgTable)('cluster_service_token', {
79
79
  createdAt: (0, pg_core_1.timestamp)('created_at', { withTimezone: true, mode: 'date' }).notNull().defaultNow(),
80
80
  expiresAt: (0, pg_core_1.timestamp)('expires_at', { withTimezone: true, mode: 'date' }),
81
81
  });
82
+ /**
83
+ * Per-owner interface access key.
84
+ *
85
+ * A server-side component acts for a user through that user's own Pod credentials, so the
86
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
87
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
88
+ * grants access to the Pod.
89
+ */
90
+ exports.podInterfaceKeys = (0, pg_core_1.pgTable)('identity_pod_interface_key', {
91
+ ownerWebId: (0, pg_core_1.text)('owner_web_id').primaryKey(),
92
+ clientId: (0, pg_core_1.text)('client_id').notNull(),
93
+ sealedSecret: (0, pg_core_1.text)('sealed_secret').notNull(),
94
+ createdAt: (0, pg_core_1.timestamp)('created_at').notNull().defaultNow(),
95
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').notNull().defaultNow(),
96
+ });
82
97
  //# sourceMappingURL=schema.pg.js.map
@@ -1073,3 +1073,109 @@ export declare const serviceTokens: import("drizzle-orm/sqlite-core").SQLiteTabl
1073
1073
  };
1074
1074
  dialect: "sqlite";
1075
1075
  }>;
1076
+ /**
1077
+ * Per-owner interface access key.
1078
+ *
1079
+ * A server-side component acts for a user through that user's own Pod credentials, so the
1080
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
1081
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
1082
+ * grants access to the Pod.
1083
+ */
1084
+ export declare const podInterfaceKeys: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1085
+ name: "identity_pod_interface_key";
1086
+ schema: undefined;
1087
+ columns: {
1088
+ ownerWebId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1089
+ name: "owner_web_id";
1090
+ tableName: "identity_pod_interface_key";
1091
+ dataType: "string";
1092
+ columnType: "SQLiteText";
1093
+ data: string;
1094
+ driverParam: string;
1095
+ notNull: true;
1096
+ hasDefault: false;
1097
+ isPrimaryKey: true;
1098
+ isAutoincrement: false;
1099
+ hasRuntimeDefault: false;
1100
+ enumValues: [string, ...string[]];
1101
+ baseColumn: never;
1102
+ identity: undefined;
1103
+ generated: undefined;
1104
+ }, {}, {
1105
+ length: number | undefined;
1106
+ }>;
1107
+ clientId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1108
+ name: "client_id";
1109
+ tableName: "identity_pod_interface_key";
1110
+ dataType: "string";
1111
+ columnType: "SQLiteText";
1112
+ data: string;
1113
+ driverParam: string;
1114
+ notNull: true;
1115
+ hasDefault: false;
1116
+ isPrimaryKey: false;
1117
+ isAutoincrement: false;
1118
+ hasRuntimeDefault: false;
1119
+ enumValues: [string, ...string[]];
1120
+ baseColumn: never;
1121
+ identity: undefined;
1122
+ generated: undefined;
1123
+ }, {}, {
1124
+ length: number | undefined;
1125
+ }>;
1126
+ sealedSecret: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1127
+ name: "sealed_secret";
1128
+ tableName: "identity_pod_interface_key";
1129
+ dataType: "string";
1130
+ columnType: "SQLiteText";
1131
+ data: string;
1132
+ driverParam: string;
1133
+ notNull: true;
1134
+ hasDefault: false;
1135
+ isPrimaryKey: false;
1136
+ isAutoincrement: false;
1137
+ hasRuntimeDefault: false;
1138
+ enumValues: [string, ...string[]];
1139
+ baseColumn: never;
1140
+ identity: undefined;
1141
+ generated: undefined;
1142
+ }, {}, {
1143
+ length: number | undefined;
1144
+ }>;
1145
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1146
+ name: "created_at";
1147
+ tableName: "identity_pod_interface_key";
1148
+ dataType: "number";
1149
+ columnType: "SQLiteInteger";
1150
+ data: number;
1151
+ driverParam: number;
1152
+ notNull: true;
1153
+ hasDefault: true;
1154
+ isPrimaryKey: false;
1155
+ isAutoincrement: false;
1156
+ hasRuntimeDefault: true;
1157
+ enumValues: undefined;
1158
+ baseColumn: never;
1159
+ identity: undefined;
1160
+ generated: undefined;
1161
+ }, {}, {}>;
1162
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1163
+ name: "updated_at";
1164
+ tableName: "identity_pod_interface_key";
1165
+ dataType: "number";
1166
+ columnType: "SQLiteInteger";
1167
+ data: number;
1168
+ driverParam: number;
1169
+ notNull: true;
1170
+ hasDefault: true;
1171
+ isPrimaryKey: false;
1172
+ isAutoincrement: false;
1173
+ hasRuntimeDefault: true;
1174
+ enumValues: undefined;
1175
+ baseColumn: never;
1176
+ identity: undefined;
1177
+ generated: undefined;
1178
+ }, {}, {}>;
1179
+ };
1180
+ dialect: "sqlite";
1181
+ }>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
3
+ exports.podInterfaceKeys = exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
4
4
  const sqlite_core_1 = require("drizzle-orm/sqlite-core");
5
5
  exports.usage = (0, sqlite_core_1.sqliteTable)('identity_usage', {
6
6
  scopeType: (0, sqlite_core_1.text)('scope_type').notNull(), // 'account' | 'pod'
@@ -79,4 +79,19 @@ exports.serviceTokens = (0, sqlite_core_1.sqliteTable)('cluster_service_token',
79
79
  createdAt: (0, sqlite_core_1.integer)('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
80
80
  expiresAt: (0, sqlite_core_1.integer)('expires_at'),
81
81
  });
82
+ /**
83
+ * Per-owner interface access key.
84
+ *
85
+ * A server-side component acts for a user through that user's own Pod credentials, so the
86
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
87
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
88
+ * grants access to the Pod.
89
+ */
90
+ exports.podInterfaceKeys = (0, sqlite_core_1.sqliteTable)('identity_pod_interface_key', {
91
+ ownerWebId: (0, sqlite_core_1.text)('owner_web_id').primaryKey(),
92
+ clientId: (0, sqlite_core_1.text)('client_id').notNull(),
93
+ sealedSecret: (0, sqlite_core_1.text)('sealed_secret').notNull(),
94
+ createdAt: (0, sqlite_core_1.integer)('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
95
+ updatedAt: (0, sqlite_core_1.integer)('updated_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
96
+ });
82
97
  //# sourceMappingURL=schema.sqlite.js.map
package/dist/index.d.ts CHANGED
@@ -15,7 +15,6 @@ export type { PostgresRdfTextIndexOptions } from './storage/rdf/PostgresRdfTextI
15
15
  export type { PostgresRdfVectorIndexOptions } from './storage/rdf/PostgresRdfVectorIndex';
16
16
  export * from './document';
17
17
  import { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';
18
- import { InternalPodDataHttpHandler } from './http/InternalPodDataHttpHandler';
19
18
  import { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';
20
19
  import { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';
21
20
  import { ClusterIngressRouter } from './http/ClusterIngressRouter';
@@ -51,6 +50,8 @@ import { SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager } from './edge/E
51
50
  import { FrpTunnelManager } from './edge/FrpTunnelManager';
52
51
  import { AcmeCertificateManager } from './edge/acme/AcmeCertificateManager';
53
52
  import { EdgeNodeHealthProbeService } from './edge/EdgeNodeHealthProbeService';
53
+ import { assertPublicProbeTarget, createPinnedHeadProbeRequest, isPublicIpAddress } from './edge/ProbeTargetGuard';
54
+ import { createPodOwnershipNodeAccessResolver } from './edge/reachability/NodeAccessResolver';
54
55
  import { EdgeNodeAgent } from './edge/EdgeNodeAgent';
55
56
  import { EdgeNodeAgentInitializer } from './edge/EdgeNodeAgentInitializer';
56
57
  import { EdgeNodeCertificateService } from './service/EdgeNodeCertificateService';
@@ -125,6 +126,6 @@ export type { OwnedWebIdEntry, PodOwnershipResolver, PodOwnershipTarget, CssPodO
125
126
  export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
126
127
  export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
127
128
  export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
128
- export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, resolveLogFilePattern, resolveCurrentLogFile, LOG_FILE_PATTERN, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, InternalPodDataHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
129
+ export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, resolveLogFilePattern, resolveCurrentLogFile, LOG_FILE_PATTERN, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, assertPublicProbeTarget, createPinnedHeadProbeRequest, isPublicIpAddress, createPodOwnershipNodeAccessResolver, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
129
130
  export type { ResourceChangeEvent, ResourceChangeListener, ResourceChangeRecorder, } from './storage/ObservableResourceStore';
130
131
  export { RdfHandlebarsTemplateEngine } from './util/templates/RdfHandlebarsTemplateEngine';
package/dist/index.js CHANGED
@@ -14,9 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.EdgeNodeAgentInitializer = 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.BaseKeyValueStorage = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.LoginMethodGuardStorage = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.registerDeviceNotificationRuntime = exports.DeviceNotificationTicketHandler = exports.DeviceNotificationWebSocketServer = exports.DeviceNotificationResourceListener = exports.DeviceNotificationHub = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.InternalPodDataHttpHandler = exports.SubgraphSparqlHttpHandler = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.LOG_FILE_PATTERN = exports.resolveCurrentLogFile = exports.resolveLogFilePattern = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.SolidRdfDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
18
- exports.ConfiguredLoopbackDPoPWebIdExtractor = exports.ScopedPickWebIdHandler = exports.SessionBoundIdentityProviderFactory = exports.RememberedClientPromptFactory = exports.RememberedConsentHandler = exports.RememberedClientGrantStore = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.NgrokTunnelProvider = 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.PostgresRdfEngine = exports.RdfQuerySparqlEngine = exports.QleverSparqlEngine = exports.LocalQleverNativeSparqlClient = exports.SolidRdfEngine = exports.PostgresRdfVectorIndex = exports.PostgresRdfTextIndex = exports.RdfVectorIndex = exports.RdfTextIndex = exports.Rdf3xIndex = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = void 0;
19
- exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.CssPodOwnershipResolver = exports.AccountStorageBindingsHandler = void 0;
17
+ exports.isPublicIpAddress = exports.createPinnedHeadProbeRequest = exports.assertPublicProbeTarget = 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.BaseKeyValueStorage = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.LoginMethodGuardStorage = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.registerDeviceNotificationRuntime = exports.DeviceNotificationTicketHandler = exports.DeviceNotificationWebSocketServer = exports.DeviceNotificationResourceListener = exports.DeviceNotificationHub = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.SubgraphSparqlHttpHandler = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.LOG_FILE_PATTERN = exports.resolveCurrentLogFile = exports.resolveLogFilePattern = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.SolidRdfDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
18
+ exports.RememberedClientPromptFactory = exports.RememberedConsentHandler = exports.RememberedClientGrantStore = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.NgrokTunnelProvider = 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.PostgresRdfEngine = exports.RdfQuerySparqlEngine = exports.QleverSparqlEngine = exports.LocalQleverNativeSparqlClient = exports.SolidRdfEngine = exports.PostgresRdfVectorIndex = exports.PostgresRdfTextIndex = exports.RdfVectorIndex = exports.RdfTextIndex = exports.Rdf3xIndex = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = exports.EdgeNodeAgentInitializer = exports.EdgeNodeAgent = exports.createPodOwnershipNodeAccessResolver = void 0;
19
+ exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.CssPodOwnershipResolver = exports.AccountStorageBindingsHandler = exports.ConfiguredLoopbackDPoPWebIdExtractor = exports.ScopedPickWebIdHandler = exports.SessionBoundIdentityProviderFactory = void 0;
20
20
  require("./runtime/configure-drizzle-solid");
21
21
  const RepresentationPartialConvertingStore_1 = require("./storage/RepresentationPartialConvertingStore");
22
22
  Object.defineProperty(exports, "RepresentationPartialConvertingStore", { enumerable: true, get: function () { return RepresentationPartialConvertingStore_1.RepresentationPartialConvertingStore; } });
@@ -37,8 +37,6 @@ Object.defineProperty(exports, "SubgraphQueryEngine", { enumerable: true, get: f
37
37
  __exportStar(require("./document"), exports);
38
38
  const SubgraphSparqlHttpHandler_1 = require("./http/SubgraphSparqlHttpHandler");
39
39
  Object.defineProperty(exports, "SubgraphSparqlHttpHandler", { enumerable: true, get: function () { return SubgraphSparqlHttpHandler_1.SubgraphSparqlHttpHandler; } });
40
- const InternalPodDataHttpHandler_1 = require("./http/InternalPodDataHttpHandler");
41
- Object.defineProperty(exports, "InternalPodDataHttpHandler", { enumerable: true, get: function () { return InternalPodDataHttpHandler_1.InternalPodDataHttpHandler; } });
42
40
  const QuotaAdminHttpHandler_1 = require("./http/quota/QuotaAdminHttpHandler");
43
41
  Object.defineProperty(exports, "QuotaAdminHttpHandler", { enumerable: true, get: function () { return QuotaAdminHttpHandler_1.QuotaAdminHttpHandler; } });
44
42
  const SparqlUpdateResourceStore_1 = require("./storage/SparqlUpdateResourceStore");
@@ -111,6 +109,12 @@ const AcmeCertificateManager_1 = require("./edge/acme/AcmeCertificateManager");
111
109
  Object.defineProperty(exports, "AcmeCertificateManager", { enumerable: true, get: function () { return AcmeCertificateManager_1.AcmeCertificateManager; } });
112
110
  const EdgeNodeHealthProbeService_1 = require("./edge/EdgeNodeHealthProbeService");
113
111
  Object.defineProperty(exports, "EdgeNodeHealthProbeService", { enumerable: true, get: function () { return EdgeNodeHealthProbeService_1.EdgeNodeHealthProbeService; } });
112
+ const ProbeTargetGuard_1 = require("./edge/ProbeTargetGuard");
113
+ Object.defineProperty(exports, "assertPublicProbeTarget", { enumerable: true, get: function () { return ProbeTargetGuard_1.assertPublicProbeTarget; } });
114
+ Object.defineProperty(exports, "createPinnedHeadProbeRequest", { enumerable: true, get: function () { return ProbeTargetGuard_1.createPinnedHeadProbeRequest; } });
115
+ Object.defineProperty(exports, "isPublicIpAddress", { enumerable: true, get: function () { return ProbeTargetGuard_1.isPublicIpAddress; } });
116
+ const NodeAccessResolver_1 = require("./edge/reachability/NodeAccessResolver");
117
+ Object.defineProperty(exports, "createPodOwnershipNodeAccessResolver", { enumerable: true, get: function () { return NodeAccessResolver_1.createPodOwnershipNodeAccessResolver; } });
114
118
  const EdgeNodeAgent_1 = require("./edge/EdgeNodeAgent");
115
119
  Object.defineProperty(exports, "EdgeNodeAgent", { enumerable: true, get: function () { return EdgeNodeAgent_1.EdgeNodeAgent; } });
116
120
  const EdgeNodeAgentInitializer_1 = require("./edge/EdgeNodeAgentInitializer");
package/dist/main.js CHANGED
@@ -213,6 +213,11 @@ async function startRuntime(options) {
213
213
  (0, runtime_1.validateBaseUrl)({ baseUrl, mainPort, explicit: explicitBaseUrl !== undefined });
214
214
  const cssPort = await (0, runtime_1.getFreePortForWildcard)(mainPort + 1);
215
215
  const apiPort = await (0, runtime_1.getFreePortForWildcard)(cssPort + 1);
216
+ // Remote forwarding (managed tunnels, P2P data plane) terminates on this machine, so
217
+ // its origin is a dedicated ingress port instead of the gateway port: the Gateway
218
+ // never treats requests accepted there as local. It is an internal loopback detail, so
219
+ // the OS assigns the port instead of us claiming a neighbour of the planned ports.
220
+ const ingressPort = await (0, runtime_1.getEphemeralLoopbackPort)();
216
221
  const runtimeRoot = path_1.default.join(process.cwd(), '.xpod/runtime/legacy-css');
217
222
  const rdfIndexPath = process.env.CSS_RDF_INDEX_PATH || (0, database_url_1.resolveDefaultRdfIndexPath)({
218
223
  sparqlEndpoint: process.env.CSS_SPARQL_ENDPOINT ?? process.env.SPARQL_ENDPOINT,
@@ -268,6 +273,7 @@ async function startRuntime(options) {
268
273
  apiPort,
269
274
  mainPort,
270
275
  cssPort,
276
+ ingressPort,
271
277
  baseUrl,
272
278
  rdfIndexPath,
273
279
  authMode,
@@ -296,6 +302,7 @@ async function startRuntime(options) {
296
302
  exitOnStop: true,
297
303
  baseUrl,
298
304
  internalAdminAuthSecret: gatewayAdminProxyAuthSecret,
305
+ ingressPort,
299
306
  });
300
307
  proxy.setTargets({
301
308
  css: `http://localhost:${cssPort}`,
@@ -2,9 +2,8 @@ import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'node:http';
2
2
  export declare const GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER = "x-xpod-admin-proxy-loopback";
3
3
  export declare const GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER = "x-xpod-admin-proxy-timestamp";
4
4
  export declare const GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER = "x-xpod-admin-proxy-signature";
5
- export declare const GATEWAY_ADMIN_PROXY_INTENT_HEADER = "x-xpod-admin-proxy-intent";
6
5
  export declare const GATEWAY_ADMIN_PROXY_NONCE_HEADER = "x-xpod-admin-proxy-nonce";
7
- export declare const GATEWAY_ADMIN_PROXY_HEADERS: readonly ["x-xpod-admin-proxy-loopback", "x-xpod-admin-proxy-timestamp", "x-xpod-admin-proxy-signature", "x-xpod-admin-proxy-intent", "x-xpod-admin-proxy-nonce"];
6
+ export declare const GATEWAY_ADMIN_PROXY_HEADERS: readonly ["x-xpod-admin-proxy-loopback", "x-xpod-admin-proxy-timestamp", "x-xpod-admin-proxy-signature", "x-xpod-admin-proxy-nonce"];
8
7
  export declare function createGatewayAdminProxyAuthSecret(): string;
9
8
  export interface GatewayAdminProxyMarkerInput {
10
9
  secret: string;
@@ -13,27 +12,14 @@ export interface GatewayAdminProxyMarkerInput {
13
12
  originalClientLoopback: boolean;
14
13
  issuedAt?: number;
15
14
  nonce?: string;
16
- intent?: GatewayAdminProxyIntent;
17
15
  }
18
16
  export interface GatewayAdminProxyMarkerVerification {
19
17
  present: boolean;
20
18
  valid: boolean;
21
19
  originalClientLoopback: boolean;
22
20
  nonce?: string;
23
- intent?: GatewayAdminProxyIntent;
24
21
  reason?: string;
25
22
  }
26
- export interface GatewayAdminProxyIntent {
27
- ownerWebId: string;
28
- /** Physical Pod root when it differs from the identity provider WebID root. */
29
- podBaseUrl?: string;
30
- method: 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
31
- resourceUrl: string;
32
- principalKind: 'solid-user' | 'gateway-key-verifier';
33
- scopes: string[];
34
- /** SHA-256 hex digest of a POST body. Required for POST intents. */
35
- bodyDigest?: string;
36
- }
37
23
  export declare function createGatewayAdminProxyHeaders(input: GatewayAdminProxyMarkerInput): OutgoingHttpHeaders;
38
24
  export declare function stripGatewayAdminProxyHeaders(headers: IncomingHttpHeaders): void;
39
25
  export declare function isLoopbackRemoteAddress(remoteAddress: string | undefined): boolean;
@@ -44,4 +30,3 @@ export declare function verifyGatewayAdminProxyHeaders(input: {
44
30
  url: string | undefined;
45
31
  now?: number;
46
32
  }): GatewayAdminProxyMarkerVerification;
47
- export declare function canonicalGatewayAdminProxyIntent(intent: GatewayAdminProxyIntent): string;
@@ -1,24 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GATEWAY_ADMIN_PROXY_HEADERS = exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER = exports.GATEWAY_ADMIN_PROXY_INTENT_HEADER = exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER = exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER = exports.GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER = void 0;
3
+ exports.GATEWAY_ADMIN_PROXY_HEADERS = exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER = exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER = exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER = exports.GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER = void 0;
4
4
  exports.createGatewayAdminProxyAuthSecret = createGatewayAdminProxyAuthSecret;
5
5
  exports.createGatewayAdminProxyHeaders = createGatewayAdminProxyHeaders;
6
6
  exports.stripGatewayAdminProxyHeaders = stripGatewayAdminProxyHeaders;
7
7
  exports.isLoopbackRemoteAddress = isLoopbackRemoteAddress;
8
8
  exports.verifyGatewayAdminProxyHeaders = verifyGatewayAdminProxyHeaders;
9
- exports.canonicalGatewayAdminProxyIntent = canonicalGatewayAdminProxyIntent;
10
9
  const node_crypto_1 = require("node:crypto");
11
10
  const node_net_1 = require("node:net");
12
11
  exports.GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER = 'x-xpod-admin-proxy-loopback';
13
12
  exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER = 'x-xpod-admin-proxy-timestamp';
14
13
  exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER = 'x-xpod-admin-proxy-signature';
15
- exports.GATEWAY_ADMIN_PROXY_INTENT_HEADER = 'x-xpod-admin-proxy-intent';
16
14
  exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER = 'x-xpod-admin-proxy-nonce';
17
15
  exports.GATEWAY_ADMIN_PROXY_HEADERS = [
18
16
  exports.GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER,
19
17
  exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER,
20
18
  exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER,
21
- exports.GATEWAY_ADMIN_PROXY_INTENT_HEADER,
22
19
  exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER,
23
20
  ];
24
21
  const MAX_CLOCK_SKEW_MS = 60_000;
@@ -28,12 +25,10 @@ function createGatewayAdminProxyAuthSecret() {
28
25
  function createGatewayAdminProxyHeaders(input) {
29
26
  const issuedAt = input.issuedAt ?? Date.now();
30
27
  const loopback = input.originalClientLoopback ? '1' : '0';
31
- const intent = input.intent ? canonicalGatewayAdminProxyIntent(input.intent) : undefined;
32
28
  return {
33
29
  [exports.GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER]: loopback,
34
30
  [exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER]: String(issuedAt),
35
31
  ...(input.nonce ? { [exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER]: input.nonce } : {}),
36
- ...(intent ? { [exports.GATEWAY_ADMIN_PROXY_INTENT_HEADER]: intent } : {}),
37
32
  [exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER]: signGatewayAdminProxyMarker({
38
33
  secret: input.secret,
39
34
  method: input.method,
@@ -41,7 +36,6 @@ function createGatewayAdminProxyHeaders(input) {
41
36
  loopback,
42
37
  issuedAt,
43
38
  nonce: input.nonce,
44
- intent,
45
39
  }),
46
40
  };
47
41
  }
@@ -66,7 +60,6 @@ function verifyGatewayAdminProxyHeaders(input) {
66
60
  const timestamp = firstHeader(input.headers[exports.GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER]);
67
61
  const signature = firstHeader(input.headers[exports.GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER]);
68
62
  const nonce = firstHeader(input.headers[exports.GATEWAY_ADMIN_PROXY_NONCE_HEADER]);
69
- const intentHeader = firstHeader(input.headers[exports.GATEWAY_ADMIN_PROXY_INTENT_HEADER]);
70
63
  const present = loopback !== undefined || timestamp !== undefined || signature !== undefined;
71
64
  if (!present) {
72
65
  return { present: false, valid: false, originalClientLoopback: false };
@@ -87,10 +80,6 @@ function verifyGatewayAdminProxyHeaders(input) {
87
80
  if (Math.abs((input.now ?? Date.now()) - issuedAt) > MAX_CLOCK_SKEW_MS) {
88
81
  return { present: true, valid: false, originalClientLoopback: loopback === '1', reason: 'expired_marker' };
89
82
  }
90
- const intent = parseGatewayAdminProxyIntent(intentHeader);
91
- if (intentHeader !== undefined && !intent) {
92
- return { present: true, valid: false, originalClientLoopback: loopback === '1', reason: 'invalid_intent' };
93
- }
94
83
  const expected = signGatewayAdminProxyMarker({
95
84
  secret: input.secret,
96
85
  method: input.method,
@@ -98,12 +87,11 @@ function verifyGatewayAdminProxyHeaders(input) {
98
87
  loopback,
99
88
  issuedAt,
100
89
  nonce,
101
- intent: intentHeader,
102
90
  });
103
91
  if (!safeEqual(signature, expected)) {
104
92
  return { present: true, valid: false, originalClientLoopback: loopback === '1', reason: 'bad_signature' };
105
93
  }
106
- return { present: true, valid: true, originalClientLoopback: loopback === '1', nonce, intent };
94
+ return { present: true, valid: true, originalClientLoopback: loopback === '1', nonce };
107
95
  }
108
96
  function signGatewayAdminProxyMarker(input) {
109
97
  const payload = [
@@ -113,66 +101,9 @@ function signGatewayAdminProxyMarker(input) {
113
101
  input.loopback,
114
102
  String(input.issuedAt),
115
103
  input.nonce ?? '',
116
- input.intent ?? '',
117
104
  ].join('\n');
118
105
  return (0, node_crypto_1.createHmac)('sha256', input.secret).update(payload).digest('base64url');
119
106
  }
120
- function canonicalGatewayAdminProxyIntent(intent) {
121
- return JSON.stringify({
122
- ownerWebId: intent.ownerWebId,
123
- ...(intent.podBaseUrl ? { podBaseUrl: intent.podBaseUrl } : {}),
124
- method: intent.method,
125
- resourceUrl: intent.resourceUrl,
126
- principalKind: intent.principalKind,
127
- scopes: [...intent.scopes].sort(),
128
- ...(intent.bodyDigest ? { bodyDigest: intent.bodyDigest } : {}),
129
- });
130
- }
131
- function parseGatewayAdminProxyIntent(value) {
132
- if (!value) {
133
- return undefined;
134
- }
135
- try {
136
- const parsed = JSON.parse(value);
137
- if (typeof parsed.ownerWebId !== 'string' ||
138
- typeof parsed.resourceUrl !== 'string' ||
139
- (parsed.podBaseUrl !== undefined && !isHttpUrl(parsed.podBaseUrl)) ||
140
- (parsed.method !== 'GET' && parsed.method !== 'HEAD' && parsed.method !== 'POST' && parsed.method !== 'PUT' && parsed.method !== 'PATCH' && parsed.method !== 'DELETE') ||
141
- (parsed.principalKind !== 'solid-user' && parsed.principalKind !== 'gateway-key-verifier') ||
142
- !Array.isArray(parsed.scopes) ||
143
- !parsed.scopes.every((scope) => typeof scope === 'string') ||
144
- (parsed.bodyDigest !== undefined && !isSha256Hex(parsed.bodyDigest)) ||
145
- (parsed.method === 'POST' && !isSha256Hex(parsed.bodyDigest))) {
146
- return undefined;
147
- }
148
- return {
149
- ownerWebId: parsed.ownerWebId,
150
- ...(parsed.podBaseUrl ? { podBaseUrl: parsed.podBaseUrl } : {}),
151
- method: parsed.method,
152
- resourceUrl: parsed.resourceUrl,
153
- principalKind: parsed.principalKind,
154
- scopes: parsed.scopes,
155
- ...(parsed.bodyDigest ? { bodyDigest: parsed.bodyDigest } : {}),
156
- };
157
- }
158
- catch {
159
- return undefined;
160
- }
161
- }
162
- function isHttpUrl(value) {
163
- if (typeof value !== 'string')
164
- return false;
165
- try {
166
- const url = new URL(value);
167
- return url.protocol === 'http:' || url.protocol === 'https:';
168
- }
169
- catch {
170
- return false;
171
- }
172
- }
173
- function isSha256Hex(value) {
174
- return typeof value === 'string' && /^[a-f0-9]{64}$/u.test(value);
175
- }
176
107
  function safeEqual(actual, expected) {
177
108
  const actualBuffer = Buffer.from(actual);
178
109
  const expectedBuffer = Buffer.from(expected);
@@ -21,7 +21,22 @@ export declare class GatewayProxy {
21
21
  private readonly nativeUpgradeRelay?;
22
22
  /** Sockets created by `upgrade` events, dropped on shutdown. */
23
23
  private readonly upgradeSockets;
24
+ /**
25
+ * Loopback-only listener used as the origin of everything that forwards remote
26
+ * traffic to this Gateway (managed tunnels, P2P data plane). Requests accepted
27
+ * there are never treated as local, so a forwarded request cannot inherit the
28
+ * trust that a real local client has.
29
+ */
30
+ private readonly ingressPort?;
31
+ private ingressServer?;
24
32
  constructor(port: number | undefined, supervisor: Supervisor, bindHost?: string, options?: GatewayProxyOptions);
33
+ /**
34
+ * Builds one HTTP listener plus its WebSocket routing.
35
+ *
36
+ * `untrustedIngress` marks the listener that tunnels and the P2P data plane
37
+ * connect to; see `ingressPort`.
38
+ */
39
+ private createListener;
25
40
  /**
26
41
  * Upgraded sockets outlive the HTTP request that created them; they are
27
42
  * tracked so shutdown can drop them instead of waiting for a long lived
@@ -52,12 +67,12 @@ export declare class GatewayProxy {
52
67
  * (oven-sh/bun#28396), so waiting forever would block gateway restarts.
53
68
  */
54
69
  private closeServer;
70
+ private ingressListenEndpoint;
55
71
  private handleRequest;
56
72
  private isApiWebProductPath;
57
73
  private shouldRouteToApi;
58
74
  private pathnameFromRequestUrl;
59
75
  private applyInternalAdminProxyHeaders;
60
- private verifiedInternalPodProxyHeaders;
61
76
  private isApiHost;
62
77
  private configuredApiHosts;
63
78
  private hostsFromUrlList;
@@ -78,6 +93,15 @@ export declare class GatewayProxy {
78
93
  * Add CORS headers matching CSS CorsHandler configuration
79
94
  */
80
95
  private addCorsHeaders;
96
+ /**
97
+ * Whether this request carries operator authority.
98
+ *
99
+ * `/service/*` exposes logs and service control, so a caller that only reached the Gateway
100
+ * through a tunnel must not get it - whatever address it presents. A local caller counts, and
101
+ * so does a signed gateway admin proxy header, which is how the same machine proves it is the
102
+ * operator through a local forwarder.
103
+ */
104
+ private hasOperatorAuthority;
81
105
  private handleInternalApi;
82
106
  private isCssReady;
83
107
  private normalizeTarget;
@@ -102,4 +126,11 @@ export interface GatewayProxyOptions {
102
126
  * client socket at all.
103
127
  */
104
128
  nativeUpgradeRelay?: boolean;
129
+ /**
130
+ * Port for the loopback-only ingress listener that remote forwarding paths
131
+ * (managed tunnels, P2P data plane) use as their origin. Omit it when the
132
+ * Gateway has no remote ingress.
133
+ */
134
+ ingressPort?: number;
105
135
  }
136
+ export declare function forwardedFromOutside(req: http.IncomingMessage): boolean;