@undefineds.co/xpod 0.2.15 → 0.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/config/cloud.json +2 -2
  2. package/config/xpod.cluster.json +2 -2
  3. package/dist/api/container/cloud.js +6 -1
  4. package/dist/api/container/cloud.js.map +1 -1
  5. package/dist/api/container/routes.js +7 -1
  6. package/dist/api/container/routes.js.map +1 -1
  7. package/dist/api/container/types.d.ts +2 -0
  8. package/dist/api/container/types.js.map +1 -1
  9. package/dist/api/handlers/ProvisionHandler.d.ts +2 -0
  10. package/dist/api/handlers/ProvisionHandler.js +128 -3
  11. package/dist/api/handlers/ProvisionHandler.js.map +1 -1
  12. package/dist/api/handlers/WebIdProfileHandler.d.ts +2 -0
  13. package/dist/api/handlers/WebIdProfileHandler.js +61 -2
  14. package/dist/api/handlers/WebIdProfileHandler.js.map +1 -1
  15. package/dist/components/components.jsonld +2 -0
  16. package/dist/components/context.jsonld +42 -0
  17. package/dist/identity/drizzle/PodLookupRepository.d.ts +4 -0
  18. package/dist/identity/drizzle/PodLookupRepository.js +7 -0
  19. package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
  20. package/dist/identity/drizzle/WebIdProfileRepository.d.ts +8 -5
  21. package/dist/identity/drizzle/WebIdProfileRepository.js +12 -2
  22. package/dist/identity/drizzle/WebIdProfileRepository.js.map +1 -1
  23. package/dist/identity/drizzle/WebIdProfileRepository.jsonld +108 -0
  24. package/dist/identity/oidc/LoopbackClientIdAdapterFactory.d.ts +7 -0
  25. package/dist/identity/oidc/LoopbackClientIdAdapterFactory.js +48 -0
  26. package/dist/identity/oidc/LoopbackClientIdAdapterFactory.js.map +1 -0
  27. package/dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld +49 -0
  28. package/dist/index.d.ts +3 -1
  29. package/dist/index.js +6 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/provision/ProvisionPodCreator.d.ts +4 -0
  32. package/dist/provision/ProvisionPodCreator.js +33 -2
  33. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  34. package/dist/provision/ProvisionPodCreator.jsonld +23 -0
  35. package/package.json +13 -5
  36. package/static/app/assets/index.css +1 -1
  37. package/static/app/assets/main.js +15 -15
@@ -0,0 +1,49 @@
1
+ {
2
+ "@context": [
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@undefineds.co/xpod/^0.0.0/components/context.jsonld",
4
+ "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^8.0.0/components/context.jsonld"
5
+ ],
6
+ "@id": "npmd:@undefineds.co/xpod",
7
+ "components": [
8
+ {
9
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory",
10
+ "@type": "Class",
11
+ "requireElement": "LoopbackClientIdAdapterFactory",
12
+ "extends": [
13
+ "ClientIdAdapter:Factory"
14
+ ],
15
+ "parameters": [
16
+ {
17
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory_source",
18
+ "range": "css:dist/identity/storage/AdapterFactory.jsonld#AdapterFactory"
19
+ },
20
+ {
21
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory_converter",
22
+ "range": "css:dist/storage/conversion/RepresentationConverter.jsonld#RepresentationConverter"
23
+ }
24
+ ],
25
+ "memberFields": [
26
+ {
27
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory__member_loopbackConverter",
28
+ "memberFieldName": "loopbackConverter"
29
+ },
30
+ {
31
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory__member_constructor",
32
+ "memberFieldName": "constructor"
33
+ },
34
+ {
35
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory__member_createStorageAdapter",
36
+ "memberFieldName": "createStorageAdapter"
37
+ }
38
+ ],
39
+ "constructorArguments": [
40
+ {
41
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory_source"
42
+ },
43
+ {
44
+ "@id": "undefineds:dist/identity/oidc/LoopbackClientIdAdapterFactory.jsonld#LoopbackClientIdAdapterFactory_converter"
45
+ }
46
+ ]
47
+ }
48
+ ]
49
+ }
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ import { TerminalHttpHandler } from './http/terminal/TerminalHttpHandler';
21
21
  import { EdgeNodeCertificateHttpHandler } from './http/admin/EdgeNodeCertificateHttpHandler';
22
22
  import { ReservedSuffixIdentifierGenerator } from './pods/ReservedSuffixIdentifierGenerator';
23
23
  import { DrizzleIndexedStorage } from './identity/drizzle/DrizzleIndexedStorage';
24
+ import { WebIdProfileRepository } from './identity/drizzle/WebIdProfileRepository';
24
25
  import { PostgresKeyValueStorage } from './storage/keyvalue/PostgresKeyValueStorage';
25
26
  import { RedisKeyValueStorage } from './storage/keyvalue/RedisKeyValueStorage';
26
27
  import { SqliteKeyValueStorage } from './storage/keyvalue/SqliteKeyValueStorage';
@@ -66,6 +67,7 @@ import { DisabledOidcHandler } from './identity/oidc/DisabledOidcHandler';
66
67
  import { DisabledIdentityProviderHandler } from './identity/oidc/DisabledIdentityProviderHandler';
67
68
  import { AutoDetectOidcHandler } from './identity/oidc/AutoDetectOidcHandler';
68
69
  import { AutoDetectIdentityProviderHandler } from './identity/oidc/AutoDetectIdentityProviderHandler';
70
+ import { LoopbackClientIdAdapterFactory } from './identity/oidc/LoopbackClientIdAdapterFactory';
69
71
  import { ProvisionPodCreator } from './provision/ProvisionPodCreator';
70
72
  import { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';
71
73
  import { AuthModeSelector } from './authorization/AuthModeSelector';
@@ -77,4 +79,4 @@ export type { EntitlementProvider, AccountEntitlement } from './quota/Entitlemen
77
79
  export type { TunnelProvider, TunnelConfig, TunnelSetupOptions, TunnelStatus, } from './tunnel/TunnelProvider';
78
80
  export type { SubdomainRegistration, ConnectivityResult, SubdomainServiceOptions, } from './subdomain/SubdomainService';
79
81
  export { AppStaticAssetHandler } from './http/AppStaticAssetHandler';
80
- export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, 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, BaseQuintStore, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionCodeCodec, AuthModeSelector, };
82
+ export { RepresentationPartialConvertingStore, MinioDataAccessor, QuadstoreSparqlDataAccessor, QuintStoreSparqlDataAccessor, MixDataAccessor, ConfigurableLoggerFactory, SparqlUpdateResourceStore, SubgraphQueryEngine, QuadstoreSparqlEngine, QuintstoreSparqlEngine, SubgraphSparqlHttpHandler, QuotaAdminHttpHandler, ClusterIngressRouter, ClusterWebSocketConfigurator, EdgeNodeDirectDebugHttpHandler, EdgeNodeProxyHttpHandler, RouterHttpHandler, RouterHttpRoute, TracingHandler, EdgeNodeCertificateHttpHandler, TerminalHttpHandler, ReservedSuffixIdentifierGenerator, DrizzleIndexedStorage, WebIdProfileRepository, 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, BaseQuintStore, VectorStore, SqliteVectorStore, PostgresVectorStore, VectorHttpHandler, ProviderRegistry, ProviderRegistryImpl, EmbeddingService, EmbeddingServiceImpl, CredentialReader, CredentialReaderImpl, CloudflareTunnelProvider, LocalTunnelProvider, SubdomainService, MultiDomainIdentifierStrategy, SubdomainPodIdentifierStrategy, DisabledOidcHandler, DisabledIdentityProviderHandler, AutoDetectOidcHandler, AutoDetectIdentityProviderHandler, LoopbackClientIdAdapterFactory, UrlAwareRedisLocker, ProvisionPodCreator, ProvisionCodeCodec, AuthModeSelector, };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SqliteQuintStore = 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.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.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = 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.BaseQuintStore = exports.PgQuintStore = void 0;
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.WebIdProfileRepository = 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.ProvisionCodeCodec = exports.ProvisionPodCreator = exports.UrlAwareRedisLocker = 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.BaseQuintStore = 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; } });
@@ -47,6 +47,8 @@ const ReservedSuffixIdentifierGenerator_1 = require("./pods/ReservedSuffixIdenti
47
47
  Object.defineProperty(exports, "ReservedSuffixIdentifierGenerator", { enumerable: true, get: function () { return ReservedSuffixIdentifierGenerator_1.ReservedSuffixIdentifierGenerator; } });
48
48
  const DrizzleIndexedStorage_1 = require("./identity/drizzle/DrizzleIndexedStorage");
49
49
  Object.defineProperty(exports, "DrizzleIndexedStorage", { enumerable: true, get: function () { return DrizzleIndexedStorage_1.DrizzleIndexedStorage; } });
50
+ const WebIdProfileRepository_1 = require("./identity/drizzle/WebIdProfileRepository");
51
+ Object.defineProperty(exports, "WebIdProfileRepository", { enumerable: true, get: function () { return WebIdProfileRepository_1.WebIdProfileRepository; } });
50
52
  const PostgresKeyValueStorage_1 = require("./storage/keyvalue/PostgresKeyValueStorage");
51
53
  Object.defineProperty(exports, "PostgresKeyValueStorage", { enumerable: true, get: function () { return PostgresKeyValueStorage_1.PostgresKeyValueStorage; } });
52
54
  const RedisKeyValueStorage_1 = require("./storage/keyvalue/RedisKeyValueStorage");
@@ -143,6 +145,8 @@ const AutoDetectOidcHandler_1 = require("./identity/oidc/AutoDetectOidcHandler")
143
145
  Object.defineProperty(exports, "AutoDetectOidcHandler", { enumerable: true, get: function () { return AutoDetectOidcHandler_1.AutoDetectOidcHandler; } });
144
146
  const AutoDetectIdentityProviderHandler_1 = require("./identity/oidc/AutoDetectIdentityProviderHandler");
145
147
  Object.defineProperty(exports, "AutoDetectIdentityProviderHandler", { enumerable: true, get: function () { return AutoDetectIdentityProviderHandler_1.AutoDetectIdentityProviderHandler; } });
148
+ const LoopbackClientIdAdapterFactory_1 = require("./identity/oidc/LoopbackClientIdAdapterFactory");
149
+ Object.defineProperty(exports, "LoopbackClientIdAdapterFactory", { enumerable: true, get: function () { return LoopbackClientIdAdapterFactory_1.LoopbackClientIdAdapterFactory; } });
146
150
  // Provision components
147
151
  const ProvisionPodCreator_1 = require("./provision/ProvisionPodCreator");
148
152
  Object.defineProperty(exports, "ProvisionPodCreator", { enumerable: true, get: function () { return ProvisionPodCreator_1.ProvisionPodCreator; } });
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';\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 { 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 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';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\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 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 // 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 UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\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';\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 { WebIdProfileRepository } from './identity/drizzle/WebIdProfileRepository';\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 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';\n// Provision components\nimport { ProvisionPodCreator } from './provision/ProvisionPodCreator';\nimport { ProvisionCodeCodec } from './provision/ProvisionCodeCodec';\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 WebIdProfileRepository,\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 // 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 UrlAwareRedisLocker,\n // Provision exports\n ProvisionPodCreator,\n ProvisionCodeCodec,\n // Authorization exports\n AuthModeSelector,\n};\n"]}
@@ -8,13 +8,17 @@
8
8
  * - 没有 → 委托给原始 BasePodCreator(标准本地创建)
9
9
  */
10
10
  import { BasePodCreator, type PodCreatorInput, type PodCreatorOutput, type BasePodCreatorArgs } from '@solid/community-server';
11
+ import type { WebIdProfileRepository } from '../identity/drizzle/WebIdProfileRepository';
11
12
  export interface ProvisionPodCreatorArgs extends BasePodCreatorArgs {
12
13
  /** 与 ProvisionHandler 使用相同的 baseUrl 派生签名密钥 */
13
14
  provisionBaseUrl?: string;
15
+ /** Optional Cloud profile repository used to reconcile solid:storage after remote provisioning */
16
+ webIdProfileRepo?: WebIdProfileRepository;
14
17
  }
15
18
  export declare class ProvisionPodCreator extends BasePodCreator {
16
19
  private readonly provisionLogger;
17
20
  private readonly codec;
21
+ private readonly webIdProfileRepo?;
18
22
  constructor(args: ProvisionPodCreatorArgs);
19
23
  handle(input: PodCreatorInput): Promise<PodCreatorOutput>;
20
24
  private handleStandardPodCreate;
@@ -18,11 +18,21 @@ function joinUrlPath(baseUrl, relativePath) {
18
18
  const normalizedRelativePath = relativePath.replace(/^\/+/u, '');
19
19
  return `${normalizedBaseUrl}/${normalizedRelativePath}`;
20
20
  }
21
+ function remapPodConflict(error, podName) {
22
+ const message = error instanceof Error ? error.message : String(error);
23
+ if (/There already is a resource at/i.test(message)) {
24
+ throw new community_server_1.ConflictHttpError(`Pod name "${podName}" is already taken for this storage target.`, {
25
+ cause: error instanceof Error ? error : undefined,
26
+ });
27
+ }
28
+ throw error;
29
+ }
21
30
  class ProvisionPodCreator extends community_server_1.BasePodCreator {
22
31
  constructor(args) {
23
32
  super(args);
24
33
  this.provisionLogger = (0, global_logger_factory_1.getLoggerFor)(this);
25
34
  this.codec = new ProvisionCodeCodec_1.ProvisionCodeCodec(args.provisionBaseUrl ?? args.baseUrl);
35
+ this.webIdProfileRepo = args.webIdProfileRepo;
26
36
  }
27
37
  async handle(input) {
28
38
  const provisionCode = input.settings?.provisionCode;
@@ -60,7 +70,8 @@ class ProvisionPodCreator extends community_server_1.BasePodCreator {
60
70
  const storageBase = payload.spDomain
61
71
  ? `https://${payload.spDomain}`
62
72
  : payload.spUrl.replace(/\/$/, '');
63
- const podUrl = spResult.podUrl || `${storageBase}/${podName}/`;
73
+ const canonicalStorageUrl = `${storageBase}/${podName}/`;
74
+ const podUrl = spResult.podUrl || canonicalStorageUrl;
64
75
  // 3. 生成 WebID(指向 Cloud,storage 指向 SP)
65
76
  const webId = input.webId ?? `${this.baseUrl}${podName}/profile/card#me`;
66
77
  // 4. 链接 WebID 到账户 + 在本地 PodStore 记录
@@ -75,6 +86,17 @@ class ProvisionPodCreator extends community_server_1.BasePodCreator {
75
86
  };
76
87
  const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);
77
88
  const podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);
89
+ if (!input.webId && this.webIdProfileRepo) {
90
+ try {
91
+ await this.webIdProfileRepo.updateStorage(podName, {
92
+ storageUrl: canonicalStorageUrl,
93
+ storageMode: 'local',
94
+ });
95
+ }
96
+ catch (error) {
97
+ this.provisionLogger.warn(`Failed to reconcile storage pointer for ${podName}: ${error.message}`);
98
+ }
99
+ }
78
100
  this.provisionLogger.info(`Provisioned pod ${podName} on SP ${payload.spUrl}, podUrl: ${podUrl}`);
79
101
  return {
80
102
  podUrl,
@@ -99,7 +121,16 @@ class ProvisionPodCreator extends community_server_1.BasePodCreator {
99
121
  const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);
100
122
  const webIdElapsed = Date.now() - webIdStarted;
101
123
  const podStarted = Date.now();
102
- const podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);
124
+ let podId;
125
+ try {
126
+ podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);
127
+ }
128
+ catch (error) {
129
+ if (input.name) {
130
+ remapPodConflict(error, input.name);
131
+ }
132
+ throw error;
133
+ }
103
134
  const podElapsed = Date.now() - podStarted;
104
135
  const totalElapsed = Date.now() - totalStarted;
105
136
  this.provisionLogger.info(`[timing] ProvisionPodCreator.standard account=${input.accountId} pod=${baseIdentifier.path} handleWebId=${webIdElapsed}ms createPod=${podElapsed}ms total=${totalElapsed}ms`);
@@ -1 +1 @@
1
- {"version":3,"file":"ProvisionPodCreator.js","sourceRoot":"","sources":["../../src/provision/ProvisionPodCreator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ProvisionPodCreator\n *\n * 等位替换 CSS 的 BasePodCreator。\n *\n * 检查 settings 里有没有 provisionCode:\n * - 有 → 解码 JWT,回调远端 SP 的 /provision/pods 创建 Pod\n * - 没有 → 委托给原始 BasePodCreator(标准本地创建)\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport {\n BasePodCreator,\n type PodCreatorInput,\n type PodCreatorOutput,\n type BasePodCreatorArgs,\n} from '@solid/community-server';\nimport { ProvisionCodeCodec } from './ProvisionCodeCodec';\n\nfunction joinUrlPath(baseUrl: string, relativePath: string): string {\n const normalizedBaseUrl = baseUrl.replace(/\\/+$/u, '');\n const normalizedRelativePath = relativePath.replace(/^\\/+/u, '');\n return `${normalizedBaseUrl}/${normalizedRelativePath}`;\n}\n\nexport interface ProvisionPodCreatorArgs extends BasePodCreatorArgs {\n /** 与 ProvisionHandler 使用相同的 baseUrl 派生签名密钥 */\n provisionBaseUrl?: string;\n}\n\nexport class ProvisionPodCreator extends BasePodCreator {\n private readonly provisionLogger = getLoggerFor(this);\n private readonly codec: ProvisionCodeCodec;\n\n public constructor(args: ProvisionPodCreatorArgs) {\n super(args);\n this.codec = new ProvisionCodeCodec(args.provisionBaseUrl ?? args.baseUrl);\n }\n\n public override async handle(input: PodCreatorInput): Promise<PodCreatorOutput> {\n const provisionCode = input.settings?.provisionCode as string | undefined;\n\n if (!provisionCode) {\n return this.handleStandardPodCreate(input);\n }\n\n // SP 模式:解码 provisionCode,回调远端 SP\n const payload = this.codec.decode(provisionCode);\n if (!payload) {\n throw new Error('Invalid or expired provisionCode');\n }\n\n this.provisionLogger.info(`Provisioning pod on remote SP: ${payload.spUrl}`);\n\n // 1. 确定 podName\n const podName = input.name;\n if (!podName) {\n throw new Error('Pod name is required for remote provisioning');\n }\n\n // 2. 回调 SP 创建 Pod\n const callbackUrl = `${payload.spUrl.replace(/\\/$/, '')}/provision/pods`;\n const spResponse = await fetch(callbackUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${payload.serviceToken}`,\n },\n body: JSON.stringify({ podName }),\n });\n\n if (!spResponse.ok) {\n const errBody = await spResponse.text();\n this.provisionLogger.error(`SP callback failed: ${spResponse.status} ${errBody}`);\n throw new Error(`Failed to create pod on SP: ${spResponse.status}`);\n }\n\n const spResult = await spResponse.json() as { podUrl?: string };\n\n // storage URL 优先用 Cloud 分配的子域名,回调用实际地址\n const storageBase = payload.spDomain\n ? `https://${payload.spDomain}`\n : payload.spUrl.replace(/\\/$/, '');\n const podUrl = spResult.podUrl || `${storageBase}/${podName}/`;\n\n // 3. 生成 WebID(指向 Cloud,storage 指向 SP)\n const webId = input.webId ?? `${this.baseUrl}${podName}/profile/card#me`;\n\n // 4. 链接 WebID 到账户 + 在本地 PodStore 记录\n // base.path 必须在 Cloud 的 identifier space 内(CSS PodStore 会检查),\n // 所以用 Cloud 本地路径;真实的 SP storage URL 通过 podUrl 返回。\n const localBase = this.identifierGenerator.generate(podName);\n const podSettings = {\n ...input.settings,\n base: localBase,\n webId,\n oidcIssuer: this.baseUrl,\n };\n\n const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);\n const podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);\n\n this.provisionLogger.info(`Provisioned pod ${podName} on SP ${payload.spUrl}, podUrl: ${podUrl}`);\n\n return {\n podUrl,\n webId,\n podId,\n webIdLink,\n };\n }\n\n private async handleStandardPodCreate(input: PodCreatorInput): Promise<PodCreatorOutput> {\n const totalStarted = Date.now();\n const baseIdentifier = this.generateBaseIdentifier(input.name);\n const webId = input.webId ?? joinUrlPath(baseIdentifier.path, this.relativeWebIdPath);\n const inputSettings = input.settings as Record<string, unknown> | undefined;\n const oidcIssuer = typeof inputSettings?.oidcIssuer === 'string' ? inputSettings.oidcIssuer : this.baseUrl;\n const podSettings = {\n ...inputSettings,\n base: baseIdentifier,\n webId,\n oidcIssuer,\n };\n\n const webIdStarted = Date.now();\n const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);\n const webIdElapsed = Date.now() - webIdStarted;\n\n const podStarted = Date.now();\n const podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);\n const podElapsed = Date.now() - podStarted;\n const totalElapsed = Date.now() - totalStarted;\n\n this.provisionLogger.info(\n `[timing] ProvisionPodCreator.standard account=${input.accountId} pod=${baseIdentifier.path} handleWebId=${webIdElapsed}ms createPod=${podElapsed}ms total=${totalElapsed}ms`,\n );\n\n return {\n podUrl: baseIdentifier.path,\n webId,\n podId,\n webIdLink,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ProvisionPodCreator.js","sourceRoot":"","sources":["../../src/provision/ProvisionPodCreator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ProvisionPodCreator\n *\n * 等位替换 CSS 的 BasePodCreator。\n *\n * 检查 settings 里有没有 provisionCode:\n * - 有 → 解码 JWT,回调远端 SP 的 /provision/pods 创建 Pod\n * - 没有 → 委托给原始 BasePodCreator(标准本地创建)\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport {\n BasePodCreator,\n type PodCreatorInput,\n type PodCreatorOutput,\n type BasePodCreatorArgs,\n ConflictHttpError,\n} from '@solid/community-server';\nimport { ProvisionCodeCodec } from './ProvisionCodeCodec';\nimport type { WebIdProfileRepository } from '../identity/drizzle/WebIdProfileRepository';\n\nfunction joinUrlPath(baseUrl: string, relativePath: string): string {\n const normalizedBaseUrl = baseUrl.replace(/\\/+$/u, '');\n const normalizedRelativePath = relativePath.replace(/^\\/+/u, '');\n return `${normalizedBaseUrl}/${normalizedRelativePath}`;\n}\n\nexport interface ProvisionPodCreatorArgs extends BasePodCreatorArgs {\n /** 与 ProvisionHandler 使用相同的 baseUrl 派生签名密钥 */\n provisionBaseUrl?: string;\n /** Optional Cloud profile repository used to reconcile solid:storage after remote provisioning */\n webIdProfileRepo?: WebIdProfileRepository;\n}\n\nfunction remapPodConflict(error: unknown, podName: string): never {\n const message = error instanceof Error ? error.message : String(error);\n if (/There already is a resource at/i.test(message)) {\n throw new ConflictHttpError(`Pod name \"${podName}\" is already taken for this storage target.`, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n\n throw error;\n}\n\nexport class ProvisionPodCreator extends BasePodCreator {\n private readonly provisionLogger = getLoggerFor(this);\n private readonly codec: ProvisionCodeCodec;\n private readonly webIdProfileRepo?: WebIdProfileRepository;\n\n public constructor(args: ProvisionPodCreatorArgs) {\n super(args);\n this.codec = new ProvisionCodeCodec(args.provisionBaseUrl ?? args.baseUrl);\n this.webIdProfileRepo = args.webIdProfileRepo;\n }\n\n public override async handle(input: PodCreatorInput): Promise<PodCreatorOutput> {\n const provisionCode = input.settings?.provisionCode as string | undefined;\n\n if (!provisionCode) {\n return this.handleStandardPodCreate(input);\n }\n\n // SP 模式:解码 provisionCode,回调远端 SP\n const payload = this.codec.decode(provisionCode);\n if (!payload) {\n throw new Error('Invalid or expired provisionCode');\n }\n\n this.provisionLogger.info(`Provisioning pod on remote SP: ${payload.spUrl}`);\n\n // 1. 确定 podName\n const podName = input.name;\n if (!podName) {\n throw new Error('Pod name is required for remote provisioning');\n }\n\n // 2. 回调 SP 创建 Pod\n const callbackUrl = `${payload.spUrl.replace(/\\/$/, '')}/provision/pods`;\n const spResponse = await fetch(callbackUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${payload.serviceToken}`,\n },\n body: JSON.stringify({ podName }),\n });\n\n if (!spResponse.ok) {\n const errBody = await spResponse.text();\n this.provisionLogger.error(`SP callback failed: ${spResponse.status} ${errBody}`);\n throw new Error(`Failed to create pod on SP: ${spResponse.status}`);\n }\n\n const spResult = await spResponse.json() as { podUrl?: string };\n\n // storage URL 优先用 Cloud 分配的子域名,回调用实际地址\n const storageBase = payload.spDomain\n ? `https://${payload.spDomain}`\n : payload.spUrl.replace(/\\/$/, '');\n const canonicalStorageUrl = `${storageBase}/${podName}/`;\n const podUrl = spResult.podUrl || canonicalStorageUrl;\n\n // 3. 生成 WebID(指向 Cloud,storage 指向 SP)\n const webId = input.webId ?? `${this.baseUrl}${podName}/profile/card#me`;\n\n // 4. 链接 WebID 到账户 + 在本地 PodStore 记录\n // base.path 必须在 Cloud 的 identifier space 内(CSS PodStore 会检查),\n // 所以用 Cloud 本地路径;真实的 SP storage URL 通过 podUrl 返回。\n const localBase = this.identifierGenerator.generate(podName);\n const podSettings = {\n ...input.settings,\n base: localBase,\n webId,\n oidcIssuer: this.baseUrl,\n };\n\n const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);\n const podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);\n\n if (!input.webId && this.webIdProfileRepo) {\n try {\n await this.webIdProfileRepo.updateStorage(podName, {\n storageUrl: canonicalStorageUrl,\n storageMode: 'local',\n });\n } catch (error) {\n this.provisionLogger.warn(`Failed to reconcile storage pointer for ${podName}: ${(error as Error).message}`);\n }\n }\n\n this.provisionLogger.info(`Provisioned pod ${podName} on SP ${payload.spUrl}, podUrl: ${podUrl}`);\n\n return {\n podUrl,\n webId,\n podId,\n webIdLink,\n };\n }\n\n private async handleStandardPodCreate(input: PodCreatorInput): Promise<PodCreatorOutput> {\n const totalStarted = Date.now();\n const baseIdentifier = this.generateBaseIdentifier(input.name);\n const webId = input.webId ?? joinUrlPath(baseIdentifier.path, this.relativeWebIdPath);\n const inputSettings = input.settings as Record<string, unknown> | undefined;\n const oidcIssuer = typeof inputSettings?.oidcIssuer === 'string' ? inputSettings.oidcIssuer : this.baseUrl;\n const podSettings = {\n ...inputSettings,\n base: baseIdentifier,\n webId,\n oidcIssuer,\n };\n\n const webIdStarted = Date.now();\n const webIdLink = await this.handleWebId(!input.webId, webId, input.accountId, podSettings);\n const webIdElapsed = Date.now() - webIdStarted;\n\n const podStarted = Date.now();\n let podId: string;\n try {\n podId = await this.createPod(input.accountId, podSettings, !input.name, webIdLink);\n } catch (error) {\n if (input.name) {\n remapPodConflict(error, input.name);\n }\n throw error;\n }\n const podElapsed = Date.now() - podStarted;\n const totalElapsed = Date.now() - totalStarted;\n\n this.provisionLogger.info(\n `[timing] ProvisionPodCreator.standard account=${input.accountId} pod=${baseIdentifier.path} handleWebId=${webIdElapsed}ms createPod=${podElapsed}ms total=${totalElapsed}ms`,\n );\n\n return {\n podUrl: baseIdentifier.path,\n webId,\n podId,\n webIdLink,\n };\n }\n}\n"]}
@@ -26,6 +26,19 @@
26
26
  },
27
27
  "comment": "与 ProvisionHandler 使用相同的 baseUrl 派生签名密钥"
28
28
  },
29
+ {
30
+ "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_webIdProfileRepo",
31
+ "range": {
32
+ "@type": "ParameterRangeUnion",
33
+ "parameterRangeElements": [
34
+ "undefineds:dist/identity/drizzle/WebIdProfileRepository.jsonld#WebIdProfileRepository",
35
+ {
36
+ "@type": "ParameterRangeUndefined"
37
+ }
38
+ ]
39
+ },
40
+ "comment": "Optional Cloud profile repository used to reconcile solid:storage after remote provisioning"
41
+ },
29
42
  {
30
43
  "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_baseUrl",
31
44
  "range": "xsd:string",
@@ -61,6 +74,10 @@
61
74
  "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator__member_codec",
62
75
  "memberFieldName": "codec"
63
76
  },
77
+ {
78
+ "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator__member_webIdProfileRepo",
79
+ "memberFieldName": "webIdProfileRepo"
80
+ },
64
81
  {
65
82
  "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator__member_constructor",
66
83
  "memberFieldName": "constructor"
@@ -84,6 +101,12 @@
84
101
  "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_provisionBaseUrl"
85
102
  }
86
103
  },
104
+ {
105
+ "keyRaw": "webIdProfileRepo",
106
+ "value": {
107
+ "@id": "undefineds:dist/provision/ProvisionPodCreator.jsonld#ProvisionPodCreator_args_webIdProfileRepo"
108
+ }
109
+ },
87
110
  {
88
111
  "keyRaw": "baseUrl",
89
112
  "value": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.2.15",
3
+ "version": "0.2.20",
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",
@@ -78,10 +78,12 @@
78
78
  "dev:cluster:down": "docker compose -f docker-compose.cluster.yml down",
79
79
  "dev:css": "dotenv -e .env.local -- community-solid-server -c config/local.json -m .",
80
80
  "watch:css": "nodemon --watch config --watch templates --watch static --watch src --ext json,ejs,html,ts,tsx --exec \"bun run build:ts && bun run build:components && bun run dev:css\"",
81
- "test": "vitest --run",
82
- "test:run": "vitest --run",
81
+ "test": "./scripts/run-vitest-safe.sh --run",
82
+ "test:run": "./scripts/run-vitest-safe.sh --run",
83
+ "test:safe": "./scripts/run-vitest-safe.sh",
84
+ "test:run:safe": "./scripts/run-vitest-safe.sh --run",
83
85
  "test:terminal": "bun scripts/test-terminal.ts",
84
- "test:coverage": "vitest --run --coverage",
86
+ "test:coverage": "./scripts/run-vitest-safe.sh --run --coverage",
85
87
  "typecheck:test": "tsc --noEmit -p tsconfig.test.json",
86
88
  "test:integration": "bun run test:integration:all",
87
89
  "test:multi-node": "XPOD_RUN_INTEGRATION_TESTS=true vitest --run tests/integration/MultiNodeCluster.integration.test.ts",
@@ -91,6 +93,10 @@
91
93
  "test:storage": "vitest --run tests/storage/",
92
94
  "dev:cluster:lite": "docker compose -f docker-compose.standalone.yml up --build",
93
95
  "dev:cluster:lite:down": "docker compose -f docker-compose.standalone.yml down",
96
+ "doctor:dev-procs": "node scripts/dev-process-doctor.cjs scan",
97
+ "doctor:dev-procs:json": "node scripts/dev-process-doctor.cjs scan --json",
98
+ "doctor:dev-procs:cleanup": "node scripts/dev-process-doctor.cjs cleanup",
99
+ "doctor:vitest:cleanup": "node scripts/dev-process-doctor.cjs cleanup --type=vitest",
94
100
  "test:integration:lite": "bun scripts/run-integration-lite-local.ts",
95
101
  "test:integration:full": "bun scripts/run-integration-full.ts",
96
102
  "test:integration:all": "bun run test:integration:lite && bun run test:integration:full",
@@ -103,12 +109,14 @@
103
109
  "build:single:standalone": "bun run build && node scripts/build-single-file.js",
104
110
  "check:abi": "node scripts/check-native-abi.cjs",
105
111
  "check:platform-package-version": "node scripts/check-platform-package-version.cjs",
112
+ "sync:platform-package-version": "node scripts/sync-platform-package-version.cjs",
106
113
  "publish:platforms": "node scripts/publish-platform-packages.cjs",
107
114
  "publish:local": "node scripts/publish-local.cjs",
108
115
  "publish:local:dry": "node scripts/publish-local.cjs --dry-run",
109
116
  "publish:release": "node scripts/publish-release.cjs",
110
117
  "publish:release:dry": "node scripts/publish-release.cjs --dry-run",
111
- "test:setup": "dotenv -e .env.local -- bun scripts/setup-test-credentials.ts"
118
+ "test:setup": "dotenv -e .env.local -- bun scripts/setup-test-credentials.ts",
119
+ "version": "node scripts/sync-platform-package-version.cjs --stage"
112
120
  },
113
121
  "devDependencies": {
114
122
  "@playwright/test": "^1.57.0",