@undefineds.co/xpod 0.4.14 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/config/cloud.json +0 -3
  2. package/config/local.json +0 -3
  3. package/config/xpod.base.json +0 -24
  4. package/dist/api/ai-config/AiConfigStore.d.ts +2 -2
  5. package/dist/api/ai-config/AiConfigStore.js +4 -1
  6. package/dist/api/ai-gateway/auth/CallerPodAccess.d.ts +2 -5
  7. package/dist/api/ai-gateway/auth/CallerPodAccess.js +3 -42
  8. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +2 -1
  9. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +1 -1
  10. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +3 -8
  11. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +9 -32
  12. package/dist/api/ai-gateway/connect/index.d.ts +3 -3
  13. package/dist/api/ai-gateway/connect/index.js +9 -38
  14. package/dist/api/ai-gateway/errors.js +2 -1
  15. package/dist/api/ai-gateway/models/PodModelSelectionRepository.d.ts +3 -3
  16. package/dist/api/ai-gateway/models/PodModelSelectionRepository.js +7 -11
  17. package/dist/api/ai-gateway/pod/HostedPodRoute.d.ts +27 -0
  18. package/dist/api/ai-gateway/pod/HostedPodRoute.js +47 -0
  19. package/dist/api/ai-gateway/pod/OwnerPodAccess.d.ts +79 -0
  20. package/dist/api/ai-gateway/pod/OwnerPodAccess.js +192 -0
  21. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.d.ts +52 -0
  22. package/dist/api/ai-gateway/pod/PodInterfaceKeyStore.js +61 -0
  23. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +3 -3
  24. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +7 -32
  25. package/dist/api/auth/ClientCredentialsAuthenticator.js +5 -28
  26. package/dist/api/auth/TokenEndpointRoute.d.ts +18 -0
  27. package/dist/api/auth/TokenEndpointRoute.js +36 -0
  28. package/dist/api/chatkit/pod-store.d.ts +4 -4
  29. package/dist/api/chatkit/pod-store.js +24 -95
  30. package/dist/api/container/common.js +36 -23
  31. package/dist/api/container/local.js +62 -29
  32. package/dist/api/container/routes.js +39 -7
  33. package/dist/api/container/types.d.ts +2 -2
  34. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +6 -0
  35. package/dist/api/handlers/AiGatewayManagementHandler.js +17 -4
  36. package/dist/api/handlers/NetworkSettingsHandler.d.ts +7 -0
  37. package/dist/api/handlers/NetworkSettingsHandler.js +7 -0
  38. package/dist/api/handlers/PodSettingsHandler.d.ts +3 -3
  39. package/dist/api/handlers/PodSettingsHandler.js +3 -3
  40. package/dist/api/handlers/ProvisionHandler.d.ts +29 -0
  41. package/dist/api/handlers/ProvisionHandler.js +46 -0
  42. package/dist/api/handlers/ReachabilityHandler.js +3 -1
  43. package/dist/api/runtime.d.ts +9 -0
  44. package/dist/api/runtime.js +16 -3
  45. package/dist/cli/commands/start.d.ts +9 -2
  46. package/dist/cli/commands/start.js +15 -17
  47. package/dist/components/components.jsonld +1 -1
  48. package/dist/components/context.jsonld +5 -42
  49. package/dist/edge/EdgeNodeAgent.d.ts +10 -0
  50. package/dist/edge/EdgeNodeAgent.js +55 -0
  51. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  52. package/dist/edge/reachability/ReachabilitySessionService.js +4 -1
  53. package/dist/edge/reachability/RouteSetBuilder.d.ts +18 -1
  54. package/dist/edge/reachability/RouteSetBuilder.js +47 -0
  55. package/dist/edge/reachability/RouteSetBuilder.jsonld +29 -0
  56. package/dist/edge/reachability/types.d.ts +8 -2
  57. package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -25
  58. package/dist/http/SubgraphSparqlHttpHandler.js +0 -100
  59. package/dist/http/SubgraphSparqlHttpHandler.jsonld +0 -8
  60. package/dist/identity/drizzle/PodInterfaceKeyRepository.d.ts +33 -0
  61. package/dist/identity/drizzle/PodInterfaceKeyRepository.js +78 -0
  62. package/dist/identity/drizzle/db.d.ts +7 -0
  63. package/dist/identity/drizzle/db.js +30 -0
  64. package/dist/identity/drizzle/schema.pg.d.ts +9 -0
  65. package/dist/identity/drizzle/schema.pg.js +16 -1
  66. package/dist/identity/drizzle/schema.sqlite.d.ts +106 -0
  67. package/dist/identity/drizzle/schema.sqlite.js +16 -1
  68. package/dist/index.d.ts +1 -2
  69. package/dist/index.js +3 -5
  70. package/dist/runtime/GatewayAdminProxyAuth.d.ts +1 -16
  71. package/dist/runtime/GatewayAdminProxyAuth.js +2 -71
  72. package/dist/runtime/Proxy.d.ts +10 -1
  73. package/dist/runtime/Proxy.js +95 -28
  74. package/dist/runtime/bootstrap.d.ts +10 -0
  75. package/dist/runtime/bootstrap.js +24 -0
  76. package/dist/runtime/host/node/NodeRuntimeHost.js +5 -3
  77. package/dist/runtime/index.d.ts +1 -1
  78. package/dist/runtime/index.js +2 -3
  79. package/dist/runtime/js-runtime.js +10 -3
  80. package/dist/runtime/lifecycle.js +5 -4
  81. package/dist/runtime/port-finder.d.ts +9 -13
  82. package/dist/runtime/port-finder.js +18 -37
  83. package/dist/tunnel/AutoTunnelProvider.d.ts +56 -0
  84. package/dist/tunnel/AutoTunnelProvider.js +181 -0
  85. package/dist/tunnel/index.d.ts +1 -0
  86. package/dist/tunnel/index.js +3 -1
  87. package/node_modules/@undefineds.co/ai-connections/dist/error-wording.js +7 -2
  88. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.cjs +230 -0
  89. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.d.ts +76 -0
  90. package/node_modules/@undefineds.co/solid-sdk/dist/access-route.js +115 -0
  91. package/node_modules/@undefineds.co/solid-sdk/dist/index.cjs +89 -0
  92. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +1 -0
  93. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +1 -0
  94. package/node_modules/@undefineds.co/solid-sdk/package.json +6 -1
  95. package/package.json +2 -2
  96. package/static/app/assets/inrupt-smoke.js +23 -23
  97. package/static/auth-callback/assets/{AiConfigContext-DCXpjzpj.js → AiConfigContext-Bx0HCAW5.js} +1 -1
  98. package/static/auth-callback/assets/{AiConfigPage-fe-xMIXa.js → AiConfigPage-ChQImMbm.js} +1 -1
  99. package/static/auth-callback/assets/{DocumentProcessingPanel-BGnkfMuU.js → DocumentProcessingPanel-D830H4SH.js} +1 -1
  100. package/static/auth-callback/assets/{IndexLifecyclePanel-42Jups0j.js → IndexLifecyclePanel-CnlkjMF8.js} +1 -1
  101. package/static/auth-callback/assets/{IndexSubjectPanel-CYyLOlQU.js → IndexSubjectPanel-CdEfg_CO.js} +1 -1
  102. package/static/auth-callback/assets/{ModelAssignmentsPanel-BOvUH4yr.js → ModelAssignmentsPanel-D-8A8dZx.js} +1 -1
  103. package/static/auth-callback/assets/{ModelsPage-DwyITxt7.js → ModelsPage-Cim7cubp.js} +3 -3
  104. package/static/auth-callback/assets/{NetworkPage-CG9RelJA.js → NetworkPage-CfK3x-pb.js} +2 -2
  105. package/static/auth-callback/assets/{PaneListHeader-yvd5ohs6.js → PaneListHeader-Bf_kEd4U.js} +1 -1
  106. package/static/auth-callback/assets/{SearchIndexingPanel-2_a6ezzj.js → SearchIndexingPanel-4kD4RBEQ.js} +1 -1
  107. package/static/auth-callback/assets/{StatusSubjectPanel-8qtVxnzC.js → StatusSubjectPanel-Bw9AiTSf.js} +1 -1
  108. package/static/auth-callback/assets/{StatusWorkspace-CBdRahCF.js → StatusWorkspace-C-301H-0.js} +1 -1
  109. package/static/auth-callback/assets/{SystemSettingsPage-BZJ6vWkg.js → SystemSettingsPage-BbWn-eG6.js} +1 -1
  110. package/static/auth-callback/assets/{SystemSettingsSubjectPanel-xm08UhXP.js → SystemSettingsSubjectPanel-DA4wvNSm.js} +1 -1
  111. package/static/auth-callback/assets/{XpodAiConnectionsPodStore-V6vgGfuw.js → XpodAiConnectionsPodStore-CohdyLoX.js} +1 -1
  112. package/static/auth-callback/assets/{activity-CeM7xly8.js → activity-CCsb9Oam.js} +1 -1
  113. package/static/auth-callback/assets/ai-connections-DexTPyfC.js +1 -0
  114. package/static/auth-callback/assets/{auth-callback-DTG8cSj7.js → auth-callback-Ds-c62W3.js} +5 -5
  115. package/static/auth-callback/assets/{badge-qJo2Zr4d.js → badge-CQm5OyzR.js} +1 -1
  116. package/static/auth-callback/assets/{collection-runtime-Bztsz31a.js → collection-runtime-DlAuU5TW.js} +1 -1
  117. package/static/auth-callback/assets/{dialog-D-h6x5x0.js → dialog-CnGzg5Ff.js} +1 -1
  118. package/static/auth-callback/assets/{download-C2ir4lmR.js → download-DwMONJvm.js} +1 -1
  119. package/static/auth-callback/assets/{external-link-THLDL4On.js → external-link-Bu5AGqCO.js} +1 -1
  120. package/static/auth-callback/assets/{index-BlVZb9A7.js → index-B0T-1YO8.js} +1 -1
  121. package/static/auth-callback/assets/{index-BRpv4yO3.js → index-C8QZf_4W.js} +1 -1
  122. package/static/auth-callback/assets/{index-D983R1FV.js → index-DwIlrIDG.js} +1 -1
  123. package/static/auth-callback/assets/{index-browser-3FvR0aaf.js → index-browser-lRsMcP_7.js} +1 -1
  124. package/static/auth-callback/assets/{key-round-C9U5j1Ly.js → key-round-BDMtU57P.js} +1 -1
  125. package/static/auth-callback/assets/{rotate-ccw-DP45cD4o.js → rotate-ccw-CoKIGCsQ.js} +1 -1
  126. package/static/auth-callback/assets/{skeleton-Dn4EiSCS.js → skeleton-CPoSWHDr.js} +1 -1
  127. package/static/auth-callback/assets/{waypoints-uqFQ3uEG.js → waypoints-BeYHxqHv.js} +1 -1
  128. package/static/auth-callback/assets/{workspace-layout-DLYK0Wwu.js → workspace-layout-xA5YxiK3.js} +1 -1
  129. package/static/auth-callback/auth-callback.html +1 -1
  130. package/static/dashboard/assets/{AiConfigContext-DJcMECNw.js → AiConfigContext-rWx4TyiH.js} +1 -1
  131. package/static/dashboard/assets/{AiConfigPage-BvE7dOTy.js → AiConfigPage-StVJpDFT.js} +1 -1
  132. package/static/dashboard/assets/{DocumentProcessingPanel-D9780krf.js → DocumentProcessingPanel-DJ5yul2O.js} +1 -1
  133. package/static/dashboard/assets/{IndexLifecyclePanel-SjsUcnbM.js → IndexLifecyclePanel-CpjtgezK.js} +1 -1
  134. package/static/dashboard/assets/{IndexSubjectPanel-C-ym2Tqi.js → IndexSubjectPanel-BVKcot1_.js} +1 -1
  135. package/static/dashboard/assets/{ModelAssignmentsPanel-BRjZ-arB.js → ModelAssignmentsPanel-BxVgWZPc.js} +1 -1
  136. package/static/dashboard/assets/{ModelsPage-BtTU6du3.js → ModelsPage-CECBwmeO.js} +3 -3
  137. package/static/dashboard/assets/{NetworkPage-CV9qpkDg.js → NetworkPage-zQgFscEW.js} +2 -2
  138. package/static/dashboard/assets/{PaneListHeader-KyPTTBsv.js → PaneListHeader-DIPe8pS6.js} +1 -1
  139. package/static/dashboard/assets/{SearchIndexingPanel-DolHGawg.js → SearchIndexingPanel-lalFJ3c8.js} +1 -1
  140. package/static/dashboard/assets/{StatusSubjectPanel-_YZvKiYi.js → StatusSubjectPanel-CpY_KU-G.js} +1 -1
  141. package/static/dashboard/assets/{StatusWorkspace-Dlbh_G40.js → StatusWorkspace-BwWCii3A.js} +1 -1
  142. package/static/dashboard/assets/{SystemSettingsPage-Be7QSIoz.js → SystemSettingsPage-BKZxX-_n.js} +1 -1
  143. package/static/dashboard/assets/{SystemSettingsSubjectPanel-DBp0gja7.js → SystemSettingsSubjectPanel-BZrqb2C5.js} +1 -1
  144. package/static/dashboard/assets/{XpodAiConnectionsPodStore-ClpSjzpP.js → XpodAiConnectionsPodStore-Bbpx9dTN.js} +1 -1
  145. package/static/dashboard/assets/{activity-lsNbTXJu.js → activity-BJ15TLVP.js} +1 -1
  146. package/static/dashboard/assets/ai-connections-GG6qkTJt.js +1 -0
  147. package/static/dashboard/assets/{badge-CVatKjaG.js → badge-BBX5FlaB.js} +1 -1
  148. package/static/dashboard/assets/{collection-runtime-Ec4UnY28.js → collection-runtime-UBbHBzdf.js} +1 -1
  149. package/static/dashboard/assets/{dashboard-BEzsRsvF.js → dashboard-7Y6BHyV9.js} +62 -62
  150. package/static/dashboard/assets/{dialog-BuyelQ4V.js → dialog-QrOJ-hB0.js} +1 -1
  151. package/static/dashboard/assets/{download-B4Nf678F.js → download-DK9x-VOP.js} +1 -1
  152. package/static/dashboard/assets/{external-link-PYv9CvKL.js → external-link-Cnkn87mJ.js} +1 -1
  153. package/static/dashboard/assets/{index-C9XPE-mI.js → index-B1z84it5.js} +1 -1
  154. package/static/dashboard/assets/{index-awr7ulur.js → index-DzjauX3N.js} +1 -1
  155. package/static/dashboard/assets/{index-Cx69bTNh.js → index-cIa8_efI.js} +1 -1
  156. package/static/dashboard/assets/{key-round-VsY80U1Z.js → key-round-BoS6UqKz.js} +1 -1
  157. package/static/dashboard/assets/{rotate-ccw-Cz1K4vE9.js → rotate-ccw-BeWV76i0.js} +1 -1
  158. package/static/dashboard/assets/{skeleton-BhNv_8tO.js → skeleton-CypcJL07.js} +1 -1
  159. package/static/dashboard/assets/{waypoints-DYS9XFYV.js → waypoints-zHOOqfhi.js} +1 -1
  160. package/static/dashboard/assets/{workspace-layout-OZJAFx5V.js → workspace-layout-DZ9JuxnM.js} +1 -1
  161. package/static/dashboard/dashboard.html +1 -1
  162. package/static/settings/assets/{AiConfigContext-B8JS3MXF.js → AiConfigContext-D3b1l_Kw.js} +1 -1
  163. package/static/settings/assets/{AiConfigPage-C3Zl8LUl.js → AiConfigPage-DYKw-atP.js} +1 -1
  164. package/static/settings/assets/{DocumentProcessingPanel-DpDZAQvf.js → DocumentProcessingPanel-DguRfsIV.js} +1 -1
  165. package/static/settings/assets/{IndexLifecyclePanel-Ec1XF88t.js → IndexLifecyclePanel-B85qJJA4.js} +1 -1
  166. package/static/settings/assets/{IndexSubjectPanel-BulT9BmO.js → IndexSubjectPanel-CsN7IxaV.js} +1 -1
  167. package/static/settings/assets/{ModelAssignmentsPanel-BcGSmYjb.js → ModelAssignmentsPanel-DEp9byI6.js} +1 -1
  168. package/static/settings/assets/{ModelsPage-CvTCKy1T.js → ModelsPage-CzTnPs_G.js} +3 -3
  169. package/static/settings/assets/{NetworkPage-DQF5u9Bn.js → NetworkPage-BDVnmUU0.js} +2 -2
  170. package/static/settings/assets/{PaneListHeader-D40hqcVl.js → PaneListHeader-Cpe39N76.js} +1 -1
  171. package/static/settings/assets/{SearchIndexingPanel-iCUPOx_0.js → SearchIndexingPanel-DA9w8lLL.js} +1 -1
  172. package/static/settings/assets/{StatusSubjectPanel-E--ZHSql.js → StatusSubjectPanel-BU0Aq0CS.js} +1 -1
  173. package/static/settings/assets/{StatusWorkspace-YjDAx1II.js → StatusWorkspace-D1AC1i5N.js} +1 -1
  174. package/static/settings/assets/{SystemSettingsPage-CDdV3mC9.js → SystemSettingsPage-ChKvOioO.js} +1 -1
  175. package/static/settings/assets/{SystemSettingsSubjectPanel-Br8WazDq.js → SystemSettingsSubjectPanel-DyTpOnD2.js} +1 -1
  176. package/static/settings/assets/{XpodAiConnectionsPodStore-CLr38P_Z.js → XpodAiConnectionsPodStore-VU5Bsz1a.js} +1 -1
  177. package/static/settings/assets/{activity-C5DAHHTE.js → activity-DGpLfsQB.js} +1 -1
  178. package/static/settings/assets/ai-connections-DexTPyfC.js +1 -0
  179. package/static/settings/assets/{badge-D8eIyxKt.js → badge-_hCrrWRP.js} +1 -1
  180. package/static/settings/assets/{collection-runtime-DLc9zil8.js → collection-runtime-E40TZ8Cl.js} +1 -1
  181. package/static/settings/assets/{dialog-CyuR7Va4.js → dialog-DTr2JkHn.js} +1 -1
  182. package/static/settings/assets/{download-c0oxZrCz.js → download-B_D21DDX.js} +1 -1
  183. package/static/settings/assets/{external-link-D3Z34fP_.js → external-link-BATYaM13.js} +1 -1
  184. package/static/settings/assets/{index-CSr3-2Cj.js → index-BAlAVi-J.js} +1 -1
  185. package/static/settings/assets/{index-ComidxAm.js → index-Ckh4h9jj.js} +1 -1
  186. package/static/settings/assets/{index-CKGbRFlc.js → index-DOiwLF4B.js} +1 -1
  187. package/static/settings/assets/{index-browser-CAscEbae.js → index-browser-DFFWN3Kr.js} +1 -1
  188. package/static/settings/assets/{key-round-DyjLmXuB.js → key-round-ZTVU_1O1.js} +1 -1
  189. package/static/settings/assets/{rotate-ccw-679HF_ec.js → rotate-ccw-DDdw8PTU.js} +1 -1
  190. package/static/settings/assets/{settings-DKknqu4C.js → settings-CyLnISOv.js} +62 -62
  191. package/static/settings/assets/{skeleton-CkopNkPB.js → skeleton-DEzA3hc2.js} +1 -1
  192. package/static/settings/assets/{waypoints-CrqfAftE.js → waypoints-BSdfNvEb.js} +1 -1
  193. package/static/settings/assets/{workspace-layout-UN6c4qTG.js → workspace-layout-BOQnl_3d.js} +1 -1
  194. package/static/settings/settings.html +1 -1
  195. package/dist/api/ai-gateway/pod/HostedPodDataAccess.d.ts +0 -31
  196. package/dist/api/ai-gateway/pod/HostedPodDataAccess.js +0 -330
  197. package/dist/http/InternalPodDataHttpHandler.d.ts +0 -57
  198. package/dist/http/InternalPodDataHttpHandler.js +0 -551
  199. package/dist/http/InternalPodDataHttpHandler.jsonld +0 -243
  200. package/static/auth-callback/assets/ai-connections-C6yaE6WQ.js +0 -1
  201. package/static/dashboard/assets/ai-connections-CXp5gd1J.js +0 -1
  202. package/static/settings/assets/ai-connections-C6yaE6WQ.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { HttpHandler } from '@solid/community-server';
2
- import type { HttpHandlerInput, HttpRequest, HttpResponse } from '@solid/community-server';
2
+ import type { HttpHandlerInput } from '@solid/community-server';
3
3
  import type { ActivityEmitter, CredentialsExtractor, PermissionReader, Authorizer } from '@solid/community-server';
4
4
  import { SubgraphQueryEngine } from '../storage/sparql/SubgraphQueryEngine';
5
5
  import { MixDataAccessor } from '../storage/accessors/MixDataAccessor';
@@ -14,22 +14,6 @@ interface SubgraphSparqlHttpHandlerOptions {
14
14
  usageDbUrl?: string;
15
15
  defaultAccountBandwidthLimitBps?: number | null;
16
16
  }
17
- export interface TrustedSubgraphSparqlHandler {
18
- handleTrustedInternalSelect(input: {
19
- ownerWebId: string;
20
- endpointUrl: string;
21
- query: string;
22
- request: HttpRequest;
23
- response: HttpResponse;
24
- }): Promise<void>;
25
- handleTrustedInternalUpdate(input: {
26
- ownerWebId: string;
27
- endpointUrl: string;
28
- query: string;
29
- request: HttpRequest;
30
- response: HttpResponse;
31
- }): Promise<void>;
32
- }
33
17
  export declare class SubgraphSparqlHttpHandler extends HttpHandler {
34
18
  protected readonly logger: import("global-logger-factory").Logger<unknown>;
35
19
  private readonly engine;
@@ -47,14 +31,6 @@ export declare class SubgraphSparqlHttpHandler extends HttpHandler {
47
31
  constructor(queryEngine: SubgraphQueryEngine, credentialsExtractor: CredentialsExtractor, permissionReader: PermissionReader, authorizer: Authorizer, options?: SubgraphSparqlHttpHandlerOptions, updateAuthority?: MixDataAccessor, emitter?: ActivityEmitter);
48
32
  canHandle({ request }: HttpHandlerInput): Promise<void>;
49
33
  handle({ request, response }: HttpHandlerInput): Promise<void>;
50
- /**
51
- * Execute the model collection SELECT after InternalPodDataHttpHandler has
52
- * verified the signed owner intent. This is deliberately not reachable from
53
- * the normal HTTP routing path and performs its own exact owner/endpoint
54
- * validation before bypassing caller credentials.
55
- */
56
- handleTrustedInternalSelect(input: Parameters<TrustedSubgraphSparqlHandler['handleTrustedInternalSelect']>[0]): Promise<void>;
57
- handleTrustedInternalUpdate(input: Parameters<TrustedSubgraphSparqlHandler['handleTrustedInternalUpdate']>[0]): Promise<void>;
58
34
  private sendErrorResponse;
59
35
  private acceptsJson;
60
36
  private executeSelect;
@@ -14,7 +14,6 @@ const db_1 = require("../identity/drizzle/db");
14
14
  const PodLookupRepository_1 = require("../identity/drizzle/PodLookupRepository");
15
15
  const UsageRepository_1 = require("../storage/quota/UsageRepository");
16
16
  const BandwidthThrottleTransform_1 = require("../util/stream/BandwidthThrottleTransform");
17
- const AiConnectionsServiceAccess_1 = require("../api/ai-gateway/service-access/AiConnectionsServiceAccess");
18
17
  const ALLOWED_METHODS = ['GET', 'POST', 'OPTIONS'];
19
18
  const MODEL_COLLECTION_SUFFIX = '/settings/providers/-/sparql';
20
19
  const SETTINGS_COLLECTION_SUFFIX = '/settings/-/sparql';
@@ -141,64 +140,6 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
141
140
  throw error;
142
141
  }
143
142
  }
144
- /**
145
- * Execute the model collection SELECT after InternalPodDataHttpHandler has
146
- * verified the signed owner intent. This is deliberately not reachable from
147
- * the normal HTTP routing path and performs its own exact owner/endpoint
148
- * validation before bypassing caller credentials.
149
- */
150
- async handleTrustedInternalSelect(input) {
151
- const target = trustedSelectTarget(input.ownerWebId, input.endpointUrl);
152
- if (!target) {
153
- throw new community_server_2.BadRequestHttpError('Trusted SPARQL endpoint is outside the owner Pod.');
154
- }
155
- const query = input.query.trim();
156
- if (!query || (target.query && query !== target.query)) {
157
- throw new community_server_2.BadRequestHttpError('A trusted SPARQL query is required.');
158
- }
159
- const parsed = new sparqljs_1.Parser({ baseIRI: target.baseUrl }).parse(query);
160
- if (parsed.type !== 'query' || parsed.queryType !== 'SELECT') {
161
- throw new community_server_2.BadRequestHttpError('Trusted SPARQL access only supports SELECT queries.');
162
- }
163
- const context = await this.resolveUsageContext(target.basePath);
164
- await this.recordBandwidth(context, Buffer.byteLength(query, 'utf8'), 0);
165
- await this.executeSelect(input.request, {
166
- basePath: target.basePath,
167
- baseUrl: target.baseUrl,
168
- ...(target.sourceUri === undefined ? {} : { sourceUri: target.sourceUri }),
169
- defaultDataset: target.defaultDataset,
170
- query,
171
- origin: target.origin,
172
- method: 'GET',
173
- ingressBytes: Buffer.byteLength(query, 'utf8'),
174
- }, input.response, context, true);
175
- }
176
- async handleTrustedInternalUpdate(input) {
177
- const target = trustedSettingsCollectionTarget(input.ownerWebId, input.endpointUrl, false);
178
- if (!target) {
179
- throw new community_server_2.BadRequestHttpError('Trusted settings update endpoint is outside the owner Pod.');
180
- }
181
- const query = input.query.trim();
182
- if (!query) {
183
- throw new community_server_2.BadRequestHttpError('A trusted settings update is required.');
184
- }
185
- const parsed = new sparqljs_1.Parser({ baseIRI: target.baseUrl }).parse(query);
186
- if (parsed.type !== 'update') {
187
- throw new community_server_2.BadRequestHttpError('Trusted settings access only supports UPDATE operations.');
188
- }
189
- const context = await this.resolveUsageContext(target.basePath);
190
- const ingressBytes = Buffer.byteLength(query, 'utf8');
191
- await this.recordBandwidth(context, ingressBytes, 0);
192
- await this.executeUpdate({
193
- basePath: target.basePath,
194
- baseUrl: target.baseUrl,
195
- defaultDataset: target.defaultDataset,
196
- query,
197
- origin: target.origin,
198
- method: 'POST',
199
- ingressBytes,
200
- }, parsed, input.request, input.response, context, true);
201
- }
202
143
  sendErrorResponse(request, response, statusCode, message, jsonPayload) {
203
144
  response.statusCode = statusCode;
204
145
  if (this.acceptsJson(request)) {
@@ -1127,47 +1068,6 @@ class SubgraphSparqlHttpHandler extends community_server_1.HttpHandler {
1127
1068
  }
1128
1069
  exports.SubgraphSparqlHttpHandler = SubgraphSparqlHttpHandler;
1129
1070
  SubgraphSparqlHttpHandler.XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';
1130
- function trustedSelectTarget(ownerWebId, endpointUrl) {
1131
- return trustedGatewayAccessKeyDocumentTarget(ownerWebId, endpointUrl) ??
1132
- trustedModelCollectionTarget(ownerWebId, endpointUrl) ??
1133
- trustedSettingsCollectionTarget(ownerWebId, endpointUrl, true);
1134
- }
1135
- function trustedGatewayAccessKeyDocumentTarget(ownerWebId, endpointUrl) {
1136
- let owner;
1137
- let endpoint;
1138
- try {
1139
- owner = new URL(ownerWebId);
1140
- endpoint = new URL(endpointUrl);
1141
- }
1142
- catch {
1143
- return undefined;
1144
- }
1145
- if ((owner.protocol !== 'http:' && owner.protocol !== 'https:') ||
1146
- owner.hash !== '#me' || !owner.pathname.endsWith('/profile/card') ||
1147
- endpoint.username || endpoint.password || endpoint.hash ||
1148
- !(0, AiConnectionsServiceAccess_1.isGatewayAccessKeySparqlEndpoint)(ownerWebId, endpoint)) {
1149
- return undefined;
1150
- }
1151
- const keys = Array.from(endpoint.searchParams.keys());
1152
- if (keys.length > 0 && (keys.length !== 1 || keys[0] !== 'query' || !endpoint.searchParams.get('query')?.trim())) {
1153
- return undefined;
1154
- }
1155
- const basePath = endpoint.pathname.slice(0, -'/-/sparql'.length);
1156
- return {
1157
- basePath,
1158
- baseUrl: `${endpoint.origin}${basePath}`,
1159
- sourceUri: `${endpoint.origin}${basePath}`,
1160
- defaultDataset: 'exactSource',
1161
- origin: endpoint.origin,
1162
- query: endpoint.searchParams.get('query')?.trim() ?? '',
1163
- };
1164
- }
1165
- function trustedModelCollectionTarget(ownerWebId, endpointUrl) {
1166
- return trustedCollectionTarget(ownerWebId, endpointUrl, MODEL_COLLECTION_SUFFIX, true);
1167
- }
1168
- function trustedSettingsCollectionTarget(ownerWebId, endpointUrl, allowQuery) {
1169
- return trustedCollectionTarget(ownerWebId, endpointUrl, SETTINGS_COLLECTION_SUFFIX, allowQuery);
1170
- }
1171
1071
  function trustedCollectionTarget(ownerWebId, endpointUrl, suffix, allowQuery) {
1172
1072
  let owner;
1173
1073
  let endpoint;
@@ -200,14 +200,6 @@
200
200
  "@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_handle",
201
201
  "memberFieldName": "handle"
202
202
  },
203
- {
204
- "@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_handleTrustedInternalSelect",
205
- "memberFieldName": "handleTrustedInternalSelect"
206
- },
207
- {
208
- "@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_handleTrustedInternalUpdate",
209
- "memberFieldName": "handleTrustedInternalUpdate"
210
- },
211
203
  {
212
204
  "@id": "undefineds:dist/http/SubgraphSparqlHttpHandler.jsonld#SubgraphSparqlHttpHandler__member_sendErrorResponse",
213
205
  "memberFieldName": "sendErrorResponse"
@@ -0,0 +1,33 @@
1
+ import type { IdentityDatabase } from './db';
2
+ /**
3
+ * The interface access key a Pod grants its owner's server-side components.
4
+ *
5
+ * It is an ordinary Pod credential - the same kind a browser holds - so the server reaches the
6
+ * Pod through the standard interface as that user. The ciphertext lives here rather than in the
7
+ * Pod, because this key is what opens the Pod.
8
+ */
9
+ export interface PodInterfaceKeyRecord {
10
+ ownerWebId: string;
11
+ clientId: string;
12
+ /** Vault-sealed JSON `{ clientSecret }`. */
13
+ sealedSecret: string;
14
+ createdAt: Date;
15
+ updatedAt: Date;
16
+ }
17
+ export interface PodInterfaceKeyRepositoryPort {
18
+ read(ownerWebId: string): Promise<PodInterfaceKeyRecord | undefined>;
19
+ write(record: Omit<PodInterfaceKeyRecord, 'createdAt' | 'updatedAt'>): Promise<void>;
20
+ remove(ownerWebId: string): Promise<void>;
21
+ }
22
+ export declare class PodInterfaceKeyRepository implements PodInterfaceKeyRepositoryPort {
23
+ private readonly db;
24
+ private readonly logger;
25
+ private readonly schema;
26
+ private readonly ready;
27
+ private initError?;
28
+ constructor(db: IdentityDatabase);
29
+ read(ownerWebId: string): Promise<PodInterfaceKeyRecord | undefined>;
30
+ write(record: Omit<PodInterfaceKeyRecord, 'createdAt' | 'updatedAt'>): Promise<void>;
31
+ remove(ownerWebId: string): Promise<void>;
32
+ private ensureReady;
33
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PodInterfaceKeyRepository = void 0;
4
+ const drizzle_orm_1 = require("drizzle-orm");
5
+ const global_logger_factory_1 = require("global-logger-factory");
6
+ const db_1 = require("./db");
7
+ class PodInterfaceKeyRepository {
8
+ constructor(db) {
9
+ this.db = db;
10
+ this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
11
+ this.schema = (0, db_1.getSchema)(db);
12
+ // Bootstrap is lazy, and its failure belongs to the first caller that needs the table.
13
+ // Leaving the rejection unobserved would surface as an unhandled rejection from a
14
+ // constructor nobody awaits, which is both louder and less useful than a read error.
15
+ this.ready = (0, db_1.ensurePodInterfaceKeyTable)(db).catch((error) => {
16
+ this.initError = error;
17
+ });
18
+ }
19
+ async read(ownerWebId) {
20
+ await this.ensureReady();
21
+ const rows = await this.db
22
+ .select()
23
+ .from(this.schema.podInterfaceKeys)
24
+ .where((0, drizzle_orm_1.eq)(this.schema.podInterfaceKeys.ownerWebId, ownerWebId))
25
+ .limit(1);
26
+ const row = rows[0];
27
+ if (!row) {
28
+ return undefined;
29
+ }
30
+ return {
31
+ ownerWebId: String(row.ownerWebId),
32
+ clientId: String(row.clientId),
33
+ sealedSecret: String(row.sealedSecret),
34
+ createdAt: (0, db_1.fromDbTimestamp)(row.createdAt) ?? new Date(),
35
+ updatedAt: (0, db_1.fromDbTimestamp)(row.updatedAt) ?? new Date(),
36
+ };
37
+ }
38
+ async write(record) {
39
+ await this.ensureReady();
40
+ const existing = await this.read(record.ownerWebId);
41
+ if (existing) {
42
+ await this.db
43
+ .update(this.schema.podInterfaceKeys)
44
+ .set({
45
+ clientId: record.clientId,
46
+ sealedSecret: record.sealedSecret,
47
+ updatedAt: (0, db_1.toDbTimestamp)(this.db, new Date()),
48
+ })
49
+ .where((0, drizzle_orm_1.eq)(this.schema.podInterfaceKeys.ownerWebId, record.ownerWebId));
50
+ this.logger.info(`Rotated the Pod interface key for ${record.ownerWebId}`);
51
+ return;
52
+ }
53
+ await this.db.insert(this.schema.podInterfaceKeys).values({
54
+ ownerWebId: record.ownerWebId,
55
+ clientId: record.clientId,
56
+ sealedSecret: record.sealedSecret,
57
+ createdAt: (0, db_1.toDbTimestamp)(this.db, new Date()),
58
+ updatedAt: (0, db_1.toDbTimestamp)(this.db, new Date()),
59
+ });
60
+ this.logger.info(`Stored a Pod interface key for ${record.ownerWebId}`);
61
+ }
62
+ async remove(ownerWebId) {
63
+ await this.ensureReady();
64
+ await this.db
65
+ .delete(this.schema.podInterfaceKeys)
66
+ .where((0, drizzle_orm_1.eq)(this.schema.podInterfaceKeys.ownerWebId, ownerWebId));
67
+ }
68
+ async ensureReady() {
69
+ await this.ready;
70
+ if (this.initError) {
71
+ throw this.initError instanceof Error
72
+ ? this.initError
73
+ : new Error(`pod_interface_key_table_unavailable:${String(this.initError)}`);
74
+ }
75
+ }
76
+ }
77
+ exports.PodInterfaceKeyRepository = PodInterfaceKeyRepository;
78
+ //# sourceMappingURL=PodInterfaceKeyRepository.js.map
@@ -58,6 +58,13 @@ export declare function executeQuery<T = Record<string, unknown>>(db: IdentityDa
58
58
  */
59
59
  export declare function executeStatement(db: IdentityDatabase, query: SQL): Promise<void>;
60
60
  export declare function executePostgresLockedStatements(db: IdentityDatabase, lockKey: number, statements: string[]): Promise<void>;
61
+ /**
62
+ * Creates the per-owner interface-key table.
63
+ *
64
+ * The table holds the owner's Pod credential, which the runtime needs *before* it can read
65
+ * anything inside that Pod, so it is created on first use rather than by a Pod-side migration.
66
+ */
67
+ export declare function ensurePodInterfaceKeyTable(db: IdentityDatabase): Promise<void>;
61
68
  export declare function ensureCloudClusterTables(db: IdentityDatabase): Promise<void>;
62
69
  /**
63
70
  * Convert a Date to a value suitable for the database.
@@ -33,6 +33,7 @@ exports.isDatabaseSqlite = isDatabaseSqlite;
33
33
  exports.executeQuery = executeQuery;
34
34
  exports.executeStatement = executeStatement;
35
35
  exports.executePostgresLockedStatements = executePostgresLockedStatements;
36
+ exports.ensurePodInterfaceKeyTable = ensurePodInterfaceKeyTable;
36
37
  exports.ensureCloudClusterTables = ensureCloudClusterTables;
37
38
  exports.toDbTimestamp = toDbTimestamp;
38
39
  exports.fromDbTimestamp = fromDbTimestamp;
@@ -260,6 +261,35 @@ async function executePostgresLockedStatements(db, lockKey, statements) {
260
261
  client.release();
261
262
  }
262
263
  }
264
+ /**
265
+ * Creates the per-owner interface-key table.
266
+ *
267
+ * The table holds the owner's Pod credential, which the runtime needs *before* it can read
268
+ * anything inside that Pod, so it is created on first use rather than by a Pod-side migration.
269
+ */
270
+ async function ensurePodInterfaceKeyTable(db) {
271
+ if (isDatabaseSqlite(db)) {
272
+ db.run((0, drizzle_orm_1.sql) `
273
+ CREATE TABLE IF NOT EXISTS identity_pod_interface_key (
274
+ owner_web_id TEXT PRIMARY KEY,
275
+ client_id TEXT NOT NULL,
276
+ sealed_secret TEXT NOT NULL,
277
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
278
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
279
+ )
280
+ `);
281
+ return;
282
+ }
283
+ await db.execute((0, drizzle_orm_1.sql) `
284
+ CREATE TABLE IF NOT EXISTS identity_pod_interface_key (
285
+ owner_web_id TEXT PRIMARY KEY,
286
+ client_id TEXT NOT NULL,
287
+ sealed_secret TEXT NOT NULL,
288
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
289
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
290
+ )
291
+ `);
292
+ }
263
293
  async function ensureCloudClusterTables(db) {
264
294
  await ensureDatabaseReady(db);
265
295
  if (db && typeof db === 'object') {
@@ -10,3 +10,12 @@ export declare const edgeNodes: any;
10
10
  * 用于服务间认证 (Business, Local SP, Cloud, Compute)
11
11
  */
12
12
  export declare const serviceTokens: any;
13
+ /**
14
+ * Per-owner interface access key.
15
+ *
16
+ * A server-side component acts for a user through that user's own Pod credentials, so the
17
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
18
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
19
+ * grants access to the Pod.
20
+ */
21
+ export declare const podInterfaceKeys: any;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
3
+ exports.podInterfaceKeys = exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
4
4
  const pg_core_1 = require("drizzle-orm/pg-core");
5
5
  const bigint_1 = require("drizzle-orm/pg-core/columns/bigint");
6
6
  const integer_1 = require("drizzle-orm/pg-core/columns/integer");
@@ -79,4 +79,19 @@ exports.serviceTokens = (0, pg_core_1.pgTable)('cluster_service_token', {
79
79
  createdAt: (0, pg_core_1.timestamp)('created_at', { withTimezone: true, mode: 'date' }).notNull().defaultNow(),
80
80
  expiresAt: (0, pg_core_1.timestamp)('expires_at', { withTimezone: true, mode: 'date' }),
81
81
  });
82
+ /**
83
+ * Per-owner interface access key.
84
+ *
85
+ * A server-side component acts for a user through that user's own Pod credentials, so the
86
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
87
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
88
+ * grants access to the Pod.
89
+ */
90
+ exports.podInterfaceKeys = (0, pg_core_1.pgTable)('identity_pod_interface_key', {
91
+ ownerWebId: (0, pg_core_1.text)('owner_web_id').primaryKey(),
92
+ clientId: (0, pg_core_1.text)('client_id').notNull(),
93
+ sealedSecret: (0, pg_core_1.text)('sealed_secret').notNull(),
94
+ createdAt: (0, pg_core_1.timestamp)('created_at').notNull().defaultNow(),
95
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').notNull().defaultNow(),
96
+ });
82
97
  //# sourceMappingURL=schema.pg.js.map
@@ -1073,3 +1073,109 @@ export declare const serviceTokens: import("drizzle-orm/sqlite-core").SQLiteTabl
1073
1073
  };
1074
1074
  dialect: "sqlite";
1075
1075
  }>;
1076
+ /**
1077
+ * Per-owner interface access key.
1078
+ *
1079
+ * A server-side component acts for a user through that user's own Pod credentials, so the
1080
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
1081
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
1082
+ * grants access to the Pod.
1083
+ */
1084
+ export declare const podInterfaceKeys: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1085
+ name: "identity_pod_interface_key";
1086
+ schema: undefined;
1087
+ columns: {
1088
+ ownerWebId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1089
+ name: "owner_web_id";
1090
+ tableName: "identity_pod_interface_key";
1091
+ dataType: "string";
1092
+ columnType: "SQLiteText";
1093
+ data: string;
1094
+ driverParam: string;
1095
+ notNull: true;
1096
+ hasDefault: false;
1097
+ isPrimaryKey: true;
1098
+ isAutoincrement: false;
1099
+ hasRuntimeDefault: false;
1100
+ enumValues: [string, ...string[]];
1101
+ baseColumn: never;
1102
+ identity: undefined;
1103
+ generated: undefined;
1104
+ }, {}, {
1105
+ length: number | undefined;
1106
+ }>;
1107
+ clientId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1108
+ name: "client_id";
1109
+ tableName: "identity_pod_interface_key";
1110
+ dataType: "string";
1111
+ columnType: "SQLiteText";
1112
+ data: string;
1113
+ driverParam: string;
1114
+ notNull: true;
1115
+ hasDefault: false;
1116
+ isPrimaryKey: false;
1117
+ isAutoincrement: false;
1118
+ hasRuntimeDefault: false;
1119
+ enumValues: [string, ...string[]];
1120
+ baseColumn: never;
1121
+ identity: undefined;
1122
+ generated: undefined;
1123
+ }, {}, {
1124
+ length: number | undefined;
1125
+ }>;
1126
+ sealedSecret: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1127
+ name: "sealed_secret";
1128
+ tableName: "identity_pod_interface_key";
1129
+ dataType: "string";
1130
+ columnType: "SQLiteText";
1131
+ data: string;
1132
+ driverParam: string;
1133
+ notNull: true;
1134
+ hasDefault: false;
1135
+ isPrimaryKey: false;
1136
+ isAutoincrement: false;
1137
+ hasRuntimeDefault: false;
1138
+ enumValues: [string, ...string[]];
1139
+ baseColumn: never;
1140
+ identity: undefined;
1141
+ generated: undefined;
1142
+ }, {}, {
1143
+ length: number | undefined;
1144
+ }>;
1145
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1146
+ name: "created_at";
1147
+ tableName: "identity_pod_interface_key";
1148
+ dataType: "number";
1149
+ columnType: "SQLiteInteger";
1150
+ data: number;
1151
+ driverParam: number;
1152
+ notNull: true;
1153
+ hasDefault: true;
1154
+ isPrimaryKey: false;
1155
+ isAutoincrement: false;
1156
+ hasRuntimeDefault: true;
1157
+ enumValues: undefined;
1158
+ baseColumn: never;
1159
+ identity: undefined;
1160
+ generated: undefined;
1161
+ }, {}, {}>;
1162
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1163
+ name: "updated_at";
1164
+ tableName: "identity_pod_interface_key";
1165
+ dataType: "number";
1166
+ columnType: "SQLiteInteger";
1167
+ data: number;
1168
+ driverParam: number;
1169
+ notNull: true;
1170
+ hasDefault: true;
1171
+ isPrimaryKey: false;
1172
+ isAutoincrement: false;
1173
+ hasRuntimeDefault: true;
1174
+ enumValues: undefined;
1175
+ baseColumn: never;
1176
+ identity: undefined;
1177
+ generated: undefined;
1178
+ }, {}, {}>;
1179
+ };
1180
+ dialect: "sqlite";
1181
+ }>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
3
+ exports.podInterfaceKeys = exports.serviceTokens = exports.edgeNodes = exports.ddnsRecords = exports.usage = void 0;
4
4
  const sqlite_core_1 = require("drizzle-orm/sqlite-core");
5
5
  exports.usage = (0, sqlite_core_1.sqliteTable)('identity_usage', {
6
6
  scopeType: (0, sqlite_core_1.text)('scope_type').notNull(), // 'account' | 'pod'
@@ -79,4 +79,19 @@ exports.serviceTokens = (0, sqlite_core_1.sqliteTable)('cluster_service_token',
79
79
  createdAt: (0, sqlite_core_1.integer)('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
80
80
  expiresAt: (0, sqlite_core_1.integer)('expires_at'),
81
81
  });
82
+ /**
83
+ * Per-owner interface access key.
84
+ *
85
+ * A server-side component acts for a user through that user's own Pod credentials, so the
86
+ * client id/secret pair - the same kind of key a browser uses on the standard interface - is
87
+ * remembered here, sealed by the credential vault. It cannot live in the Pod: it is what
88
+ * grants access to the Pod.
89
+ */
90
+ exports.podInterfaceKeys = (0, sqlite_core_1.sqliteTable)('identity_pod_interface_key', {
91
+ ownerWebId: (0, sqlite_core_1.text)('owner_web_id').primaryKey(),
92
+ clientId: (0, sqlite_core_1.text)('client_id').notNull(),
93
+ sealedSecret: (0, sqlite_core_1.text)('sealed_secret').notNull(),
94
+ createdAt: (0, sqlite_core_1.integer)('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
95
+ updatedAt: (0, sqlite_core_1.integer)('updated_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),
96
+ });
82
97
  //# sourceMappingURL=schema.sqlite.js.map
package/dist/index.d.ts CHANGED
@@ -15,7 +15,6 @@ export type { PostgresRdfTextIndexOptions } from './storage/rdf/PostgresRdfTextI
15
15
  export type { PostgresRdfVectorIndexOptions } from './storage/rdf/PostgresRdfVectorIndex';
16
16
  export * from './document';
17
17
  import { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';
18
- import { InternalPodDataHttpHandler } from './http/InternalPodDataHttpHandler';
19
18
  import { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';
20
19
  import { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';
21
20
  import { ClusterIngressRouter } from './http/ClusterIngressRouter';
@@ -127,6 +126,6 @@ export type { OwnedWebIdEntry, PodOwnershipResolver, PodOwnershipTarget, CssPodO
127
126
  export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
128
127
  export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
129
128
  export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
130
- export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, resolveLogFilePattern, resolveCurrentLogFile, LOG_FILE_PATTERN, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, InternalPodDataHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, assertPublicProbeTarget, createPinnedHeadProbeRequest, isPublicIpAddress, createPodOwnershipNodeAccessResolver, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
129
+ export { RepresentationPartialConvertingStore, MinioDataAccessor, SolidRdfDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, resolveLogFilePattern, resolveCurrentLogFile, LOG_FILE_PATTERN, SparqlUpdateResourceStore, SubgraphQueryEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, DeviceNotificationHub, DeviceNotificationResourceListener, DeviceNotificationWebSocketServer, DeviceNotificationTicketHandler, registerDeviceNotificationRuntime, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, LoginMethodGuardStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, BaseKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, assertPublicProbeTarget, createPinnedHeadProbeRequest, isPublicIpAddress, createPodOwnershipNodeAccessResolver, EdgeNodeAgent, EdgeNodeAgentInitializer, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, Rdf3xIndex, RdfTextIndex, RdfVectorIndex, PostgresRdfTextIndex, PostgresRdfVectorIndex, SolidRdfEngine, LocalQleverNativeSparqlClient, QleverSparqlEngine, RdfQuerySparqlEngine, PostgresRdfEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, NgrokTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, RememberedClientGrantStore, RememberedConsentHandler, RememberedClientPromptFactory, SessionBoundIdentityProviderFactory, ScopedPickWebIdHandler, ConfiguredLoopbackDPoPWebIdExtractor, AccountStorageBindingsHandler, CssPodOwnershipResolver, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionPodStore, ProvisionCodeCodec, LocalPodProvisioningService, SqliteSolidFsSyncJournal, RootedSolidFsSyncJournal, LocalRdfAuthorityRecoveryInitializer, ObservableResourceStore, RdfSearchReconciliationIntentSink, };
131
130
  export type { ResourceChangeEvent, ResourceChangeListener, ResourceChangeRecorder, } from './storage/ObservableResourceStore';
132
131
  export { RdfHandlebarsTemplateEngine } from './util/templates/RdfHandlebarsTemplateEngine';
package/dist/index.js CHANGED
@@ -14,9 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.createPinnedHeadProbeRequest = exports.assertPublicProbeTarget = exports.EdgeNodeHealthProbeService = exports.FrpTunnelManager = exports.NoopEdgeNodeTunnelManager = exports.SimpleEdgeNodeTunnelManager = exports.Dns01CertificateProvisioner = exports.EdgeNodeDnsCoordinator = exports.TencentDnsProvider = exports.PerAccountQuotaStrategy = exports.NoopEntitlementProvider = exports.HttpEntitlementProvider = exports.NoopQuotaService = exports.DrizzleQuotaService = exports.BaseKeyValueStorage = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.LoginMethodGuardStorage = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.registerDeviceNotificationRuntime = exports.DeviceNotificationTicketHandler = exports.DeviceNotificationWebSocketServer = exports.DeviceNotificationResourceListener = exports.DeviceNotificationHub = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.InternalPodDataHttpHandler = exports.SubgraphSparqlHttpHandler = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.LOG_FILE_PATTERN = exports.resolveCurrentLogFile = exports.resolveLogFilePattern = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.SolidRdfDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
18
- exports.RememberedConsentHandler = exports.RememberedClientGrantStore = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.NgrokTunnelProvider = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.PostgresRdfEngine = exports.RdfQuerySparqlEngine = exports.QleverSparqlEngine = exports.LocalQleverNativeSparqlClient = exports.SolidRdfEngine = exports.PostgresRdfVectorIndex = exports.PostgresRdfTextIndex = exports.RdfVectorIndex = exports.RdfTextIndex = exports.Rdf3xIndex = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = exports.EdgeNodeAgentInitializer = exports.EdgeNodeAgent = exports.createPodOwnershipNodeAccessResolver = exports.isPublicIpAddress = void 0;
19
- exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.CssPodOwnershipResolver = exports.AccountStorageBindingsHandler = exports.ConfiguredLoopbackDPoPWebIdExtractor = exports.ScopedPickWebIdHandler = exports.SessionBoundIdentityProviderFactory = exports.RememberedClientPromptFactory = void 0;
17
+ exports.isPublicIpAddress = exports.createPinnedHeadProbeRequest = exports.assertPublicProbeTarget = exports.EdgeNodeHealthProbeService = exports.FrpTunnelManager = exports.NoopEdgeNodeTunnelManager = exports.SimpleEdgeNodeTunnelManager = exports.Dns01CertificateProvisioner = exports.EdgeNodeDnsCoordinator = exports.TencentDnsProvider = exports.PerAccountQuotaStrategy = exports.NoopEntitlementProvider = exports.HttpEntitlementProvider = exports.NoopQuotaService = exports.DrizzleQuotaService = exports.BaseKeyValueStorage = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.LoginMethodGuardStorage = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.registerDeviceNotificationRuntime = exports.DeviceNotificationTicketHandler = exports.DeviceNotificationWebSocketServer = exports.DeviceNotificationResourceListener = exports.DeviceNotificationHub = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.SubgraphSparqlHttpHandler = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.LOG_FILE_PATTERN = exports.resolveCurrentLogFile = exports.resolveLogFilePattern = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.SolidRdfDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
18
+ exports.RememberedClientPromptFactory = exports.RememberedConsentHandler = exports.RememberedClientGrantStore = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.NgrokTunnelProvider = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.PostgresRdfEngine = exports.RdfQuerySparqlEngine = exports.QleverSparqlEngine = exports.LocalQleverNativeSparqlClient = exports.SolidRdfEngine = exports.PostgresRdfVectorIndex = exports.PostgresRdfTextIndex = exports.RdfVectorIndex = exports.RdfTextIndex = exports.Rdf3xIndex = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = exports.EdgeNodeAgentInitializer = exports.EdgeNodeAgent = exports.createPodOwnershipNodeAccessResolver = void 0;
19
+ exports.RdfHandlebarsTemplateEngine = exports.RdfSearchReconciliationIntentSink = exports.ObservableResourceStore = exports.LocalRdfAuthorityRecoveryInitializer = exports.RootedSolidFsSyncJournal = exports.SqliteSolidFsSyncJournal = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodStore = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.CssPodOwnershipResolver = exports.AccountStorageBindingsHandler = exports.ConfiguredLoopbackDPoPWebIdExtractor = exports.ScopedPickWebIdHandler = exports.SessionBoundIdentityProviderFactory = void 0;
20
20
  require("./runtime/configure-drizzle-solid");
21
21
  const RepresentationPartialConvertingStore_1 = require("./storage/RepresentationPartialConvertingStore");
22
22
  Object.defineProperty(exports, "RepresentationPartialConvertingStore", { enumerable: true, get: function () { return RepresentationPartialConvertingStore_1.RepresentationPartialConvertingStore; } });
@@ -37,8 +37,6 @@ Object.defineProperty(exports, "SubgraphQueryEngine", { enumerable: true, get: f
37
37
  __exportStar(require("./document"), exports);
38
38
  const SubgraphSparqlHttpHandler_1 = require("./http/SubgraphSparqlHttpHandler");
39
39
  Object.defineProperty(exports, "SubgraphSparqlHttpHandler", { enumerable: true, get: function () { return SubgraphSparqlHttpHandler_1.SubgraphSparqlHttpHandler; } });
40
- const InternalPodDataHttpHandler_1 = require("./http/InternalPodDataHttpHandler");
41
- Object.defineProperty(exports, "InternalPodDataHttpHandler", { enumerable: true, get: function () { return InternalPodDataHttpHandler_1.InternalPodDataHttpHandler; } });
42
40
  const QuotaAdminHttpHandler_1 = require("./http/quota/QuotaAdminHttpHandler");
43
41
  Object.defineProperty(exports, "QuotaAdminHttpHandler", { enumerable: true, get: function () { return QuotaAdminHttpHandler_1.QuotaAdminHttpHandler; } });
44
42
  const SparqlUpdateResourceStore_1 = require("./storage/SparqlUpdateResourceStore");
@@ -2,9 +2,8 @@ import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'node:http';
2
2
  export declare const GATEWAY_ADMIN_PROXY_LOOPBACK_HEADER = "x-xpod-admin-proxy-loopback";
3
3
  export declare const GATEWAY_ADMIN_PROXY_TIMESTAMP_HEADER = "x-xpod-admin-proxy-timestamp";
4
4
  export declare const GATEWAY_ADMIN_PROXY_SIGNATURE_HEADER = "x-xpod-admin-proxy-signature";
5
- export declare const GATEWAY_ADMIN_PROXY_INTENT_HEADER = "x-xpod-admin-proxy-intent";
6
5
  export declare const GATEWAY_ADMIN_PROXY_NONCE_HEADER = "x-xpod-admin-proxy-nonce";
7
- export declare const GATEWAY_ADMIN_PROXY_HEADERS: readonly ["x-xpod-admin-proxy-loopback", "x-xpod-admin-proxy-timestamp", "x-xpod-admin-proxy-signature", "x-xpod-admin-proxy-intent", "x-xpod-admin-proxy-nonce"];
6
+ export declare const GATEWAY_ADMIN_PROXY_HEADERS: readonly ["x-xpod-admin-proxy-loopback", "x-xpod-admin-proxy-timestamp", "x-xpod-admin-proxy-signature", "x-xpod-admin-proxy-nonce"];
8
7
  export declare function createGatewayAdminProxyAuthSecret(): string;
9
8
  export interface GatewayAdminProxyMarkerInput {
10
9
  secret: string;
@@ -13,27 +12,14 @@ export interface GatewayAdminProxyMarkerInput {
13
12
  originalClientLoopback: boolean;
14
13
  issuedAt?: number;
15
14
  nonce?: string;
16
- intent?: GatewayAdminProxyIntent;
17
15
  }
18
16
  export interface GatewayAdminProxyMarkerVerification {
19
17
  present: boolean;
20
18
  valid: boolean;
21
19
  originalClientLoopback: boolean;
22
20
  nonce?: string;
23
- intent?: GatewayAdminProxyIntent;
24
21
  reason?: string;
25
22
  }
26
- export interface GatewayAdminProxyIntent {
27
- ownerWebId: string;
28
- /** Physical Pod root when it differs from the identity provider WebID root. */
29
- podBaseUrl?: string;
30
- method: 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
31
- resourceUrl: string;
32
- principalKind: 'solid-user' | 'gateway-key-verifier';
33
- scopes: string[];
34
- /** SHA-256 hex digest of a POST body. Required for POST intents. */
35
- bodyDigest?: string;
36
- }
37
23
  export declare function createGatewayAdminProxyHeaders(input: GatewayAdminProxyMarkerInput): OutgoingHttpHeaders;
38
24
  export declare function stripGatewayAdminProxyHeaders(headers: IncomingHttpHeaders): void;
39
25
  export declare function isLoopbackRemoteAddress(remoteAddress: string | undefined): boolean;
@@ -44,4 +30,3 @@ export declare function verifyGatewayAdminProxyHeaders(input: {
44
30
  url: string | undefined;
45
31
  now?: number;
46
32
  }): GatewayAdminProxyMarkerVerification;
47
- export declare function canonicalGatewayAdminProxyIntent(intent: GatewayAdminProxyIntent): string;