@undefineds.co/xpod 0.3.16 → 0.3.18
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/dist/cli/lib/css-account.js +29 -2
- package/dist/cli/lib/css-account.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/runtime/bootstrap.js +7 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.js +7 -0
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +6 -3
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +12 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/package.json +1 -1
|
@@ -17,13 +17,38 @@ function resolveBaseUrl(url) {
|
|
|
17
17
|
const raw = url ?? process.env.CSS_BASE_URL ?? 'http://localhost:3000';
|
|
18
18
|
return raw.endsWith('/') ? raw : `${raw}/`;
|
|
19
19
|
}
|
|
20
|
+
function accountTokenHeaders(token) {
|
|
21
|
+
return {
|
|
22
|
+
Accept: 'application/json',
|
|
23
|
+
Authorization: `CSS-Account-Token ${token}`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async function fetchWebIdLinks(token, webIdUrl) {
|
|
27
|
+
if (!webIdUrl) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const res = await fetch(webIdUrl, {
|
|
32
|
+
headers: accountTokenHeaders(token),
|
|
33
|
+
});
|
|
34
|
+
if (!res.ok)
|
|
35
|
+
return {};
|
|
36
|
+
const data = (await res.json());
|
|
37
|
+
return data.webIds ?? data.webIdLinks ?? {};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
20
43
|
/**
|
|
21
44
|
* Check if the CSS server is reachable.
|
|
22
45
|
*/
|
|
23
46
|
async function checkServer(baseUrl) {
|
|
47
|
+
const base = resolveBaseUrl(baseUrl);
|
|
24
48
|
try {
|
|
25
|
-
const res = await fetch(`${
|
|
49
|
+
const res = await fetch(`${base}.well-known/openid-configuration`, {
|
|
26
50
|
headers: { Accept: 'application/json' },
|
|
51
|
+
signal: AbortSignal.timeout(5_000),
|
|
27
52
|
});
|
|
28
53
|
return res.ok;
|
|
29
54
|
}
|
|
@@ -93,13 +118,15 @@ async function getAccountData(token, baseUrl) {
|
|
|
93
118
|
if (!res.ok)
|
|
94
119
|
return null;
|
|
95
120
|
const data = (await res.json());
|
|
121
|
+
const webIds = data.webIds ?? await fetchWebIdLinks(token, data.controls?.account?.webId);
|
|
96
122
|
return {
|
|
97
123
|
controls: {
|
|
98
124
|
pod: data.controls?.account?.pod,
|
|
99
125
|
clientCredentials: data.controls?.account?.clientCredentials,
|
|
126
|
+
webId: data.controls?.account?.webId ? [data.controls.account.webId] : undefined,
|
|
100
127
|
},
|
|
101
128
|
pods: data.pods ?? {},
|
|
102
|
-
webIds
|
|
129
|
+
webIds,
|
|
103
130
|
clientCredentials: data.clientCredentials ?? {},
|
|
104
131
|
};
|
|
105
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-account.js","sourceRoot":"","sources":["../../../src/cli/lib/css-account.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CSS Account API helpers for CLI commands.\n *\n * Wraps the CSS .account/* endpoints used by login, credential management, etc.\n */\n\nexport interface AccountControls {\n pod?: string;\n clientCredentials?: string;\n webId?: string[];\n}\n\nexport interface AccountData {\n controls: AccountControls;\n pods: Record<string, string>;\n webIds: Record<string, string>;\n clientCredentials: Record<string, string>;\n}\n\nexport interface ClientCredential {\n id: string;\n secret?: string;\n label?: string;\n webId?: string;\n}\n\nfunction resolveBaseUrl(url?: string): string {\n const raw = url ?? process.env.CSS_BASE_URL ?? 'http://localhost:3000';\n return raw.endsWith('/') ? raw : `${raw}/`;\n}\n\n/**\n * Check if the CSS server is reachable.\n */\nexport async function checkServer(baseUrl?: string): Promise<boolean> {\n try {\n const res = await fetch(`${resolveBaseUrl(baseUrl)}.account/`, {\n headers: { Accept: 'application/json' },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Login with email/password, returns a CSS account token.\n */\nexport async function login(\n email: string,\n password: string,\n baseUrl?: string,\n): Promise<string | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/login/password/`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({ email, password }),\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { authorization?: string };\n return data.authorization ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch account controls (endpoints for pod/credential management).\n */\nexport async function getAccountControls(\n token: string,\n baseUrl?: string,\n): Promise<AccountControls | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return null;\n const data = (await res.json()) as {\n controls?: {\n account?: {\n pod?: string;\n clientCredentials?: string;\n webId?: string;\n };\n };\n };\n return {\n pod: data.controls?.account?.pod,\n clientCredentials: data.controls?.account?.clientCredentials,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch full account data including pods, webIds, and credentials.\n */\nexport async function getAccountData(\n token: string,\n baseUrl?: string,\n): Promise<AccountData | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return null;\n const data = (await res.json()) as {\n controls?: {\n account?: {\n pod?: string;\n clientCredentials?: string;\n webId?: string;\n };\n };\n pods?: Record<string, string>;\n webIds?: Record<string, string>;\n clientCredentials?: Record<string, string>;\n };\n return {\n controls: {\n pod: data.controls?.account?.pod,\n clientCredentials: data.controls?.account?.clientCredentials,\n },\n pods: data.pods ?? {},\n webIds: data.webIds ?? {},\n clientCredentials: data.clientCredentials ?? {},\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new pod for the account.\n */\nexport async function createPod(\n token: string,\n podEndpoint: string,\n podName: string,\n): Promise<{ podUrl: string; webId: string } | null> {\n try {\n const res = await fetch(podEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n body: JSON.stringify({ name: podName }),\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { pod?: string; webId?: string };\n if (!data.pod || !data.webId) return null;\n return { podUrl: data.pod, webId: data.webId };\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new client credential bound to a WebID.\n */\nexport async function createClientCredentials(\n token: string,\n credentialsUrl: string,\n webId: string,\n name?: string,\n): Promise<ClientCredential | null> {\n try {\n const res = await fetch(credentialsUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n body: JSON.stringify({\n name: name ?? `xpod-cli-${Date.now()}`,\n webId,\n }),\n });\n if (!res.ok) return null;\n return (await res.json()) as ClientCredential;\n } catch {\n return null;\n }\n}\n\n/**\n * List all client credentials for the account.\n */\nexport async function listClientCredentials(\n token: string,\n baseUrl?: string,\n): Promise<ClientCredential[]> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return [];\n const data = (await res.json()) as {\n controls?: {\n account?: {\n clientCredentials?: string;\n };\n };\n clientCredentials?: Record<string, string>;\n };\n\n // CSS returns clientCredentials as { [credentialUrl]: webId }\n const creds = data.clientCredentials;\n if (!creds || typeof creds !== 'object') return [];\n\n return Object.entries(creds).map(([url, webId]) => {\n // Extract credential ID from URL (last path segment)\n const id = url.split('/').filter(Boolean).pop() ?? url;\n return { id, webId: typeof webId === 'string' ? webId : undefined };\n });\n } catch {\n return [];\n }\n}\n\n/**\n * Revoke (delete) a client credential by its ID.\n */\nexport async function revokeClientCredential(\n token: string,\n credentialId: string,\n baseUrl?: string,\n): Promise<boolean> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const url = `${base}.account/client-credentials/${credentialId}/`;\n const res = await fetch(url, {\n method: 'DELETE',\n headers: {\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"css-account.js","sourceRoot":"","sources":["../../../src/cli/lib/css-account.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CSS Account API helpers for CLI commands.\n *\n * Wraps the CSS .account/* endpoints used by login, credential management, etc.\n */\n\nexport interface AccountControls {\n pod?: string;\n clientCredentials?: string;\n webId?: string[];\n}\n\nexport interface AccountData {\n controls: AccountControls;\n pods: Record<string, string>;\n webIds: Record<string, string>;\n clientCredentials: Record<string, string>;\n}\n\nexport interface ClientCredential {\n id: string;\n secret?: string;\n label?: string;\n webId?: string;\n}\n\nfunction resolveBaseUrl(url?: string): string {\n const raw = url ?? process.env.CSS_BASE_URL ?? 'http://localhost:3000';\n return raw.endsWith('/') ? raw : `${raw}/`;\n}\n\nfunction accountTokenHeaders(token: string): Record<string, string> {\n return {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n };\n}\n\nasync function fetchWebIdLinks(token: string, webIdUrl?: string): Promise<Record<string, string>> {\n if (!webIdUrl) {\n return {};\n }\n\n try {\n const res = await fetch(webIdUrl, {\n headers: accountTokenHeaders(token),\n });\n if (!res.ok) return {};\n const data = (await res.json()) as {\n webIds?: Record<string, string>;\n webIdLinks?: Record<string, string>;\n };\n return data.webIds ?? data.webIdLinks ?? {};\n } catch {\n return {};\n }\n}\n\n/**\n * Check if the CSS server is reachable.\n */\nexport async function checkServer(baseUrl?: string): Promise<boolean> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.well-known/openid-configuration`, {\n headers: { Accept: 'application/json' },\n signal: AbortSignal.timeout(5_000),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Login with email/password, returns a CSS account token.\n */\nexport async function login(\n email: string,\n password: string,\n baseUrl?: string,\n): Promise<string | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/login/password/`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({ email, password }),\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { authorization?: string };\n return data.authorization ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch account controls (endpoints for pod/credential management).\n */\nexport async function getAccountControls(\n token: string,\n baseUrl?: string,\n): Promise<AccountControls | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return null;\n const data = (await res.json()) as {\n controls?: {\n account?: {\n pod?: string;\n clientCredentials?: string;\n webId?: string;\n };\n };\n };\n return {\n pod: data.controls?.account?.pod,\n clientCredentials: data.controls?.account?.clientCredentials,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch full account data including pods, webIds, and credentials.\n */\nexport async function getAccountData(\n token: string,\n baseUrl?: string,\n): Promise<AccountData | null> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return null;\n const data = (await res.json()) as {\n controls?: {\n account?: {\n pod?: string;\n clientCredentials?: string;\n webId?: string;\n };\n };\n pods?: Record<string, string>;\n webIds?: Record<string, string>;\n clientCredentials?: Record<string, string>;\n };\n const webIds = data.webIds ?? await fetchWebIdLinks(token, data.controls?.account?.webId);\n return {\n controls: {\n pod: data.controls?.account?.pod,\n clientCredentials: data.controls?.account?.clientCredentials,\n webId: data.controls?.account?.webId ? [ data.controls.account.webId ] : undefined,\n },\n pods: data.pods ?? {},\n webIds,\n clientCredentials: data.clientCredentials ?? {},\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new pod for the account.\n */\nexport async function createPod(\n token: string,\n podEndpoint: string,\n podName: string,\n): Promise<{ podUrl: string; webId: string } | null> {\n try {\n const res = await fetch(podEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n body: JSON.stringify({ name: podName }),\n });\n if (!res.ok) return null;\n const data = (await res.json()) as { pod?: string; webId?: string };\n if (!data.pod || !data.webId) return null;\n return { podUrl: data.pod, webId: data.webId };\n } catch {\n return null;\n }\n}\n\n/**\n * Create a new client credential bound to a WebID.\n */\nexport async function createClientCredentials(\n token: string,\n credentialsUrl: string,\n webId: string,\n name?: string,\n): Promise<ClientCredential | null> {\n try {\n const res = await fetch(credentialsUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n body: JSON.stringify({\n name: name ?? `xpod-cli-${Date.now()}`,\n webId,\n }),\n });\n if (!res.ok) return null;\n return (await res.json()) as ClientCredential;\n } catch {\n return null;\n }\n}\n\n/**\n * List all client credentials for the account.\n */\nexport async function listClientCredentials(\n token: string,\n baseUrl?: string,\n): Promise<ClientCredential[]> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const res = await fetch(`${base}.account/`, {\n headers: {\n Accept: 'application/json',\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n if (!res.ok) return [];\n const data = (await res.json()) as {\n controls?: {\n account?: {\n clientCredentials?: string;\n };\n };\n clientCredentials?: Record<string, string>;\n };\n\n // CSS returns clientCredentials as { [credentialUrl]: webId }\n const creds = data.clientCredentials;\n if (!creds || typeof creds !== 'object') return [];\n\n return Object.entries(creds).map(([url, webId]) => {\n // Extract credential ID from URL (last path segment)\n const id = url.split('/').filter(Boolean).pop() ?? url;\n return { id, webId: typeof webId === 'string' ? webId : undefined };\n });\n } catch {\n return [];\n }\n}\n\n/**\n * Revoke (delete) a client credential by its ID.\n */\nexport async function revokeClientCredential(\n token: string,\n credentialId: string,\n baseUrl?: string,\n): Promise<boolean> {\n const base = resolveBaseUrl(baseUrl);\n try {\n const url = `${base}.account/client-credentials/${credentialId}/`;\n const res = await fetch(url, {\n method: 'DELETE',\n headers: {\n Authorization: `CSS-Account-Token ${token}`,\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -50,7 +50,6 @@ import { PodRoutingHttpHandler } from './http/PodRoutingHttpHandler';
|
|
|
50
50
|
import { ReactAppViewHandler } from './identity/ReactAppViewHandler';
|
|
51
51
|
import { SqliteQuintStore } from './storage/quint/SqliteQuintStore';
|
|
52
52
|
import { PgQuintStore } from './storage/quint/PgQuintStore';
|
|
53
|
-
import { BaseQuintStore } from './storage/quint/BaseQuintStore';
|
|
54
53
|
import { QuintStore } from './storage/quint/types';
|
|
55
54
|
import { RdfQuadIndex } from './storage/rdf/RdfQuadIndex';
|
|
56
55
|
import { RdfSparqlAdapter } from './storage/rdf/RdfSparqlAdapter';
|
|
@@ -91,4 +90,4 @@ export type { EntitlementProvider, AccountEntitlement } from './quota/Entitlemen
|
|
|
91
90
|
export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
|
|
92
91
|
export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
|
|
93
92
|
export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
|
|
94
|
-
export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore,
|
|
93
|
+
export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, ValidatingIdentityProviderHttpHandler, PostgresKeyValueStorage, RedisKeyValueStorage, SqliteKeyValueStorage, DrizzleQuotaService, NoopQuotaService, HttpEntitlementProvider, NoopEntitlementProvider, PerAccountQuotaStrategy, TencentDnsProvider, EdgeNodeDnsCoordinator, Dns01CertificateProvisioner, SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager, FrpTunnelManager, EdgeNodeHealthProbeService, EdgeNodeAgent, EdgeNodeCertificateService, AcmeCertificateManager, EdgeNodeModeDetector, ClusterIdentifierStrategy, UsageTrackingStore, CenterNodeRegistrationService, PodRoutingHttpHandler, ReactAppViewHandler, QuintStore, SqliteQuintStore, PgQuintStore, RdfTermDictionary, RdfQuadIndex, RdfSparqlAdapter, ShadowRdfQuintStore, SolidRdfEngine, SolidRdfSparqlEngine, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, ScopedPickWebIdHandler, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionCodeCodec, LocalPodProvisioningService, AuthModeSelector, };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.QuintStore = exports.ReactAppViewHandler = exports.PodRoutingHttpHandler = exports.CenterNodeRegistrationService = exports.UsageTrackingStore = exports.ClusterIdentifierStrategy = exports.EdgeNodeModeDetector = exports.AcmeCertificateManager = exports.EdgeNodeCertificateService = exports.EdgeNodeAgent = exports.EdgeNodeHealthProbeService = exports.FrpTunnelManager = exports.NoopEdgeNodeTunnelManager = exports.SimpleEdgeNodeTunnelManager = exports.Dns01CertificateProvisioner = exports.EdgeNodeDnsCoordinator = exports.TencentDnsProvider = exports.PerAccountQuotaStrategy = exports.NoopEntitlementProvider = exports.HttpEntitlementProvider = exports.NoopQuotaService = exports.DrizzleQuotaService = exports.SqliteKeyValueStorage = exports.RedisKeyValueStorage = exports.PostgresKeyValueStorage = exports.ValidatingIdentityProviderHttpHandler = exports.DrizzleIndexedStorage = exports.ReservedSuffixIdentifierGenerator = exports.TerminalHttpHandler = exports.EdgeNodeCertificateHttpHandler = exports.TracingHandler = exports.RouterHttpRoute = exports.RouterHttpHandler = exports.EdgeNodeProxyHttpHandler = exports.EdgeNodeDirectDebugHttpHandler = exports.ClusterWebSocketConfigurator = exports.ClusterIngressRouter = exports.QuotaAdminHttpHandler = exports.SubgraphSparqlHttpHandler = exports.QuintstoreSparqlEngine = exports.QuadstoreSparqlEngine = exports.SubgraphQueryEngine = exports.SparqlUpdateResourceStore = exports.ConfigurableLoggerFactory = exports.MixDataAccessor = exports.QuintStoreSparqlDataAccessor = exports.QuadstoreSparqlDataAccessor = exports.MinioDataAccessor = exports.RepresentationPartialConvertingStore = exports.AppStaticAssetHandler = void 0;
|
|
4
|
-
exports.AuthModeSelector = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.ScopedPickWebIdHandler = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.SolidRdfSparqlEngine = exports.SolidRdfEngine = exports.ShadowRdfQuintStore = exports.RdfSparqlAdapter = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.
|
|
4
|
+
exports.AuthModeSelector = exports.LocalPodProvisioningService = exports.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = exports.ScopedPickWebIdHandler = exports.LoopbackClientIdAdapterFactory = exports.AutoDetectIdentityProviderHandler = exports.AutoDetectOidcHandler = exports.DisabledIdentityProviderHandler = exports.DisabledOidcHandler = exports.SubdomainPodIdentifierStrategy = exports.MultiDomainIdentifierStrategy = exports.SubdomainService = exports.LocalTunnelProvider = exports.CloudflareTunnelProvider = exports.CredentialReaderImpl = exports.CredentialReader = exports.EmbeddingServiceImpl = exports.EmbeddingService = exports.ProviderRegistryImpl = exports.ProviderRegistry = exports.VectorHttpHandler = exports.PostgresVectorStore = exports.SqliteVectorStore = exports.VectorStore = exports.SolidRdfSparqlEngine = exports.SolidRdfEngine = exports.ShadowRdfQuintStore = exports.RdfSparqlAdapter = exports.RdfQuadIndex = exports.RdfTermDictionary = exports.PgQuintStore = exports.SqliteQuintStore = void 0;
|
|
5
5
|
require("./runtime/configure-drizzle-solid");
|
|
6
6
|
const RepresentationPartialConvertingStore_1 = require("./storage/RepresentationPartialConvertingStore");
|
|
7
7
|
Object.defineProperty(exports, "RepresentationPartialConvertingStore", { enumerable: true, get: function () { return RepresentationPartialConvertingStore_1.RepresentationPartialConvertingStore; } });
|
|
@@ -99,8 +99,6 @@ const SqliteQuintStore_1 = require("./storage/quint/SqliteQuintStore");
|
|
|
99
99
|
Object.defineProperty(exports, "SqliteQuintStore", { enumerable: true, get: function () { return SqliteQuintStore_1.SqliteQuintStore; } });
|
|
100
100
|
const PgQuintStore_1 = require("./storage/quint/PgQuintStore");
|
|
101
101
|
Object.defineProperty(exports, "PgQuintStore", { enumerable: true, get: function () { return PgQuintStore_1.PgQuintStore; } });
|
|
102
|
-
const BaseQuintStore_1 = require("./storage/quint/BaseQuintStore");
|
|
103
|
-
Object.defineProperty(exports, "BaseQuintStore", { enumerable: true, get: function () { return BaseQuintStore_1.BaseQuintStore; } });
|
|
104
102
|
const types_1 = require("./storage/quint/types");
|
|
105
103
|
Object.defineProperty(exports, "QuintStore", { enumerable: true, get: function () { return types_1.QuintStore; } });
|
|
106
104
|
const RdfQuadIndex_1 = require("./storage/rdf/RdfQuadIndex");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import './runtime/configure-drizzle-solid';\nimport { RepresentationPartialConvertingStore } from './storage/RepresentationPartialConvertingStore';\nimport { MinioDataAccessor } from './storage/accessors/MinioDataAccessor';\nimport { QuadstoreSparqlDataAccessor } from './storage/accessors/QuadstoreSparqlDataAccessor';\nimport { QuintStoreSparqlDataAccessor } from './storage/accessors/QuintStoreSparqlDataAccessor';\nimport { MixDataAccessor } from './storage/accessors/MixDataAccessor';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type { SparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type {\n RdfIndexStats,\n RdfIndexSpaceObject,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfPatternQuery,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfShadowBackfillOptions,\n RdfShadowBackfillResult,\n RdfShadowDiff,\n RdfShadowScanResult,\n RdfSourceInput,\n} from './storage/rdf/types';\nexport type { RdfSparqlCompileResult } from './storage/rdf/RdfSparqlAdapter';\nexport type { ShadowRdfQuintStoreOptions } from './storage/rdf/ShadowRdfQuintStore';\nexport type {\n SolidRdfSparqlEngineOptions,\n SolidRdfSparqlFallback,\n} from './storage/rdf/SolidRdfSparqlEngine';\nimport { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';\nimport { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';\nimport { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';\nimport { ClusterIngressRouter } from './http/ClusterIngressRouter';\nimport { ClusterWebSocketConfigurator } from './http/ClusterWebSocketConfigurator';\nimport { EdgeNodeDirectDebugHttpHandler } from './http/EdgeNodeDirectDebugHttpHandler';\nimport { EdgeNodeProxyHttpHandler } from './http/EdgeNodeProxyHttpHandler';\nimport { RouterHttpHandler } from './http/RouterHttpHandler';\nimport { RouterHttpRoute } from './http/RouterHttpRoute';\nimport { TracingHandler } from './http/TracingHandler';\nimport { TerminalHttpHandler } from './http/terminal/TerminalHttpHandler';\nimport { EdgeNodeCertificateHttpHandler } from './http/admin/EdgeNodeCertificateHttpHandler';\nimport { ReservedSuffixIdentifierGenerator } from './pods/ReservedSuffixIdentifierGenerator';\nimport { DrizzleIndexedStorage } from './identity/drizzle/DrizzleIndexedStorage';\nimport { ValidatingIdentityProviderHttpHandler } from './identity/ValidatingIdentityProviderHttpHandler';\nimport { PostgresKeyValueStorage } from './storage/keyvalue/PostgresKeyValueStorage';\nimport { RedisKeyValueStorage } from './storage/keyvalue/RedisKeyValueStorage';\nimport { SqliteKeyValueStorage } from './storage/keyvalue/SqliteKeyValueStorage';\nimport { DrizzleQuotaService } from './quota/DrizzleQuotaService';\nimport { NoopQuotaService } from './quota/NoopQuotaService';\nimport { HttpEntitlementProvider, NoopEntitlementProvider } from './quota/EntitlementProvider';\nimport { PerAccountQuotaStrategy } from './storage/quota/PerAccountQuotaStrategy';\nimport { TencentDnsProvider } from './dns/tencent/TencentDnsProvider';\nimport { EdgeNodeDnsCoordinator } from './edge/EdgeNodeDnsCoordinator';\nimport { Dns01CertificateProvisioner } from './edge/Dns01CertificateProvisioner';\nimport { SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager } from './edge/EdgeNodeTunnelManager';\nimport { FrpTunnelManager } from './edge/FrpTunnelManager';\nimport { AcmeCertificateManager } from './edge/acme/AcmeCertificateManager';\nimport { EdgeNodeHealthProbeService } from './edge/EdgeNodeHealthProbeService';\nimport { EdgeNodeAgent } from './edge/EdgeNodeAgent';\nimport { EdgeNodeCertificateService } from './service/EdgeNodeCertificateService';\nimport { createBandwidthThrottleTransform } from './util/stream/BandwidthThrottleTransform';\nimport { UsageTrackingStore } from './storage/quota/UsageTrackingStore';\nimport { EdgeNodeModeDetector } from './edge/EdgeNodeModeDetector';\nimport { ClusterIdentifierStrategy } from './util/identifiers/ClusterIdentifierStrategy';\nimport { CenterNodeRegistrationService } from './identity/CenterNodeRegistrationService';\nimport { PodRoutingHttpHandler } from './http/PodRoutingHttpHandler';\nimport { ReactAppViewHandler } from './identity/ReactAppViewHandler';\nimport { SqliteQuintStore } from './storage/quint/SqliteQuintStore';\nimport { PgQuintStore } from './storage/quint/PgQuintStore';\nimport { BaseQuintStore } from './storage/quint/BaseQuintStore';\nimport { QuintStore } from './storage/quint/types';\nimport { RdfQuadIndex } from './storage/rdf/RdfQuadIndex';\nimport { RdfSparqlAdapter } from './storage/rdf/RdfSparqlAdapter';\nimport { RdfTermDictionary } from './storage/rdf/RdfTermDictionary';\nimport { ShadowRdfQuintStore } from './storage/rdf/ShadowRdfQuintStore';\nimport { SolidRdfEngine } from './storage/rdf/SolidRdfEngine';\nimport { SolidRdfSparqlEngine } from './storage/rdf/SolidRdfSparqlEngine';\nimport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\n// Vector components\nimport { SqliteVectorStore, PostgresVectorStore } from './storage/vector/index';\nimport { VectorHttpHandler } from './http/vector/VectorHttpHandler';\nimport { ProviderRegistry } from './ai/service/ProviderRegistry';\nimport { ProviderRegistryImpl } from './ai/service/ProviderRegistryImpl';\nimport { EmbeddingService } from './ai/service/EmbeddingService';\nimport { EmbeddingServiceImpl } from './ai/service/EmbeddingServiceImpl';\nimport { CredentialReader } from './ai/service/CredentialReader';\nimport { CredentialReaderImpl } from './ai/service/CredentialReaderImpl';\nimport { VectorStore } from './storage/vector/VectorStore';\n// Tunnel and Subdomain components\nimport { CloudflareTunnelProvider } from './tunnel/CloudflareTunnelProvider';\nimport { LocalTunnelProvider } from './tunnel/LocalTunnelProvider';\nimport { SubdomainService } from './subdomain/SubdomainService';\nimport { UrlAwareRedisLocker } from './storage/locking/UrlAwareRedisLocker';\n// IdP/SP separation components\nimport { MultiDomainIdentifierStrategy } from './util/identifiers/MultiDomainIdentifierStrategy';\nimport { SubdomainPodIdentifierStrategy } from './util/identifiers/SubdomainPodIdentifierStrategy';\nimport { DisabledOidcHandler } from './identity/oidc/DisabledOidcHandler';\nimport { DisabledIdentityProviderHandler } from './identity/oidc/DisabledIdentityProviderHandler';\nimport { AutoDetectOidcHandler } from './identity/oidc/AutoDetectOidcHandler';\nimport { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIdentityProviderHandler';\nimport { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';\nimport { ScopedPickWebIdHandler } from './identity/oidc/ScopedPickWebIdHandler';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\nimport { LocalPodProvisioningService } from './provision/LocalPodProvisioningService';\n// Authorization components\nimport { AuthModeSelector } from './authorization/AuthModeSelector';\nexport type {\n DnsProvider,\n ListDnsRecordsInput,\n ListableDnsProvider,\n DeleteDnsRecordInput,\n DnsRecordSummary,\n UpsertDnsRecordInput,\n} from './dns/DnsProvider';\nexport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\nexport type { EdgeNodeTunnelManager } from './edge/interfaces/EdgeNodeTunnelManager';\nexport type { QuotaService, AccountQuota } from './quota/QuotaService';\nexport type { EntitlementProvider, AccountEntitlement } from './quota/EntitlementProvider';\n// Tunnel and Subdomain types\nexport type {\n TunnelProvider,\n TunnelConfig,\n TunnelSetupOptions,\n TunnelStatus,\n} from './tunnel/TunnelProvider';\nexport type {\n SubdomainRegistration,\n ConnectivityResult,\n SubdomainServiceOptions,\n} from './subdomain/SubdomainService';\n// Export the new AppStaticAssetHandler\nexport { AppStaticAssetHandler } from './http/AppStaticAssetHandler';\n\nexport { \n RepresentationPartialConvertingStore,\n MinioDataAccessor, \n QuadstoreSparqlDataAccessor,\n QuintStoreSparqlDataAccessor,\n MixDataAccessor,\n ConfigurableLoggerFactory,\n SparqlUpdateResourceStore,\n SubgraphQueryEngine,\n QuadstoreSparqlEngine,\n QuintstoreSparqlEngine,\n SubgraphSparqlHttpHandler,\n QuotaAdminHttpHandler,\n ClusterIngressRouter,\n ClusterWebSocketConfigurator,\n EdgeNodeDirectDebugHttpHandler,\n EdgeNodeProxyHttpHandler,\n RouterHttpHandler,\n RouterHttpRoute,\n TracingHandler,\n EdgeNodeCertificateHttpHandler,\n TerminalHttpHandler,\n ReservedSuffixIdentifierGenerator,\n DrizzleIndexedStorage,\n ValidatingIdentityProviderHttpHandler,\n PostgresKeyValueStorage,\n RedisKeyValueStorage,\n SqliteKeyValueStorage,\n DrizzleQuotaService,\n NoopQuotaService,\n HttpEntitlementProvider,\n NoopEntitlementProvider,\n PerAccountQuotaStrategy,\n TencentDnsProvider,\n EdgeNodeDnsCoordinator,\n Dns01CertificateProvisioner,\n SimpleEdgeNodeTunnelManager,\n NoopEdgeNodeTunnelManager,\n FrpTunnelManager,\n EdgeNodeHealthProbeService,\n EdgeNodeAgent,\n EdgeNodeCertificateService,\n AcmeCertificateManager,\n EdgeNodeModeDetector,\n ClusterIdentifierStrategy,\n UsageTrackingStore,\n CenterNodeRegistrationService,\n PodRoutingHttpHandler,\n ReactAppViewHandler,\n // Quint exports\n QuintStore,\n SqliteQuintStore,\n PgQuintStore,\n BaseQuintStore,\n // RDF engine exports\n RdfTermDictionary,\n RdfQuadIndex,\n RdfSparqlAdapter,\n ShadowRdfQuintStore,\n SolidRdfEngine,\n SolidRdfSparqlEngine,\n // Vector exports\n VectorStore,\n SqliteVectorStore,\n PostgresVectorStore,\n VectorHttpHandler,\n // Embedding exports\n ProviderRegistry,\n ProviderRegistryImpl,\n EmbeddingService,\n EmbeddingServiceImpl,\n CredentialReader,\n CredentialReaderImpl,\n // Tunnel and Subdomain exports\n CloudflareTunnelProvider,\n LocalTunnelProvider,\n SubdomainService,\n // IdP/SP separation exports\n MultiDomainIdentifierStrategy,\n SubdomainPodIdentifierStrategy,\n DisabledOidcHandler,\n DisabledIdentityProviderHandler,\n AutoDetectOidcHandler,\n AutoDetectIdentityProviderHandler,\n LoopbackClientIdAdapterFactory,\n ScopedPickWebIdHandler,\n UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\n LocalPodProvisioningService,\n // Authorization exports\n AuthModeSelector,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import './runtime/configure-drizzle-solid';\nimport { RepresentationPartialConvertingStore } from './storage/RepresentationPartialConvertingStore';\nimport { MinioDataAccessor } from './storage/accessors/MinioDataAccessor';\nimport { QuadstoreSparqlDataAccessor } from './storage/accessors/QuadstoreSparqlDataAccessor';\nimport { QuintStoreSparqlDataAccessor } from './storage/accessors/QuintStoreSparqlDataAccessor';\nimport { MixDataAccessor } from './storage/accessors/MixDataAccessor';\nimport { ConfigurableLoggerFactory } from './logging/ConfigurableLoggerFactory';\nimport { SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type { SparqlEngine } from './storage/sparql/SubgraphQueryEngine';\nexport type {\n RdfIndexStats,\n RdfIndexSpaceObject,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfPatternQuery,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfShadowBackfillOptions,\n RdfShadowBackfillResult,\n RdfShadowDiff,\n RdfShadowScanResult,\n RdfSourceInput,\n} from './storage/rdf/types';\nexport type { RdfSparqlCompileResult } from './storage/rdf/RdfSparqlAdapter';\nexport type { ShadowRdfQuintStoreOptions } from './storage/rdf/ShadowRdfQuintStore';\nexport type {\n SolidRdfSparqlEngineOptions,\n SolidRdfSparqlFallback,\n} from './storage/rdf/SolidRdfSparqlEngine';\nimport { SubgraphSparqlHttpHandler } from './http/SubgraphSparqlHttpHandler';\nimport { QuotaAdminHttpHandler } from './http/quota/QuotaAdminHttpHandler';\nimport { SparqlUpdateResourceStore } from './storage/SparqlUpdateResourceStore';\nimport { ClusterIngressRouter } from './http/ClusterIngressRouter';\nimport { ClusterWebSocketConfigurator } from './http/ClusterWebSocketConfigurator';\nimport { EdgeNodeDirectDebugHttpHandler } from './http/EdgeNodeDirectDebugHttpHandler';\nimport { EdgeNodeProxyHttpHandler } from './http/EdgeNodeProxyHttpHandler';\nimport { RouterHttpHandler } from './http/RouterHttpHandler';\nimport { RouterHttpRoute } from './http/RouterHttpRoute';\nimport { TracingHandler } from './http/TracingHandler';\nimport { TerminalHttpHandler } from './http/terminal/TerminalHttpHandler';\nimport { EdgeNodeCertificateHttpHandler } from './http/admin/EdgeNodeCertificateHttpHandler';\nimport { ReservedSuffixIdentifierGenerator } from './pods/ReservedSuffixIdentifierGenerator';\nimport { DrizzleIndexedStorage } from './identity/drizzle/DrizzleIndexedStorage';\nimport { ValidatingIdentityProviderHttpHandler } from './identity/ValidatingIdentityProviderHttpHandler';\nimport { PostgresKeyValueStorage } from './storage/keyvalue/PostgresKeyValueStorage';\nimport { RedisKeyValueStorage } from './storage/keyvalue/RedisKeyValueStorage';\nimport { SqliteKeyValueStorage } from './storage/keyvalue/SqliteKeyValueStorage';\nimport { DrizzleQuotaService } from './quota/DrizzleQuotaService';\nimport { NoopQuotaService } from './quota/NoopQuotaService';\nimport { HttpEntitlementProvider, NoopEntitlementProvider } from './quota/EntitlementProvider';\nimport { PerAccountQuotaStrategy } from './storage/quota/PerAccountQuotaStrategy';\nimport { TencentDnsProvider } from './dns/tencent/TencentDnsProvider';\nimport { EdgeNodeDnsCoordinator } from './edge/EdgeNodeDnsCoordinator';\nimport { Dns01CertificateProvisioner } from './edge/Dns01CertificateProvisioner';\nimport { SimpleEdgeNodeTunnelManager, NoopEdgeNodeTunnelManager } from './edge/EdgeNodeTunnelManager';\nimport { FrpTunnelManager } from './edge/FrpTunnelManager';\nimport { AcmeCertificateManager } from './edge/acme/AcmeCertificateManager';\nimport { EdgeNodeHealthProbeService } from './edge/EdgeNodeHealthProbeService';\nimport { EdgeNodeAgent } from './edge/EdgeNodeAgent';\nimport { EdgeNodeCertificateService } from './service/EdgeNodeCertificateService';\nimport { createBandwidthThrottleTransform } from './util/stream/BandwidthThrottleTransform';\nimport { UsageTrackingStore } from './storage/quota/UsageTrackingStore';\nimport { EdgeNodeModeDetector } from './edge/EdgeNodeModeDetector';\nimport { ClusterIdentifierStrategy } from './util/identifiers/ClusterIdentifierStrategy';\nimport { CenterNodeRegistrationService } from './identity/CenterNodeRegistrationService';\nimport { PodRoutingHttpHandler } from './http/PodRoutingHttpHandler';\nimport { ReactAppViewHandler } from './identity/ReactAppViewHandler';\nimport { SqliteQuintStore } from './storage/quint/SqliteQuintStore';\nimport { PgQuintStore } from './storage/quint/PgQuintStore';\nimport { QuintStore } from './storage/quint/types';\nimport { RdfQuadIndex } from './storage/rdf/RdfQuadIndex';\nimport { RdfSparqlAdapter } from './storage/rdf/RdfSparqlAdapter';\nimport { RdfTermDictionary } from './storage/rdf/RdfTermDictionary';\nimport { ShadowRdfQuintStore } from './storage/rdf/ShadowRdfQuintStore';\nimport { SolidRdfEngine } from './storage/rdf/SolidRdfEngine';\nimport { SolidRdfSparqlEngine } from './storage/rdf/SolidRdfSparqlEngine';\nimport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\n// Vector components\nimport { SqliteVectorStore, PostgresVectorStore } from './storage/vector/index';\nimport { VectorHttpHandler } from './http/vector/VectorHttpHandler';\nimport { ProviderRegistry } from './ai/service/ProviderRegistry';\nimport { ProviderRegistryImpl } from './ai/service/ProviderRegistryImpl';\nimport { EmbeddingService } from './ai/service/EmbeddingService';\nimport { EmbeddingServiceImpl } from './ai/service/EmbeddingServiceImpl';\nimport { CredentialReader } from './ai/service/CredentialReader';\nimport { CredentialReaderImpl } from './ai/service/CredentialReaderImpl';\nimport { VectorStore } from './storage/vector/VectorStore';\n// Tunnel and Subdomain components\nimport { CloudflareTunnelProvider } from './tunnel/CloudflareTunnelProvider';\nimport { LocalTunnelProvider } from './tunnel/LocalTunnelProvider';\nimport { SubdomainService } from './subdomain/SubdomainService';\nimport { UrlAwareRedisLocker } from './storage/locking/UrlAwareRedisLocker';\n// IdP/SP separation components\nimport { MultiDomainIdentifierStrategy } from './util/identifiers/MultiDomainIdentifierStrategy';\nimport { SubdomainPodIdentifierStrategy } from './util/identifiers/SubdomainPodIdentifierStrategy';\nimport { DisabledOidcHandler } from './identity/oidc/DisabledOidcHandler';\nimport { DisabledIdentityProviderHandler } from './identity/oidc/DisabledIdentityProviderHandler';\nimport { AutoDetectOidcHandler } from './identity/oidc/AutoDetectOidcHandler';\nimport { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIdentityProviderHandler';\nimport { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';\nimport { ScopedPickWebIdHandler } from './identity/oidc/ScopedPickWebIdHandler';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\nimport { LocalPodProvisioningService } from './provision/LocalPodProvisioningService';\n// Authorization components\nimport { AuthModeSelector } from './authorization/AuthModeSelector';\nexport type {\n DnsProvider,\n ListDnsRecordsInput,\n ListableDnsProvider,\n DeleteDnsRecordInput,\n DnsRecordSummary,\n UpsertDnsRecordInput,\n} from './dns/DnsProvider';\nexport type { EdgeNodeCertificateProvisioner } from './edge/EdgeNodeCertificateProvisioner';\nexport type { EdgeNodeTunnelManager } from './edge/interfaces/EdgeNodeTunnelManager';\nexport type { QuotaService, AccountQuota } from './quota/QuotaService';\nexport type { EntitlementProvider, AccountEntitlement } from './quota/EntitlementProvider';\n// Tunnel and Subdomain types\nexport type {\n TunnelProvider,\n TunnelConfig,\n TunnelSetupOptions,\n TunnelStatus,\n} from './tunnel/TunnelProvider';\nexport type {\n SubdomainRegistration,\n ConnectivityResult,\n SubdomainServiceOptions,\n} from './subdomain/SubdomainService';\n// Export the new AppStaticAssetHandler\nexport { AppStaticAssetHandler } from './http/AppStaticAssetHandler';\n\nexport { \n RepresentationPartialConvertingStore,\n MinioDataAccessor, \n QuadstoreSparqlDataAccessor,\n QuintStoreSparqlDataAccessor,\n MixDataAccessor,\n ConfigurableLoggerFactory,\n SparqlUpdateResourceStore,\n SubgraphQueryEngine,\n QuadstoreSparqlEngine,\n QuintstoreSparqlEngine,\n SubgraphSparqlHttpHandler,\n QuotaAdminHttpHandler,\n ClusterIngressRouter,\n ClusterWebSocketConfigurator,\n EdgeNodeDirectDebugHttpHandler,\n EdgeNodeProxyHttpHandler,\n RouterHttpHandler,\n RouterHttpRoute,\n TracingHandler,\n EdgeNodeCertificateHttpHandler,\n TerminalHttpHandler,\n ReservedSuffixIdentifierGenerator,\n DrizzleIndexedStorage,\n ValidatingIdentityProviderHttpHandler,\n PostgresKeyValueStorage,\n RedisKeyValueStorage,\n SqliteKeyValueStorage,\n DrizzleQuotaService,\n NoopQuotaService,\n HttpEntitlementProvider,\n NoopEntitlementProvider,\n PerAccountQuotaStrategy,\n TencentDnsProvider,\n EdgeNodeDnsCoordinator,\n Dns01CertificateProvisioner,\n SimpleEdgeNodeTunnelManager,\n NoopEdgeNodeTunnelManager,\n FrpTunnelManager,\n EdgeNodeHealthProbeService,\n EdgeNodeAgent,\n EdgeNodeCertificateService,\n AcmeCertificateManager,\n EdgeNodeModeDetector,\n ClusterIdentifierStrategy,\n UsageTrackingStore,\n CenterNodeRegistrationService,\n PodRoutingHttpHandler,\n ReactAppViewHandler,\n // Quint exports\n QuintStore,\n SqliteQuintStore,\n PgQuintStore,\n // RDF engine exports\n RdfTermDictionary,\n RdfQuadIndex,\n RdfSparqlAdapter,\n ShadowRdfQuintStore,\n SolidRdfEngine,\n SolidRdfSparqlEngine,\n // Vector exports\n VectorStore,\n SqliteVectorStore,\n PostgresVectorStore,\n VectorHttpHandler,\n // Embedding exports\n ProviderRegistry,\n ProviderRegistryImpl,\n EmbeddingService,\n EmbeddingServiceImpl,\n CredentialReader,\n CredentialReaderImpl,\n // Tunnel and Subdomain exports\n CloudflareTunnelProvider,\n LocalTunnelProvider,\n SubdomainService,\n // IdP/SP separation exports\n MultiDomainIdentifierStrategy,\n SubdomainPodIdentifierStrategy,\n DisabledOidcHandler,\n DisabledIdentityProviderHandler,\n AutoDetectOidcHandler,\n AutoDetectIdentityProviderHandler,\n LoopbackClientIdAdapterFactory,\n ScopedPickWebIdHandler,\n UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\n LocalPodProvisioningService,\n // Authorization exports\n AuthModeSelector,\n};\n"]}
|
|
@@ -10,6 +10,7 @@ exports.createCssRuntimeConfig = createCssRuntimeConfig;
|
|
|
10
10
|
exports.initRuntimeLogger = initRuntimeLogger;
|
|
11
11
|
const global_logger_factory_1 = require("global-logger-factory");
|
|
12
12
|
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const node_url_1 = require("node:url");
|
|
13
14
|
const ConfigurableLoggerFactory_1 = require("../logging/ConfigurableLoggerFactory");
|
|
14
15
|
const package_root_1 = require("./package-root");
|
|
15
16
|
const oidc_issuer_1 = require("./oidc-issuer");
|
|
@@ -39,6 +40,9 @@ function toWindowsFileUrl(filePath) {
|
|
|
39
40
|
function toConfigImportSpecifier(fromFilePath, toFilePath) {
|
|
40
41
|
const normalizedFromPath = normalizeWindowsAbsolutePath(fromFilePath);
|
|
41
42
|
const normalizedToPath = normalizeWindowsAbsolutePath(toFilePath);
|
|
43
|
+
if (!isWindowsAbsolutePath(normalizedFromPath) && (pathNeedsEscapedFileUrl(normalizedFromPath) || pathNeedsEscapedFileUrl(normalizedToPath))) {
|
|
44
|
+
return (0, node_url_1.pathToFileURL)(normalizedToPath).href;
|
|
45
|
+
}
|
|
42
46
|
const useWindowsPaths = isWindowsAbsolutePath(normalizedFromPath) || isWindowsAbsolutePath(normalizedToPath);
|
|
43
47
|
const pathApi = useWindowsPaths ? node_path_1.default.win32 : node_path_1.default.posix;
|
|
44
48
|
const fromDirectoryPath = pathApi.dirname(useWindowsPaths ? normalizedFromPath : fromFilePath);
|
|
@@ -52,6 +56,9 @@ function toConfigImportSpecifier(fromFilePath, toFilePath) {
|
|
|
52
56
|
}
|
|
53
57
|
return `./${relativePath}`;
|
|
54
58
|
}
|
|
59
|
+
function pathNeedsEscapedFileUrl(filePath) {
|
|
60
|
+
return /\s/.test(filePath);
|
|
61
|
+
}
|
|
55
62
|
function withDefinedEntries(entries) {
|
|
56
63
|
const result = {};
|
|
57
64
|
for (const [key, value] of entries) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { setGlobalLoggerFactory } from 'global-logger-factory';\nimport path from 'node:path';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport { oidcTokenEndpoint, resolveExternalOidcIssuer } from './oidc-issuer';\nimport { nodeRuntimePlatform } from './platform/node/NodeRuntimePlatform';\nimport type { RuntimePlatform } from './platform/types';\nimport type { XpodRuntimeOptions, XpodRuntimePorts, XpodRuntimeSockets } from './runtime-types';\n\nexport interface RuntimeBootstrapState {\n id: string;\n host: RuntimeHost;\n mode: 'local' | 'cloud';\n transport: 'socket' | 'port';\n bindHost: string;\n runtimeRoot: string;\n rootFilePath: string;\n sparqlEndpoint: string;\n rdfIndexPath: string;\n identityDbUrl: string;\n usageDbUrl: string;\n cssAuthMode: 'acp' | 'acl' | 'allow-all';\n apiOpen: boolean;\n logLevel: string;\n baseUrl: string;\n envFilePath?: string;\n ports: XpodRuntimePorts;\n sockets: XpodRuntimeSockets;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction normalizeWindowsAbsolutePath(filePath: string): string {\n return filePath.replace(/^[\\\\/]+(?=[A-Za-z]:[\\\\/])/, '');\n}\n\nfunction isWindowsAbsolutePath(filePath: string): boolean {\n return /^[A-Za-z]:[\\\\/]/.test(normalizeWindowsAbsolutePath(filePath));\n}\n\nfunction getWindowsDriveRoot(filePath: string): string | undefined {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath);\n return isWindowsAbsolutePath(normalizedPath) ? path.win32.parse(normalizedPath).root.toLowerCase() : undefined;\n}\n\nfunction arePathsOnDifferentWindowsDrives(firstPath: string, secondPath: string): boolean {\n const firstRoot = getWindowsDriveRoot(firstPath);\n const secondRoot = getWindowsDriveRoot(secondPath);\n return Boolean(firstRoot && secondRoot && firstRoot !== secondRoot);\n}\n\nfunction toWindowsFileUrl(filePath: string): string {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath).replace(/\\\\/g, '/');\n return new URL(`file:///${normalizedPath}`).href;\n}\n\nfunction toConfigImportSpecifier(fromFilePath: string, toFilePath: string): string {\n const normalizedFromPath = normalizeWindowsAbsolutePath(fromFilePath);\n const normalizedToPath = normalizeWindowsAbsolutePath(toFilePath);\n const useWindowsPaths = isWindowsAbsolutePath(normalizedFromPath) || isWindowsAbsolutePath(normalizedToPath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const fromDirectoryPath = pathApi.dirname(useWindowsPaths ? normalizedFromPath : fromFilePath);\n const targetPath = useWindowsPaths ? normalizedToPath : toFilePath;\n\n if (useWindowsPaths && arePathsOnDifferentWindowsDrives(fromDirectoryPath, targetPath)) {\n return toWindowsFileUrl(targetPath);\n }\n\n const relativePath = pathApi.relative(fromDirectoryPath, targetPath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction withDefinedEntries(entries: Array<[string, string | number | boolean | undefined]>): Record<string, string | number | boolean> {\n const result: Record<string, string | number | boolean> = {};\n for (const [key, value] of entries) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction normalizeDatabaseUrl(\n value: string,\n platform: Pick<RuntimePlatform, 'resolvePath'> = nodeRuntimePlatform,\n): string {\n if (\n value.startsWith('sqlite:') ||\n value.startsWith('postgres://') ||\n value.startsWith('postgresql://') ||\n value.startsWith('mysql://')\n ) {\n return value;\n }\n return `sqlite:${platform.resolvePath(value)}`;\n}\n\nexport async function resolveRuntimeBootstrap(\n id: string,\n options: XpodRuntimeOptions,\n host: RuntimeHost,\n platform: RuntimePlatform = nodeRuntimePlatform,\n): Promise<RuntimeBootstrapState> {\n const mode = options.mode ?? 'local';\n const transport = host.resolveTransport(options.transport);\n const bindHost = options.bindHost ?? '127.0.0.1';\n const runtimeRoot = platform.resolvePath(options.runtimeRoot ?? platform.joinPath(platform.cwd(), '.test-data', 'xpod-runtime', id));\n const rootFilePath = platform.resolvePath(options.rootFilePath ?? platform.joinPath(runtimeRoot, 'data'));\n const sparqlEndpoint = normalizeDatabaseUrl(options.sparqlEndpoint ?? platform.joinPath(runtimeRoot, 'quadstore.sqlite'), platform);\n const rdfIndexPath = platform.resolvePath(options.rdfIndexPath ?? platform.joinPath(runtimeRoot, 'rdf-index.sqlite'));\n const identityDbUrl = normalizeDatabaseUrl(options.identityDbUrl ?? platform.joinPath(runtimeRoot, 'identity.sqlite'), platform);\n const usageDbUrl = normalizeDatabaseUrl(options.usageDbUrl ?? platform.joinPath(runtimeRoot, 'usage.sqlite'), platform);\n const cssAuthMode = options.authMode ?? (options.open ? 'allow-all' : 'acp');\n const apiOpen = options.apiOpen ?? options.open ?? false;\n const logLevel = options.logLevel ?? platform.getEnv('CSS_LOGGING_LEVEL') ?? 'warn';\n\n platform.ensureDir(runtimeRoot);\n platform.ensureDir(rootFilePath);\n\n const socketsRoot = platform.joinPath(runtimeRoot, 'sockets');\n if (transport === 'socket') {\n platform.ensureDir(socketsRoot);\n }\n const ports: XpodRuntimePorts = transport === 'port'\n ? await host.allocatePorts({\n gatewayPort: options.gatewayPort,\n cssPort: options.cssPort,\n apiPort: options.apiPort,\n basePort: 5600,\n })\n : {};\n const sockets: XpodRuntimeSockets = {};\n\n if (transport === 'socket') {\n sockets.gateway = platform.resolvePath(options.gatewaySocketPath ?? platform.joinPath(socketsRoot, 'gateway.sock'));\n sockets.css = platform.resolvePath(options.cssSocketPath ?? platform.joinPath(socketsRoot, 'css.sock'));\n sockets.api = platform.resolvePath(options.apiSocketPath ?? platform.joinPath(socketsRoot, 'api.sock'));\n }\n\n const baseUrl = ensureTrailingSlash(\n options.baseUrl ?? (transport === 'socket'\n ? 'http://localhost'\n : `http://${bindHost}:${ports.gateway}`),\n );\n\n return {\n id,\n host,\n mode,\n transport,\n bindHost,\n runtimeRoot,\n rootFilePath,\n sparqlEndpoint,\n rdfIndexPath,\n identityDbUrl,\n usageDbUrl,\n cssAuthMode,\n apiOpen,\n logLevel,\n baseUrl,\n envFilePath: options.envFile ? platform.resolvePath(options.envFile) : undefined,\n ports,\n sockets,\n };\n}\n\nexport function buildRuntimeEnv(\n state: RuntimeBootstrapState,\n options: XpodRuntimeOptions,\n envFromFile: Record<string, string | undefined> = {},\n): Record<string, string | undefined> {\n const mergedEnv = {\n ...envFromFile,\n ...options.env,\n };\n const externalOidcIssuer = resolveExternalOidcIssuer(mergedEnv);\n\n return {\n ...mergedEnv,\n XPOD_ENV_PATH: state.envFilePath,\n XPOD_EDITION: state.mode,\n CSS_BASE_URL: state.baseUrl,\n CSS_TOKEN_ENDPOINT: externalOidcIssuer\n ? oidcTokenEndpoint(externalOidcIssuer)\n : `${state.baseUrl}.oidc/token`,\n CSS_ROOT_FILE_PATH: state.rootFilePath,\n CSS_SPARQL_ENDPOINT: state.sparqlEndpoint,\n SPARQL_ENDPOINT: state.sparqlEndpoint,\n CSS_IDENTITY_DB_URL: state.identityDbUrl,\n DATABASE_URL: state.identityDbUrl,\n CSS_PORT: state.ports.css !== undefined ? String(state.ports.css) : undefined,\n API_PORT: state.ports.api !== undefined ? String(state.ports.api) : undefined,\n API_HOST: state.bindHost,\n API_SOCKET_PATH: state.sockets.api,\n XPOD_MAIN_PORT: state.ports.gateway !== undefined ? String(state.ports.gateway) : undefined,\n CORS_ORIGINS: new URL(state.baseUrl).origin,\n CSS_LOGGING_LEVEL: state.logLevel,\n };\n}\n\nexport function buildRuntimeShorthand(\n runtimeEnv: Record<string, string | undefined>,\n options: XpodRuntimeOptions,\n state: RuntimeBootstrapState,\n baseEnv: Record<string, string | undefined> = nodeRuntimePlatform.baseEnv,\n): Record<string, string | number | boolean> {\n const envValue = (key: string): string | undefined => runtimeEnv[key] ?? baseEnv[key];\n const externalOidcIssuer = resolveExternalOidcIssuer({\n oidcIssuer: envValue('oidcIssuer'),\n });\n\n return {\n ...withDefinedEntries([\n ['baseStorageDomain', envValue('CSS_BASE_STORAGE_DOMAIN')],\n ['minioAccessKey', envValue('CSS_MINIO_ACCESS_KEY')],\n ['minioSecretKey', envValue('CSS_MINIO_SECRET_KEY')],\n ['minioEndpoint', envValue('CSS_MINIO_ENDPOINT')],\n ['minioBucketName', envValue('CSS_MINIO_BUCKET_NAME')],\n ['redisClient', envValue('CSS_REDIS_CLIENT')],\n ['redisUsername', envValue('CSS_REDIS_USERNAME')],\n ['redisPassword', envValue('CSS_REDIS_PASSWORD')],\n ['emailConfigHost', envValue('CSS_EMAIL_CONFIG_HOST') ?? ''],\n ['emailConfigPort', envValue('CSS_EMAIL_CONFIG_PORT') ?? '587'],\n ['emailConfigAuthUser', envValue('CSS_EMAIL_CONFIG_AUTH_USER') ?? ''],\n ['emailConfigAuthPass', envValue('CSS_EMAIL_CONFIG_AUTH_PASS') ?? ''],\n ['oidcIssuer', externalOidcIssuer],\n ['allowedHosts', envValue('CSS_ALLOWED_HOSTS')],\n ['nodeId', envValue('XPOD_NODE_ID')],\n ['nodeToken', envValue('XPOD_NODE_TOKEN')],\n ['serviceToken', envValue('XPOD_SERVICE_TOKEN')],\n ]),\n baseUrl: state.baseUrl,\n rootFilePath: state.rootFilePath,\n sparqlEndpoint: state.sparqlEndpoint,\n rdfIndexPath: state.rdfIndexPath,\n identityDbUrl: state.identityDbUrl,\n usageDbUrl: state.usageDbUrl,\n logLevel: state.logLevel,\n authMode: state.cssAuthMode,\n edition: state.mode === 'cloud' ? 'server' : 'local',\n edgeNodesEnabled: options.edgeNodesEnabled ?? false,\n centerRegistrationEnabled: options.centerRegistrationEnabled ?? false,\n ...(options.shorthand ?? {}),\n };\n}\n\nexport function createCssRuntimeConfig(\n state: RuntimeBootstrapState,\n open: boolean,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'writeTextFile'> = nodeRuntimePlatform,\n): string {\n const configPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, `config/${state.mode}.json`));\n if (!open) {\n return configPath;\n }\n\n const runtimeRoot = normalizeWindowsAbsolutePath(state.runtimeRoot);\n const runtimeConfigPath = arePathsOnDifferentWindowsDrives(runtimeRoot, configPath)\n ? (() => {\n const runtimeConfigDir = normalizeWindowsAbsolutePath(platform.joinPath(\n platform.dirname(configPath),\n '..',\n '.xpod-runtime',\n state.id,\n ));\n platform.ensureDir(runtimeConfigDir);\n return normalizeWindowsAbsolutePath(platform.joinPath(runtimeConfigDir, 'css-runtime.config.json'));\n })()\n : normalizeWindowsAbsolutePath(platform.joinPath(runtimeRoot, 'css-runtime.config.json'));\n const openConfigPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, 'config/runtime-open.json'));\n platform.writeTextFile(runtimeConfigPath, JSON.stringify({\n '@context': [\n 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld',\n 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld',\n ],\n import: [\n toConfigImportSpecifier(runtimeConfigPath, configPath),\n toConfigImportSpecifier(runtimeConfigPath, openConfigPath),\n ],\n }, null, 2));\n\n return runtimeConfigPath;\n}\n\nexport function initRuntimeLogger(\n level: string,\n platform: Pick<RuntimePlatform, 'cwd' | 'joinPath'> = nodeRuntimePlatform,\n): void {\n const loggerFactory = new ConfigurableLoggerFactory(level, {\n fileName: platform.joinPath(platform.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { setGlobalLoggerFactory } from 'global-logger-factory';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { ConfigurableLoggerFactory } from '../logging/ConfigurableLoggerFactory';\nimport { PACKAGE_ROOT } from './package-root';\nimport type { RuntimeHost } from './host/types';\nimport { oidcTokenEndpoint, resolveExternalOidcIssuer } from './oidc-issuer';\nimport { nodeRuntimePlatform } from './platform/node/NodeRuntimePlatform';\nimport type { RuntimePlatform } from './platform/types';\nimport type { XpodRuntimeOptions, XpodRuntimePorts, XpodRuntimeSockets } from './runtime-types';\n\nexport interface RuntimeBootstrapState {\n id: string;\n host: RuntimeHost;\n mode: 'local' | 'cloud';\n transport: 'socket' | 'port';\n bindHost: string;\n runtimeRoot: string;\n rootFilePath: string;\n sparqlEndpoint: string;\n rdfIndexPath: string;\n identityDbUrl: string;\n usageDbUrl: string;\n cssAuthMode: 'acp' | 'acl' | 'allow-all';\n apiOpen: boolean;\n logLevel: string;\n baseUrl: string;\n envFilePath?: string;\n ports: XpodRuntimePorts;\n sockets: XpodRuntimeSockets;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith('/') ? url : `${url}/`;\n}\n\nfunction normalizeWindowsAbsolutePath(filePath: string): string {\n return filePath.replace(/^[\\\\/]+(?=[A-Za-z]:[\\\\/])/, '');\n}\n\nfunction isWindowsAbsolutePath(filePath: string): boolean {\n return /^[A-Za-z]:[\\\\/]/.test(normalizeWindowsAbsolutePath(filePath));\n}\n\nfunction getWindowsDriveRoot(filePath: string): string | undefined {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath);\n return isWindowsAbsolutePath(normalizedPath) ? path.win32.parse(normalizedPath).root.toLowerCase() : undefined;\n}\n\nfunction arePathsOnDifferentWindowsDrives(firstPath: string, secondPath: string): boolean {\n const firstRoot = getWindowsDriveRoot(firstPath);\n const secondRoot = getWindowsDriveRoot(secondPath);\n return Boolean(firstRoot && secondRoot && firstRoot !== secondRoot);\n}\n\nfunction toWindowsFileUrl(filePath: string): string {\n const normalizedPath = normalizeWindowsAbsolutePath(filePath).replace(/\\\\/g, '/');\n return new URL(`file:///${normalizedPath}`).href;\n}\n\nfunction toConfigImportSpecifier(fromFilePath: string, toFilePath: string): string {\n const normalizedFromPath = normalizeWindowsAbsolutePath(fromFilePath);\n const normalizedToPath = normalizeWindowsAbsolutePath(toFilePath);\n if (!isWindowsAbsolutePath(normalizedFromPath) && (pathNeedsEscapedFileUrl(normalizedFromPath) || pathNeedsEscapedFileUrl(normalizedToPath))) {\n return pathToFileURL(normalizedToPath).href;\n }\n\n const useWindowsPaths = isWindowsAbsolutePath(normalizedFromPath) || isWindowsAbsolutePath(normalizedToPath);\n const pathApi = useWindowsPaths ? path.win32 : path.posix;\n const fromDirectoryPath = pathApi.dirname(useWindowsPaths ? normalizedFromPath : fromFilePath);\n const targetPath = useWindowsPaths ? normalizedToPath : toFilePath;\n\n if (useWindowsPaths && arePathsOnDifferentWindowsDrives(fromDirectoryPath, targetPath)) {\n return toWindowsFileUrl(targetPath);\n }\n\n const relativePath = pathApi.relative(fromDirectoryPath, targetPath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nfunction withDefinedEntries(entries: Array<[string, string | number | boolean | undefined]>): Record<string, string | number | boolean> {\n const result: Record<string, string | number | boolean> = {};\n for (const [key, value] of entries) {\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction normalizeDatabaseUrl(\n value: string,\n platform: Pick<RuntimePlatform, 'resolvePath'> = nodeRuntimePlatform,\n): string {\n if (\n value.startsWith('sqlite:') ||\n value.startsWith('postgres://') ||\n value.startsWith('postgresql://') ||\n value.startsWith('mysql://')\n ) {\n return value;\n }\n return `sqlite:${platform.resolvePath(value)}`;\n}\n\nexport async function resolveRuntimeBootstrap(\n id: string,\n options: XpodRuntimeOptions,\n host: RuntimeHost,\n platform: RuntimePlatform = nodeRuntimePlatform,\n): Promise<RuntimeBootstrapState> {\n const mode = options.mode ?? 'local';\n const transport = host.resolveTransport(options.transport);\n const bindHost = options.bindHost ?? '127.0.0.1';\n const runtimeRoot = platform.resolvePath(options.runtimeRoot ?? platform.joinPath(platform.cwd(), '.test-data', 'xpod-runtime', id));\n const rootFilePath = platform.resolvePath(options.rootFilePath ?? platform.joinPath(runtimeRoot, 'data'));\n const sparqlEndpoint = normalizeDatabaseUrl(options.sparqlEndpoint ?? platform.joinPath(runtimeRoot, 'quadstore.sqlite'), platform);\n const rdfIndexPath = platform.resolvePath(options.rdfIndexPath ?? platform.joinPath(runtimeRoot, 'rdf-index.sqlite'));\n const identityDbUrl = normalizeDatabaseUrl(options.identityDbUrl ?? platform.joinPath(runtimeRoot, 'identity.sqlite'), platform);\n const usageDbUrl = normalizeDatabaseUrl(options.usageDbUrl ?? platform.joinPath(runtimeRoot, 'usage.sqlite'), platform);\n const cssAuthMode = options.authMode ?? (options.open ? 'allow-all' : 'acp');\n const apiOpen = options.apiOpen ?? options.open ?? false;\n const logLevel = options.logLevel ?? platform.getEnv('CSS_LOGGING_LEVEL') ?? 'warn';\n\n platform.ensureDir(runtimeRoot);\n platform.ensureDir(rootFilePath);\n\n const socketsRoot = platform.joinPath(runtimeRoot, 'sockets');\n if (transport === 'socket') {\n platform.ensureDir(socketsRoot);\n }\n const ports: XpodRuntimePorts = transport === 'port'\n ? await host.allocatePorts({\n gatewayPort: options.gatewayPort,\n cssPort: options.cssPort,\n apiPort: options.apiPort,\n basePort: 5600,\n })\n : {};\n const sockets: XpodRuntimeSockets = {};\n\n if (transport === 'socket') {\n sockets.gateway = platform.resolvePath(options.gatewaySocketPath ?? platform.joinPath(socketsRoot, 'gateway.sock'));\n sockets.css = platform.resolvePath(options.cssSocketPath ?? platform.joinPath(socketsRoot, 'css.sock'));\n sockets.api = platform.resolvePath(options.apiSocketPath ?? platform.joinPath(socketsRoot, 'api.sock'));\n }\n\n const baseUrl = ensureTrailingSlash(\n options.baseUrl ?? (transport === 'socket'\n ? 'http://localhost'\n : `http://${bindHost}:${ports.gateway}`),\n );\n\n return {\n id,\n host,\n mode,\n transport,\n bindHost,\n runtimeRoot,\n rootFilePath,\n sparqlEndpoint,\n rdfIndexPath,\n identityDbUrl,\n usageDbUrl,\n cssAuthMode,\n apiOpen,\n logLevel,\n baseUrl,\n envFilePath: options.envFile ? platform.resolvePath(options.envFile) : undefined,\n ports,\n sockets,\n };\n}\n\nexport function buildRuntimeEnv(\n state: RuntimeBootstrapState,\n options: XpodRuntimeOptions,\n envFromFile: Record<string, string | undefined> = {},\n): Record<string, string | undefined> {\n const mergedEnv = {\n ...envFromFile,\n ...options.env,\n };\n const externalOidcIssuer = resolveExternalOidcIssuer(mergedEnv);\n\n return {\n ...mergedEnv,\n XPOD_ENV_PATH: state.envFilePath,\n XPOD_EDITION: state.mode,\n CSS_BASE_URL: state.baseUrl,\n CSS_TOKEN_ENDPOINT: externalOidcIssuer\n ? oidcTokenEndpoint(externalOidcIssuer)\n : `${state.baseUrl}.oidc/token`,\n CSS_ROOT_FILE_PATH: state.rootFilePath,\n CSS_SPARQL_ENDPOINT: state.sparqlEndpoint,\n SPARQL_ENDPOINT: state.sparqlEndpoint,\n CSS_IDENTITY_DB_URL: state.identityDbUrl,\n DATABASE_URL: state.identityDbUrl,\n CSS_PORT: state.ports.css !== undefined ? String(state.ports.css) : undefined,\n API_PORT: state.ports.api !== undefined ? String(state.ports.api) : undefined,\n API_HOST: state.bindHost,\n API_SOCKET_PATH: state.sockets.api,\n XPOD_MAIN_PORT: state.ports.gateway !== undefined ? String(state.ports.gateway) : undefined,\n CORS_ORIGINS: new URL(state.baseUrl).origin,\n CSS_LOGGING_LEVEL: state.logLevel,\n };\n}\n\nexport function buildRuntimeShorthand(\n runtimeEnv: Record<string, string | undefined>,\n options: XpodRuntimeOptions,\n state: RuntimeBootstrapState,\n baseEnv: Record<string, string | undefined> = nodeRuntimePlatform.baseEnv,\n): Record<string, string | number | boolean> {\n const envValue = (key: string): string | undefined => runtimeEnv[key] ?? baseEnv[key];\n const externalOidcIssuer = resolveExternalOidcIssuer({\n oidcIssuer: envValue('oidcIssuer'),\n });\n\n return {\n ...withDefinedEntries([\n ['baseStorageDomain', envValue('CSS_BASE_STORAGE_DOMAIN')],\n ['minioAccessKey', envValue('CSS_MINIO_ACCESS_KEY')],\n ['minioSecretKey', envValue('CSS_MINIO_SECRET_KEY')],\n ['minioEndpoint', envValue('CSS_MINIO_ENDPOINT')],\n ['minioBucketName', envValue('CSS_MINIO_BUCKET_NAME')],\n ['redisClient', envValue('CSS_REDIS_CLIENT')],\n ['redisUsername', envValue('CSS_REDIS_USERNAME')],\n ['redisPassword', envValue('CSS_REDIS_PASSWORD')],\n ['emailConfigHost', envValue('CSS_EMAIL_CONFIG_HOST') ?? ''],\n ['emailConfigPort', envValue('CSS_EMAIL_CONFIG_PORT') ?? '587'],\n ['emailConfigAuthUser', envValue('CSS_EMAIL_CONFIG_AUTH_USER') ?? ''],\n ['emailConfigAuthPass', envValue('CSS_EMAIL_CONFIG_AUTH_PASS') ?? ''],\n ['oidcIssuer', externalOidcIssuer],\n ['allowedHosts', envValue('CSS_ALLOWED_HOSTS')],\n ['nodeId', envValue('XPOD_NODE_ID')],\n ['nodeToken', envValue('XPOD_NODE_TOKEN')],\n ['serviceToken', envValue('XPOD_SERVICE_TOKEN')],\n ]),\n baseUrl: state.baseUrl,\n rootFilePath: state.rootFilePath,\n sparqlEndpoint: state.sparqlEndpoint,\n rdfIndexPath: state.rdfIndexPath,\n identityDbUrl: state.identityDbUrl,\n usageDbUrl: state.usageDbUrl,\n logLevel: state.logLevel,\n authMode: state.cssAuthMode,\n edition: state.mode === 'cloud' ? 'server' : 'local',\n edgeNodesEnabled: options.edgeNodesEnabled ?? false,\n centerRegistrationEnabled: options.centerRegistrationEnabled ?? false,\n ...(options.shorthand ?? {}),\n };\n}\n\nexport function createCssRuntimeConfig(\n state: RuntimeBootstrapState,\n open: boolean,\n platform: Pick<RuntimePlatform, 'dirname' | 'ensureDir' | 'joinPath' | 'writeTextFile'> = nodeRuntimePlatform,\n): string {\n const configPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, `config/${state.mode}.json`));\n if (!open) {\n return configPath;\n }\n\n const runtimeRoot = normalizeWindowsAbsolutePath(state.runtimeRoot);\n const runtimeConfigPath = arePathsOnDifferentWindowsDrives(runtimeRoot, configPath)\n ? (() => {\n const runtimeConfigDir = normalizeWindowsAbsolutePath(platform.joinPath(\n platform.dirname(configPath),\n '..',\n '.xpod-runtime',\n state.id,\n ));\n platform.ensureDir(runtimeConfigDir);\n return normalizeWindowsAbsolutePath(platform.joinPath(runtimeConfigDir, 'css-runtime.config.json'));\n })()\n : normalizeWindowsAbsolutePath(platform.joinPath(runtimeRoot, 'css-runtime.config.json'));\n const openConfigPath = normalizeWindowsAbsolutePath(platform.joinPath(PACKAGE_ROOT, 'config/runtime-open.json'));\n platform.writeTextFile(runtimeConfigPath, JSON.stringify({\n '@context': [\n 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld',\n 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld',\n ],\n import: [\n toConfigImportSpecifier(runtimeConfigPath, configPath),\n toConfigImportSpecifier(runtimeConfigPath, openConfigPath),\n ],\n }, null, 2));\n\n return runtimeConfigPath;\n}\n\nexport function initRuntimeLogger(\n level: string,\n platform: Pick<RuntimePlatform, 'cwd' | 'joinPath'> = nodeRuntimePlatform,\n): void {\n const loggerFactory = new ConfigurableLoggerFactory(level, {\n fileName: platform.joinPath(platform.cwd(), 'logs/xpod-%DATE%.log'),\n showLocation: true,\n });\n setGlobalLoggerFactory(loggerFactory);\n}\n"]}
|
|
@@ -9,6 +9,7 @@ exports.buildCssArgs = buildCssArgs;
|
|
|
9
9
|
exports.buildApiChildEnv = buildApiChildEnv;
|
|
10
10
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
11
|
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const node_url_1 = require("node:url");
|
|
12
13
|
const oidc_issuer_1 = require("./oidc-issuer");
|
|
13
14
|
/**
|
|
14
15
|
* Build the environment for the CSS child process.
|
|
@@ -39,6 +40,9 @@ function isExternalOidcPollutionKey(key) {
|
|
|
39
40
|
normalized.includes('IDENTITYPROVIDERJWKSURL');
|
|
40
41
|
}
|
|
41
42
|
function toImportSpecifier(fromFilePath, toFilePath) {
|
|
43
|
+
if (pathNeedsEscapedFileUrl(fromFilePath) || pathNeedsEscapedFileUrl(toFilePath)) {
|
|
44
|
+
return (0, node_url_1.pathToFileURL)(toFilePath).href;
|
|
45
|
+
}
|
|
42
46
|
const fromDirectory = node_path_1.default.dirname(fromFilePath);
|
|
43
47
|
const relativePath = node_path_1.default.relative(fromDirectory, toFilePath).replace(/\\/g, '/');
|
|
44
48
|
if (relativePath.startsWith('./') || relativePath.startsWith('../')) {
|
|
@@ -46,6 +50,9 @@ function toImportSpecifier(fromFilePath, toFilePath) {
|
|
|
46
50
|
}
|
|
47
51
|
return `./${relativePath}`;
|
|
48
52
|
}
|
|
53
|
+
function pathNeedsEscapedFileUrl(filePath) {
|
|
54
|
+
return /\s/.test(filePath);
|
|
55
|
+
}
|
|
49
56
|
function createCssChildRuntimeConfig(options) {
|
|
50
57
|
node_fs_1.default.mkdirSync(options.runtimeRoot, { recursive: true });
|
|
51
58
|
const runtimeConfigPath = node_path_1.default.join(options.runtimeRoot, 'css-child-runtime.config.json');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-process.js","sourceRoot":"","sources":["../../src/runtime/css-process.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"css-process.js","sourceRoot":"","sources":["../../src/runtime/css-process.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { oidcTokenEndpoint } from './oidc-issuer';\n\n/**\n * Build the environment for the CSS child process.\n *\n * `oidcIssuer` is an xpod shorthand value, not a CSS CLI argument.\n * The legacy CSS child process path injects it through a generated\n * Components.js config instead of CSS_* env aliases.\n */\nexport function buildCssChildEnv(\n baseUrl: string,\n cssPort: number,\n oidcIssuer?: string,\n baseEnv: NodeJS.ProcessEnv = process.env,\n): Record<string, string> {\n const env: Record<string, string> = {\n ...baseEnv,\n CSS_PORT: cssPort.toString(),\n CSS_BASE_URL: baseUrl,\n } as Record<string, string>;\n\n for (const key of Object.keys(env)) {\n if (key === 'oidcIssuer' || isExternalOidcPollutionKey(key)) {\n delete env[key];\n }\n }\n\n return env;\n}\n\nfunction isExternalOidcPollutionKey(key: string): boolean {\n const normalized = key.toUpperCase().replace(/[^A-Z0-9]/g, '');\n return normalized.includes('OIDCISSUER') ||\n normalized.includes('IDPURL') ||\n normalized.includes('IDPJWKSURL') ||\n normalized.includes('IDENTITYPROVIDERURL') ||\n normalized.includes('IDENTITYPROVIDERJWKSURL');\n}\n\nfunction toImportSpecifier(fromFilePath: string, toFilePath: string): string {\n if (pathNeedsEscapedFileUrl(fromFilePath) || pathNeedsEscapedFileUrl(toFilePath)) {\n return pathToFileURL(toFilePath).href;\n }\n\n const fromDirectory = path.dirname(fromFilePath);\n const relativePath = path.relative(fromDirectory, toFilePath).replace(/\\\\/g, '/');\n if (relativePath.startsWith('./') || relativePath.startsWith('../')) {\n return relativePath;\n }\n return `./${relativePath}`;\n}\n\nfunction pathNeedsEscapedFileUrl(filePath: string): boolean {\n return /\\s/.test(filePath);\n}\n\nexport function createCssChildRuntimeConfig(options: {\n configPath: string\n runtimeRoot: string\n externalOidcIssuer?: string\n}): { configPath: string; cwd?: string } {\n fs.mkdirSync(options.runtimeRoot, { recursive: true });\n const runtimeConfigPath = path.join(options.runtimeRoot, 'css-child-runtime.config.json');\n fs.writeFileSync(runtimeConfigPath, JSON.stringify({\n '@context': [\n 'https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld',\n 'https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld',\n 'https://linkedsoftwaredependencies.org/bundles/npm/asynchronous-handlers/^1.0.0/components/context.jsonld',\n ],\n import: [\n toImportSpecifier(runtimeConfigPath, options.configPath),\n ],\n '@graph': [],\n }, null, 2), 'utf-8');\n\n if (options.externalOidcIssuer) {\n fs.writeFileSync(path.join(options.runtimeRoot, 'package.json'), JSON.stringify({\n private: true,\n name: 'xpod-css-runtime',\n }, null, 2), 'utf-8');\n fs.writeFileSync(path.join(options.runtimeRoot, '.community-solid-server.config.json'), JSON.stringify({\n oidcIssuer: options.externalOidcIssuer,\n }, null, 2), 'utf-8');\n }\n\n return {\n configPath: runtimeConfigPath,\n cwd: options.externalOidcIssuer ? options.runtimeRoot : undefined,\n };\n}\n\nexport function buildCssArgs(options: {\n cssBinary: string\n configPath: string\n cssModuleRoot: string\n cssPort: number\n baseUrl: string\n externalOidcIssuer?: string\n}): string[] {\n return [\n options.cssBinary,\n '-c', options.configPath,\n '-m', options.cssModuleRoot,\n '-p', options.cssPort.toString(),\n '-b', options.baseUrl,\n ];\n}\n\nexport function buildApiChildEnv(options: {\n apiPort: number\n mainPort: number\n cssPort: number\n baseUrl: string\n externalOidcIssuer?: string\n baseEnv?: NodeJS.ProcessEnv\n}): Record<string, string> {\n return {\n ...(options.baseEnv ?? process.env),\n ...(options.externalOidcIssuer ? { oidcIssuer: options.externalOidcIssuer } : {}),\n API_PORT: options.apiPort.toString(),\n XPOD_MAIN_PORT: options.mainPort.toString(),\n CSS_INTERNAL_URL: `http://localhost:${options.cssPort}`,\n CSS_BASE_URL: options.baseUrl,\n CSS_TOKEN_ENDPOINT: options.externalOidcIssuer\n ? oidcTokenEndpoint(options.externalOidcIssuer)\n : `${options.baseUrl}.oidc/token`,\n } as Record<string, string>;\n}\n"]}
|
|
@@ -112,9 +112,9 @@ class QuadstoreSparqlDataAccessor {
|
|
|
112
112
|
* Reads the metadata and stores it.
|
|
113
113
|
*/
|
|
114
114
|
async writeMetadata(identifier, metadata) {
|
|
115
|
-
const { name } = this.getRelatedNames(identifier);
|
|
115
|
+
const { name, parent } = this.getRelatedNames(identifier);
|
|
116
116
|
const metaName = this.getMetadataNode(name);
|
|
117
|
-
return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));
|
|
117
|
+
return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata, parent, name));
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
120
120
|
* Removes all graph data relevant to the given identifier.
|
|
@@ -217,9 +217,12 @@ class QuadstoreSparqlDataAccessor {
|
|
|
217
217
|
* @param metaName - Name of the metadata resource to update.
|
|
218
218
|
* @param metadata - New metadata of the resource.
|
|
219
219
|
*/
|
|
220
|
-
sparqlInsertMetadata(metaName, metadata) {
|
|
220
|
+
sparqlInsertMetadata(metaName, metadata, parent, name) {
|
|
221
221
|
// Insert new metadata and containment triple
|
|
222
222
|
const insert = [this.sparqlUpdateGraph(metaName, metadata.quads())];
|
|
223
|
+
if (parent && name) {
|
|
224
|
+
insert.push(this.sparqlUpdateGraph(parent, [quad(parent, community_server_1.LDP.terms.contains, name)]));
|
|
225
|
+
}
|
|
223
226
|
// Necessary updates: delete metadata and insert new data
|
|
224
227
|
const updates = [
|
|
225
228
|
this.sparqlUpdateDeleteAll(metaName),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuadstoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuadstoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\nimport { QuintEngine } from '../sparql/QuintEngine';\n\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\n/**\n * @deprecated Compatibility wrapper preserved for older configs.\n * Mainline xpod now persists structured RDF through QuintStore.\n */\nexport class QuadstoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly publicEndpoint: string;\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly engine: QuintEngine;\n private readonly generator: SparqlGenerator;\n\n public constructor(endpoint: string, identifierStrategy: IdentifierStrategy) {\n this.publicEndpoint = this.getPublicEndpoint(endpoint);\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new QuintEngine({ endpoint });\n }\n\n /**\n * Get the public endpoint from the given endpoint.\n */\n private getPublicEndpoint(endpoint: string): string {\n if (endpoint.startsWith('sqlite:')) {\n return endpoint;\n }\n try {\n const url = new URL(endpoint);\n const host = url.host.split(':')[0];\n return `${url.protocol}//${host}`;\n } catch {\n return endpoint;\n }\n }\n\n /**\n * Only Quad data streams are supported.\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 /**\n * Returns all triples stored for the corresponding identifier.\n * Note that this will not throw a 404 if no results were found.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n * Will throw 404 if no metadata was found.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n const stream = await this.sendSparqlConstruct(query);\n const quads: Quad[] = await arrayifyStream(stream);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n if (!isContainerIdentifier(identifier)) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n // Only triples that have a container identifier as subject are the containment triples\n const name = namedNode(identifier.path);\n const stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(identifier: ResourceIdentifier, data: Guarded<Readable>, metadata: RepresentationMetadata):\n Promise<void> {\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\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 // Not relevant since all content is triples\n metadata.removeAll(CONTENT_TYPE_TERM);\n\n return this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n }\n\n /**\n * Reads the metadata and stores it.\n */\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n const { name } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n\n return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n /**\n * Helper function to get named nodes corresponding to the identifier and its parent container.\n * In case of a root container only the name will be returned.\n */\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n // Root containers don't have a parent\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 /**\n * Creates the name for the metadata of a resource.\n *\n * @param name - Name of the (non-metadata) resource.\n */\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n /**\n * Checks if the given identifier corresponds to the names used for metadata identifiers.\n */\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n /**\n * Creates a CONSTRUCT query that returns all quads contained within a single resource.\n *\n * @param name - Name of the resource to query.\n */\n protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [ pattern ],\n where: [ this.sparqlSelectGraph(name, [ pattern ]) ],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n };\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If there are no triples we assume it's a container (so don't overwrite the main graph with containment triples).\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource.\n */\n private sparqlInsert(name: NamedNode, metadata: RepresentationMetadata, parent?: NamedNode, triples?: Quad[]):\n Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [ this.sparqlUpdateGraph(metaName, metadata.quads()) ];\n if (parent) {\n insert.push(this.sparqlUpdateGraph(parent, [ quad(parent, LDP.terms.contains, name) ]));\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: UpdateOperation[] = [\n this.sparqlUpdateDeleteAll(metaName),\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents\n if (triples) {\n // This needs to be first so it happens before the insert\n updates.unshift(this.sparqlUpdateDeleteAll(name));\n if (triples.length > 0) {\n insert.push(this.sparqlUpdateGraph(name, triples));\n }\n }\n\n return {\n updates,\n type: 'update',\n prefixes: {},\n };\n }\n\n /**\n * Creates an update query that overwrites metadata of a resource.\n *\n * @param metaName - Name of the metadata resource to update.\n * @param metadata - New metadata of the resource.\n */\n private sparqlInsertMetadata(metaName: NamedNode, metadata: RepresentationMetadata): Update {\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [ this.sparqlUpdateGraph(metaName, metadata.quads()) ];\n\n // Necessary updates: delete metadata and insert new data\n const updates: UpdateOperation[] = [\n this.sparqlUpdateDeleteAll(metaName),\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n return {\n updates,\n type: 'update',\n prefixes: {},\n };\n }\n\n /**\n * Creates a query that deletes everything related to the given name.\n *\n * @param name - Name of resource to delete.\n * @param parent - Parent of the resource to delete so the containment triple can be removed (unless root).\n */\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const update: Update = {\n updates: [\n this.sparqlUpdateDeleteAll(name),\n this.sparqlUpdateDeleteAll(this.getMetadataNode(name)),\n ],\n type: 'update',\n prefixes: {},\n };\n\n if (parent) {\n update.updates.push({\n updateType: 'delete',\n delete: [\n this.sparqlUpdateGraph(parent, [ quad(parent, LDP.terms.contains, name) ])\n ],\n });\n }\n\n return update;\n }\n\n /**\n * Helper function for creating SPARQL update queries.\n * Creates an operation for deleting all triples in a graph.\n *\n * @param name - Name of the graph to delete.\n */\n private sparqlUpdateDeleteAll(name: NamedNode): InsertDeleteOperation {\n return {\n updateType: 'deletewhere',\n delete: [\n this.sparqlUpdateGraph(\n name, [ quad(variable(`s`), variable(`p`), variable(`o`)) ]\n )\n ],\n };\n }\n\n /**\n * Helper function for creating SPARQL update queries.\n * Creates a Graph selector with the given triples.\n *\n * @param name - Name of the graph.\n * @param triples - Triples/triple patterns to select.\n */\n private sparqlUpdateGraph(name: NamedNode, triples: Quad[]): GraphQuads {\n return { type: 'graph', name, triples };\n }\n\n /**\n * Sends a SPARQL CONSTRUCT query to the endpoint and returns a stream of quads.\n *\n * @param sparqlQuery - Query to execute.\n */\n protected async sendSparqlConstruct(sparqlQuery: ConstructQuery): Promise<Guarded<Readable>> {\n const query = this.generator.stringify(sparqlQuery);\n const logger = this.logger;\n logger.verbose(`Sending SPARQL CONSTRUCT query to ${this.publicEndpoint}: ${query}`);\n try {\n await this.waitForStoreReady();\n const start = Date.now();\n const result = await this.engine.queryQuads(query);\n const end = Date.now();\n logger.verbose(`SPARQL CONSTRUCT query success. cost time: ${end - start}ms`);\n const readable = new Readable({ objectMode: true, read() {} });\n\n result.on('start', () => {\n });\n result.on(\n 'data',\n (chunk) => {\n readable.push(chunk);\n }\n );\n result.on('end', () => {\n readable.push(null);\n });\n result.on('error', (error) => {\n logger.error(`SPARQL CONSTRUCT stream error: ${error}`);\n readable.emit('error', error);\n });\n\n return guardStream(readable);\n } catch (error: unknown) {\n logger.error(`SPARQL ${query} endpoint ${this.publicEndpoint} error: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n /**\n * Sends a SPARQL update query to the stored endpoint.\n *\n * @param sparqlQuery - Query to send.\n */\n private async sendSparqlUpdate(sparqlQuery: Update): Promise<void> {\n const query = this.generator.stringify(sparqlQuery);\n this.logger.verbose(`Sending SPARQL UPDATE query to ${this.publicEndpoint}: ${query}`);\n try {\n await this.waitForStoreReady();\n const start = Date.now();\n await this.engine.queryVoid(query);\n const end = Date.now();\n this.logger.verbose(`SPARQL UPDATE query success. cost time: ${end - start}ms`);\n } catch (error: unknown) {\n this.logger.error(`SPARQL ${query} endpoint ${this.publicEndpoint} error: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n /**\n * Execute an arbitrary SPARQL UPDATE string.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`Executing SPARQL UPDATE on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n await this.engine.queryVoid(query, { baseIRI: baseIri });\n }\n\n /**\n * Execute a SPARQL SELECT query and return bindings as plain objects.\n */\n public async executeSparqlSelect(query: string): Promise<Record<string, string>[]> {\n this.logger.verbose(`Executing SPARQL SELECT on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n const bindingsStream = await this.engine.queryBindings(query);\n const results: Record<string, string>[] = [];\n const iterable = bindingsStream as unknown as AsyncIterable<Map<string, unknown>>;\n for await (const binding of iterable) {\n const row: Record<string, string> = {};\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Comunica bindings expose Map-like iteration\n for (const [ key, value ] of binding) {\n row[key] = (value as { value: string }).value;\n }\n results.push(row);\n }\n return results;\n }\n\n /**\n * Execute a SPARQL ASK query.\n */\n public async executeSparqlAsk(query: string): Promise<boolean> {\n this.logger.verbose(`Executing SPARQL ASK on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n return this.engine.queryBoolean(query);\n }\n\n /**\n * Execute a raw CONSTRUCT query string.\n */\n public async executeSparqlConstruct(query: string): Promise<Guarded<Readable>> {\n this.logger.verbose(`Executing SPARQL CONSTRUCT on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n const result = await this.engine.queryQuads(query);\n const readable = new Readable({ objectMode: true, read() {} });\n\n // Register event listeners once, outside of read() to avoid memory leak\n result.on('data', (quad): void => {\n readable.push(quad);\n });\n result.on('end', (): void => {\n readable.push(null);\n });\n result.on('error', (error): void => {\n readable.emit('error', error);\n });\n\n return guardStream(readable);\n }\n\n /**\n * Wait for the store to be ready.\n */\n private async waitForStoreReady(): Promise<void> {\n await this.engine.open();\n }\n\n\n /**\n * Closes the underlying store.\n */\n public async close(): Promise<void> {\n await this.engine.close();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"QuadstoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuadstoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\nimport { getLoggerFor } from 'global-logger-factory';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\nimport { QuintEngine } from '../sparql/QuintEngine';\n\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\n/**\n * @deprecated Compatibility wrapper preserved for older configs.\n * Mainline xpod now persists structured RDF through QuintStore.\n */\nexport class QuadstoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly publicEndpoint: string;\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly engine: QuintEngine;\n private readonly generator: SparqlGenerator;\n\n public constructor(endpoint: string, identifierStrategy: IdentifierStrategy) {\n this.publicEndpoint = this.getPublicEndpoint(endpoint);\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new QuintEngine({ endpoint });\n }\n\n /**\n * Get the public endpoint from the given endpoint.\n */\n private getPublicEndpoint(endpoint: string): string {\n if (endpoint.startsWith('sqlite:')) {\n return endpoint;\n }\n try {\n const url = new URL(endpoint);\n const host = url.host.split(':')[0];\n return `${url.protocol}//${host}`;\n } catch {\n return endpoint;\n }\n }\n\n /**\n * Only Quad data streams are supported.\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 /**\n * Returns all triples stored for the corresponding identifier.\n * Note that this will not throw a 404 if no results were found.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n * Will throw 404 if no metadata was found.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n const stream = await this.sendSparqlConstruct(query);\n const quads: Quad[] = await arrayifyStream(stream);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n if (!isContainerIdentifier(identifier)) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n // Only triples that have a container identifier as subject are the containment triples\n const name = namedNode(identifier.path);\n const stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(identifier: ResourceIdentifier, data: Guarded<Readable>, metadata: RepresentationMetadata):\n Promise<void> {\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\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 // Not relevant since all content is triples\n metadata.removeAll(CONTENT_TYPE_TERM);\n\n return this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n }\n\n /**\n * Reads the metadata and stores it.\n */\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n\n return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata, parent, name));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n /**\n * Helper function to get named nodes corresponding to the identifier and its parent container.\n * In case of a root container only the name will be returned.\n */\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n // Root containers don't have a parent\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 /**\n * Creates the name for the metadata of a resource.\n *\n * @param name - Name of the (non-metadata) resource.\n */\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n /**\n * Checks if the given identifier corresponds to the names used for metadata identifiers.\n */\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n /**\n * Creates a CONSTRUCT query that returns all quads contained within a single resource.\n *\n * @param name - Name of the resource to query.\n */\n protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [ pattern ],\n where: [ this.sparqlSelectGraph(name, [ pattern ]) ],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n };\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If there are no triples we assume it's a container (so don't overwrite the main graph with containment triples).\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource.\n */\n private sparqlInsert(name: NamedNode, metadata: RepresentationMetadata, parent?: NamedNode, triples?: Quad[]):\n Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [ this.sparqlUpdateGraph(metaName, metadata.quads()) ];\n if (parent) {\n insert.push(this.sparqlUpdateGraph(parent, [ quad(parent, LDP.terms.contains, name) ]));\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: UpdateOperation[] = [\n this.sparqlUpdateDeleteAll(metaName),\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents\n if (triples) {\n // This needs to be first so it happens before the insert\n updates.unshift(this.sparqlUpdateDeleteAll(name));\n if (triples.length > 0) {\n insert.push(this.sparqlUpdateGraph(name, triples));\n }\n }\n\n return {\n updates,\n type: 'update',\n prefixes: {},\n };\n }\n\n /**\n * Creates an update query that overwrites metadata of a resource.\n *\n * @param metaName - Name of the metadata resource to update.\n * @param metadata - New metadata of the resource.\n */\n private sparqlInsertMetadata(\n metaName: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n name?: NamedNode,\n ): Update {\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [ this.sparqlUpdateGraph(metaName, metadata.quads()) ];\n if (parent && name) {\n insert.push(this.sparqlUpdateGraph(parent, [ quad(parent, LDP.terms.contains, name) ]));\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: UpdateOperation[] = [\n this.sparqlUpdateDeleteAll(metaName),\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n return {\n updates,\n type: 'update',\n prefixes: {},\n };\n }\n\n /**\n * Creates a query that deletes everything related to the given name.\n *\n * @param name - Name of resource to delete.\n * @param parent - Parent of the resource to delete so the containment triple can be removed (unless root).\n */\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const update: Update = {\n updates: [\n this.sparqlUpdateDeleteAll(name),\n this.sparqlUpdateDeleteAll(this.getMetadataNode(name)),\n ],\n type: 'update',\n prefixes: {},\n };\n\n if (parent) {\n update.updates.push({\n updateType: 'delete',\n delete: [\n this.sparqlUpdateGraph(parent, [ quad(parent, LDP.terms.contains, name) ])\n ],\n });\n }\n\n return update;\n }\n\n /**\n * Helper function for creating SPARQL update queries.\n * Creates an operation for deleting all triples in a graph.\n *\n * @param name - Name of the graph to delete.\n */\n private sparqlUpdateDeleteAll(name: NamedNode): InsertDeleteOperation {\n return {\n updateType: 'deletewhere',\n delete: [\n this.sparqlUpdateGraph(\n name, [ quad(variable(`s`), variable(`p`), variable(`o`)) ]\n )\n ],\n };\n }\n\n /**\n * Helper function for creating SPARQL update queries.\n * Creates a Graph selector with the given triples.\n *\n * @param name - Name of the graph.\n * @param triples - Triples/triple patterns to select.\n */\n private sparqlUpdateGraph(name: NamedNode, triples: Quad[]): GraphQuads {\n return { type: 'graph', name, triples };\n }\n\n /**\n * Sends a SPARQL CONSTRUCT query to the endpoint and returns a stream of quads.\n *\n * @param sparqlQuery - Query to execute.\n */\n protected async sendSparqlConstruct(sparqlQuery: ConstructQuery): Promise<Guarded<Readable>> {\n const query = this.generator.stringify(sparqlQuery);\n const logger = this.logger;\n logger.verbose(`Sending SPARQL CONSTRUCT query to ${this.publicEndpoint}: ${query}`);\n try {\n await this.waitForStoreReady();\n const start = Date.now();\n const result = await this.engine.queryQuads(query);\n const end = Date.now();\n logger.verbose(`SPARQL CONSTRUCT query success. cost time: ${end - start}ms`);\n const readable = new Readable({ objectMode: true, read() {} });\n\n result.on('start', () => {\n });\n result.on(\n 'data',\n (chunk) => {\n readable.push(chunk);\n }\n );\n result.on('end', () => {\n readable.push(null);\n });\n result.on('error', (error) => {\n logger.error(`SPARQL CONSTRUCT stream error: ${error}`);\n readable.emit('error', error);\n });\n\n return guardStream(readable);\n } catch (error: unknown) {\n logger.error(`SPARQL ${query} endpoint ${this.publicEndpoint} error: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n /**\n * Sends a SPARQL update query to the stored endpoint.\n *\n * @param sparqlQuery - Query to send.\n */\n private async sendSparqlUpdate(sparqlQuery: Update): Promise<void> {\n const query = this.generator.stringify(sparqlQuery);\n this.logger.verbose(`Sending SPARQL UPDATE query to ${this.publicEndpoint}: ${query}`);\n try {\n await this.waitForStoreReady();\n const start = Date.now();\n await this.engine.queryVoid(query);\n const end = Date.now();\n this.logger.verbose(`SPARQL UPDATE query success. cost time: ${end - start}ms`);\n } catch (error: unknown) {\n this.logger.error(`SPARQL ${query} endpoint ${this.publicEndpoint} error: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n /**\n * Execute an arbitrary SPARQL UPDATE string.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`Executing SPARQL UPDATE on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n await this.engine.queryVoid(query, { baseIRI: baseIri });\n }\n\n /**\n * Execute a SPARQL SELECT query and return bindings as plain objects.\n */\n public async executeSparqlSelect(query: string): Promise<Record<string, string>[]> {\n this.logger.verbose(`Executing SPARQL SELECT on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n const bindingsStream = await this.engine.queryBindings(query);\n const results: Record<string, string>[] = [];\n const iterable = bindingsStream as unknown as AsyncIterable<Map<string, unknown>>;\n for await (const binding of iterable) {\n const row: Record<string, string> = {};\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Comunica bindings expose Map-like iteration\n for (const [ key, value ] of binding) {\n row[key] = (value as { value: string }).value;\n }\n results.push(row);\n }\n return results;\n }\n\n /**\n * Execute a SPARQL ASK query.\n */\n public async executeSparqlAsk(query: string): Promise<boolean> {\n this.logger.verbose(`Executing SPARQL ASK on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n return this.engine.queryBoolean(query);\n }\n\n /**\n * Execute a raw CONSTRUCT query string.\n */\n public async executeSparqlConstruct(query: string): Promise<Guarded<Readable>> {\n this.logger.verbose(`Executing SPARQL CONSTRUCT on ${this.publicEndpoint}: ${query}`);\n await this.waitForStoreReady();\n const result = await this.engine.queryQuads(query);\n const readable = new Readable({ objectMode: true, read() {} });\n\n // Register event listeners once, outside of read() to avoid memory leak\n result.on('data', (quad): void => {\n readable.push(quad);\n });\n result.on('end', (): void => {\n readable.push(null);\n });\n result.on('error', (error): void => {\n readable.emit('error', error);\n });\n\n return guardStream(readable);\n }\n\n /**\n * Wait for the store to be ready.\n */\n private async waitForStoreReady(): Promise<void> {\n await this.engine.open();\n }\n\n\n /**\n * Closes the underlying store.\n */\n public async close(): Promise<void> {\n await this.engine.close();\n }\n}\n"]}
|
|
@@ -206,9 +206,9 @@ class QuintStoreSparqlDataAccessor {
|
|
|
206
206
|
*/
|
|
207
207
|
async writeMetadata(identifier, metadata) {
|
|
208
208
|
await this.initialize();
|
|
209
|
-
const { name } = this.getRelatedNames(identifier);
|
|
209
|
+
const { name, parent } = this.getRelatedNames(identifier);
|
|
210
210
|
const metaName = this.getMetadataNode(name);
|
|
211
|
-
return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));
|
|
211
|
+
return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata, parent, name));
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
214
|
* Removes all graph data relevant to the given identifier.
|
|
@@ -336,19 +336,27 @@ class QuintStoreSparqlDataAccessor {
|
|
|
336
336
|
prefixes: {},
|
|
337
337
|
};
|
|
338
338
|
}
|
|
339
|
-
sparqlInsertMetadata(metaName, metadata) {
|
|
339
|
+
sparqlInsertMetadata(metaName, metadata, parent, name) {
|
|
340
340
|
const metaGraphs = {
|
|
341
341
|
type: 'graph',
|
|
342
342
|
name: metaName,
|
|
343
343
|
triples: metadata.quads(),
|
|
344
344
|
};
|
|
345
|
+
const insert = [metaGraphs];
|
|
346
|
+
if (parent && name) {
|
|
347
|
+
insert.push({
|
|
348
|
+
type: 'graph',
|
|
349
|
+
name: parent,
|
|
350
|
+
triples: [quad(parent, community_server_1.LDP.terms.contains, name)],
|
|
351
|
+
});
|
|
352
|
+
}
|
|
345
353
|
const deleteOp = {
|
|
346
354
|
updateType: 'deletewhere',
|
|
347
355
|
delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],
|
|
348
356
|
};
|
|
349
357
|
const insertOp = {
|
|
350
358
|
updateType: 'insert',
|
|
351
|
-
insert
|
|
359
|
+
insert,
|
|
352
360
|
};
|
|
353
361
|
return {
|
|
354
362
|
type: 'update',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuintStoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuintStoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintStoreSparqlDataAccessor - Data accessor using QuintStore\n * \n * Key features:\n * 1. Graph prefix filtering for efficient subgraph queries\n * 2. Backend-agnostic storage (SQLite, PostgreSQL, etc.)\n * 3. Future: vector similarity search\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\n\nimport type { QuintStore, Quint } from '../quint/types';\nimport { ComunicaQuintEngine } from '../sparql/ComunicaQuintEngine';\nimport type { RdfSourceInput } from '../rdf/types';\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\nexport class QuintStoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly generator: SparqlGenerator;\n private readonly baseUrl: string;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n\n public constructor(\n store: QuintStore,\n identifierStrategy: IdentifierStrategy,\n ) {\n this.store = store;\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new ComunicaQuintEngine(this.store);\n // Get baseUrl from identifierStrategy\n const strategy = identifierStrategy as unknown as { baseUrl?: string };\n this.baseUrl = strategy.baseUrl ?? '';\n this.logger.info(`QuintStoreSparqlDataAccessor initialized with identifierStrategy: ${identifierStrategy.constructor.name}, baseUrl: ${this.baseUrl || 'N/A'}`);\n }\n\n /**\n * Initialize the store (open database connection)\n */\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= this.initializeStore().finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n private async initializeStore(): Promise<void> {\n await this.store.open();\n this.initialized = true;\n this.logger.info('QuintStore initialized');\n }\n\n /**\n * Close the store\n */\n public async finalize(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.initialized) {\n await this.store.close();\n this.initialized = false;\n this.logger.info('QuintStore closed');\n }\n }\n\n /**\n * Only Quad data streams are supported.\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 /**\n * Returns all triples stored for the corresponding identifier.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n console.log(`[getMetadata] Starting for ${identifier.path}`);\n await this.initialize();\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n console.log(`[getMetadata] Sending CONSTRUCT for ${identifier.path}`);\n const stream = await this.sendSparqlConstruct(query);\n console.log(`[getMetadata] Got stream for ${identifier.path}, reading...`);\n const quads: Quad[] = await arrayifyStream(stream);\n console.log(`[getMetadata] Read ${quads.length} quads for ${identifier.path}`);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n // Only set default contentType if not already present in metadata\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\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 stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n console.log(`[writeContainer] Starting for ${identifier.path}`);\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeContainer] Sending SPARQL update for ${identifier.path}, parent: ${parent?.value || 'none'}`);\n console.log(`[writeContainer] Metadata quads: ${metadata.quads().length}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n console.log(`[writeContainer] Completed for ${identifier.path}`);\n return result;\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n console.log(`[writeDocument] Starting for ${identifier.path}`);\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeDocument] Reading stream for ${identifier.path}`);\n\n // 添加超时处理\n const timeoutMs = 5000;\n const triplesPromise = arrayifyStream<Quad>(data);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`arrayifyStream timed out after ${timeoutMs}ms`)), timeoutMs);\n });\n \n let triples: Quad[];\n try {\n triples = await Promise.race([triplesPromise, timeoutPromise]);\n console.log(`[writeDocument] Read ${triples.length} triples for ${identifier.path}`);\n } catch (e: any) {\n console.error(`[writeDocument] Failed to read stream for ${identifier.path}:`, e?.message || e);\n throw e;\n }\n \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 metadata.removeAll(CONTENT_TYPE_TERM);\n console.log(`[writeDocument] Sending SPARQL update for ${identifier.path}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n console.log(`[writeDocument] Completed for ${identifier.path}`);\n return result;\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\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.writeDocument(identifier, guardStream(Readable.from(quads)), metadata);\n return;\n }\n\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((triple): boolean => !def.equals(triple.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.replaceCompatibilityMetadata(name, metadata, parent);\n await sourceScopedStore.replaceSource(\n quads.map((value) => quad(value.subject, value.predicate, value.object, name)),\n source,\n );\n }\n\n public async deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.deleteResource(identifier);\n return;\n }\n\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n await sourceScopedStore.deleteSource(identifier.path);\n await this.store.del({ graph: metaName });\n if (parent) {\n await this.store.del({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n /**\n * Reads the metadata and stores it.\n */\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n const { name } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n // ============================================\n // QuintStore specific methods\n // ============================================\n\n /**\n * Get data with graph prefix filtering (key feature!)\n * This is much more efficient than full SPARQL for subgraph queries.\n */\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n return this.store.getByGraphPrefix(prefix);\n }\n\n /**\n * Execute SPARQL query with graph prefix filtering\n */\n public async queryWithGraphPrefix(\n query: string,\n graphPrefix: string,\n ): Promise<Quad[]> {\n await this.initialize();\n const stream = await this.engine.queryBindings(query, { graphPrefix });\n return arrayifyStream(stream);\n }\n\n // ============================================\n // Private helpers\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 protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [pattern],\n where: [this.sparqlSelectGraph(name, [pattern])],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n } as GraphPattern;\n }\n\n private sparqlSelectGraphAsQuads(name: NamedNode, triples: Quad[]): any {\n return this.sparqlSelectGraph(name, triples);\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If triples is undefined, we assume it's a container (so don't overwrite the main graph with containment triples).\n * This follows the same pattern as CSS's SparqlDataAccessor.\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource (undefined for containers).\n */\n private sparqlInsert(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n triples?: Quad[],\n ): Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [\n {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n },\n ];\n\n if (parent) {\n insert.push({\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n });\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: InsertDeleteOperation[] = [\n // Always delete and reinsert metadata\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents (when triples is defined)\n // For containers, we don't touch the data graph to preserve ldp:contains triples\n if (triples !== undefined) {\n // This needs to be first so it happens before the insert\n updates.unshift({\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n });\n\n if (triples.length > 0) {\n insert.push({\n type: 'graph',\n name,\n triples,\n });\n }\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private sparqlInsertMetadata(metaName: NamedNode, metadata: RepresentationMetadata): Update {\n const metaGraphs: GraphQuads = {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n };\n\n const deleteOp: InsertDeleteOperation = {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n };\n\n const insertOp: InsertDeleteOperation = {\n updateType: 'insert',\n insert: [metaGraphs],\n };\n\n return {\n type: 'update',\n updates: [deleteOp, insertOp],\n prefixes: {},\n };\n }\n\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const metaName = this.getMetadataNode(name);\n\n const updates: UpdateOperation[] = [\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n ];\n\n if (parent) {\n updates.push({\n updateType: 'deletewhere',\n delete: [{\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n }],\n });\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private async sendSparqlConstruct(query: ConstructQuery): Promise<Guarded<Readable>> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL CONSTRUCT: ${queryString}`);\n\n try {\n const quadStream = await this.engine.queryQuads(queryString);\n return guardStream(Readable.from(quadStream as unknown as AsyncIterable<any>));\n } catch (error: unknown) {\n this.logger.error(`SPARQL query failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private async sendSparqlUpdate(query: Update): Promise<void> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL UPDATE: ${queryString}`);\n\n try {\n await this.engine.queryVoid(queryString);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private sourceScopedStore(): {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n } | undefined {\n const store = this.store as Partial<{\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n }>;\n if (typeof store.replaceSource === 'function' && typeof store.deleteSource === 'function') {\n return store as {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n };\n }\n return undefined;\n }\n\n private async replaceCompatibilityMetadata(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n ): Promise<void> {\n const metaName = this.getMetadataNode(name);\n await this.store.del({ graph: metaName });\n const inserts: Quint[] = metadata.quads().map((value) => quad(\n value.subject,\n value.predicate,\n value.object,\n metaName,\n ) as Quint);\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quint);\n }\n if (inserts.length > 0) {\n await this.store.multiPut(inserts);\n }\n }\n\n /**\n * Execute a SPARQL UPDATE query string directly.\n * Used by SparqlUpdateResourceStore for LDP PATCH operations.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`executeSparqlUpdate: ${query}`);\n try {\n await this.engine.queryVoid(query);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"QuintStoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuintStoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintStoreSparqlDataAccessor - Data accessor using QuintStore\n * \n * Key features:\n * 1. Graph prefix filtering for efficient subgraph queries\n * 2. Backend-agnostic storage (SQLite, PostgreSQL, etc.)\n * 3. Future: vector similarity search\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\n\nimport type { QuintStore, Quint } from '../quint/types';\nimport { ComunicaQuintEngine } from '../sparql/ComunicaQuintEngine';\nimport type { RdfSourceInput } from '../rdf/types';\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\nexport class QuintStoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly generator: SparqlGenerator;\n private readonly baseUrl: string;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n\n public constructor(\n store: QuintStore,\n identifierStrategy: IdentifierStrategy,\n ) {\n this.store = store;\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new ComunicaQuintEngine(this.store);\n // Get baseUrl from identifierStrategy\n const strategy = identifierStrategy as unknown as { baseUrl?: string };\n this.baseUrl = strategy.baseUrl ?? '';\n this.logger.info(`QuintStoreSparqlDataAccessor initialized with identifierStrategy: ${identifierStrategy.constructor.name}, baseUrl: ${this.baseUrl || 'N/A'}`);\n }\n\n /**\n * Initialize the store (open database connection)\n */\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= this.initializeStore().finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n private async initializeStore(): Promise<void> {\n await this.store.open();\n this.initialized = true;\n this.logger.info('QuintStore initialized');\n }\n\n /**\n * Close the store\n */\n public async finalize(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.initialized) {\n await this.store.close();\n this.initialized = false;\n this.logger.info('QuintStore closed');\n }\n }\n\n /**\n * Only Quad data streams are supported.\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 /**\n * Returns all triples stored for the corresponding identifier.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n console.log(`[getMetadata] Starting for ${identifier.path}`);\n await this.initialize();\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n console.log(`[getMetadata] Sending CONSTRUCT for ${identifier.path}`);\n const stream = await this.sendSparqlConstruct(query);\n console.log(`[getMetadata] Got stream for ${identifier.path}, reading...`);\n const quads: Quad[] = await arrayifyStream(stream);\n console.log(`[getMetadata] Read ${quads.length} quads for ${identifier.path}`);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n // Only set default contentType if not already present in metadata\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\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 stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n console.log(`[writeContainer] Starting for ${identifier.path}`);\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeContainer] Sending SPARQL update for ${identifier.path}, parent: ${parent?.value || 'none'}`);\n console.log(`[writeContainer] Metadata quads: ${metadata.quads().length}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n console.log(`[writeContainer] Completed for ${identifier.path}`);\n return result;\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n console.log(`[writeDocument] Starting for ${identifier.path}`);\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeDocument] Reading stream for ${identifier.path}`);\n\n // 添加超时处理\n const timeoutMs = 5000;\n const triplesPromise = arrayifyStream<Quad>(data);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`arrayifyStream timed out after ${timeoutMs}ms`)), timeoutMs);\n });\n \n let triples: Quad[];\n try {\n triples = await Promise.race([triplesPromise, timeoutPromise]);\n console.log(`[writeDocument] Read ${triples.length} triples for ${identifier.path}`);\n } catch (e: any) {\n console.error(`[writeDocument] Failed to read stream for ${identifier.path}:`, e?.message || e);\n throw e;\n }\n \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 metadata.removeAll(CONTENT_TYPE_TERM);\n console.log(`[writeDocument] Sending SPARQL update for ${identifier.path}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n console.log(`[writeDocument] Completed for ${identifier.path}`);\n return result;\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\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.writeDocument(identifier, guardStream(Readable.from(quads)), metadata);\n return;\n }\n\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((triple): boolean => !def.equals(triple.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.replaceCompatibilityMetadata(name, metadata, parent);\n await sourceScopedStore.replaceSource(\n quads.map((value) => quad(value.subject, value.predicate, value.object, name)),\n source,\n );\n }\n\n public async deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.deleteResource(identifier);\n return;\n }\n\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n await sourceScopedStore.deleteSource(identifier.path);\n await this.store.del({ graph: metaName });\n if (parent) {\n await this.store.del({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n /**\n * Reads the metadata and stores it.\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 return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata, parent, name));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n // ============================================\n // QuintStore specific methods\n // ============================================\n\n /**\n * Get data with graph prefix filtering (key feature!)\n * This is much more efficient than full SPARQL for subgraph queries.\n */\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n return this.store.getByGraphPrefix(prefix);\n }\n\n /**\n * Execute SPARQL query with graph prefix filtering\n */\n public async queryWithGraphPrefix(\n query: string,\n graphPrefix: string,\n ): Promise<Quad[]> {\n await this.initialize();\n const stream = await this.engine.queryBindings(query, { graphPrefix });\n return arrayifyStream(stream);\n }\n\n // ============================================\n // Private helpers\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 protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [pattern],\n where: [this.sparqlSelectGraph(name, [pattern])],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n } as GraphPattern;\n }\n\n private sparqlSelectGraphAsQuads(name: NamedNode, triples: Quad[]): any {\n return this.sparqlSelectGraph(name, triples);\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If triples is undefined, we assume it's a container (so don't overwrite the main graph with containment triples).\n * This follows the same pattern as CSS's SparqlDataAccessor.\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource (undefined for containers).\n */\n private sparqlInsert(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n triples?: Quad[],\n ): Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [\n {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n },\n ];\n\n if (parent) {\n insert.push({\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n });\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: InsertDeleteOperation[] = [\n // Always delete and reinsert metadata\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents (when triples is defined)\n // For containers, we don't touch the data graph to preserve ldp:contains triples\n if (triples !== undefined) {\n // This needs to be first so it happens before the insert\n updates.unshift({\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n });\n\n if (triples.length > 0) {\n insert.push({\n type: 'graph',\n name,\n triples,\n });\n }\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private sparqlInsertMetadata(\n metaName: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n name?: NamedNode,\n ): Update {\n const metaGraphs: GraphQuads = {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n };\n const insert: GraphQuads[] = [metaGraphs];\n if (parent && name) {\n insert.push({\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n });\n }\n\n const deleteOp: InsertDeleteOperation = {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n };\n\n const insertOp: InsertDeleteOperation = {\n updateType: 'insert',\n insert,\n };\n\n return {\n type: 'update',\n updates: [deleteOp, insertOp],\n prefixes: {},\n };\n }\n\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const metaName = this.getMetadataNode(name);\n\n const updates: UpdateOperation[] = [\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n ];\n\n if (parent) {\n updates.push({\n updateType: 'deletewhere',\n delete: [{\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n }],\n });\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private async sendSparqlConstruct(query: ConstructQuery): Promise<Guarded<Readable>> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL CONSTRUCT: ${queryString}`);\n\n try {\n const quadStream = await this.engine.queryQuads(queryString);\n return guardStream(Readable.from(quadStream as unknown as AsyncIterable<any>));\n } catch (error: unknown) {\n this.logger.error(`SPARQL query failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private async sendSparqlUpdate(query: Update): Promise<void> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL UPDATE: ${queryString}`);\n\n try {\n await this.engine.queryVoid(queryString);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private sourceScopedStore(): {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n } | undefined {\n const store = this.store as Partial<{\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n }>;\n if (typeof store.replaceSource === 'function' && typeof store.deleteSource === 'function') {\n return store as {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n };\n }\n return undefined;\n }\n\n private async replaceCompatibilityMetadata(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n ): Promise<void> {\n const metaName = this.getMetadataNode(name);\n await this.store.del({ graph: metaName });\n const inserts: Quint[] = metadata.quads().map((value) => quad(\n value.subject,\n value.predicate,\n value.object,\n metaName,\n ) as Quint);\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quint);\n }\n if (inserts.length > 0) {\n await this.store.multiPut(inserts);\n }\n }\n\n /**\n * Execute a SPARQL UPDATE query string directly.\n * Used by SparqlUpdateResourceStore for LDP PATCH operations.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`executeSparqlUpdate: ${query}`);\n try {\n await this.engine.queryVoid(query);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undefineds.co/xpod",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
|
|
5
5
|
"repository": "https://github.com/undefinedsco/xpod",
|
|
6
6
|
"author": "developer@undefineds.co",
|