@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.
Files changed (89) hide show
  1. package/config/cloud.json +6 -5
  2. package/config/main.json +0 -3
  3. package/config/xpod.base.json +0 -32
  4. package/dist/api/container/index.js +3 -0
  5. package/dist/api/container/index.js.map +1 -1
  6. package/dist/api/container/routes.js +2 -0
  7. package/dist/api/container/routes.js.map +1 -1
  8. package/dist/api/container/types.d.ts +5 -0
  9. package/dist/api/container/types.js.map +1 -1
  10. package/dist/authorization/AuthMode.d.ts +8 -0
  11. package/dist/authorization/AuthMode.js +51 -0
  12. package/dist/authorization/AuthMode.js.map +1 -0
  13. package/dist/authorization/PodAuthorizationResources.d.ts +18 -0
  14. package/dist/authorization/PodAuthorizationResources.js +108 -0
  15. package/dist/authorization/PodAuthorizationResources.js.map +1 -0
  16. package/dist/cli/commands/start.js +11 -2
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/components/components.jsonld +3 -2
  19. package/dist/components/context.jsonld +115 -14
  20. package/dist/index.d.ts +5 -3
  21. package/dist/index.js +6 -5
  22. package/dist/index.js.map +1 -1
  23. package/dist/main.js +11 -2
  24. package/dist/main.js.map +1 -1
  25. package/dist/provision/LocalPodProvisioningService.d.ts +6 -2
  26. package/dist/provision/LocalPodProvisioningService.js +36 -33
  27. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  28. package/dist/provision/LocalPodProvisioningService.jsonld +65 -8
  29. package/dist/runtime/XpodRuntime.js +0 -1
  30. package/dist/runtime/XpodRuntime.js.map +1 -1
  31. package/dist/runtime/bootstrap.d.ts +4 -2
  32. package/dist/runtime/bootstrap.js +43 -11
  33. package/dist/runtime/bootstrap.js.map +1 -1
  34. package/dist/runtime/css-process.d.ts +6 -1
  35. package/dist/runtime/css-process.js +18 -6
  36. package/dist/runtime/css-process.js.map +1 -1
  37. package/dist/runtime/lifecycle.d.ts +2 -3
  38. package/dist/runtime/lifecycle.js +2 -2
  39. package/dist/runtime/lifecycle.js.map +1 -1
  40. package/dist/runtime/runtime-types.d.ts +2 -1
  41. package/dist/runtime/runtime-types.js.map +1 -1
  42. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +2 -3
  43. package/dist/storage/accessors/SolidRdfDataAccessor.js +48 -42
  44. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  45. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +1 -1
  46. package/dist/storage/keyvalue/BaseKeyValueStorage.d.ts +33 -0
  47. package/dist/storage/keyvalue/BaseKeyValueStorage.js +106 -0
  48. package/dist/storage/keyvalue/BaseKeyValueStorage.js.map +1 -0
  49. package/dist/storage/keyvalue/BaseKeyValueStorage.jsonld +177 -0
  50. package/dist/storage/keyvalue/PostgresKeyValueStorage.d.ts +9 -18
  51. package/dist/storage/keyvalue/PostgresKeyValueStorage.js +24 -96
  52. package/dist/storage/keyvalue/PostgresKeyValueStorage.js.map +1 -1
  53. package/dist/storage/keyvalue/PostgresKeyValueStorage.jsonld +15 -58
  54. package/dist/storage/keyvalue/SqliteKeyValueStorage.d.ts +9 -15
  55. package/dist/storage/keyvalue/SqliteKeyValueStorage.js +36 -104
  56. package/dist/storage/keyvalue/SqliteKeyValueStorage.js.map +1 -1
  57. package/dist/storage/keyvalue/SqliteKeyValueStorage.jsonld +21 -52
  58. package/dist/storage/quint/BaseQuintStore.d.ts +4 -1
  59. package/dist/storage/quint/BaseQuintStore.js +41 -52
  60. package/dist/storage/quint/BaseQuintStore.js.map +1 -1
  61. package/dist/storage/quint/PgQuintStore.d.ts +4 -3
  62. package/dist/storage/quint/PgQuintStore.js.map +1 -1
  63. package/dist/storage/quint/SqliteQuintStore.d.ts +43 -54
  64. package/dist/storage/quint/SqliteQuintStore.js +197 -520
  65. package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
  66. package/dist/storage/quint/SqliteQuintStore.jsonld +38 -86
  67. package/dist/storage/rdf/PostgresRdfEngine.d.ts +118 -0
  68. package/dist/storage/rdf/PostgresRdfEngine.js +2609 -0
  69. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -0
  70. package/dist/storage/rdf/PostgresRdfEngine.jsonld +657 -0
  71. package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -2
  72. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  73. package/dist/storage/rdf/SolidRdfEngine.jsonld +3 -0
  74. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +3 -3
  75. package/dist/storage/rdf/SolidRdfSparqlEngine.js +20 -20
  76. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  77. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +1 -1
  78. package/dist/storage/rdf/index.d.ts +2 -1
  79. package/dist/storage/rdf/index.js +3 -1
  80. package/dist/storage/rdf/index.js.map +1 -1
  81. package/dist/storage/rdf/types.d.ts +19 -0
  82. package/dist/storage/rdf/types.js.map +1 -1
  83. package/dist/storage/rdf/types.jsonld +115 -0
  84. package/package.json +2 -2
  85. package/config/runtime-open.json +0 -22
  86. package/dist/authorization/AuthModeSelector.d.ts +0 -10
  87. package/dist/authorization/AuthModeSelector.js +0 -27
  88. package/dist/authorization/AuthModeSelector.js.map +0 -1
  89. 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
- open: boolean;
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, open, createCssRuntimeConfig, cssRunner, }: StartCssRuntimeOptions): Promise<App>;
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, open, createCssRuntimeConfig, cssRunner, }) {
43
- const cssConfigPath = createCssRuntimeConfig(state, open || state.cssAuthMode === 'allow-all');
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":"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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 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?: 'acp' | 'acl' | 'allow-all';
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?: 'acp' | 'acl' | 'allow-all';\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
+ {"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 { SolidRdfEngine } from '../rdf/SolidRdfEngine';
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: SolidRdfEngine, identifierStrategy: IdentifierStrategy);
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
- for (const entry of this.rdfEngine.scan({
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
- }).quads) {
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
- return this.rdfEngine.scan({
174
+ const scan = await this.rdfEngine.scan({
174
175
  pattern: {
175
176
  graph: { $startsWith: prefix },
176
177
  },
177
- }).quads;
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
- this.deleteMaterialized(operation.template, this.rdfEngine.query(operation.query).bindings);
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
- this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, this.rdfEngine.query(operation.query).bindings));
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 rows = this.rdfEngine.query(operation.query).bindings;
226
- this.deleteMaterialized(operation.deletes, rows);
227
- this.rdfEngine.put(this.adapter.materializeDeleteWhere(operation.inserts, rows));
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
- return this.rdfEngine.scan({
271
+ async scanGraph(graph) {
272
+ const scan = await this.rdfEngine.scan({
268
273
  pattern: { graph },
269
274
  options: { order: ['subject', 'predicate', 'object'] },
270
- }).quads.map((value) => quad(value.subject, value.predicate, value.object));
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/SolidRdfEngine.jsonld#SolidRdfEngine"
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