@undefineds.co/xpod 0.3.25 → 0.3.27
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/cloud.json +6 -5
- package/config/main.json +0 -3
- package/config/xpod.base.json +0 -32
- package/dist/api/container/index.js +3 -0
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/routes.js +2 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +5 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/authorization/AuthMode.d.ts +8 -0
- package/dist/authorization/AuthMode.js +51 -0
- package/dist/authorization/AuthMode.js.map +1 -0
- package/dist/authorization/PodAuthorizationResources.d.ts +18 -0
- package/dist/authorization/PodAuthorizationResources.js +108 -0
- package/dist/authorization/PodAuthorizationResources.js.map +1 -0
- package/dist/cli/commands/start.js +11 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +3 -2
- package/dist/components/context.jsonld +115 -14
- package/dist/index.d.ts +5 -3
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/main.js +11 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.d.ts +6 -2
- package/dist/provision/LocalPodProvisioningService.js +36 -33
- package/dist/provision/LocalPodProvisioningService.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.jsonld +65 -8
- package/dist/runtime/XpodRuntime.js +0 -1
- package/dist/runtime/XpodRuntime.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +4 -2
- package/dist/runtime/bootstrap.js +43 -11
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +6 -1
- package/dist/runtime/css-process.js +18 -6
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/lifecycle.d.ts +2 -3
- package/dist/runtime/lifecycle.js +2 -2
- package/dist/runtime/lifecycle.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +2 -1
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +2 -3
- package/dist/storage/accessors/SolidRdfDataAccessor.js +48 -42
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +1 -1
- package/dist/storage/keyvalue/BaseKeyValueStorage.d.ts +33 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.js +106 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.js.map +1 -0
- package/dist/storage/keyvalue/BaseKeyValueStorage.jsonld +177 -0
- package/dist/storage/keyvalue/PostgresKeyValueStorage.d.ts +9 -18
- package/dist/storage/keyvalue/PostgresKeyValueStorage.js +24 -96
- package/dist/storage/keyvalue/PostgresKeyValueStorage.js.map +1 -1
- package/dist/storage/keyvalue/PostgresKeyValueStorage.jsonld +15 -58
- package/dist/storage/keyvalue/SqliteKeyValueStorage.d.ts +9 -15
- package/dist/storage/keyvalue/SqliteKeyValueStorage.js +36 -104
- package/dist/storage/keyvalue/SqliteKeyValueStorage.js.map +1 -1
- package/dist/storage/keyvalue/SqliteKeyValueStorage.jsonld +21 -52
- package/dist/storage/quint/BaseQuintStore.d.ts +4 -1
- package/dist/storage/quint/BaseQuintStore.js +41 -52
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +4 -3
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.d.ts +43 -54
- package/dist/storage/quint/SqliteQuintStore.js +197 -520
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +38 -86
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +118 -0
- package/dist/storage/rdf/PostgresRdfEngine.js +2609 -0
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +657 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -2
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +3 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +3 -3
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +20 -20
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +1 -1
- package/dist/storage/rdf/index.d.ts +2 -1
- package/dist/storage/rdf/index.js +3 -1
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +19 -0
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/rdf/types.jsonld +115 -0
- package/package.json +2 -2
- package/config/runtime-open.json +0 -22
- package/dist/authorization/AuthModeSelector.d.ts +0 -10
- package/dist/authorization/AuthModeSelector.js +0 -27
- package/dist/authorization/AuthModeSelector.js.map +0 -1
- package/dist/authorization/AuthModeSelector.jsonld +0 -81
|
@@ -16,8 +16,7 @@ interface StartCssRuntimeOptions {
|
|
|
16
16
|
host: RuntimeHost;
|
|
17
17
|
runtimeShorthand: Record<string, string | number | boolean>;
|
|
18
18
|
supervisor: Supervisor;
|
|
19
|
-
|
|
20
|
-
createCssRuntimeConfig: (state: RuntimeBootstrapState, open: boolean) => string;
|
|
19
|
+
createCssRuntimeConfig: (state: RuntimeBootstrapState) => string;
|
|
21
20
|
cssRunner: CssRuntimeRunner;
|
|
22
21
|
}
|
|
23
22
|
interface StartApiRuntimeOptions {
|
|
@@ -46,7 +45,7 @@ interface StopRuntimeServicesOptions {
|
|
|
46
45
|
}
|
|
47
46
|
export declare function createOpenAuthContext(baseUrl: string, override?: AuthContext): AuthContext;
|
|
48
47
|
export declare function registerManagedRuntimeServices(supervisor: Supervisor, services: RuntimeServices): void;
|
|
49
|
-
export declare function startCssRuntime({ state, host, runtimeShorthand, supervisor,
|
|
48
|
+
export declare function startCssRuntime({ state, host, runtimeShorthand, supervisor, createCssRuntimeConfig, cssRunner, }: StartCssRuntimeOptions): Promise<App>;
|
|
50
49
|
export declare function startApiRuntime({ state, host, supervisor, authContext, apiRunner, }: StartApiRuntimeOptions): Promise<ApiServiceHandle>;
|
|
51
50
|
export declare function startGatewayRuntime({ state, host, supervisor, shutdownHandler, gatewayRunner, }: StartGatewayRuntimeOptions): Promise<GatewayRuntimeHandle>;
|
|
52
51
|
export declare function stopRuntimeServices({ services, supervisor, logger, host, state, unregisterSocketOrigins, closeIdentityConnections, restoreRuntimeEnv, }: StopRuntimeServicesOptions): Promise<void>;
|
|
@@ -39,8 +39,8 @@ function registerManagedRuntimeServices(supervisor, services) {
|
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
-
async function startCssRuntime({ state, host, runtimeShorthand, supervisor,
|
|
43
|
-
const cssConfigPath = createCssRuntimeConfig(state
|
|
42
|
+
async function startCssRuntime({ state, host, runtimeShorthand, supervisor, createCssRuntimeConfig, cssRunner, }) {
|
|
43
|
+
const cssConfigPath = createCssRuntimeConfig(state);
|
|
44
44
|
supervisor.setStatus('css', 'starting', { startTime: Date.now() });
|
|
45
45
|
const cssApp = await cssRunner.start({
|
|
46
46
|
configPath: cssConfigPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/runtime/lifecycle.ts"],"names":[],"mappings":";;AA+DA,sDAWC;AAED,wEAqBC;AAED,0CAkCC;AAED,0CAkBC;AAED,kDAyBC;AAED,kDAiDC;AAlOD,iDAA8C;AAG9C,gFAAiF;AAmDjF,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AAC7C,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAe,EAAE,QAAsB;IAC3E,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI,GAAG,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACzE,SAAS,EAAE,mBAAmB;QAC9B,WAAW,EAAE,gBAAgB;KAC9B,CAAC;AACJ,CAAC;AAED,SAAgB,8BAA8B,CAC5C,UAAsB,EACtB,QAAyB;IAEzB,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,IAAG,EAAE;QAC1C,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,IAAG,EAAE;QAC1C,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,IAAG,EAAE;QAC9C,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,sBAAsB,EACtB,SAAS,GACc;IACvB,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAE/F,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;QACnC,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,2BAAY;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE;YACT,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAI,EAAE,CAAC;YACnF,GAAG,gBAAgB;SACpB;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,uBAAuB,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAI,EAAE,WAAW,CAAC,CAAC;QAC3D,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,iCAAiC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,KAAK,EACL,IAAI,EACJ,UAAU,EACV,WAAW,EACX,SAAS,GACc;IACvB,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,WAAW,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC;QAC9D,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1J,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,EACxC,KAAK,EACL,IAAI,EACJ,UAAU,EACV,eAAe,EACf,aAAa,GACc;IAC3B,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC;QACxC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QACjC,eAAe;QACf,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,IAAI;QACjB,UAAU;QACV,OAAO,EAAE;YACP,GAAG,EAAE,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,oBAAoB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE;YACvH,GAAG,EAAE,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,oBAAoB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE;SACxH;KACF,CAAC,CAAC;IACH,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC3I,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,EACxC,QAAQ,EACR,UAAU,EACV,MAAM,EACN,IAAI,EACJ,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GACU;IAC3B,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7B,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAA,+CAAwB,GAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,uBAAuB,EAAE,CAAC;IAChC,MAAM,wBAAwB,EAAE,CAAC;IACjC,iBAAiB,EAAE,CAAC;AACtB,CAAC","sourcesContent":["import type { App } from '@solid/community-server';\nimport type { AuthContext } from '../api/auth/AuthContext';\nimport type { ApiServiceHandle } from '../api/runtime';\nimport { Supervisor } from '../supervisor/Supervisor';\nimport type { Logger } from 'global-logger-factory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport type { RuntimeBootstrapState } from './bootstrap';\nimport { closeManagedRedisClients } from '../storage/redis/RedisClientLifecycle';\nimport type {\n ApiRuntimeRunner,\n CssRuntimeRunner,\n GatewayRuntimeHandle,\n GatewayRuntimeRunner,\n} from './runner/types';\n\nexport interface RuntimeServices {\n cssApp?: App;\n apiService?: ApiServiceHandle;\n gateway?: GatewayRuntimeHandle;\n}\n\ninterface StartCssRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n runtimeShorthand: Record<string, string | number | boolean>;\n supervisor: Supervisor;\n open: boolean;\n createCssRuntimeConfig: (state: RuntimeBootstrapState, open: boolean) => string;\n cssRunner: CssRuntimeRunner;\n}\n\ninterface StartApiRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n supervisor: Supervisor;\n authContext?: AuthContext;\n apiRunner: ApiRuntimeRunner;\n}\n\ninterface StartGatewayRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n supervisor: Supervisor;\n shutdownHandler: () => Promise<void>;\n gatewayRunner: GatewayRuntimeRunner;\n}\n\ninterface StopRuntimeServicesOptions {\n services: RuntimeServices;\n supervisor: Supervisor;\n logger: Logger;\n host: RuntimeHost;\n state: RuntimeBootstrapState;\n unregisterSocketOrigins: () => Promise<void>;\n closeIdentityConnections: () => Promise<void>;\n restoreRuntimeEnv: () => void;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nexport function createOpenAuthContext(baseUrl: string, override?: AuthContext): AuthContext {\n if (override) {\n return override;\n }\n\n return {\n type: 'solid',\n webId: new URL('test/profile/card#me', ensureTrailingSlash(baseUrl)).href,\n accountId: 'xpod-open-account',\n displayName: 'Xpod Open Mode',\n };\n}\n\nexport function registerManagedRuntimeServices(\n supervisor: Supervisor,\n services: RuntimeServices,\n): void {\n supervisor.registerManaged('css', async() => {\n if (services.cssApp) {\n await services.cssApp.stop();\n }\n });\n\n supervisor.registerManaged('api', async() => {\n if (services.apiService) {\n await services.apiService.stop();\n }\n });\n\n supervisor.registerManaged('gateway', async() => {\n if (services.gateway) {\n await services.gateway.stop();\n }\n });\n}\n\nexport async function startCssRuntime({\n state,\n host,\n runtimeShorthand,\n supervisor,\n open,\n createCssRuntimeConfig,\n cssRunner,\n}: StartCssRuntimeOptions): Promise<App> {\n const cssConfigPath = createCssRuntimeConfig(state, open || state.cssAuthMode === 'allow-all');\n\n supervisor.setStatus('css', 'starting', { startTime: Date.now() });\n const cssApp = await cssRunner.start({\n configPath: cssConfigPath,\n packageRoot: PACKAGE_ROOT,\n logLevel: state.logLevel,\n shorthand: {\n ...(state.sockets.css ? { socket: state.sockets.css } : { port: state.ports.css! }),\n ...runtimeShorthand,\n },\n });\n\n if (state.sockets.css) {\n const ready = await host.isConnectionTargetReady({ socketPath: state.sockets.css }, 5_000);\n if (!ready) {\n throw new Error(`Timed out waiting for CSS socket ${state.sockets.css}`);\n }\n supervisor.addLog('css', 'info', `CSS started (unix://${state.sockets.css})`);\n } else {\n await host.waitForPortReady(state.ports.css!, '127.0.0.1');\n supervisor.addLog('css', 'info', `CSS started (http://127.0.0.1:${state.ports.css})`);\n }\n supervisor.setStatus('css', 'running', { startTime: Date.now() });\n return cssApp;\n}\n\nexport async function startApiRuntime({\n state,\n host,\n supervisor,\n authContext,\n apiRunner,\n}: StartApiRuntimeOptions): Promise<ApiServiceHandle> {\n supervisor.setStatus('api', 'starting', { startTime: Date.now() });\n\n const apiService = await apiRunner.start({\n open: state.apiOpen,\n authContext: createOpenAuthContext(state.baseUrl, authContext),\n runtimeHost: host,\n });\n\n supervisor.addLog('api', 'info', `API started (${state.transport === 'socket' ? `unix://${state.sockets.api}` : `http://127.0.0.1:${state.ports.api}`})`);\n supervisor.setStatus('api', 'running', { startTime: Date.now() });\n return apiService;\n}\n\nexport async function startGatewayRuntime({\n state,\n host,\n supervisor,\n shutdownHandler,\n gatewayRunner,\n}: StartGatewayRuntimeOptions): Promise<GatewayRuntimeHandle> {\n supervisor.setStatus('gateway', 'starting', { startTime: Date.now() });\n\n const gateway = await gatewayRunner.start({\n port: state.ports.gateway,\n bindHost: state.bindHost,\n socketPath: state.sockets.gateway,\n shutdownHandler,\n baseUrl: state.baseUrl,\n runtimeHost: host,\n supervisor,\n targets: {\n css: state.transport === 'socket' ? { socketPath: state.sockets.css! } : { url: `http://127.0.0.1:${state.ports.css}` },\n api: state.transport === 'socket' ? { socketPath: state.sockets.api! } : { url: `http://127.0.0.1:${state.ports.api}` },\n },\n });\n supervisor.addLog('xpod', 'info', `Gateway started (${state.transport === 'socket' ? `unix://${state.sockets.gateway}` : state.baseUrl})`);\n supervisor.setStatus('gateway', 'running', { startTime: Date.now() });\n return gateway;\n}\n\nexport async function stopRuntimeServices({\n services,\n supervisor,\n logger,\n host,\n state,\n unregisterSocketOrigins,\n closeIdentityConnections,\n restoreRuntimeEnv,\n}: StopRuntimeServicesOptions): Promise<void> {\n try {\n if (services.gateway) {\n await services.gateway.stop();\n supervisor.setStatus('gateway', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop gateway: ${String(error)}`);\n }\n\n try {\n if (services.apiService) {\n await services.apiService.stop();\n supervisor.setStatus('api', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop api: ${String(error)}`);\n }\n\n try {\n if (services.cssApp) {\n await services.cssApp.stop();\n supervisor.setStatus('css', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop css: ${String(error)}`);\n }\n\n await closeManagedRedisClients();\n\n if (state.sockets.css) {\n host.cleanupSocketPath(state.sockets.css);\n }\n if (state.sockets.api) {\n host.cleanupSocketPath(state.sockets.api);\n }\n\n await unregisterSocketOrigins();\n await closeIdentityConnections();\n restoreRuntimeEnv();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/runtime/lifecycle.ts"],"names":[],"mappings":"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","sourcesContent":["import type { App } from '@solid/community-server';\nimport type { AuthContext } from '../api/auth/AuthContext';\nimport type { ApiServiceHandle } from '../api/runtime';\nimport { Supervisor } from '../supervisor/Supervisor';\nimport type { Logger } from 'global-logger-factory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport type { RuntimeBootstrapState } from './bootstrap';\nimport { closeManagedRedisClients } from '../storage/redis/RedisClientLifecycle';\nimport type {\n ApiRuntimeRunner,\n CssRuntimeRunner,\n GatewayRuntimeHandle,\n GatewayRuntimeRunner,\n} from './runner/types';\n\nexport interface RuntimeServices {\n cssApp?: App;\n apiService?: ApiServiceHandle;\n gateway?: GatewayRuntimeHandle;\n}\n\ninterface StartCssRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n runtimeShorthand: Record<string, string | number | boolean>;\n supervisor: Supervisor;\n createCssRuntimeConfig: (state: RuntimeBootstrapState) => string;\n cssRunner: CssRuntimeRunner;\n}\n\ninterface StartApiRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n supervisor: Supervisor;\n authContext?: AuthContext;\n apiRunner: ApiRuntimeRunner;\n}\n\ninterface StartGatewayRuntimeOptions {\n state: RuntimeBootstrapState;\n host: RuntimeHost;\n supervisor: Supervisor;\n shutdownHandler: () => Promise<void>;\n gatewayRunner: GatewayRuntimeRunner;\n}\n\ninterface StopRuntimeServicesOptions {\n services: RuntimeServices;\n supervisor: Supervisor;\n logger: Logger;\n host: RuntimeHost;\n state: RuntimeBootstrapState;\n unregisterSocketOrigins: () => Promise<void>;\n closeIdentityConnections: () => Promise<void>;\n restoreRuntimeEnv: () => void;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nexport function createOpenAuthContext(baseUrl: string, override?: AuthContext): AuthContext {\n if (override) {\n return override;\n }\n\n return {\n type: 'solid',\n webId: new URL('test/profile/card#me', ensureTrailingSlash(baseUrl)).href,\n accountId: 'xpod-open-account',\n displayName: 'Xpod Open Mode',\n };\n}\n\nexport function registerManagedRuntimeServices(\n supervisor: Supervisor,\n services: RuntimeServices,\n): void {\n supervisor.registerManaged('css', async() => {\n if (services.cssApp) {\n await services.cssApp.stop();\n }\n });\n\n supervisor.registerManaged('api', async() => {\n if (services.apiService) {\n await services.apiService.stop();\n }\n });\n\n supervisor.registerManaged('gateway', async() => {\n if (services.gateway) {\n await services.gateway.stop();\n }\n });\n}\n\nexport async function startCssRuntime({\n state,\n host,\n runtimeShorthand,\n supervisor,\n createCssRuntimeConfig,\n cssRunner,\n}: StartCssRuntimeOptions): Promise<App> {\n const cssConfigPath = createCssRuntimeConfig(state);\n\n supervisor.setStatus('css', 'starting', { startTime: Date.now() });\n const cssApp = await cssRunner.start({\n configPath: cssConfigPath,\n packageRoot: PACKAGE_ROOT,\n logLevel: state.logLevel,\n shorthand: {\n ...(state.sockets.css ? { socket: state.sockets.css } : { port: state.ports.css! }),\n ...runtimeShorthand,\n },\n });\n\n if (state.sockets.css) {\n const ready = await host.isConnectionTargetReady({ socketPath: state.sockets.css }, 5_000);\n if (!ready) {\n throw new Error(`Timed out waiting for CSS socket ${state.sockets.css}`);\n }\n supervisor.addLog('css', 'info', `CSS started (unix://${state.sockets.css})`);\n } else {\n await host.waitForPortReady(state.ports.css!, '127.0.0.1');\n supervisor.addLog('css', 'info', `CSS started (http://127.0.0.1:${state.ports.css})`);\n }\n supervisor.setStatus('css', 'running', { startTime: Date.now() });\n return cssApp;\n}\n\nexport async function startApiRuntime({\n state,\n host,\n supervisor,\n authContext,\n apiRunner,\n}: StartApiRuntimeOptions): Promise<ApiServiceHandle> {\n supervisor.setStatus('api', 'starting', { startTime: Date.now() });\n\n const apiService = await apiRunner.start({\n open: state.apiOpen,\n authContext: createOpenAuthContext(state.baseUrl, authContext),\n runtimeHost: host,\n });\n\n supervisor.addLog('api', 'info', `API started (${state.transport === 'socket' ? `unix://${state.sockets.api}` : `http://127.0.0.1:${state.ports.api}`})`);\n supervisor.setStatus('api', 'running', { startTime: Date.now() });\n return apiService;\n}\n\nexport async function startGatewayRuntime({\n state,\n host,\n supervisor,\n shutdownHandler,\n gatewayRunner,\n}: StartGatewayRuntimeOptions): Promise<GatewayRuntimeHandle> {\n supervisor.setStatus('gateway', 'starting', { startTime: Date.now() });\n\n const gateway = await gatewayRunner.start({\n port: state.ports.gateway,\n bindHost: state.bindHost,\n socketPath: state.sockets.gateway,\n shutdownHandler,\n baseUrl: state.baseUrl,\n runtimeHost: host,\n supervisor,\n targets: {\n css: state.transport === 'socket' ? { socketPath: state.sockets.css! } : { url: `http://127.0.0.1:${state.ports.css}` },\n api: state.transport === 'socket' ? { socketPath: state.sockets.api! } : { url: `http://127.0.0.1:${state.ports.api}` },\n },\n });\n supervisor.addLog('xpod', 'info', `Gateway started (${state.transport === 'socket' ? `unix://${state.sockets.gateway}` : state.baseUrl})`);\n supervisor.setStatus('gateway', 'running', { startTime: Date.now() });\n return gateway;\n}\n\nexport async function stopRuntimeServices({\n services,\n supervisor,\n logger,\n host,\n state,\n unregisterSocketOrigins,\n closeIdentityConnections,\n restoreRuntimeEnv,\n}: StopRuntimeServicesOptions): Promise<void> {\n try {\n if (services.gateway) {\n await services.gateway.stop();\n supervisor.setStatus('gateway', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop gateway: ${String(error)}`);\n }\n\n try {\n if (services.apiService) {\n await services.apiService.stop();\n supervisor.setStatus('api', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop api: ${String(error)}`);\n }\n\n try {\n if (services.cssApp) {\n await services.cssApp.stop();\n supervisor.setStatus('css', 'stopped');\n }\n } catch (error) {\n logger.warn(`Failed to stop css: ${String(error)}`);\n }\n\n await closeManagedRedisClients();\n\n if (state.sockets.css) {\n host.cleanupSocketPath(state.sockets.css);\n }\n if (state.sockets.api) {\n host.cleanupSocketPath(state.sockets.api);\n }\n\n await unregisterSocketOrigins();\n await closeIdentityConnections();\n restoreRuntimeEnv();\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AuthContext } from '../api/auth/AuthContext';
|
|
2
2
|
import type { Supervisor } from '../supervisor/Supervisor';
|
|
3
|
+
import type { AuthMode } from '../authorization/AuthMode';
|
|
3
4
|
import type { RuntimeDriver } from './driver/types';
|
|
4
5
|
import type { RuntimeHost } from './host/types';
|
|
5
6
|
import type { RuntimePlatform } from './platform/types';
|
|
@@ -17,7 +18,7 @@ export interface XpodRuntimeSockets {
|
|
|
17
18
|
export interface XpodRuntimeOptions {
|
|
18
19
|
mode?: 'local' | 'cloud';
|
|
19
20
|
open?: boolean;
|
|
20
|
-
authMode?:
|
|
21
|
+
authMode?: AuthMode;
|
|
21
22
|
apiOpen?: boolean;
|
|
22
23
|
authContext?: AuthContext;
|
|
23
24
|
envFile?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-types.js","sourceRoot":"","sources":["../../src/runtime/runtime-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AuthContext } from '../api/auth/AuthContext';\nimport type { Supervisor } from '../supervisor/Supervisor';\nimport type { RuntimeDriver } from './driver/types';\nimport type { RuntimeHost } from './host/types';\nimport type { RuntimePlatform } from './platform/types';\nimport type { ApiRuntimeRunner, CssRuntimeRunner, GatewayRuntimeRunner } from './runner/types';\n\nexport interface XpodRuntimePorts {\n gateway?: number;\n css?: number;\n api?: number;\n}\n\nexport interface XpodRuntimeSockets {\n gateway?: string;\n css?: string;\n api?: string;\n}\n\nexport interface XpodRuntimeOptions {\n mode?: 'local' | 'cloud';\n open?: boolean;\n authMode?:
|
|
1
|
+
{"version":3,"file":"runtime-types.js","sourceRoot":"","sources":["../../src/runtime/runtime-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AuthContext } from '../api/auth/AuthContext';\nimport type { Supervisor } from '../supervisor/Supervisor';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport type { RuntimeDriver } from './driver/types';\nimport type { RuntimeHost } from './host/types';\nimport type { RuntimePlatform } from './platform/types';\nimport type { ApiRuntimeRunner, CssRuntimeRunner, GatewayRuntimeRunner } from './runner/types';\n\nexport interface XpodRuntimePorts {\n gateway?: number;\n css?: number;\n api?: number;\n}\n\nexport interface XpodRuntimeSockets {\n gateway?: string;\n css?: string;\n api?: string;\n}\n\nexport interface XpodRuntimeOptions {\n mode?: 'local' | 'cloud';\n open?: boolean;\n authMode?: AuthMode;\n apiOpen?: boolean;\n authContext?: AuthContext;\n envFile?: string;\n env?: Record<string, string | undefined>;\n shorthand?: Record<string, string | number | boolean>;\n baseUrl?: string;\n bindHost?: string;\n transport?: 'auto' | 'socket' | 'port';\n runtimeRoot?: string;\n rootFilePath?: string;\n sparqlEndpoint?: string;\n rdfIndexPath?: string;\n identityDbUrl?: string;\n usageDbUrl?: string;\n logLevel?: string;\n gatewayPort?: number;\n cssPort?: number;\n apiPort?: number;\n gatewaySocketPath?: string;\n cssSocketPath?: string;\n apiSocketPath?: string;\n edgeNodesEnabled?: boolean;\n centerRegistrationEnabled?: boolean;\n driver?: RuntimeDriver;\n host?: RuntimeHost;\n platform?: RuntimePlatform;\n cssRunner?: CssRuntimeRunner;\n apiRunner?: ApiRuntimeRunner;\n gatewayRunner?: GatewayRuntimeRunner;\n}\n\nexport interface XpodRuntimeHandle {\n id: string;\n mode: 'local' | 'cloud';\n transport: 'socket' | 'port';\n baseUrl: string;\n supervisor: Supervisor;\n ports: XpodRuntimePorts;\n sockets: XpodRuntimeSockets;\n fetch: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n stop: () => Promise<void>;\n}\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Readable } from 'node:stream';
|
|
2
2
|
import type { NamedNode, Quad } from '@rdfjs/types';
|
|
3
3
|
import { DataAccessor, IdentifierStrategy, RepresentationMetadata, type Guarded, type Representation, type ResourceIdentifier } from '@solid/community-server';
|
|
4
|
-
import {
|
|
5
|
-
import type { RdfSourceInput } from '../rdf/types';
|
|
4
|
+
import type { RdfEngineLike, RdfSourceInput } from '../rdf/types';
|
|
6
5
|
import type { Quint } from '../quint/types';
|
|
7
6
|
/**
|
|
8
7
|
* Structured RDF DataAccessor backed directly by SolidRdfEngine.
|
|
@@ -18,7 +17,7 @@ export declare class SolidRdfDataAccessor implements DataAccessor {
|
|
|
18
17
|
private readonly adapter;
|
|
19
18
|
private initialized;
|
|
20
19
|
private initializing;
|
|
21
|
-
constructor(rdfEngine:
|
|
20
|
+
constructor(rdfEngine: RdfEngineLike, identifierStrategy: IdentifierStrategy);
|
|
22
21
|
initialize(): Promise<void>;
|
|
23
22
|
finalize(): Promise<void>;
|
|
24
23
|
canHandle(representation: Representation): Promise<void>;
|
|
@@ -32,9 +32,9 @@ class SolidRdfDataAccessor {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
this.initializing ??= Promise.resolve()
|
|
35
|
-
.then(() => {
|
|
36
|
-
this.rdfEngine.open();
|
|
37
|
-
this.rdfEngine.refreshDerivedIndexes();
|
|
35
|
+
.then(async () => {
|
|
36
|
+
await this.rdfEngine.open();
|
|
37
|
+
await this.rdfEngine.refreshDerivedIndexes();
|
|
38
38
|
this.initialized = true;
|
|
39
39
|
})
|
|
40
40
|
.finally(() => {
|
|
@@ -58,13 +58,13 @@ class SolidRdfDataAccessor {
|
|
|
58
58
|
}
|
|
59
59
|
async getData(identifier) {
|
|
60
60
|
await this.initialize();
|
|
61
|
-
const quads = this.scanGraph(namedNode(identifier.path));
|
|
61
|
+
const quads = await this.scanGraph(namedNode(identifier.path));
|
|
62
62
|
return (0, community_server_1.guardStream)(node_stream_1.Readable.from(quads));
|
|
63
63
|
}
|
|
64
64
|
async getMetadata(identifier) {
|
|
65
65
|
await this.initialize();
|
|
66
66
|
const name = namedNode(identifier.path);
|
|
67
|
-
const quads = this.scanGraph(this.getMetadataNode(name));
|
|
67
|
+
const quads = await this.scanGraph(this.getMetadataNode(name));
|
|
68
68
|
if (quads.length === 0) {
|
|
69
69
|
throw new community_server_1.NotFoundHttpError();
|
|
70
70
|
}
|
|
@@ -77,14 +77,15 @@ class SolidRdfDataAccessor {
|
|
|
77
77
|
async *getChildren(identifier) {
|
|
78
78
|
await this.initialize();
|
|
79
79
|
const name = namedNode(identifier.path);
|
|
80
|
-
|
|
80
|
+
const scan = await this.rdfEngine.scan({
|
|
81
81
|
pattern: {
|
|
82
82
|
graph: name,
|
|
83
83
|
subject: name,
|
|
84
84
|
predicate: community_server_1.LDP.terms.contains,
|
|
85
85
|
},
|
|
86
86
|
options: { order: ['object'] },
|
|
87
|
-
})
|
|
87
|
+
});
|
|
88
|
+
for (const entry of scan.quads) {
|
|
88
89
|
if (entry.object.termType === 'NamedNode') {
|
|
89
90
|
yield new community_server_1.RepresentationMetadata(entry.object);
|
|
90
91
|
}
|
|
@@ -95,7 +96,7 @@ class SolidRdfDataAccessor {
|
|
|
95
96
|
(0, community_server_1.addResourceMetadata)(metadata, true);
|
|
96
97
|
(0, community_server_1.updateModifiedDate)(metadata);
|
|
97
98
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
98
|
-
this.replaceMetadata(name, metadata, parent);
|
|
99
|
+
await this.replaceMetadata(name, metadata, parent);
|
|
99
100
|
}
|
|
100
101
|
async writeDocument(identifier, data, metadata) {
|
|
101
102
|
await this.initialize();
|
|
@@ -111,9 +112,9 @@ class SolidRdfDataAccessor {
|
|
|
111
112
|
(0, community_server_1.updateModifiedDate)(metadata);
|
|
112
113
|
metadata.removeAll(community_server_1.CONTENT_TYPE_TERM);
|
|
113
114
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
114
|
-
this.rdfEngine.delete({ graph: name });
|
|
115
|
-
this.replaceMetadata(name, metadata, parent);
|
|
116
|
-
this.putGraphQuads(name, triples);
|
|
115
|
+
await this.rdfEngine.delete({ graph: name });
|
|
116
|
+
await this.replaceMetadata(name, metadata, parent);
|
|
117
|
+
await this.putGraphQuads(name, triples);
|
|
117
118
|
}
|
|
118
119
|
async writeRdfSourceDocument(identifier, quads, metadata, source) {
|
|
119
120
|
await this.initialize();
|
|
@@ -126,16 +127,16 @@ class SolidRdfDataAccessor {
|
|
|
126
127
|
}
|
|
127
128
|
metadata.removeAll(community_server_1.CONTENT_TYPE_TERM);
|
|
128
129
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
129
|
-
this.replaceMetadata(name, metadata, parent);
|
|
130
|
-
this.rdfEngine.replaceSource(quads.map((value) => quad(value.subject, value.predicate, value.object, name)), source);
|
|
130
|
+
await this.replaceMetadata(name, metadata, parent);
|
|
131
|
+
await this.rdfEngine.replaceSource(quads.map((value) => quad(value.subject, value.predicate, value.object, name)), source);
|
|
131
132
|
}
|
|
132
133
|
async deleteRdfSourceDocument(identifier) {
|
|
133
134
|
await this.initialize();
|
|
134
135
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
135
|
-
this.rdfEngine.deleteSource(identifier.path);
|
|
136
|
-
this.rdfEngine.delete({ graph: this.getMetadataNode(name) });
|
|
136
|
+
await this.rdfEngine.deleteSource(identifier.path);
|
|
137
|
+
await this.rdfEngine.delete({ graph: this.getMetadataNode(name) });
|
|
137
138
|
if (parent) {
|
|
138
|
-
this.rdfEngine.delete({
|
|
139
|
+
await this.rdfEngine.delete({
|
|
139
140
|
graph: parent,
|
|
140
141
|
subject: parent,
|
|
141
142
|
predicate: community_server_1.LDP.terms.contains,
|
|
@@ -147,20 +148,20 @@ class SolidRdfDataAccessor {
|
|
|
147
148
|
await this.initialize();
|
|
148
149
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
149
150
|
const metaName = this.getMetadataNode(name);
|
|
150
|
-
this.rdfEngine.delete({ graph: metaName });
|
|
151
|
+
await this.rdfEngine.delete({ graph: metaName });
|
|
151
152
|
const inserts = this.toGraphQuads(metaName, metadata.quads());
|
|
152
153
|
if (parent) {
|
|
153
154
|
inserts.push(quad(parent, community_server_1.LDP.terms.contains, name, parent));
|
|
154
155
|
}
|
|
155
|
-
this.rdfEngine.put(inserts);
|
|
156
|
+
await this.rdfEngine.put(inserts);
|
|
156
157
|
}
|
|
157
158
|
async deleteResource(identifier) {
|
|
158
159
|
await this.initialize();
|
|
159
160
|
const { name, parent } = this.getRelatedNames(identifier);
|
|
160
|
-
this.rdfEngine.delete({ graph: name });
|
|
161
|
-
this.rdfEngine.delete({ graph: this.getMetadataNode(name) });
|
|
161
|
+
await this.rdfEngine.delete({ graph: name });
|
|
162
|
+
await this.rdfEngine.delete({ graph: this.getMetadataNode(name) });
|
|
162
163
|
if (parent) {
|
|
163
|
-
this.rdfEngine.delete({
|
|
164
|
+
await this.rdfEngine.delete({
|
|
164
165
|
graph: parent,
|
|
165
166
|
subject: parent,
|
|
166
167
|
predicate: community_server_1.LDP.terms.contains,
|
|
@@ -170,11 +171,12 @@ class SolidRdfDataAccessor {
|
|
|
170
171
|
}
|
|
171
172
|
async getDataByGraphPrefix(prefix) {
|
|
172
173
|
await this.initialize();
|
|
173
|
-
|
|
174
|
+
const scan = await this.rdfEngine.scan({
|
|
174
175
|
pattern: {
|
|
175
176
|
graph: { $startsWith: prefix },
|
|
176
177
|
},
|
|
177
|
-
})
|
|
178
|
+
});
|
|
179
|
+
return scan.quads;
|
|
178
180
|
}
|
|
179
181
|
async executeSparqlUpdate(query, baseIri) {
|
|
180
182
|
await this.initialize();
|
|
@@ -183,7 +185,7 @@ class SolidRdfDataAccessor {
|
|
|
183
185
|
defaultGraph: baseIri,
|
|
184
186
|
});
|
|
185
187
|
for (const operation of delta.operations) {
|
|
186
|
-
this.applyUpdateOperation(operation);
|
|
188
|
+
await this.applyUpdateOperation(operation);
|
|
187
189
|
}
|
|
188
190
|
}
|
|
189
191
|
catch (error) {
|
|
@@ -198,14 +200,14 @@ class SolidRdfDataAccessor {
|
|
|
198
200
|
throw error;
|
|
199
201
|
}
|
|
200
202
|
}
|
|
201
|
-
applyUpdateOperation(operation) {
|
|
203
|
+
async applyUpdateOperation(operation) {
|
|
202
204
|
if (operation.type === 'insert') {
|
|
203
|
-
this.rdfEngine.put(operation.quads);
|
|
205
|
+
await this.rdfEngine.put(operation.quads);
|
|
204
206
|
return;
|
|
205
207
|
}
|
|
206
208
|
if (operation.type === 'delete') {
|
|
207
209
|
for (const value of operation.quads) {
|
|
208
|
-
this.rdfEngine.delete({
|
|
210
|
+
await this.rdfEngine.delete({
|
|
209
211
|
graph: value.graph,
|
|
210
212
|
subject: value.subject,
|
|
211
213
|
predicate: value.predicate,
|
|
@@ -215,20 +217,23 @@ class SolidRdfDataAccessor {
|
|
|
215
217
|
return;
|
|
216
218
|
}
|
|
217
219
|
if (operation.type === 'deleteWhere') {
|
|
218
|
-
|
|
220
|
+
const result = await this.rdfEngine.query(operation.query);
|
|
221
|
+
await this.deleteMaterialized(operation.template, result.bindings);
|
|
219
222
|
return;
|
|
220
223
|
}
|
|
221
224
|
if (operation.type === 'insertWhere') {
|
|
222
|
-
|
|
225
|
+
const result = await this.rdfEngine.query(operation.query);
|
|
226
|
+
await this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, result.bindings));
|
|
223
227
|
return;
|
|
224
228
|
}
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
this.
|
|
229
|
+
const result = await this.rdfEngine.query(operation.query);
|
|
230
|
+
const rows = result.bindings;
|
|
231
|
+
await this.deleteMaterialized(operation.deletes, rows);
|
|
232
|
+
await this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, rows));
|
|
228
233
|
}
|
|
229
|
-
deleteMaterialized(template, rows) {
|
|
234
|
+
async deleteMaterialized(template, rows) {
|
|
230
235
|
for (const value of this.adapter.materializeDeleteWhere(template, rows)) {
|
|
231
|
-
this.rdfEngine.delete({
|
|
236
|
+
await this.rdfEngine.delete({
|
|
232
237
|
graph: value.graph,
|
|
233
238
|
subject: value.subject,
|
|
234
239
|
predicate: value.predicate,
|
|
@@ -251,23 +256,24 @@ class SolidRdfDataAccessor {
|
|
|
251
256
|
isMetadataIdentifier(identifier) {
|
|
252
257
|
return identifier.path.startsWith('meta:');
|
|
253
258
|
}
|
|
254
|
-
replaceMetadata(name, metadata, parent) {
|
|
259
|
+
async replaceMetadata(name, metadata, parent) {
|
|
255
260
|
const metaName = this.getMetadataNode(name);
|
|
256
|
-
this.rdfEngine.delete({ graph: metaName });
|
|
261
|
+
await this.rdfEngine.delete({ graph: metaName });
|
|
257
262
|
const inserts = this.toGraphQuads(metaName, metadata.quads());
|
|
258
263
|
if (parent) {
|
|
259
264
|
inserts.push(quad(parent, community_server_1.LDP.terms.contains, name, parent));
|
|
260
265
|
}
|
|
261
|
-
this.rdfEngine.put(inserts);
|
|
266
|
+
await this.rdfEngine.put(inserts);
|
|
262
267
|
}
|
|
263
|
-
putGraphQuads(graph, triples) {
|
|
264
|
-
this.rdfEngine.put(this.toGraphQuads(graph, triples));
|
|
268
|
+
async putGraphQuads(graph, triples) {
|
|
269
|
+
await this.rdfEngine.put(this.toGraphQuads(graph, triples));
|
|
265
270
|
}
|
|
266
|
-
scanGraph(graph) {
|
|
267
|
-
|
|
271
|
+
async scanGraph(graph) {
|
|
272
|
+
const scan = await this.rdfEngine.scan({
|
|
268
273
|
pattern: { graph },
|
|
269
274
|
options: { order: ['subject', 'predicate', 'object'] },
|
|
270
|
-
})
|
|
275
|
+
});
|
|
276
|
+
return scan.quads.map((value) => quad(value.subject, value.predicate, value.object));
|
|
271
277
|
}
|
|
272
278
|
toGraphQuads(graph, quads) {
|
|
273
279
|
return quads.map((value) => quad(value.subject, value.predicate, value.object, graph));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidRdfDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/SolidRdfDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad } from '@rdfjs/types';\nimport {\n addResourceMetadata,\n CONTENT_TYPE_TERM,\n ConflictHttpError,\n createErrorMessage,\n DataAccessor,\n guardStream,\n IdentifierStrategy,\n INTERNAL_QUADS,\n isContainerIdentifier,\n LDP,\n NotFoundHttpError,\n NotImplementedHttpError,\n RepresentationMetadata,\n UnsupportedMediaTypeHttpError,\n updateModifiedDate,\n type Guarded,\n type Representation,\n type ResourceIdentifier,\n} from '@solid/community-server';\nimport type { RdfSparqlUpdateDeltaOperation, RdfSparqlUpdateTemplate } from '../rdf/RdfSparqlAdapter';\nimport {\n DisabledSparqlFeatureError,\n RdfSparqlAdapter,\n UnsupportedSparqlQueryError,\n} from '../rdf/RdfSparqlAdapter';\nimport { SolidRdfEngine } from '../rdf/SolidRdfEngine';\nimport type { RdfBindingRow, RdfSourceInput } from '../rdf/types';\nimport type { Quint } from '../quint/types';\n\nconst { defaultGraph, namedNode, quad } = DataFactory;\n\n/**\n * Structured RDF DataAccessor backed directly by SolidRdfEngine.\n *\n * This is the server-owned Pod storage path. It writes resource graphs and\n * metadata graphs into the term-id RDF index without routing simple CSS LDP\n * operations through Comunica.\n */\nexport class SolidRdfDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly adapter = new RdfSparqlAdapter();\n private initialized = false;\n private initializing: Promise<void> | null = null;\n\n public constructor(\n private readonly rdfEngine: SolidRdfEngine,\n private readonly identifierStrategy: IdentifierStrategy,\n ) {}\n\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= Promise.resolve()\n .then(() => {\n this.rdfEngine.open();\n this.rdfEngine.refreshDerivedIndexes();\n this.initialized = true;\n })\n .finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n public async finalize(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.initialized) {\n await this.rdfEngine.close();\n this.initialized = false;\n }\n }\n\n public async canHandle(representation: Representation): Promise<void> {\n if (representation.binary || representation.metadata.contentType !== INTERNAL_QUADS) {\n throw new UnsupportedMediaTypeHttpError('Only Quad data is supported.');\n }\n }\n\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const quads = this.scanGraph(namedNode(identifier.path));\n return guardStream(Readable.from(quads));\n }\n\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n const quads = this.scanGraph(this.getMetadataNode(name));\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n for (const entry of this.rdfEngine.scan({\n pattern: {\n graph: name,\n subject: name,\n predicate: LDP.terms.contains,\n },\n options: { order: ['object'] },\n }).quads) {\n if (entry.object.termType === 'NamedNode') {\n yield new RepresentationMetadata(entry.object as NamedNode);\n }\n }\n }\n\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n this.replaceMetadata(name, metadata, parent);\n }\n\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n\n const triples = await arrayifyStream<Quad>(data);\n const def = defaultGraph();\n if (triples.some((triple): boolean => !def.equals(triple.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n addResourceMetadata(metadata, false);\n updateModifiedDate(metadata);\n metadata.removeAll(CONTENT_TYPE_TERM);\n const { name, parent } = this.getRelatedNames(identifier);\n this.rdfEngine.delete({ graph: name });\n this.replaceMetadata(name, metadata, parent);\n this.putGraphQuads(name, triples);\n }\n\n public async writeRdfSourceDocument(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n source: RdfSourceInput,\n ): Promise<void> {\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n\n const def = defaultGraph();\n if (quads.some((value): boolean => !def.equals(value.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n metadata.removeAll(CONTENT_TYPE_TERM);\n const { name, parent } = this.getRelatedNames(identifier);\n this.replaceMetadata(name, metadata, parent);\n this.rdfEngine.replaceSource(\n quads.map((value) => quad(value.subject, value.predicate, value.object, name) as Quad),\n source,\n );\n }\n\n public async deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n this.rdfEngine.deleteSource(identifier.path);\n this.rdfEngine.delete({ graph: this.getMetadataNode(name) });\n if (parent) {\n this.rdfEngine.delete({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n this.rdfEngine.delete({ graph: metaName });\n const inserts = this.toGraphQuads(metaName, metadata.quads());\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quad);\n }\n this.rdfEngine.put(inserts);\n }\n\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n this.rdfEngine.delete({ graph: name });\n this.rdfEngine.delete({ graph: this.getMetadataNode(name) });\n if (parent) {\n this.rdfEngine.delete({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n return this.rdfEngine.scan({\n pattern: {\n graph: { $startsWith: prefix },\n },\n }).quads as Quint[];\n }\n\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n await this.initialize();\n try {\n const delta = this.adapter.compileUpdateDelta(query, baseIri ?? '', {\n defaultGraph: baseIri,\n });\n for (const operation of delta.operations) {\n this.applyUpdateOperation(operation);\n }\n } catch (error: unknown) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n if (error instanceof UnsupportedSparqlQueryError) {\n this.logger.warn(`SolidRdfDataAccessor cannot execute SPARQL UPDATE without compatibility fallback: ${error.message}`);\n throw error;\n }\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private applyUpdateOperation(operation: RdfSparqlUpdateDeltaOperation): void {\n if (operation.type === 'insert') {\n this.rdfEngine.put(operation.quads);\n return;\n }\n if (operation.type === 'delete') {\n for (const value of operation.quads) {\n this.rdfEngine.delete({\n graph: value.graph,\n subject: value.subject,\n predicate: value.predicate,\n object: value.object,\n });\n }\n return;\n }\n\n if (operation.type === 'deleteWhere') {\n this.deleteMaterialized(operation.template, this.rdfEngine.query(operation.query).bindings);\n return;\n }\n\n if (operation.type === 'insertWhere') {\n this.rdfEngine.put(this.adapter.materializeDeleteWhere(\n operation.inserts,\n this.rdfEngine.query(operation.query).bindings,\n ));\n return;\n }\n\n const rows = this.rdfEngine.query(operation.query).bindings;\n this.deleteMaterialized(operation.deletes, rows);\n this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, rows));\n }\n\n private deleteMaterialized(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): void {\n for (const value of this.adapter.materializeDeleteWhere(template, rows)) {\n this.rdfEngine.delete({\n graph: value.graph,\n subject: value.subject,\n predicate: value.predicate,\n object: value.object,\n });\n }\n }\n\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n if (this.identifierStrategy.isRootContainer(identifier)) {\n return { name };\n }\n\n const parentIdentifier = this.identifierStrategy.getParentContainer(identifier);\n const parent = namedNode(parentIdentifier.path);\n return { name, parent };\n }\n\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n private replaceMetadata(name: NamedNode, metadata: RepresentationMetadata, parent?: NamedNode): void {\n const metaName = this.getMetadataNode(name);\n this.rdfEngine.delete({ graph: metaName });\n const inserts = this.toGraphQuads(metaName, metadata.quads());\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quad);\n }\n this.rdfEngine.put(inserts);\n }\n\n private putGraphQuads(graph: NamedNode, triples: Quad[]): void {\n this.rdfEngine.put(this.toGraphQuads(graph, triples));\n }\n\n private scanGraph(graph: NamedNode): Quad[] {\n return this.rdfEngine.scan({\n pattern: { graph },\n options: { order: ['subject', 'predicate', 'object'] },\n }).quads.map((value) => quad(value.subject, value.predicate, value.object) as Quad);\n }\n\n private toGraphQuads(graph: NamedNode, quads: Quad[]): Quad[] {\n return quads.map((value) => quad(value.subject, value.predicate, value.object, graph) as Quad);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidRdfDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/SolidRdfDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad } from '@rdfjs/types';\nimport {\n addResourceMetadata,\n CONTENT_TYPE_TERM,\n ConflictHttpError,\n createErrorMessage,\n DataAccessor,\n guardStream,\n IdentifierStrategy,\n INTERNAL_QUADS,\n isContainerIdentifier,\n LDP,\n NotFoundHttpError,\n NotImplementedHttpError,\n RepresentationMetadata,\n UnsupportedMediaTypeHttpError,\n updateModifiedDate,\n type Guarded,\n type Representation,\n type ResourceIdentifier,\n} from '@solid/community-server';\nimport type { RdfSparqlUpdateDeltaOperation, RdfSparqlUpdateTemplate } from '../rdf/RdfSparqlAdapter';\nimport {\n DisabledSparqlFeatureError,\n RdfSparqlAdapter,\n UnsupportedSparqlQueryError,\n} from '../rdf/RdfSparqlAdapter';\nimport type { RdfBindingRow, RdfEngineLike, RdfSourceInput } from '../rdf/types';\nimport type { Quint } from '../quint/types';\n\nconst { defaultGraph, namedNode, quad } = DataFactory;\n\n/**\n * Structured RDF DataAccessor backed directly by SolidRdfEngine.\n *\n * This is the server-owned Pod storage path. It writes resource graphs and\n * metadata graphs into the term-id RDF index without routing simple CSS LDP\n * operations through Comunica.\n */\nexport class SolidRdfDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly adapter = new RdfSparqlAdapter();\n private initialized = false;\n private initializing: Promise<void> | null = null;\n\n public constructor(\n private readonly rdfEngine: RdfEngineLike,\n private readonly identifierStrategy: IdentifierStrategy,\n ) {}\n\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= Promise.resolve()\n .then(async () => {\n await this.rdfEngine.open();\n await this.rdfEngine.refreshDerivedIndexes();\n this.initialized = true;\n })\n .finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n public async finalize(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.initialized) {\n await this.rdfEngine.close();\n this.initialized = false;\n }\n }\n\n public async canHandle(representation: Representation): Promise<void> {\n if (representation.binary || representation.metadata.contentType !== INTERNAL_QUADS) {\n throw new UnsupportedMediaTypeHttpError('Only Quad data is supported.');\n }\n }\n\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const quads = await this.scanGraph(namedNode(identifier.path));\n return guardStream(Readable.from(quads));\n }\n\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n const quads = await this.scanGraph(this.getMetadataNode(name));\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n const scan = await this.rdfEngine.scan({\n pattern: {\n graph: name,\n subject: name,\n predicate: LDP.terms.contains,\n },\n options: { order: ['object'] },\n });\n for (const entry of scan.quads) {\n if (entry.object.termType === 'NamedNode') {\n yield new RepresentationMetadata(entry.object as NamedNode);\n }\n }\n }\n\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n await this.replaceMetadata(name, metadata, parent);\n }\n\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n\n const triples = await arrayifyStream<Quad>(data);\n const def = defaultGraph();\n if (triples.some((triple): boolean => !def.equals(triple.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n addResourceMetadata(metadata, false);\n updateModifiedDate(metadata);\n metadata.removeAll(CONTENT_TYPE_TERM);\n const { name, parent } = this.getRelatedNames(identifier);\n await this.rdfEngine.delete({ graph: name });\n await this.replaceMetadata(name, metadata, parent);\n await this.putGraphQuads(name, triples);\n }\n\n public async writeRdfSourceDocument(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n source: RdfSourceInput,\n ): Promise<void> {\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n\n const def = defaultGraph();\n if (quads.some((value): boolean => !def.equals(value.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n metadata.removeAll(CONTENT_TYPE_TERM);\n const { name, parent } = this.getRelatedNames(identifier);\n await this.replaceMetadata(name, metadata, parent);\n await this.rdfEngine.replaceSource(\n quads.map((value) => quad(value.subject, value.predicate, value.object, name) as Quad),\n source,\n );\n }\n\n public async deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n await this.rdfEngine.deleteSource(identifier.path);\n await this.rdfEngine.delete({ graph: this.getMetadataNode(name) });\n if (parent) {\n await this.rdfEngine.delete({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n await this.rdfEngine.delete({ graph: metaName });\n const inserts = this.toGraphQuads(metaName, metadata.quads());\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quad);\n }\n await this.rdfEngine.put(inserts);\n }\n\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n await this.rdfEngine.delete({ graph: name });\n await this.rdfEngine.delete({ graph: this.getMetadataNode(name) });\n if (parent) {\n await this.rdfEngine.delete({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n const scan = await this.rdfEngine.scan({\n pattern: {\n graph: { $startsWith: prefix },\n },\n });\n return scan.quads as Quint[];\n }\n\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n await this.initialize();\n try {\n const delta = this.adapter.compileUpdateDelta(query, baseIri ?? '', {\n defaultGraph: baseIri,\n });\n for (const operation of delta.operations) {\n await this.applyUpdateOperation(operation);\n }\n } catch (error: unknown) {\n if (error instanceof DisabledSparqlFeatureError) {\n throw error;\n }\n if (error instanceof UnsupportedSparqlQueryError) {\n this.logger.warn(`SolidRdfDataAccessor cannot execute SPARQL UPDATE without compatibility fallback: ${error.message}`);\n throw error;\n }\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private async applyUpdateOperation(operation: RdfSparqlUpdateDeltaOperation): Promise<void> {\n if (operation.type === 'insert') {\n await this.rdfEngine.put(operation.quads);\n return;\n }\n if (operation.type === 'delete') {\n for (const value of operation.quads) {\n await this.rdfEngine.delete({\n graph: value.graph,\n subject: value.subject,\n predicate: value.predicate,\n object: value.object,\n });\n }\n return;\n }\n\n if (operation.type === 'deleteWhere') {\n const result = await this.rdfEngine.query(operation.query);\n await this.deleteMaterialized(operation.template, result.bindings);\n return;\n }\n\n if (operation.type === 'insertWhere') {\n const result = await this.rdfEngine.query(operation.query);\n await this.rdfEngine.put(this.adapter.materializeDeleteWhere(\n operation.inserts,\n result.bindings,\n ));\n return;\n }\n\n const result = await this.rdfEngine.query(operation.query);\n const rows = result.bindings;\n await this.deleteMaterialized(operation.deletes, rows);\n await this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, rows));\n }\n\n private async deleteMaterialized(template: RdfSparqlUpdateTemplate[], rows: RdfBindingRow[]): Promise<void> {\n for (const value of this.adapter.materializeDeleteWhere(template, rows)) {\n await this.rdfEngine.delete({\n graph: value.graph,\n subject: value.subject,\n predicate: value.predicate,\n object: value.object,\n });\n }\n }\n\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n if (this.identifierStrategy.isRootContainer(identifier)) {\n return { name };\n }\n\n const parentIdentifier = this.identifierStrategy.getParentContainer(identifier);\n const parent = namedNode(parentIdentifier.path);\n return { name, parent };\n }\n\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n private async replaceMetadata(name: NamedNode, metadata: RepresentationMetadata, parent?: NamedNode): Promise<void> {\n const metaName = this.getMetadataNode(name);\n await this.rdfEngine.delete({ graph: metaName });\n const inserts = this.toGraphQuads(metaName, metadata.quads());\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quad);\n }\n await this.rdfEngine.put(inserts);\n }\n\n private async putGraphQuads(graph: NamedNode, triples: Quad[]): Promise<void> {\n await this.rdfEngine.put(this.toGraphQuads(graph, triples));\n }\n\n private async scanGraph(graph: NamedNode): Promise<Quad[]> {\n const scan = await this.rdfEngine.scan({\n pattern: { graph },\n options: { order: ['subject', 'predicate', 'object'] },\n });\n return scan.quads.map((value) => quad(value.subject, value.predicate, value.object) as Quad);\n }\n\n private toGraphQuads(graph: NamedNode, quads: Quad[]): Quad[] {\n return quads.map((value) => quad(value.subject, value.predicate, value.object, graph) as Quad);\n }\n}\n"]}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"parameters": [
|
|
17
17
|
{
|
|
18
18
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_rdfEngine",
|
|
19
|
-
"range": "undefineds:dist/storage/rdf/
|
|
19
|
+
"range": "undefineds:dist/storage/rdf/types.jsonld#RdfEngineLike"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"@id": "undefineds:dist/storage/accessors/SolidRdfDataAccessor.jsonld#SolidRdfDataAccessor_identifierStrategy",
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Finalizable, Initializable, KeyValueStorage } from '@solid/community-server';
|
|
2
|
+
export interface BaseKeyValueStorageOptions {
|
|
3
|
+
tableName?: string;
|
|
4
|
+
namespace?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface BaseKeyValueStorageRow {
|
|
7
|
+
key: string;
|
|
8
|
+
value: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class BaseKeyValueStorage<T = unknown> implements KeyValueStorage<string, T>, Initializable, Finalizable {
|
|
11
|
+
protected readonly logger: import("global-logger-factory").Logger<unknown>;
|
|
12
|
+
protected readonly tableName: string;
|
|
13
|
+
protected readonly namespace: string;
|
|
14
|
+
private ready;
|
|
15
|
+
protected constructor(options: BaseKeyValueStorageOptions);
|
|
16
|
+
protected setReady(ready: Promise<void>): void;
|
|
17
|
+
initialize(): Promise<void>;
|
|
18
|
+
finalize(): Promise<void>;
|
|
19
|
+
has(key: string): Promise<boolean>;
|
|
20
|
+
get(key: string): Promise<T | undefined>;
|
|
21
|
+
set(key: string, value: T): Promise<this>;
|
|
22
|
+
delete(key: string): Promise<boolean>;
|
|
23
|
+
entries(): AsyncIterableIterator<[string, T]>;
|
|
24
|
+
protected toStorageKey(key: string): string;
|
|
25
|
+
protected validateAndSerialize(value: T, key: string): string;
|
|
26
|
+
protected parseValue(raw: unknown): T | undefined;
|
|
27
|
+
protected abstract closeStorage(): Promise<void>;
|
|
28
|
+
protected abstract hasValue(key: string): Promise<boolean>;
|
|
29
|
+
protected abstract selectValue(key: string): Promise<unknown | undefined>;
|
|
30
|
+
protected abstract upsertValue(key: string, payload: string): Promise<void>;
|
|
31
|
+
protected abstract deleteValue(key: string): Promise<boolean>;
|
|
32
|
+
protected abstract selectEntries(prefix: string): Promise<BaseKeyValueStorageRow[]>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseKeyValueStorage = void 0;
|
|
4
|
+
const global_logger_factory_1 = require("global-logger-factory");
|
|
5
|
+
class BaseKeyValueStorage {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
8
|
+
this.ready = Promise.resolve();
|
|
9
|
+
this.tableName = options.tableName ?? 'internal_kv';
|
|
10
|
+
this.namespace = options.namespace ?? '';
|
|
11
|
+
assertIdentifier(this.tableName);
|
|
12
|
+
}
|
|
13
|
+
setReady(ready) {
|
|
14
|
+
this.ready = ready;
|
|
15
|
+
}
|
|
16
|
+
async initialize() {
|
|
17
|
+
await this.ready;
|
|
18
|
+
}
|
|
19
|
+
async finalize() {
|
|
20
|
+
await this.ready;
|
|
21
|
+
await this.closeStorage();
|
|
22
|
+
}
|
|
23
|
+
async has(key) {
|
|
24
|
+
await this.ready;
|
|
25
|
+
return this.hasValue(this.toStorageKey(key));
|
|
26
|
+
}
|
|
27
|
+
async get(key) {
|
|
28
|
+
await this.ready;
|
|
29
|
+
const raw = await this.selectValue(this.toStorageKey(key));
|
|
30
|
+
if (typeof raw === 'undefined') {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return this.parseValue(raw);
|
|
34
|
+
}
|
|
35
|
+
async set(key, value) {
|
|
36
|
+
await this.ready;
|
|
37
|
+
const storageKey = this.toStorageKey(key);
|
|
38
|
+
let payload;
|
|
39
|
+
try {
|
|
40
|
+
payload = this.validateAndSerialize(value, key);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
this.logger.error(`Failed to serialize value for key "${key}": ${error}`);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
await this.upsertValue(storageKey, payload);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
async delete(key) {
|
|
50
|
+
await this.ready;
|
|
51
|
+
return this.deleteValue(this.toStorageKey(key));
|
|
52
|
+
}
|
|
53
|
+
async *entries() {
|
|
54
|
+
await this.ready;
|
|
55
|
+
const prefix = this.namespace;
|
|
56
|
+
const rows = await this.selectEntries(prefix);
|
|
57
|
+
for (const row of rows) {
|
|
58
|
+
if (!row.key.startsWith(prefix)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const logicalKey = row.key.slice(prefix.length);
|
|
62
|
+
const value = this.parseValue(row.value);
|
|
63
|
+
if (typeof value === 'undefined') {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
yield [logicalKey, value];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
toStorageKey(key) {
|
|
70
|
+
return `${this.namespace}${key}`;
|
|
71
|
+
}
|
|
72
|
+
validateAndSerialize(value, key) {
|
|
73
|
+
try {
|
|
74
|
+
const payload = JSON.stringify(value ?? null);
|
|
75
|
+
if (payload === 'undefined') {
|
|
76
|
+
throw new Error('Cannot serialize undefined value');
|
|
77
|
+
}
|
|
78
|
+
JSON.parse(payload);
|
|
79
|
+
return payload;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.logger.error(`JSON serialization failed for key "${key}": ${error}`);
|
|
83
|
+
throw new Error(`JSON serialization failed for key "${key}": ${error}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
parseValue(raw) {
|
|
87
|
+
try {
|
|
88
|
+
const parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;
|
|
89
|
+
if (parsed && typeof parsed === 'object' && 'key' in parsed && 'payload' in parsed) {
|
|
90
|
+
return parsed.payload;
|
|
91
|
+
}
|
|
92
|
+
return parsed;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this.logger.error(`Failed to parse stored value: ${error}. Raw value: ${JSON.stringify(raw)}`);
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.BaseKeyValueStorage = BaseKeyValueStorage;
|
|
101
|
+
function assertIdentifier(name) {
|
|
102
|
+
if (!/^[A-Za-z0-9_]+$/u.test(name)) {
|
|
103
|
+
throw new Error(`Invalid identifier: "${name}". Only alphanumeric and underscore are allowed.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=BaseKeyValueStorage.js.map
|