@undefineds.co/xpod 0.1.7 → 0.2.0
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/README.md +164 -3
- package/config/cli.json +9 -71
- package/config/cloud.json +34 -7
- package/config/local.json +6 -2
- package/config/resolver.json +11 -49
- package/config/runtime-open.json +22 -0
- package/config/xpod.base.json +32 -0
- package/config/xpod.cluster.json +2 -44
- package/config/xpod.json +5 -2
- package/dist/agents/AgentExecutorFactory.js +1 -1
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/AgentManager.js +1 -1
- package/dist/agents/AgentManager.js.map +1 -1
- package/dist/agents/config/agent-meta-schema.d.ts +7 -7
- package/dist/agents/config/agent-meta-schema.js +1 -1
- package/dist/agents/config/agent-meta-schema.js.map +1 -1
- package/dist/agents/config/resolve.js +1 -1
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/schema/agent-config.d.ts +18 -18
- package/dist/agents/schema/agent-config.js +1 -1
- package/dist/agents/schema/agent-config.js.map +1 -1
- package/dist/agents/schema/tables.d.ts +8 -8
- package/dist/agents/schema/tables.js +1 -1
- package/dist/agents/schema/tables.js.map +1 -1
- package/dist/ai/schema/config.d.ts +7 -7
- package/dist/ai/schema/config.js +1 -1
- package/dist/ai/schema/config.js.map +1 -1
- package/dist/ai/schema/model.d.ts +13 -13
- package/dist/ai/schema/model.js +1 -1
- package/dist/ai/schema/model.js.map +1 -1
- package/dist/ai/schema/provider.d.ts +7 -7
- package/dist/ai/schema/provider.js +1 -1
- package/dist/ai/schema/provider.js.map +1 -1
- package/dist/ai/schema/vector-store.d.ts +17 -17
- package/dist/ai/schema/vector-store.js +1 -1
- package/dist/ai/schema/vector-store.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.js +1 -1
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/ai/service/DefaultAiConfigService.js.map +1 -1
- package/dist/api/ApiServer.d.ts +3 -1
- package/dist/api/ApiServer.js +14 -1
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/auth/AuthContext.d.ts +12 -1
- package/dist/api/auth/AuthContext.js +18 -1
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +0 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/ServiceTokenAuthenticator.d.ts +18 -0
- package/dist/api/auth/ServiceTokenAuthenticator.js +50 -0
- package/dist/api/auth/ServiceTokenAuthenticator.js.map +1 -0
- package/dist/api/auth/index.d.ts +1 -0
- package/dist/api/auth/index.js +1 -0
- package/dist/api/auth/index.js.map +1 -1
- package/dist/api/chatkit/ai-provider.d.ts +0 -10
- package/dist/api/chatkit/ai-provider.js +11 -120
- package/dist/api/chatkit/ai-provider.js.map +1 -1
- package/dist/api/chatkit/default-agent.js +11 -8
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +6 -0
- package/dist/api/chatkit/pod-store.js +103 -36
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/schema.d.ts +32 -26
- package/dist/api/chatkit/schema.js +16 -8
- package/dist/api/chatkit/schema.js.map +1 -1
- package/dist/api/container/business-token.d.ts +9 -0
- package/dist/api/container/business-token.js +32 -0
- package/dist/api/container/business-token.js.map +1 -0
- package/dist/api/container/cloud.js +36 -12
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/common.js +13 -5
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +94 -14
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +2 -1
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +81 -9
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +8 -6
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/AdminHandler.js +9 -9
- package/dist/api/handlers/AdminHandler.js.map +1 -1
- package/dist/api/handlers/ApiKeyHandler.js +0 -6
- package/dist/api/handlers/ApiKeyHandler.js.map +1 -1
- package/dist/api/handlers/EdgeNodeSignalHandler.d.ts +17 -0
- package/dist/api/handlers/EdgeNodeSignalHandler.js +171 -0
- package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -0
- package/dist/api/handlers/PodManagementHandler.d.ts +5 -4
- package/dist/api/handlers/PodManagementHandler.js +11 -10
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/ProvisionHandler.d.ts +42 -0
- package/dist/api/handlers/ProvisionHandler.js +161 -0
- package/dist/api/handlers/ProvisionHandler.js.map +1 -0
- package/dist/api/handlers/QuotaHandler.d.ts +7 -7
- package/dist/api/handlers/QuotaHandler.js +143 -73
- package/dist/api/handlers/QuotaHandler.js.map +1 -1
- package/dist/api/handlers/SubdomainClientHandler.js +2 -2
- package/dist/api/handlers/SubdomainClientHandler.js.map +1 -1
- package/dist/api/handlers/SubdomainHandler.js +13 -8
- package/dist/api/handlers/SubdomainHandler.js.map +1 -1
- package/dist/api/handlers/UsageHandler.d.ts +14 -0
- package/dist/api/handlers/UsageHandler.js +123 -0
- package/dist/api/handlers/UsageHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +3 -1
- package/dist/api/handlers/index.js +3 -1
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/main.js +18 -0
- package/dist/api/main.js.map +1 -1
- package/dist/api/middleware/OpenAuthMiddleware.d.ts +12 -0
- package/dist/api/middleware/OpenAuthMiddleware.js +27 -0
- package/dist/api/middleware/OpenAuthMiddleware.js.map +1 -0
- package/dist/api/runtime.d.ts +15 -0
- package/dist/api/runtime.js +125 -0
- package/dist/api/runtime.js.map +1 -0
- package/dist/api/service/VectorStoreService.js +1 -1
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/VercelChatService.d.ts +16 -7
- package/dist/api/service/VercelChatService.js +98 -178
- package/dist/api/service/VercelChatService.js.map +1 -1
- package/dist/api/store/DrizzleClientCredentialsStore.d.ts +6 -11
- package/dist/api/store/DrizzleClientCredentialsStore.js +9 -39
- package/dist/api/store/DrizzleClientCredentialsStore.js.map +1 -1
- package/dist/authorization/AuthModeSelector.d.ts +10 -0
- package/dist/authorization/AuthModeSelector.js +27 -0
- package/dist/authorization/AuthModeSelector.js.map +1 -0
- package/dist/authorization/AuthModeSelector.jsonld +81 -0
- package/dist/cli/commands/account.d.ts +6 -0
- package/dist/cli/commands/account.js +119 -0
- package/dist/cli/commands/account.js.map +1 -0
- package/dist/cli/commands/auth.js +20 -29
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/backup.d.ts +15 -0
- package/dist/cli/commands/backup.js +286 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/config.d.ts +34 -3
- package/dist/cli/commands/config.js +195 -258
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.js +94 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/pod.d.ts +6 -0
- package/dist/cli/commands/pod.js +124 -0
- package/dist/cli/commands/pod.js.map +1 -0
- package/dist/cli/commands/start.js +28 -5
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/credentials-store.d.ts +17 -0
- package/dist/cli/lib/credentials-store.js +73 -0
- package/dist/cli/lib/credentials-store.js.map +1 -0
- package/dist/cli/lib/css-account.d.ts +17 -0
- package/dist/cli/lib/css-account.js +56 -0
- package/dist/cli/lib/css-account.js.map +1 -1
- package/dist/cli/lib/pod-thread-store.d.ts +57 -0
- package/dist/cli/lib/pod-thread-store.js +310 -0
- package/dist/cli/lib/pod-thread-store.js.map +1 -0
- package/dist/cli/lib/solid-auth.d.ts +20 -0
- package/dist/cli/lib/solid-auth.js +70 -0
- package/dist/cli/lib/solid-auth.js.map +1 -0
- package/dist/components/components.jsonld +5 -8
- package/dist/components/context.jsonld +114 -244
- package/dist/credential/schema/tables.d.ts +14 -14
- package/dist/credential/schema/tables.js +1 -1
- package/dist/credential/schema/tables.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.js +2 -2
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.d.ts +1 -7
- package/dist/edge/EdgeNodeDnsCoordinator.js +31 -41
- package/dist/edge/EdgeNodeDnsCoordinator.js.map +1 -1
- package/dist/edge/EdgeNodeDnsCoordinator.jsonld +1 -27
- package/dist/edge/EdgeNodeModeDetector.d.ts +1 -1
- package/dist/edge/EdgeNodeModeDetector.js +9 -11
- package/dist/edge/EdgeNodeModeDetector.js.map +1 -1
- package/dist/http/ClusterIngressRouter.js +3 -3
- package/dist/http/ClusterIngressRouter.js.map +1 -1
- package/dist/http/ClusterWebSocketConfigurator.js +2 -2
- package/dist/http/ClusterWebSocketConfigurator.js.map +1 -1
- package/dist/http/PodRoutingHttpHandler.js +2 -2
- package/dist/http/PodRoutingHttpHandler.js.map +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.d.ts +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.js +1 -1
- package/dist/http/cluster/PodMigrationHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/EdgeNodeRepository.d.ts +37 -4
- package/dist/identity/drizzle/EdgeNodeRepository.js +120 -128
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/ServiceTokenRepository.d.ts +52 -0
- package/dist/identity/drizzle/ServiceTokenRepository.js +142 -0
- package/dist/identity/drizzle/ServiceTokenRepository.js.map +1 -0
- package/dist/identity/drizzle/db.d.ts +9 -0
- package/dist/identity/drizzle/db.js +235 -3
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +5 -0
- package/dist/identity/drizzle/schema.pg.js +49 -20
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +332 -57
- package/dist/identity/drizzle/schema.sqlite.js +48 -18
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +6 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.js +12 -14
- package/dist/index.js.map +1 -1
- package/dist/main.js +25 -8
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionCodeCodec.d.ts +39 -0
- package/dist/provision/ProvisionCodeCodec.js +65 -0
- package/dist/provision/ProvisionCodeCodec.js.map +1 -0
- package/dist/provision/ProvisionCodeCodec.jsonld +47 -0
- package/dist/provision/ProvisionPodCreator.d.ts +20 -0
- package/dist/provision/ProvisionPodCreator.js +84 -0
- package/dist/provision/ProvisionPodCreator.js.map +1 -0
- package/dist/provision/ProvisionPodCreator.jsonld +118 -0
- package/dist/quota/DrizzleQuotaService.d.ts +17 -3
- package/dist/quota/DrizzleQuotaService.js +108 -8
- package/dist/quota/DrizzleQuotaService.js.map +1 -1
- package/dist/quota/DrizzleQuotaService.jsonld +33 -22
- package/dist/quota/NoopQuotaService.d.ts +7 -1
- package/dist/quota/NoopQuotaService.js +12 -0
- package/dist/quota/NoopQuotaService.js.map +1 -1
- package/dist/quota/NoopQuotaService.jsonld +24 -0
- package/dist/quota/QuotaService.d.ts +17 -0
- package/dist/quota/QuotaService.js +5 -0
- package/dist/quota/QuotaService.js.map +1 -1
- package/dist/quota/QuotaService.jsonld +50 -0
- package/dist/runtime/Proxy.d.ts +22 -4
- package/dist/runtime/Proxy.js +154 -35
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/XpodRuntime.d.ts +49 -0
- package/dist/runtime/XpodRuntime.js +374 -0
- package/dist/runtime/XpodRuntime.js.map +1 -0
- package/dist/runtime/env-utils.d.ts +2 -0
- package/dist/runtime/env-utils.js +55 -0
- package/dist/runtime/env-utils.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +8 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/socket-fetch.d.ts +1 -0
- package/dist/runtime/socket-fetch.js +72 -0
- package/dist/runtime/socket-fetch.js.map +1 -0
- package/dist/runtime/socket-http.d.ts +1 -0
- package/dist/runtime/socket-http.js +142 -0
- package/dist/runtime/socket-http.js.map +1 -0
- package/dist/runtime/socket-utils.d.ts +2 -0
- package/dist/runtime/socket-utils.js +34 -0
- package/dist/runtime/socket-utils.js.map +1 -0
- package/dist/service/{EdgeNodeHeartbeatService.d.ts → EdgeNodeSignalClient.d.ts} +3 -3
- package/dist/service/{EdgeNodeHeartbeatService.js → EdgeNodeSignalClient.js} +4 -4
- package/dist/service/EdgeNodeSignalClient.js.map +1 -0
- package/dist/service/PodMigrationService.d.ts +1 -2
- package/dist/service/PodMigrationService.js +1 -2
- package/dist/service/PodMigrationService.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.d.ts +6 -0
- package/dist/storage/accessors/MinioDataAccessor.js +10 -0
- package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.jsonld +4 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +2 -1
- package/dist/storage/accessors/MixDataAccessor.js +12 -1
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +19 -0
- package/dist/storage/locking/UrlAwareRedisLocker.d.ts +18 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js +60 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -0
- package/dist/storage/locking/UrlAwareRedisLocker.jsonld +123 -0
- package/dist/storage/quota/UsageRepository.d.ts +41 -8
- package/dist/storage/quota/UsageRepository.js +252 -50
- package/dist/storage/quota/UsageRepository.js.map +1 -1
- package/dist/storage/sparql/ComunicaQuintEngine.d.ts +9 -0
- package/dist/storage/sparql/ComunicaQuintEngine.js +50 -9
- package/dist/storage/sparql/ComunicaQuintEngine.js.map +1 -1
- package/dist/storage/sparql/QueryOptimizer.js +13 -1
- package/dist/storage/sparql/QueryOptimizer.js.map +1 -1
- package/dist/storage/sparql/QuintQuerySource.d.ts +14 -0
- package/dist/storage/sparql/QuintQuerySource.js +152 -1
- package/dist/storage/sparql/QuintQuerySource.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -0
- package/dist/storage/sparql/SubgraphQueryEngine.js +6 -2
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.jsonld +4 -0
- package/dist/subdomain/SubdomainClient.d.ts +3 -3
- package/dist/subdomain/SubdomainClient.js +1 -1
- package/dist/subdomain/SubdomainClient.js.map +1 -1
- package/dist/subdomain/SubdomainService.d.ts +15 -16
- package/dist/subdomain/SubdomainService.js +80 -54
- package/dist/subdomain/SubdomainService.js.map +1 -1
- package/dist/subdomain/SubdomainService.jsonld +22 -26
- package/dist/supervisor/Supervisor.d.ts +7 -2
- package/dist/supervisor/Supervisor.js +33 -1
- package/dist/supervisor/Supervisor.js.map +1 -1
- package/dist/task/DrizzleTaskQueue.d.ts +1 -1
- package/dist/task/DrizzleTaskQueue.js +1 -1
- package/dist/task/DrizzleTaskQueue.js.map +1 -1
- package/dist/task/schema.d.ts +10 -10
- package/dist/task/schema.js +1 -1
- package/dist/task/schema.js.map +1 -1
- package/dist/test-utils/index.d.ts +4 -0
- package/dist/test-utils/index.js +8 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/no-auth-xpod.d.ts +11 -0
- package/dist/test-utils/no-auth-xpod.js +25 -0
- package/dist/test-utils/no-auth-xpod.js.map +1 -0
- package/dist/test-utils/seed-pod.d.ts +5 -0
- package/dist/test-utils/seed-pod.js +61 -0
- package/dist/test-utils/seed-pod.js.map +1 -0
- package/package.json +38 -10
- package/templates/identity/account/create-pod.html.ejs +110 -0
- package/templates/main.html.ejs +10 -0
- package/dist/api/handlers/DevHandler.d.ts +0 -18
- package/dist/api/handlers/DevHandler.js +0 -276
- package/dist/api/handlers/DevHandler.js.map +0 -1
- package/dist/api/handlers/SignalHandler.d.ts +0 -13
- package/dist/api/handlers/SignalHandler.js +0 -122
- package/dist/api/handlers/SignalHandler.js.map +0 -1
- package/dist/gateway/Proxy.d.ts +0 -24
- package/dist/gateway/Proxy.js +0 -209
- package/dist/gateway/Proxy.js.map +0 -1
- package/dist/gateway/Supervisor.d.ts +0 -2
- package/dist/gateway/Supervisor.js +0 -7
- package/dist/gateway/Supervisor.js.map +0 -1
- package/dist/gateway/port-finder.d.ts +0 -4
- package/dist/gateway/port-finder.js +0 -15
- package/dist/gateway/port-finder.js.map +0 -1
- package/dist/gateway/types.d.ts +0 -1
- package/dist/gateway/types.js +0 -3
- package/dist/gateway/types.js.map +0 -1
- package/dist/http/SignalInterceptHttpHandler.d.ts +0 -24
- package/dist/http/SignalInterceptHttpHandler.js +0 -47
- package/dist/http/SignalInterceptHttpHandler.js.map +0 -1
- package/dist/http/SignalInterceptHttpHandler.jsonld +0 -103
- package/dist/http/admin/EdgeNodeSignalHttpHandler.d.ts +0 -71
- package/dist/http/admin/EdgeNodeSignalHttpHandler.js +0 -674
- package/dist/http/admin/EdgeNodeSignalHttpHandler.js.map +0 -1
- package/dist/http/admin/EdgeNodeSignalHttpHandler.jsonld +0 -406
- package/dist/http/cluster/PodMigrationHttpHandler.jsonld +0 -169
- package/dist/quota/DefaultQuotaService.d.ts +0 -16
- package/dist/quota/DefaultQuotaService.js +0 -37
- package/dist/quota/DefaultQuotaService.js.map +0 -1
- package/dist/quota/DefaultQuotaService.jsonld +0 -85
- package/dist/service/EdgeNodeHeartbeatService.js.map +0 -1
- package/dist/service/PodMigrationService.jsonld +0 -76
- package/dist/storage/MigratableDataAccessor.d.ts +0 -63
- package/dist/storage/MigratableDataAccessor.js +0 -11
- package/dist/storage/MigratableDataAccessor.js.map +0 -1
- package/dist/storage/MigratableDataAccessor.jsonld +0 -60
- package/dist/storage/accessors/TieredMinioDataAccessor.d.ts +0 -150
- package/dist/storage/accessors/TieredMinioDataAccessor.js +0 -582
- package/dist/storage/accessors/TieredMinioDataAccessor.js.map +0 -1
- package/dist/storage/accessors/TieredMinioDataAccessor.jsonld +0 -333
- package/static/app/assets/index.css +0 -1
- package/static/app/assets/main.js +0 -11
|
@@ -1,26 +1,115 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DrizzleQuotaService = void 0;
|
|
4
|
+
const global_logger_factory_1 = require("global-logger-factory");
|
|
4
5
|
const db_1 = require("../identity/drizzle/db");
|
|
5
6
|
const AccountRepository_1 = require("../identity/drizzle/AccountRepository");
|
|
6
7
|
const UsageRepository_1 = require("../storage/quota/UsageRepository");
|
|
8
|
+
/**
|
|
9
|
+
* 环境变量默认值
|
|
10
|
+
*/
|
|
11
|
+
function envNumber(key) {
|
|
12
|
+
const val = process.env[key];
|
|
13
|
+
if (val === undefined || val === '') {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const num = Number(val);
|
|
17
|
+
return Number.isFinite(num) && num >= 0 ? num : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 统一 QuotaService 实现
|
|
21
|
+
*
|
|
22
|
+
* 查询优先级:DB 值 > 环境变量默认值 > 不限制 (null)
|
|
23
|
+
*/
|
|
7
24
|
class DrizzleQuotaService {
|
|
8
25
|
constructor(options) {
|
|
26
|
+
this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
|
|
9
27
|
const db = (0, db_1.getIdentityDatabase)(options.identityDbUrl);
|
|
10
28
|
this.accountRepo = new AccountRepository_1.AccountRepository(db);
|
|
11
29
|
this.usageRepo = new UsageRepository_1.UsageRepository(db);
|
|
12
|
-
this.defaultQuota = options.defaultAccountQuotaBytes ?? 10 * 1024 * 1024 * 1024;
|
|
13
30
|
}
|
|
14
|
-
async
|
|
31
|
+
async getAccountQuota(accountId) {
|
|
15
32
|
const usage = await this.usageRepo.getAccountUsage(accountId);
|
|
16
|
-
|
|
17
|
-
|
|
33
|
+
return {
|
|
34
|
+
storageLimitBytes: this.resolve(usage?.storageLimitBytes, 'XPOD_DEFAULT_STORAGE_LIMIT_BYTES'),
|
|
35
|
+
bandwidthLimitBps: this.resolve(usage?.bandwidthLimitBps, 'XPOD_DEFAULT_BANDWIDTH_LIMIT_BPS'),
|
|
36
|
+
computeLimitSeconds: this.resolve(usage?.computeLimitSeconds, 'XPOD_DEFAULT_COMPUTE_LIMIT_SECONDS'),
|
|
37
|
+
tokenLimitMonthly: this.resolve(usage?.tokenLimitMonthly, 'XPOD_DEFAULT_TOKEN_LIMIT_MONTHLY'),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async setAccountQuota(accountId, quota) {
|
|
41
|
+
if (quota.storageLimitBytes !== undefined) {
|
|
42
|
+
await this.usageRepo.setAccountStorageLimit(accountId, quota.storageLimitBytes);
|
|
43
|
+
}
|
|
44
|
+
if (quota.bandwidthLimitBps !== undefined) {
|
|
45
|
+
await this.usageRepo.setAccountBandwidthLimit(accountId, quota.bandwidthLimitBps);
|
|
46
|
+
}
|
|
47
|
+
if (quota.computeLimitSeconds !== undefined) {
|
|
48
|
+
await this.usageRepo.setAccountComputeLimit(accountId, quota.computeLimitSeconds);
|
|
49
|
+
}
|
|
50
|
+
if (quota.tokenLimitMonthly !== undefined) {
|
|
51
|
+
await this.usageRepo.setAccountTokenLimit(accountId, quota.tokenLimitMonthly);
|
|
18
52
|
}
|
|
19
|
-
return this.defaultQuota;
|
|
20
53
|
}
|
|
21
|
-
async
|
|
54
|
+
async getPodQuota(podId) {
|
|
22
55
|
const usage = await this.usageRepo.getPodUsage(podId);
|
|
23
|
-
return
|
|
56
|
+
return {
|
|
57
|
+
storageLimitBytes: this.resolve(usage?.storageLimitBytes, 'XPOD_DEFAULT_STORAGE_LIMIT_BYTES'),
|
|
58
|
+
bandwidthLimitBps: this.resolve(usage?.bandwidthLimitBps, 'XPOD_DEFAULT_BANDWIDTH_LIMIT_BPS'),
|
|
59
|
+
computeLimitSeconds: this.resolve(usage?.computeLimitSeconds, 'XPOD_DEFAULT_COMPUTE_LIMIT_SECONDS'),
|
|
60
|
+
tokenLimitMonthly: this.resolve(usage?.tokenLimitMonthly, 'XPOD_DEFAULT_TOKEN_LIMIT_MONTHLY'),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async setPodQuota(podId, quota) {
|
|
64
|
+
// Try to get pod info from CSS
|
|
65
|
+
const podInfo = await this.accountRepo.getPodInfo(podId);
|
|
66
|
+
// If pod doesn't exist in CSS, try to get accountId from usage table
|
|
67
|
+
let accountId = podInfo?.accountId;
|
|
68
|
+
if (!accountId) {
|
|
69
|
+
const usage = await this.usageRepo.getPodUsage(podId);
|
|
70
|
+
accountId = usage?.accountId;
|
|
71
|
+
}
|
|
72
|
+
// If still no accountId, use a placeholder (quota can be set before pod creation)
|
|
73
|
+
if (!accountId) {
|
|
74
|
+
accountId = 'unknown';
|
|
75
|
+
}
|
|
76
|
+
if (quota.storageLimitBytes !== undefined) {
|
|
77
|
+
await this.usageRepo.setPodStorageLimit(podId, accountId, quota.storageLimitBytes);
|
|
78
|
+
}
|
|
79
|
+
if (quota.bandwidthLimitBps !== undefined) {
|
|
80
|
+
await this.usageRepo.setPodBandwidthLimit(podId, accountId, quota.bandwidthLimitBps);
|
|
81
|
+
}
|
|
82
|
+
if (quota.computeLimitSeconds !== undefined) {
|
|
83
|
+
await this.usageRepo.setPodComputeLimit(podId, accountId, quota.computeLimitSeconds);
|
|
84
|
+
}
|
|
85
|
+
if (quota.tokenLimitMonthly !== undefined) {
|
|
86
|
+
await this.usageRepo.setPodTokenLimit(podId, accountId, quota.tokenLimitMonthly);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async clearAccountQuota(accountId) {
|
|
90
|
+
await this.setAccountQuota(accountId, {
|
|
91
|
+
storageLimitBytes: null,
|
|
92
|
+
bandwidthLimitBps: null,
|
|
93
|
+
computeLimitSeconds: null,
|
|
94
|
+
tokenLimitMonthly: null,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async clearPodQuota(podId) {
|
|
98
|
+
await this.setPodQuota(podId, {
|
|
99
|
+
storageLimitBytes: null,
|
|
100
|
+
bandwidthLimitBps: null,
|
|
101
|
+
computeLimitSeconds: null,
|
|
102
|
+
tokenLimitMonthly: null,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// 向后兼容
|
|
106
|
+
async getAccountLimit(accountId) {
|
|
107
|
+
const quota = await this.getAccountQuota(accountId);
|
|
108
|
+
return quota.storageLimitBytes;
|
|
109
|
+
}
|
|
110
|
+
async getPodLimit(podId) {
|
|
111
|
+
const quota = await this.getPodQuota(podId);
|
|
112
|
+
return quota.storageLimitBytes;
|
|
24
113
|
}
|
|
25
114
|
async setAccountLimit(accountId, limit) {
|
|
26
115
|
await this.usageRepo.setAccountStorageLimit(accountId, limit);
|
|
@@ -28,10 +117,21 @@ class DrizzleQuotaService {
|
|
|
28
117
|
async setPodLimit(podId, limit) {
|
|
29
118
|
const podInfo = await this.accountRepo.getPodInfo(podId);
|
|
30
119
|
if (!podInfo?.accountId) {
|
|
31
|
-
throw new Error(
|
|
120
|
+
throw new Error(`Pod ${podId} not found or has no associated account`);
|
|
32
121
|
}
|
|
33
122
|
await this.usageRepo.setPodStorageLimit(podId, podInfo.accountId, limit);
|
|
34
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* 解析配额值:DB 值 > 环境变量默认值 > null (不限制)
|
|
126
|
+
*/
|
|
127
|
+
resolve(dbValue, envKey) {
|
|
128
|
+
// DB 中有明确值(包括 0)
|
|
129
|
+
if (typeof dbValue === 'number') {
|
|
130
|
+
return dbValue;
|
|
131
|
+
}
|
|
132
|
+
// 回退到环境变量
|
|
133
|
+
return envNumber(envKey);
|
|
134
|
+
}
|
|
35
135
|
}
|
|
36
136
|
exports.DrizzleQuotaService = DrizzleQuotaService;
|
|
37
137
|
//# sourceMappingURL=DrizzleQuotaService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrizzleQuotaService.js","sourceRoot":"","sources":["../../src/quota/DrizzleQuotaService.ts"],"names":[],"mappings":";;;AAAA,+CAA6D;AAC7D,6EAA0E;AAC1E,sEAAmE;AAQnE,MAAa,mBAAmB;IAK9B,YAAmB,OAAmC;QACpD,MAAM,EAAE,GAAG,IAAA,wBAAmB,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,iCAAe,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,wBAAwB,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAiB;QAC5C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,KAAK,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC,iBAAiB,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAa;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,KAAK,EAAE,iBAAiB,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,KAAoB;QAClE,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,KAAoB;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,eAAe,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF;AApCD,kDAoCC","sourcesContent":["import { getIdentityDatabase } from '../identity/drizzle/db';\nimport { AccountRepository } from '../identity/drizzle/AccountRepository';\nimport { UsageRepository } from '../storage/quota/UsageRepository';\nimport type { QuotaService } from './QuotaService';\n\ninterface DrizzleQuotaServiceOptions {\n identityDbUrl: string;\n defaultAccountQuotaBytes?: number;\n}\n\nexport class DrizzleQuotaService implements QuotaService {\n private readonly accountRepo: AccountRepository;\n private readonly usageRepo: UsageRepository;\n private readonly defaultQuota: number;\n\n public constructor(options: DrizzleQuotaServiceOptions) {\n const db = getIdentityDatabase(options.identityDbUrl);\n this.accountRepo = new AccountRepository(db);\n this.usageRepo = new UsageRepository(db);\n this.defaultQuota = options.defaultAccountQuotaBytes ?? 10 * 1024 * 1024 * 1024;\n }\n\n public async getAccountLimit(accountId: string): Promise<number | null | undefined> {\n const usage = await this.usageRepo.getAccountUsage(accountId);\n if (usage && usage.storageLimitBytes !== undefined) {\n return usage.storageLimitBytes;\n }\n return this.defaultQuota;\n }\n\n public async getPodLimit(podId: string): Promise<number | null | undefined> {\n const usage = await this.usageRepo.getPodUsage(podId);\n return usage?.storageLimitBytes;\n }\n\n public async setAccountLimit(accountId: string, limit: number | null): Promise<void> {\n await this.usageRepo.setAccountStorageLimit(accountId, limit);\n }\n\n public async setPodLimit(podId: string, limit: number | null): Promise<void> {\n const podInfo = await this.accountRepo.getPodInfo(podId);\n if (!podInfo?.accountId) {\n throw new Error(`无法更新 Pod ${podId} 的配额:未找到关联账号。`);\n }\n await this.usageRepo.setPodStorageLimit(podId, podInfo.accountId, limit);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DrizzleQuotaService.js","sourceRoot":"","sources":["../../src/quota/DrizzleQuotaService.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLoggerFor } from 'global-logger-factory';\nimport { getIdentityDatabase } from '../identity/drizzle/db';\nimport { AccountRepository } from '../identity/drizzle/AccountRepository';\nimport { UsageRepository } from '../storage/quota/UsageRepository';\nimport type { QuotaService, AccountQuota } from './QuotaService';\n\n/**\n * 环境变量默认值\n */\nfunction envNumber(key: string): number | null {\n const val = process.env[key];\n if (val === undefined || val === '') {\n return null;\n }\n const num = Number(val);\n return Number.isFinite(num) && num >= 0 ? num : null;\n}\n\ninterface DrizzleQuotaServiceOptions {\n identityDbUrl: string;\n}\n\n/**\n * 统一 QuotaService 实现\n *\n * 查询优先级:DB 值 > 环境变量默认值 > 不限制 (null)\n */\nexport class DrizzleQuotaService implements QuotaService {\n private readonly logger = getLoggerFor(this);\n private readonly accountRepo: AccountRepository;\n private readonly usageRepo: UsageRepository;\n\n public constructor(options: DrizzleQuotaServiceOptions) {\n const db = getIdentityDatabase(options.identityDbUrl);\n this.accountRepo = new AccountRepository(db);\n this.usageRepo = new UsageRepository(db);\n }\n\n public async getAccountQuota(accountId: string): Promise<AccountQuota> {\n const usage = await this.usageRepo.getAccountUsage(accountId);\n return {\n storageLimitBytes: this.resolve(usage?.storageLimitBytes, 'XPOD_DEFAULT_STORAGE_LIMIT_BYTES'),\n bandwidthLimitBps: this.resolve(usage?.bandwidthLimitBps, 'XPOD_DEFAULT_BANDWIDTH_LIMIT_BPS'),\n computeLimitSeconds: this.resolve(usage?.computeLimitSeconds, 'XPOD_DEFAULT_COMPUTE_LIMIT_SECONDS'),\n tokenLimitMonthly: this.resolve(usage?.tokenLimitMonthly, 'XPOD_DEFAULT_TOKEN_LIMIT_MONTHLY'),\n };\n }\n\n public async setAccountQuota(accountId: string, quota: Partial<AccountQuota>): Promise<void> {\n if (quota.storageLimitBytes !== undefined) {\n await this.usageRepo.setAccountStorageLimit(accountId, quota.storageLimitBytes);\n }\n if (quota.bandwidthLimitBps !== undefined) {\n await this.usageRepo.setAccountBandwidthLimit(accountId, quota.bandwidthLimitBps);\n }\n if (quota.computeLimitSeconds !== undefined) {\n await this.usageRepo.setAccountComputeLimit(accountId, quota.computeLimitSeconds);\n }\n if (quota.tokenLimitMonthly !== undefined) {\n await this.usageRepo.setAccountTokenLimit(accountId, quota.tokenLimitMonthly);\n }\n }\n\n public async getPodQuota(podId: string): Promise<AccountQuota> {\n const usage = await this.usageRepo.getPodUsage(podId);\n return {\n storageLimitBytes: this.resolve(usage?.storageLimitBytes, 'XPOD_DEFAULT_STORAGE_LIMIT_BYTES'),\n bandwidthLimitBps: this.resolve(usage?.bandwidthLimitBps, 'XPOD_DEFAULT_BANDWIDTH_LIMIT_BPS'),\n computeLimitSeconds: this.resolve(usage?.computeLimitSeconds, 'XPOD_DEFAULT_COMPUTE_LIMIT_SECONDS'),\n tokenLimitMonthly: this.resolve(usage?.tokenLimitMonthly, 'XPOD_DEFAULT_TOKEN_LIMIT_MONTHLY'),\n };\n }\n\n public async setPodQuota(podId: string, quota: Partial<AccountQuota>): Promise<void> {\n // Try to get pod info from CSS\n const podInfo = await this.accountRepo.getPodInfo(podId);\n\n // If pod doesn't exist in CSS, try to get accountId from usage table\n let accountId = podInfo?.accountId;\n if (!accountId) {\n const usage = await this.usageRepo.getPodUsage(podId);\n accountId = usage?.accountId;\n }\n\n // If still no accountId, use a placeholder (quota can be set before pod creation)\n if (!accountId) {\n accountId = 'unknown';\n }\n\n if (quota.storageLimitBytes !== undefined) {\n await this.usageRepo.setPodStorageLimit(podId, accountId, quota.storageLimitBytes);\n }\n if (quota.bandwidthLimitBps !== undefined) {\n await this.usageRepo.setPodBandwidthLimit(podId, accountId, quota.bandwidthLimitBps);\n }\n if (quota.computeLimitSeconds !== undefined) {\n await this.usageRepo.setPodComputeLimit(podId, accountId, quota.computeLimitSeconds);\n }\n if (quota.tokenLimitMonthly !== undefined) {\n await this.usageRepo.setPodTokenLimit(podId, accountId, quota.tokenLimitMonthly);\n }\n }\n\n public async clearAccountQuota(accountId: string): Promise<void> {\n await this.setAccountQuota(accountId, {\n storageLimitBytes: null,\n bandwidthLimitBps: null,\n computeLimitSeconds: null,\n tokenLimitMonthly: null,\n });\n }\n\n public async clearPodQuota(podId: string): Promise<void> {\n await this.setPodQuota(podId, {\n storageLimitBytes: null,\n bandwidthLimitBps: null,\n computeLimitSeconds: null,\n tokenLimitMonthly: null,\n });\n }\n\n // 向后兼容\n public async getAccountLimit(accountId: string): Promise<number | null | undefined> {\n const quota = await this.getAccountQuota(accountId);\n return quota.storageLimitBytes;\n }\n\n public async getPodLimit(podId: string): Promise<number | null | undefined> {\n const quota = await this.getPodQuota(podId);\n return quota.storageLimitBytes;\n }\n\n public async setAccountLimit(accountId: string, limit: number | null): Promise<void> {\n await this.usageRepo.setAccountStorageLimit(accountId, limit);\n }\n\n public async setPodLimit(podId: string, limit: number | null): Promise<void> {\n const podInfo = await this.accountRepo.getPodInfo(podId);\n if (!podInfo?.accountId) {\n throw new Error(`Pod ${podId} not found or has no associated account`);\n }\n await this.usageRepo.setPodStorageLimit(podId, podInfo.accountId, limit);\n }\n\n /**\n * 解析配额值:DB 值 > 环境变量默认值 > null (不限制)\n */\n private resolve(dbValue: number | null | undefined, envKey: string): number | null {\n // DB 中有明确值(包括 0)\n if (typeof dbValue === 'number') {\n return dbValue;\n }\n // 回退到环境变量\n return envNumber(envKey);\n }\n}\n"]}
|
|
@@ -11,25 +11,18 @@
|
|
|
11
11
|
"extends": [
|
|
12
12
|
"undefineds:dist/quota/QuotaService.jsonld#QuotaService"
|
|
13
13
|
],
|
|
14
|
+
"comment": "统一 QuotaService 实现 查询优先级:DB 值 > 环境变量默认值 > 不限制 (null)",
|
|
14
15
|
"parameters": [
|
|
15
16
|
{
|
|
16
17
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService_options_identityDbUrl",
|
|
17
18
|
"range": "xsd:string"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService_options_defaultAccountQuotaBytes",
|
|
21
|
-
"range": {
|
|
22
|
-
"@type": "ParameterRangeUnion",
|
|
23
|
-
"parameterRangeElements": [
|
|
24
|
-
"xsd:number",
|
|
25
|
-
{
|
|
26
|
-
"@type": "ParameterRangeUndefined"
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
19
|
}
|
|
31
20
|
],
|
|
32
21
|
"memberFields": [
|
|
22
|
+
{
|
|
23
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_logger",
|
|
24
|
+
"memberFieldName": "logger"
|
|
25
|
+
},
|
|
33
26
|
{
|
|
34
27
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_accountRepo",
|
|
35
28
|
"memberFieldName": "accountRepo"
|
|
@@ -38,14 +31,34 @@
|
|
|
38
31
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_usageRepo",
|
|
39
32
|
"memberFieldName": "usageRepo"
|
|
40
33
|
},
|
|
41
|
-
{
|
|
42
|
-
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_defaultQuota",
|
|
43
|
-
"memberFieldName": "defaultQuota"
|
|
44
|
-
},
|
|
45
34
|
{
|
|
46
35
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_constructor",
|
|
47
36
|
"memberFieldName": "constructor"
|
|
48
37
|
},
|
|
38
|
+
{
|
|
39
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_getAccountQuota",
|
|
40
|
+
"memberFieldName": "getAccountQuota"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_setAccountQuota",
|
|
44
|
+
"memberFieldName": "setAccountQuota"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_getPodQuota",
|
|
48
|
+
"memberFieldName": "getPodQuota"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_setPodQuota",
|
|
52
|
+
"memberFieldName": "setPodQuota"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_clearAccountQuota",
|
|
56
|
+
"memberFieldName": "clearAccountQuota"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_clearPodQuota",
|
|
60
|
+
"memberFieldName": "clearPodQuota"
|
|
61
|
+
},
|
|
49
62
|
{
|
|
50
63
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_getAccountLimit",
|
|
51
64
|
"memberFieldName": "getAccountLimit"
|
|
@@ -61,6 +74,10 @@
|
|
|
61
74
|
{
|
|
62
75
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_setPodLimit",
|
|
63
76
|
"memberFieldName": "setPodLimit"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService__member_resolve",
|
|
80
|
+
"memberFieldName": "resolve"
|
|
64
81
|
}
|
|
65
82
|
],
|
|
66
83
|
"constructorArguments": [
|
|
@@ -72,12 +89,6 @@
|
|
|
72
89
|
"value": {
|
|
73
90
|
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService_options_identityDbUrl"
|
|
74
91
|
}
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"keyRaw": "defaultAccountQuotaBytes",
|
|
78
|
-
"value": {
|
|
79
|
-
"@id": "undefineds:dist/quota/DrizzleQuotaService.jsonld#DrizzleQuotaService_options_defaultAccountQuotaBytes"
|
|
80
|
-
}
|
|
81
92
|
}
|
|
82
93
|
]
|
|
83
94
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import type { QuotaService } from './QuotaService';
|
|
1
|
+
import type { QuotaService, AccountQuota } from './QuotaService';
|
|
2
2
|
export declare class NoopQuotaService implements QuotaService {
|
|
3
|
+
getAccountQuota(): Promise<AccountQuota>;
|
|
4
|
+
setAccountQuota(): Promise<void>;
|
|
5
|
+
getPodQuota(): Promise<AccountQuota>;
|
|
6
|
+
setPodQuota(): Promise<void>;
|
|
7
|
+
clearAccountQuota(): Promise<void>;
|
|
8
|
+
clearPodQuota(): Promise<void>;
|
|
3
9
|
getAccountLimit(): Promise<number | null | undefined>;
|
|
4
10
|
getPodLimit(): Promise<number | null | undefined>;
|
|
5
11
|
setAccountLimit(): Promise<void>;
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NoopQuotaService = void 0;
|
|
4
|
+
const NO_LIMIT = {
|
|
5
|
+
storageLimitBytes: null,
|
|
6
|
+
bandwidthLimitBps: null,
|
|
7
|
+
computeLimitSeconds: null,
|
|
8
|
+
tokenLimitMonthly: null,
|
|
9
|
+
};
|
|
4
10
|
class NoopQuotaService {
|
|
11
|
+
async getAccountQuota() { return NO_LIMIT; }
|
|
12
|
+
async setAccountQuota() { }
|
|
13
|
+
async getPodQuota() { return NO_LIMIT; }
|
|
14
|
+
async setPodQuota() { }
|
|
15
|
+
async clearAccountQuota() { }
|
|
16
|
+
async clearPodQuota() { }
|
|
5
17
|
async getAccountLimit() {
|
|
6
18
|
return Number.POSITIVE_INFINITY;
|
|
7
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoopQuotaService.js","sourceRoot":"","sources":["../../src/quota/NoopQuotaService.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IACpB,KAAK,CAAC,eAAe;QAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"NoopQuotaService.js","sourceRoot":"","sources":["../../src/quota/NoopQuotaService.ts"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAiB;IAC7B,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,IAAI;IACzB,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,MAAa,gBAAgB;IACpB,KAAK,CAAC,eAAe,KAA4B,OAAO,QAAQ,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,eAAe,KAAmB,CAAC;IACzC,KAAK,CAAC,WAAW,KAA4B,OAAO,QAAQ,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,WAAW,KAAmB,CAAC;IACrC,KAAK,CAAC,iBAAiB,KAAmB,CAAC;IAC3C,KAAK,CAAC,aAAa,KAAmB,CAAC;IAEvC,KAAK,CAAC,eAAe;QAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACM,KAAK,CAAC,WAAW;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACM,KAAK,CAAC,eAAe,KAAmB,CAAC;IACzC,KAAK,CAAC,WAAW,KAAmB,CAAC;CAC7C;AAhBD,4CAgBC","sourcesContent":["import type { QuotaService, AccountQuota } from './QuotaService';\n\nconst NO_LIMIT: AccountQuota = {\n storageLimitBytes: null,\n bandwidthLimitBps: null,\n computeLimitSeconds: null,\n tokenLimitMonthly: null,\n};\n\nexport class NoopQuotaService implements QuotaService {\n public async getAccountQuota(): Promise<AccountQuota> { return NO_LIMIT; }\n public async setAccountQuota(): Promise<void> {}\n public async getPodQuota(): Promise<AccountQuota> { return NO_LIMIT; }\n public async setPodQuota(): Promise<void> {}\n public async clearAccountQuota(): Promise<void> {}\n public async clearPodQuota(): Promise<void> {}\n\n public async getAccountLimit(): Promise<number | null | undefined> {\n return Number.POSITIVE_INFINITY;\n }\n public async getPodLimit(): Promise<number | null | undefined> {\n return null;\n }\n public async setAccountLimit(): Promise<void> {}\n public async setPodLimit(): Promise<void> {}\n}\n"]}
|
|
@@ -13,6 +13,30 @@
|
|
|
13
13
|
],
|
|
14
14
|
"parameters": [],
|
|
15
15
|
"memberFields": [
|
|
16
|
+
{
|
|
17
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_getAccountQuota",
|
|
18
|
+
"memberFieldName": "getAccountQuota"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_setAccountQuota",
|
|
22
|
+
"memberFieldName": "setAccountQuota"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_getPodQuota",
|
|
26
|
+
"memberFieldName": "getPodQuota"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_setPodQuota",
|
|
30
|
+
"memberFieldName": "setPodQuota"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_clearAccountQuota",
|
|
34
|
+
"memberFieldName": "clearAccountQuota"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_clearPodQuota",
|
|
38
|
+
"memberFieldName": "clearPodQuota"
|
|
39
|
+
},
|
|
16
40
|
{
|
|
17
41
|
"@id": "undefineds:dist/quota/NoopQuotaService.jsonld#NoopQuotaService__member_getAccountLimit",
|
|
18
42
|
"memberFieldName": "getAccountLimit"
|
|
@@ -1,4 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 统一配额模型
|
|
3
|
+
*
|
|
4
|
+
* 支持四种资源:存储、带宽、计算、Token
|
|
5
|
+
*/
|
|
6
|
+
export interface AccountQuota {
|
|
7
|
+
storageLimitBytes: number | null;
|
|
8
|
+
bandwidthLimitBps: number | null;
|
|
9
|
+
computeLimitSeconds: number | null;
|
|
10
|
+
tokenLimitMonthly: number | null;
|
|
11
|
+
}
|
|
1
12
|
export interface QuotaService {
|
|
13
|
+
getAccountQuota(accountId: string): Promise<AccountQuota>;
|
|
14
|
+
setAccountQuota(accountId: string, quota: Partial<AccountQuota>): Promise<void>;
|
|
15
|
+
getPodQuota(podId: string): Promise<AccountQuota>;
|
|
16
|
+
setPodQuota(podId: string, quota: Partial<AccountQuota>): Promise<void>;
|
|
17
|
+
clearAccountQuota(accountId: string): Promise<void>;
|
|
18
|
+
clearPodQuota(podId: string): Promise<void>;
|
|
2
19
|
getAccountLimit(accountId: string): Promise<number | null | undefined>;
|
|
3
20
|
getPodLimit(podId: string): Promise<number | null | undefined>;
|
|
4
21
|
setAccountLimit(accountId: string, limit: number | null): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaService.js","sourceRoot":"","sources":["../../src/quota/QuotaService.ts"],"names":[],"mappings":"","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"QuotaService.js","sourceRoot":"","sources":["../../src/quota/QuotaService.ts"],"names":[],"mappings":";AAAA;;;;GAIG","sourcesContent":["/**\n * 统一配额模型\n *\n * 支持四种资源:存储、带宽、计算、Token\n */\n\nexport interface AccountQuota {\n storageLimitBytes: number | null;\n bandwidthLimitBps: number | null;\n computeLimitSeconds: number | null;\n tokenLimitMonthly: number | null;\n}\n\nexport interface QuotaService {\n getAccountQuota(accountId: string): Promise<AccountQuota>;\n setAccountQuota(accountId: string, quota: Partial<AccountQuota>): Promise<void>;\n getPodQuota(podId: string): Promise<AccountQuota>;\n setPodQuota(podId: string, quota: Partial<AccountQuota>): Promise<void>;\n clearAccountQuota(accountId: string): Promise<void>;\n clearPodQuota(podId: string): Promise<void>;\n\n // 向后兼容:存储限制快捷方法\n getAccountLimit(accountId: string): Promise<number | null | undefined>;\n getPodLimit(podId: string): Promise<number | null | undefined>;\n setAccountLimit(accountId: string, limit: number | null): Promise<void>;\n setPodLimit(podId: string, limit: number | null): Promise<void>;\n}\n"]}
|
|
@@ -10,6 +10,30 @@
|
|
|
10
10
|
"requireElement": "QuotaService",
|
|
11
11
|
"parameters": [],
|
|
12
12
|
"memberFields": [
|
|
13
|
+
{
|
|
14
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_getAccountQuota",
|
|
15
|
+
"memberFieldName": "getAccountQuota"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_setAccountQuota",
|
|
19
|
+
"memberFieldName": "setAccountQuota"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_getPodQuota",
|
|
23
|
+
"memberFieldName": "getPodQuota"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_setPodQuota",
|
|
27
|
+
"memberFieldName": "setPodQuota"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_clearAccountQuota",
|
|
31
|
+
"memberFieldName": "clearAccountQuota"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_clearPodQuota",
|
|
35
|
+
"memberFieldName": "clearPodQuota"
|
|
36
|
+
},
|
|
13
37
|
{
|
|
14
38
|
"@id": "undefineds:dist/quota/QuotaService.jsonld#QuotaService__member_getAccountLimit",
|
|
15
39
|
"memberFieldName": "getAccountLimit"
|
|
@@ -28,6 +52,32 @@
|
|
|
28
52
|
}
|
|
29
53
|
],
|
|
30
54
|
"constructorArguments": []
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#AccountQuota",
|
|
58
|
+
"@type": "AbstractClass",
|
|
59
|
+
"requireElement": "AccountQuota",
|
|
60
|
+
"comment": "统一配额模型 支持四种资源:存储、带宽、计算、Token",
|
|
61
|
+
"parameters": [],
|
|
62
|
+
"memberFields": [
|
|
63
|
+
{
|
|
64
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#AccountQuota__member_storageLimitBytes",
|
|
65
|
+
"memberFieldName": "storageLimitBytes"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#AccountQuota__member_bandwidthLimitBps",
|
|
69
|
+
"memberFieldName": "bandwidthLimitBps"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#AccountQuota__member_computeLimitSeconds",
|
|
73
|
+
"memberFieldName": "computeLimitSeconds"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"@id": "undefineds:dist/quota/QuotaService.jsonld#AccountQuota__member_tokenLimitMonthly",
|
|
77
|
+
"memberFieldName": "tokenLimitMonthly"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"constructorArguments": []
|
|
31
81
|
}
|
|
32
82
|
]
|
|
33
83
|
}
|
package/dist/runtime/Proxy.d.ts
CHANGED
|
@@ -7,14 +7,20 @@ export declare class GatewayProxy {
|
|
|
7
7
|
private proxy;
|
|
8
8
|
private server;
|
|
9
9
|
private targets;
|
|
10
|
-
|
|
10
|
+
private readonly socketPath?;
|
|
11
|
+
private readonly exitOnStop;
|
|
12
|
+
private readonly shutdownHandler?;
|
|
13
|
+
private readonly baseUrl?;
|
|
14
|
+
constructor(port: number | undefined, supervisor: Supervisor, bindHost?: string, options?: GatewayProxyOptions);
|
|
11
15
|
setTargets(targets: {
|
|
12
|
-
css?: string;
|
|
13
|
-
api?: string;
|
|
16
|
+
css?: string | GatewayProxyTarget;
|
|
17
|
+
api?: string | GatewayProxyTarget;
|
|
14
18
|
}): void;
|
|
15
|
-
start(): void
|
|
19
|
+
start(): Promise<void>;
|
|
16
20
|
stop(): Promise<void>;
|
|
17
21
|
private handleRequest;
|
|
22
|
+
private shouldInspectRootMutation;
|
|
23
|
+
private normalizeRootMutationProxyResponse;
|
|
18
24
|
private handleCorsPreflightRequest;
|
|
19
25
|
/**
|
|
20
26
|
* Add CORS headers matching CSS CorsHandler configuration
|
|
@@ -22,4 +28,16 @@ export declare class GatewayProxy {
|
|
|
22
28
|
private addCorsHeaders;
|
|
23
29
|
private handleInternalApi;
|
|
24
30
|
private isCssReady;
|
|
31
|
+
private normalizeTarget;
|
|
32
|
+
private toProxyTarget;
|
|
33
|
+
}
|
|
34
|
+
export interface GatewayProxyTarget {
|
|
35
|
+
url?: string;
|
|
36
|
+
socketPath?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface GatewayProxyOptions {
|
|
39
|
+
socketPath?: string;
|
|
40
|
+
exitOnStop?: boolean;
|
|
41
|
+
shutdownHandler?: () => Promise<void>;
|
|
42
|
+
baseUrl?: string;
|
|
25
43
|
}
|