@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
@@ -1,243 +0,0 @@
1
- {
2
- "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld",
4
- "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld"
5
- ],
6
- "@id": "npmd:@undefineds.co/xpod",
7
- "components": [
8
- {
9
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler",
10
- "@type": "Class",
11
- "requireElement": "InternalPodDataHttpHandler",
12
- "extends": [
13
- "css:dist/server/HttpHandler.jsonld#HttpHandler"
14
- ],
15
- "parameters": [
16
- {
17
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_resourceStore",
18
- "range": "css:dist/storage/ResourceStore.jsonld#ResourceStore"
19
- },
20
- {
21
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_gatewayAdminProxyAuthSecret",
22
- "range": {
23
- "@type": "ParameterRangeUnion",
24
- "parameterRangeElements": [
25
- "xsd:string",
26
- {
27
- "@type": "ParameterRangeUndefined"
28
- }
29
- ]
30
- }
31
- },
32
- {
33
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_patchBodyParser",
34
- "range": {
35
- "@type": "ParameterRangeUnion",
36
- "parameterRangeElements": [
37
- "css:dist/http/input/body/BodyParser.jsonld#BodyParser",
38
- {
39
- "@type": "ParameterRangeUndefined"
40
- }
41
- ]
42
- }
43
- },
44
- {
45
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_sparqlHandler",
46
- "range": {
47
- "@type": "ParameterRangeUnion",
48
- "parameterRangeElements": [
49
- "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataTrustedSparqlHandler",
50
- {
51
- "@type": "ParameterRangeUndefined"
52
- }
53
- ]
54
- }
55
- },
56
- {
57
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_baseUrl",
58
- "range": {
59
- "@type": "ParameterRangeUnion",
60
- "parameterRangeElements": [
61
- "xsd:string",
62
- {
63
- "@type": "ParameterRangeUndefined"
64
- }
65
- ]
66
- }
67
- },
68
- {
69
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_basePath",
70
- "range": {
71
- "@type": "ParameterRangeUnion",
72
- "parameterRangeElements": [
73
- "xsd:string",
74
- {
75
- "@type": "ParameterRangeUndefined"
76
- }
77
- ]
78
- }
79
- }
80
- ],
81
- "memberFields": [
82
- {
83
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_logger",
84
- "memberFieldName": "logger",
85
- "range": {
86
- "@type": "ParameterRangeWildcard"
87
- }
88
- },
89
- {
90
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_resourceStore",
91
- "memberFieldName": "resourceStore"
92
- },
93
- {
94
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_gatewayAdminProxyAuthSecret",
95
- "memberFieldName": "gatewayAdminProxyAuthSecret"
96
- },
97
- {
98
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_patchBodyParser",
99
- "memberFieldName": "patchBodyParser"
100
- },
101
- {
102
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_sparqlHandler",
103
- "memberFieldName": "sparqlHandler"
104
- },
105
- {
106
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_deploymentBaseUrl",
107
- "memberFieldName": "deploymentBaseUrl"
108
- },
109
- {
110
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_basePath",
111
- "memberFieldName": "basePath"
112
- },
113
- {
114
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_seenNonces",
115
- "memberFieldName": "seenNonces"
116
- },
117
- {
118
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_eTagHandler",
119
- "memberFieldName": "eTagHandler"
120
- },
121
- {
122
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_conditionsParser",
123
- "memberFieldName": "conditionsParser"
124
- },
125
- {
126
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_constructor",
127
- "memberFieldName": "constructor"
128
- },
129
- {
130
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_canHandle",
131
- "memberFieldName": "canHandle"
132
- },
133
- {
134
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_handle",
135
- "memberFieldName": "handle"
136
- },
137
- {
138
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_verifyRequest",
139
- "memberFieldName": "verifyRequest"
140
- },
141
- {
142
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_logRejectedRequest",
143
- "memberFieldName": "logRejectedRequest"
144
- },
145
- {
146
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_intentMatchesRequest",
147
- "memberFieldName": "intentMatchesRequest"
148
- },
149
- {
150
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_isHostedOwnerResource",
151
- "memberFieldName": "isHostedOwnerResource"
152
- },
153
- {
154
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_isAllowedAiConnectionResource",
155
- "memberFieldName": "isAllowedAiConnectionResource"
156
- },
157
- {
158
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_delegate",
159
- "memberFieldName": "delegate"
160
- },
161
- {
162
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_createRepresentation",
163
- "memberFieldName": "createRepresentation"
164
- },
165
- {
166
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_writeETag",
167
- "memberFieldName": "writeETag"
168
- },
169
- {
170
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_createPatch",
171
- "memberFieldName": "createPatch"
172
- },
173
- {
174
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_pipeRepresentation",
175
- "memberFieldName": "pipeRepresentation"
176
- },
177
- {
178
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_writeNotFound",
179
- "memberFieldName": "writeNotFound"
180
- },
181
- {
182
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_writeEmptyGraph",
183
- "memberFieldName": "writeEmptyGraph"
184
- },
185
- {
186
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_requestPathname",
187
- "memberFieldName": "requestPathname"
188
- },
189
- {
190
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_parseOptionalUrl",
191
- "memberFieldName": "parseOptionalUrl"
192
- },
193
- {
194
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler__member_isInsideDeployment",
195
- "memberFieldName": "isInsideDeployment"
196
- }
197
- ],
198
- "constructorArguments": [
199
- {
200
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options__constructorArgument",
201
- "fields": [
202
- {
203
- "keyRaw": "resourceStore",
204
- "value": {
205
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_resourceStore"
206
- }
207
- },
208
- {
209
- "keyRaw": "gatewayAdminProxyAuthSecret",
210
- "value": {
211
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_gatewayAdminProxyAuthSecret"
212
- }
213
- },
214
- {
215
- "keyRaw": "patchBodyParser",
216
- "value": {
217
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_patchBodyParser"
218
- }
219
- },
220
- {
221
- "keyRaw": "sparqlHandler",
222
- "value": {
223
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_sparqlHandler"
224
- }
225
- },
226
- {
227
- "keyRaw": "baseUrl",
228
- "value": {
229
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_baseUrl"
230
- }
231
- },
232
- {
233
- "keyRaw": "basePath",
234
- "value": {
235
- "@id": "undefineds:dist/http/InternalPodDataHttpHandler.jsonld#InternalPodDataHttpHandler_options_basePath"
236
- }
237
- }
238
- ]
239
- }
240
- ]
241
- }
242
- ]
243
- }
@@ -1,61 +0,0 @@
1
- {
2
- "name": "@undefineds.co/ai-connections-core",
3
- "version": "0.1.0",
4
- "private": false,
5
- "type": "module",
6
- "sideEffects": false,
7
- "files": [
8
- "dist"
9
- ],
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.ts",
13
- "import": "./dist/index.js"
14
- },
15
- "./client": {
16
- "types": "./dist/ai-connections-client.d.ts",
17
- "import": "./dist/ai-connections-client.js"
18
- },
19
- "./provider-catalog": {
20
- "types": "./dist/provider-catalog.d.ts",
21
- "import": "./dist/provider-catalog.js",
22
- "require": "./dist/provider-catalog.cjs"
23
- },
24
- "./client-config": {
25
- "types": "./dist/client-config/index.d.ts",
26
- "import": "./dist/client-config/index.js",
27
- "require": "./dist/client-config/index.cjs"
28
- },
29
- "./endpoint-urls": {
30
- "types": "./dist/endpoint-urls.d.ts",
31
- "import": "./dist/endpoint-urls.js"
32
- }
33
- },
34
- "scripts": {
35
- "build": "rm -rf dist && tsc -p tsconfig.json && bun ../../scripts/fix-dist-js-imports.mjs dist && bun build src/client-config/index.ts --target=node --format=cjs --outfile=dist/client-config/index.cjs && bun build src/provider-catalog.ts --target=node --format=cjs --outfile=dist/provider-catalog.cjs",
36
- "test": "vitest run --config ../../vitest.packages.config.mts"
37
- },
38
- "dependencies": {
39
- "@undefineds.co/models": "0.2.59"
40
- },
41
- "devDependencies": {
42
- "typescript": "^6.0.3",
43
- "vitest": "^4.1.8"
44
- },
45
- "typesVersions": {
46
- "*": {
47
- "provider-catalog": [
48
- "dist/provider-catalog.d.ts"
49
- ],
50
- "client": [
51
- "dist/ai-connections-client.d.ts"
52
- ],
53
- "client-config": [
54
- "dist/client-config/index.d.ts"
55
- ],
56
- "endpoint-urls": [
57
- "dist/endpoint-urls.d.ts"
58
- ]
59
- }
60
- }
61
- }
@@ -1,2 +0,0 @@
1
- import{c as E,v as pe,r as d,Y as B,j as e,C as N,a as w,b as k,d as C,e as S,B as y,Z as se,R as xe,N as he,w as fe,x as be}from"./auth-callback-D2UkK5Xj.js";import{P as ve}from"./PaneListHeader-ByKw8ada.js";import{N as re,W as je}from"./waypoints-D6Jo-SZa.js";import{A as ie}from"./activity-DnTlb9iM.js";import{T as ge,u as ye}from"./workspace-layout-BHwT_cHd.js";import{E as Ne}from"./external-link-B6B8jfSn.js";import{B as L}from"./badge-D7IJuuTM.js";import{R as we}from"./rotate-ccw-B3hE-nyd.js";import{D as ke}from"./download-kn8WnRu3.js";const Ce=[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z",key:"trhst0"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10",key:"1mo9zo"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z",key:"1dd30t"}],["path",{d:"M7 5V3",key:"1t1388"}]],Se=E("cable",Ce);const Pe=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],le=E("earth",Pe);const Re=[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]],De=E("lock-keyhole",Re);const Te=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Ae=E("radio",Te);const Ee=[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]],Le=E("route",Ee);const Ie=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Me=E("shield-check",Ie);const $e=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],Oe=E("wifi",$e);async function Ue({fetchImpl:t}){return Y(t,X("/api/network/settings/status"),{method:"GET",credentials:"include",headers:{accept:"application/json"}})}async function qe({fetchImpl:t}){return Y(t,X("/api/network/settings/diagnose"),{method:"POST",credentials:"include",headers:{accept:"application/json"}})}async function He({fetchImpl:t}){await Y(t,X("/api/network/settings/certificate/renew"),{method:"POST",credentials:"include",headers:{accept:"application/json"}})}async function ze({podUrl:t,fetchImpl:a,patch:s}){return Y(a,Ve("/api/network/settings/configuration",t),{method:"PUT",credentials:"include",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify(s)})}function X(t){const a=typeof window>"u"?"http://localhost":window.location.origin;return new URL(t,a).toString()}function Ve(t,a){return a?new URL(t,a).toString():X(t)}async function Y(t,a,s){const r=await t(a,s);if(!r.ok)throw await r.arrayBuffer(),new Error("Network settings request failed. Please try again.");if(!r.headers.get("content-type")?.includes("application/json"))throw await r.arrayBuffer(),new Error("Network settings request failed. Please try again.");return await r.json()}const te=[{id:"overview",label:"Overview",path:"",icon:re},{id:"endpoints",label:"Endpoints",path:"endpoints",icon:Se},{id:"addresses",label:"Addresses",path:"addresses",icon:le},{id:"domain-dns",label:"Domain & DNS",path:"domain-dns",icon:Le},{id:"https",label:"HTTPS",path:"https",icon:De},{id:"tunnel-profiles",label:"Tunnel Profiles",path:"tunnel-profiles",icon:je},{id:"p2p",label:"P2P",path:"p2p",icon:Ae},{id:"diagnostics",label:"Diagnostics",path:"diagnostics",icon:ie}];function Be(t){const a=["Xpod Network Diagnostics",`Generated: ${t.generatedAt}`,`Canonical URL: ${t.endpoint??"Unavailable"}`],s=t.checks.flatMap(r=>["",`[${r.status.toUpperCase()}] ${r.label}`,...r.detail?[r.detail]:[]]);return[...a,...s].join(`
2
- `)}function jt(){const t=pe(),[a,s]=d.useState(),[r,n]=d.useState([]),[l,o]=d.useState(),[x,u]=d.useState(),[P,h]=d.useState(!1),[T,$]=d.useState(!1),[i,p]=d.useState(!1),[v,R]=d.useState(!1),[_,de]=d.useState(),O=d.useRef(0),U=d.useRef(0),q=d.useRef(0),H=d.useRef(void 0),z=d.useRef(!0),F=typeof window>"u"?void 0:window.location.origin,g=F?`local-host:${F}`:void 0,D=globalThis.fetch;d.useEffect(()=>(z.current=!0,()=>{z.current=!1,O.current+=1,U.current+=1,q.current+=1}),[]);const K=d.useCallback((c,m)=>z.current&&O.current===c&&H.current===m,[]),W=d.useCallback((c,m)=>z.current&&U.current===c&&H.current===m,[]),G=d.useCallback((c,m)=>z.current&&q.current===c&&H.current===m,[]),V=d.useCallback(async()=>{const c=g;if(!c)return;const m=O.current+1;O.current=m,h(!0),u(void 0);try{const A=await Ue({fetchImpl:D});K(m,c)&&s(A)}catch{K(m,c)&&u("网络设置请求失败,请重试。")}finally{K(m,c)&&h(!1)}},[D,g,K]);d.useEffect(()=>{let c=!1;return H.current=g,O.current+=1,U.current+=1,q.current+=1,queueMicrotask(()=>{c||H.current!==g||(s(void 0),n([]),o(void 0),u(void 0),h(!1),$(!1),p(!1),g&&V())}),()=>{c=!0}},[g,V]);const ce=d.useCallback(async()=>{const c=g;if(!c)return;const m=U.current+1;U.current=m,$(!0),u(void 0);try{const A=await qe({fetchImpl:D});W(m,c)&&(n(A.checks),o(new Date),B({description:"诊断完成"}))}catch{W(m,c)&&u("网络诊断失败,请重试。")}finally{W(m,c)&&$(!1)}},[D,g,W]),ue=d.useCallback(async()=>{const c=g;if(!c)return;const m=q.current+1;q.current=m,p(!0),u(void 0);try{await He({fetchImpl:D}),G(m,c)&&(B({variant:"success",description:"证书续签成功"}),await V())}catch{G(m,c)&&u("证书续签失败,请重试。")}finally{G(m,c)&&p(!1)}},[D,g,G,V]),J=d.useCallback(async c=>{if(F){R(!0),u(void 0);try{const m=await ze({fetchImpl:D,patch:c});s(A=>A&&{...A,configuration:m.configuration}),de(m.applyState),B({variant:"success",description:"Network configuration saved"})}catch{u("网络配置保存失败,请重试。")}finally{R(!1)}}},[D,F]),me=d.useMemo(()=>[{key:"local",title:"本机",values:a?.addresses.local??[]},{key:"lan",title:"局域网",values:a?.addresses.lan??[]},{key:"public",title:"公网",values:a?.addresses.public??[]}],[a]),ne=t.pathname.split("/").filter(Boolean).at(-1),b=te.some(c=>c.path===ne)?ne:"overview";return e.jsx(ge,{mode:"auto",listHeader:e.jsx(ve,{title:"Network"}),list:e.jsx(_e,{}),mainHeader:e.jsx(Fe,{title:te.find(c=>(c.path||"overview")===b)?.label??"Overview",loading:P,stale:P&&!!a,onRefresh:V}),main:e.jsxs("section",{className:"flex min-h-full flex-col gap-4 bg-background p-6",children:[x?e.jsx("div",{role:"alert",className:"rounded-md border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive",children:x}):null,(b==="overview"||b==="endpoints")&&e.jsx(Qe,{endpoint:a?.endpoint,loading:P&&!a}),b==="overview"&&e.jsx(Ke,{status:a}),(b==="overview"||b==="addresses")&&e.jsx(tt,{sections:me,loading:P&&!a,diagnostics:r,checkedAt:l}),b==="overview"&&e.jsx(lt,{status:a}),b==="domain-dns"&&e.jsxs(e.Fragment,{children:[e.jsx(rt,{status:a}),e.jsx(Ge,{configuration:a?.configuration,saving:v,applyState:_,onSave:J})]}),b==="https"&&e.jsxs(e.Fragment,{children:[e.jsx(it,{status:a}),e.jsx(Je,{configuration:a?.configuration,saving:v,applyState:_,onSave:J})]}),b==="tunnel-profiles"&&e.jsxs(e.Fragment,{children:[e.jsx(We,{title:"Observed tunnel",label:"Tunnel",capability:a?.tunnel}),e.jsx(Xe,{configuration:a?.configuration,saving:v,applyState:_,onSave:J})]}),b==="p2p"&&e.jsx(Ze,{configuration:a?.configuration,saving:v,applyState:_,onSave:J}),(b==="overview"||b==="diagnostics"||b==="https")&&e.jsx(ot,{status:a,endpoint:a?.endpoint,diagnostics:r,diagnosing:T,renewing:i,onDiagnose:ce,onRenewCertificate:ue})]}),className:"min-h-full"})}function _e(){const t=ye();return e.jsx("aside",{className:"h-full border-r border-border bg-muted/20 py-2",children:e.jsx("nav",{"aria-label":"Network sections","data-list-navigation":!0,children:te.map(a=>{const s=a.icon,r=`/network${a.path?`/${a.path}`:""}`;return e.jsxs(he,{to:r,onClick:()=>t.openMain(),onKeyDown:fe,className:({isActive:n})=>be(n,{compact:!1}),end:a.path==="",children:[e.jsx(s,{className:"h-4 w-4","aria-hidden":"true"}),a.label]},a.id)})})})}function Fe({title:t,loading:a,stale:s,onRefresh:r}){return e.jsxs("div",{className:"flex h-full min-w-0 items-center justify-between gap-4 px-4",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("h1",{className:"text-sm font-semibold text-foreground",children:["Network · ",t]}),e.jsx("div",{className:"truncate text-xs text-muted-foreground","aria-live":"polite",children:s?"Refreshing · showing previous snapshot":"接入点、DNS、TLS、隧道与连通性诊断"})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs(y,{type:"button",size:"sm",variant:"outline",onClick:r,disabled:a,children:[e.jsx(xe,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"刷新"]})})]})}function Ke({status:t}){const a=t?.addresses.public[0]??t?.addresses.lan[0]??t?.addresses.local[0]??t?.endpoint,s=t?!t.dns.supported||t.dns.status==="unsupported"?"Configure Domain & DNS, then recheck observed DNS.":!t.tls.supported||!["valid","active","ready"].includes(t.tls.status)?"Review HTTPS configuration and certificate renewal evidence.":"No connectivity action is currently required.":"Refresh network status.";return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:"Recommended access path"}),e.jsx(C,{children:"Chosen from observed public, LAN, then local reachability"})]}),e.jsxs(S,{className:"space-y-3 text-sm",children:[e.jsx("div",{className:"break-words font-medium",children:a??"Unavailable"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-4",children:[e.jsxs(L,{variant:"outline",children:["Local ",t?.addresses.local.length?"available":"unavailable"]}),e.jsxs(L,{variant:"outline",children:["LAN ",t?.addresses.lan.length?"available":"unavailable"]}),e.jsxs(L,{variant:"outline",children:["Public ",t?.addresses.public.length?"available":"unavailable"]}),e.jsxs(L,{variant:"outline",children:["Tunnel ",t?.tunnel.status??"unknown"]})]}),e.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[e.jsx("div",{className:"font-medium",children:"Next action"}),e.jsx("div",{className:"mt-1 text-muted-foreground",children:s})]})]})]})}function We({title:t,label:a,capability:s,extra:r}){return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:t}),e.jsx(C,{children:"Observed runtime state"})]}),e.jsx(S,{children:e.jsx(M,{label:a,capability:s,extra:r})})]})}function Z({title:t}){return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:t}),e.jsx(C,{children:"Desired configuration"})]}),e.jsxs(S,{className:"text-sm text-muted-foreground",children:["This runtime does not report a configurable ",t," capability."]})]})}function Ge({configuration:t,saving:a,applyState:s,onSave:r}){const[n,l]=d.useState(t?.domainDns),[o,x]=d.useState("");return d.useEffect(()=>{let u=!1;return queueMicrotask(()=>{u||l(t?.domainDns)}),()=>{u=!0}},[t]),n?e.jsxs(Q,{title:"Saved configuration",applyState:s,children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(j,{name:"domain",label:"Domain",value:n.domain,onChange:u=>l({...n,domain:u})}),e.jsx(j,{name:"provider",label:"DNS provider",value:n.provider,onChange:u=>l({...n,provider:u})}),e.jsx(oe,{name:"recordTtl",label:"Record TTL (seconds)",value:n.recordTtl,min:30,max:86400,onChange:u=>l({...n,recordTtl:u})}),e.jsx(j,{name:"dnsCredential",label:n.credentialConfigured?"Replace credential (configured)":"Credential",value:o,type:"password",onChange:x})]}),e.jsx(ae,{label:"Enable DDNS",checked:n.ddnsEnabled,onChange:u=>l({...n,ddnsEnabled:u})}),e.jsx(ee,{label:"Save DNS configuration",saving:a,onClick:()=>r({domainDns:{domain:n.domain,ddnsEnabled:n.ddnsEnabled,provider:n.provider,recordTtl:n.recordTtl,...o?{credential:o}:{}}})})]}):e.jsx(Z,{title:"Domain & DNS"})}function Je({configuration:t,saving:a,applyState:s,onSave:r}){const[n,l]=d.useState(t?.https);return d.useEffect(()=>{let o=!1;return queueMicrotask(()=>{o||l(t?.https)}),()=>{o=!0}},[t]),n?e.jsxs(Q,{title:"Saved configuration",applyState:s,children:[e.jsx(ae,{label:"Enable HTTPS",checked:n.enabled,onChange:o=>l({...n,enabled:o})}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsx(j,{name:"acmeEmail",label:"ACME email",value:n.acmeEmail,onChange:o=>l({...n,acmeEmail:o})}),e.jsx(j,{name:"acmeDomains",label:"Certificate domains",value:n.domains.join(", "),onChange:o=>l({...n,domains:o.split(",").map(x=>x.trim()).filter(Boolean)})}),e.jsx(j,{name:"certificatePath",label:"Certificate path",value:n.certificatePath??"",onChange:o=>l({...n,certificatePath:o})}),e.jsx(j,{name:"certificateKeyPath",label:"Private-key path",value:n.certificateKeyPath??"",onChange:o=>l({...n,certificateKeyPath:o})}),e.jsx(oe,{name:"renewBeforeDays",label:"Renew before (days)",value:n.renewBeforeDays,min:1,max:90,onChange:o=>l({...n,renewBeforeDays:o})})]}),e.jsx(ee,{label:"Save HTTPS configuration",saving:a,onClick:()=>r({https:n})})]}):e.jsx(Z,{title:"HTTPS"})}function Xe({configuration:t,saving:a,applyState:s,onSave:r}){const[n,l]=d.useState(t?.tunnelProfiles.activeProfileId??""),[o,x]=d.useState(t?.tunnelProfiles.profiles??[]),[u,P]=d.useState({});if(d.useEffect(()=>{let i=!1;return queueMicrotask(()=>{i||(l(t?.tunnelProfiles.activeProfileId??""),x(t?.tunnelProfiles.profiles??[]),P({}))}),()=>{i=!0}},[t]),!t)return e.jsx(Z,{title:"Tunnel Profiles"});const h=(i,p)=>x(v=>v.map(R=>R.id===i?{...R,...p}:R)),T=()=>{const i=`tunnel-${Date.now()}`;x(p=>[...p,{id:i,provider:"ngrok",label:"New tunnel",credentialConfigured:!1,parameters:{}}])},$=i=>{x(p=>p.filter(v=>v.id!==i)),n===i&&l("")};return e.jsxs(Q,{title:"Saved tunnel profiles",applyState:s,children:[e.jsxs("label",{className:"block space-y-2 text-sm font-medium",children:["Active profile",e.jsxs("select",{value:n,onChange:i=>l(i.target.value),className:"block h-10 w-full rounded-md border border-input bg-background px-3 sm:max-w-sm",children:[e.jsx("option",{value:"",children:"None"}),o.map(i=>e.jsxs("option",{value:i.id,children:[i.label," · ",i.provider]},i.id))]})]}),e.jsx("div",{className:"space-y-3",children:o.map(i=>e.jsxs("div",{className:"space-y-3 rounded-md border border-border p-3 text-sm",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(j,{name:`tunnel-label-${i.id}`,label:"Label",value:i.label,onChange:p=>h(i.id,{label:p})}),e.jsxs("label",{className:"block space-y-2 text-sm font-medium",children:["Provider",e.jsxs("select",{value:i.provider,onChange:p=>h(i.id,{provider:p.target.value,parameters:{}}),className:"block h-10 w-full rounded-md border border-input bg-background px-3",children:[e.jsx("option",{value:"ngrok",children:"ngrok"}),e.jsx("option",{value:"cloudflare",children:"Cloudflare"}),e.jsx("option",{value:"frp",children:"frp"})]})]}),e.jsx(j,{name:`tunnel-url-${i.id}`,label:"Public endpoint",value:i.publicEndpoint??"",onChange:p=>h(i.id,{publicEndpoint:p})}),e.jsx(j,{name:`tunnel-credential-${i.id}`,label:i.credentialConfigured?"Replace credential (configured)":"Credential",type:"password",value:u[i.id]??"",onChange:p=>P(v=>({...v,[i.id]:p}))})]}),e.jsxs("details",{children:[e.jsx("summary",{className:"cursor-pointer font-medium",children:"Provider-specific parameters"}),e.jsx("div",{className:"mt-3 grid gap-3 sm:grid-cols-2",children:Ye(i.provider).map(({key:p,label:v})=>e.jsx(j,{name:`tunnel-${p}-${i.id}`,label:v,value:i.parameters?.[p]??"",onChange:R=>h(i.id,{parameters:{...i.parameters,[p]:R}})},p))})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:[n===i.id?"Active after restart":"Inactive"," · credential ",i.credentialConfigured?"configured":"missing"]}),e.jsx(y,{type:"button",size:"sm",variant:"ghost",onClick:()=>$(i.id),children:"Remove"})]})]},i.id))}),e.jsx(y,{type:"button",size:"sm",variant:"outline",onClick:T,children:"Add tunnel profile"}),e.jsx(ee,{label:"Save tunnel profiles",saving:a,onClick:()=>r({tunnelProfiles:{activeProfileId:n,profiles:o.map(i=>({id:i.id,provider:i.provider,label:i.label,publicEndpoint:i.publicEndpoint,parameters:i.parameters,...u[i.id]?{credential:u[i.id]}:{}}))}})})]})}function Ye(t){return t==="ngrok"?[{key:"region",label:"Region"},{key:"hostname",label:"Reserved hostname"}]:t==="cloudflare"?[{key:"tunnelId",label:"Tunnel ID"},{key:"hostname",label:"Hostname"}]:[{key:"serverHost",label:"Server host"},{key:"serverPort",label:"Server port"},{key:"remotePort",label:"Remote port"}]}function Ze({configuration:t,saving:a,applyState:s,onSave:r}){const[n,l]=d.useState(t?.p2p);return d.useEffect(()=>{let o=!1;return queueMicrotask(()=>{o||l(t?.p2p)}),()=>{o=!0}},[t]),n?e.jsxs(Q,{title:"Saved P2P configuration",applyState:s,children:[e.jsx(ae,{label:"Enable P2P fallback",checked:n.enabled,onChange:o=>l({...n,enabled:o})}),e.jsx(j,{name:"signalService",label:"Signal service",value:n.signalService,onChange:o=>l({...n,signalService:o})}),e.jsxs("label",{className:"block space-y-2 text-sm font-medium",children:["Fallback policy",e.jsxs("select",{value:n.fallbackPolicy,onChange:o=>l({...n,fallbackPolicy:o.target.value}),className:"block h-10 w-full rounded-md border border-input bg-background px-3 sm:max-w-sm",children:[e.jsx("option",{value:"never",children:"Never"}),e.jsx("option",{value:"when-direct-unavailable",children:"When direct is unavailable"}),e.jsx("option",{value:"prefer-p2p",children:"Prefer P2P"})]})]}),e.jsx(ee,{label:"Save P2P configuration",saving:a,onClick:()=>r({p2p:n})})]}):e.jsx(Z,{title:"P2P"})}function Q({title:t,applyState:a,children:s}){return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:t}),e.jsx(C,{children:"Desired configuration · not presented as observed until verified"})]}),e.jsxs(S,{className:"space-y-4",children:[a==="restart-required"?e.jsx("div",{role:"status",className:"rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:bg-amber-950/20 dark:text-amber-200",children:"Saved · restart required"}):null,s]})]})}function j({name:t,label:a,value:s,type:r="text",onChange:n}){return e.jsxs("label",{className:"block space-y-2 text-sm font-medium",children:[a,e.jsx("input",{name:t,type:r,value:s,onChange:l=>n(l.target.value),className:"block h-10 w-full rounded-md border border-input bg-background px-3 text-sm"})]})}function oe({name:t,label:a,value:s,min:r,max:n,onChange:l}){return e.jsxs("label",{className:"block space-y-2 text-sm font-medium",children:[a,e.jsx("input",{name:t,type:"number",value:s,min:r,max:n,onChange:o=>l(o.target.valueAsNumber),className:"block h-10 w-full rounded-md border border-input bg-background px-3 text-sm"})]})}function ae({label:t,checked:a,onChange:s}){return e.jsxs("label",{className:"flex items-center justify-between gap-3 rounded-md border border-border p-3 text-sm font-medium",children:[t,e.jsx("input",{type:"checkbox",checked:a,onChange:r=>s(r.target.checked)})]})}function ee({label:t,saving:a,onClick:s}){return e.jsx("div",{className:"flex justify-end",children:e.jsx(y,{type:"button",onClick:s,disabled:a,children:a?"Saving…":t})})}function Qe({endpoint:t,loading:a}){const s=[{label:"Canonical URL",value:t},{label:"API endpoint",value:t?et(t,"/api/"):void 0}],r=async(n,l)=>{await window.navigator.clipboard.writeText(l),B({description:`${n} copied`})};return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsxs(k,{className:"flex items-center gap-2 text-base",children:[e.jsx(le,{className:"h-4 w-4","aria-hidden":"true"}),"接入点"]}),e.jsx(C,{children:a?"正在解析接入点":"Observed endpoints · Currently effective route is the canonical URL"})]}),e.jsx(S,{className:"space-y-3",children:s.map(({label:n,value:l})=>e.jsxs("div",{className:"flex items-start justify-between gap-3 rounded-md border border-border p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:n}),e.jsx("div",{className:"mt-1 break-words text-sm text-foreground",children:l||"Unavailable"})]}),l?e.jsxs("div",{className:"flex shrink-0 gap-1",children:[e.jsx(y,{type:"button",size:"icon",variant:"ghost","aria-label":`Copy ${n}`,onClick:()=>{r(n,l)},children:e.jsx(se,{className:"h-4 w-4","aria-hidden":"true"})}),e.jsx(y,{type:"button",size:"icon",variant:"ghost","aria-label":`Open ${n}`,onClick:()=>window.open(l,"_blank","noopener,noreferrer"),children:e.jsx(Ne,{className:"h-4 w-4","aria-hidden":"true"})})]}):null]},n))})]})}function et(t,a){try{return new URL(a,t).toString()}catch{return t}}function tt({sections:t,loading:a,diagnostics:s,checkedAt:r}){return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsxs(k,{className:"flex items-center gap-2 text-base",children:[e.jsx(Oe,{className:"h-4 w-4","aria-hidden":"true"}),"网络地址"]}),e.jsx(C,{children:a?"正在刷新地址":"由运行时网络能力上报"})]}),e.jsx(S,{className:"space-y-4",children:t.map(n=>e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:n.title}),n.values.length>0?e.jsx("div",{className:"mt-1 space-y-1",children:n.values.map(l=>e.jsx(at,{scope:n.key,value:l,diagnostics:s,checkedAt:r},l))}):e.jsx("div",{className:"mt-1 text-sm text-muted-foreground",children:"未提供"})]},n.key))})]})}function at({scope:t,value:a,diagnostics:s,checkedAt:r}){const n=nt(a),l=s.find(o=>o.id==="endpoint");return e.jsxs("div",{className:"rounded-md border border-border p-3 text-sm",children:[e.jsx("div",{className:"break-words font-medium text-foreground",children:a}),e.jsxs("dl",{className:"mt-2 grid gap-x-4 gap-y-1 text-xs sm:grid-cols-2",children:[e.jsx(f,{label:"Interface",value:t==="local"?"Loopback":t==="lan"?"LAN interface (name not reported)":"Public route"}),e.jsx(f,{label:"IP version",value:n.ipVersion}),e.jsx(f,{label:"Port",value:n.port}),e.jsx(f,{label:"Reachability",value:l?st(l.status):"Not checked"}),e.jsx(f,{label:"Latency",value:l?.durationMs==null?"Not checked":`${l.durationMs} ms`}),e.jsx(f,{label:"Last checked",value:l?.checkedAt?I(l.checkedAt):r?r.toLocaleString():"Not checked"})]})]})}function f({label:t,value:a}){return e.jsxs("div",{className:"flex justify-between gap-3",children:[e.jsx("dt",{className:"text-muted-foreground",children:t}),e.jsx("dd",{className:"text-right text-foreground",children:a})]})}function nt(t){try{const a=new URL(t),s=a.hostname.replace(/^\[|\]$/g,"");return{ipVersion:s.includes(":")?"IPv6":/^\d{1,3}(?:\.\d{1,3}){3}$/.test(s)?"IPv4":"Resolved hostname",port:a.port||(a.protocol==="https:"?"443":a.protocol==="http:"?"80":"Not reported")}}catch{return{ipVersion:"Not reported",port:"Not reported"}}}function st(t){return t==="ok"?"Reachable":t==="warning"?"Warning":t==="error"?"Unreachable":"Unsupported"}function rt({status:t}){const a=t?.configuration?.domainDns,s=(t?.addresses.public??[]).map(r=>{try{return new URL(r).hostname}catch{return r}});return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:"Observed DNS"}),e.jsx(C,{children:"Observed state is kept separate from desired DNS policy."})]}),e.jsxs(S,{className:"space-y-3",children:[e.jsx(M,{label:"Runtime status",capability:t?.dns}),e.jsxs("dl",{className:"grid gap-2 text-sm sm:grid-cols-2",children:[e.jsx(f,{label:"Observed hostnames",value:s.join(", ")||"Not reported"}),e.jsx(f,{label:"Expected domain",value:a?.domain||"Not configured"}),e.jsx(f,{label:"Expected value",value:t?.addresses.public[0]||"Not reported"}),e.jsx(f,{label:"Provider",value:a?.provider||"Not configured"})]})]})]})}function it({status:t}){const a=t?.configuration?.https;return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsx(k,{className:"text-base",children:"Observed HTTPS"}),e.jsx(C,{children:"Certificate evidence reported by the active runtime."})]}),e.jsxs(S,{className:"space-y-3",children:[e.jsx(M,{label:"TLS",capability:t?.tls,extra:t?.tls.expiresAt?`Expires ${I(t.tls.expiresAt)}`:void 0}),e.jsxs("dl",{className:"grid gap-2 text-sm sm:grid-cols-2",children:[e.jsx(f,{label:"Certificate domains",value:t?.tls.domains?.join(", ")||a?.domains.join(", ")||"Not reported"}),e.jsx(f,{label:"Issuer",value:t?.tls.issuer||"Not reported by runtime"}),e.jsx(f,{label:"Validity",value:t?.tls.validFrom?`${I(t.tls.validFrom)} — ${t.tls.expiresAt?I(t.tls.expiresAt):"open"}`:t?.tls.status??"Not reported"}),e.jsx(f,{label:"Expiry",value:t?.tls.expiresAt?I(t.tls.expiresAt):"Not reported"}),e.jsx(f,{label:"Renewal status",value:t?.tls.renewalStatus||(t?.actions.renewCertificate?"Renewal available":"Renewal unavailable")}),e.jsx(f,{label:"Renewal policy",value:a?`${a.renewBeforeDays} days before expiry`:"Not configured"})]})]})]})}function lt({status:t}){return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsxs(k,{className:"flex items-center gap-2 text-base",children:[e.jsx(re,{className:"h-4 w-4","aria-hidden":"true"}),"网络能力"]}),e.jsx(C,{children:"服务端声明的网络支持"})]}),e.jsxs(S,{className:"grid gap-3 text-sm",children:[e.jsx(M,{label:"TLS",capability:t?.tls,extra:t?.tls.expiresAt?`到期时间 ${I(t.tls.expiresAt)}`:void 0}),e.jsx(M,{label:"DNS",capability:t?.dns}),e.jsx(M,{label:"Tunnel",capability:t?.tunnel})]})]})}function ot({status:t,endpoint:a,diagnostics:s,diagnosing:r,renewing:n,onDiagnose:l,onRenewCertificate:o}){const x=s.length>0?Be({generatedAt:new Date().toISOString(),endpoint:a,checks:s}):void 0,u=async()=>{x&&(await window.navigator.clipboard.writeText(x),B({description:"Diagnostic report copied"}))},P=()=>{if(!x)return;const h=URL.createObjectURL(new Blob([x],{type:"text/plain;charset=utf-8"})),T=document.createElement("a");T.href=h,T.download=`xpod-network-diagnostics-${new Date().toISOString().replace(/[:.]/g,"-")}.txt`,T.click(),URL.revokeObjectURL(h)};return e.jsxs(N,{children:[e.jsxs(w,{children:[e.jsxs(k,{className:"flex items-center gap-2 text-base",children:[e.jsx(ie,{className:"h-4 w-4","aria-hidden":"true"}),"操作"]}),e.jsx(C,{children:"仅显示网络能力允许的操作"})]}),e.jsxs(S,{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[t?.actions.diagnose?e.jsxs(y,{type:"button",size:"sm",variant:"outline",onClick:l,disabled:r,children:[e.jsx(Me,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"连通性诊断"]}):null,t?.actions.renewCertificate?e.jsxs(y,{type:"button",size:"sm",variant:"subtle",onClick:o,disabled:n,children:[e.jsx(we,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"续签证书"]}):null,e.jsxs(y,{type:"button",size:"sm",variant:"outline",onClick:()=>{u()},disabled:!x,children:[e.jsx(se,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"Copy diagnostics"]}),e.jsxs(y,{type:"button",size:"sm",variant:"outline",onClick:P,disabled:!x,children:[e.jsx(ke,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"Export diagnostics"]})]}),s.length>0?e.jsx("div",{className:"space-y-2",children:s.map(h=>e.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:h.label}),e.jsx(L,{variant:h.status==="ok"?"secondary":"outline",children:h.status})]}),h.detail?e.jsx("div",{className:"mt-1 break-words text-xs text-muted-foreground",children:h.detail}):null]},h.id))}):e.jsx("div",{className:"text-sm text-muted-foreground",children:"尚未运行过诊断。"})]})]})}function M({label:t,capability:a,extra:s}){const r=a?.supported===!0;return e.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:r?t:`${t} 不支持`}),e.jsx("div",{className:"text-xs text-muted-foreground",children:a?.status??"读取中"})]}),e.jsx(L,{variant:r?"secondary":"outline",children:r?"支持":"不支持"})]}),s?e.jsx("div",{className:"mt-2 text-xs text-muted-foreground",children:s}):null]})}function I(t){if(!t)return"暂无记录";const a=new Date(t);return Number.isNaN(a.getTime())?"暂无记录":a.toLocaleString()}export{jt as default};
@@ -1 +0,0 @@
1
- const H=["openai","anthropic","kimi","bailian","deepseek","zhipu","ollama","custom"];function Tt(e){if(e==null||!e.trim())return;let t;try{t=new URL(e.trim())}catch{throw new Error("invalid_proxy_url")}if(!["http:","https:"].includes(t.protocol)||t.username||t.password||t.hash)throw new Error("invalid_proxy_url");if(!t.hostname)throw new Error("invalid_proxy_url");return t.href.replace(/\/$/u,"")}class T extends Error{constructor(t,n,a={}){const c=te(t);super(c?`AI Connection request failed: ${c}`:`AI Connection request failed (HTTP ${n})`),this.name="AiConnectionsRequestError",this.code=c,this.status=n,this.providerStatus=u(t)&&typeof t.providerStatus=="number"?t.providerStatus:void 0,this.payload=t,this.provider=a.provider,this.authMode=a.authMode}}function te(e){if(u(e)){if(typeof e.code=="string")return e.code;if(typeof e.errorCode=="string")return e.errorCode;if(typeof e.error=="string"&&/^[a-z][a-z0-9_:-]{0,80}$/i.test(e.error))return e.error}}async function F(e){const t=await e.text();if(t)try{return JSON.parse(t)}catch{throw new Error(`AI Connection returned invalid JSON (${e.status})`)}}function be(e){if(!H.includes(e))throw new Error(`Unsupported AI provider: ${e}`)}function L(e){if(!(!u(e)||typeof e.id!="string"||typeof e.owner!="string"||!Array.isArray(e.scopes)||!e.scopes.every(t=>typeof t=="string")||typeof e.createdAt!="string"))return y({id:e.id,kind:e.kind==="client-credentials"?e.kind:void 0,credentialResource:o(e.credentialResource),fingerprint:o(e.fingerprint),owner:e.owner,scopes:e.scopes,createdAt:e.createdAt,expiresAt:o(e.expiresAt),lastUsedAt:o(e.lastUsedAt),disabledAt:o(e.disabledAt),revokedAt:o(e.revokedAt),name:o(e.name),maskedHint:o(e.maskedHint),plaintextAvailable:typeof e.plaintextAvailable=="boolean"?e.plaintextAvailable:void 0,clientCredentialId:o(e.clientCredentialId),appliedTo:o(e.appliedTo),appliedOn:o(e.appliedOn),appliedAt:o(e.appliedAt),appliedClients:U(e.appliedClients)})}function V(e){if(!Array.isArray(e))throw new Error("AI Connection returned an invalid custom models response");const t=[];for(const n of e)!u(n)||typeof n.id!="string"||!n.id||t.push(y({id:n.id,displayName:o(n.displayName),inputModalities:U(n.inputModalities),outputModalities:U(n.outputModalities),capabilities:U(n.capabilities)}));return t}function U(e){if(!Array.isArray(e))return;const t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function ne(e){if(!u(e)||typeof e.id!="string"||Ae(e.id))return;const t=g(e.provider)??g(e.providerId)??g(e.owned_by)??Pe(e.id);if(!t)return;const n=u(e.capabilities)?e.capabilities.imageInput:void 0;return y({id:e.id,provider:t,offeringId:o(e.offeringId),resourceId:o(e.resourceId),displayName:o(e.displayName)??o(e.display_name)??o(e.name),contextWindow:W(e.contextWindow)??W(e.context_window),protocols:Array.isArray(e.protocols)?e.protocols.filter(a=>typeof a=="string"):void 0,custom:e.custom===!0?!0:void 0,inputModalities:J(e.modalities,"input")??(n===!0?["text","image"]:n===!1?["text"]:void 0),outputModalities:J(e.modalities,"output"),capabilities:Ie(e)})}function J(e,t){if(!u(e))return;const n=e[t];if(!Array.isArray(n))return;const a=n.filter(c=>typeof c=="string");return a.length>0?a:void 0}function Ie(e){if(Array.isArray(e.custom_capabilities)){const n=e.custom_capabilities.filter(a=>typeof a=="string");if(n.length>0)return n}if(!u(e.capabilities))return;const t=[];return e.capabilities.imageInput===!0&&t.push("image"),e.capabilities.toolCalls===!0&&t.push("tool_call"),e.capabilities.reasoningEffort===!0&&t.push("reasoning"),e.capabilities.fast===!0&&t.push("fast"),e.capabilities.embedding===!0&&t.push("embedding"),t.length>0?t:void 0}function Ae(e){const t=e.toLowerCase();return t==="linx"||t==="linx-lite"||t==="undefineds/linx"||t==="undefineds/linx-lite"}function g(e){if(typeof e!="string")return;const t=e.toLowerCase().trim();return t==="alibaba"||t==="dashscope"||t==="alibaba-bailian"||t==="bailian-coding-plan"||t==="bailian-token-plan"?"bailian":H.includes(t)?t:void 0}function Pe(e){const t=e.split("/",1)[0];return e.includes("/")?g(t):void 0}function W(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function we(e){const t=new Map;for(const n of e){const a=Ue(n);if(!a)continue;const c=t.get(a.id);t.set(a.id,c?xe(c,a):a)}return[...t.values()]}function Ue(e){return _e(e)??Ce(e)}function Ce(e){if(!u(e)||typeof e.provider!="string"||!We(e.status)||!u(e.connect)||!Array.isArray(e.connect.modes)||!e.connect.modes.every(K)||typeof e.connect.configured!="boolean")return;const t=g(e.provider);if(!t)return;const n=Ne(e,t);return{id:t,name:de(t),offerings:[],credentials:n?[n]:[],selectedModels:[],status:qe(e.status)}}function _e(e){if(!u(e))return;const t=g(e.id)??g(e.provider);if(!t||!Ke(e.status))return;const n=I(e.offerings,ke),a=I(e.credentials,C),c=I(e.selectedModels,ne);return{id:t,name:o(e.name)??de(t),offerings:n,credentials:a,selectedModels:c,status:e.status}}function ke(e){if(!u(e)||typeof e.id!="string"||!e.id)return;const t=I(e.authModes,se);return y({id:e.id,label:o(e.label),kind:o(e.kind),lifecycle:Ee(e.lifecycle),authModes:t,authorizationMethods:I(e.authorizationMethods,ie),runtimeProviderIds:U(e.runtimeProviderIds),productLabel:o(e.productLabel),credentialPrefixHints:U(e.credentialPrefixHints),consoleUrl:o(e.consoleUrl),subscriptionUrl:o(e.subscriptionUrl),endpoints:I(e.endpoints,re),modelDiscovery:Oe(e.modelDiscovery),quota:Te(e.quota),usagePolicyUrl:o(e.usagePolicyUrl),region:o(e.region)})}function Se(e){if(!u(e)||typeof e.offeringId!="string"||!e.offeringId)return;const t=g(e.provider);if(!t)return;const n=I(e.authorizationMethods,ie);return{provider:t,offeringId:e.offeringId,...Array.isArray(e.endpoints)?{endpoints:I(e.endpoints,re)}:{},authorizationMethods:n}}function ie(e){if(!u(e)||typeof e.id!="string"||!e.id)return;const t=se(e.authMode),n=Me(e.lifecycle);if(!t||!n)return;const a=K(e.connectMode)?e.connectMode:void 0;return y({id:e.id,authMode:t,connectMode:a,label:o(e.label),lifecycle:n,reason:o(e.reason)})}function Me(e){return e==="active"||e==="unavailable"?e:void 0}function Ee(e){return e==="active"||e==="legacy"||e==="unavailable"?e:void 0}function re(e){if(!u(e))return;const t=o(e.protocol),n=o(e.baseUrl);if(!(!t||!n))return y({protocol:t,baseUrl:n,region:o(e.region)})}function Oe(e){if(!u(e))return;const t=o(e.strategy),n=o(e.path),a=o(e.endpointProtocol);return t&&n&&a?{strategy:t,path:n,endpointProtocol:a}:void 0}function Te(e){if(!u(e))return;const t=o(e.strategy),n=o(e.url);return t&&n?{strategy:t,url:n}:void 0}function C(e){if(!(!u(e)||typeof e.id!="string"||!e.id||typeof e.offeringId!="string"||!e.offeringId||!ce(e.authMode)||typeof e.enabled!="boolean"||typeof e.priority!="number"||!Number.isFinite(e.priority)||!He(e.health)||typeof e.version!="number"||!Number.isFinite(e.version)))return y({id:e.id,provider:g(e.provider),offeringId:e.offeringId,authMode:e.authMode,label:o(e.label),enabled:e.enabled,priority:e.priority,health:e.health,maskedHint:o(e.maskedHint),baseUrl:o(e.baseUrl),proxyUrl:o(e.proxyUrl),expiresAt:o(e.expiresAt),version:e.version})}function oe(e){return u(e)?Object.fromEntries(Object.entries(e).filter(([t])=>!Re(t)).map(([t,n])=>[t,ae(n)])):{}}function ae(e){return Array.isArray(e)?e.map(ae):u(e)?oe(e):e}function Re(e){const t=e.toLocaleLowerCase();return t.includes("secret")||t.includes("token")||t.includes("apikey")||t==="api_key"||t==="key"||t==="authorization"}function xe(e,t){const n=q([...e.credentials,...t.credentials],d=>d.id),a=q([...e.offerings,...t.offerings],d=>d.id),c=q([...e.selectedModels,...t.selectedModels],Le);return{id:e.id,name:e.name??t.name,offerings:a,credentials:n,selectedModels:c,status:$e(e.status,t.status)}}function Le(e){return e.resourceId??`${e.provider}:${e.offeringId??""}:${e.id}`}function qe(e){return e==="connected"?"available":e==="reauthRequired"?"attention":"unconfigured"}function $e(e,t){return e==="available"||t==="available"?"available":e==="attention"||t==="attention"?"attention":e==="configured"||t==="configured"?"configured":e==="unconfigured"||t==="unconfigured"?"unconfigured":"unavailable"}function Ne(e,t){if(e.status==="disconnected")return;const n=De(e.authMode);return y({id:o(e.credentialIri)??`${t}:current`,offeringId:ze(t,n),authMode:n,label:o(e.accountLabel),enabled:e.status==="connected",priority:0,health:e.status==="reauthRequired"||e.reauthRequired===!0?"expired":"healthy",maskedHint:o(e.maskedHint),baseUrl:o(e.baseUrl),proxyUrl:o(e.proxyUrl),expiresAt:o(e.expiresAt),version:typeof e.version=="number"?e.version:0})}function De(e){return e==="deviceCodeOAuth"?"deviceCode":"apiKey"}function ze(e,t){return e==="kimi"&&(t==="deviceCode"||t==="oauth")?"subscription-key":t==="deviceCode"||t==="oauth"?"official-subscription":"api-platform"}function se(e){return ce(e)?e:void 0}function ce(e){return e==="oauth"||e==="deviceCode"||e==="apiKey"||e==="local"}function He(e){return e==="healthy"||e==="expired"||e==="invalid"||e==="unknown"}function Ke(e){return e==="unconfigured"||e==="configured"||e==="available"||e==="attention"||e==="unavailable"}function I(e,t){return Array.isArray(e)?e.map(t).filter(_):[]}function q(e,t){const n=new Set,a=[];for(const c of e){const d=t(c);n.has(d)||(n.add(d),a.push(c))}return a}function de(e){switch(e){case"openai":return"OpenAI";case"anthropic":return"Anthropic";case"kimi":return"Kimi";case"bailian":return"Alibaba Bailian";case"deepseek":return"DeepSeek";case"zhipu":return"Zhipu";case"ollama":return"Ollama";case"custom":return"Custom"}}function je(e){if(!u(e)||typeof e.id!="string"||typeof e.credentialIri!="string"||typeof e.webId!="string"||typeof e.provider!="string"||typeof e.authMode!="string"||typeof e.status!="string")return;const t=g(e.provider);if(t)return y({id:e.id,credentialIri:e.credentialIri,webId:e.webId,provider:t,authMode:e.authMode,status:e.status,accountLabel:o(e.accountLabel),expiresAt:o(e.expiresAt),version:typeof e.version=="number"?e.version:void 0,reauthRequired:typeof e.reauthRequired=="boolean"?e.reauthRequired:void 0})}function Ge(e,t){if(!u(e)||!K(e.mode)||!Je(e.status)||e.provider!==t)throw new Error("AI Connection returned an invalid Connect response");return y({mode:e.mode,status:e.status,provider:t,attemptId:o(e.attemptId),state:o(e.state),signature:o(e.signature),expiresAt:o(e.expiresAt),authorizationUrl:$(e.authorizationUrl),userCode:o(e.userCode),verificationUri:$(e.verificationUri),verificationUriComplete:$(e.verificationUriComplete),intervalSeconds:typeof e.intervalSeconds=="number"?e.intervalSeconds:void 0,apiKeyManagementSupported:typeof e.apiKeyManagementSupported=="boolean"?e.apiKeyManagementSupported:void 0,credentialId:o(e.credentialId),offeringId:o(e.offeringId),authorizationMethodId:o(e.authorizationMethodId),oauthCredential:Be(e.oauthCredential),message:o(e.message)})}function Be(e){if(e!==void 0){if(!u(e)||typeof e.accessToken!="string"||!e.accessToken||typeof e.refreshToken!="string"||!e.refreshToken)throw new Error("AI Connection returned an invalid OAuth credential payload");return y({accessToken:e.accessToken,refreshToken:e.refreshToken,expiresAt:o(e.expiresAt),scope:o(e.scope),idToken:o(e.idToken),accountSubject:o(e.accountSubject),accountId:o(e.accountId),accountLabel:o(e.accountLabel),offeringId:o(e.offeringId),authorizationMethodId:o(e.authorizationMethodId),expectedVersion:typeof e.expectedVersion=="number"?e.expectedVersion:void 0})}}function Fe(e,t){if(!u(e)||!Array.isArray(e.models))throw new Error("AI Connection returned an invalid model discovery response");const n=e.models.map(a=>{if(!u(a)||typeof a.id!="string"||!a.id)return;const c=Array.isArray(a.capabilities)?a.capabilities.filter(f=>typeof f=="string"):void 0,d=Ve(a.modelType);return y({id:a.id,displayName:o(a.displayName),capabilities:c??(d==="embedding"?["embedding"]:void 0),modelType:d})}).filter(_);return{provider:t,credential:typeof e.credential=="string"?e.credential:"",models:n,observedAt:typeof e.observedAt=="string"?e.observedAt:new Date(0).toISOString(),source:typeof e.source=="string"?e.source:""}}function y(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Ve(e){return e==="chat"||e==="embedding"?e:void 0}function o(e){return typeof e=="string"?e:void 0}function $(e){if(typeof e=="string")try{const t=new URL(e);return t.protocol==="https:"||t.protocol==="http:"?t.href:void 0}catch{return}}function K(e){return e==="browserAssistedApiKey"||e==="deviceCodeOAuth"||e==="authorizationCodeOAuth"||e==="connectUnsupported"}function Je(e){return e==="pending"||e==="authorization_pending"||e==="slow_down"||e==="completed"||e==="expired"||e==="cancelled"||e==="unsupported"}function We(e){return e==="connected"||e==="disconnected"||e==="reauthRequired"}function u(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function _(e){return e!==void 0}function j(e){const t=new URL(e);if(t.protocol!=="https:"&&t.protocol!=="http:")throw new Error("Current Pod URL must use HTTP or HTTPS");return t.origin}function Ye({webId:e,podBaseUrl:t,authenticatedFetch:n}){const a=j(t),c=async(r,i,s,p={})=>{const l=await n(`${a}${r}`,{method:i,credentials:"omit",mode:"cors",headers:{accept:"application/json",...s?{"content-type":"application/json"}:{}},...s?{body:JSON.stringify(s)}:{}}),h=await F(l);if(!l.ok)throw new T(h,l.status,p);return h},d=r=>(be(r),`/api/ai/gateway/providers/${r}`),f=async(r,i,s,p)=>{const l=await c(`${d(r)}${i}`,s,p,{provider:r});return Ge(l,r)},m=async()=>{const r=await c("/v1/models","GET");return Array.isArray(r.data)?r.data.map(ne).filter(_):[]};return{webId:e,apiBase:a,getServiceAccess(){return c("/api/applets/service-access/ai-connections","GET")},async listProviders(){const r=await c("/api/ai/providers","GET");return Array.isArray(r.data)?we(r.data):[]},async listAuthorizationMethods(){const r=await n(`${a}/api/ai/connections/authorization-methods`,{method:"GET",credentials:"omit",mode:"cors",headers:{accept:"application/json"}});if(r.status===404)return[];const i=await F(r);if(!r.ok)throw new T(i,r.status);return u(i)&&Array.isArray(i.data)?i.data.map(Se).filter(_):[]},listModels:m,listGatewayModels:m,async listGatewayKeys(){const r=await c("/api/ai/gateway/keys","GET");return Array.isArray(r.data)?r.data.map(L).filter(_):[]},async createGatewayKey(r){const i=await c("/api/ai/gateway/keys","POST",y(r));if(typeof i.key!="string"||!i.key)throw new Error("Xpod did not return the new API Key");const s=L(i.record);if(!s)throw new Error("Xpod returned an invalid API Key record");return{plaintext:i.key,record:s}},async updateGatewayKey(r,i){const s=await c(`/api/ai/gateway/keys/${encodeURIComponent(r)}`,"PATCH",i),p=L(s.record);if(!p)throw new Error("Xpod returned an invalid API Key record");return p},async deleteGatewayKey(r){await c(`/api/ai/gateway/keys/${encodeURIComponent(r)}`,"DELETE")},async beginConnect(r,i,s){return await f(r,"/connect/begin","POST",y({mode:i,offeringId:s?.offeringId,authorizationMethodId:s?.authorizationMethodId}))},connectStatus(r,i){if(!i.attemptId)throw new Error("Connect attempt id is required");const s=new URLSearchParams({state:i.state??"",signature:i.signature??""});return i.mode&&s.set("mode",i.mode),f(r,`/connect/status/${encodeURIComponent(i.attemptId)}?${s}`,"GET")},completeApiKey(r,i,s,p,l){return f(r,"/connect/complete-api-key","POST",y({attemptId:i.attemptId,state:i.state,signature:i.signature,offeringId:i.offeringId,apiKey:s,accountLabel:p,baseUrl:l}))},pollDevice(r,i){return f(r,"/connect/poll","POST",y({mode:i.mode,attemptId:i.attemptId,state:i.state,signature:i.signature,offeringId:i.offeringId}))},cancelConnect(r,i){return f(r,"/connect/cancel","POST",y({mode:i.mode,attemptId:i.attemptId,state:i.state,signature:i.signature,offeringId:i.offeringId}))},refreshOAuthCredential(r,i,s,p,l,h){return f(r,"/connect/refresh","POST",{credentialId:i,refreshToken:s,expectedVersion:p,...l?{offeringId:l}:{},...h?{mode:h}:{}})},async disconnect(r,i){const s=i?`?${new URLSearchParams({credentialId:i})}`:"",p=await c(`${d(r)}/connect${s}`,"DELETE");return je(p.record)},async createApiKeyCredential(r,i){const s=await c(`/api/ai/providers/${r}/credentials/api-key`,"POST",y({...i}),{provider:r}),p=C(s.credential);if(!p)throw new Error("AI Connection returned an invalid Provider credential");return p},async createLocalCredential(r,i){const s=await c(`/api/ai/providers/${r}/credentials/local`,"POST",y(i),{provider:r}),p=C(s.credential);if(!p)throw new Error("AI Connection returned an invalid Provider credential");return p},async updateProviderCredential(r,i,s){const p=await c(`/api/ai/providers/${r}/credentials/${encodeURIComponent(i)}`,"PATCH",y({...s}),{provider:r}),l=C(p.credential);if(!l)throw new Error("AI Connection returned an invalid Provider credential");return l},async deleteProviderCredential(r,i){const s=await c(`/api/ai/providers/${r}/credentials/${encodeURIComponent(i)}`,"DELETE",void 0,{provider:r});return C(s.credential)},async testProviderCredential(r,i){const s=await c(`/api/ai/providers/${r}/credentials/test`,"POST",y({...i}),{provider:r});return oe(s.result)},quota(r,i=!1,s){const p=!i&&s?.credentialIri?`?credentialIri=${encodeURIComponent(s.credentialIri)}${s.offeringId?`&offeringId=${encodeURIComponent(s.offeringId)}`:""}`:"";return c(`${d(r)}/quota/${i?"refresh":"status"}${p}`,i?"POST":"GET",i?y({offeringId:s?.offeringId,credentialId:s?.credentialId,credentialIri:s?.credentialIri}):void 0,{provider:r})},quotaFromSecret(r,i){return c(`${d(r)}/quota/refresh`,"POST",y(i),{provider:r})},async discoverModels(r,i){const s=await c(`${d(r)}/models/refresh`,"POST",y({...i}),{provider:r,authMode:i?.authMode});return Fe(s,r)},async saveProviderModel(r,i){const s=await c(d(r)+"/models","POST",y({id:i.id,displayName:i.displayName,inputModalities:i.inputModalities,outputModalities:i.outputModalities,capabilities:i.capabilities}),{provider:r});return V(s.data)},async deleteProviderModel(r,i){const s=await c(`${d(r)}/models/${encodeURIComponent(i)}`,"DELETE",void 0,{provider:r});return V(s.data)}}}const pe="AI Connection request failed. Please try again.";function S(e){return typeof e=="object"&&e!==null}const le="订阅登录态自动刷新失败,请稍后重试。",ue="订阅登录态已失效,请在原客户端重新登录后重读,或使用设备码登录。",fe="订阅登录态不可用,请重读登录态或重新登录后再同步模型。",ye=new Set([fe,le,ue,"密钥不可用。请检查密钥是否填写正确,或换一个密钥后重试。","模型服务地址不正确。请检查服务地址后重试。","请求太频繁。请稍等一会儿再试。","模型服务暂时没有响应。请稍后重试。","模型列表获取失败。请检查密钥、服务地址或网络后重试。"]);function Y(e){if(e.startsWith("provider_models_response_error:"))return G(e.slice(31))??"模型列表获取失败。请检查密钥、服务地址或网络后重试。";const t=R(e);if(t)return t;const n=e.split(":",1)[0]?.trim(),a=n?R(n):void 0;return a||(e==="AI Connection service identity is unavailable"||ye.has(e)||et(e)?e:e.startsWith("invalid_")?"AI Connection returned an invalid response.":pe)}function Ze(e){return e instanceof T?Xe(e.payload,e.status,{provider:e.provider,authMode:e.authMode}):e instanceof Error?Y(e.message):Y(String(e))}function Xe(e,t,n={}){const a=te(e);if(a==="provider_models_response_error"){const f=S(e)&&typeof e.message=="string"?G(e.message):void 0;return f||"模型列表获取失败。请检查密钥、服务地址或网络后重试。"}if(a==="provider_models_fetch_failed"){const f=S(e)&&typeof e.providerStatus=="number"?e.providerStatus:void 0,m=S(e)&&typeof e.providerMessage=="string"?e.providerMessage.trim():void 0;return ve(Qe(f,n.authMode),m)}const c=a?R(a,n.provider):void 0;if(c)return c;const d=S(e)&&typeof e.error=="string"?e.error:void 0;if(d){const f=R(d,n.provider);if(f)return f;if(d==="AI Connection service identity is unavailable")return d;if(d==="Provider credential not found for current identity")return"当前身份没有可用的额度凭证。";if(d==="Provider quota adapter not found"||d==="Provider quota lookup failed")return"该接入方式不支持查询官方额度。"}return t===401?"Please sign in again to continue.":t===403?"AI Connection permission was denied.":t===404&&n.provider?`${D(n.provider)} connection is not configured.`:t===429?"AI Connection is rate limited. Please try again later.":t===503?"AI Connection service is unavailable.":pe}function R(e,t){switch(e.trim().toLowerCase().replace(/-/g,"_")){case"not_configured":case"notconfigured":return t?`${D(t)} connection is not configured.`:"AI provider connection is not configured.";case"unsupported":return t?`${D(t)} does not support this operation.`:"This AI Connection operation is not supported.";case"service_identity_unavailable":return"AI Connection service identity is unavailable";case"unauthorized":return"Please sign in again to continue.";case"forbidden":case"permission_denied":return"AI Connection permission was denied.";case"rate_limited":return"AI Connection is rate limited. Please try again later.";case"service_unavailable":return"AI Connection service is unavailable.";case"unsafe_provider_base_url":return"该服务地址指向 Xpod 不允许访问的网络,请改用公网 HTTPS 地址。";case"invalid_proxy_url":return"代理地址必须是无账号密码的 HTTP 或 HTTPS 地址。";case"oauth_refresh_failed":case"oauth_refresh_unavailable":case"local_session_refresh_failed":return le;case"oauth_session_reauth_required":case"oauth_refresh_token_required":case"local_session_reauth_required":case"local_session_missing_refresh_token":return ue;case"models_persistence_failed":return"模型已获取,但保存到 Pod 失败。请重试同步模型。";case"quota_credential_not_found":return"当前身份没有可用的额度凭证。";case"credential_secret_unavailable":return"当前凭证密钥不可用,请重新保存后再查询额度。";case"gateway_api_key_plaintext_unavailable":return"Pod 中未找到此 API Key 的原文,无法复制配置。请创建新的 Key,更新客户端后再删除旧 Key。";case"quota_adapter_not_found":return"该接入方式不支持查询官方额度。";default:return}}function Qe(e,t){return e===401||e===403?t==="deviceCodeOAuth"?fe:"密钥不可用。请检查密钥是否填写正确,或换一个密钥后重试。":e===404?"模型服务地址不正确。请检查服务地址后重试。":e===429?"请求太频繁。请稍等一会儿再试。":e!==void 0&&e>=500?"模型服务暂时没有响应。请稍后重试。":"模型列表获取失败。请检查密钥、服务地址或网络后重试。"}function ve(e,t){const n=t?G(t):void 0;return n?`${e} 上游返回:${n}`:e}function et(e){const n=e.indexOf(" 上游返回:");return n<=0?!1:ye.has(e.slice(0,n))}function G(e){return e.replace(/[\u0000-\u001f\u007f]/gu," ").replace(/\bBearer\s+[^\s,;]+/giu,"Bearer [REDACTED]").replace(/(?:sk|id)[._-][A-Za-z0-9._-]{8,}/gu,"[REDACTED]").replace(/https?:\/\/[^\s]+/giu,"[URL]").trim().slice(0,240)||void 0}function D(e){switch(e){case"openai":return"OpenAI";case"anthropic":return"Anthropic";case"kimi":return"Kimi";case"bailian":return"Bailian";case"deepseek":return"DeepSeek";case"zhipu":return"Zhipu";case"ollama":return"Ollama";case"custom":return"Custom"}}function tt(e){const t={...e};for(const[n,a]of Object.entries(e))typeof a=="function"&&(t[n]=async(...c)=>{try{return await a.apply(e,c)}catch(d){throw d instanceof T&&(d.message=Ze(d)),d}});return t}const he=[{id:"api-platform",label:"API Platform",kind:"api-platform",lifecycle:"active",authModes:["apiKey"]}],nt={id:"api-key",authMode:"apiKey",lifecycle:"active"},it={id:"browser-login",authMode:"apiKey",connectMode:"browserAssistedApiKey",lifecycle:"active"},w=[nt,it],rt=[{id:"openai-compatible",label:"OpenAI Compatible",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],runtimeProviderIds:["custom"],consoleUrl:"https://undefineds.co",subscriptionUrl:"https://undefineds.co",endpoints:[{protocol:"chatCompletions",baseUrl:"https://example.invalid/v1"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:"unsupported",url:"https://undefineds.co"}},{id:"anthropic-compatible",label:"Anthropic Compatible",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],runtimeProviderIds:["custom"],consoleUrl:"https://undefineds.co",subscriptionUrl:"https://undefineds.co",endpoints:[{protocol:"anthropic",baseUrl:"https://example.invalid/v1"}],modelDiscovery:{strategy:"anthropic",path:"/models",endpointProtocol:"anthropic"},quota:{strategy:"unsupported",url:"https://undefineds.co"}}],N="https://www.kimi.com/code",ot="https://www.kimi.com/user/agreement",at="https://api.kimi.com/coding/v1",st="https://api.kimi.com/coding/",ct="https://platform.moonshot.cn/console/api-keys",Z="https://platform.moonshot.cn/console/account",dt="https://platform.moonshot.cn/docs/intro",pt="https://api.moonshot.ai/v1",M="https://bailian.console.aliyun.com/",E="https://help.aliyun.com/zh/model-studio/",X="https://open.bigmodel.cn/usercenter/apikeys",Q="https://open.bigmodel.cn/",lt="https://open.bigmodel.cn/api/paas/v4",ut="https://open.bigmodel.cn/api/coding/paas/v4",me={openai:[{id:"official-subscription",label:"OpenAI Subscription",kind:"oauth-subscription",lifecycle:"unavailable",authModes:["oauth","local"],productLabel:"OpenAI",runtimeProviderIds:["openai"],credentialPrefixHints:[],consoleUrl:"https://chatgpt.com/codex",subscriptionUrl:"https://chatgpt.com/codex",endpoints:[{protocol:"responses",baseUrl:"https://chatgpt.com/backend-api/codex"}],modelDiscovery:{strategy:"unsupported",path:"/models",endpointProtocol:"responses"},quota:{strategy:"subscription",url:"https://chatgpt.com/codex"},usagePolicyUrl:"https://openai.com/policies/usage-policies/",region:"global"},{id:"api-platform",label:"API Platform",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],authorizationMethods:w,productLabel:"OpenAI",runtimeProviderIds:["openai"],credentialPrefixHints:["sk-"],consoleUrl:"https://platform.openai.com/api-keys",subscriptionUrl:"https://platform.openai.com/settings/organization/billing/overview",endpoints:[{protocol:"responses",baseUrl:"https://api.openai.com/v1"},{protocol:"chatCompletions",baseUrl:"https://api.openai.com/v1"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"responses"},quota:{strategy:"providerApi",url:"https://platform.openai.com/usage"},usagePolicyUrl:"https://openai.com/policies/usage-policies/",region:"global"}],anthropic:[{id:"official-subscription",label:"Claude Code Subscription",kind:"oauth-subscription",lifecycle:"unavailable",authModes:["oauth"],productLabel:"Anthropic",runtimeProviderIds:["anthropic"],credentialPrefixHints:[],consoleUrl:"https://claude.ai/",subscriptionUrl:"https://claude.ai/settings/billing",endpoints:[],modelDiscovery:{strategy:"unsupported",path:"/models",endpointProtocol:"anthropic"},quota:{strategy:"subscription",url:"https://claude.ai/settings/usage"},usagePolicyUrl:"https://www.anthropic.com/legal/aup",region:"global"},{id:"api-platform",label:"API Platform",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],authorizationMethods:w,productLabel:"Anthropic",runtimeProviderIds:["anthropic"],credentialPrefixHints:["sk-ant-"],consoleUrl:"https://console.anthropic.com/settings/keys",subscriptionUrl:"https://console.anthropic.com/settings/plans",endpoints:[{protocol:"anthropic",baseUrl:"https://api.anthropic.com/v1"}],modelDiscovery:{strategy:"anthropic",path:"/models",endpointProtocol:"anthropic"},quota:{strategy:"console",url:"https://console.anthropic.com/settings/limits"},usagePolicyUrl:"https://www.anthropic.com/legal/aup",region:"global"}],kimi:[v({id:"subscription-key",label:"Token Plan",kind:"token-plan",authModes:["apiKey"],productLabel:"Kimi Coding",runtimeProviderIds:["kimi"],credentialPrefixHints:["sk-kimi-"],baseUrl:at,anthropicBaseUrl:st,quotaStrategy:"subscription",quotaUrl:N,consoleUrl:N,subscriptionUrl:N,usagePolicyUrl:ot,supportsDeveloperMessages:!1}),v({id:"api-platform",label:"API Platform",kind:"api-platform",authModes:["apiKey"],productLabel:"Moonshot AI",runtimeProviderIds:["kimi"],credentialPrefixHints:["sk-"],baseUrl:pt,quotaStrategy:"console",quotaUrl:Z,consoleUrl:ct,subscriptionUrl:Z,usagePolicyUrl:dt})],bailian:[O({id:"pay-as-you-go",label:"Pay as You Go",kind:"api-platform",runtimeProviderIds:["bailian"],credentialPrefixHints:["sk-"],region:"cn",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",anthropicBaseUrl:"https://dashscope.aliyuncs.com/apps/anthropic",quotaStrategy:"console",consoleUrl:M,usagePolicyUrl:E}),O({id:"token-plan",label:"Token Plan Personal",kind:"token-plan",runtimeProviderIds:["bailian-token-plan"],credentialPrefixHints:["sk-"],region:"cn-beijing",baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",anthropicBaseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic",quotaStrategy:"subscription",consoleUrl:M,usagePolicyUrl:E}),O({id:"token-plan-team",label:"Token Plan Team",kind:"token-plan",runtimeProviderIds:["bailian-token-plan"],credentialPrefixHints:["sk-"],region:"cn-beijing",baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",anthropicBaseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic",quotaStrategy:"subscription",consoleUrl:M,usagePolicyUrl:E}),O({id:"coding-plan",label:"Coding Plan Pro",kind:"token-plan",runtimeProviderIds:["bailian-coding-plan"],credentialPrefixHints:["sk-sp-"],region:"cn",baseUrl:"https://coding.dashscope.aliyuncs.com/v1",anthropicBaseUrl:"https://coding.dashscope.aliyuncs.com/apps/anthropic",quotaStrategy:"subscription",consoleUrl:M,usagePolicyUrl:E})],deepseek:[{id:"api-platform",label:"API Platform",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],productLabel:"DeepSeek",runtimeProviderIds:["deepseek"],credentialPrefixHints:["sk-"],consoleUrl:"https://platform.deepseek.com/api_keys",subscriptionUrl:"https://platform.deepseek.com/usage",endpoints:[{protocol:"chatCompletions",baseUrl:"https://api.deepseek.com/v1"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:"console",url:"https://platform.deepseek.com/usage"},usagePolicyUrl:"https://cdn.deepseek.com/policies/en-US/deepseek-open-platform-terms-of-use.html",region:"global"}],ollama:[{id:"local",label:"Local Ollama",kind:"local",lifecycle:"active",authModes:["local"],productLabel:"Ollama",runtimeProviderIds:["ollama"],credentialPrefixHints:[],consoleUrl:"https://ollama.com",subscriptionUrl:"https://ollama.com",endpoints:[{protocol:"chatCompletions",baseUrl:"http://localhost:11434/v1"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:"unsupported",url:"https://ollama.com"},usagePolicyUrl:"https://ollama.com",region:"local"}],zhipu:[{id:"api-platform",label:"API Platform",kind:"api-platform",lifecycle:"active",authModes:["apiKey"],authorizationMethods:w,productLabel:"智谱 AI",runtimeProviderIds:["zhipu"],credentialPrefixHints:["id."],consoleUrl:X,subscriptionUrl:"https://open.bigmodel.cn/finance-center/expense-manage",endpoints:[{protocol:"chatCompletions",baseUrl:lt,region:"cn"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:"console",url:"https://open.bigmodel.cn/finance-center/expense-manage"},usagePolicyUrl:Q,region:"cn"},{id:"coding-plan",label:"GLM Coding Plan",kind:"token-plan",lifecycle:"active",authModes:["apiKey"],authorizationMethods:w,productLabel:"智谱 AI",runtimeProviderIds:["zhipu"],credentialPrefixHints:["id."],consoleUrl:X,subscriptionUrl:"https://bigmodel.cn/glm-coding",endpoints:[{protocol:"chatCompletions",baseUrl:ut,region:"cn"}],modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:"subscription",url:"https://bigmodel.cn/glm-coding"},usagePolicyUrl:Q,region:"cn"}]};function v(e){return{id:e.id,label:e.label,kind:e.kind,lifecycle:"active",authModes:e.authModes,authorizationMethods:w,productLabel:e.productLabel,runtimeProviderIds:e.runtimeProviderIds,credentialPrefixHints:e.credentialPrefixHints,consoleUrl:e.consoleUrl,subscriptionUrl:e.subscriptionUrl,endpoints:ge(e.baseUrl,e.anthropicBaseUrl,"cn",e.supportsDeveloperMessages),modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:e.quotaStrategy,url:e.quotaUrl},usagePolicyUrl:e.usagePolicyUrl,region:"cn"}}function O(e){return{id:e.id,label:e.label,lifecycle:"active",productLabel:"Alibaba Bailian",kind:e.kind,authModes:["apiKey"],authorizationMethods:w,runtimeProviderIds:e.runtimeProviderIds,credentialPrefixHints:e.credentialPrefixHints,consoleUrl:e.consoleUrl,subscriptionUrl:e.consoleUrl,endpoints:ge(e.baseUrl,e.anthropicBaseUrl,e.region),modelDiscovery:{strategy:"openaiCompatible",path:"/models",endpointProtocol:"chatCompletions"},quota:{strategy:e.quotaStrategy,url:e.consoleUrl},usagePolicyUrl:e.usagePolicyUrl,region:e.region}}function ge(e,t,n,a){return[{protocol:"chatCompletions",baseUrl:e,region:n,...a===void 0?{}:{supportsDeveloperMessages:a}},...t?[{protocol:"anthropic",baseUrl:t,region:n}]:[]]}function ft(e,t=!1){return(me[e]??he).map(n=>e==="openai"&&n.id==="official-subscription"&&t?{...n,lifecycle:"active",authModes:Array.from(new Set([...n.authModes??[],"local"])),authorizationMethods:[{id:"device-code",authMode:"deviceCode",connectMode:"deviceCodeOAuth",lifecycle:"active"},{id:"local-session-import",authMode:"local",lifecycle:"active"}]}:{...n})}const Rt=H.flatMap(e=>[e,...yt(e).map(t=>`${e}-${t.id}`)]);function yt(e){return e==="custom"?rt:me[e]??he}function xt(e,t){return e==="anthropic"||t==="anthropic-compatible"?"anthropic":"openai"}function ht(e,t){return e==="openai"&&(t==="local"||t==="oauth"||t==="deviceCode")?"official-subscription":e==="kimi"&&(t==="oauth"||t==="deviceCode")?"subscription-key":e==="bailian"?"pay-as-you-go":e==="ollama"?"local":e==="custom"?"openai-compatible":"api-platform"}function Lt(e,t){const n=ft(e).find(c=>c.id===(t??ht(e,"apiKey")));if(!n)return;const a=n.modelDiscovery?.endpointProtocol;return n.endpoints?.find(c=>c.protocol===a)?.baseUrl??n.endpoints?.[0]?.baseUrl}function qt(e,t){const n=t.trim().toLowerCase();if(e==="bailian"){if(n==="token-plan-personal")return"token-plan";if(n==="coding-plan-pro")return"coding-plan"}return n}function $t(e){return{offeringId:e.offeringId,priority:e.priority??100,enabled:e.enabled??!0,health:e.health??"unknown",...e.baseUrl?{baseUrl:e.baseUrl}:{}}}const mt=3e4;function Nt({webId:e,podUrl:t,authenticatedFetch:n}){return tt(Ye({webId:e,podBaseUrl:t,authenticatedFetch:gt(n)}))}function gt(e){return(async(t,n)=>z(await e(t,n)))}function bt({podUrl:e,authenticatedFetch:t,invocationFetch:n=t,now:a=()=>new Date,invocationSelector:c=wt}){const d=j(e);let f,m;const r=async(l,h)=>{const b=await t(l,h);return f=await Pt(b.clone(),c),b},i=async()=>{if(Ct(f,a()))return f;if(m)return m;m=s();try{return await m}finally{m=void 0}},s=async()=>{if(!(await r(`${d}/api/applets/service-access/ai-connections`,{method:"GET",credentials:"include",headers:{accept:"application/json"}})).ok)throw new Error("AI Connection request failed. Please try again.");const h=f;if(!h?.token)throw new Error("AI Connection request failed. Please try again.");return h},p=async(l,h)=>{const b=await i(),k=_t(b);if(!k)throw new Error("AI Connection request failed. Please try again.");const B=new Headers(h?.headers);return B.set("Authorization",`Bearer ${k}`),n(l,{...h,credentials:"omit",headers:B})};return(async(l,h)=>{if(It(l,d))return r(l,h);if(!At(l,d))return t(l,h);const b=await p(l,h);if(b.status!==401)return z(b);await b.arrayBuffer(),f=void 0;const k=await p(l,h);return z(k)})}function Dt({podUrl:e,controlPlaneOrigin:t,authenticatedFetch:n,invocationFetch:a,now:c}){const d=j(e),f=a??n,r=bt({podUrl:e,authenticatedFetch:n,invocationFetch:(i,s)=>{const p=new URL(i instanceof Request?i.url:String(i),d);if(t&&p.origin===d&&p.pathname.startsWith("/api/ai/client-configuration/")){const l=new URL(`${p.pathname}${p.search}`,t);return f(i instanceof Request?new Request(l,i):l.href,s)}return f(i,s)},now:c,invocationSelector:Ut});return{inspect:async i=>{const s=await r(A(d,i),{method:"GET",credentials:"omit",headers:{accept:"application/json"}});return s.status===403||s.status===404||s.status===503?(await s.arrayBuffer(),ee()):P(s)},plan:async i=>P(await r(`${A(d,i.client)}/plan`,{method:"POST",credentials:"omit",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({endpoint:t?new URL(t).origin:i.endpoint,...i.activeModels!==void 0?{activeModels:i.activeModels}:{}})})),apply:async i=>P(await r(`${A(d,i.client)}/apply`,{method:"POST",credentials:"omit",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({planId:i.planId,apiKey:i.apiKey,confirmation:i.confirmation})})),verify:async i=>P(await r(`${A(d,i.client)}/verify`,{method:"POST",credentials:"omit",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({planId:i.planId})})),launch:async i=>P(await r(`${A(d,i)}/launch`,{method:"POST",credentials:"omit",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({})})),restore:async i=>{const s=await r(`${A(d,i)}/restore`,{method:"POST",credentials:"omit",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({})});return s.status===403||s.status===404||s.status===503?(await s.arrayBuffer(),ee()):P(s)}}}function It(e,t){try{const n=new URL(String(e),t),a=new URL(t);return n.origin===a.origin&&n.pathname==="/api/applets/service-access/ai-connections"}catch{return!1}}function At(e,t){try{const n=new URL(String(e),t),a=new URL(t);return n.origin===a.origin&&(n.pathname.startsWith("/api/ai/")||n.pathname.startsWith("/v1/"))}catch{return!1}}async function Pt(e,t){if(!(!e.ok||!e.headers.get("content-type")?.includes("application/json")))try{const n=await e.json();return kt(t(n))}catch{return}}function wt(e){return e.invocation}function Ut(e){const t=e.aiClientConfiguration;return x(t)?t.invocation:void 0}function Ct(e,t){if(!e?.token)return!1;if(!e.expiresAt)return!0;const n=Date.parse(e.expiresAt);return Number.isFinite(n)&&n-t.getTime()>mt}function _t(e){return e?.token}function kt(e){if(!x(e))return;const t=["gateway","Key"].join("");return{token:typeof e.token=="string"?e.token:typeof e.apiKey=="string"?e.apiKey:typeof e[t]=="string"?e[t]:void 0,baseUrl:typeof e.baseUrl=="string"?e.baseUrl:void 0,expiresAt:typeof e.expiresAt=="string"?e.expiresAt:void 0}}async function z(e){return e.ok?e:e.headers.get("content-type")?.includes("application/json")?Mt(e):(await e.arrayBuffer(),new Response(JSON.stringify({error:"internal_error"}),{status:e.status,statusText:e.statusText,headers:{"content-type":"application/json"}}))}function A(e,t){return`${e}/api/ai/client-configuration/${encodeURIComponent(t)}`}async function P(e){if(!e.ok)throw await St(e);if(!e.headers.get("content-type")?.includes("application/json"))throw await e.arrayBuffer(),new Error("AI client configuration request failed. Please try again.");return await e.json()}async function St(e){let t;try{t=e.headers.get("content-type")?.includes("application/json")?await e.json():void 0}catch{t=void 0}if(x(t)){const n=typeof t.code=="string"?t.code:typeof t.error=="string"?t.error:void 0,a=typeof t.message=="string"?t.message:"AI client configuration request failed. Please try again.",c=new Error(a);return c.code=n,c.status=e.status,c.details=t.details,c}return await e.arrayBuffer().catch(()=>{}),new Error("AI client configuration request failed. Please try again.")}function ee(){return{status:"unavailable",message:"Host does not support local client configuration. Use the manual setup instructions for your client."}}async function Mt(e){let t;try{t=await e.clone().json()}catch{return e}const n=Ot(t);return n?new Response(JSON.stringify({code:n}),{status:e.status,statusText:e.statusText,headers:{"content-type":"application/json"}}):Et(t)?new Response(JSON.stringify({code:t.error.code,error:t.error.message}),{status:e.status,statusText:e.statusText,headers:{"content-type":"application/json"}}):e}function Et(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e.error;return!!(t&&typeof t=="object"&&!Array.isArray(t)&&typeof t.code=="string"&&typeof t.message=="string"&&typeof t.status=="number")}function Ot(e){if(!(!x(e)||typeof e.error!="string")&&e.error==="Gateway API Key plaintext is not available")return"gateway_api_key_plaintext_unavailable"}function x(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}export{H as A,rt as C,Nt as a,xt as b,$t as c,ht as d,Rt as e,Ye as f,T as g,Ze as h,Dt as i,Tt as n,Lt as o,ft as p,qt as s};