@undefineds.co/xpod 0.3.6 → 0.3.14
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.
- package/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -36,6 +36,163 @@
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
|
+
"RdfIndexStats": {
|
|
40
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfIndexStats",
|
|
41
|
+
"@prefix": true,
|
|
42
|
+
"@context": {}
|
|
43
|
+
},
|
|
44
|
+
"RdfIndexSpaceObject": {
|
|
45
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfIndexSpaceObject",
|
|
46
|
+
"@prefix": true,
|
|
47
|
+
"@context": {}
|
|
48
|
+
},
|
|
49
|
+
"RdfIndexMetrics": {
|
|
50
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfIndexMetrics",
|
|
51
|
+
"@prefix": true,
|
|
52
|
+
"@context": {}
|
|
53
|
+
},
|
|
54
|
+
"RdfIndexPutOptions": {
|
|
55
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfIndexPutOptions",
|
|
56
|
+
"@prefix": true,
|
|
57
|
+
"@context": {}
|
|
58
|
+
},
|
|
59
|
+
"RdfPatternQuery": {
|
|
60
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfPatternQuery",
|
|
61
|
+
"@prefix": true,
|
|
62
|
+
"@context": {}
|
|
63
|
+
},
|
|
64
|
+
"RdfQuadIndexOptions": {
|
|
65
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfQuadIndexOptions",
|
|
66
|
+
"@prefix": true,
|
|
67
|
+
"@context": {}
|
|
68
|
+
},
|
|
69
|
+
"RdfQuadIndexScanResult": {
|
|
70
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfQuadIndexScanResult",
|
|
71
|
+
"@prefix": true,
|
|
72
|
+
"@context": {}
|
|
73
|
+
},
|
|
74
|
+
"RdfShadowBackfillOptions": {
|
|
75
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfShadowBackfillOptions",
|
|
76
|
+
"@prefix": true,
|
|
77
|
+
"@context": {}
|
|
78
|
+
},
|
|
79
|
+
"RdfShadowBackfillResult": {
|
|
80
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfShadowBackfillResult",
|
|
81
|
+
"@prefix": true,
|
|
82
|
+
"@context": {}
|
|
83
|
+
},
|
|
84
|
+
"RdfShadowDiff": {
|
|
85
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfShadowDiff",
|
|
86
|
+
"@prefix": true,
|
|
87
|
+
"@context": {}
|
|
88
|
+
},
|
|
89
|
+
"RdfShadowScanResult": {
|
|
90
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfShadowScanResult",
|
|
91
|
+
"@prefix": true,
|
|
92
|
+
"@context": {}
|
|
93
|
+
},
|
|
94
|
+
"RdfSourceInput": {
|
|
95
|
+
"@id": "undefineds:dist/storage/rdf/types.jsonld#RdfSourceInput",
|
|
96
|
+
"@prefix": true,
|
|
97
|
+
"@context": {}
|
|
98
|
+
},
|
|
99
|
+
"RdfSparqlCompileResult": {
|
|
100
|
+
"@id": "undefineds:dist/storage/rdf/RdfSparqlAdapter.jsonld#RdfSparqlCompileResult",
|
|
101
|
+
"@prefix": true,
|
|
102
|
+
"@context": {}
|
|
103
|
+
},
|
|
104
|
+
"RdfSparqlAdapter": {
|
|
105
|
+
"@id": "undefineds:dist/storage/rdf/RdfSparqlAdapter.jsonld#RdfSparqlAdapter",
|
|
106
|
+
"@prefix": true,
|
|
107
|
+
"@context": {}
|
|
108
|
+
},
|
|
109
|
+
"ShadowRdfQuintStoreOptions": {
|
|
110
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStoreOptions",
|
|
111
|
+
"@prefix": true,
|
|
112
|
+
"@context": {}
|
|
113
|
+
},
|
|
114
|
+
"ShadowRdfQuintStore": {
|
|
115
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore",
|
|
116
|
+
"@prefix": true,
|
|
117
|
+
"@context": {
|
|
118
|
+
"options_compatibilityStore": {
|
|
119
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_compatibilityStore"
|
|
120
|
+
},
|
|
121
|
+
"options_index_path": {
|
|
122
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_index_path"
|
|
123
|
+
},
|
|
124
|
+
"options_index_debug": {
|
|
125
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_index_debug"
|
|
126
|
+
},
|
|
127
|
+
"options_autoOpen": {
|
|
128
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoOpen"
|
|
129
|
+
},
|
|
130
|
+
"options_autoBackfill_enabled": {
|
|
131
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_enabled"
|
|
132
|
+
},
|
|
133
|
+
"options_autoBackfill_clear": {
|
|
134
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_clear"
|
|
135
|
+
},
|
|
136
|
+
"options_autoBackfill_batchSize": {
|
|
137
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_batchSize"
|
|
138
|
+
},
|
|
139
|
+
"compatibilityStore": {
|
|
140
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_compatibilityStore"
|
|
141
|
+
},
|
|
142
|
+
"index_path": {
|
|
143
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_index_path"
|
|
144
|
+
},
|
|
145
|
+
"index_debug": {
|
|
146
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_index_debug"
|
|
147
|
+
},
|
|
148
|
+
"autoOpen": {
|
|
149
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoOpen"
|
|
150
|
+
},
|
|
151
|
+
"autoBackfill_enabled": {
|
|
152
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_enabled"
|
|
153
|
+
},
|
|
154
|
+
"autoBackfill_clear": {
|
|
155
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_clear"
|
|
156
|
+
},
|
|
157
|
+
"autoBackfill_batchSize": {
|
|
158
|
+
"@id": "undefineds:dist/storage/rdf/ShadowRdfQuintStore.jsonld#ShadowRdfQuintStore_options_autoBackfill_batchSize"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"SolidRdfSparqlEngineOptions": {
|
|
163
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngineOptions",
|
|
164
|
+
"@prefix": true,
|
|
165
|
+
"@context": {}
|
|
166
|
+
},
|
|
167
|
+
"SolidRdfSparqlFallback": {
|
|
168
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlFallback",
|
|
169
|
+
"@prefix": true,
|
|
170
|
+
"@context": {}
|
|
171
|
+
},
|
|
172
|
+
"SolidRdfSparqlEngine": {
|
|
173
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine",
|
|
174
|
+
"@prefix": true,
|
|
175
|
+
"@context": {
|
|
176
|
+
"enablePrimary": {
|
|
177
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_enablePrimary"
|
|
178
|
+
},
|
|
179
|
+
"onFallback": {
|
|
180
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_onFallback"
|
|
181
|
+
},
|
|
182
|
+
"rdfEngine": {
|
|
183
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_rdfEngine"
|
|
184
|
+
},
|
|
185
|
+
"fallback": {
|
|
186
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_fallback"
|
|
187
|
+
},
|
|
188
|
+
"shadowStore": {
|
|
189
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_shadowStore"
|
|
190
|
+
},
|
|
191
|
+
"y": {
|
|
192
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfSparqlEngine.jsonld#SolidRdfSparqlEngine_enablePrimary"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
39
196
|
"DnsProvider": {
|
|
40
197
|
"@id": "undefineds:dist/dns/DnsProvider.jsonld#DnsProvider",
|
|
41
198
|
"@prefix": true,
|
|
@@ -350,6 +507,21 @@
|
|
|
350
507
|
},
|
|
351
508
|
"unstructuredDataAccessor": {
|
|
352
509
|
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_unstructuredDataAccessor"
|
|
510
|
+
},
|
|
511
|
+
"rdfFileDataAccessor": {
|
|
512
|
+
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_rdfFileDataAccessor"
|
|
513
|
+
},
|
|
514
|
+
"bled": {
|
|
515
|
+
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_presignedRedirectEnabled"
|
|
516
|
+
},
|
|
517
|
+
"structured": {
|
|
518
|
+
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_mirrorContainersToUnstructured"
|
|
519
|
+
},
|
|
520
|
+
"or": {
|
|
521
|
+
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_structuredDataAccessor"
|
|
522
|
+
},
|
|
523
|
+
"ssor": {
|
|
524
|
+
"@id": "undefineds:dist/storage/accessors/MixDataAccessor.jsonld#MixDataAccessor_unstructuredDataAccessor"
|
|
353
525
|
}
|
|
354
526
|
}
|
|
355
527
|
},
|
|
@@ -408,6 +580,9 @@
|
|
|
408
580
|
"options_metadataStrategy": {
|
|
409
581
|
"@id": "undefineds:dist/storage/SparqlUpdateResourceStore.jsonld#SparqlUpdateResourceStore_options_metadataStrategy"
|
|
410
582
|
},
|
|
583
|
+
"options_localFirstRdfRepresentationResolver": {
|
|
584
|
+
"@id": "undefineds:dist/storage/SparqlUpdateResourceStore.jsonld#SparqlUpdateResourceStore_options_localFirstRdfRepresentationResolver"
|
|
585
|
+
},
|
|
411
586
|
"accessor": {
|
|
412
587
|
"@id": "undefineds:dist/storage/SparqlUpdateResourceStore.jsonld#SparqlUpdateResourceStore_options_accessor"
|
|
413
588
|
},
|
|
@@ -419,6 +594,9 @@
|
|
|
419
594
|
},
|
|
420
595
|
"metadataStrategy": {
|
|
421
596
|
"@id": "undefineds:dist/storage/SparqlUpdateResourceStore.jsonld#SparqlUpdateResourceStore_options_metadataStrategy"
|
|
597
|
+
},
|
|
598
|
+
"localFirstRdfRepresentationResolver": {
|
|
599
|
+
"@id": "undefineds:dist/storage/SparqlUpdateResourceStore.jsonld#SparqlUpdateResourceStore_options_localFirstRdfRepresentationResolver"
|
|
422
600
|
}
|
|
423
601
|
}
|
|
424
602
|
},
|
|
@@ -775,30 +953,6 @@
|
|
|
775
953
|
}
|
|
776
954
|
}
|
|
777
955
|
},
|
|
778
|
-
"WebIdProfileRepository": {
|
|
779
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository",
|
|
780
|
-
"@prefix": true,
|
|
781
|
-
"@context": {
|
|
782
|
-
"options_baseUrl": {
|
|
783
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_baseUrl"
|
|
784
|
-
},
|
|
785
|
-
"options_db": {
|
|
786
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_db"
|
|
787
|
-
},
|
|
788
|
-
"options_identityDbUrl": {
|
|
789
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_identityDbUrl"
|
|
790
|
-
},
|
|
791
|
-
"baseUrl": {
|
|
792
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_baseUrl"
|
|
793
|
-
},
|
|
794
|
-
"db": {
|
|
795
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_db"
|
|
796
|
-
},
|
|
797
|
-
"identityDbUrl": {
|
|
798
|
-
"@id": "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository_options_identityDbUrl"
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
},
|
|
802
956
|
"ValidatingIdentityProviderHttpHandler": {
|
|
803
957
|
"@id": "undefineds:dist/identity/ValidatingIdentityProviderHttpHandler.jsonld#ValidatingIdentityProviderHttpHandler",
|
|
804
958
|
"@prefix": true,
|
|
@@ -1599,29 +1753,90 @@
|
|
|
1599
1753
|
}
|
|
1600
1754
|
}
|
|
1601
1755
|
},
|
|
1602
|
-
"
|
|
1603
|
-
"@id": "undefineds:dist/storage/
|
|
1756
|
+
"RdfTermDictionary": {
|
|
1757
|
+
"@id": "undefineds:dist/storage/rdf/RdfTermDictionary.jsonld#RdfTermDictionary",
|
|
1604
1758
|
"@prefix": true,
|
|
1605
1759
|
"@context": {
|
|
1606
|
-
"
|
|
1607
|
-
"@id": "undefineds:dist/storage/
|
|
1760
|
+
"db": {
|
|
1761
|
+
"@id": "undefineds:dist/storage/rdf/RdfTermDictionary.jsonld#RdfTermDictionary_db"
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
"RdfQuadIndex": {
|
|
1766
|
+
"@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex",
|
|
1767
|
+
"@prefix": true,
|
|
1768
|
+
"@context": {
|
|
1769
|
+
"options_path": {
|
|
1770
|
+
"@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex_options_path"
|
|
1608
1771
|
},
|
|
1609
|
-
"
|
|
1610
|
-
"@id": "undefineds:dist/storage/
|
|
1611
|
-
"@container": "@list"
|
|
1772
|
+
"options_debug": {
|
|
1773
|
+
"@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex_options_debug"
|
|
1612
1774
|
},
|
|
1613
|
-
"
|
|
1614
|
-
"@id": "undefineds:dist/storage/
|
|
1775
|
+
"path": {
|
|
1776
|
+
"@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex_options_path"
|
|
1615
1777
|
},
|
|
1616
1778
|
"debug": {
|
|
1617
|
-
"@id": "undefineds:dist/storage/
|
|
1779
|
+
"@id": "undefineds:dist/storage/rdf/RdfQuadIndex.jsonld#RdfQuadIndex_options_debug"
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
},
|
|
1783
|
+
"SolidRdfEngine": {
|
|
1784
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine",
|
|
1785
|
+
"@prefix": true,
|
|
1786
|
+
"@context": {
|
|
1787
|
+
"options_index_path": {
|
|
1788
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_index_path"
|
|
1618
1789
|
},
|
|
1619
|
-
"
|
|
1620
|
-
"@id": "undefineds:dist/storage/
|
|
1621
|
-
"@container": "@list"
|
|
1790
|
+
"options_index_debug": {
|
|
1791
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_index_debug"
|
|
1622
1792
|
},
|
|
1623
|
-
"
|
|
1624
|
-
"@id": "undefineds:dist/storage/
|
|
1793
|
+
"options_textIndex_path": {
|
|
1794
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_textIndex_path"
|
|
1795
|
+
},
|
|
1796
|
+
"options_vectorIndex_path": {
|
|
1797
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_vectorIndex_path"
|
|
1798
|
+
},
|
|
1799
|
+
"options_vectorIndex_defaultMetric": {
|
|
1800
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_vectorIndex_defaultMetric"
|
|
1801
|
+
},
|
|
1802
|
+
"options_rdf3xIndex_path": {
|
|
1803
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_rdf3xIndex_path"
|
|
1804
|
+
},
|
|
1805
|
+
"options_rdf3xIndex_debug": {
|
|
1806
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_rdf3xIndex_debug"
|
|
1807
|
+
},
|
|
1808
|
+
"options_compatibilityStore": {
|
|
1809
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_compatibilityStore"
|
|
1810
|
+
},
|
|
1811
|
+
"options_autoOpen": {
|
|
1812
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_autoOpen"
|
|
1813
|
+
},
|
|
1814
|
+
"index_path": {
|
|
1815
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_index_path"
|
|
1816
|
+
},
|
|
1817
|
+
"index_debug": {
|
|
1818
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_index_debug"
|
|
1819
|
+
},
|
|
1820
|
+
"textIndex_path": {
|
|
1821
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_textIndex_path"
|
|
1822
|
+
},
|
|
1823
|
+
"vectorIndex_path": {
|
|
1824
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_vectorIndex_path"
|
|
1825
|
+
},
|
|
1826
|
+
"vectorIndex_defaultMetric": {
|
|
1827
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_vectorIndex_defaultMetric"
|
|
1828
|
+
},
|
|
1829
|
+
"rdf3xIndex_path": {
|
|
1830
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_rdf3xIndex_path"
|
|
1831
|
+
},
|
|
1832
|
+
"rdf3xIndex_debug": {
|
|
1833
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_rdf3xIndex_debug"
|
|
1834
|
+
},
|
|
1835
|
+
"compatibilityStore": {
|
|
1836
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_compatibilityStore"
|
|
1837
|
+
},
|
|
1838
|
+
"autoOpen": {
|
|
1839
|
+
"@id": "undefineds:dist/storage/rdf/SolidRdfEngine.jsonld#SolidRdfEngine_options_autoOpen"
|
|
1625
1840
|
}
|
|
1626
1841
|
}
|
|
1627
1842
|
},
|
|
@@ -1837,8 +2052,8 @@
|
|
|
1837
2052
|
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler",
|
|
1838
2053
|
"@prefix": true,
|
|
1839
2054
|
"@context": {
|
|
1840
|
-
"
|
|
1841
|
-
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#
|
|
2055
|
+
"options_oidcIssuer": {
|
|
2056
|
+
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler_options_oidcIssuer"
|
|
1842
2057
|
},
|
|
1843
2058
|
"options_message": {
|
|
1844
2059
|
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler_options_message"
|
|
@@ -1846,8 +2061,8 @@
|
|
|
1846
2061
|
"options_cacheMs": {
|
|
1847
2062
|
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler_options_cacheMs"
|
|
1848
2063
|
},
|
|
1849
|
-
"
|
|
1850
|
-
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#
|
|
2064
|
+
"oidcIssuer": {
|
|
2065
|
+
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler_options_oidcIssuer"
|
|
1851
2066
|
},
|
|
1852
2067
|
"message": {
|
|
1853
2068
|
"@id": "undefineds:dist/identity/oidc/AutoDetectOidcHandler.jsonld#AutoDetectOidcHandler_options_message"
|
|
@@ -1861,8 +2076,8 @@
|
|
|
1861
2076
|
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler",
|
|
1862
2077
|
"@prefix": true,
|
|
1863
2078
|
"@context": {
|
|
1864
|
-
"
|
|
1865
|
-
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#
|
|
2079
|
+
"options_oidcIssuer": {
|
|
2080
|
+
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler_options_oidcIssuer"
|
|
1866
2081
|
},
|
|
1867
2082
|
"options_message": {
|
|
1868
2083
|
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler_options_message"
|
|
@@ -1870,8 +2085,8 @@
|
|
|
1870
2085
|
"options_source": {
|
|
1871
2086
|
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler_options_source"
|
|
1872
2087
|
},
|
|
1873
|
-
"
|
|
1874
|
-
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#
|
|
2088
|
+
"oidcIssuer": {
|
|
2089
|
+
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler_options_oidcIssuer"
|
|
1875
2090
|
},
|
|
1876
2091
|
"message": {
|
|
1877
2092
|
"@id": "undefineds:dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld#AutoDetectIdentityProviderHandler_options_message"
|
|
@@ -1893,6 +2108,42 @@
|
|
|
1893
2108
|
}
|
|
1894
2109
|
}
|
|
1895
2110
|
},
|
|
2111
|
+
"ScopedPickWebIdHandler": {
|
|
2112
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler",
|
|
2113
|
+
"@prefix": true,
|
|
2114
|
+
"@context": {
|
|
2115
|
+
"options_webIdStore": {
|
|
2116
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_webIdStore"
|
|
2117
|
+
},
|
|
2118
|
+
"options_providerFactory": {
|
|
2119
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_providerFactory"
|
|
2120
|
+
},
|
|
2121
|
+
"options_identityDbUrl": {
|
|
2122
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_identityDbUrl"
|
|
2123
|
+
},
|
|
2124
|
+
"options_podLookupRepository": {
|
|
2125
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_podLookupRepository"
|
|
2126
|
+
},
|
|
2127
|
+
"options_fetch": {
|
|
2128
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_fetch"
|
|
2129
|
+
},
|
|
2130
|
+
"webIdStore": {
|
|
2131
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_webIdStore"
|
|
2132
|
+
},
|
|
2133
|
+
"providerFactory": {
|
|
2134
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_providerFactory"
|
|
2135
|
+
},
|
|
2136
|
+
"identityDbUrl": {
|
|
2137
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_identityDbUrl"
|
|
2138
|
+
},
|
|
2139
|
+
"podLookupRepository": {
|
|
2140
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_podLookupRepository"
|
|
2141
|
+
},
|
|
2142
|
+
"fetch": {
|
|
2143
|
+
"@id": "undefineds:dist/identity/oidc/ScopedPickWebIdHandler.jsonld#ScopedPickWebIdHandler_options_fetch"
|
|
2144
|
+
}
|
|
2145
|
+
}
|
|
2146
|
+
},
|
|
1896
2147
|
"UrlAwareRedisLocker": {
|
|
1897
2148
|
"@id": "undefineds:dist/storage/locking/UrlAwareRedisLocker.jsonld#UrlAwareRedisLocker",
|
|
1898
2149
|
"@prefix": true,
|
|
@@ -1936,8 +2187,8 @@
|
|
|
1936
2187
|
"args_provisionBaseUrl": {
|
|
1937
2188
|
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_provisionBaseUrl"
|
|
1938
2189
|
},
|
|
1939
|
-
"
|
|
1940
|
-
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#
|
|
2190
|
+
"args_identityDbUrl": {
|
|
2191
|
+
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_identityDbUrl"
|
|
1941
2192
|
},
|
|
1942
2193
|
"args_baseUrl": {
|
|
1943
2194
|
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_baseUrl"
|
|
@@ -1957,8 +2208,8 @@
|
|
|
1957
2208
|
"provisionBaseUrl": {
|
|
1958
2209
|
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_provisionBaseUrl"
|
|
1959
2210
|
},
|
|
1960
|
-
"
|
|
1961
|
-
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#
|
|
2211
|
+
"identityDbUrl": {
|
|
2212
|
+
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_identityDbUrl"
|
|
1962
2213
|
},
|
|
1963
2214
|
"baseUrl": {
|
|
1964
2215
|
"@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_baseUrl"
|
|
@@ -175,19 +175,19 @@ class SearchHttpHandler extends community_server_1.HttpHandler {
|
|
|
175
175
|
const query = `
|
|
176
176
|
PREFIX cred: <${models_1.XPOD_CREDENTIAL.NAMESPACE}>
|
|
177
177
|
PREFIX ai: <${models_1.XPOD_AI.NAMESPACE}>
|
|
178
|
-
SELECT ?apiKey ?baseUrl ?
|
|
178
|
+
SELECT ?apiKey ?baseUrl ?provider ?proxyUrl WHERE {
|
|
179
179
|
?cred a cred:Credential ;
|
|
180
180
|
cred:service "ai" ;
|
|
181
181
|
cred:status "active" ;
|
|
182
182
|
cred:apiKey ?apiKey .
|
|
183
|
-
OPTIONAL { ?cred cred:provider ?
|
|
183
|
+
OPTIONAL { ?cred cred:provider ?provider }
|
|
184
184
|
OPTIONAL {
|
|
185
|
-
?cred cred:provider ?
|
|
186
|
-
?
|
|
185
|
+
?cred cred:provider ?provider .
|
|
186
|
+
?provider ai:baseUrl ?baseUrl .
|
|
187
187
|
}
|
|
188
188
|
OPTIONAL {
|
|
189
|
-
?cred cred:provider ?
|
|
190
|
-
?
|
|
189
|
+
?cred cred:provider ?provider .
|
|
190
|
+
?provider ai:proxyUrl ?proxyUrl .
|
|
191
191
|
}
|
|
192
192
|
} LIMIT 1
|
|
193
193
|
`;
|
|
@@ -195,10 +195,10 @@ class SearchHttpHandler extends community_server_1.HttpHandler {
|
|
|
195
195
|
for await (const binding of bindingsStream) {
|
|
196
196
|
const apiKey = binding.get('apiKey');
|
|
197
197
|
const baseUrl = binding.get('baseUrl');
|
|
198
|
-
const
|
|
198
|
+
const provider = binding.get('provider');
|
|
199
199
|
const proxyUrl = binding.get('proxyUrl');
|
|
200
200
|
if (apiKey) {
|
|
201
|
-
const providerName = (0, models_1.normalizeAIConfigProviderId)(
|
|
201
|
+
const providerName = (0, models_1.normalizeAIConfigProviderId)(provider?.value || 'google') || 'google';
|
|
202
202
|
return {
|
|
203
203
|
apiKey: apiKey.value,
|
|
204
204
|
baseUrl: baseUrl?.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchHttpHandler.js","sourceRoot":"","sources":["../../../src/http/search/SearchHttpHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SearchHttpHandler - 语义搜索 HTTP 处理器\n *\n * 提供 /-/search 端点,支持基于向量的语义搜索。\n *\n * 端点:\n * - GET {path}/-/search?q=... 简单搜索\n * - POST {path}/-/search 复杂搜索(支持 filter 等)\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { HttpHandler } from '@solid/community-server';\nimport type { HttpHandlerInput, HttpRequest, HttpResponse } from '@solid/community-server';\nimport {\n NotImplementedHttpError,\n MethodNotAllowedHttpError,\n HttpError,\n IdentifierSetMultiMap,\n} from '@solid/community-server';\nimport { PERMISSIONS } from '@solidlab/policy-engine';\nimport type { CredentialsExtractor, PermissionReader, Authorizer, ResourceIdentifier } from '@solid/community-server';\nimport type { VectorStore } from '../../storage/vector/VectorStore';\nimport type { EmbeddingService } from '../../ai/service/EmbeddingService';\nimport type { SparqlEngine } from '../../storage/sparql/SubgraphQueryEngine';\nimport type { AiCredential } from '../../ai/service/types';\nimport type { VectorSearchOptions } from '../../storage/vector/types';\nimport { XPOD_AI, XPOD_CREDENTIAL, normalizeAIConfigProviderId } from '@undefineds.co/models';\n\nconst ALLOWED_METHODS = ['GET', 'POST', 'OPTIONS'];\n\n// ============================================\n// 请求/响应类型\n// ============================================\n\ninterface SearchRequest {\n /** 查询文本 */\n query?: string;\n /** 预计算的查询向量 */\n vector?: number[];\n /** 返回结果数量,默认 10 */\n limit?: number;\n /** 相似度阈值 (0-1) */\n threshold?: number;\n /** 过滤条件 */\n filter?: {\n type?: string;\n graphPrefix?: string;\n subjectPrefix?: string;\n };\n /** embedding 模型 */\n model?: string;\n}\n\ninterface SearchResult {\n /** 资源 URI */\n subject: string;\n /** 相似度分数 (0-1) */\n score: number;\n /** 距离 */\n distance?: number;\n /** 文本片段 */\n snippet?: string;\n}\n\ninterface SearchResponse {\n results: SearchResult[];\n model: string;\n took_ms: number;\n}\n\n// ============================================\n// 错误处理\n// ============================================\n\ntype SearchErrorCode =\n | 'INVALID_REQUEST'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NO_CREDENTIAL'\n | 'EMBEDDING_ERROR'\n | 'SEARCH_ERROR';\n\nclass SearchApiError extends Error {\n constructor(\n public readonly code: SearchErrorCode,\n public readonly statusCode: number,\n message: string,\n ) {\n super(message);\n this.name = 'SearchApiError';\n }\n\n static invalidRequest(message: string): SearchApiError {\n return new SearchApiError('INVALID_REQUEST', 400, message);\n }\n\n static noCredential(): SearchApiError {\n return new SearchApiError('NO_CREDENTIAL', 400, 'No AI credential found. Please configure AI credentials in your Pod settings.');\n }\n\n static embeddingError(message: string): SearchApiError {\n return new SearchApiError('EMBEDDING_ERROR', 502, `Embedding generation failed: ${message}`);\n }\n\n static searchError(message: string): SearchApiError {\n return new SearchApiError('SEARCH_ERROR', 500, `Search failed: ${message}`);\n }\n}\n\n// ============================================\n// Handler\n// ============================================\n\nexport interface SearchHttpHandlerOptions {\n sidecarPath?: string;\n defaultModel?: string;\n defaultLimit?: number;\n}\n\nexport class SearchHttpHandler extends HttpHandler {\n protected readonly logger = getLoggerFor(this);\n\n private readonly vectorStore: VectorStore;\n private readonly embeddingService: EmbeddingService;\n private readonly sparqlEngine: SparqlEngine;\n private readonly credentialsExtractor: CredentialsExtractor;\n private readonly permissionReader: PermissionReader;\n private readonly authorizer: Authorizer;\n private readonly sidecarPath: string;\n private readonly defaultModel: string;\n private readonly defaultLimit: number;\n\n public constructor(\n vectorStore: VectorStore,\n embeddingService: EmbeddingService,\n sparqlEngine: SparqlEngine,\n credentialsExtractor: CredentialsExtractor,\n permissionReader: PermissionReader,\n authorizer: Authorizer,\n options: SearchHttpHandlerOptions = {},\n ) {\n super();\n this.vectorStore = vectorStore;\n this.embeddingService = embeddingService;\n this.sparqlEngine = sparqlEngine;\n this.credentialsExtractor = credentialsExtractor;\n this.permissionReader = permissionReader;\n this.authorizer = authorizer;\n this.sidecarPath = options.sidecarPath ?? '/-/search';\n this.defaultModel = options.defaultModel ?? 'text-embedding-004';\n this.defaultLimit = options.defaultLimit ?? 10;\n }\n\n public override async canHandle({ request }: HttpHandlerInput): Promise<void> {\n const path = this.parseUrl(request).pathname;\n if (!path.includes(this.sidecarPath)) {\n throw new NotImplementedHttpError('Request is not targeting a search endpoint.');\n }\n }\n\n public override async handle({ request, response }: HttpHandlerInput): Promise<void> {\n const method = (request.method ?? 'GET').toUpperCase();\n\n if (method === 'OPTIONS') {\n this.writeOptions(response);\n return;\n }\n\n if (!ALLOWED_METHODS.includes(method)) {\n throw new MethodNotAllowedHttpError(ALLOWED_METHODS);\n }\n\n try {\n const url = this.parseUrl(request);\n const path = decodeURIComponent(url.pathname);\n\n const sidecarIndex = path.indexOf(this.sidecarPath);\n if (sidecarIndex === -1) {\n throw new NotImplementedHttpError('Request is not targeting a search endpoint.');\n }\n\n // 提取 base path(sidecar 之前的路径)\n let basePath = path.slice(0, sidecarIndex);\n if (!basePath.endsWith('/')) {\n basePath = `${basePath}/`;\n }\n\n const origin = `${url.protocol}//${url.host}`;\n const baseUrl = `${origin}${basePath}`;\n\n this.logger.debug(`Search request: ${method} ${path}, baseUrl=${baseUrl}`);\n\n // 鉴权\n await this.authorizeFor(baseUrl, request, [PERMISSIONS.Read]);\n\n // 解析请求\n const searchRequest = await this.parseSearchRequest(request, url);\n\n // 执行搜索\n const result = await this.executeSearch(searchRequest, baseUrl);\n\n this.sendJsonResponse(response, result);\n } catch (error: unknown) {\n this.handleError(response, error);\n }\n }\n\n /**\n * 解析搜索请求\n */\n private async parseSearchRequest(request: HttpRequest, url: URL): Promise<SearchRequest> {\n const method = (request.method ?? 'GET').toUpperCase();\n\n if (method === 'GET') {\n // GET 请求从 query string 解析\n const query = url.searchParams.get('q') || url.searchParams.get('query');\n const limit = url.searchParams.get('limit');\n const threshold = url.searchParams.get('threshold');\n const model = url.searchParams.get('model');\n\n if (!query) {\n throw SearchApiError.invalidRequest('Missing query parameter \"q\"');\n }\n\n return {\n query,\n limit: limit ? parseInt(limit, 10) : undefined,\n threshold: threshold ? parseFloat(threshold) : undefined,\n model: model || undefined,\n };\n }\n\n // POST 请求从 body 解析\n const body = await this.readJsonBody<SearchRequest>(request);\n\n if (!body.query && !body.vector) {\n throw SearchApiError.invalidRequest('Either \"query\" or \"vector\" is required');\n }\n\n return body;\n }\n\n /**\n * 执行搜索\n */\n private async executeSearch(request: SearchRequest, baseUrl: string): Promise<SearchResponse> {\n const startTime = Date.now();\n const model = request.model || this.defaultModel;\n\n let queryVector = request.vector;\n\n // 如果提供了 query 文本,需要生成 embedding\n if (request.query && !queryVector) {\n // 获取 AI 凭据\n const credential = await this.getAiCredential(baseUrl);\n if (!credential) {\n throw SearchApiError.noCredential();\n }\n\n try {\n queryVector = await this.embeddingService.embed(request.query, credential, model);\n } catch (error) {\n throw SearchApiError.embeddingError(error instanceof Error ? error.message : String(error));\n }\n }\n\n if (!queryVector) {\n throw SearchApiError.invalidRequest('Failed to generate query vector');\n }\n\n // 执行向量搜索\n const searchOptions: VectorSearchOptions = {\n limit: request.limit ?? this.defaultLimit,\n threshold: request.threshold,\n };\n\n try {\n const vectorResults = await this.vectorStore.search(model, queryVector, searchOptions);\n\n // 转换结果\n const results: SearchResult[] = vectorResults.map((r) => ({\n subject: this.vectorIdToSubject(r.id, baseUrl),\n score: r.score,\n distance: r.distance,\n }));\n\n return {\n results,\n model,\n took_ms: Date.now() - startTime,\n };\n } catch (error) {\n throw SearchApiError.searchError(error instanceof Error ? error.message : String(error));\n }\n }\n\n /**\n * 获取 AI 凭据\n */\n private async getAiCredential(podBaseUrl: string): Promise<AiCredential | null> {\n try {\n const query = `\n PREFIX cred: <${XPOD_CREDENTIAL.NAMESPACE}>\n PREFIX ai: <${XPOD_AI.NAMESPACE}>\n SELECT ?apiKey ?baseUrl ?providerUri ?proxyUrl WHERE {\n ?cred a cred:Credential ;\n cred:service \"ai\" ;\n cred:status \"active\" ;\n cred:apiKey ?apiKey .\n OPTIONAL { ?cred cred:provider ?providerUri }\n OPTIONAL {\n ?cred cred:provider ?providerUri .\n ?providerUri ai:baseUrl ?baseUrl .\n }\n OPTIONAL {\n ?cred cred:provider ?providerUri .\n ?providerUri ai:proxyUrl ?proxyUrl .\n }\n } LIMIT 1\n `;\n\n const bindingsStream = await this.sparqlEngine.queryBindings(query, podBaseUrl);\n\n for await (const binding of bindingsStream) {\n const apiKey = binding.get('apiKey');\n const baseUrl = binding.get('baseUrl');\n const providerUri = binding.get('providerUri');\n const proxyUrl = binding.get('proxyUrl');\n\n if (apiKey) {\n const providerName = normalizeAIConfigProviderId(providerUri?.value || 'google') || 'google';\n\n return {\n apiKey: apiKey.value,\n baseUrl: baseUrl?.value,\n provider: providerName,\n proxyUrl: proxyUrl?.value,\n };\n }\n }\n\n return null;\n } catch (error) {\n this.logger.error(`Failed to query AI credential: ${error}`);\n return null;\n }\n }\n\n /**\n * 将向量 ID 转换回 subject URI\n * 注意:这是一个简化实现,实际需要维护 ID -> URI 的映射\n */\n private vectorIdToSubject(id: number, baseUrl: string): string {\n // TODO: 实现 ID -> URI 映射查询\n // 目前返回占位符\n return `${baseUrl}#vector-${id}`;\n }\n\n // ============================================\n // 辅助方法\n // ============================================\n\n private handleError(response: HttpResponse, error: unknown): void {\n if (error instanceof SearchApiError) {\n this.logger.error(`Search API error [${error.code}]: ${error.message}`);\n this.sendErrorResponse(response, error.statusCode, error.code, error.message);\n return;\n }\n\n if (error instanceof HttpError) {\n const errorMsg = error.message || error.name || `HTTP ${error.statusCode}`;\n this.logger.error(`HTTP error ${error.statusCode}: ${errorMsg}`);\n this.sendErrorResponse(response, error.statusCode, 'HTTP_ERROR', errorMsg);\n return;\n }\n\n const errorMsg = error instanceof Error ? error.message : String(error);\n this.logger.error(`Unexpected error: ${errorMsg}`);\n this.sendErrorResponse(response, 500, 'INTERNAL_ERROR', errorMsg || 'Internal server error');\n }\n\n private async authorizeFor(\n baseUrl: string,\n request: HttpRequest,\n permissions: typeof PERMISSIONS[keyof typeof PERMISSIONS][],\n ): Promise<void> {\n const credentials = await this.credentialsExtractor.handleSafe(request);\n const identifier: ResourceIdentifier = { path: baseUrl };\n const requestedModes = new IdentifierSetMultiMap([[identifier, permissions]] as any);\n\n const availablePermissions = await this.permissionReader.handleSafe({\n credentials,\n identifier,\n requestedModes,\n } as any);\n\n this.logger.debug(`authorizeFor: baseUrl=${baseUrl}, webId=${credentials.agent?.webId}`);\n\n await this.authorizer.handleSafe({\n credentials,\n identifier,\n requestedModes,\n availablePermissions,\n } as any);\n }\n\n private parseUrl(request: HttpRequest): URL {\n const protocol = request.headers['x-forwarded-proto'] || 'http';\n const host = request.headers['x-forwarded-host'] || request.headers.host || 'localhost';\n return new URL(request.url!, `${protocol}://${host}`);\n }\n\n private async readJsonBody<T>(request: HttpRequest): Promise<T> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString('utf8');\n try {\n return JSON.parse(body) as T;\n } catch {\n throw SearchApiError.invalidRequest('Invalid JSON body');\n }\n }\n\n private sendJsonResponse(response: HttpResponse, data: unknown, status = 200): void {\n response.writeHead(status, {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n });\n response.end(JSON.stringify(data));\n }\n\n private sendErrorResponse(\n response: HttpResponse,\n status: number,\n code: string,\n message: string,\n ): void {\n response.writeHead(status, {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n });\n response.end(\n JSON.stringify({\n error: true,\n code,\n message,\n }),\n );\n }\n\n private writeOptions(response: HttpResponse): void {\n response.writeHead(204, {\n 'Access-Control-Allow-Methods': ALLOWED_METHODS.join(', '),\n 'Access-Control-Allow-Headers': 'Content-Type, Authorization',\n });\n response.end();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SearchHttpHandler.js","sourceRoot":"","sources":["../../../src/http/search/SearchHttpHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SearchHttpHandler - 语义搜索 HTTP 处理器\n *\n * 提供 /-/search 端点,支持基于向量的语义搜索。\n *\n * 端点:\n * - GET {path}/-/search?q=... 简单搜索\n * - POST {path}/-/search 复杂搜索(支持 filter 等)\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { HttpHandler } from '@solid/community-server';\nimport type { HttpHandlerInput, HttpRequest, HttpResponse } from '@solid/community-server';\nimport {\n NotImplementedHttpError,\n MethodNotAllowedHttpError,\n HttpError,\n IdentifierSetMultiMap,\n} from '@solid/community-server';\nimport { PERMISSIONS } from '@solidlab/policy-engine';\nimport type { CredentialsExtractor, PermissionReader, Authorizer, ResourceIdentifier } from '@solid/community-server';\nimport type { VectorStore } from '../../storage/vector/VectorStore';\nimport type { EmbeddingService } from '../../ai/service/EmbeddingService';\nimport type { SparqlEngine } from '../../storage/sparql/SubgraphQueryEngine';\nimport type { AiCredential } from '../../ai/service/types';\nimport type { VectorSearchOptions } from '../../storage/vector/types';\nimport { XPOD_AI, XPOD_CREDENTIAL, normalizeAIConfigProviderId } from '@undefineds.co/models';\n\nconst ALLOWED_METHODS = ['GET', 'POST', 'OPTIONS'];\n\n// ============================================\n// 请求/响应类型\n// ============================================\n\ninterface SearchRequest {\n /** 查询文本 */\n query?: string;\n /** 预计算的查询向量 */\n vector?: number[];\n /** 返回结果数量,默认 10 */\n limit?: number;\n /** 相似度阈值 (0-1) */\n threshold?: number;\n /** 过滤条件 */\n filter?: {\n type?: string;\n graphPrefix?: string;\n subjectPrefix?: string;\n };\n /** embedding 模型 */\n model?: string;\n}\n\ninterface SearchResult {\n /** 资源 URI */\n subject: string;\n /** 相似度分数 (0-1) */\n score: number;\n /** 距离 */\n distance?: number;\n /** 文本片段 */\n snippet?: string;\n}\n\ninterface SearchResponse {\n results: SearchResult[];\n model: string;\n took_ms: number;\n}\n\n// ============================================\n// 错误处理\n// ============================================\n\ntype SearchErrorCode =\n | 'INVALID_REQUEST'\n | 'UNAUTHORIZED'\n | 'FORBIDDEN'\n | 'NO_CREDENTIAL'\n | 'EMBEDDING_ERROR'\n | 'SEARCH_ERROR';\n\nclass SearchApiError extends Error {\n constructor(\n public readonly code: SearchErrorCode,\n public readonly statusCode: number,\n message: string,\n ) {\n super(message);\n this.name = 'SearchApiError';\n }\n\n static invalidRequest(message: string): SearchApiError {\n return new SearchApiError('INVALID_REQUEST', 400, message);\n }\n\n static noCredential(): SearchApiError {\n return new SearchApiError('NO_CREDENTIAL', 400, 'No AI credential found. Please configure AI credentials in your Pod settings.');\n }\n\n static embeddingError(message: string): SearchApiError {\n return new SearchApiError('EMBEDDING_ERROR', 502, `Embedding generation failed: ${message}`);\n }\n\n static searchError(message: string): SearchApiError {\n return new SearchApiError('SEARCH_ERROR', 500, `Search failed: ${message}`);\n }\n}\n\n// ============================================\n// Handler\n// ============================================\n\nexport interface SearchHttpHandlerOptions {\n sidecarPath?: string;\n defaultModel?: string;\n defaultLimit?: number;\n}\n\nexport class SearchHttpHandler extends HttpHandler {\n protected readonly logger = getLoggerFor(this);\n\n private readonly vectorStore: VectorStore;\n private readonly embeddingService: EmbeddingService;\n private readonly sparqlEngine: SparqlEngine;\n private readonly credentialsExtractor: CredentialsExtractor;\n private readonly permissionReader: PermissionReader;\n private readonly authorizer: Authorizer;\n private readonly sidecarPath: string;\n private readonly defaultModel: string;\n private readonly defaultLimit: number;\n\n public constructor(\n vectorStore: VectorStore,\n embeddingService: EmbeddingService,\n sparqlEngine: SparqlEngine,\n credentialsExtractor: CredentialsExtractor,\n permissionReader: PermissionReader,\n authorizer: Authorizer,\n options: SearchHttpHandlerOptions = {},\n ) {\n super();\n this.vectorStore = vectorStore;\n this.embeddingService = embeddingService;\n this.sparqlEngine = sparqlEngine;\n this.credentialsExtractor = credentialsExtractor;\n this.permissionReader = permissionReader;\n this.authorizer = authorizer;\n this.sidecarPath = options.sidecarPath ?? '/-/search';\n this.defaultModel = options.defaultModel ?? 'text-embedding-004';\n this.defaultLimit = options.defaultLimit ?? 10;\n }\n\n public override async canHandle({ request }: HttpHandlerInput): Promise<void> {\n const path = this.parseUrl(request).pathname;\n if (!path.includes(this.sidecarPath)) {\n throw new NotImplementedHttpError('Request is not targeting a search endpoint.');\n }\n }\n\n public override async handle({ request, response }: HttpHandlerInput): Promise<void> {\n const method = (request.method ?? 'GET').toUpperCase();\n\n if (method === 'OPTIONS') {\n this.writeOptions(response);\n return;\n }\n\n if (!ALLOWED_METHODS.includes(method)) {\n throw new MethodNotAllowedHttpError(ALLOWED_METHODS);\n }\n\n try {\n const url = this.parseUrl(request);\n const path = decodeURIComponent(url.pathname);\n\n const sidecarIndex = path.indexOf(this.sidecarPath);\n if (sidecarIndex === -1) {\n throw new NotImplementedHttpError('Request is not targeting a search endpoint.');\n }\n\n // 提取 base path(sidecar 之前的路径)\n let basePath = path.slice(0, sidecarIndex);\n if (!basePath.endsWith('/')) {\n basePath = `${basePath}/`;\n }\n\n const origin = `${url.protocol}//${url.host}`;\n const baseUrl = `${origin}${basePath}`;\n\n this.logger.debug(`Search request: ${method} ${path}, baseUrl=${baseUrl}`);\n\n // 鉴权\n await this.authorizeFor(baseUrl, request, [PERMISSIONS.Read]);\n\n // 解析请求\n const searchRequest = await this.parseSearchRequest(request, url);\n\n // 执行搜索\n const result = await this.executeSearch(searchRequest, baseUrl);\n\n this.sendJsonResponse(response, result);\n } catch (error: unknown) {\n this.handleError(response, error);\n }\n }\n\n /**\n * 解析搜索请求\n */\n private async parseSearchRequest(request: HttpRequest, url: URL): Promise<SearchRequest> {\n const method = (request.method ?? 'GET').toUpperCase();\n\n if (method === 'GET') {\n // GET 请求从 query string 解析\n const query = url.searchParams.get('q') || url.searchParams.get('query');\n const limit = url.searchParams.get('limit');\n const threshold = url.searchParams.get('threshold');\n const model = url.searchParams.get('model');\n\n if (!query) {\n throw SearchApiError.invalidRequest('Missing query parameter \"q\"');\n }\n\n return {\n query,\n limit: limit ? parseInt(limit, 10) : undefined,\n threshold: threshold ? parseFloat(threshold) : undefined,\n model: model || undefined,\n };\n }\n\n // POST 请求从 body 解析\n const body = await this.readJsonBody<SearchRequest>(request);\n\n if (!body.query && !body.vector) {\n throw SearchApiError.invalidRequest('Either \"query\" or \"vector\" is required');\n }\n\n return body;\n }\n\n /**\n * 执行搜索\n */\n private async executeSearch(request: SearchRequest, baseUrl: string): Promise<SearchResponse> {\n const startTime = Date.now();\n const model = request.model || this.defaultModel;\n\n let queryVector = request.vector;\n\n // 如果提供了 query 文本,需要生成 embedding\n if (request.query && !queryVector) {\n // 获取 AI 凭据\n const credential = await this.getAiCredential(baseUrl);\n if (!credential) {\n throw SearchApiError.noCredential();\n }\n\n try {\n queryVector = await this.embeddingService.embed(request.query, credential, model);\n } catch (error) {\n throw SearchApiError.embeddingError(error instanceof Error ? error.message : String(error));\n }\n }\n\n if (!queryVector) {\n throw SearchApiError.invalidRequest('Failed to generate query vector');\n }\n\n // 执行向量搜索\n const searchOptions: VectorSearchOptions = {\n limit: request.limit ?? this.defaultLimit,\n threshold: request.threshold,\n };\n\n try {\n const vectorResults = await this.vectorStore.search(model, queryVector, searchOptions);\n\n // 转换结果\n const results: SearchResult[] = vectorResults.map((r) => ({\n subject: this.vectorIdToSubject(r.id, baseUrl),\n score: r.score,\n distance: r.distance,\n }));\n\n return {\n results,\n model,\n took_ms: Date.now() - startTime,\n };\n } catch (error) {\n throw SearchApiError.searchError(error instanceof Error ? error.message : String(error));\n }\n }\n\n /**\n * 获取 AI 凭据\n */\n private async getAiCredential(podBaseUrl: string): Promise<AiCredential | null> {\n try {\n const query = `\n PREFIX cred: <${XPOD_CREDENTIAL.NAMESPACE}>\n PREFIX ai: <${XPOD_AI.NAMESPACE}>\n SELECT ?apiKey ?baseUrl ?provider ?proxyUrl WHERE {\n ?cred a cred:Credential ;\n cred:service \"ai\" ;\n cred:status \"active\" ;\n cred:apiKey ?apiKey .\n OPTIONAL { ?cred cred:provider ?provider }\n OPTIONAL {\n ?cred cred:provider ?provider .\n ?provider ai:baseUrl ?baseUrl .\n }\n OPTIONAL {\n ?cred cred:provider ?provider .\n ?provider ai:proxyUrl ?proxyUrl .\n }\n } LIMIT 1\n `;\n\n const bindingsStream = await this.sparqlEngine.queryBindings(query, podBaseUrl);\n\n for await (const binding of bindingsStream) {\n const apiKey = binding.get('apiKey');\n const baseUrl = binding.get('baseUrl');\n const provider = binding.get('provider');\n const proxyUrl = binding.get('proxyUrl');\n\n if (apiKey) {\n const providerName = normalizeAIConfigProviderId(provider?.value || 'google') || 'google';\n\n return {\n apiKey: apiKey.value,\n baseUrl: baseUrl?.value,\n provider: providerName,\n proxyUrl: proxyUrl?.value,\n };\n }\n }\n\n return null;\n } catch (error) {\n this.logger.error(`Failed to query AI credential: ${error}`);\n return null;\n }\n }\n\n /**\n * 将向量 ID 转换回 subject URI\n * 注意:这是一个简化实现,实际需要维护 ID -> URI 的映射\n */\n private vectorIdToSubject(id: number, baseUrl: string): string {\n // TODO: 实现 ID -> URI 映射查询\n // 目前返回占位符\n return `${baseUrl}#vector-${id}`;\n }\n\n // ============================================\n // 辅助方法\n // ============================================\n\n private handleError(response: HttpResponse, error: unknown): void {\n if (error instanceof SearchApiError) {\n this.logger.error(`Search API error [${error.code}]: ${error.message}`);\n this.sendErrorResponse(response, error.statusCode, error.code, error.message);\n return;\n }\n\n if (error instanceof HttpError) {\n const errorMsg = error.message || error.name || `HTTP ${error.statusCode}`;\n this.logger.error(`HTTP error ${error.statusCode}: ${errorMsg}`);\n this.sendErrorResponse(response, error.statusCode, 'HTTP_ERROR', errorMsg);\n return;\n }\n\n const errorMsg = error instanceof Error ? error.message : String(error);\n this.logger.error(`Unexpected error: ${errorMsg}`);\n this.sendErrorResponse(response, 500, 'INTERNAL_ERROR', errorMsg || 'Internal server error');\n }\n\n private async authorizeFor(\n baseUrl: string,\n request: HttpRequest,\n permissions: typeof PERMISSIONS[keyof typeof PERMISSIONS][],\n ): Promise<void> {\n const credentials = await this.credentialsExtractor.handleSafe(request);\n const identifier: ResourceIdentifier = { path: baseUrl };\n const requestedModes = new IdentifierSetMultiMap([[identifier, permissions]] as any);\n\n const availablePermissions = await this.permissionReader.handleSafe({\n credentials,\n identifier,\n requestedModes,\n } as any);\n\n this.logger.debug(`authorizeFor: baseUrl=${baseUrl}, webId=${credentials.agent?.webId}`);\n\n await this.authorizer.handleSafe({\n credentials,\n identifier,\n requestedModes,\n availablePermissions,\n } as any);\n }\n\n private parseUrl(request: HttpRequest): URL {\n const protocol = request.headers['x-forwarded-proto'] || 'http';\n const host = request.headers['x-forwarded-host'] || request.headers.host || 'localhost';\n return new URL(request.url!, `${protocol}://${host}`);\n }\n\n private async readJsonBody<T>(request: HttpRequest): Promise<T> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString('utf8');\n try {\n return JSON.parse(body) as T;\n } catch {\n throw SearchApiError.invalidRequest('Invalid JSON body');\n }\n }\n\n private sendJsonResponse(response: HttpResponse, data: unknown, status = 200): void {\n response.writeHead(status, {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n });\n response.end(JSON.stringify(data));\n }\n\n private sendErrorResponse(\n response: HttpResponse,\n status: number,\n code: string,\n message: string,\n ): void {\n response.writeHead(status, {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n });\n response.end(\n JSON.stringify({\n error: true,\n code,\n message,\n }),\n );\n }\n\n private writeOptions(response: HttpResponse): void {\n response.writeHead(204, {\n 'Access-Control-Allow-Methods': ALLOWED_METHODS.join(', '),\n 'Access-Control-Allow-Headers': 'Content-Type, Authorization',\n });\n response.end();\n }\n}\n"]}
|