@undefineds.co/xpod 0.3.57 → 0.3.61

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 (779) hide show
  1. package/README.md +3 -0
  2. package/config/cli.json +88 -0
  3. package/config/cloud.json +32 -1
  4. package/config/components-ignore.json +3 -0
  5. package/config/extensions.local.initializer.json +44 -0
  6. package/config/resolver.json +86 -0
  7. package/config/xpod.base.json +4 -0
  8. package/dist/agents/AgentExecutorFactory.d.ts +3 -3
  9. package/dist/agents/AgentExecutorFactory.js +28 -15
  10. package/dist/agents/AgentExecutorFactory.js.map +1 -1
  11. package/dist/agents/BaseAgentExecutor.d.ts +2 -1
  12. package/dist/agents/BaseAgentExecutor.js +1 -0
  13. package/dist/agents/BaseAgentExecutor.js.map +1 -1
  14. package/dist/agents/ClaudeExecutor.d.ts +3 -1
  15. package/dist/agents/ClaudeExecutor.js +18 -12
  16. package/dist/agents/ClaudeExecutor.js.map +1 -1
  17. package/dist/agents/config/resolve.js +0 -21
  18. package/dist/agents/config/resolve.js.map +1 -1
  19. package/dist/agents/config/types.d.ts +2 -7
  20. package/dist/agents/config/types.js +2 -1
  21. package/dist/agents/config/types.js.map +1 -1
  22. package/dist/agents/types.d.ts +18 -0
  23. package/dist/agents/types.js.map +1 -1
  24. package/dist/ai/schema/types.d.ts +2 -1
  25. package/dist/ai/schema/types.js +1 -0
  26. package/dist/ai/schema/types.js.map +1 -1
  27. package/dist/ai/service/CredentialReader.d.ts +3 -1
  28. package/dist/ai/service/CredentialReader.js.map +1 -1
  29. package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
  30. package/dist/ai/service/CredentialReaderImpl.js +24 -2
  31. package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
  32. package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
  33. package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
  34. package/dist/ai/service/ProviderRegistry.d.ts +4 -0
  35. package/dist/ai/service/ProviderRegistry.js.map +1 -1
  36. package/dist/ai/service/ProviderRegistry.jsonld +4 -0
  37. package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
  38. package/dist/ai/service/ProviderRegistryImpl.js +26 -4
  39. package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
  40. package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
  41. package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
  42. package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
  43. package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
  44. package/dist/ai/service/index.d.ts +1 -0
  45. package/dist/ai/service/index.js +1 -0
  46. package/dist/ai/service/index.js.map +1 -1
  47. package/dist/ai/service/types.d.ts +1 -0
  48. package/dist/ai/service/types.js.map +1 -1
  49. package/dist/api/ApiServer.js +17 -2
  50. package/dist/api/ApiServer.js.map +1 -1
  51. package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
  52. package/dist/api/ai-gateway/AiGatewayService.js +527 -0
  53. package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
  54. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
  55. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
  56. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
  57. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
  58. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
  59. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
  60. package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
  61. package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
  62. package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
  63. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
  64. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
  65. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
  66. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
  67. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
  68. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
  69. package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
  70. package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
  71. package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
  72. package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
  73. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
  74. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
  75. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
  76. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
  77. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
  78. package/dist/api/ai-gateway/connect/index.d.ts +367 -0
  79. package/dist/api/ai-gateway/connect/index.js +1061 -0
  80. package/dist/api/ai-gateway/connect/index.js.map +1 -0
  81. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
  82. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
  83. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
  84. package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
  85. package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
  86. package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
  87. package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
  88. package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
  89. package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
  90. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
  91. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
  92. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
  93. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
  94. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
  95. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
  96. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
  97. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
  98. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
  99. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
  100. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
  101. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
  102. package/dist/api/ai-gateway/errors.d.ts +21 -0
  103. package/dist/api/ai-gateway/errors.js +50 -0
  104. package/dist/api/ai-gateway/errors.js.map +1 -0
  105. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
  106. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
  107. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
  108. package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
  109. package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
  110. package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
  111. package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
  112. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
  113. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
  114. package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
  115. package/dist/api/ai-gateway/protocol/index.js +10 -0
  116. package/dist/api/ai-gateway/protocol/index.js.map +1 -0
  117. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
  118. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
  119. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
  120. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
  121. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
  122. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
  123. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
  124. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
  125. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
  126. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
  127. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
  128. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
  129. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
  130. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
  131. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
  132. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
  133. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
  134. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
  135. package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
  136. package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
  137. package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
  138. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
  139. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
  140. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
  141. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
  142. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
  143. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
  144. package/dist/api/ai-gateway/providers/index.d.ts +9 -0
  145. package/dist/api/ai-gateway/providers/index.js +26 -0
  146. package/dist/api/ai-gateway/providers/index.js.map +1 -0
  147. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
  148. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
  149. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
  150. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
  151. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
  152. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
  153. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
  154. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
  155. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
  156. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
  157. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
  158. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
  159. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
  160. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
  161. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
  162. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
  163. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
  164. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
  165. package/dist/api/ai-gateway/quota/index.d.ts +6 -0
  166. package/dist/api/ai-gateway/quota/index.js +23 -0
  167. package/dist/api/ai-gateway/quota/index.js.map +1 -0
  168. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
  169. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
  170. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
  171. package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
  172. package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
  173. package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
  174. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
  175. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
  176. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
  177. package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
  178. package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
  179. package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
  180. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
  181. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
  182. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
  183. package/dist/api/ai-gateway/types.d.ts +112 -0
  184. package/dist/api/ai-gateway/types.js +305 -0
  185. package/dist/api/ai-gateway/types.js.map +1 -0
  186. package/dist/api/auth/AuthContext.d.ts +18 -3
  187. package/dist/api/auth/AuthContext.js +13 -2
  188. package/dist/api/auth/AuthContext.js.map +1 -1
  189. package/dist/api/auth/Authenticator.d.ts +3 -0
  190. package/dist/api/auth/Authenticator.js.map +1 -1
  191. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
  192. package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
  193. package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
  194. package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
  195. package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
  196. package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
  197. package/dist/api/auth/TokenIdentity.d.ts +6 -0
  198. package/dist/api/auth/TokenIdentity.js +31 -0
  199. package/dist/api/auth/TokenIdentity.js.map +1 -0
  200. package/dist/api/chatkit/ai-provider.d.ts +9 -23
  201. package/dist/api/chatkit/ai-provider.js +30 -153
  202. package/dist/api/chatkit/ai-provider.js.map +1 -1
  203. package/dist/api/chatkit/default-agent.d.ts +24 -15
  204. package/dist/api/chatkit/default-agent.js +24 -83
  205. package/dist/api/chatkit/default-agent.js.map +1 -1
  206. package/dist/api/chatkit/index.d.ts +2 -1
  207. package/dist/api/chatkit/index.js +3 -1
  208. package/dist/api/chatkit/index.js.map +1 -1
  209. package/dist/api/chatkit/pod-store.d.ts +13 -1
  210. package/dist/api/chatkit/pod-store.js +127 -7
  211. package/dist/api/chatkit/pod-store.js.map +1 -1
  212. package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
  213. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
  214. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
  215. package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
  216. package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
  217. package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
  218. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
  219. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
  220. package/dist/api/chatkit/service.d.ts +8 -1
  221. package/dist/api/chatkit/service.js +46 -5
  222. package/dist/api/chatkit/service.js.map +1 -1
  223. package/dist/api/chatkit/store.d.ts +23 -1
  224. package/dist/api/chatkit/store.js +56 -0
  225. package/dist/api/chatkit/store.js.map +1 -1
  226. package/dist/api/chatkit/types.d.ts +1 -0
  227. package/dist/api/chatkit/types.js.map +1 -1
  228. package/dist/api/container/common.js +286 -13
  229. package/dist/api/container/common.js.map +1 -1
  230. package/dist/api/container/index.js +126 -6
  231. package/dist/api/container/index.js.map +1 -1
  232. package/dist/api/container/local.js +50 -6
  233. package/dist/api/container/local.js.map +1 -1
  234. package/dist/api/container/rdf.d.ts +15 -0
  235. package/dist/api/container/rdf.js +90 -0
  236. package/dist/api/container/rdf.js.map +1 -0
  237. package/dist/api/container/routes.js +151 -11
  238. package/dist/api/container/routes.js.map +1 -1
  239. package/dist/api/container/types.d.ts +96 -0
  240. package/dist/api/container/types.js.map +1 -1
  241. package/dist/api/handlers/AdminHandler.d.ts +25 -2
  242. package/dist/api/handlers/AdminHandler.js +60 -10
  243. package/dist/api/handlers/AdminHandler.js.map +1 -1
  244. package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
  245. package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
  246. package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
  247. package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
  248. package/dist/api/handlers/AiGatewayHandler.js +231 -0
  249. package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
  250. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
  251. package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
  252. package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
  253. package/dist/api/handlers/ChatHandler.d.ts +11 -12
  254. package/dist/api/handlers/ChatHandler.js +12 -219
  255. package/dist/api/handlers/ChatHandler.js.map +1 -1
  256. package/dist/api/handlers/DashboardHandler.js +22 -116
  257. package/dist/api/handlers/DashboardHandler.js.map +1 -1
  258. package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
  259. package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
  260. package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
  261. package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
  262. package/dist/api/handlers/PodSettingsHandler.js +162 -0
  263. package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
  264. package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
  265. package/dist/api/handlers/ProvisionHandler.js +22 -87
  266. package/dist/api/handlers/ProvisionHandler.js.map +1 -1
  267. package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
  268. package/dist/api/handlers/RdfStatsHandler.js +85 -0
  269. package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
  270. package/dist/api/handlers/SettingsHandler.d.ts +5 -0
  271. package/dist/api/handlers/SettingsHandler.js +13 -0
  272. package/dist/api/handlers/SettingsHandler.js.map +1 -0
  273. package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
  274. package/dist/api/handlers/StaticSpaHandler.js +102 -0
  275. package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
  276. package/dist/api/handlers/index.d.ts +1 -0
  277. package/dist/api/handlers/index.js +1 -0
  278. package/dist/api/handlers/index.js.map +1 -1
  279. package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
  280. package/dist/api/http/readBoundedJsonBody.js +58 -0
  281. package/dist/api/http/readBoundedJsonBody.js.map +1 -0
  282. package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
  283. package/dist/api/middleware/AuthMiddleware.js +33 -4
  284. package/dist/api/middleware/AuthMiddleware.js.map +1 -1
  285. package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
  286. package/dist/api/runs/AgentRuntimeTypes.js +61 -0
  287. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
  288. package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
  289. package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
  290. package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
  291. package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
  292. package/dist/api/runs/ManagedRunWorker.js +39 -8
  293. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  294. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
  295. package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
  296. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  297. package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
  298. package/dist/api/runs/RdfRunContextRetriever.js +277 -0
  299. package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
  300. package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
  301. package/dist/api/runs/RunExecutionBackend.js.map +1 -1
  302. package/dist/api/runs/RunStateCenter.d.ts +18 -3
  303. package/dist/api/runs/RunStateCenter.js +85 -24
  304. package/dist/api/runs/RunStateCenter.js.map +1 -1
  305. package/dist/api/runtime.js +163 -3
  306. package/dist/api/runtime.js.map +1 -1
  307. package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
  308. package/dist/api/service/AiClientConfigurationService.js +379 -0
  309. package/dist/api/service/AiClientConfigurationService.js.map +1 -0
  310. package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
  311. package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
  312. package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
  313. package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
  314. package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
  315. package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
  316. package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
  317. package/dist/api/service/RdfSearchIndexingService.js +272 -0
  318. package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
  319. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
  320. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
  321. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
  322. package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
  323. package/dist/api/service/RdfStorageStatsService.js +97 -0
  324. package/dist/api/service/RdfStorageStatsService.js.map +1 -0
  325. package/dist/api/service/VectorStoreService.d.ts +2 -0
  326. package/dist/api/service/VectorStoreService.js +70 -2
  327. package/dist/api/service/VectorStoreService.js.map +1 -1
  328. package/dist/api/service/VercelChatService.d.ts +27 -38
  329. package/dist/api/service/VercelChatService.js +153 -505
  330. package/dist/api/service/VercelChatService.js.map +1 -1
  331. package/dist/api/service/provider-http-transport.d.ts +21 -0
  332. package/dist/api/service/provider-http-transport.js +108 -2
  333. package/dist/api/service/provider-http-transport.js.map +1 -1
  334. package/dist/api/service/provider-registry.d.ts +5 -7
  335. package/dist/api/service/provider-registry.js +81 -64
  336. package/dist/api/service/provider-registry.js.map +1 -1
  337. package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
  338. package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
  339. package/dist/api/tasks/TaskMaterializer.js +39 -4
  340. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  341. package/dist/api/tasks/TaskService.d.ts +5 -1
  342. package/dist/api/tasks/TaskService.js +3 -0
  343. package/dist/api/tasks/TaskService.js.map +1 -1
  344. package/dist/cli/commands/obj.d.ts +9 -0
  345. package/dist/cli/commands/obj.js +74 -3
  346. package/dist/cli/commands/obj.js.map +1 -1
  347. package/dist/cli/commands/rdf.d.ts +9 -0
  348. package/dist/cli/commands/rdf.js +66 -1
  349. package/dist/cli/commands/rdf.js.map +1 -1
  350. package/dist/cli/commands/start.js +3 -0
  351. package/dist/cli/commands/start.js.map +1 -1
  352. package/dist/cli/lib/solid-auth.d.ts +3 -3
  353. package/dist/cli/lib/solid-auth.js +4 -4
  354. package/dist/cli/lib/solid-auth.js.map +1 -1
  355. package/dist/components/components.jsonld +16 -0
  356. package/dist/components/context.jsonld +815 -28
  357. package/dist/document/Chunker.jsonld +110 -0
  358. package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
  359. package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
  360. package/dist/document/DocumentReader.js.map +1 -0
  361. package/dist/document/DocumentReader.jsonld +82 -0
  362. package/dist/document/HeadingChunker.jsonld +41 -0
  363. package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
  364. package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
  365. package/dist/document/JinaReader.js.map +1 -0
  366. package/dist/document/JinaReader.jsonld +133 -0
  367. package/dist/document/L0SourceSummary.d.ts +103 -0
  368. package/dist/document/L0SourceSummary.js +157 -0
  369. package/dist/document/L0SourceSummary.js.map +1 -0
  370. package/dist/document/L0SourceSummary.jsonld +326 -0
  371. package/dist/document/PaddleOcrReader.d.ts +40 -0
  372. package/dist/document/PaddleOcrReader.js +53 -0
  373. package/dist/document/PaddleOcrReader.js.map +1 -0
  374. package/dist/document/PaddleOcrReader.jsonld +234 -0
  375. package/dist/document/ReaderAiConfig.d.ts +50 -0
  376. package/dist/document/ReaderAiConfig.js +109 -0
  377. package/dist/document/ReaderAiConfig.js.map +1 -0
  378. package/dist/document/ReaderAiConfig.jsonld +185 -0
  379. package/dist/document/ReaderPolicy.d.ts +89 -0
  380. package/dist/document/ReaderPolicy.js +158 -0
  381. package/dist/document/ReaderPolicy.js.map +1 -0
  382. package/dist/document/ReaderPolicy.jsonld +218 -0
  383. package/dist/document/index.d.ts +6 -2
  384. package/dist/document/index.js +6 -2
  385. package/dist/document/index.js.map +1 -1
  386. package/dist/edge/DdnsManager.d.ts +1 -1
  387. package/dist/edge/DdnsManager.js.map +1 -1
  388. package/dist/edge/EdgeNodeAgent.d.ts +4 -0
  389. package/dist/edge/EdgeNodeAgent.js +6 -0
  390. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  391. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  392. package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
  393. package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
  394. package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
  395. package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
  396. package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
  397. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
  398. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
  399. package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
  400. package/dist/edge/acme/AcmeCertificateManager.js +67 -7
  401. package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
  402. package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
  403. package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
  404. package/dist/edge/acme/ClusterCertificateManager.js +38 -0
  405. package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
  406. package/dist/extensions/ExtensionRuntime.d.ts +17 -0
  407. package/dist/extensions/ExtensionRuntime.js +171 -0
  408. package/dist/extensions/ExtensionRuntime.js.map +1 -0
  409. package/dist/extensions/PodCredentialResolver.d.ts +23 -0
  410. package/dist/extensions/PodCredentialResolver.js +139 -0
  411. package/dist/extensions/PodCredentialResolver.js.map +1 -0
  412. package/dist/extensions/index.d.ts +3 -0
  413. package/dist/extensions/index.js +20 -0
  414. package/dist/extensions/index.js.map +1 -0
  415. package/dist/extensions/types.d.ts +73 -0
  416. package/dist/extensions/types.js +3 -0
  417. package/dist/extensions/types.js.map +1 -0
  418. package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
  419. package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
  420. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  421. package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
  422. package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
  423. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  424. package/dist/identity/drizzle/schema.pg.js +1 -1
  425. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  426. package/dist/identity/drizzle/schema.sqlite.js +1 -1
  427. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  428. package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
  429. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
  430. package/dist/index.d.ts +12 -2
  431. package/dist/index.js +13 -1
  432. package/dist/index.js.map +1 -1
  433. package/dist/main.js +3 -0
  434. package/dist/main.js.map +1 -1
  435. package/dist/provision/LocalProvisionState.d.ts +28 -0
  436. package/dist/provision/LocalProvisionState.js +124 -0
  437. package/dist/provision/LocalProvisionState.js.map +1 -0
  438. package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
  439. package/dist/provision/ProvisionCodeCodec.js +10 -3
  440. package/dist/provision/ProvisionCodeCodec.js.map +1 -1
  441. package/dist/provision/ProvisionPodCreator.d.ts +15 -1
  442. package/dist/provision/ProvisionPodCreator.js +68 -1
  443. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  444. package/dist/provision/ProvisionPodCreator.jsonld +31 -0
  445. package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
  446. package/dist/provision/ServiceAccessTokenCodec.js +86 -0
  447. package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
  448. package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
  449. package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
  450. package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
  451. package/dist/runtime/Proxy.d.ts +10 -0
  452. package/dist/runtime/Proxy.js +64 -6
  453. package/dist/runtime/Proxy.js.map +1 -1
  454. package/dist/runtime/XpodRuntime.js +1 -0
  455. package/dist/runtime/XpodRuntime.js.map +1 -1
  456. package/dist/runtime/bootstrap.d.ts +1 -0
  457. package/dist/runtime/bootstrap.js +29 -0
  458. package/dist/runtime/bootstrap.js.map +1 -1
  459. package/dist/runtime/css-process.d.ts +1 -0
  460. package/dist/runtime/css-process.js +1 -0
  461. package/dist/runtime/css-process.js.map +1 -1
  462. package/dist/runtime/index.d.ts +1 -0
  463. package/dist/runtime/index.js +3 -1
  464. package/dist/runtime/index.js.map +1 -1
  465. package/dist/runtime/lifecycle.d.ts +3 -1
  466. package/dist/runtime/lifecycle.js +3 -1
  467. package/dist/runtime/lifecycle.js.map +1 -1
  468. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
  469. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
  470. package/dist/runtime/runner/types.d.ts +3 -0
  471. package/dist/runtime/runner/types.js.map +1 -1
  472. package/dist/runtime/runtime-types.d.ts +2 -0
  473. package/dist/runtime/runtime-types.js.map +1 -1
  474. package/dist/runtime/safe-env.d.ts +15 -0
  475. package/dist/runtime/safe-env.js +109 -0
  476. package/dist/runtime/safe-env.js.map +1 -0
  477. package/dist/security/index.d.ts +1 -0
  478. package/dist/security/index.js +18 -0
  479. package/dist/security/index.js.map +1 -0
  480. package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
  481. package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
  482. package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
  483. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
  484. package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
  485. package/dist/security/secret-cell/SecretCellVault.js +242 -0
  486. package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
  487. package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
  488. package/dist/security/secret-cell/index.d.ts +2 -0
  489. package/dist/security/secret-cell/index.js +11 -0
  490. package/dist/security/secret-cell/index.js.map +1 -0
  491. package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
  492. package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
  493. package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
  494. package/dist/solidfs/LocalSolidFS.js +25 -1
  495. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  496. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
  497. package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
  498. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
  499. package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
  500. package/dist/solidfs/SolidFsMetaNotes.js +103 -0
  501. package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
  502. package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
  503. package/dist/solidfs/SolidFsSyncJournal.js +9 -4
  504. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
  505. package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
  506. package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
  507. package/dist/solidfs/WorkspacePrompt.js +42 -0
  508. package/dist/solidfs/WorkspacePrompt.js.map +1 -0
  509. package/dist/solidfs/index.d.ts +3 -0
  510. package/dist/solidfs/index.js +3 -0
  511. package/dist/solidfs/index.js.map +1 -1
  512. package/dist/solidfs/types.d.ts +12 -2
  513. package/dist/solidfs/types.js.map +1 -1
  514. package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
  515. package/dist/storage/accessors/MixDataAccessor.js +222 -23
  516. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  517. package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
  518. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
  519. package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
  520. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  521. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
  522. package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
  523. package/dist/storage/database/PostgresPoolManager.js +2 -2
  524. package/dist/storage/database/PostgresPoolManager.js.map +1 -1
  525. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
  526. package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
  527. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
  528. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
  529. package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
  530. package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
  531. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  532. package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
  533. package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
  534. package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
  535. package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
  536. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
  537. package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
  538. package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
  539. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
  540. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
  541. package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
  542. package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
  543. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
  544. package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
  545. package/dist/storage/rdf/Rdf3xIndex.js +286 -2
  546. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
  547. package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
  548. package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
  549. package/dist/storage/rdf/Rdf3xSchema.js +17 -3
  550. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
  551. package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
  552. package/dist/storage/rdf/RdfAccessScope.js +345 -0
  553. package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
  554. package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
  555. package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
  556. package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
  557. package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
  558. package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
  559. package/dist/storage/rdf/RdfJoinShape.js +31 -0
  560. package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
  561. package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
  562. package/dist/storage/rdf/RdfQuadIndex.js +94 -6
  563. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  564. package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
  565. package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
  566. package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
  567. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
  568. package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
  569. package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
  570. package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
  571. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
  572. package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
  573. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  574. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
  575. package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
  576. package/dist/storage/rdf/RdfTermDictionary.js +139 -0
  577. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  578. package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
  579. package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
  580. package/dist/storage/rdf/RdfTextIndex.js +810 -114
  581. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  582. package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
  583. package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
  584. package/dist/storage/rdf/RdfTextProjection.js +258 -0
  585. package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
  586. package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
  587. package/dist/storage/rdf/RdfVectorIndex.js +461 -38
  588. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
  589. package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
  590. package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
  591. package/dist/storage/rdf/SolidRdfEngine.js +48 -22
  592. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  593. package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
  594. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
  595. package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
  596. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  597. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
  598. package/dist/storage/rdf/index.d.ts +9 -5
  599. package/dist/storage/rdf/index.js +42 -1
  600. package/dist/storage/rdf/index.js.map +1 -1
  601. package/dist/storage/rdf/models-benchmark.d.ts +264 -2
  602. package/dist/storage/rdf/models-benchmark.js +4207 -155
  603. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  604. package/dist/storage/rdf/types.d.ts +833 -4
  605. package/dist/storage/rdf/types.js.map +1 -1
  606. package/dist/storage/rdf/types.jsonld +348 -0
  607. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
  608. package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
  609. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
  610. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
  611. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
  612. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
  613. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
  614. package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
  615. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  616. package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
  617. package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
  618. package/dist/terminal/sandbox/index.js +2 -1
  619. package/dist/terminal/sandbox/index.js.map +1 -1
  620. package/dist/test-utils/no-auth-xpod.js +3 -0
  621. package/dist/test-utils/no-auth-xpod.js.map +1 -1
  622. package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
  623. package/dist/tunnel/LocalTunnelProvider.js +17 -1
  624. package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
  625. package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
  626. package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
  627. package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
  628. package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
  629. package/dist/tunnel/TunnelProfiles.d.ts +22 -0
  630. package/dist/tunnel/TunnelProfiles.js +208 -0
  631. package/dist/tunnel/TunnelProfiles.js.map +1 -0
  632. package/dist/tunnel/index.d.ts +2 -0
  633. package/dist/tunnel/index.js +4 -1
  634. package/dist/tunnel/index.js.map +1 -1
  635. package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
  636. package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
  637. package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
  638. package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
  639. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
  640. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
  641. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
  642. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
  643. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
  644. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
  645. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
  646. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
  647. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
  648. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
  649. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
  650. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
  651. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
  652. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
  653. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
  654. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
  655. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
  656. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
  657. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
  658. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
  659. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
  660. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
  661. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
  662. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
  663. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
  664. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
  665. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
  666. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
  667. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
  668. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
  669. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
  670. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
  671. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
  672. package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
  673. package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
  674. package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
  675. package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
  676. package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
  677. package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
  678. package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
  679. package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
  680. package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
  681. package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
  682. package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
  683. package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
  684. package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
  685. package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
  686. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
  687. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
  688. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
  689. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
  690. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
  691. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
  692. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
  693. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
  694. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
  695. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
  696. package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
  697. package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
  698. package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
  699. package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
  700. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
  701. package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
  702. package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
  703. package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
  704. package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
  705. package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
  706. package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
  707. package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
  708. package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
  709. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
  710. package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
  711. package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
  712. package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
  713. package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
  714. package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
  715. package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
  716. package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
  717. package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
  718. package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
  719. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
  720. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
  721. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
  722. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
  723. package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
  724. package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
  725. package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
  726. package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
  727. package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
  728. package/package.json +32 -12
  729. package/static/app/assets/index-BoYHJ6si.js +230 -0
  730. package/static/app/assets/inrupt-smoke.js +2 -2
  731. package/static/app/assets/main.css +1 -1
  732. package/static/app/assets/main.js +9 -9
  733. package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
  734. package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
  735. package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
  736. package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
  737. package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
  738. package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
  739. package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
  740. package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
  741. package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
  742. package/static/dashboard/assets/index-RfiFckzb.js +51 -0
  743. package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
  744. package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
  745. package/static/dashboard/dashboard.html +2 -2
  746. package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
  747. package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
  748. package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
  749. package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
  750. package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
  751. package/static/settings/assets/card-B_bXSIn-.js +1 -0
  752. package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
  753. package/static/settings/assets/settings-B30oMfZq.js +305 -0
  754. package/static/settings/assets/settings-CSdewNeA.css +1 -0
  755. package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
  756. package/static/settings/auth.html +21 -0
  757. package/static/settings/reachability.html +221 -0
  758. package/static/settings/reachability.svg +7 -0
  759. package/static/settings/reachability.webmanifest +18 -0
  760. package/static/settings/settings.html +13 -0
  761. package/static/settings/signal-pod.html +293 -0
  762. package/static/settings/vite.svg +1 -0
  763. package/dist/api/service/ai-gateway-transport.d.ts +0 -25
  764. package/dist/api/service/ai-gateway-transport.js +0 -136
  765. package/dist/api/service/ai-gateway-transport.js.map +0 -1
  766. package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
  767. package/dist/api/service/chat-protocol-adapters.js +0 -146
  768. package/dist/api/service/chat-protocol-adapters.js.map +0 -1
  769. package/dist/api/service/chat-routing.d.ts +0 -8
  770. package/dist/api/service/chat-routing.js +0 -16
  771. package/dist/api/service/chat-routing.js.map +0 -1
  772. package/dist/api/service/platform-ai-config.d.ts +0 -10
  773. package/dist/api/service/platform-ai-config.js +0 -76
  774. package/dist/api/service/platform-ai-config.js.map +0 -1
  775. package/dist/document/DocumentParser.js.map +0 -1
  776. package/dist/document/JinaDocumentParser.js.map +0 -1
  777. package/static/app/assets/index-C1yksyT4.js +0 -171
  778. package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
  779. package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/ai-gateway/connect/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac, randomBytes as nodeRandomBytes, timingSafeEqual } from 'node:crypto';\nimport { alias, and, drizzle, eq } from '@undefineds.co/drizzle-solid';\nimport {\n aiProviderResource,\n aiRuntimeRepository,\n credentialResource,\n} from '@undefineds.co/models';\nimport type { EncryptedCredentialSecret } from '../credentials/KeyWrapper';\nimport type { CredentialVault, GatewayPrincipal, ProviderSecret } from '../credentials/CredentialVault';\nimport type { GatewayDeployment } from '../auth/GatewayApiKey';\nimport type { ProviderRegistry } from '../providers/ProviderRegistry';\nimport { DEFAULT_PROVIDER_DESCRIPTORS } from '../providers/ProviderRegistry';\nimport type { AuthContext } from '../../auth/AuthContext';\nimport type { InternalPodAccessTokenProvider } from '../auth/PodGatewayAccessKeyRepository';\n\nexport type ConnectMode = 'browserAssistedApiKey' | 'deviceCodeOAuth' | 'connectUnsupported';\nexport type ConnectAttemptStatus =\n | 'pending'\n | 'authorization_pending'\n | 'slow_down'\n | 'completed'\n | 'expired'\n | 'unsupported';\n\nexport interface ConnectBeginInput {\n webId: string;\n deployment: GatewayDeployment;\n provider: string;\n requestedMode: ConnectMode;\n expectedCredentialVersion?: number;\n auth?: AuthContext;\n}\n\nexport interface ConnectBeginResult {\n mode: ConnectMode;\n status: ConnectAttemptStatus;\n provider: string;\n deployment: GatewayDeployment;\n attemptId?: string;\n state?: string;\n signature?: string;\n expiresAt?: string;\n authorizationUrl?: string;\n pkceChallenge?: string;\n deviceCode?: string;\n userCode?: string;\n verificationUri?: string;\n verificationUriComplete?: string;\n intervalSeconds?: number;\n apiKeyManagementSupported?: boolean;\n credentialId?: string;\n message?: string;\n}\n\nexport interface CompleteApiKeyInput {\n webId: string;\n deployment: GatewayDeployment;\n provider: string;\n attemptId: string;\n state: string;\n signature: string;\n apiKey: string;\n accountLabel?: string;\n auth?: AuthContext;\n}\n\nexport interface PollDeviceInput {\n webId: string;\n deployment: GatewayDeployment;\n provider: string;\n attemptId: string;\n state: string;\n signature: string;\n auth?: AuthContext;\n}\n\nexport interface RefreshInput {\n webId: string;\n deployment: GatewayDeployment;\n provider: string;\n auth?: AuthContext;\n}\n\nexport interface DisconnectInput {\n webId: string;\n deployment: GatewayDeployment;\n provider: string;\n auth?: AuthContext;\n}\n\nexport interface ConnectCredentialRecord {\n id: string;\n credentialIri: string;\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n authMode: 'apiKey' | 'deviceCodeOAuth';\n encryptedSecret: EncryptedCredentialSecret;\n status: 'active' | 'revoked';\n accountLabel?: string;\n expiresAt?: Date;\n scopes?: string[];\n expectedVersion?: number;\n version?: number;\n reauthRequired?: boolean;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PodCredentialRepository {\n getCredential?(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined>;\n getActiveCredential(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined>;\n upsertConnectedCredential(\n record: ConnectCredentialRecord,\n context?: { auth?: AuthContext },\n ): Promise<ConnectCredentialRecord>;\n rewrapCredential?(input: {\n webId: string;\n deployment: GatewayDeployment;\n credentialId: string;\n expectedVersion?: number;\n encryptedSecret: EncryptedCredentialSecret;\n auth?: AuthContext;\n }): Promise<boolean>;\n markReauthRequired(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n reason: string;\n expectedVersion?: number;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined>;\n disconnect(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined>;\n}\n\ntype ConnectedCredentialDb = {\n init?: (...resources: unknown[]) => Promise<void>;\n insert(resource: typeof credentialResource): {\n values(value: unknown): { execute(): Promise<unknown[]> };\n };\n select(): {\n from(resource: typeof credentialResource): {\n where(condition: unknown): { execute(): Promise<Record<string, unknown>[]> };\n };\n };\n findById<TRow>(resource: typeof credentialResource, id: string): Promise<TRow | null>;\n updateById<TRow>(resource: typeof credentialResource, id: string, patch: unknown): Promise<TRow | null>;\n update(resource: typeof credentialResource): {\n set(patch: unknown): {\n where(condition: unknown): {\n returning(): { execute(): Promise<Record<string, unknown>[]> };\n };\n };\n };\n};\n\nexport interface PodConnectedCredentialRepositoryOptions {\n internalPodAccess?: InternalPodAccessTokenProvider;\n providerIds?: string[];\n dbFactory?: (input: {\n owner: string;\n auth?: AuthContext;\n fetch: typeof fetch;\n credential?: typeof credentialResource;\n aiProvider?: typeof aiProviderResource;\n }) => Promise<ConnectedCredentialDb>;\n}\n\nexport class PodConnectedCredentialRepository implements PodCredentialRepository {\n private readonly dbFactory: NonNullable<PodConnectedCredentialRepositoryOptions['dbFactory']>;\n private readonly internalPodAccess?: InternalPodAccessTokenProvider;\n private readonly providerIds: string[];\n private readonly credentialTemplate: typeof credentialResource;\n private readonly aiProviderTemplate: typeof aiProviderResource;\n\n public constructor(options: PodConnectedCredentialRepositoryOptions = {}) {\n this.internalPodAccess = options.internalPodAccess;\n this.providerIds = options.providerIds\n ?? DEFAULT_PROVIDER_DESCRIPTORS.map((provider) => provider.id);\n this.dbFactory = options.dbFactory ?? createDefaultConnectedCredentialDb;\n this.credentialTemplate = alias(credentialResource, 'credentialTemplate');\n this.aiProviderTemplate = alias(aiProviderResource, 'aiProviderTemplate');\n }\n\n public async getCredential(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined> {\n const { db, credential } = await this.dbForOwner(input.webId, input.auth);\n const id = aiRuntimeRepository.credentialId(input);\n const row = await db.findById<Record<string, unknown>>(credential, id);\n const record = row ? recordFromCredentialRow(row) : undefined;\n if (!record) {\n return undefined;\n }\n return record;\n }\n\n public async getActiveCredential(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined> {\n const record = await this.getCredential(input);\n return record?.status === 'active' && !record.reauthRequired ? record : undefined;\n }\n\n public async listCredentials(input: {\n webId: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<Array<{\n id: string;\n credentialIri: string;\n provider: string;\n authMode: 'apiKey' | 'deviceCodeOAuth';\n enabled: boolean;\n priority?: number;\n models?: string[];\n defaultModel?: string;\n health?: 'healthy' | 'reauthRequired' | 'disabled' | 'error';\n quota?: { status: 'available' | 'unsupported' | 'exhausted' | 'error' };\n encryptedSecret: EncryptedCredentialSecret;\n version?: number;\n runtimeCredential?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n }>> {\n const { db, credential } = await this.dbForOwner(input.webId, input.auth);\n const rows = (await Promise.all(\n this.providerIds.map(async (provider) => {\n try {\n return await db.findById<Record<string, unknown>>(\n credential,\n aiRuntimeRepository.credentialId({ deployment: input.deployment, provider }),\n );\n } catch (error) {\n if (isPodResourceNotFound(error)) {\n return null;\n }\n throw error;\n }\n }),\n )).filter((row): row is Record<string, unknown> => row !== null);\n return rows\n .map(recordFromCredentialRow)\n .filter((record) => record.webId === input.webId)\n .filter((record) => record.deployment === input.deployment)\n .filter((record) => record.status === 'active')\n .map((record) => ({\n id: record.id,\n credentialIri: record.credentialIri,\n provider: record.provider,\n authMode: record.authMode,\n enabled: !record.reauthRequired,\n models: modelsFromMetadata(record.metadata),\n defaultModel: defaultModelFromMetadata(record.metadata),\n priority: priorityFromMetadata(record.metadata),\n health: record.reauthRequired ? 'reauthRequired' : 'healthy',\n quota: { status: 'available' },\n encryptedSecret: record.encryptedSecret,\n version: record.version,\n runtimeCredential: runtimeCredentialFromMetadata(record.metadata),\n metadata: record.metadata,\n }));\n }\n\n public async upsertConnectedCredential(\n record: ConnectCredentialRecord,\n context?: { auth?: AuthContext },\n ): Promise<ConnectCredentialRecord> {\n const { db, credential } = await this.dbForOwner(record.webId, context?.auth);\n const existing = await db.findById<Record<string, unknown>>(credential, record.id);\n const existingVersion = existing ? versionFromRow(existing) : 0;\n if (record.expectedVersion !== undefined && record.expectedVersion !== existingVersion) {\n throw new Error('credential_version_conflict');\n }\n const nextVersion = existingVersion + 1;\n const row = credentialRowFromRecord({\n ...record,\n version: nextVersion,\n });\n if (existing) {\n const updated = await db.updateById<Record<string, unknown>>(credential, record.id, row);\n return recordFromCredentialRow(updated ?? row);\n }\n await db.insert(credential).values(row).execute();\n return recordFromCredentialRow(row);\n }\n\n public async rewrapCredential(input: {\n webId: string;\n deployment: GatewayDeployment;\n credentialId: string;\n expectedVersion?: number;\n encryptedSecret: EncryptedCredentialSecret;\n auth?: AuthContext;\n }): Promise<boolean> {\n const { db, credential } = await this.dbForOwner(input.webId, input.auth);\n const existing = await db.findById<Record<string, unknown>>(credential, input.credentialId);\n if (!existing) {\n return false;\n }\n const current = recordFromCredentialRow(existing);\n if (current.webId !== input.webId || current.deployment !== input.deployment) {\n return false;\n }\n const currentVersion = versionFromRow(existing);\n if (input.expectedVersion === undefined || currentVersion !== input.expectedVersion) {\n return false;\n }\n const updated = await db.update(credential)\n .set({\n encryptedSecret: JSON.stringify(input.encryptedSecret),\n wrappedDataKey: input.encryptedSecret.wrappedDek,\n encryptionAlgorithm: input.encryptedSecret.algorithm,\n keyVersion: String(currentVersion + 1),\n })\n .where(and(\n eq(credential.id, input.credentialId),\n eq(credential.keyVersion, String(input.expectedVersion)),\n ))\n .returning()\n .execute();\n return updated.length === 1;\n }\n\n public async markReauthRequired(input: {\n webId: string;\n provider: string;\n deployment: GatewayDeployment;\n reason: string;\n expectedVersion?: number;\n auth?: AuthContext;\n }): Promise<ConnectCredentialRecord | undefined> {\n const { db, credential } = await this.dbForOwner(input.webId, input.auth);\n const id = aiRuntimeRepository.credentialId(input);\n const existing = await db.findById<Record<string, unknown>>(credential, id);\n if (!existing) {\n return undefined;\n }\n const existingVersion = versionFromRow(existing);\n if (input.expectedVersion !== undefined && input.expectedVersion !== existingVersion) {\n throw new Error('credential_version_conflict');\n }\n const updated = await db.updateById<Record<string, unknown>>(credential, id, {\n reauthRequired: true,\n status: 'active',\n keyVersion: String(existingVersion + 1),\n });\n return updated ? recordFromCredentialRow(updated) : undefined;\n }\n\n public async disconnect(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined> {\n const { db, credential } = await this.dbForOwner(input.webId, input.auth);\n const id = aiRuntimeRepository.credentialId(input);\n const existing = await db.findById<Record<string, unknown>>(credential, id);\n if (!existing) {\n return undefined;\n }\n const updated = await db.updateById<Record<string, unknown>>(credential, id, {\n status: 'revoked',\n keyVersion: String(versionFromRow(existing) + 1),\n });\n return updated ? recordFromCredentialRow(updated) : undefined;\n }\n\n private async dbForOwner(owner: string, auth?: AuthContext): Promise<{\n db: ConnectedCredentialDb;\n credential: typeof credentialResource;\n }> {\n const trustedFetch = await this.resolveTrustedFetch(owner);\n const credential = alias(this.credentialTemplate, 'credential');\n const aiProvider = alias(this.aiProviderTemplate, 'aiProvider');\n const db = await this.dbFactory({ owner, auth, fetch: trustedFetch, credential, aiProvider });\n await db.init?.(credential, aiProvider);\n return { db, credential };\n }\n\n private async resolveTrustedFetch(owner: string): Promise<typeof fetch> {\n const trustedFetch = await this.internalPodAccess?.getTrustedFetch(owner);\n if (!trustedFetch) {\n throw new Error('AI Connection service identity is not configured');\n }\n return async (input, init) => {\n const response = await trustedFetch(input, init);\n if (response.status === 403) {\n throw new Error('service_access_missing');\n }\n return response;\n };\n }\n}\n\nexport interface ProviderConnectAdapter {\n readonly provider: string;\n begin(input: ConnectBeginInput): Promise<ConnectBeginResult>;\n status?(input: PollDeviceInput): Promise<ConnectBeginResult>;\n completeApiKey?(input: CompleteApiKeyInput): Promise<ConnectBeginResult>;\n pollDevice?(input: PollDeviceInput): Promise<ConnectBeginResult>;\n refresh?(\n input: RefreshInput,\n current: ConnectCredentialRecord,\n secret: ProviderSecret,\n ): Promise<ConnectCredentialRecord | undefined>;\n disconnect?(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined>;\n}\n\ninterface ConnectAttempt {\n id: string;\n provider: string;\n deployment: GatewayDeployment;\n webId: string;\n mode: ConnectMode;\n state: string;\n signature: string;\n expiresAt: Date;\n consumedAt?: Date;\n expectedCredentialVersion?: number;\n codeVerifier?: string;\n deviceCode?: string;\n intervalSeconds?: number;\n currentPollIntervalSeconds?: number;\n nextPollAt?: Date;\n pollClaimedAt?: Date;\n lastPollStatus?: ConnectAttemptStatus;\n}\n\ninterface PollClaimResult {\n attempt: ConnectAttempt;\n claimed: boolean;\n}\n\nexport class InMemoryConnectAttemptStore {\n private readonly attempts = new Map<string, ConnectAttempt>();\n private readonly maxAttempts = 1_000;\n\n public async create(attempt: ConnectAttempt): Promise<ConnectAttempt> {\n this.pruneExpired(new Date());\n this.attempts.set(attempt.id, cloneAttempt(attempt));\n this.pruneBounded();\n return cloneAttempt(attempt);\n }\n\n public async get(id: string, now?: Date): Promise<ConnectAttempt | undefined> {\n this.pruneExpired(now ?? new Date(), id);\n const attempt = this.attempts.get(id);\n if (attempt && now && attempt.expiresAt.getTime() <= now.getTime()) {\n this.attempts.delete(id);\n }\n return attempt ? cloneAttempt(attempt) : undefined;\n }\n\n public async consume(id: string, now: Date): Promise<ConnectAttempt> {\n this.pruneExpired(now, id);\n const attempt = this.attempts.get(id);\n if (!attempt) {\n throw new Error('Connect attempt not found');\n }\n if (attempt.consumedAt) {\n throw new Error('Connect attempt already consumed');\n }\n if (attempt.expiresAt.getTime() <= now.getTime()) {\n this.attempts.delete(id);\n throw new Error('Connect attempt expired');\n }\n attempt.consumedAt = new Date(now);\n return cloneAttempt(attempt);\n }\n\n public async claimPoll(id: string, now: Date): Promise<PollClaimResult> {\n this.pruneExpired(now, id);\n const attempt = this.attempts.get(id);\n if (!attempt) {\n throw new Error('Connect attempt not found');\n }\n if (attempt.consumedAt) {\n throw new Error('Connect attempt already consumed');\n }\n if (attempt.expiresAt.getTime() <= now.getTime()) {\n this.attempts.delete(id);\n throw new Error('Connect attempt expired');\n }\n if (attempt.nextPollAt && attempt.nextPollAt.getTime() > now.getTime()) {\n return { attempt: cloneAttempt(attempt), claimed: false };\n }\n if (attempt.pollClaimedAt) {\n return { attempt: cloneAttempt(attempt), claimed: false };\n }\n attempt.pollClaimedAt = new Date(now);\n return { attempt: cloneAttempt(attempt), claimed: true };\n }\n\n public async updatePollSchedule(\n id: string,\n patch: {\n intervalSeconds: number;\n nextPollAt: Date;\n lastPollStatus: ConnectAttemptStatus;\n },\n ): Promise<ConnectAttempt | undefined> {\n const attempt = this.attempts.get(id);\n if (!attempt || attempt.consumedAt) {\n return undefined;\n }\n attempt.intervalSeconds = patch.intervalSeconds;\n attempt.currentPollIntervalSeconds = patch.intervalSeconds;\n attempt.nextPollAt = new Date(patch.nextPollAt);\n attempt.lastPollStatus = patch.lastPollStatus;\n attempt.pollClaimedAt = undefined;\n return cloneAttempt(attempt);\n }\n\n public async releasePollClaim(id: string): Promise<void> {\n const attempt = this.attempts.get(id);\n if (attempt) {\n attempt.pollClaimedAt = undefined;\n }\n }\n\n private pruneExpired(now: Date, exceptId?: string): void {\n for (const [id, attempt] of this.attempts) {\n if (id !== exceptId && attempt.expiresAt.getTime() <= now.getTime()) {\n this.attempts.delete(id);\n }\n }\n }\n\n private pruneBounded(): void {\n while (this.attempts.size > this.maxAttempts) {\n const oldest = this.attempts.keys().next().value;\n if (typeof oldest !== 'string') {\n return;\n }\n this.attempts.delete(oldest);\n }\n }\n}\n\nexport interface BrowserAssistedApiKeyConnectAdapterOptions {\n provider: string;\n consoleUrl: string;\n attempts: InMemoryConnectAttemptStore;\n credentialRepository: PodCredentialRepository;\n vault: CredentialVault;\n deployment: GatewayDeployment;\n now?: () => Date;\n randomBytes?: (bytes: number) => Buffer;\n signingSecret: string;\n}\n\nexport class BrowserAssistedApiKeyConnectAdapter implements ProviderConnectAdapter {\n public readonly provider: string;\n private readonly consoleUrl: string;\n protected readonly attempts: InMemoryConnectAttemptStore;\n protected readonly credentialRepository: PodCredentialRepository;\n protected readonly vault: CredentialVault;\n protected readonly deployment: GatewayDeployment;\n protected readonly now: () => Date;\n protected readonly randomBytes: (bytes: number) => Buffer;\n private readonly signingSecret: string;\n\n public constructor(options: BrowserAssistedApiKeyConnectAdapterOptions) {\n this.provider = normalizeProvider(options.provider);\n this.consoleUrl = options.consoleUrl;\n this.attempts = options.attempts;\n this.credentialRepository = options.credentialRepository;\n this.vault = options.vault;\n this.deployment = options.deployment;\n this.now = options.now ?? (() => new Date());\n this.randomBytes = options.randomBytes ?? nodeRandomBytes;\n this.signingSecret = options.signingSecret;\n }\n\n public async begin(input: ConnectBeginInput): Promise<ConnectBeginResult> {\n this.assertInput(input, 'browserAssistedApiKey');\n const now = this.now();\n const expiresAt = new Date(now.getTime() + 5 * 60 * 1000);\n const attempt = await this.createAttempt(input, expiresAt);\n const url = new URL(this.consoleUrl);\n url.searchParams.set('xpod_connect_attempt', attempt.id);\n url.searchParams.set('xpod_provider', this.provider);\n\n return {\n mode: 'browserAssistedApiKey',\n status: 'pending',\n provider: this.provider,\n deployment: this.deployment,\n attemptId: attempt.id,\n state: attempt.state,\n signature: attempt.signature,\n expiresAt: expiresAt.toISOString(),\n authorizationUrl: url.toString(),\n };\n }\n\n public async completeApiKey(input: CompleteApiKeyInput): Promise<ConnectBeginResult> {\n if (!input.apiKey.trim()) {\n throw new Error('API key is required');\n }\n const attempt = await this.loadConsumableAttempt(input, 'browserAssistedApiKey');\n const consumed = await this.attempts.consume(input.attemptId, this.now());\n const credentialIri = aiRuntimeRepository.credentialIri(input.webId, {\n deployment: input.deployment,\n provider: this.provider,\n });\n const encryptedSecret = await this.vault.seal(\n principal(input.webId),\n credentialIri,\n this.provider,\n { type: 'apiKey', apiKey: input.apiKey },\n );\n const record = await this.credentialRepository.upsertConnectedCredential({\n id: aiRuntimeRepository.credentialId({ deployment: input.deployment, provider: this.provider }),\n credentialIri,\n webId: input.webId,\n provider: this.provider,\n deployment: input.deployment,\n authMode: 'apiKey',\n encryptedSecret,\n status: 'active',\n accountLabel: input.accountLabel,\n expectedVersion: consumed.expectedCredentialVersion,\n }, { auth: input.auth });\n\n return {\n mode: 'browserAssistedApiKey',\n status: 'completed',\n provider: this.provider,\n deployment: input.deployment,\n attemptId: attempt.id,\n credentialId: record.id,\n };\n }\n\n public async status(input: PollDeviceInput): Promise<ConnectBeginResult> {\n const attempt = await this.loadAttemptForStatus(input, 'browserAssistedApiKey');\n return {\n mode: attempt.mode,\n status: this.statusForAttempt(attempt),\n provider: this.provider,\n deployment: input.deployment,\n attemptId: attempt.id,\n expiresAt: attempt.expiresAt.toISOString(),\n };\n }\n\n public async disconnect(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined> {\n return this.credentialRepository.disconnect({\n webId: input.webId,\n provider: this.provider,\n deployment: input.deployment,\n auth: input.auth,\n });\n }\n\n protected async createAttempt(input: ConnectBeginInput, expiresAt: Date, extra: Partial<ConnectAttempt> = {}): Promise<ConnectAttempt> {\n const attemptWithoutSignature: Omit<ConnectAttempt, 'signature'> = {\n id: token(this.randomBytes),\n provider: this.provider,\n deployment: input.deployment,\n webId: input.webId,\n mode: input.requestedMode,\n state: token(this.randomBytes),\n expiresAt,\n expectedCredentialVersion: input.expectedCredentialVersion,\n ...extra,\n };\n const signature = signAttempt(attemptWithoutSignature, this.signingSecret);\n return this.attempts.create({ ...attemptWithoutSignature, signature });\n }\n\n protected async loadAttemptForStatus(input: PollDeviceInput, mode: ConnectMode): Promise<ConnectAttempt> {\n const attempt = await this.attempts.get(input.attemptId, this.now());\n if (!attempt) {\n throw new Error('Connect attempt not found');\n }\n if (attempt.webId !== input.webId) {\n throw new Error('Connect attempt is bound to a different WebID');\n }\n if (attempt.deployment !== input.deployment) {\n throw new Error('Connect attempt is bound to a different deployment');\n }\n if (attempt.provider !== normalizeProvider(input.provider)) {\n throw new Error('Connect attempt is bound to a different provider');\n }\n if (attempt.mode !== mode) {\n throw new Error('Connect attempt mode mismatch');\n }\n if (attempt.state !== input.state) {\n throw new Error('Invalid Connect attempt state');\n }\n if (!signatureMatches(input.signature, signAttempt(attempt, this.signingSecret))) {\n throw new Error('Invalid Connect attempt signature');\n }\n return attempt;\n }\n\n protected async loadConsumableAttempt(input: PollDeviceInput, mode: ConnectMode): Promise<ConnectAttempt> {\n const attempt = await this.loadAttemptForStatus(input, mode);\n if (attempt.expiresAt.getTime() <= this.now().getTime()) {\n throw new Error('Connect attempt expired');\n }\n if (attempt.consumedAt) {\n throw new Error('Connect attempt already consumed');\n }\n return attempt;\n }\n\n protected statusForAttempt(attempt: ConnectAttempt): ConnectAttemptStatus {\n if (attempt.expiresAt.getTime() <= this.now().getTime()) {\n return 'expired';\n }\n return attempt.consumedAt ? 'completed' : 'pending';\n }\n\n protected assertInput(input: ConnectBeginInput, mode: ConnectMode): void {\n if (normalizeProvider(input.provider) !== this.provider) {\n throw new Error('Connect provider mismatch');\n }\n if (input.deployment !== this.deployment) {\n throw new Error('Connect deployment mismatch');\n }\n if (input.requestedMode !== mode) {\n throw new Error('Unsupported Connect mode');\n }\n if (!input.webId) {\n throw new Error('Connect WebID is required');\n }\n }\n}\n\nexport interface KimiDeviceCodeConnectAdapterOptions extends Omit<BrowserAssistedApiKeyConnectAdapterOptions, 'provider' | 'consoleUrl'> {\n fetch?: typeof fetch;\n clientId: string;\n deviceAuthorizationEndpoint?: string;\n tokenEndpoint?: string;\n}\n\nexport class KimiDeviceCodeConnectAdapter extends BrowserAssistedApiKeyConnectAdapter {\n private readonly fetchImpl: typeof fetch;\n private readonly clientId: string;\n private readonly deviceAuthorizationEndpoint: string;\n private readonly tokenEndpoint: string;\n\n public constructor(options: KimiDeviceCodeConnectAdapterOptions) {\n super({\n ...options,\n provider: 'kimi',\n consoleUrl: 'https://kimi.moonshot.cn/device',\n });\n this.fetchImpl = options.fetch ?? fetch;\n this.clientId = options.clientId;\n this.deviceAuthorizationEndpoint = options.deviceAuthorizationEndpoint ?? 'https://auth.kimi.com/api/oauth/device_authorization';\n this.tokenEndpoint = options.tokenEndpoint ?? 'https://auth.kimi.com/api/oauth/token';\n assertKimiEndpoint(this.deviceAuthorizationEndpoint, '/api/oauth/device_authorization');\n assertKimiEndpoint(this.tokenEndpoint, '/api/oauth/token');\n }\n\n public override async begin(input: ConnectBeginInput): Promise<ConnectBeginResult> {\n this.assertInput(input, 'deviceCodeOAuth');\n const now = this.now();\n const verifier = token(this.randomBytes);\n const challenge = codeChallenge(verifier);\n const response = await this.fetchImpl(this.deviceAuthorizationEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n client_id: this.clientId,\n code_challenge: challenge,\n code_challenge_method: 'S256',\n }),\n });\n const body = await safeJson(response);\n if (!response.ok) {\n throw new Error(`Kimi device authorization failed: ${safeProviderError(body)}`);\n }\n requireStringField(body, 'device_code');\n requireStringField(body, 'user_code');\n requireStringField(body, 'verification_uri_complete');\n const expiresIn = numberFrom(body.expires_in, 300);\n const attempt = await this.createAttempt(input, new Date(now.getTime() + expiresIn * 1000), {\n mode: 'deviceCodeOAuth',\n codeVerifier: verifier,\n deviceCode: stringFrom(body.device_code),\n intervalSeconds: numberFrom(body.interval, 5),\n currentPollIntervalSeconds: numberFrom(body.interval, 5),\n nextPollAt: new Date(now.getTime() + numberFrom(body.interval, 5) * 1000),\n });\n return {\n mode: 'deviceCodeOAuth',\n status: 'pending',\n provider: 'kimi',\n deployment: input.deployment,\n attemptId: attempt.id,\n state: attempt.state,\n signature: attempt.signature,\n expiresAt: attempt.expiresAt.toISOString(),\n pkceChallenge: challenge,\n deviceCode: attempt.deviceCode,\n userCode: stringFrom(body.user_code),\n verificationUri: stringFrom(body.verification_uri),\n verificationUriComplete: stringFrom(body.verification_uri_complete),\n intervalSeconds: attempt.intervalSeconds,\n };\n }\n\n public async pollDevice(input: PollDeviceInput): Promise<ConnectBeginResult> {\n const attempt = await this.loadConsumableAttempt(input, 'deviceCodeOAuth');\n const now = this.nowForConsume();\n const claim = await this.attempts.claimPoll(input.attemptId, now);\n if (!claim.claimed) {\n return pendingResult(\n input,\n claim.attempt.lastPollStatus === 'slow_down' ? 'slow_down' : 'authorization_pending',\n claim.attempt.currentPollIntervalSeconds ?? claim.attempt.intervalSeconds,\n );\n }\n try {\n const response = await this.fetchImpl(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: attempt.deviceCode ?? '',\n client_id: this.clientId,\n code_verifier: attempt.codeVerifier ?? '',\n }),\n });\n const body = await safeJson(response);\n if (!response.ok) {\n if (body.error === 'authorization_pending' || body.error === 'slow_down') {\n const status = body.error;\n const intervalSeconds = status === 'slow_down'\n ? (attempt.currentPollIntervalSeconds ?? attempt.intervalSeconds ?? 5) + 5\n : (attempt.currentPollIntervalSeconds ?? attempt.intervalSeconds ?? 5);\n await this.attempts.updatePollSchedule(input.attemptId, {\n intervalSeconds,\n nextPollAt: new Date(now.getTime() + intervalSeconds * 1000),\n lastPollStatus: status,\n });\n return pendingResult(input, status, intervalSeconds);\n }\n if (body.error === 'expired_token') {\n await this.attempts.consume(input.attemptId, this.nowForConsume());\n return pendingResult(input, 'expired');\n }\n throw new Error(`Kimi device token failed: ${safeProviderError(body)}`);\n }\n await this.attempts.consume(input.attemptId, this.nowForConsume());\n requireStringField(body, 'access_token');\n requireStringField(body, 'refresh_token');\n const record = await this.storeOAuthCredential(input, body, attempt.expectedCredentialVersion);\n return {\n mode: 'deviceCodeOAuth',\n status: 'completed',\n provider: 'kimi',\n deployment: input.deployment,\n attemptId: input.attemptId,\n credentialId: record.id,\n };\n } catch (error) {\n await this.attempts.releasePollClaim(input.attemptId);\n throw error;\n }\n }\n\n public override async status(input: PollDeviceInput): Promise<ConnectBeginResult> {\n const attempt = await this.loadAttemptForStatus(input, 'deviceCodeOAuth');\n return {\n mode: 'deviceCodeOAuth',\n status: this.statusForAttempt(attempt),\n provider: 'kimi',\n deployment: input.deployment,\n attemptId: attempt.id,\n expiresAt: attempt.expiresAt.toISOString(),\n deviceCode: attempt.deviceCode,\n intervalSeconds: attempt.currentPollIntervalSeconds ?? attempt.intervalSeconds,\n };\n }\n\n public async refresh(\n input: RefreshInput,\n current: ConnectCredentialRecord,\n secret: ProviderSecret,\n ): Promise<ConnectCredentialRecord | undefined> {\n const refreshToken = stringFrom(secret.refreshToken);\n if (!refreshToken) {\n return this.credentialRepository.markReauthRequired({\n webId: input.webId,\n provider: 'kimi',\n deployment: input.deployment,\n reason: 'missing_refresh_token',\n expectedVersion: current.version,\n auth: input.auth,\n });\n }\n const response = await this.fetchImpl(this.tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n client_id: this.clientId,\n }),\n });\n const body = await safeJson(response);\n if (!response.ok) {\n return this.credentialRepository.markReauthRequired({\n webId: input.webId,\n provider: 'kimi',\n deployment: input.deployment,\n reason: safeProviderError(body),\n expectedVersion: current.version,\n auth: input.auth,\n });\n }\n requireStringField(body, 'access_token');\n requireStringField(body, 'refresh_token');\n return this.storeOAuthCredential(input, body, current.version);\n }\n\n public override async disconnect(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined> {\n return this.credentialRepository.disconnect({\n webId: input.webId,\n provider: 'kimi',\n deployment: input.deployment,\n auth: input.auth,\n });\n }\n\n private nowForConsume(): Date {\n return this.now();\n }\n\n private async storeOAuthCredential(\n input: { webId: string; deployment: GatewayDeployment; auth?: AuthContext },\n body: Record<string, unknown>,\n expectedVersion?: number,\n ): Promise<ConnectCredentialRecord> {\n const credentialIri = aiRuntimeRepository.credentialIri(input.webId, {\n deployment: input.deployment,\n provider: 'kimi',\n });\n const expiresAt = expiresAtFrom(body.expires_in, this.now());\n const secret: ProviderSecret = {\n type: 'deviceCodeOAuth',\n accessToken: stringFrom(body.access_token),\n refreshToken: stringFrom(body.refresh_token),\n expiresAt: expiresAt?.toISOString(),\n scope: stringFrom(body.scope),\n idToken: stringFrom(body.id_token),\n };\n const encryptedSecret = await this.vault.seal(principal(input.webId), credentialIri, 'kimi', secret);\n return this.credentialRepository.upsertConnectedCredential({\n id: aiRuntimeRepository.credentialId({ deployment: input.deployment, provider: 'kimi' }),\n credentialIri,\n webId: input.webId,\n provider: 'kimi',\n deployment: input.deployment,\n authMode: 'deviceCodeOAuth',\n encryptedSecret,\n status: 'active',\n expiresAt,\n expectedVersion,\n metadata: {\n authoritativeSubject: decodeJwtSubject(stringFrom(body.id_token)),\n },\n }, { auth: input.auth });\n }\n}\n\nexport class DeepSeekConnectAdapter implements ProviderConnectAdapter {\n public readonly provider = 'deepseek';\n\n public async begin(input: ConnectBeginInput): Promise<ConnectBeginResult> {\n if (normalizeProvider(input.provider) !== this.provider) {\n throw new Error('Connect provider mismatch');\n }\n return {\n mode: 'connectUnsupported',\n status: 'unsupported',\n provider: 'deepseek',\n deployment: input.deployment,\n apiKeyManagementSupported: true,\n message: 'DeepSeek does not expose a supported third-party browser Connect flow; use authenticated API key management.',\n };\n }\n}\n\nexport interface ProviderConnectServiceOptions {\n registry: ProviderRegistry;\n adapters: ProviderConnectAdapter[];\n credentialRepository?: PodCredentialRepository;\n vault?: CredentialVault;\n}\n\nexport interface ProviderConnectionSummary {\n provider: string;\n status: 'connected' | 'disconnected' | 'reauthRequired';\n authMode?: 'apiKey' | 'deviceCodeOAuth';\n accountLabel?: string;\n expiresAt?: string;\n reauthRequired?: boolean;\n credentialIri?: string;\n version?: number;\n connect: {\n modes: string[];\n configured: boolean;\n message?: string;\n };\n}\n\nexport class ProviderConnectService {\n private readonly registry: ProviderRegistry;\n private readonly credentialRepository?: PodCredentialRepository;\n private readonly vault?: CredentialVault;\n private readonly adapters = new Map<string, ProviderConnectAdapter>();\n\n public constructor(options: ProviderConnectServiceOptions) {\n this.registry = options.registry;\n this.credentialRepository = options.credentialRepository;\n this.vault = options.vault;\n for (const adapter of options.adapters) {\n this.adapters.set(normalizeProvider(adapter.provider), adapter);\n }\n }\n\n public begin(input: ConnectBeginInput): Promise<ConnectBeginResult> {\n const descriptor = this.registry.requireProvider(input.provider);\n if (descriptor.connect?.mode !== input.requestedMode) {\n throw new Error('Requested Connect mode does not match provider capability');\n }\n if (descriptor.connect?.configured === false) {\n return Promise.resolve({\n mode: descriptor.connect.mode,\n status: 'unsupported',\n provider: normalizeProvider(input.provider),\n deployment: input.deployment,\n apiKeyManagementSupported: descriptor.connect.apiKeyManagementSupported,\n message: descriptor.connect.notes?.join(' '),\n });\n }\n return this.requireAdapter(input.provider).begin(input);\n }\n\n public async listProviders(input: {\n webId: string;\n deployment: GatewayDeployment;\n auth?: AuthContext;\n }): Promise<ProviderConnectionSummary[]> {\n return Promise.all(this.registry.listProviders().map(async (descriptor) => {\n const credential = this.credentialRepository?.getCredential\n ? await this.credentialRepository.getCredential({\n ...input,\n provider: descriptor.id,\n })\n : await this.credentialRepository?.getActiveCredential({\n ...input,\n provider: descriptor.id,\n });\n const active = credential?.status === 'active';\n const reauthRequired = active && credential.reauthRequired === true;\n const modes = Array.from(new Set([\n ...descriptor.authModes.filter((mode) => mode !== 'connectUnsupported'),\n ...(descriptor.connect?.apiKeyManagementSupported ? ['apiKey'] : []),\n ]));\n return {\n provider: descriptor.id,\n status: reauthRequired\n ? 'reauthRequired' as const\n : active\n ? 'connected' as const\n : 'disconnected' as const,\n authMode: active ? credential.authMode : undefined,\n accountLabel: active ? credential.accountLabel : undefined,\n expiresAt: active ? credential.expiresAt?.toISOString() : undefined,\n reauthRequired: reauthRequired || undefined,\n credentialIri: active ? credential.credentialIri : undefined,\n version: active ? credential.version : undefined,\n connect: {\n modes,\n configured: descriptor.connect?.configured !== false,\n message: descriptor.connect?.notes?.join(' ') || undefined,\n },\n };\n }));\n }\n\n public completeApiKey(input: CompleteApiKeyInput): Promise<ConnectBeginResult> {\n const adapter = this.requireAdapter(input.provider);\n if (!adapter.completeApiKey) {\n throw new Error('Provider does not support API key Connect completion');\n }\n return adapter.completeApiKey(input);\n }\n\n public pollDevice(input: PollDeviceInput): Promise<ConnectBeginResult> {\n const adapter = this.requireAdapter(input.provider);\n if (!adapter.pollDevice) {\n throw new Error('Provider does not support device-code polling');\n }\n return adapter.pollDevice(input);\n }\n\n public status(input: PollDeviceInput): Promise<ConnectBeginResult> {\n const adapter = this.requireAdapter(input.provider);\n if (!adapter.status) {\n throw new Error('Provider does not support Connect status');\n }\n return adapter.status(input);\n }\n\n public refresh(input: RefreshInput): Promise<ConnectCredentialRecord | undefined> {\n return this.refreshWithRetry(input, 2);\n }\n\n private async refreshWithRetry(\n input: RefreshInput,\n remainingAttempts: number,\n ): Promise<ConnectCredentialRecord | undefined> {\n const adapter = this.requireAdapter(input.provider);\n if (!adapter.refresh) {\n throw new Error('Provider does not support refresh');\n }\n if (!this.credentialRepository || !this.vault) {\n throw new Error('CredentialVault and PodCredentialRepository are required for provider refresh');\n }\n const current = await this.credentialRepository.getActiveCredential(input);\n if (!current) {\n throw new Error('Active provider credential not found');\n }\n const secret = await this.vault.open(\n { webId: input.webId },\n current.credentialIri,\n normalizeProvider(input.provider),\n current.encryptedSecret,\n );\n try {\n return await adapter.refresh(input, current, secret);\n } catch (error) {\n if (remainingAttempts > 0 && isVersionConflict(error)) {\n const latest = await this.credentialRepository.getActiveCredential(input);\n if (latest && latest.version !== current.version && !latest.reauthRequired) {\n return latest;\n }\n return this.refreshWithRetry(input, remainingAttempts - 1);\n }\n throw error;\n }\n }\n\n public disconnect(input: DisconnectInput): Promise<ConnectCredentialRecord | undefined> {\n const adapter = this.requireAdapter(input.provider);\n if (!adapter.disconnect) {\n throw new Error('Provider does not support disconnect');\n }\n return adapter.disconnect(input);\n }\n\n private requireAdapter(provider: string): ProviderConnectAdapter {\n const adapter = this.adapters.get(normalizeProvider(provider));\n if (!adapter) {\n throw new Error(`No Connect adapter registered for ${provider}`);\n }\n return adapter;\n }\n}\n\nfunction token(randomBytes: (bytes: number) => Buffer): string {\n return randomBytes(32).toString('base64url');\n}\n\nfunction createDefaultConnectedCredentialDb(input: {\n owner: string;\n auth?: AuthContext;\n fetch: typeof fetch;\n credential?: typeof credentialResource;\n aiProvider?: typeof aiProviderResource;\n}): Promise<ConnectedCredentialDb> {\n const credential = input.credential ?? credentialResource;\n const aiProvider = input.aiProvider ?? aiProviderResource;\n return Promise.resolve(drizzle(\n {\n fetch: input.fetch,\n info: { webId: input.owner, isLoggedIn: true },\n } as any,\n {\n schema: {\n credential,\n aiProvider,\n },\n },\n ) as unknown as ConnectedCredentialDb);\n}\n\nfunction credentialRowFromRecord(record: ConnectCredentialRecord): Record<string, unknown> {\n return {\n id: record.id,\n provider: aiProviderResource.buildId({ id: normalizeProvider(record.provider) }),\n service: 'ai',\n authMode: record.authMode,\n status: record.status,\n encryptedSecret: JSON.stringify(record.encryptedSecret),\n wrappedDataKey: record.encryptedSecret.wrappedDek,\n encryptionAlgorithm: record.encryptedSecret.algorithm,\n keyVersion: String(record.version ?? 1),\n scopes: record.scopes ?? [],\n expiresAt: record.expiresAt,\n accountLabel: record.accountLabel,\n label: record.accountLabel,\n reauthRequired: record.reauthRequired ?? false,\n lastRefreshAt: new Date(),\n };\n}\n\nfunction recordFromCredentialRow(row: Record<string, unknown>): ConnectCredentialRecord {\n const encrypted = parseEncryptedSecret(row.encryptedSecret);\n const id = stringFrom(row.id);\n const provider = providerFromRelation(stringFrom(row.provider))\n || providerFromCredentialId(id);\n const deployment = deploymentFromCredentialId(id);\n const webId = encrypted.webId;\n return {\n id,\n credentialIri: encrypted.credentialIri,\n webId,\n provider,\n deployment,\n authMode: stringFrom(row.authMode) === 'deviceCodeOAuth' ? 'deviceCodeOAuth' : 'apiKey',\n encryptedSecret: encrypted,\n status: stringFrom(row.status) === 'revoked' ? 'revoked' : 'active',\n accountLabel: stringFrom(row.accountLabel) || stringFrom(row.label) || undefined,\n expiresAt: dateFrom(row.expiresAt),\n scopes: Array.isArray(row.scopes) ? row.scopes.map(String) : undefined,\n version: versionFromRow(row),\n reauthRequired: row.reauthRequired === true || row.reauthRequired === 'true',\n metadata: metadataFromRow(row),\n };\n}\n\nfunction providerFromRelation(value: string): string | undefined {\n if (!value) {\n return undefined;\n }\n const withoutFragment = value.split('#', 1)[0] ?? value;\n const fileName = withoutFragment.split('/').filter(Boolean).at(-1) ?? withoutFragment;\n const provider = fileName.replace(/\\.ttl$/u, '');\n return provider ? normalizeProvider(provider) : undefined;\n}\n\nfunction isPodResourceNotFound(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n return /\\b404\\b|not found/i.test(error.message);\n}\n\nfunction metadataFromRow(row: Record<string, unknown>): Record<string, unknown> | undefined {\n const value = row.metadata;\n if (!value) {\n return undefined;\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n}\n\nfunction modelsFromMetadata(metadata: Record<string, unknown> | undefined): string[] | undefined {\n const value = metadata?.models;\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : undefined;\n}\n\nfunction defaultModelFromMetadata(metadata: Record<string, unknown> | undefined): string | undefined {\n const value = metadata?.defaultModel;\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction priorityFromMetadata(metadata: Record<string, unknown> | undefined): number | undefined {\n const value = metadata?.priority;\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction runtimeCredentialFromMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n const value = metadata?.runtimeCredential;\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction parseEncryptedSecret(value: unknown): EncryptedCredentialSecret {\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error('Credential row is missing encrypted secret payload');\n }\n const parsed = JSON.parse(value);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('Credential row encrypted secret payload is invalid');\n }\n return parsed as EncryptedCredentialSecret;\n}\n\nfunction versionFromRow(row: Record<string, unknown>): number {\n const value = row.keyVersion;\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n}\n\nfunction providerFromCredentialId(id: string): string {\n const match = /\\/([^/#]+)\\.ttl#/u.exec(id);\n return match?.[1] ?? '';\n}\n\nfunction deploymentFromCredentialId(id: string): GatewayDeployment {\n return id.includes('#cloud-') ? 'cloud' : 'local';\n}\n\nfunction dateFrom(value: unknown): Date | undefined {\n if (value instanceof Date) {\n return value;\n }\n if (typeof value === 'string' || typeof value === 'number') {\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n return undefined;\n}\n\nfunction signAttempt(\n attempt: Pick<ConnectAttempt, 'id' | 'provider' | 'deployment' | 'webId' | 'mode' | 'state' | 'expiresAt'>,\n secret: string,\n): string {\n return createHmac('sha256', secret)\n .update(JSON.stringify({\n id: attempt.id,\n provider: attempt.provider,\n deployment: attempt.deployment,\n webId: attempt.webId,\n mode: attempt.mode,\n state: attempt.state,\n expiresAt: attempt.expiresAt.toISOString(),\n }))\n .digest('base64url');\n}\n\nfunction signatureMatches(actual: string, expected: string): boolean {\n const actualBuffer = Buffer.from(actual, 'utf8');\n const expectedBuffer = Buffer.from(expected, 'utf8');\n return actualBuffer.length === expectedBuffer.length && timingSafeEqual(actualBuffer, expectedBuffer);\n}\n\nfunction codeChallenge(verifier: string): string {\n return createHash('sha256').update(verifier).digest('base64url');\n}\n\nfunction principal(webId: string): GatewayPrincipal {\n return { webId };\n}\n\nfunction cloneAttempt(attempt: ConnectAttempt): ConnectAttempt {\n return {\n ...attempt,\n expiresAt: new Date(attempt.expiresAt),\n consumedAt: attempt.consumedAt ? new Date(attempt.consumedAt) : undefined,\n nextPollAt: attempt.nextPollAt ? new Date(attempt.nextPollAt) : undefined,\n pollClaimedAt: attempt.pollClaimedAt ? new Date(attempt.pollClaimedAt) : undefined,\n };\n}\n\nfunction normalizeProvider(provider: string): string {\n return provider.trim().toLowerCase();\n}\n\nasync function safeJson(response: Response): Promise<Record<string, unknown>> {\n const text = await response.text();\n if (!text) {\n if (response.ok) {\n throw new Error('Provider returned an empty JSON response');\n }\n return {};\n }\n try {\n const parsed = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n if (response.ok) {\n throw new Error('Provider returned a non-object JSON response');\n }\n return {};\n }\n return parsed as Record<string, unknown>;\n } catch {\n if (response.ok) {\n throw new Error('Provider returned invalid JSON');\n }\n return {};\n }\n}\n\nfunction stringFrom(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction numberFrom(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction expiresAtFrom(expiresIn: unknown, now: Date): Date | undefined {\n if (typeof expiresIn !== 'number' || !Number.isFinite(expiresIn)) {\n return undefined;\n }\n return new Date(now.getTime() + expiresIn * 1000);\n}\n\nfunction safeProviderError(body: Record<string, unknown>): string {\n const code = stringFrom(body.error);\n if (SAFE_PROVIDER_ERROR_CODES.has(code)) {\n return code;\n }\n if (!code) {\n return 'provider_error';\n }\n if (code.endsWith('_error')) {\n return 'provider_error';\n }\n return 'provider_error';\n}\n\nconst SAFE_PROVIDER_ERROR_CODES = new Set([\n 'authorization_pending',\n 'slow_down',\n 'expired_token',\n 'access_denied',\n 'invalid_grant',\n 'invalid_client',\n]);\n\nfunction pendingResult(\n input: PollDeviceInput,\n status: ConnectAttemptStatus,\n intervalSeconds?: number,\n): ConnectBeginResult {\n return {\n mode: 'deviceCodeOAuth',\n status,\n provider: 'kimi',\n deployment: input.deployment,\n attemptId: input.attemptId,\n intervalSeconds,\n };\n}\n\nfunction assertKimiEndpoint(endpoint: string, pathname: string): void {\n const url = new URL(endpoint);\n if (\n url.origin !== 'https://auth.kimi.com'\n || url.pathname !== pathname\n || url.search\n || url.hash\n || url.username\n || url.password\n ) {\n throw new Error('Kimi Connect endpoint is not allowlisted');\n }\n}\n\nfunction requireStringField(body: Record<string, unknown>, field: string): void {\n if (typeof body[field] !== 'string' || !(body[field] as string).trim()) {\n throw new Error(`Provider response missing required field: ${field}`);\n }\n}\n\nfunction isVersionConflict(error: unknown): boolean {\n return error instanceof Error && /version_conflict|credential_version_conflict/u.test(error.message);\n}\n\nfunction decodeJwtSubject(idToken: string): string | undefined {\n const payload = idToken.split('.')[1];\n if (!payload) {\n return undefined;\n }\n try {\n const decoded = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));\n return typeof decoded.sub === 'string' ? decoded.sub : undefined;\n } catch {\n return undefined;\n }\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import type { KeyWrapContext, KeyWrapper, WrappedDataKey } from './KeyWrapper';
2
+ export declare const CLOUD_KMS_WRAP_CONTEXT_PURPOSE = "xpod.ai-gateway.cloud-kms-dek-wrap";
3
+ export declare const CLOUD_KMS_WRAP_CONTEXT_VERSION = "v1";
4
+ export interface CloudKmsEncryptInput {
5
+ keyArn: string;
6
+ plaintext: Uint8Array;
7
+ encryptionContext: Record<string, string>;
8
+ }
9
+ export interface CloudKmsDecryptInput {
10
+ keyArn?: string;
11
+ ciphertext: Uint8Array;
12
+ encryptionContext: Record<string, string>;
13
+ }
14
+ export interface CloudKmsClient {
15
+ encrypt(input: CloudKmsEncryptInput): Promise<{
16
+ ciphertext: Uint8Array;
17
+ keyId?: string;
18
+ keyVersion?: string;
19
+ }>;
20
+ decrypt(input: CloudKmsDecryptInput): Promise<{
21
+ plaintext: Uint8Array;
22
+ keyId?: string;
23
+ keyVersion?: string;
24
+ }>;
25
+ }
26
+ export interface CloudKmsWrapperOptions {
27
+ kmsClient: CloudKmsClient;
28
+ keyArn: string;
29
+ }
30
+ /**
31
+ * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the
32
+ * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.
33
+ */
34
+ export declare class CloudKmsWrapper implements KeyWrapper {
35
+ private readonly kmsClient;
36
+ private readonly keyArn;
37
+ constructor(options: CloudKmsWrapperOptions);
38
+ wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey>;
39
+ unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array>;
40
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudKmsWrapper = exports.CLOUD_KMS_WRAP_CONTEXT_VERSION = exports.CLOUD_KMS_WRAP_CONTEXT_PURPOSE = void 0;
4
+ exports.CLOUD_KMS_WRAP_CONTEXT_PURPOSE = 'xpod.ai-gateway.cloud-kms-dek-wrap';
5
+ exports.CLOUD_KMS_WRAP_CONTEXT_VERSION = 'v1';
6
+ /**
7
+ * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the
8
+ * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.
9
+ */
10
+ class CloudKmsWrapper {
11
+ constructor(options) {
12
+ this.kmsClient = options.kmsClient;
13
+ this.keyArn = options.keyArn;
14
+ }
15
+ async wrapDek(context, dek) {
16
+ const encrypted = await this.kmsClient.encrypt({
17
+ keyArn: this.keyArn,
18
+ plaintext: dek,
19
+ encryptionContext: kmsEncryptionContext(context),
20
+ });
21
+ return {
22
+ algorithm: 'cloud-kms',
23
+ keyId: encrypted.keyId ?? this.keyArn,
24
+ keyVersion: encrypted.keyVersion,
25
+ wrappedDek: Buffer.from(encrypted.ciphertext).toString('base64url'),
26
+ metadata: {
27
+ keyArn: this.keyArn,
28
+ purpose: exports.CLOUD_KMS_WRAP_CONTEXT_PURPOSE,
29
+ version: exports.CLOUD_KMS_WRAP_CONTEXT_VERSION,
30
+ },
31
+ };
32
+ }
33
+ async unwrapDek(context, wrapped) {
34
+ if (wrapped.algorithm !== 'cloud-kms') {
35
+ throw new Error('unsupported cloud KMS wrap algorithm');
36
+ }
37
+ if (wrapped.metadata?.purpose !== exports.CLOUD_KMS_WRAP_CONTEXT_PURPOSE
38
+ || wrapped.metadata?.version !== exports.CLOUD_KMS_WRAP_CONTEXT_VERSION) {
39
+ throw new Error('cloud KMS wrap domain mismatch');
40
+ }
41
+ const decrypted = await this.kmsClient.decrypt({
42
+ keyArn: wrapped.metadata?.keyArn ?? this.keyArn,
43
+ ciphertext: new Uint8Array(Buffer.from(wrapped.wrappedDek, 'base64url')),
44
+ encryptionContext: kmsEncryptionContext(context),
45
+ });
46
+ return decrypted.plaintext;
47
+ }
48
+ }
49
+ exports.CloudKmsWrapper = CloudKmsWrapper;
50
+ function kmsEncryptionContext(context) {
51
+ return {
52
+ purpose: exports.CLOUD_KMS_WRAP_CONTEXT_PURPOSE,
53
+ version: exports.CLOUD_KMS_WRAP_CONTEXT_VERSION,
54
+ webId: context.webId,
55
+ credentialIri: context.credentialIri,
56
+ provider: context.provider,
57
+ };
58
+ }
59
+ //# sourceMappingURL=CloudKmsWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudKmsWrapper.js","sourceRoot":"","sources":["../../../../src/api/ai-gateway/credentials/CloudKmsWrapper.ts"],"names":[],"mappings":";;;AAEa,QAAA,8BAA8B,GAAG,oCAAoC,CAAC;AACtE,QAAA,8BAA8B,GAAG,IAAI,CAAC;AAiCnD;;;GAGG;AACH,MAAa,eAAe;IAI1B,YAAmB,OAA+B;QAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,GAAe;QAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,GAAG;YACd,iBAAiB,EAAE,oBAAoB,CAAC,OAAO,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,WAAW;YACtB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;YACrC,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YACnE,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,sCAA8B;gBACvC,OAAO,EAAE,sCAA8B;aACxC;SACF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAAuB,EAAE,OAAuB;QACrE,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IACE,OAAO,CAAC,QAAQ,EAAE,OAAO,KAAK,sCAA8B;eACzD,OAAO,CAAC,QAAQ,EAAE,OAAO,KAAK,sCAA8B,EAC/D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM;YAC/C,UAAU,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YACxE,iBAAiB,EAAE,oBAAoB,CAAC,OAAO,CAAC;SACjD,CAAC,CAAC;QACH,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;CACF;AA9CD,0CA8CC;AAED,SAAS,oBAAoB,CAAC,OAAuB;IACnD,OAAO;QACL,OAAO,EAAE,sCAA8B;QACvC,OAAO,EAAE,sCAA8B;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import type { KeyWrapContext, KeyWrapper, WrappedDataKey } from './KeyWrapper';\n\nexport const CLOUD_KMS_WRAP_CONTEXT_PURPOSE = 'xpod.ai-gateway.cloud-kms-dek-wrap';\nexport const CLOUD_KMS_WRAP_CONTEXT_VERSION = 'v1';\n\nexport interface CloudKmsEncryptInput {\n keyArn: string;\n plaintext: Uint8Array;\n encryptionContext: Record<string, string>;\n}\n\nexport interface CloudKmsDecryptInput {\n keyArn?: string;\n ciphertext: Uint8Array;\n encryptionContext: Record<string, string>;\n}\n\nexport interface CloudKmsClient {\n encrypt(input: CloudKmsEncryptInput): Promise<{\n ciphertext: Uint8Array;\n keyId?: string;\n keyVersion?: string;\n }>;\n\n decrypt(input: CloudKmsDecryptInput): Promise<{\n plaintext: Uint8Array;\n keyId?: string;\n keyVersion?: string;\n }>;\n}\n\nexport interface CloudKmsWrapperOptions {\n kmsClient: CloudKmsClient;\n keyArn: string;\n}\n\n/**\n * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the\n * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.\n */\nexport class CloudKmsWrapper implements KeyWrapper {\n private readonly kmsClient: CloudKmsClient;\n private readonly keyArn: string;\n\n public constructor(options: CloudKmsWrapperOptions) {\n this.kmsClient = options.kmsClient;\n this.keyArn = options.keyArn;\n }\n\n public async wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey> {\n const encrypted = await this.kmsClient.encrypt({\n keyArn: this.keyArn,\n plaintext: dek,\n encryptionContext: kmsEncryptionContext(context),\n });\n\n return {\n algorithm: 'cloud-kms',\n keyId: encrypted.keyId ?? this.keyArn,\n keyVersion: encrypted.keyVersion,\n wrappedDek: Buffer.from(encrypted.ciphertext).toString('base64url'),\n metadata: {\n keyArn: this.keyArn,\n purpose: CLOUD_KMS_WRAP_CONTEXT_PURPOSE,\n version: CLOUD_KMS_WRAP_CONTEXT_VERSION,\n },\n };\n }\n\n public async unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array> {\n if (wrapped.algorithm !== 'cloud-kms') {\n throw new Error('unsupported cloud KMS wrap algorithm');\n }\n if (\n wrapped.metadata?.purpose !== CLOUD_KMS_WRAP_CONTEXT_PURPOSE\n || wrapped.metadata?.version !== CLOUD_KMS_WRAP_CONTEXT_VERSION\n ) {\n throw new Error('cloud KMS wrap domain mismatch');\n }\n const decrypted = await this.kmsClient.decrypt({\n keyArn: wrapped.metadata?.keyArn ?? this.keyArn,\n ciphertext: new Uint8Array(Buffer.from(wrapped.wrappedDek, 'base64url')),\n encryptionContext: kmsEncryptionContext(context),\n });\n return decrypted.plaintext;\n }\n}\n\nfunction kmsEncryptionContext(context: KeyWrapContext): Record<string, string> {\n return {\n purpose: CLOUD_KMS_WRAP_CONTEXT_PURPOSE,\n version: CLOUD_KMS_WRAP_CONTEXT_VERSION,\n webId: context.webId,\n credentialIri: context.credentialIri,\n provider: context.provider,\n };\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import type { EncryptedCredentialSecret } from './KeyWrapper';
2
+ export interface GatewayPrincipal {
3
+ webId: string;
4
+ }
5
+ export type ProviderSecret = Record<string, unknown>;
6
+ export interface CredentialVault {
7
+ seal(principal: GatewayPrincipal, credentialIri: string, provider: string, secret: ProviderSecret): Promise<EncryptedCredentialSecret>;
8
+ open(principal: GatewayPrincipal, credentialIri: string, provider: string, encrypted: EncryptedCredentialSecret): Promise<ProviderSecret>;
9
+ rewrap(principal: GatewayPrincipal, encrypted: EncryptedCredentialSecret): Promise<EncryptedCredentialSecret>;
10
+ needsRewrap?(encrypted: EncryptedCredentialSecret): boolean;
11
+ }
12
+ export declare class CredentialVaultError extends Error {
13
+ constructor(message?: string);
14
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CredentialVaultError = void 0;
4
+ class CredentialVaultError extends Error {
5
+ constructor(message = 'Credential secret could not be decrypted') {
6
+ super(message);
7
+ this.name = 'CredentialVaultError';
8
+ }
9
+ }
10
+ exports.CredentialVaultError = CredentialVaultError;
11
+ //# sourceMappingURL=CredentialVault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialVault.js","sourceRoot":"","sources":["../../../../src/api/ai-gateway/credentials/CredentialVault.ts"],"names":[],"mappings":";;;AA+BA,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAmB,OAAO,GAAG,0CAA0C;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,oDAKC","sourcesContent":["import type { EncryptedCredentialSecret } from './KeyWrapper';\n\nexport interface GatewayPrincipal {\n webId: string;\n}\n\nexport type ProviderSecret = Record<string, unknown>;\n\nexport interface CredentialVault {\n seal(\n principal: GatewayPrincipal,\n credentialIri: string,\n provider: string,\n secret: ProviderSecret,\n ): Promise<EncryptedCredentialSecret>;\n\n open(\n principal: GatewayPrincipal,\n credentialIri: string,\n provider: string,\n encrypted: EncryptedCredentialSecret,\n ): Promise<ProviderSecret>;\n\n rewrap(\n principal: GatewayPrincipal,\n encrypted: EncryptedCredentialSecret,\n ): Promise<EncryptedCredentialSecret>;\n\n needsRewrap?(encrypted: EncryptedCredentialSecret): boolean;\n}\n\nexport class CredentialVaultError extends Error {\n public constructor(message = 'Credential secret could not be decrypted') {\n super(message);\n this.name = 'CredentialVaultError';\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ export interface KeyWrapContext {
2
+ webId: string;
3
+ credentialIri: string;
4
+ provider: string;
5
+ }
6
+ export interface WrappedDataKey {
7
+ algorithm: string;
8
+ keyId: string;
9
+ keyVersion?: string;
10
+ wrappedDek: string;
11
+ metadata?: Record<string, string>;
12
+ }
13
+ export interface EncryptedCredentialSecret extends WrappedDataKey {
14
+ algorithm: 'AES-256-GCM';
15
+ aadPurpose: string;
16
+ aadVersion: string;
17
+ ciphertext: string;
18
+ nonce: string;
19
+ webId: string;
20
+ credentialIri: string;
21
+ provider: string;
22
+ dekWrapAlgorithm: string;
23
+ }
24
+ export interface KeyWrapper {
25
+ wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey>;
26
+ unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array>;
27
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=KeyWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyWrapper.js","sourceRoot":"","sources":["../../../../src/api/ai-gateway/credentials/KeyWrapper.ts"],"names":[],"mappings":"","sourcesContent":["export interface KeyWrapContext {\n webId: string;\n credentialIri: string;\n provider: string;\n}\n\nexport interface WrappedDataKey {\n algorithm: string;\n keyId: string;\n keyVersion?: string;\n wrappedDek: string;\n metadata?: Record<string, string>;\n}\n\nexport interface EncryptedCredentialSecret extends WrappedDataKey {\n algorithm: 'AES-256-GCM';\n aadPurpose: string;\n aadVersion: string;\n ciphertext: string;\n nonce: string;\n webId: string;\n credentialIri: string;\n provider: string;\n dekWrapAlgorithm: string;\n}\n\nexport interface KeyWrapper {\n wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey>;\n unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array>;\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { KeyWrapContext, KeyWrapper, WrappedDataKey } from './KeyWrapper';
2
+ export declare const LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE = "xpod.ai-gateway.local-keychain-dek-wrap";
3
+ export declare const LOCAL_KEYCHAIN_WRAP_AAD_VERSION = "v1";
4
+ export interface LocalSecureStore {
5
+ getSecret(key: string): Promise<string | null>;
6
+ setSecret(key: string, value: string): Promise<void>;
7
+ getOrCreateSecret?(key: string, create: () => Promise<string>): Promise<string>;
8
+ }
9
+ export interface LocalKeychainWrapperOptions {
10
+ secureStore: LocalSecureStore;
11
+ keyId: string;
12
+ keyVersion?: string;
13
+ }
14
+ /**
15
+ * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the
16
+ * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.
17
+ */
18
+ export declare class LocalKeychainWrapper implements KeyWrapper {
19
+ private readonly secureStore;
20
+ private readonly keyId;
21
+ private readonly keyVersion?;
22
+ constructor(options: LocalKeychainWrapperOptions);
23
+ wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey>;
24
+ unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array>;
25
+ private getOrCreateMasterKey;
26
+ private getExistingMasterKey;
27
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalKeychainWrapper = exports.LOCAL_KEYCHAIN_WRAP_AAD_VERSION = exports.LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const LOCAL_MASTER_KEY_BYTES = 32;
6
+ const LOCAL_WRAP_NONCE_BYTES = 12;
7
+ exports.LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE = 'xpod.ai-gateway.local-keychain-dek-wrap';
8
+ exports.LOCAL_KEYCHAIN_WRAP_AAD_VERSION = 'v1';
9
+ /**
10
+ * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the
11
+ * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.
12
+ */
13
+ class LocalKeychainWrapper {
14
+ constructor(options) {
15
+ this.secureStore = options.secureStore;
16
+ this.keyId = options.keyId;
17
+ this.keyVersion = options.keyVersion;
18
+ }
19
+ async wrapDek(context, dek) {
20
+ const masterKey = await this.getOrCreateMasterKey();
21
+ try {
22
+ const nonce = node_crypto_1.webcrypto.getRandomValues(new Uint8Array(LOCAL_WRAP_NONCE_BYTES));
23
+ const cryptoKey = await importMasterKey(masterKey, ['encrypt']);
24
+ const ciphertext = new Uint8Array(await node_crypto_1.webcrypto.subtle.encrypt({ name: 'AES-GCM', iv: nonce, additionalData: localWrapAad(context, this.keyId) }, cryptoKey, dek));
25
+ return {
26
+ algorithm: 'local-keychain-aes-256-gcm',
27
+ keyId: this.keyId,
28
+ keyVersion: this.keyVersion,
29
+ wrappedDek: encodeBase64Url(ciphertext),
30
+ metadata: {
31
+ nonce: encodeBase64Url(nonce),
32
+ purpose: exports.LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE,
33
+ version: exports.LOCAL_KEYCHAIN_WRAP_AAD_VERSION,
34
+ },
35
+ };
36
+ }
37
+ finally {
38
+ // This wipes only the decoded master-key bytes owned by this wrapper call.
39
+ // The secure-store string and WebCrypto internal/native copies are outside
40
+ // JavaScript's reliable zeroization boundary.
41
+ masterKey.fill(0);
42
+ }
43
+ }
44
+ async unwrapDek(context, wrapped) {
45
+ if (wrapped.algorithm !== 'local-keychain-aes-256-gcm') {
46
+ throw new Error('unsupported local keychain wrap algorithm');
47
+ }
48
+ const nonce = wrapped.metadata?.nonce;
49
+ if (!nonce) {
50
+ throw new Error('missing local keychain wrap nonce');
51
+ }
52
+ if (wrapped.metadata?.purpose !== exports.LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE
53
+ || wrapped.metadata?.version !== exports.LOCAL_KEYCHAIN_WRAP_AAD_VERSION) {
54
+ throw new Error('local keychain wrap domain mismatch');
55
+ }
56
+ const masterKey = await this.getExistingMasterKey(wrapped.keyId);
57
+ try {
58
+ const cryptoKey = await importMasterKey(masterKey, ['decrypt']);
59
+ const dek = await node_crypto_1.webcrypto.subtle.decrypt({
60
+ name: 'AES-GCM',
61
+ iv: decodeBase64Url(nonce),
62
+ additionalData: localWrapAad(context, wrapped.keyId),
63
+ }, cryptoKey, decodeBase64Url(wrapped.wrappedDek));
64
+ return new Uint8Array(dek);
65
+ }
66
+ finally {
67
+ masterKey.fill(0);
68
+ }
69
+ }
70
+ async getOrCreateMasterKey() {
71
+ if (this.secureStore.getOrCreateSecret) {
72
+ return decodeBase64Url(await this.secureStore.getOrCreateSecret(this.keyId, async () => generateMasterKeySecret()));
73
+ }
74
+ return decodeBase64Url(await getOrCreateLocalSecret(this.secureStore, this.keyId));
75
+ }
76
+ async getExistingMasterKey(keyId) {
77
+ const existing = await this.secureStore.getSecret(keyId);
78
+ if (!existing) {
79
+ throw new Error('missing local keychain master key');
80
+ }
81
+ return decodeBase64Url(existing);
82
+ }
83
+ }
84
+ exports.LocalKeychainWrapper = LocalKeychainWrapper;
85
+ async function importMasterKey(keyMaterial, usages) {
86
+ return await node_crypto_1.webcrypto.subtle.importKey('raw', toArrayBuffer(keyMaterial), { name: 'AES-GCM', length: 256 }, false, usages);
87
+ }
88
+ function localWrapAad(context, keyId) {
89
+ return new TextEncoder().encode(JSON.stringify({
90
+ purpose: exports.LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE,
91
+ version: exports.LOCAL_KEYCHAIN_WRAP_AAD_VERSION,
92
+ keyId,
93
+ webId: context.webId,
94
+ credentialIri: context.credentialIri,
95
+ provider: context.provider,
96
+ }));
97
+ }
98
+ function toArrayBuffer(bytes) {
99
+ return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
100
+ }
101
+ function encodeBase64Url(bytes) {
102
+ return Buffer.from(bytes).toString('base64url');
103
+ }
104
+ function decodeBase64Url(value) {
105
+ return new Uint8Array(Buffer.from(value, 'base64url'));
106
+ }
107
+ const localMasterKeyInitializers = new Map();
108
+ async function getOrCreateLocalSecret(secureStore, keyId) {
109
+ const existing = await secureStore.getSecret(keyId);
110
+ if (existing) {
111
+ return existing;
112
+ }
113
+ const running = localMasterKeyInitializers.get(keyId);
114
+ if (running) {
115
+ return await running;
116
+ }
117
+ const created = (async () => {
118
+ const existingInsideSingleflight = await secureStore.getSecret(keyId);
119
+ if (existingInsideSingleflight) {
120
+ return existingInsideSingleflight;
121
+ }
122
+ const secret = generateMasterKeySecret();
123
+ await secureStore.setSecret(keyId, secret);
124
+ return secret;
125
+ })();
126
+ localMasterKeyInitializers.set(keyId, created);
127
+ try {
128
+ return await created;
129
+ }
130
+ finally {
131
+ if (localMasterKeyInitializers.get(keyId) === created) {
132
+ localMasterKeyInitializers.delete(keyId);
133
+ }
134
+ }
135
+ }
136
+ function generateMasterKeySecret() {
137
+ const key = node_crypto_1.webcrypto.getRandomValues(new Uint8Array(LOCAL_MASTER_KEY_BYTES));
138
+ try {
139
+ return encodeBase64Url(key);
140
+ }
141
+ finally {
142
+ key.fill(0);
143
+ }
144
+ }
145
+ //# sourceMappingURL=LocalKeychainWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalKeychainWrapper.js","sourceRoot":"","sources":["../../../../src/api/ai-gateway/credentials/LocalKeychainWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { webcrypto } from 'node:crypto';\nimport type { KeyWrapContext, KeyWrapper, WrappedDataKey } from './KeyWrapper';\n\nconst LOCAL_MASTER_KEY_BYTES = 32;\nconst LOCAL_WRAP_NONCE_BYTES = 12;\n\nexport const LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE = 'xpod.ai-gateway.local-keychain-dek-wrap';\nexport const LOCAL_KEYCHAIN_WRAP_AAD_VERSION = 'v1';\n\nexport interface LocalSecureStore {\n getSecret(key: string): Promise<string | null>;\n setSecret(key: string, value: string): Promise<void>;\n getOrCreateSecret?(key: string, create: () => Promise<string>): Promise<string>;\n}\n\nexport interface LocalKeychainWrapperOptions {\n secureStore: LocalSecureStore;\n keyId: string;\n keyVersion?: string;\n}\n\n/**\n * @deprecated Compatibility-only adapter. Production Xpod bootstrap uses the\n * generic Pod SecretCell keyring configured through XPOD_SECRET_CELL_*.\n */\nexport class LocalKeychainWrapper implements KeyWrapper {\n private readonly secureStore: LocalSecureStore;\n private readonly keyId: string;\n private readonly keyVersion?: string;\n\n public constructor(options: LocalKeychainWrapperOptions) {\n this.secureStore = options.secureStore;\n this.keyId = options.keyId;\n this.keyVersion = options.keyVersion;\n }\n\n public async wrapDek(context: KeyWrapContext, dek: Uint8Array): Promise<WrappedDataKey> {\n const masterKey = await this.getOrCreateMasterKey();\n try {\n const nonce = webcrypto.getRandomValues(new Uint8Array(LOCAL_WRAP_NONCE_BYTES));\n const cryptoKey = await importMasterKey(masterKey, ['encrypt']);\n const ciphertext = new Uint8Array(await webcrypto.subtle.encrypt(\n { name: 'AES-GCM', iv: nonce, additionalData: localWrapAad(context, this.keyId) },\n cryptoKey,\n dek,\n ));\n\n return {\n algorithm: 'local-keychain-aes-256-gcm',\n keyId: this.keyId,\n keyVersion: this.keyVersion,\n wrappedDek: encodeBase64Url(ciphertext),\n metadata: {\n nonce: encodeBase64Url(nonce),\n purpose: LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE,\n version: LOCAL_KEYCHAIN_WRAP_AAD_VERSION,\n },\n };\n } finally {\n // This wipes only the decoded master-key bytes owned by this wrapper call.\n // The secure-store string and WebCrypto internal/native copies are outside\n // JavaScript's reliable zeroization boundary.\n masterKey.fill(0);\n }\n }\n\n public async unwrapDek(context: KeyWrapContext, wrapped: WrappedDataKey): Promise<Uint8Array> {\n if (wrapped.algorithm !== 'local-keychain-aes-256-gcm') {\n throw new Error('unsupported local keychain wrap algorithm');\n }\n const nonce = wrapped.metadata?.nonce;\n if (!nonce) {\n throw new Error('missing local keychain wrap nonce');\n }\n if (\n wrapped.metadata?.purpose !== LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE\n || wrapped.metadata?.version !== LOCAL_KEYCHAIN_WRAP_AAD_VERSION\n ) {\n throw new Error('local keychain wrap domain mismatch');\n }\n const masterKey = await this.getExistingMasterKey(wrapped.keyId);\n try {\n const cryptoKey = await importMasterKey(masterKey, ['decrypt']);\n const dek = await webcrypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: decodeBase64Url(nonce),\n additionalData: localWrapAad(context, wrapped.keyId),\n },\n cryptoKey,\n decodeBase64Url(wrapped.wrappedDek),\n );\n return new Uint8Array(dek);\n } finally {\n masterKey.fill(0);\n }\n }\n\n private async getOrCreateMasterKey(): Promise<Uint8Array> {\n if (this.secureStore.getOrCreateSecret) {\n return decodeBase64Url(await this.secureStore.getOrCreateSecret(\n this.keyId,\n async () => generateMasterKeySecret(),\n ));\n }\n return decodeBase64Url(await getOrCreateLocalSecret(this.secureStore, this.keyId));\n }\n\n private async getExistingMasterKey(keyId: string): Promise<Uint8Array> {\n const existing = await this.secureStore.getSecret(keyId);\n if (!existing) {\n throw new Error('missing local keychain master key');\n }\n return decodeBase64Url(existing);\n }\n}\n\nasync function importMasterKey(keyMaterial: Uint8Array, usages: KeyUsage[]): Promise<CryptoKey> {\n return await webcrypto.subtle.importKey(\n 'raw',\n toArrayBuffer(keyMaterial),\n { name: 'AES-GCM', length: 256 },\n false,\n usages,\n );\n}\n\nfunction localWrapAad(context: KeyWrapContext, keyId: string): Uint8Array {\n return new TextEncoder().encode(JSON.stringify({\n purpose: LOCAL_KEYCHAIN_WRAP_AAD_PURPOSE,\n version: LOCAL_KEYCHAIN_WRAP_AAD_VERSION,\n keyId,\n webId: context.webId,\n credentialIri: context.credentialIri,\n provider: context.provider,\n }));\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);\n}\n\nfunction encodeBase64Url(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('base64url');\n}\n\nfunction decodeBase64Url(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, 'base64url'));\n}\n\nconst localMasterKeyInitializers = new Map<string, Promise<string>>();\n\nasync function getOrCreateLocalSecret(secureStore: LocalSecureStore, keyId: string): Promise<string> {\n const existing = await secureStore.getSecret(keyId);\n if (existing) {\n return existing;\n }\n\n const running = localMasterKeyInitializers.get(keyId);\n if (running) {\n return await running;\n }\n\n const created = (async (): Promise<string> => {\n const existingInsideSingleflight = await secureStore.getSecret(keyId);\n if (existingInsideSingleflight) {\n return existingInsideSingleflight;\n }\n const secret = generateMasterKeySecret();\n await secureStore.setSecret(keyId, secret);\n return secret;\n })();\n localMasterKeyInitializers.set(keyId, created);\n try {\n return await created;\n } finally {\n if (localMasterKeyInitializers.get(keyId) === created) {\n localMasterKeyInitializers.delete(keyId);\n }\n }\n}\n\nfunction generateMasterKeySecret(): string {\n const key = webcrypto.getRandomValues(new Uint8Array(LOCAL_MASTER_KEY_BYTES));\n try {\n return encodeBase64Url(key);\n } finally {\n key.fill(0);\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { CredentialVault, GatewayPrincipal, ProviderSecret } from './CredentialVault';
2
+ import type { EncryptedCredentialSecret } from './KeyWrapper';
3
+ import { SecretCellVault } from '../../../security/secret-cell';
4
+ export declare class SecretCellCredentialVault implements CredentialVault {
5
+ private readonly vault;
6
+ constructor(options: {
7
+ vault: SecretCellVault;
8
+ });
9
+ seal(principal: GatewayPrincipal, credentialIri: string, provider: string, secret: ProviderSecret): Promise<EncryptedCredentialSecret>;
10
+ open(principal: GatewayPrincipal, credentialIri: string, provider: string, encrypted: EncryptedCredentialSecret): Promise<ProviderSecret>;
11
+ rewrap(principal: GatewayPrincipal, encrypted: EncryptedCredentialSecret): Promise<EncryptedCredentialSecret>;
12
+ needsRewrap(encrypted: EncryptedCredentialSecret): boolean;
13
+ }