@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
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport './runtime/configure-drizzle-solid';\nimport { createHash } from 'crypto';\nimport { spawn } from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\nimport { setGlobalLoggerFactory, getLoggerFor } from 'global-logger-factory';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { GatewayProxy, getFreePort, PACKAGE_ROOT } from './runtime';\nimport { buildApiChildEnv, buildCssArgs, buildCssChildEnv, createCssChildRuntimeConfig } from './runtime/css-process';\nimport { resolveExternalOidcIssuer } from './runtime/oidc-issuer';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { Supervisor } from './supervisor';\n\ninterface RuntimeRecord {\n schemaVersion: '1.0';\n pid: number;\n mode: 'local' | 'cloud';\n port: number;\n baseUrl: string;\n publicUrl?: string;\n envPath?: string;\n configPath: string;\n startTime: string;\n}\n\ninterface HealthReport {\n schemaVersion: '1.0';\n healthy: boolean;\n checks: {\n gateway: 'pass' | 'fail';\n css: 'pass' | 'fail';\n api: 'pass' | 'fail';\n };\n timestamp: string;\n}\n\ninterface RunOptions {\n mode?: 'local' | 'cloud';\n config?: string;\n env?: string;\n port?: number;\n host?: string;\n}\n\nconst EXIT_OK = 0;\nconst EXIT_NOT_RUNNING = 10;\nconst EXIT_CONFIG_ERROR = 20;\nconst EXIT_INTERNAL_ERROR = 50;\n\nlet logger = getLoggerFor('Main');\nconst childJsRuntime = typeof (globalThis as { Bun?: unknown }).Bun !== 'undefined'\n ? (process.env.XPOD_NODE_BINARY ?? 'node')\n : process.execPath;\n\nfunction initLogger(): void {\n const loggerFactory = new ConfigurableLoggerFactory(process.env.CSS_LOGGING_LEVEL || 'info', {\n fileName: path.join(process.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n logger = getLoggerFor('Main');\n}\n\nfunction loadEnvFile(envPath: string): void {\n if (!fs.existsSync(envPath)) {\n throw new Error(`Env file not found: ${envPath}`);\n }\n\n const content = fs.readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n\n // Only set if not already defined — CLI / parent env takes precedence.\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction resolveInstanceKey(envPath?: string): string {\n if (!envPath) {\n return 'default';\n }\n const abs = path.resolve(envPath);\n return createHash('sha256').update(abs).digest('hex').slice(0, 12);\n}\n\nfunction getRuntimeFilePath(envPath?: string): string {\n const dir = path.join(process.cwd(), '.xpod/runtime');\n return path.join(dir, `${resolveInstanceKey(envPath)}.json`);\n}\n\nfunction saveRuntimeRecord(record: RuntimeRecord): void {\n const filePath = getRuntimeFilePath(record.envPath);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(record, null, 2), 'utf-8');\n}\n\nfunction loadRuntimeRecord(envPath?: string): RuntimeRecord | undefined {\n const filePath = getRuntimeFilePath(envPath);\n if (!fs.existsSync(filePath)) {\n return undefined;\n }\n\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as RuntimeRecord;\n } catch {\n return undefined;\n }\n}\n\nfunction deleteRuntimeRecord(envPath?: string): void {\n const filePath = getRuntimeFilePath(envPath);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n}\n\nfunction isProcessRunning(pid?: number): boolean {\n if (!pid || pid <= 0) {\n return false;\n }\n\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction getVersion(): string {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT, 'package.json'), 'utf-8')) as { version?: string };\n return pkg.version ?? 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\nasync function checkGateway(baseUrl: string): Promise<boolean> {\n try {\n // Gateway internal endpoints are exposed under /service/* (legacy /_gateway/* has been removed).\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\nasync function checkCss(baseUrl: string): Promise<boolean> {\n try {\n // Prefer supervisor status rather than probing CSS routes which can fail on identifier-space/host mismatch.\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n if (!res.ok) {\n return false;\n }\n const items = (await res.json()) as Array<{ name?: string; status?: string }>;\n const css = items.find((it) => it?.name === 'css');\n return css?.status === 'running';\n } catch {\n return false;\n }\n}\nasync function checkApi(baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n if (!res.ok) {\n return false;\n }\n const items = (await res.json()) as Array<{ name?: string; status?: string }>;\n const api = items.find((it) => it?.name === 'api');\n return api?.status === 'running';\n } catch {\n return false;\n }\n}\nasync function buildHealth(baseUrl: string): Promise<HealthReport> {\n const gateway = await checkGateway(baseUrl);\n const css = await checkCss(baseUrl);\n const api = await checkApi(baseUrl);\n\n return {\n schemaVersion: '1.0',\n healthy: gateway && css && api,\n checks: {\n gateway: gateway ? 'pass' : 'fail',\n css: css ? 'pass' : 'fail',\n api: api ? 'pass' : 'fail',\n },\n timestamp: new Date().toISOString(),\n };\n}\n\nfunction outputJson(payload: unknown): void {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction exitForCliError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to start: ${message}`);\n if (message.includes('Env file not found:') || message.includes('Config file not found:')) {\n process.exit(EXIT_CONFIG_ERROR);\n }\n process.exit(EXIT_INTERNAL_ERROR);\n}\n\nasync function startRuntime(options: RunOptions): Promise<void> {\n initLogger();\n const resolvedEnvPath = options.env ? path.resolve(options.env) : undefined;\n if (resolvedEnvPath) {\n process.env.XPOD_ENV_PATH = resolvedEnvPath;\n loadEnvFile(resolvedEnvPath);\n }\n\n const requestedPort = options.port !== undefined ? Number(options.port) : Number.NaN;\n const mainPort = Number.isFinite(requestedPort)\n ? requestedPort\n : parseInt(process.env.XPOD_PORT ?? process.env.PORT ?? '3000', 10);\n const host = options.host ?? '127.0.0.1';\n\n let configPath = path.join(PACKAGE_ROOT, 'config/local.json');\n if (options.config) {\n configPath = options.config;\n } else if (options.mode) {\n configPath = path.join(PACKAGE_ROOT, `config/${options.mode}.json`);\n }\n\n if (!fs.existsSync(configPath)) {\n throw new Error(`Config file not found: ${configPath}`);\n }\n\n const mode: 'local' | 'cloud' = options.mode ?? (configPath.includes('cloud') ? 'cloud' : 'local');\n\n const baseUrl = ensureTrailingSlash(process.env.CSS_BASE_URL || `http://${host}:${mainPort}`);\n const cssPort = await getFreePort(mainPort + 1, host);\n const apiPort = await getFreePort(cssPort + 1, host);\n\n // Make sure GatewayProxy has access to the effective baseUrl for host rewrites.\n process.env.CSS_BASE_URL = baseUrl;\n\n logger.info('Orchestration Plan:');\n logger.info(` - Main Entry: ${baseUrl} (${host}:${mainPort})`);\n logger.info(` - CSS (internal): http://localhost:${cssPort}`);\n logger.info(` - API (internal): http://localhost:${apiPort}`);\n\n const supervisor = new Supervisor();\n const cssBinary = require.resolve('@solid/community-server/bin/server.js');\n const cssModuleRoot = path.dirname(require.resolve('@solid/community-server/package.json'));\n const externalOidcIssuer = resolveExternalOidcIssuer(process.env);\n if (externalOidcIssuer) {\n logger.info(` - SP mode external IdP: ${externalOidcIssuer}`);\n }\n\n const cssRuntimeConfig = createCssChildRuntimeConfig({\n configPath,\n runtimeRoot: path.join(process.cwd(), '.xpod/runtime/legacy-css'),\n externalOidcIssuer,\n });\n\n supervisor.register({\n name: 'css',\n command: childJsRuntime,\n args: buildCssArgs({\n cssBinary,\n configPath: cssRuntimeConfig.configPath,\n cssModuleRoot,\n cssPort,\n baseUrl,\n externalOidcIssuer,\n }),\n cwd: cssRuntimeConfig.cwd,\n env: buildCssChildEnv(baseUrl, cssPort, externalOidcIssuer),\n });\n\n // API server: resolve the entry point dynamically\n // In dev (ts-node): use ts-node to run the .ts file\n // In production: use the compiled .js file\n const isDevMode = __filename.endsWith('.ts');\n const apiArgs = isDevMode\n ? [\n '-r',\n require.resolve('ts-node/register/transpile-only'),\n path.join(__dirname, 'api', 'main.ts'),\n ]\n : [path.join(__dirname, 'api', 'main.js')];\n\n supervisor.register({\n name: 'api',\n command: childJsRuntime,\n args: apiArgs,\n env: buildApiChildEnv({\n apiPort,\n mainPort,\n cssPort,\n baseUrl,\n externalOidcIssuer,\n }),\n });\n\n // Bind host: use CLI --host value; if not explicitly set, derive from the public Base URL.\n // In local dev/sandboxed environments, binding 0.0.0.0 can fail with EPERM.\n const bindHost = options.host || (() => {\n try {\n const hostname = new URL(baseUrl).hostname;\n if (hostname === 'localhost') return '127.0.0.1';\n if (hostname === '::1') return '::1';\n if (hostname.startsWith('127.')) return hostname;\n } catch {\n // ignore\n }\n return '0.0.0.0';\n })();\n\n const proxy = new GatewayProxy(mainPort, supervisor, bindHost, {\n exitOnStop: true,\n baseUrl,\n });\n proxy.setTargets({\n css: `http://localhost:${cssPort}`,\n api: `http://localhost:${apiPort}`,\n });\n\n await supervisor.startAll();\n await proxy.start();\n\n let restarting = false;\n const restart = async(): Promise<void> => {\n if (restarting) {\n return;\n }\n restarting = true;\n\n logger.info('Received SIGUSR1, restarting...');\n\n // Remove runtime record first so status does not point at a process going down.\n deleteRuntimeRecord(resolvedEnvPath);\n\n try {\n await proxy.stop();\n } catch (err) {\n logger.warn(`Failed to stop gateway server: ${String(err)}`);\n }\n\n await supervisor.stopAll();\n\n // Reload env from file (dashboard writes into the env file).\n if (resolvedEnvPath) {\n loadEnvFile(resolvedEnvPath);\n process.env.XPOD_ENV_PATH = resolvedEnvPath;\n }\n\n const child = spawn(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: process.env,\n });\n child.unref();\n process.exit(EXIT_OK);\n };\n\n process.on('SIGUSR1', () => {\n void restart();\n });\n\n saveRuntimeRecord({\n schemaVersion: '1.0',\n pid: process.pid,\n mode,\n port: mainPort,\n baseUrl,\n publicUrl: process.env.CSS_PUBLIC_URL,\n envPath: resolvedEnvPath,\n configPath,\n startTime: new Date().toISOString(),\n });\n\n const shutdown = async(signal: string): Promise<void> => {\n logger.info(`Received ${signal}, shutting down...`);\n deleteRuntimeRecord(resolvedEnvPath);\n await proxy.stop();\n await supervisor.stopAll();\n process.exit(EXIT_OK);\n };\n\n process.on('SIGTERM', () => shutdown('SIGTERM'));\n process.on('SIGINT', () => shutdown('SIGINT'));\n}\n\nasync function commandStatus(envPath?: string, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n if (!runtime) {\n const payload = {\n schemaVersion: '1.0',\n running: false,\n ready: false,\n baseUrl: '',\n port: 0,\n mode: 'local',\n version: getVersion(),\n };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log('xpod is not running');\n }\n process.exit(EXIT_NOT_RUNNING);\n }\n\n const running = isProcessRunning(runtime.pid);\n const health = running ? await buildHealth(runtime.baseUrl) : undefined;\n\n const payload = {\n schemaVersion: '1.0',\n running,\n ready: Boolean(health?.healthy),\n baseUrl: runtime.baseUrl,\n publicUrl: runtime.publicUrl,\n port: runtime.port,\n mode: runtime.mode,\n pid: running ? runtime.pid : undefined,\n version: getVersion(),\n };\n\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n\n process.exit(running ? EXIT_OK : EXIT_NOT_RUNNING);\n}\n\nasync function commandHealth(envPath?: string, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n if (!runtime || !isProcessRunning(runtime.pid)) {\n const payload: HealthReport = {\n schemaVersion: '1.0',\n healthy: false,\n checks: {\n gateway: 'fail',\n css: 'fail',\n api: 'fail',\n },\n timestamp: new Date().toISOString(),\n };\n\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n process.exit(EXIT_NOT_RUNNING);\n }\n\n const payload = await buildHealth(runtime.baseUrl);\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n process.exit(payload.healthy ? EXIT_OK : EXIT_INTERNAL_ERROR);\n}\n\nasync function commandStop(envPath?: string, timeoutMs = 10000, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n\n if (!runtime || !isProcessRunning(runtime.pid)) {\n deleteRuntimeRecord(resolvedEnvPath);\n const payload = { stopped: true, running: false };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log('xpod is already stopped');\n }\n process.exit(EXIT_OK);\n }\n\n process.kill(runtime.pid, 'SIGTERM');\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (!isProcessRunning(runtime.pid)) {\n deleteRuntimeRecord(resolvedEnvPath);\n const payload = { stopped: true, pid: runtime.pid };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(`xpod stopped (pid=${runtime.pid})`);\n }\n process.exit(EXIT_OK);\n }\n await new Promise((resolve) => setTimeout(resolve, 200));\n }\n\n const payload = {\n stopped: false,\n pid: runtime.pid,\n message: `timeout waiting for process to stop (${timeoutMs}ms)`,\n };\n if (asJson) {\n outputJson(payload);\n } else {\n console.error(payload.message);\n }\n process.exit(EXIT_INTERNAL_ERROR);\n}\n\nasync function main(): Promise<void> {\n const rawArgs = hideBin(process.argv);\n const commandMode = [ 'run', 'status', 'health', 'stop' ].includes(rawArgs[0] ?? '');\n\n if (!commandMode) {\n // Backward-compatible legacy invocation: xpod --mode local --port 3000\n const argv = await yargs(rawArgs)\n .option('mode', { alias: 'm', type: 'string', choices: [ 'local', 'cloud' ], description: 'Run mode' })\n .option('config', { alias: 'c', type: 'string', description: 'Path to config file (overrides --mode)' })\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('port', { alias: 'p', type: 'number', description: 'Gateway port', default: 3000 })\n .option('host', { type: 'string', description: 'Gateway bind host' })\n .help()\n .parse();\n\n try {\n await startRuntime({\n mode: argv.mode as 'local' | 'cloud' | undefined,\n config: argv.config,\n env: argv.env,\n port: argv.port,\n host: argv.host,\n });\n } catch (error: unknown) {\n exitForCliError(error);\n }\n return;\n }\n\n await yargs(rawArgs)\n .scriptName('xpod')\n .command(\n 'run',\n 'Run xpod runtime',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('mode', { alias: 'm', type: 'string', choices: [ 'local', 'cloud' ], description: 'Run mode' })\n .option('config', { alias: 'c', type: 'string', description: 'Path to config file (overrides --mode)' })\n .option('port', { alias: 'p', type: 'number', description: 'Gateway port', default: 3000 })\n .option('host', { type: 'string', description: 'Gateway bind host' }),\n async(argv) => {\n try {\n await startRuntime({\n mode: argv.mode as 'local' | 'cloud' | undefined,\n config: argv.config,\n env: argv.env,\n port: argv.port,\n host: argv.host,\n });\n } catch (error: unknown) {\n exitForCliError(error);\n }\n },\n )\n .command(\n 'status',\n 'Show runtime status',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandStatus(argv.env, Boolean(argv.json));\n },\n )\n .command(\n 'health',\n 'Show runtime health',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandHealth(argv.env, Boolean(argv.json));\n },\n )\n .command(\n 'stop',\n 'Stop runtime process',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('timeout', { type: 'number', default: 10000, description: 'Stop timeout in milliseconds' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandStop(argv.env, argv.timeout as number, Boolean(argv.json));\n },\n )\n .demandCommand(1)\n .strict()\n .help()\n .parseAsync();\n}\n\nmain().catch(exitForCliError);\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport './runtime/configure-drizzle-solid';\nimport { createHash } from 'crypto';\nimport { spawn } from 'child_process';\nimport fs from 'fs';\nimport path from 'path';\nimport { setGlobalLoggerFactory, getLoggerFor } from 'global-logger-factory';\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { GatewayProxy, getFreePort, PACKAGE_ROOT } from './runtime';\nimport { buildApiChildEnv, buildCssArgs, buildCssChildEnv, createCssChildRuntimeConfig } from './runtime/css-process';\nimport { resolveExternalOidcIssuer } from './runtime/oidc-issuer';\nimport { resolveAuthModeFromEnv } from './authorization/AuthMode';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { Supervisor } from './supervisor';\n\ninterface RuntimeRecord {\n schemaVersion: '1.0';\n pid: number;\n mode: 'local' | 'cloud';\n port: number;\n baseUrl: string;\n publicUrl?: string;\n envPath?: string;\n configPath: string;\n startTime: string;\n}\n\ninterface HealthReport {\n schemaVersion: '1.0';\n healthy: boolean;\n checks: {\n gateway: 'pass' | 'fail';\n css: 'pass' | 'fail';\n api: 'pass' | 'fail';\n };\n timestamp: string;\n}\n\ninterface RunOptions {\n mode?: 'local' | 'cloud';\n config?: string;\n env?: string;\n port?: number;\n host?: string;\n}\n\nconst EXIT_OK = 0;\nconst EXIT_NOT_RUNNING = 10;\nconst EXIT_CONFIG_ERROR = 20;\nconst EXIT_INTERNAL_ERROR = 50;\n\nlet logger = getLoggerFor('Main');\nconst childJsRuntime = typeof (globalThis as { Bun?: unknown }).Bun !== 'undefined'\n ? (process.env.XPOD_NODE_BINARY ?? 'node')\n : process.execPath;\n\nfunction initLogger(): void {\n const loggerFactory = new ConfigurableLoggerFactory(process.env.CSS_LOGGING_LEVEL || 'info', {\n fileName: path.join(process.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n logger = getLoggerFor('Main');\n}\n\nfunction loadEnvFile(envPath: string): void {\n if (!fs.existsSync(envPath)) {\n throw new Error(`Env file not found: ${envPath}`);\n }\n\n const content = fs.readFileSync(envPath, 'utf-8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n\n // Only set if not already defined — CLI / parent env takes precedence.\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction resolveInstanceKey(envPath?: string): string {\n if (!envPath) {\n return 'default';\n }\n const abs = path.resolve(envPath);\n return createHash('sha256').update(abs).digest('hex').slice(0, 12);\n}\n\nfunction getRuntimeFilePath(envPath?: string): string {\n const dir = path.join(process.cwd(), '.xpod/runtime');\n return path.join(dir, `${resolveInstanceKey(envPath)}.json`);\n}\n\nfunction saveRuntimeRecord(record: RuntimeRecord): void {\n const filePath = getRuntimeFilePath(record.envPath);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(record, null, 2), 'utf-8');\n}\n\nfunction loadRuntimeRecord(envPath?: string): RuntimeRecord | undefined {\n const filePath = getRuntimeFilePath(envPath);\n if (!fs.existsSync(filePath)) {\n return undefined;\n }\n\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as RuntimeRecord;\n } catch {\n return undefined;\n }\n}\n\nfunction deleteRuntimeRecord(envPath?: string): void {\n const filePath = getRuntimeFilePath(envPath);\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n}\n\nfunction isProcessRunning(pid?: number): boolean {\n if (!pid || pid <= 0) {\n return false;\n }\n\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction getVersion(): string {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT, 'package.json'), 'utf-8')) as { version?: string };\n return pkg.version ?? 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\nasync function checkGateway(baseUrl: string): Promise<boolean> {\n try {\n // Gateway internal endpoints are exposed under /service/* (legacy /_gateway/* has been removed).\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\nasync function checkCss(baseUrl: string): Promise<boolean> {\n try {\n // Prefer supervisor status rather than probing CSS routes which can fail on identifier-space/host mismatch.\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n if (!res.ok) {\n return false;\n }\n const items = (await res.json()) as Array<{ name?: string; status?: string }>;\n const css = items.find((it) => it?.name === 'css');\n return css?.status === 'running';\n } catch {\n return false;\n }\n}\nasync function checkApi(baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(new URL('/service/status', ensureTrailingSlash(baseUrl)), {\n signal: AbortSignal.timeout(3000),\n });\n if (!res.ok) {\n return false;\n }\n const items = (await res.json()) as Array<{ name?: string; status?: string }>;\n const api = items.find((it) => it?.name === 'api');\n return api?.status === 'running';\n } catch {\n return false;\n }\n}\nasync function buildHealth(baseUrl: string): Promise<HealthReport> {\n const gateway = await checkGateway(baseUrl);\n const css = await checkCss(baseUrl);\n const api = await checkApi(baseUrl);\n\n return {\n schemaVersion: '1.0',\n healthy: gateway && css && api,\n checks: {\n gateway: gateway ? 'pass' : 'fail',\n css: css ? 'pass' : 'fail',\n api: api ? 'pass' : 'fail',\n },\n timestamp: new Date().toISOString(),\n };\n}\n\nfunction outputJson(payload: unknown): void {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction exitForCliError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to start: ${message}`);\n if (message.includes('Env file not found:') || message.includes('Config file not found:')) {\n process.exit(EXIT_CONFIG_ERROR);\n }\n process.exit(EXIT_INTERNAL_ERROR);\n}\n\nasync function startRuntime(options: RunOptions): Promise<void> {\n initLogger();\n const resolvedEnvPath = options.env ? path.resolve(options.env) : undefined;\n if (resolvedEnvPath) {\n process.env.XPOD_ENV_PATH = resolvedEnvPath;\n loadEnvFile(resolvedEnvPath);\n }\n\n const requestedPort = options.port !== undefined ? Number(options.port) : Number.NaN;\n const mainPort = Number.isFinite(requestedPort)\n ? requestedPort\n : parseInt(process.env.XPOD_PORT ?? process.env.PORT ?? '3000', 10);\n const host = options.host ?? '127.0.0.1';\n\n let configPath = path.join(PACKAGE_ROOT, 'config/local.json');\n if (options.config) {\n configPath = options.config;\n } else if (options.mode) {\n configPath = path.join(PACKAGE_ROOT, `config/${options.mode}.json`);\n }\n\n if (!fs.existsSync(configPath)) {\n throw new Error(`Config file not found: ${configPath}`);\n }\n\n const mode: 'local' | 'cloud' = options.mode ?? (configPath.includes('cloud') ? 'cloud' : 'local');\n\n const baseUrl = ensureTrailingSlash(process.env.CSS_BASE_URL || `http://${host}:${mainPort}`);\n const cssPort = await getFreePort(mainPort + 1, host);\n const apiPort = await getFreePort(cssPort + 1, host);\n const runtimeRoot = path.join(process.cwd(), '.xpod/runtime/legacy-css');\n const rdfIndexPath = process.env.CSS_RDF_INDEX_PATH || path.join(runtimeRoot, 'rdf-index.sqlite');\n\n // Make sure GatewayProxy has access to the effective baseUrl for host rewrites.\n process.env.CSS_BASE_URL = baseUrl;\n process.env.CSS_RDF_INDEX_PATH = rdfIndexPath;\n\n logger.info('Orchestration Plan:');\n logger.info(` - Main Entry: ${baseUrl} (${host}:${mainPort})`);\n logger.info(` - CSS (internal): http://localhost:${cssPort}`);\n logger.info(` - API (internal): http://localhost:${apiPort}`);\n\n const supervisor = new Supervisor();\n const cssBinary = require.resolve('@solid/community-server/bin/server.js');\n const cssModuleRoot = path.dirname(require.resolve('@solid/community-server/package.json'));\n const externalOidcIssuer = resolveExternalOidcIssuer(process.env);\n const authMode = resolveAuthModeFromEnv(process.env);\n if (externalOidcIssuer) {\n logger.info(` - SP mode external IdP: ${externalOidcIssuer}`);\n }\n logger.info(` - Authorization mode: ${authMode}`);\n\n const cssRuntimeConfig = createCssChildRuntimeConfig({\n configPath,\n runtimeRoot,\n authMode,\n externalOidcIssuer,\n });\n\n supervisor.register({\n name: 'css',\n command: childJsRuntime,\n args: buildCssArgs({\n cssBinary,\n configPath: cssRuntimeConfig.configPath,\n cssModuleRoot,\n cssPort,\n baseUrl,\n externalOidcIssuer,\n }),\n cwd: cssRuntimeConfig.cwd,\n env: buildCssChildEnv(baseUrl, cssPort, externalOidcIssuer, authMode),\n });\n\n // API server: resolve the entry point dynamically\n // In dev (ts-node): use ts-node to run the .ts file\n // In production: use the compiled .js file\n const isDevMode = __filename.endsWith('.ts');\n const apiArgs = isDevMode\n ? [\n '-r',\n require.resolve('ts-node/register/transpile-only'),\n path.join(__dirname, 'api', 'main.ts'),\n ]\n : [path.join(__dirname, 'api', 'main.js')];\n\n supervisor.register({\n name: 'api',\n command: childJsRuntime,\n args: apiArgs,\n env: buildApiChildEnv({\n apiPort,\n mainPort,\n cssPort,\n baseUrl,\n rdfIndexPath,\n authMode,\n externalOidcIssuer,\n }),\n });\n\n // Bind host: use CLI --host value; if not explicitly set, derive from the public Base URL.\n // In local dev/sandboxed environments, binding 0.0.0.0 can fail with EPERM.\n const bindHost = options.host || (() => {\n try {\n const hostname = new URL(baseUrl).hostname;\n if (hostname === 'localhost') return '127.0.0.1';\n if (hostname === '::1') return '::1';\n if (hostname.startsWith('127.')) return hostname;\n } catch {\n // ignore\n }\n return '0.0.0.0';\n })();\n\n const proxy = new GatewayProxy(mainPort, supervisor, bindHost, {\n exitOnStop: true,\n baseUrl,\n });\n proxy.setTargets({\n css: `http://localhost:${cssPort}`,\n api: `http://localhost:${apiPort}`,\n });\n\n await supervisor.startAll();\n await proxy.start();\n\n let restarting = false;\n const restart = async(): Promise<void> => {\n if (restarting) {\n return;\n }\n restarting = true;\n\n logger.info('Received SIGUSR1, restarting...');\n\n // Remove runtime record first so status does not point at a process going down.\n deleteRuntimeRecord(resolvedEnvPath);\n\n try {\n await proxy.stop();\n } catch (err) {\n logger.warn(`Failed to stop gateway server: ${String(err)}`);\n }\n\n await supervisor.stopAll();\n\n // Reload env from file (dashboard writes into the env file).\n if (resolvedEnvPath) {\n loadEnvFile(resolvedEnvPath);\n process.env.XPOD_ENV_PATH = resolvedEnvPath;\n }\n\n const child = spawn(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: process.env,\n });\n child.unref();\n process.exit(EXIT_OK);\n };\n\n process.on('SIGUSR1', () => {\n void restart();\n });\n\n saveRuntimeRecord({\n schemaVersion: '1.0',\n pid: process.pid,\n mode,\n port: mainPort,\n baseUrl,\n publicUrl: process.env.CSS_PUBLIC_URL,\n envPath: resolvedEnvPath,\n configPath,\n startTime: new Date().toISOString(),\n });\n\n const shutdown = async(signal: string): Promise<void> => {\n logger.info(`Received ${signal}, shutting down...`);\n deleteRuntimeRecord(resolvedEnvPath);\n await proxy.stop();\n await supervisor.stopAll();\n process.exit(EXIT_OK);\n };\n\n process.on('SIGTERM', () => shutdown('SIGTERM'));\n process.on('SIGINT', () => shutdown('SIGINT'));\n}\n\nasync function commandStatus(envPath?: string, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n if (!runtime) {\n const payload = {\n schemaVersion: '1.0',\n running: false,\n ready: false,\n baseUrl: '',\n port: 0,\n mode: 'local',\n version: getVersion(),\n };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log('xpod is not running');\n }\n process.exit(EXIT_NOT_RUNNING);\n }\n\n const running = isProcessRunning(runtime.pid);\n const health = running ? await buildHealth(runtime.baseUrl) : undefined;\n\n const payload = {\n schemaVersion: '1.0',\n running,\n ready: Boolean(health?.healthy),\n baseUrl: runtime.baseUrl,\n publicUrl: runtime.publicUrl,\n port: runtime.port,\n mode: runtime.mode,\n pid: running ? runtime.pid : undefined,\n version: getVersion(),\n };\n\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n\n process.exit(running ? EXIT_OK : EXIT_NOT_RUNNING);\n}\n\nasync function commandHealth(envPath?: string, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n if (!runtime || !isProcessRunning(runtime.pid)) {\n const payload: HealthReport = {\n schemaVersion: '1.0',\n healthy: false,\n checks: {\n gateway: 'fail',\n css: 'fail',\n api: 'fail',\n },\n timestamp: new Date().toISOString(),\n };\n\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n process.exit(EXIT_NOT_RUNNING);\n }\n\n const payload = await buildHealth(runtime.baseUrl);\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(payload);\n }\n process.exit(payload.healthy ? EXIT_OK : EXIT_INTERNAL_ERROR);\n}\n\nasync function commandStop(envPath?: string, timeoutMs = 10000, asJson = false): Promise<void> {\n const resolvedEnvPath = envPath ? path.resolve(envPath) : undefined;\n const runtime = loadRuntimeRecord(resolvedEnvPath);\n\n if (!runtime || !isProcessRunning(runtime.pid)) {\n deleteRuntimeRecord(resolvedEnvPath);\n const payload = { stopped: true, running: false };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log('xpod is already stopped');\n }\n process.exit(EXIT_OK);\n }\n\n process.kill(runtime.pid, 'SIGTERM');\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (!isProcessRunning(runtime.pid)) {\n deleteRuntimeRecord(resolvedEnvPath);\n const payload = { stopped: true, pid: runtime.pid };\n if (asJson) {\n outputJson(payload);\n } else {\n console.log(`xpod stopped (pid=${runtime.pid})`);\n }\n process.exit(EXIT_OK);\n }\n await new Promise((resolve) => setTimeout(resolve, 200));\n }\n\n const payload = {\n stopped: false,\n pid: runtime.pid,\n message: `timeout waiting for process to stop (${timeoutMs}ms)`,\n };\n if (asJson) {\n outputJson(payload);\n } else {\n console.error(payload.message);\n }\n process.exit(EXIT_INTERNAL_ERROR);\n}\n\nasync function main(): Promise<void> {\n const rawArgs = hideBin(process.argv);\n const commandMode = [ 'run', 'status', 'health', 'stop' ].includes(rawArgs[0] ?? '');\n\n if (!commandMode) {\n // Backward-compatible legacy invocation: xpod --mode local --port 3000\n const argv = await yargs(rawArgs)\n .option('mode', { alias: 'm', type: 'string', choices: [ 'local', 'cloud' ], description: 'Run mode' })\n .option('config', { alias: 'c', type: 'string', description: 'Path to config file (overrides --mode)' })\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('port', { alias: 'p', type: 'number', description: 'Gateway port', default: 3000 })\n .option('host', { type: 'string', description: 'Gateway bind host' })\n .help()\n .parse();\n\n try {\n await startRuntime({\n mode: argv.mode as 'local' | 'cloud' | undefined,\n config: argv.config,\n env: argv.env,\n port: argv.port,\n host: argv.host,\n });\n } catch (error: unknown) {\n exitForCliError(error);\n }\n return;\n }\n\n await yargs(rawArgs)\n .scriptName('xpod')\n .command(\n 'run',\n 'Run xpod runtime',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('mode', { alias: 'm', type: 'string', choices: [ 'local', 'cloud' ], description: 'Run mode' })\n .option('config', { alias: 'c', type: 'string', description: 'Path to config file (overrides --mode)' })\n .option('port', { alias: 'p', type: 'number', description: 'Gateway port', default: 3000 })\n .option('host', { type: 'string', description: 'Gateway bind host' }),\n async(argv) => {\n try {\n await startRuntime({\n mode: argv.mode as 'local' | 'cloud' | undefined,\n config: argv.config,\n env: argv.env,\n port: argv.port,\n host: argv.host,\n });\n } catch (error: unknown) {\n exitForCliError(error);\n }\n },\n )\n .command(\n 'status',\n 'Show runtime status',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandStatus(argv.env, Boolean(argv.json));\n },\n )\n .command(\n 'health',\n 'Show runtime health',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandHealth(argv.env, Boolean(argv.json));\n },\n )\n .command(\n 'stop',\n 'Stop runtime process',\n (y) => y\n .option('env', { alias: 'e', type: 'string', description: 'Path to .env file' })\n .option('timeout', { type: 'number', default: 10000, description: 'Stop timeout in milliseconds' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON' }),\n async(argv) => {\n await commandStop(argv.env, argv.timeout as number, Boolean(argv.json));\n },\n )\n .demandCommand(1)\n .strict()\n .help()\n .parseAsync();\n}\n\nmain().catch(exitForCliError);\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AuthMode } from '../authorization/AuthMode';
|
|
1
2
|
export interface LocalPodProvisioningInput {
|
|
2
3
|
podName: string;
|
|
3
4
|
webId?: string;
|
|
@@ -13,7 +14,9 @@ export interface LocalPodProvisioningServiceOptions {
|
|
|
13
14
|
rootDir: string;
|
|
14
15
|
sparqlEndpoint: string;
|
|
15
16
|
identityDbUrl: string;
|
|
17
|
+
rdfIndexPath?: string;
|
|
16
18
|
oidcIssuer?: string;
|
|
19
|
+
authMode?: AuthMode | string;
|
|
17
20
|
}
|
|
18
21
|
export declare class LocalPodProvisioningService {
|
|
19
22
|
private readonly logger;
|
|
@@ -21,14 +24,15 @@ export declare class LocalPodProvisioningService {
|
|
|
21
24
|
private readonly rootDir;
|
|
22
25
|
private readonly sparqlDbPath;
|
|
23
26
|
private readonly identityDbPath;
|
|
27
|
+
private readonly rdfIndexPath?;
|
|
24
28
|
private readonly oidcIssuer?;
|
|
29
|
+
private readonly authMode?;
|
|
25
30
|
private readonly sqliteRuntime;
|
|
26
31
|
constructor(options: LocalPodProvisioningServiceOptions);
|
|
27
32
|
createPod(input: LocalPodProvisioningInput): Promise<LocalPodProvisioningResult>;
|
|
28
33
|
private createPodFiles;
|
|
29
34
|
private writeQuints;
|
|
35
|
+
private writeRdfIndex;
|
|
30
36
|
private buildPodQuads;
|
|
31
|
-
private addRootAcrQuads;
|
|
32
|
-
private addPublicReadAcrQuads;
|
|
33
37
|
private writeIdentityIndexes;
|
|
34
38
|
}
|
|
@@ -11,6 +11,8 @@ const n3_1 = require("n3");
|
|
|
11
11
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
12
12
|
const serialization_1 = require("../storage/quint/serialization");
|
|
13
13
|
const SqliteRuntime_1 = require("../storage/SqliteRuntime");
|
|
14
|
+
const PodAuthorizationResources_1 = require("../authorization/PodAuthorizationResources");
|
|
15
|
+
const RdfQuadIndex_1 = require("../storage/rdf/RdfQuadIndex");
|
|
14
16
|
const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
|
|
15
17
|
const LDP = 'http://www.w3.org/ns/ldp#';
|
|
16
18
|
const DCT = 'http://purl.org/dc/terms/';
|
|
@@ -18,9 +20,7 @@ const MA = 'http://www.w3.org/ns/ma-ont#';
|
|
|
18
20
|
const PIM = 'http://www.w3.org/ns/pim/space#';
|
|
19
21
|
const FOAF = 'http://xmlns.com/foaf/0.1/';
|
|
20
22
|
const SOLID = 'http://www.w3.org/ns/solid/terms#';
|
|
21
|
-
const
|
|
22
|
-
const ACP = 'http://www.w3.org/ns/solid/acp#';
|
|
23
|
-
const { blankNode, literal, namedNode, quad } = n3_1.DataFactory;
|
|
23
|
+
const { literal, namedNode, quad } = n3_1.DataFactory;
|
|
24
24
|
function ensureTrailingSlash(url) {
|
|
25
25
|
return url.endsWith('/') ? url : `${url}/`;
|
|
26
26
|
}
|
|
@@ -106,7 +106,9 @@ class LocalPodProvisioningService {
|
|
|
106
106
|
this.rootDir = options.rootDir;
|
|
107
107
|
this.sparqlDbPath = stripSqlitePrefix(options.sparqlEndpoint, 'sparqlEndpoint');
|
|
108
108
|
this.identityDbPath = stripSqlitePrefix(options.identityDbUrl, 'identityDbUrl');
|
|
109
|
+
this.rdfIndexPath = options.rdfIndexPath;
|
|
109
110
|
this.oidcIssuer = options.oidcIssuer ? ensureTrailingSlash(options.oidcIssuer) : undefined;
|
|
111
|
+
this.authMode = options.authMode;
|
|
110
112
|
}
|
|
111
113
|
async createPod(input) {
|
|
112
114
|
const podUrl = ensureTrailingSlash(new URL(`${encodeURIComponent(input.podName)}/`, this.baseUrl).toString());
|
|
@@ -117,7 +119,9 @@ class LocalPodProvisioningService {
|
|
|
117
119
|
const ownerId = stableUuid(`owner:${podId}:${webId}`);
|
|
118
120
|
const webIdLinkId = stableUuid(`webIdLink:${accountId}:${webId}`);
|
|
119
121
|
await this.createPodFiles(input.podName, input.initialResources);
|
|
120
|
-
this.
|
|
122
|
+
const quads = this.buildPodQuads({ podUrl, webId, oidcIssuer });
|
|
123
|
+
this.writeQuints(quads);
|
|
124
|
+
this.writeRdfIndex(quads);
|
|
121
125
|
this.writeIdentityIndexes({ accountId, podId, ownerId, webIdLinkId, podUrl, webId });
|
|
122
126
|
this.logger.info(`Provisioned local pod ${podUrl} for ${webId}`);
|
|
123
127
|
return { podUrl, accountId, podId };
|
|
@@ -138,11 +142,11 @@ class LocalPodProvisioningService {
|
|
|
138
142
|
await node_fs_1.promises.writeFile(filePath, content, 'utf8');
|
|
139
143
|
}
|
|
140
144
|
}
|
|
141
|
-
writeQuints(
|
|
145
|
+
writeQuints(quads) {
|
|
142
146
|
const db = this.sqliteRuntime.openDatabase(this.sparqlDbPath);
|
|
143
147
|
try {
|
|
144
148
|
createQuintsTable(db);
|
|
145
|
-
const rows =
|
|
149
|
+
const rows = quads.map((entry) => {
|
|
146
150
|
const row = (0, serialization_1.quadToRow)(entry);
|
|
147
151
|
return [row.graph, row.subject, row.predicate, row.object, row.vector];
|
|
148
152
|
});
|
|
@@ -160,19 +164,36 @@ class LocalPodProvisioningService {
|
|
|
160
164
|
db.close();
|
|
161
165
|
}
|
|
162
166
|
}
|
|
167
|
+
writeRdfIndex(quads) {
|
|
168
|
+
if (!this.rdfIndexPath) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const index = new RdfQuadIndex_1.RdfQuadIndex({ path: this.rdfIndexPath });
|
|
172
|
+
try {
|
|
173
|
+
index.open();
|
|
174
|
+
index.multiPut(quads);
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
index.close();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
163
180
|
buildPodQuads({ podUrl, webId, oidcIssuer }) {
|
|
164
181
|
const now = new Date().toISOString();
|
|
165
182
|
const root = this.baseUrl;
|
|
166
183
|
const profileUrl = iri(podUrl, 'profile/');
|
|
167
184
|
const cardUrl = iri(podUrl, 'profile/card');
|
|
168
|
-
const
|
|
169
|
-
|
|
185
|
+
const authorizationResources = (0, PodAuthorizationResources_1.buildPodAuthorizationResources)({
|
|
186
|
+
authMode: this.authMode,
|
|
187
|
+
podUrl,
|
|
188
|
+
cardUrl,
|
|
189
|
+
webId,
|
|
190
|
+
stableId: stableUuid,
|
|
191
|
+
iri,
|
|
192
|
+
});
|
|
170
193
|
const rootGraph = namedNode(root);
|
|
171
194
|
const podGraph = namedNode(podUrl);
|
|
172
195
|
const profileGraph = namedNode(profileUrl);
|
|
173
196
|
const cardGraph = namedNode(cardUrl);
|
|
174
|
-
const rootAcrGraph = namedNode(rootAcrUrl);
|
|
175
|
-
const cardAcrGraph = namedNode(cardAcrUrl);
|
|
176
197
|
const out = [];
|
|
177
198
|
const add = (graph, subject, predicate, object) => {
|
|
178
199
|
out.push(quad(namedNode(subject), namedNode(predicate), namedNode(object), namedNode(graph)));
|
|
@@ -200,42 +221,24 @@ class LocalPodProvisioningService {
|
|
|
200
221
|
add(graph, resource, `${RDF}type`, `${LDP}Resource`);
|
|
201
222
|
};
|
|
202
223
|
out.push(quad(namedNode(root), namedNode(`${LDP}contains`), namedNode(podUrl), rootGraph));
|
|
203
|
-
out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(
|
|
224
|
+
out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(authorizationResources.rootResourceUrl), podGraph));
|
|
204
225
|
out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(profileUrl), podGraph));
|
|
205
226
|
out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(cardUrl), profileGraph));
|
|
206
|
-
out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(
|
|
227
|
+
out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(authorizationResources.cardResourceUrl), profileGraph));
|
|
207
228
|
addContainerMeta(root);
|
|
208
229
|
addContainerMeta(podUrl, true);
|
|
209
230
|
addContainerMeta(profileUrl);
|
|
210
|
-
addDocumentMeta(
|
|
231
|
+
addDocumentMeta(authorizationResources.rootResourceUrl);
|
|
211
232
|
addDocumentMeta(cardUrl);
|
|
212
|
-
addDocumentMeta(
|
|
233
|
+
addDocumentMeta(authorizationResources.cardResourceUrl);
|
|
213
234
|
out.push(quad(namedNode(cardUrl), namedNode(`${RDF}type`), namedNode(`${FOAF}PersonalProfileDocument`), cardGraph));
|
|
214
235
|
out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}maker`), namedNode(webId), cardGraph));
|
|
215
236
|
out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}primaryTopic`), namedNode(webId), cardGraph));
|
|
216
237
|
out.push(quad(namedNode(webId), namedNode(`${RDF}type`), namedNode(`${FOAF}Person`), cardGraph));
|
|
217
238
|
out.push(quad(namedNode(webId), namedNode(`${SOLID}oidcIssuer`), namedNode(oidcIssuer), cardGraph));
|
|
218
|
-
|
|
219
|
-
this.addPublicReadAcrQuads(out, cardAcrGraph, cardAcrUrl, cardUrl);
|
|
239
|
+
out.push(...authorizationResources.quads);
|
|
220
240
|
return out;
|
|
221
241
|
}
|
|
222
|
-
addRootAcrQuads(out, graph, acrUrl, podUrl, webId) {
|
|
223
|
-
const root = namedNode(`${acrUrl}#root`);
|
|
224
|
-
const publicRead = namedNode(`${acrUrl}#publicReadAccess`);
|
|
225
|
-
const fullOwner = namedNode(`${acrUrl}#fullOwnerAccess`);
|
|
226
|
-
const publicPolicy = blankNode(`public-policy-${stableUuid(acrUrl)}`);
|
|
227
|
-
const publicMatcher = blankNode(`public-matcher-${stableUuid(acrUrl)}`);
|
|
228
|
-
const ownerPolicy = blankNode(`owner-policy-${stableUuid(acrUrl)}`);
|
|
229
|
-
const ownerMatcher = blankNode(`owner-matcher-${stableUuid(acrUrl)}`);
|
|
230
|
-
out.push(quad(root, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControlResource`), graph), quad(root, namedNode(`${ACP}resource`), namedNode(podUrl), graph), quad(root, namedNode(`${ACP}accessControl`), publicRead, graph), quad(root, namedNode(`${ACP}accessControl`), fullOwner, graph), quad(root, namedNode(`${ACP}memberAccessControl`), fullOwner, graph), quad(publicRead, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph), quad(publicRead, namedNode(`${ACP}apply`), publicPolicy, graph), quad(publicPolicy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph), quad(publicPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph), quad(publicPolicy, namedNode(`${ACP}anyOf`), publicMatcher, graph), quad(publicMatcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph), quad(publicMatcher, namedNode(`${ACP}agent`), namedNode(`${ACP}PublicAgent`), graph), quad(fullOwner, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph), quad(fullOwner, namedNode(`${ACP}apply`), ownerPolicy, graph), quad(ownerPolicy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph), quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph), quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Write`), graph), quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Control`), graph), quad(ownerPolicy, namedNode(`${ACP}anyOf`), ownerMatcher, graph), quad(ownerMatcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph), quad(ownerMatcher, namedNode(`${ACP}agent`), namedNode(webId), graph));
|
|
231
|
-
}
|
|
232
|
-
addPublicReadAcrQuads(out, graph, acrUrl, resourceUrl) {
|
|
233
|
-
const card = namedNode(`${acrUrl}#card`);
|
|
234
|
-
const publicRead = namedNode(`${acrUrl}#publicReadAccess`);
|
|
235
|
-
const policy = blankNode(`card-policy-${stableUuid(acrUrl)}`);
|
|
236
|
-
const matcher = blankNode(`card-matcher-${stableUuid(acrUrl)}`);
|
|
237
|
-
out.push(quad(card, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControlResource`), graph), quad(card, namedNode(`${ACP}resource`), namedNode(resourceUrl), graph), quad(card, namedNode(`${ACP}accessControl`), publicRead, graph), quad(publicRead, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph), quad(publicRead, namedNode(`${ACP}apply`), policy, graph), quad(policy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph), quad(policy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph), quad(policy, namedNode(`${ACP}anyOf`), matcher, graph), quad(matcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph), quad(matcher, namedNode(`${ACP}agent`), namedNode(`${ACP}PublicAgent`), graph));
|
|
238
|
-
}
|
|
239
242
|
writeIdentityIndexes(input) {
|
|
240
243
|
const db = this.sqliteRuntime.openDatabase(this.identityDbPath);
|
|
241
244
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalPodProvisioningService.js","sourceRoot":"","sources":["../../src/provision/LocalPodProvisioningService.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad } from '@rdfjs/types';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { quadToRow } from '../storage/quint/serialization';\nimport { getSqliteRuntime, type SqliteDatabase } from '../storage/SqliteRuntime';\n\nconst RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\nconst LDP = 'http://www.w3.org/ns/ldp#';\nconst DCT = 'http://purl.org/dc/terms/';\nconst MA = 'http://www.w3.org/ns/ma-ont#';\nconst PIM = 'http://www.w3.org/ns/pim/space#';\nconst FOAF = 'http://xmlns.com/foaf/0.1/';\nconst SOLID = 'http://www.w3.org/ns/solid/terms#';\nconst ACL = 'http://www.w3.org/ns/auth/acl#';\nconst ACP = 'http://www.w3.org/ns/solid/acp#';\n\nconst { blankNode, literal, namedNode, quad } = DataFactory;\n\nexport interface LocalPodProvisioningInput {\n podName: string;\n webId?: string;\n initialResources?: Record<string, string>;\n}\n\nexport interface LocalPodProvisioningResult {\n podUrl: string;\n accountId: string;\n podId: string;\n}\n\nexport interface LocalPodProvisioningServiceOptions {\n baseUrl: string;\n rootDir: string;\n sparqlEndpoint: string;\n identityDbUrl: string;\n oidcIssuer?: string;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction stripSqlitePrefix(value: string, label: string): string {\n if (value.startsWith('sqlite:')) {\n return value.slice('sqlite:'.length);\n }\n if (value === ':memory:') {\n return value;\n }\n if (/^[a-z][a-z0-9+.-]*:/iu.test(value)) {\n throw new Error(`${label} must be a sqlite URL for local Pod provisioning: ${value}`);\n }\n return value;\n}\n\nfunction stableUuid(input: string): string {\n const hex = createHash('sha256').update(input).digest('hex').slice(0, 32);\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n `4${hex.slice(13, 16)}`,\n `${((Number.parseInt(hex.slice(16, 18), 16) & 0x3f) | 0x80).toString(16).padStart(2, '0')}${hex.slice(18, 20)}`,\n hex.slice(20, 32),\n ].join('-');\n}\n\nfunction inferIssuerFromWebId(webId: string | undefined): string | undefined {\n if (!webId) {\n return undefined;\n }\n try {\n const url = new URL(webId);\n return `${url.origin}/`;\n } catch {\n return undefined;\n }\n}\n\nfunction buildWebIdFromIssuer(oidcIssuer: string | undefined, podName: string): string | undefined {\n if (!oidcIssuer) {\n return undefined;\n }\n return new URL(`${encodeURIComponent(podName)}/profile/card#me`, ensureTrailingSlash(oidcIssuer)).toString();\n}\n\nfunction createQuintsTable(db: SqliteDatabase): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT,\n PRIMARY KEY (graph, subject, predicate, object)\n );\n\n CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph);\n CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object);\n CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph);\n CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject);\n CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject);\n `);\n}\n\nfunction createInternalKvTable(db: SqliteDatabase): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS internal_kv (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n `);\n}\n\nfunction meta(resource: string): string {\n return `meta:${resource}`;\n}\n\nfunction iri(base: string, relative: string): string {\n return new URL(relative, base).toString();\n}\n\nexport class LocalPodProvisioningService {\n private readonly logger = getLoggerFor(this);\n private readonly baseUrl: string;\n private readonly rootDir: string;\n private readonly sparqlDbPath: string;\n private readonly identityDbPath: string;\n private readonly oidcIssuer?: string;\n private readonly sqliteRuntime = getSqliteRuntime();\n\n public constructor(options: LocalPodProvisioningServiceOptions) {\n this.baseUrl = ensureTrailingSlash(options.baseUrl);\n this.rootDir = options.rootDir;\n this.sparqlDbPath = stripSqlitePrefix(options.sparqlEndpoint, 'sparqlEndpoint');\n this.identityDbPath = stripSqlitePrefix(options.identityDbUrl, 'identityDbUrl');\n this.oidcIssuer = options.oidcIssuer ? ensureTrailingSlash(options.oidcIssuer) : undefined;\n }\n\n public async createPod(input: LocalPodProvisioningInput): Promise<LocalPodProvisioningResult> {\n const podUrl = ensureTrailingSlash(new URL(`${encodeURIComponent(input.podName)}/`, this.baseUrl).toString());\n const webId = input.webId ?? buildWebIdFromIssuer(this.oidcIssuer, input.podName) ?? `${podUrl}profile/card#me`;\n const oidcIssuer = this.oidcIssuer ?? inferIssuerFromWebId(webId) ?? this.baseUrl;\n const accountId = stableUuid(`account:${podUrl}:${webId}`);\n const podId = stableUuid(`pod:${podUrl}:${webId}`);\n const ownerId = stableUuid(`owner:${podId}:${webId}`);\n const webIdLinkId = stableUuid(`webIdLink:${accountId}:${webId}`);\n\n await this.createPodFiles(input.podName, input.initialResources);\n this.writeQuints({ podUrl, webId, oidcIssuer });\n this.writeIdentityIndexes({ accountId, podId, ownerId, webIdLinkId, podUrl, webId });\n\n this.logger.info(`Provisioned local pod ${podUrl} for ${webId}`);\n return { podUrl, accountId, podId };\n }\n\n private async createPodFiles(podName: string, initialResources?: Record<string, string>): Promise<void> {\n const podPath = path.join(this.rootDir, podName);\n await fs.mkdir(path.join(podPath, 'profile'), { recursive: true });\n\n if (!initialResources) {\n return;\n }\n\n for (const [filename, content] of Object.entries(initialResources)) {\n const normalized = path.normalize(filename);\n if (normalized.startsWith('..') || path.isAbsolute(normalized)) {\n throw new Error(`Invalid initial resource path: ${filename}`);\n }\n const filePath = path.join(podPath, normalized);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, 'utf8');\n }\n }\n\n private writeQuints(input: { podUrl: string; webId: string; oidcIssuer: string }): void {\n const db = this.sqliteRuntime.openDatabase(this.sparqlDbPath);\n try {\n createQuintsTable(db);\n const rows = this.buildPodQuads(input).map((entry) => {\n const row = quadToRow(entry);\n return [row.graph, row.subject, row.predicate, row.object, row.vector] as const;\n });\n const insert = db.prepare(`\n INSERT OR IGNORE INTO quints (graph, subject, predicate, object, vector)\n VALUES (?, ?, ?, ?, ?)\n `);\n\n db.transaction(() => {\n for (const row of rows) {\n insert.run(...row);\n }\n })();\n } finally {\n db.close();\n }\n }\n\n private buildPodQuads({ podUrl, webId, oidcIssuer }: { podUrl: string; webId: string; oidcIssuer: string }): Quad[] {\n const now = new Date().toISOString();\n const root = this.baseUrl;\n const profileUrl = iri(podUrl, 'profile/');\n const cardUrl = iri(podUrl, 'profile/card');\n const rootAcrUrl = iri(podUrl, '.acr');\n const cardAcrUrl = iri(podUrl, 'profile/card.acr');\n const rootGraph = namedNode(root);\n const podGraph = namedNode(podUrl);\n const profileGraph = namedNode(profileUrl);\n const cardGraph = namedNode(cardUrl);\n const rootAcrGraph = namedNode(rootAcrUrl);\n const cardAcrGraph = namedNode(cardAcrUrl);\n const out: Quad[] = [];\n\n const add = (graph: string, subject: string, predicate: string, object: string): void => {\n out.push(quad(namedNode(subject), namedNode(predicate), namedNode(object), namedNode(graph)));\n };\n const addLiteral = (graph: string, subject: string, predicate: string, value: string): void => {\n out.push(quad(namedNode(subject), namedNode(predicate), literal(value), namedNode(graph)));\n };\n const addDate = (graph: string, subject: string): void => {\n out.push(quad(namedNode(subject), namedNode(`${DCT}modified`), literal(now, namedNode('http://www.w3.org/2001/XMLSchema#dateTime')), namedNode(graph)));\n };\n const addContainerMeta = (resource: string, storage = false): void => {\n const graph = meta(resource);\n addDate(graph, resource);\n add(graph, resource, `${RDF}type`, `${LDP}Resource`);\n add(graph, resource, `${RDF}type`, `${LDP}Container`);\n add(graph, resource, `${RDF}type`, `${LDP}BasicContainer`);\n if (storage) {\n add(graph, resource, `${RDF}type`, `${PIM}Storage`);\n }\n addLiteral(graph, resource, `${MA}format`, 'internal/quads');\n };\n const addDocumentMeta = (resource: string): void => {\n const graph = meta(resource);\n addDate(graph, resource);\n add(graph, resource, `${RDF}type`, `${LDP}Resource`);\n };\n\n out.push(quad(namedNode(root), namedNode(`${LDP}contains`), namedNode(podUrl), rootGraph));\n out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(rootAcrUrl), podGraph));\n out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(profileUrl), podGraph));\n out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(cardUrl), profileGraph));\n out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(cardAcrUrl), profileGraph));\n\n addContainerMeta(root);\n addContainerMeta(podUrl, true);\n addContainerMeta(profileUrl);\n addDocumentMeta(rootAcrUrl);\n addDocumentMeta(cardUrl);\n addDocumentMeta(cardAcrUrl);\n\n out.push(quad(namedNode(cardUrl), namedNode(`${RDF}type`), namedNode(`${FOAF}PersonalProfileDocument`), cardGraph));\n out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}maker`), namedNode(webId), cardGraph));\n out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}primaryTopic`), namedNode(webId), cardGraph));\n out.push(quad(namedNode(webId), namedNode(`${RDF}type`), namedNode(`${FOAF}Person`), cardGraph));\n out.push(quad(namedNode(webId), namedNode(`${SOLID}oidcIssuer`), namedNode(oidcIssuer), cardGraph));\n\n this.addRootAcrQuads(out, rootAcrGraph, rootAcrUrl, podUrl, webId);\n this.addPublicReadAcrQuads(out, cardAcrGraph, cardAcrUrl, cardUrl);\n\n return out;\n }\n\n private addRootAcrQuads(out: Quad[], graph: ReturnType<typeof namedNode>, acrUrl: string, podUrl: string, webId: string): void {\n const root = namedNode(`${acrUrl}#root`);\n const publicRead = namedNode(`${acrUrl}#publicReadAccess`);\n const fullOwner = namedNode(`${acrUrl}#fullOwnerAccess`);\n const publicPolicy = blankNode(`public-policy-${stableUuid(acrUrl)}`);\n const publicMatcher = blankNode(`public-matcher-${stableUuid(acrUrl)}`);\n const ownerPolicy = blankNode(`owner-policy-${stableUuid(acrUrl)}`);\n const ownerMatcher = blankNode(`owner-matcher-${stableUuid(acrUrl)}`);\n\n out.push(\n quad(root, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControlResource`), graph),\n quad(root, namedNode(`${ACP}resource`), namedNode(podUrl), graph),\n quad(root, namedNode(`${ACP}accessControl`), publicRead, graph),\n quad(root, namedNode(`${ACP}accessControl`), fullOwner, graph),\n quad(root, namedNode(`${ACP}memberAccessControl`), fullOwner, graph),\n quad(publicRead, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph),\n quad(publicRead, namedNode(`${ACP}apply`), publicPolicy, graph),\n quad(publicPolicy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph),\n quad(publicPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph),\n quad(publicPolicy, namedNode(`${ACP}anyOf`), publicMatcher, graph),\n quad(publicMatcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph),\n quad(publicMatcher, namedNode(`${ACP}agent`), namedNode(`${ACP}PublicAgent`), graph),\n quad(fullOwner, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph),\n quad(fullOwner, namedNode(`${ACP}apply`), ownerPolicy, graph),\n quad(ownerPolicy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph),\n quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph),\n quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Write`), graph),\n quad(ownerPolicy, namedNode(`${ACP}allow`), namedNode(`${ACL}Control`), graph),\n quad(ownerPolicy, namedNode(`${ACP}anyOf`), ownerMatcher, graph),\n quad(ownerMatcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph),\n quad(ownerMatcher, namedNode(`${ACP}agent`), namedNode(webId), graph),\n );\n }\n\n private addPublicReadAcrQuads(out: Quad[], graph: ReturnType<typeof namedNode>, acrUrl: string, resourceUrl: string): void {\n const card = namedNode(`${acrUrl}#card`);\n const publicRead = namedNode(`${acrUrl}#publicReadAccess`);\n const policy = blankNode(`card-policy-${stableUuid(acrUrl)}`);\n const matcher = blankNode(`card-matcher-${stableUuid(acrUrl)}`);\n\n out.push(\n quad(card, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControlResource`), graph),\n quad(card, namedNode(`${ACP}resource`), namedNode(resourceUrl), graph),\n quad(card, namedNode(`${ACP}accessControl`), publicRead, graph),\n quad(publicRead, namedNode(`${RDF}type`), namedNode(`${ACP}AccessControl`), graph),\n quad(publicRead, namedNode(`${ACP}apply`), policy, graph),\n quad(policy, namedNode(`${RDF}type`), namedNode(`${ACP}Policy`), graph),\n quad(policy, namedNode(`${ACP}allow`), namedNode(`${ACL}Read`), graph),\n quad(policy, namedNode(`${ACP}anyOf`), matcher, graph),\n quad(matcher, namedNode(`${RDF}type`), namedNode(`${ACP}Matcher`), graph),\n quad(matcher, namedNode(`${ACP}agent`), namedNode(`${ACP}PublicAgent`), graph),\n );\n }\n\n private writeIdentityIndexes(input: {\n accountId: string;\n podId: string;\n ownerId: string;\n webIdLinkId: string;\n podUrl: string;\n webId: string;\n }): void {\n const db = this.sqliteRuntime.openDatabase(this.identityDbPath);\n try {\n createInternalKvTable(db);\n const account = {\n linkedLoginsCount: 1,\n id: input.accountId,\n '**pod**': {\n [input.podId]: {\n baseUrl: input.podUrl,\n accountId: input.accountId,\n id: input.podId,\n '**owner**': {\n [input.ownerId]: {\n podId: input.podId,\n webId: input.webId,\n visible: false,\n id: input.ownerId,\n },\n },\n },\n },\n '**webIdLink**': {\n [input.webIdLinkId]: {\n webId: input.webId,\n accountId: input.accountId,\n id: input.webIdLinkId,\n },\n },\n };\n\n const rows: Array<[string, string]> = [\n [`accounts/data/${input.accountId}`, JSON.stringify(account)],\n [`accounts/index/pod/${input.podId}`, JSON.stringify([input.accountId])],\n [`accounts/index/pod/baseUrl/${encodeURIComponent(input.podUrl)}`, JSON.stringify([input.accountId])],\n [`accounts/index/owner/${input.ownerId}`, JSON.stringify([input.accountId])],\n [`accounts/index/webIdLink/${input.webIdLinkId}`, JSON.stringify([input.accountId])],\n [`accounts/index/webIdLink/webId/${encodeURIComponent(input.webId)}`, JSON.stringify([input.accountId])],\n ];\n const insert = db.prepare(`\n INSERT INTO internal_kv (key, value, updated_at)\n VALUES (?, ?, datetime('now'))\n ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = datetime('now')\n `);\n\n db.transaction(() => {\n for (const row of rows) {\n insert.run(...row);\n }\n })();\n } finally {\n db.close();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"LocalPodProvisioningService.js","sourceRoot":"","sources":["../../src/provision/LocalPodProvisioningService.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad } from '@rdfjs/types';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { quadToRow } from '../storage/quint/serialization';\nimport { getSqliteRuntime, type SqliteDatabase } from '../storage/SqliteRuntime';\nimport type { AuthMode } from '../authorization/AuthMode';\nimport { buildPodAuthorizationResources } from '../authorization/PodAuthorizationResources';\nimport { RdfQuadIndex } from '../storage/rdf/RdfQuadIndex';\n\nconst RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\nconst LDP = 'http://www.w3.org/ns/ldp#';\nconst DCT = 'http://purl.org/dc/terms/';\nconst MA = 'http://www.w3.org/ns/ma-ont#';\nconst PIM = 'http://www.w3.org/ns/pim/space#';\nconst FOAF = 'http://xmlns.com/foaf/0.1/';\nconst SOLID = 'http://www.w3.org/ns/solid/terms#';\n\nconst { literal, namedNode, quad } = DataFactory;\n\nexport interface LocalPodProvisioningInput {\n podName: string;\n webId?: string;\n initialResources?: Record<string, string>;\n}\n\nexport interface LocalPodProvisioningResult {\n podUrl: string;\n accountId: string;\n podId: string;\n}\n\nexport interface LocalPodProvisioningServiceOptions {\n baseUrl: string;\n rootDir: string;\n sparqlEndpoint: string;\n identityDbUrl: string;\n rdfIndexPath?: string;\n oidcIssuer?: string;\n authMode?: AuthMode | string;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction stripSqlitePrefix(value: string, label: string): string {\n if (value.startsWith('sqlite:')) {\n return value.slice('sqlite:'.length);\n }\n if (value === ':memory:') {\n return value;\n }\n if (/^[a-z][a-z0-9+.-]*:/iu.test(value)) {\n throw new Error(`${label} must be a sqlite URL for local Pod provisioning: ${value}`);\n }\n return value;\n}\n\nfunction stableUuid(input: string): string {\n const hex = createHash('sha256').update(input).digest('hex').slice(0, 32);\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n `4${hex.slice(13, 16)}`,\n `${((Number.parseInt(hex.slice(16, 18), 16) & 0x3f) | 0x80).toString(16).padStart(2, '0')}${hex.slice(18, 20)}`,\n hex.slice(20, 32),\n ].join('-');\n}\n\nfunction inferIssuerFromWebId(webId: string | undefined): string | undefined {\n if (!webId) {\n return undefined;\n }\n try {\n const url = new URL(webId);\n return `${url.origin}/`;\n } catch {\n return undefined;\n }\n}\n\nfunction buildWebIdFromIssuer(oidcIssuer: string | undefined, podName: string): string | undefined {\n if (!oidcIssuer) {\n return undefined;\n }\n return new URL(`${encodeURIComponent(podName)}/profile/card#me`, ensureTrailingSlash(oidcIssuer)).toString();\n}\n\nfunction createQuintsTable(db: SqliteDatabase): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT,\n PRIMARY KEY (graph, subject, predicate, object)\n );\n\n CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph);\n CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate);\n CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object);\n CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph);\n CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject);\n CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject);\n `);\n}\n\nfunction createInternalKvTable(db: SqliteDatabase): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS internal_kv (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n `);\n}\n\nfunction meta(resource: string): string {\n return `meta:${resource}`;\n}\n\nfunction iri(base: string, relative: string): string {\n return new URL(relative, base).toString();\n}\n\nexport class LocalPodProvisioningService {\n private readonly logger = getLoggerFor(this);\n private readonly baseUrl: string;\n private readonly rootDir: string;\n private readonly sparqlDbPath: string;\n private readonly identityDbPath: string;\n private readonly rdfIndexPath?: string;\n private readonly oidcIssuer?: string;\n private readonly authMode?: AuthMode | string;\n private readonly sqliteRuntime = getSqliteRuntime();\n\n public constructor(options: LocalPodProvisioningServiceOptions) {\n this.baseUrl = ensureTrailingSlash(options.baseUrl);\n this.rootDir = options.rootDir;\n this.sparqlDbPath = stripSqlitePrefix(options.sparqlEndpoint, 'sparqlEndpoint');\n this.identityDbPath = stripSqlitePrefix(options.identityDbUrl, 'identityDbUrl');\n this.rdfIndexPath = options.rdfIndexPath;\n this.oidcIssuer = options.oidcIssuer ? ensureTrailingSlash(options.oidcIssuer) : undefined;\n this.authMode = options.authMode;\n }\n\n public async createPod(input: LocalPodProvisioningInput): Promise<LocalPodProvisioningResult> {\n const podUrl = ensureTrailingSlash(new URL(`${encodeURIComponent(input.podName)}/`, this.baseUrl).toString());\n const webId = input.webId ?? buildWebIdFromIssuer(this.oidcIssuer, input.podName) ?? `${podUrl}profile/card#me`;\n const oidcIssuer = this.oidcIssuer ?? inferIssuerFromWebId(webId) ?? this.baseUrl;\n const accountId = stableUuid(`account:${podUrl}:${webId}`);\n const podId = stableUuid(`pod:${podUrl}:${webId}`);\n const ownerId = stableUuid(`owner:${podId}:${webId}`);\n const webIdLinkId = stableUuid(`webIdLink:${accountId}:${webId}`);\n\n await this.createPodFiles(input.podName, input.initialResources);\n const quads = this.buildPodQuads({ podUrl, webId, oidcIssuer });\n this.writeQuints(quads);\n this.writeRdfIndex(quads);\n this.writeIdentityIndexes({ accountId, podId, ownerId, webIdLinkId, podUrl, webId });\n\n this.logger.info(`Provisioned local pod ${podUrl} for ${webId}`);\n return { podUrl, accountId, podId };\n }\n\n private async createPodFiles(podName: string, initialResources?: Record<string, string>): Promise<void> {\n const podPath = path.join(this.rootDir, podName);\n await fs.mkdir(path.join(podPath, 'profile'), { recursive: true });\n\n if (!initialResources) {\n return;\n }\n\n for (const [filename, content] of Object.entries(initialResources)) {\n const normalized = path.normalize(filename);\n if (normalized.startsWith('..') || path.isAbsolute(normalized)) {\n throw new Error(`Invalid initial resource path: ${filename}`);\n }\n const filePath = path.join(podPath, normalized);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, 'utf8');\n }\n }\n\n private writeQuints(quads: Quad[]): void {\n const db = this.sqliteRuntime.openDatabase(this.sparqlDbPath);\n try {\n createQuintsTable(db);\n const rows = quads.map((entry) => {\n const row = quadToRow(entry);\n return [row.graph, row.subject, row.predicate, row.object, row.vector] as const;\n });\n const insert = db.prepare(`\n INSERT OR IGNORE INTO quints (graph, subject, predicate, object, vector)\n VALUES (?, ?, ?, ?, ?)\n `);\n\n db.transaction(() => {\n for (const row of rows) {\n insert.run(...row);\n }\n })();\n } finally {\n db.close();\n }\n }\n\n private writeRdfIndex(quads: Quad[]): void {\n if (!this.rdfIndexPath) {\n return;\n }\n\n const index = new RdfQuadIndex({ path: this.rdfIndexPath });\n try {\n index.open();\n index.multiPut(quads);\n } finally {\n index.close();\n }\n }\n\n private buildPodQuads({ podUrl, webId, oidcIssuer }: { podUrl: string; webId: string; oidcIssuer: string }): Quad[] {\n const now = new Date().toISOString();\n const root = this.baseUrl;\n const profileUrl = iri(podUrl, 'profile/');\n const cardUrl = iri(podUrl, 'profile/card');\n const authorizationResources = buildPodAuthorizationResources({\n authMode: this.authMode,\n podUrl,\n cardUrl,\n webId,\n stableId: stableUuid,\n iri,\n });\n const rootGraph = namedNode(root);\n const podGraph = namedNode(podUrl);\n const profileGraph = namedNode(profileUrl);\n const cardGraph = namedNode(cardUrl);\n const out: Quad[] = [];\n\n const add = (graph: string, subject: string, predicate: string, object: string): void => {\n out.push(quad(namedNode(subject), namedNode(predicate), namedNode(object), namedNode(graph)));\n };\n const addLiteral = (graph: string, subject: string, predicate: string, value: string): void => {\n out.push(quad(namedNode(subject), namedNode(predicate), literal(value), namedNode(graph)));\n };\n const addDate = (graph: string, subject: string): void => {\n out.push(quad(namedNode(subject), namedNode(`${DCT}modified`), literal(now, namedNode('http://www.w3.org/2001/XMLSchema#dateTime')), namedNode(graph)));\n };\n const addContainerMeta = (resource: string, storage = false): void => {\n const graph = meta(resource);\n addDate(graph, resource);\n add(graph, resource, `${RDF}type`, `${LDP}Resource`);\n add(graph, resource, `${RDF}type`, `${LDP}Container`);\n add(graph, resource, `${RDF}type`, `${LDP}BasicContainer`);\n if (storage) {\n add(graph, resource, `${RDF}type`, `${PIM}Storage`);\n }\n addLiteral(graph, resource, `${MA}format`, 'internal/quads');\n };\n const addDocumentMeta = (resource: string): void => {\n const graph = meta(resource);\n addDate(graph, resource);\n add(graph, resource, `${RDF}type`, `${LDP}Resource`);\n };\n\n out.push(quad(namedNode(root), namedNode(`${LDP}contains`), namedNode(podUrl), rootGraph));\n out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(authorizationResources.rootResourceUrl), podGraph));\n out.push(quad(namedNode(podUrl), namedNode(`${LDP}contains`), namedNode(profileUrl), podGraph));\n out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(cardUrl), profileGraph));\n out.push(quad(namedNode(profileUrl), namedNode(`${LDP}contains`), namedNode(authorizationResources.cardResourceUrl), profileGraph));\n\n addContainerMeta(root);\n addContainerMeta(podUrl, true);\n addContainerMeta(profileUrl);\n addDocumentMeta(authorizationResources.rootResourceUrl);\n addDocumentMeta(cardUrl);\n addDocumentMeta(authorizationResources.cardResourceUrl);\n\n out.push(quad(namedNode(cardUrl), namedNode(`${RDF}type`), namedNode(`${FOAF}PersonalProfileDocument`), cardGraph));\n out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}maker`), namedNode(webId), cardGraph));\n out.push(quad(namedNode(cardUrl), namedNode(`${FOAF}primaryTopic`), namedNode(webId), cardGraph));\n out.push(quad(namedNode(webId), namedNode(`${RDF}type`), namedNode(`${FOAF}Person`), cardGraph));\n out.push(quad(namedNode(webId), namedNode(`${SOLID}oidcIssuer`), namedNode(oidcIssuer), cardGraph));\n\n out.push(...authorizationResources.quads);\n\n return out;\n }\n\n private writeIdentityIndexes(input: {\n accountId: string;\n podId: string;\n ownerId: string;\n webIdLinkId: string;\n podUrl: string;\n webId: string;\n }): void {\n const db = this.sqliteRuntime.openDatabase(this.identityDbPath);\n try {\n createInternalKvTable(db);\n const account = {\n linkedLoginsCount: 1,\n id: input.accountId,\n '**pod**': {\n [input.podId]: {\n baseUrl: input.podUrl,\n accountId: input.accountId,\n id: input.podId,\n '**owner**': {\n [input.ownerId]: {\n podId: input.podId,\n webId: input.webId,\n visible: false,\n id: input.ownerId,\n },\n },\n },\n },\n '**webIdLink**': {\n [input.webIdLinkId]: {\n webId: input.webId,\n accountId: input.accountId,\n id: input.webIdLinkId,\n },\n },\n };\n\n const rows: Array<[string, string]> = [\n [`accounts/data/${input.accountId}`, JSON.stringify(account)],\n [`accounts/index/pod/${input.podId}`, JSON.stringify([input.accountId])],\n [`accounts/index/pod/baseUrl/${encodeURIComponent(input.podUrl)}`, JSON.stringify([input.accountId])],\n [`accounts/index/owner/${input.ownerId}`, JSON.stringify([input.accountId])],\n [`accounts/index/webIdLink/${input.webIdLinkId}`, JSON.stringify([input.accountId])],\n [`accounts/index/webIdLink/webId/${encodeURIComponent(input.webId)}`, JSON.stringify([input.accountId])],\n ];\n const insert = db.prepare(`\n INSERT INTO internal_kv (key, value, updated_at)\n VALUES (?, ?, datetime('now'))\n ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = datetime('now')\n `);\n\n db.transaction(() => {\n for (const row of rows) {\n insert.run(...row);\n }\n })();\n } finally {\n db.close();\n }\n }\n}\n"]}
|