@xemahq/biome-database-nest 0.29.0 → 0.31.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 +6 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter.d.ts.map +1 -1
- package/dist/lib/adapter.js +7 -2
- package/dist/lib/adapter.js.map +1 -1
- package/dist/lib/bootstrap.d.ts +6 -1
- package/dist/lib/bootstrap.d.ts.map +1 -1
- package/dist/lib/bootstrap.js +95 -24
- package/dist/lib/bootstrap.js.map +1 -1
- package/dist/lib/credential-client.d.ts +22 -0
- package/dist/lib/credential-client.d.ts.map +1 -0
- package/dist/lib/credential-client.js +85 -0
- package/dist/lib/credential-client.js.map +1 -0
- package/dist/lib/credential-lease.d.ts +47 -0
- package/dist/lib/credential-lease.d.ts.map +1 -0
- package/dist/lib/credential-lease.js +166 -0
- package/dist/lib/credential-lease.js.map +1 -0
- package/dist/lib/nest/biome-database.module.d.ts +4 -2
- package/dist/lib/nest/biome-database.module.d.ts.map +1 -1
- package/dist/lib/nest/biome-database.module.js +5 -0
- package/dist/lib/nest/biome-database.module.js.map +1 -1
- package/dist/lib/resolved-connection.d.ts +2 -0
- package/dist/lib/resolved-connection.d.ts.map +1 -1
- package/dist/lib/resolved-connection.js +11 -7
- package/dist/lib/resolved-connection.js.map +1 -1
- package/dist/lib/scoped-env.d.ts +3 -0
- package/dist/lib/scoped-env.d.ts.map +1 -0
- package/dist/lib/scoped-env.js +39 -0
- package/dist/lib/scoped-env.js.map +1 -0
- package/package.json +10 -10
- package/dist/lib/control-plane-client.d.ts +0 -7
- package/dist/lib/control-plane-client.d.ts.map +0 -1
- package/dist/lib/control-plane-client.js +0 -49
- package/dist/lib/control-plane-client.js.map +0 -1
package/README.md
CHANGED
|
@@ -36,6 +36,12 @@ cutovers that require an operator between expansion and contraction.
|
|
|
36
36
|
## When to use it
|
|
37
37
|
|
|
38
38
|
- Use it when a NestJS biome service stores data or owns database migrations.
|
|
39
|
+
The service names only its resource; the database pool issues a short-lived
|
|
40
|
+
migration credential (schema owner, direct connection) and a separate
|
|
41
|
+
DML-only runtime credential that the module renews before it expires.
|
|
42
|
+
An expired runtime credential refuses new connections and fails readiness.
|
|
43
|
+
- A local `DB_*` override is a development path and is refused when
|
|
44
|
+
`NODE_ENV=production`.
|
|
39
45
|
- Use its operator lifecycle when a destructive contraction must wait for a
|
|
40
46
|
verified backfill instead of running automatically at application startup.
|
|
41
47
|
- Wrap the complete operator command with `withOperatorMigrationLock` so apply,
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export { rolesForSchema, schemaRoleBase, schemaRoleName, SchemaRoleKind, SCHEMA_
|
|
|
4
4
|
export { resolveBiomeDatabaseConfigFromEnv, type BiomeDatabaseConfig, } from './lib/config';
|
|
5
5
|
export { createBiomePrismaAdapter, createBiomePrismaAdapterFromEnv, resolveBiomePrismaAdapter, } from './lib/adapter';
|
|
6
6
|
export { clearResolvedBiomeConnections, publishResolvedBiomeConnection, readResolvedBiomeConnection, type ResolvedBiomeConnection, } from './lib/resolved-connection';
|
|
7
|
-
export {
|
|
7
|
+
export { DatabaseCredentialMode, DatabaseCredentialPurpose, fetchDatabaseCredential, logicalNameForDatabase, SERVICE_BINDING_SCOPE, type DatabaseCredentialRequest, type IssuedDatabaseCredential, } from './lib/credential-client';
|
|
8
|
+
export { assertBiomeDatabaseLeasesLive, DatabaseCredentialExpiredError, DatabaseCredentialLease, expiredBiomeDatabaseLeases, leasedClientClass, stopBiomeDatabaseLeases, type CredentialLeaseLogger, type DatabaseCredentialLeaseOptions, } from './lib/credential-lease';
|
|
8
9
|
export { resolveControlPlaneBaseUrl, ORG_DATABASE_POOL_SERVICE_NAME, type ControlPlaneDiscoveryOptions, } from './lib/control-plane-discovery';
|
|
9
10
|
export { bootstrapBiomeDatabases, type BiomeDatabaseDeclaration, type BiomeDatabasePreMigrationCheck, type BiomeDatabasePreMigrationContext, type BootstrapBiomeDatabasesOptions, } from './lib/bootstrap';
|
|
10
11
|
export type { PrismaMigrationHistoryPolicy } from './lib/migration-history';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,EACzB,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.ProtectedOrgErasureRefusedError = exports.OrgProtectionUnavailableError = exports.OrgProtectionGuard = exports.OrgErasureController = exports.ORGANIZATION_PROTECTED_ERROR_CODE = exports.ORG_ERASURE_RUNNER = exports.ORG_ERASURE_ROUTE_PATH = exports.ORG_DATA_ERASURE_CAPABILITY = exports.IDENTITY_SERVICE_NAME = exports.IdentityOrgProtectionProbe = exports.assertOrgNotProtected = exports.OrgErasureModule = exports.eraseOwnedAuthoredResourceGraph = exports.OrgErasureMatchesNothingError = exports.OrgErasureBlockedError = exports.eraseOrgData = exports.assertOrgErasureMatchesModels = exports.UndeclaredUnscopedModelsError = exports.normalizeUnscopedModelDeclarations = exports.formatUnscopedModelReport = exports.collectUnscopableModels = exports.assertUnscopedModelsDeclared = exports.readRuntimeModels = exports.createTenantIsolationExtension = void 0;
|
|
3
|
+
exports.createBiomePrismaService = exports.runBiomeDatabasePreflight = exports.BIOME_DATABASE_READY = exports.BiomeDatabaseModule = exports.ExpiringLeaseStore = exports.defaultLeaseHolderId = exports.withOperatorMigrationLock = exports.verifyOperatorMigration = exports.runOperatorMigration = exports.parseOperatorMigrationMode = exports.OperatorMigrationPhase = exports.OperatorMigrationMode = exports.openOperatorMigrationClient = exports.contractOperatorMigration = exports.BiomeDatabaseMigrationMode = exports.bootstrapBiomeDatabases = exports.ORG_DATABASE_POOL_SERVICE_NAME = exports.resolveControlPlaneBaseUrl = exports.stopBiomeDatabaseLeases = exports.leasedClientClass = exports.expiredBiomeDatabaseLeases = exports.DatabaseCredentialLease = exports.DatabaseCredentialExpiredError = exports.assertBiomeDatabaseLeasesLive = exports.SERVICE_BINDING_SCOPE = exports.logicalNameForDatabase = exports.fetchDatabaseCredential = exports.DatabaseCredentialPurpose = exports.DatabaseCredentialMode = exports.readResolvedBiomeConnection = exports.publishResolvedBiomeConnection = exports.clearResolvedBiomeConnections = exports.resolveBiomePrismaAdapter = exports.createBiomePrismaAdapterFromEnv = exports.createBiomePrismaAdapter = exports.resolveBiomeDatabaseConfigFromEnv = exports.SCHEMA_ROLE_SUFFIX_LENGTH = exports.SCHEMA_ROLE_BASE_MAX_LENGTH = exports.SchemaRoleKind = exports.schemaRoleName = exports.schemaRoleBase = exports.rolesForSchema = exports.sanitizeIdentifierSegment = exports.sanitizeIdentifierChars = exports.POSTGRES_MAX_IDENTIFIER_LENGTH = exports.IDENTIFIER_HASH_LENGTH = exports.fitIdentifier = exports.composeIdentifier = exports.deriveBiomeSchemaName = exports.DEFAULT_BIOME_DB_KEY = void 0;
|
|
4
|
+
exports.ProtectedOrgErasureRefusedError = exports.OrgProtectionUnavailableError = exports.OrgProtectionGuard = exports.OrgErasureController = exports.ORGANIZATION_PROTECTED_ERROR_CODE = exports.ORG_ERASURE_RUNNER = exports.ORG_ERASURE_ROUTE_PATH = exports.ORG_DATA_ERASURE_CAPABILITY = exports.IDENTITY_SERVICE_NAME = exports.IdentityOrgProtectionProbe = exports.assertOrgNotProtected = exports.OrgErasureModule = exports.eraseOwnedAuthoredResourceGraph = exports.OrgErasureMatchesNothingError = exports.OrgErasureBlockedError = exports.eraseOrgData = exports.assertOrgErasureMatchesModels = exports.UndeclaredUnscopedModelsError = exports.normalizeUnscopedModelDeclarations = exports.formatUnscopedModelReport = exports.collectUnscopableModels = exports.assertUnscopedModelsDeclared = exports.readRuntimeModels = exports.createTenantIsolationExtension = exports.collectOrgScopedModels = exports.DEFAULT_ORG_FIELD = exports.scopeArgsToOrg = exports.PrismaModelOperation = exports.formatTenantIsolationViolation = exports.TenantIsolationViolationKind = exports.TenantIsolationError = exports.resolveTenantIsolationMode = exports.TENANT_ISOLATION_MODE_ENV_VAR = exports.TenantIsolationMode = void 0;
|
|
5
5
|
var schema_name_1 = require("./lib/schema-name");
|
|
6
6
|
Object.defineProperty(exports, "DEFAULT_BIOME_DB_KEY", { enumerable: true, get: function () { return schema_name_1.DEFAULT_BIOME_DB_KEY; } });
|
|
7
7
|
Object.defineProperty(exports, "deriveBiomeSchemaName", { enumerable: true, get: function () { return schema_name_1.deriveBiomeSchemaName; } });
|
|
@@ -29,8 +29,19 @@ var resolved_connection_1 = require("./lib/resolved-connection");
|
|
|
29
29
|
Object.defineProperty(exports, "clearResolvedBiomeConnections", { enumerable: true, get: function () { return resolved_connection_1.clearResolvedBiomeConnections; } });
|
|
30
30
|
Object.defineProperty(exports, "publishResolvedBiomeConnection", { enumerable: true, get: function () { return resolved_connection_1.publishResolvedBiomeConnection; } });
|
|
31
31
|
Object.defineProperty(exports, "readResolvedBiomeConnection", { enumerable: true, get: function () { return resolved_connection_1.readResolvedBiomeConnection; } });
|
|
32
|
-
var
|
|
33
|
-
Object.defineProperty(exports, "
|
|
32
|
+
var credential_client_1 = require("./lib/credential-client");
|
|
33
|
+
Object.defineProperty(exports, "DatabaseCredentialMode", { enumerable: true, get: function () { return credential_client_1.DatabaseCredentialMode; } });
|
|
34
|
+
Object.defineProperty(exports, "DatabaseCredentialPurpose", { enumerable: true, get: function () { return credential_client_1.DatabaseCredentialPurpose; } });
|
|
35
|
+
Object.defineProperty(exports, "fetchDatabaseCredential", { enumerable: true, get: function () { return credential_client_1.fetchDatabaseCredential; } });
|
|
36
|
+
Object.defineProperty(exports, "logicalNameForDatabase", { enumerable: true, get: function () { return credential_client_1.logicalNameForDatabase; } });
|
|
37
|
+
Object.defineProperty(exports, "SERVICE_BINDING_SCOPE", { enumerable: true, get: function () { return credential_client_1.SERVICE_BINDING_SCOPE; } });
|
|
38
|
+
var credential_lease_1 = require("./lib/credential-lease");
|
|
39
|
+
Object.defineProperty(exports, "assertBiomeDatabaseLeasesLive", { enumerable: true, get: function () { return credential_lease_1.assertBiomeDatabaseLeasesLive; } });
|
|
40
|
+
Object.defineProperty(exports, "DatabaseCredentialExpiredError", { enumerable: true, get: function () { return credential_lease_1.DatabaseCredentialExpiredError; } });
|
|
41
|
+
Object.defineProperty(exports, "DatabaseCredentialLease", { enumerable: true, get: function () { return credential_lease_1.DatabaseCredentialLease; } });
|
|
42
|
+
Object.defineProperty(exports, "expiredBiomeDatabaseLeases", { enumerable: true, get: function () { return credential_lease_1.expiredBiomeDatabaseLeases; } });
|
|
43
|
+
Object.defineProperty(exports, "leasedClientClass", { enumerable: true, get: function () { return credential_lease_1.leasedClientClass; } });
|
|
44
|
+
Object.defineProperty(exports, "stopBiomeDatabaseLeases", { enumerable: true, get: function () { return credential_lease_1.stopBiomeDatabaseLeases; } });
|
|
34
45
|
var control_plane_discovery_1 = require("./lib/control-plane-discovery");
|
|
35
46
|
Object.defineProperty(exports, "resolveControlPlaneBaseUrl", { enumerable: true, get: function () { return control_plane_discovery_1.resolveControlPlaneBaseUrl; } });
|
|
36
47
|
Object.defineProperty(exports, "ORG_DATABASE_POOL_SERVICE_NAME", { enumerable: true, get: function () { return control_plane_discovery_1.ORG_DATABASE_POOL_SERVICE_NAME; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,iDAAgF;AAAvE,mHAAA,oBAAoB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AACpD,+CAS0B;AARxB,+GAAA,iBAAiB,OAAA;AACjB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AACtB,4HAAA,8BAA8B,OAAA;AAC9B,qHAAA,uBAAuB,OAAA;AACvB,uHAAA,yBAAyB,OAAA;AAI3B,+CAQ0B;AAPxB,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,yHAAA,2BAA2B,OAAA;AAC3B,uHAAA,yBAAyB,OAAA;AAG3B,uCAGsB;AAFpB,2HAAA,iCAAiC,OAAA;AAGnC,yCAIuB;AAHrB,mHAAA,wBAAwB,OAAA;AACxB,0HAAA,+BAA+B,OAAA;AAC/B,oHAAA,yBAAyB,OAAA;AAE3B,iEAKmC;AAJjC,oIAAA,6BAA6B,OAAA;AAC7B,qIAAA,8BAA8B,OAAA;AAC9B,kIAAA,2BAA2B,OAAA;AAG7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/lib/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/lib/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAW9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AA+EpD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,GAC1B,QAAQ,CAMV;AAsBD,wBAAgB,yBAAyB,CACvC,KAAK,CAAC,EAAE,MAAM,EAId,GAAG,GAAE,MAAM,CAAC,UAAsD,GACjE,QAAQ,CAkBV;AAmBD,wBAAgB,+BAA+B,CAC7C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,CAAC,EAAE,MAAM,GACb,QAAQ,CA8BV"}
|
package/dist/lib/adapter.js
CHANGED
|
@@ -6,7 +6,9 @@ exports.createBiomePrismaAdapterFromEnv = createBiomePrismaAdapterFromEnv;
|
|
|
6
6
|
const adapter_pg_1 = require("@prisma/adapter-pg");
|
|
7
7
|
const platform_common_1 = require("@xemahq/platform-common");
|
|
8
8
|
const config_1 = require("./config");
|
|
9
|
+
const credential_lease_1 = require("./credential-lease");
|
|
9
10
|
const resolved_connection_1 = require("./resolved-connection");
|
|
11
|
+
const scoped_env_1 = require("./scoped-env");
|
|
10
12
|
const DEFAULT_POOL_MAX = 3;
|
|
11
13
|
const POOL_MIN = 0;
|
|
12
14
|
const POOL_IDLE_TIMEOUT_MS = 30_000;
|
|
@@ -38,13 +40,16 @@ function createBiomePrismaAdapter(config) {
|
|
|
38
40
|
const connectionString = buildBiomeConnectionString(config);
|
|
39
41
|
return new adapter_pg_1.PrismaPg(poolOptions(connectionString, config.poolMax ?? DEFAULT_POOL_MAX), config.schema !== undefined ? { schema: config.schema } : undefined);
|
|
40
42
|
}
|
|
41
|
-
function resolveBiomePrismaAdapter(dbKey, env =
|
|
43
|
+
function resolveBiomePrismaAdapter(dbKey, env = (0, scoped_env_1.scopedEnvView)('The biome Prisma adapter')) {
|
|
42
44
|
const resolved = (0, resolved_connection_1.readResolvedBiomeConnection)(dbKey);
|
|
43
45
|
if (resolved === undefined) {
|
|
44
46
|
return createBiomePrismaAdapterFromEnv(env, dbKey);
|
|
45
47
|
}
|
|
46
48
|
const connectionString = (0, platform_common_1.ensureBiomeDbSearchPath)(resolved.url);
|
|
47
|
-
|
|
49
|
+
const options = poolOptions(connectionString, resolved.poolMax ?? DEFAULT_POOL_MAX);
|
|
50
|
+
return new adapter_pg_1.PrismaPg(resolved.lease !== undefined
|
|
51
|
+
? { ...options, Client: (0, credential_lease_1.leasedClientClass)(resolved.lease) }
|
|
52
|
+
: options, resolved.schema !== undefined && resolved.schema !== ''
|
|
48
53
|
? { schema: resolved.schema }
|
|
49
54
|
: undefined);
|
|
50
55
|
}
|
package/dist/lib/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/lib/adapter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/lib/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/bootstrap.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface BiomeDatabaseDeclaration {
|
|
|
19
19
|
}
|
|
20
20
|
interface BootstrapBiomeDatabasesCommonOptions {
|
|
21
21
|
readonly biomeId: string;
|
|
22
|
+
readonly env?: () => NodeJS.ProcessEnv;
|
|
22
23
|
readonly serviceToken?: string | (() => Promise<string>);
|
|
23
24
|
readonly kernelState: KernelState;
|
|
24
25
|
readonly controlPlaneDiscovery?: ControlPlaneDiscoveryOptions;
|
|
@@ -29,7 +30,11 @@ export interface ApplicationManagedBootstrapOptions extends BootstrapBiomeDataba
|
|
|
29
30
|
readonly requiredExtensions?: readonly string[];
|
|
30
31
|
}
|
|
31
32
|
export type BootstrapBiomeDatabasesOptions = ApplicationManagedBootstrapOptions;
|
|
32
|
-
export declare
|
|
33
|
+
export declare enum SchemaPosture {
|
|
34
|
+
CreateIfMissing = "create-if-missing",
|
|
35
|
+
VerifyOnly = "verify-only"
|
|
36
|
+
}
|
|
37
|
+
export declare function ensureSchemaExists(biomeId: string, key: string, config: BiomeDatabaseConfig, requiredExtensions: readonly string[], posture?: SchemaPosture): Promise<void>;
|
|
33
38
|
export declare function bootstrapBiomeDatabases(opts: BootstrapBiomeDatabasesOptions): Promise<void>;
|
|
34
39
|
export {};
|
|
35
40
|
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAU,KAAK,cAAc,EAAE,MAAM,IAAI,CAAC;AAGjD,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AAYnC,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AASlE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,IAAI,SAAS,cAAc,GAAG,cAAc,EAChD,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;CAC7B;AAED,MAAM,MAAM,8BAA8B,GAAG,CAC3C,OAAO,EAAE,gCAAgC,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;AAGnB,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAO9B,QAAQ,CAAC,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAWtD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;CAC7D;AAGD,UAAU,oCAAoC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IA6BzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC,UAAU,CAAC;IAMvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAOzD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,4BAA4B,CAAC;CAC/D;AAED,MAAM,WAAW,kCACf,SAAQ,oCAAoC;IAC5C,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC,kBAAkB,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAqBxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAGD,MAAM,MAAM,8BAA8B,GACxC,kCAAkC,CAAC;AA4MrC,oBAAY,aAAa;IACvB,eAAe,sBAAsB;IACrC,UAAU,gBAAgB;CAC3B;AAaD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,OAAO,GAAE,aAA6C,GACrD,OAAO,CAAC,IAAI,CAAC,CAiEf;AAsPD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
package/dist/lib/bootstrap.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaPosture = void 0;
|
|
3
4
|
exports.ensureSchemaExists = ensureSchemaExists;
|
|
4
5
|
exports.bootstrapBiomeDatabases = bootstrapBiomeDatabases;
|
|
5
6
|
const node_crypto_1 = require("node:crypto");
|
|
@@ -12,12 +13,14 @@ const migration_runner_prisma_1 = require("@xemahq/migration-runner-prisma");
|
|
|
12
13
|
const platform_common_1 = require("@xemahq/platform-common");
|
|
13
14
|
const pg_1 = require("pg");
|
|
14
15
|
const config_1 = require("./config");
|
|
15
|
-
const control_plane_client_1 = require("./control-plane-client");
|
|
16
16
|
const control_plane_discovery_1 = require("./control-plane-discovery");
|
|
17
|
+
const credential_client_1 = require("./credential-client");
|
|
18
|
+
const credential_lease_1 = require("./credential-lease");
|
|
17
19
|
const migration_history_1 = require("./migration-history");
|
|
18
20
|
const required_extensions_1 = require("./required-extensions");
|
|
19
21
|
const resolved_connection_1 = require("./resolved-connection");
|
|
20
22
|
const schema_name_1 = require("./schema-name");
|
|
23
|
+
const scoped_env_1 = require("./scoped-env");
|
|
21
24
|
const LOG_PREFIX = '[biome-database]';
|
|
22
25
|
const bootstrapLogger = new common_1.Logger('BiomeDatabaseBootstrap');
|
|
23
26
|
async function resolveServiceToken(serviceToken) {
|
|
@@ -27,17 +30,27 @@ async function resolveServiceToken(serviceToken) {
|
|
|
27
30
|
}
|
|
28
31
|
return typeof serviceToken === 'function' ? serviceToken() : serviceToken;
|
|
29
32
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
function readEnv(opts) {
|
|
34
|
+
return opts.env?.() ?? (0, scoped_env_1.scopedEnvView)('The biome database bootstrap');
|
|
35
|
+
}
|
|
36
|
+
function resolveLocalOverride(opts, key) {
|
|
37
|
+
const env = readEnv(opts);
|
|
38
|
+
const local = (0, config_1.resolveBiomeDatabaseConfigFromEnv)(env, key);
|
|
39
|
+
if (local !== null && env['NODE_ENV'] === 'production') {
|
|
40
|
+
throw new Error(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: a local DB_* override is set ` +
|
|
41
|
+
'while NODE_ENV=production. Production database credentials are issued by the ' +
|
|
42
|
+
'database pool, scoped to this service, and rotated; an environment-supplied ' +
|
|
43
|
+
'credential is refused. Remove DB_HOST/DB_* from this deployment.');
|
|
34
44
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
return local;
|
|
46
|
+
}
|
|
47
|
+
async function poolCredentials(opts, key, getControlPlaneBaseUrl) {
|
|
48
|
+
const logicalName = (0, credential_client_1.logicalNameForDatabase)(opts.biomeId, key);
|
|
49
|
+
const fetchFor = async (purpose) => (0, credential_client_1.fetchDatabaseCredential)(await getControlPlaneBaseUrl(), await resolveServiceToken(opts.serviceToken), { logicalName, purpose });
|
|
50
|
+
return {
|
|
51
|
+
migration: await fetchFor(credential_client_1.DatabaseCredentialPurpose.Migration),
|
|
52
|
+
fetchRuntime: () => fetchFor(credential_client_1.DatabaseCredentialPurpose.Runtime),
|
|
53
|
+
};
|
|
41
54
|
}
|
|
42
55
|
async function materializeInlineCaCert(biomeId, key, config) {
|
|
43
56
|
if (config.caCertPem === undefined || config.caCertPem === '') {
|
|
@@ -81,7 +94,12 @@ function createDirectPgClient(config) {
|
|
|
81
94
|
ssl: buildPgSsl(config),
|
|
82
95
|
});
|
|
83
96
|
}
|
|
84
|
-
|
|
97
|
+
var SchemaPosture;
|
|
98
|
+
(function (SchemaPosture) {
|
|
99
|
+
SchemaPosture["CreateIfMissing"] = "create-if-missing";
|
|
100
|
+
SchemaPosture["VerifyOnly"] = "verify-only";
|
|
101
|
+
})(SchemaPosture || (exports.SchemaPosture = SchemaPosture = {}));
|
|
102
|
+
async function ensureSchemaExists(biomeId, key, config, requiredExtensions, posture = SchemaPosture.CreateIfMissing) {
|
|
85
103
|
const schema = config.schema;
|
|
86
104
|
const hasSchema = schema !== undefined && schema !== '';
|
|
87
105
|
if (!hasSchema && requiredExtensions.length === 0) {
|
|
@@ -101,7 +119,16 @@ async function ensureSchemaExists(biomeId, key, config, requiredExtensions) {
|
|
|
101
119
|
bootstrapLogger.log(`${LOG_PREFIX} biome=${biomeId} key=${key}: verified extension(s) ` +
|
|
102
120
|
`${requiredExtensions.join(', ')} installed in public`);
|
|
103
121
|
}
|
|
104
|
-
if (hasSchema) {
|
|
122
|
+
if (hasSchema && posture === SchemaPosture.VerifyOnly) {
|
|
123
|
+
const found = await client.query('SELECT 1 FROM pg_namespace WHERE nspname = $1', [schema]);
|
|
124
|
+
if ((found.rowCount ?? 0) === 0) {
|
|
125
|
+
throw new Error(`${LOG_PREFIX} biome=${biomeId} key=${key}: schema "${schema}" does not exist ` +
|
|
126
|
+
`in "${config.database}". The database pool creates a binding's schema before ` +
|
|
127
|
+
'it issues the credential; its absence means the pool did not provision it.');
|
|
128
|
+
}
|
|
129
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${biomeId} key=${key}: verified schema "${schema}" exists`);
|
|
130
|
+
}
|
|
131
|
+
else if (hasSchema) {
|
|
105
132
|
await client.query('BEGIN');
|
|
106
133
|
await client.query('SELECT pg_advisory_xact_lock(hashtext($1))', [
|
|
107
134
|
schema,
|
|
@@ -230,9 +257,10 @@ function buildRuntimeUrl(biomeId, key, config, directUrl) {
|
|
|
230
257
|
bootstrapLogger.log(`${LOG_PREFIX} biome=${biomeId} key=${key}: runtime routed through pooler ${config.poolerHost}:${config.poolerPort ?? config.port}`);
|
|
231
258
|
return (0, platform_common_1.ensureBiomeDbSearchPath)(pooledUrl);
|
|
232
259
|
}
|
|
233
|
-
function publishResolvedConnection(key, config, runtimeUrl) {
|
|
260
|
+
function publishResolvedConnection(key, config, runtimeUrl, lease) {
|
|
234
261
|
(0, resolved_connection_1.publishResolvedBiomeConnection)(key, {
|
|
235
262
|
url: runtimeUrl,
|
|
263
|
+
...(lease !== undefined ? { lease } : {}),
|
|
236
264
|
...(config.schema !== undefined && config.schema !== ''
|
|
237
265
|
? { schema: config.schema }
|
|
238
266
|
: {}),
|
|
@@ -250,16 +278,59 @@ async function bootstrapBiomeDatabases(opts) {
|
|
|
250
278
|
for (const decl of opts.databases) {
|
|
251
279
|
const key = decl.key ?? schema_name_1.DEFAULT_BIOME_DB_KEY;
|
|
252
280
|
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: resolving config for mode=${opts.migrationMode}`);
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
await
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
281
|
+
const local = resolveLocalOverride(opts, key);
|
|
282
|
+
if (local !== null) {
|
|
283
|
+
await bootstrapWithOneCredential(opts, key, decl, local);
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
await bootstrapWithPoolCredentials(opts, key, decl, await poolCredentials(opts, key, getControlPlaneBaseUrl));
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async function bootstrapWithOneCredential(opts, key, decl, rawConfig) {
|
|
290
|
+
const config = await materializeInlineCaCert(opts.biomeId, key, rawConfig);
|
|
291
|
+
const directUrl = buildDirectConnectionUrl(opts.biomeId, key, config);
|
|
292
|
+
await ensureSchemaExists(opts.biomeId, key, config, opts.requiredExtensions ?? [], SchemaPosture.CreateIfMissing);
|
|
293
|
+
await runPreMigrationCheck(opts.biomeId, key, decl, config);
|
|
294
|
+
await runMigrations(opts.biomeId, key, decl.workspaceDir, directUrl);
|
|
295
|
+
await assertDatabaseMatchesImage(opts.biomeId, key, decl, config);
|
|
296
|
+
const runtimeUrl = buildRuntimeUrl(opts.biomeId, key, config, directUrl);
|
|
297
|
+
publishResolvedConnection(key, config, runtimeUrl);
|
|
298
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete (local override)`);
|
|
299
|
+
}
|
|
300
|
+
async function bootstrapWithPoolCredentials(opts, key, decl, issued) {
|
|
301
|
+
const migration = await materializeInlineCaCert(opts.biomeId, key, issued.migration);
|
|
302
|
+
const migrateUrl = buildDirectConnectionUrl(opts.biomeId, key, migration);
|
|
303
|
+
await ensureSchemaExists(opts.biomeId, key, migration, opts.requiredExtensions ?? [], SchemaPosture.VerifyOnly);
|
|
304
|
+
await runPreMigrationCheck(opts.biomeId, key, decl, migration);
|
|
305
|
+
await runMigrations(opts.biomeId, key, decl.workspaceDir, migrateUrl);
|
|
306
|
+
await assertDatabaseMatchesImage(opts.biomeId, key, decl, migration);
|
|
307
|
+
const runtimeIssued = await issued.fetchRuntime();
|
|
308
|
+
const runtime = await materializeInlineCaCert(opts.biomeId, key, runtimeIssued);
|
|
309
|
+
if (runtimeIssued.credentialMode === credential_client_1.DatabaseCredentialMode.Scoped) {
|
|
310
|
+
const logicalName = (0, credential_client_1.logicalNameForDatabase)(opts.biomeId, key);
|
|
311
|
+
const lease = new credential_lease_1.DatabaseCredentialLease({
|
|
312
|
+
logicalName,
|
|
313
|
+
initial: runtimeIssued,
|
|
314
|
+
renew: issued.fetchRuntime,
|
|
315
|
+
logger: bootstrapLogger,
|
|
316
|
+
});
|
|
317
|
+
lease.start();
|
|
318
|
+
(0, credential_lease_1.registerBiomeDatabaseLease)(lease);
|
|
319
|
+
const runtimeUrl = buildRuntimeUrl(opts.biomeId, key, { ...runtime, username: LEASED_USER_PLACEHOLDER, password: LEASED_PASSWORD_PLACEHOLDER }, buildDirectConnectionUrl(opts.biomeId, key, {
|
|
320
|
+
...runtime,
|
|
321
|
+
username: LEASED_USER_PLACEHOLDER,
|
|
322
|
+
password: LEASED_PASSWORD_PLACEHOLDER,
|
|
323
|
+
}));
|
|
324
|
+
publishResolvedConnection(key, runtime, runtimeUrl, lease);
|
|
325
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete ` +
|
|
326
|
+
`(scoped credential, lease until ${lease.expiresAt})`);
|
|
327
|
+
return;
|
|
263
328
|
}
|
|
329
|
+
const runtimeDirect = buildDirectConnectionUrl(opts.biomeId, key, runtime);
|
|
330
|
+
const runtimeUrl = buildRuntimeUrl(opts.biomeId, key, runtime, runtimeDirect);
|
|
331
|
+
publishResolvedConnection(key, runtime, runtimeUrl);
|
|
332
|
+
bootstrapLogger.log(`${LOG_PREFIX} biome=${opts.biomeId} key=${key}: bootstrap complete (legacy shared credential)`);
|
|
264
333
|
}
|
|
334
|
+
const LEASED_USER_PLACEHOLDER = 'leased';
|
|
335
|
+
const LEASED_PASSWORD_PLACEHOLDER = 'leased';
|
|
265
336
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/lib/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BiomeDatabaseConfig } from './config';
|
|
2
|
+
export declare enum DatabaseCredentialPurpose {
|
|
3
|
+
Migration = "migration",
|
|
4
|
+
Runtime = "runtime"
|
|
5
|
+
}
|
|
6
|
+
export declare enum DatabaseCredentialMode {
|
|
7
|
+
Legacy = "legacy",
|
|
8
|
+
Scoped = "scoped"
|
|
9
|
+
}
|
|
10
|
+
export declare const SERVICE_BINDING_SCOPE = "system";
|
|
11
|
+
export interface DatabaseCredentialRequest {
|
|
12
|
+
readonly logicalName: string;
|
|
13
|
+
readonly purpose: DatabaseCredentialPurpose;
|
|
14
|
+
}
|
|
15
|
+
export interface IssuedDatabaseCredential extends BiomeDatabaseConfig {
|
|
16
|
+
readonly credentialMode: DatabaseCredentialMode;
|
|
17
|
+
readonly expiresAt?: string;
|
|
18
|
+
readonly renewAfter?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function fetchDatabaseCredential(baseUrl: string, serviceToken: string, request: DatabaseCredentialRequest): Promise<IssuedDatabaseCredential>;
|
|
21
|
+
export declare function logicalNameForDatabase(biomeId: string, dbKey: string): string;
|
|
22
|
+
//# sourceMappingURL=credential-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-client.d.ts","sourceRoot":"","sources":["../../src/lib/credential-client.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD,oBAAY,yBAAyB;IACnC,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAGD,oBAAY,sBAAsB;IAEhC,MAAM,WAAW;IAEjB,MAAM,WAAW;CAClB;AAGD,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAE9C,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;CAC7C;AAGD,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAEhD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAkBD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CA2BnC;AA0DD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SERVICE_BINDING_SCOPE = exports.DatabaseCredentialMode = exports.DatabaseCredentialPurpose = void 0;
|
|
4
|
+
exports.fetchDatabaseCredential = fetchDatabaseCredential;
|
|
5
|
+
exports.logicalNameForDatabase = logicalNameForDatabase;
|
|
6
|
+
const platform_common_1 = require("@xemahq/platform-common");
|
|
7
|
+
var DatabaseCredentialPurpose;
|
|
8
|
+
(function (DatabaseCredentialPurpose) {
|
|
9
|
+
DatabaseCredentialPurpose["Migration"] = "migration";
|
|
10
|
+
DatabaseCredentialPurpose["Runtime"] = "runtime";
|
|
11
|
+
})(DatabaseCredentialPurpose || (exports.DatabaseCredentialPurpose = DatabaseCredentialPurpose = {}));
|
|
12
|
+
var DatabaseCredentialMode;
|
|
13
|
+
(function (DatabaseCredentialMode) {
|
|
14
|
+
DatabaseCredentialMode["Legacy"] = "legacy";
|
|
15
|
+
DatabaseCredentialMode["Scoped"] = "scoped";
|
|
16
|
+
})(DatabaseCredentialMode || (exports.DatabaseCredentialMode = DatabaseCredentialMode = {}));
|
|
17
|
+
exports.SERVICE_BINDING_SCOPE = 'system';
|
|
18
|
+
const REQUIRED_FIELDS = [
|
|
19
|
+
'host',
|
|
20
|
+
'port',
|
|
21
|
+
'username',
|
|
22
|
+
'password',
|
|
23
|
+
'database',
|
|
24
|
+
'schema',
|
|
25
|
+
'credentialMode',
|
|
26
|
+
];
|
|
27
|
+
async function fetchDatabaseCredential(baseUrl, serviceToken, request) {
|
|
28
|
+
const url = `${baseUrl.replace(/\/$/, '')}/system-databases/credentials`;
|
|
29
|
+
const response = await fetch(url, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: {
|
|
32
|
+
authorization: `Bearer ${serviceToken}`,
|
|
33
|
+
'content-type': 'application/json',
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({
|
|
36
|
+
logicalName: request.logicalName,
|
|
37
|
+
scope: exports.SERVICE_BINDING_SCOPE,
|
|
38
|
+
purpose: request.purpose,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const body = await response.text().catch(() => '<unreadable body>');
|
|
43
|
+
throw new Error(`fetchDatabaseCredential: ${url} responded ${response.status} ` +
|
|
44
|
+
`${response.statusText} for ${request.purpose} credential ` +
|
|
45
|
+
`"${request.logicalName}": ${body}`);
|
|
46
|
+
}
|
|
47
|
+
const payload = (0, platform_common_1.unwrapPlatformResponseEnvelope)(await response.json(), `fetchDatabaseCredential: ${url}`);
|
|
48
|
+
return assertIssuedCredential(payload, url, request);
|
|
49
|
+
}
|
|
50
|
+
function assertIssuedCredential(payload, url, request) {
|
|
51
|
+
const record = payload !== null && typeof payload === 'object'
|
|
52
|
+
? Object.fromEntries(Object.entries(payload))
|
|
53
|
+
: {};
|
|
54
|
+
const missing = REQUIRED_FIELDS.filter((field) => {
|
|
55
|
+
const value = record[field];
|
|
56
|
+
return value === undefined || value === null || value === '';
|
|
57
|
+
});
|
|
58
|
+
if (missing.length > 0) {
|
|
59
|
+
throw new Error(`fetchDatabaseCredential: ${url} returned a credential missing ` +
|
|
60
|
+
`${missing.join(', ')} (present: [${Object.keys(record).join(', ')}]).`);
|
|
61
|
+
}
|
|
62
|
+
const mode = record['credentialMode'];
|
|
63
|
+
if (mode !== DatabaseCredentialMode.Legacy &&
|
|
64
|
+
mode !== DatabaseCredentialMode.Scoped) {
|
|
65
|
+
throw new Error(`fetchDatabaseCredential: ${url} returned unknown credentialMode "${String(mode)}".`);
|
|
66
|
+
}
|
|
67
|
+
const credential = record;
|
|
68
|
+
if (mode === DatabaseCredentialMode.Scoped) {
|
|
69
|
+
const expiresAt = Date.parse(credential.expiresAt ?? '');
|
|
70
|
+
const renewAfter = Date.parse(credential.renewAfter ?? '');
|
|
71
|
+
if (!Number.isFinite(expiresAt) ||
|
|
72
|
+
!Number.isFinite(renewAfter) ||
|
|
73
|
+
renewAfter >= expiresAt) {
|
|
74
|
+
throw new Error(`fetchDatabaseCredential: ${url} returned a scoped ${request.purpose} ` +
|
|
75
|
+
`credential for "${request.logicalName}" with an absent or incoherent ` +
|
|
76
|
+
`lease (renewAfter=${String(credential.renewAfter)}, ` +
|
|
77
|
+
`expiresAt=${String(credential.expiresAt)}).`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return credential;
|
|
81
|
+
}
|
|
82
|
+
function logicalNameForDatabase(biomeId, dbKey) {
|
|
83
|
+
return dbKey === 'primary' ? biomeId : `${biomeId}-${dbKey}`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=credential-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-client.js","sourceRoot":"","sources":["../../src/lib/credential-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Client } from 'pg';
|
|
2
|
+
import type { IssuedDatabaseCredential } from './credential-client';
|
|
3
|
+
export interface CredentialLeaseLogger {
|
|
4
|
+
log(message: string): void;
|
|
5
|
+
error(message: string): void;
|
|
6
|
+
}
|
|
7
|
+
export declare class DatabaseCredentialExpiredError extends Error {
|
|
8
|
+
readonly logicalName: string;
|
|
9
|
+
readonly expiresAt: string;
|
|
10
|
+
constructor(logicalName: string, expiresAt: string);
|
|
11
|
+
}
|
|
12
|
+
export interface DatabaseCredentialLeaseOptions {
|
|
13
|
+
readonly logicalName: string;
|
|
14
|
+
readonly initial: IssuedDatabaseCredential;
|
|
15
|
+
readonly renew: () => Promise<IssuedDatabaseCredential>;
|
|
16
|
+
readonly logger: CredentialLeaseLogger;
|
|
17
|
+
readonly now?: () => number;
|
|
18
|
+
}
|
|
19
|
+
interface CredentialSnapshot {
|
|
20
|
+
readonly user: string;
|
|
21
|
+
readonly password: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class DatabaseCredentialLease {
|
|
24
|
+
private readonly options;
|
|
25
|
+
private current;
|
|
26
|
+
private timer;
|
|
27
|
+
private stopped;
|
|
28
|
+
private readonly now;
|
|
29
|
+
constructor(options: DatabaseCredentialLeaseOptions);
|
|
30
|
+
get logicalName(): string;
|
|
31
|
+
get expiresAt(): string;
|
|
32
|
+
isLive(): boolean;
|
|
33
|
+
snapshot(): CredentialSnapshot;
|
|
34
|
+
assertLive(): void;
|
|
35
|
+
start(): void;
|
|
36
|
+
stop(): void;
|
|
37
|
+
renewNow(): Promise<void>;
|
|
38
|
+
private schedule;
|
|
39
|
+
private tick;
|
|
40
|
+
}
|
|
41
|
+
export declare function leasedClientClass(lease: DatabaseCredentialLease): typeof Client;
|
|
42
|
+
export declare function expiredBiomeDatabaseLeases(): readonly string[];
|
|
43
|
+
export declare function assertBiomeDatabaseLeasesLive(): void;
|
|
44
|
+
export declare function registerBiomeDatabaseLease(lease: DatabaseCredentialLease): void;
|
|
45
|
+
export declare function stopBiomeDatabaseLeases(): void;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=credential-lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-lease.d.ts","sourceRoot":"","sources":["../../src/lib/credential-lease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAI5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAuCpE,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAGD,qBAAa,8BAA+B,SAAQ,KAAK;IAErD,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM;gBADjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;CAQ7B;AAOD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAEvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,uBAAuB;IAMtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEN,OAAO,EAAE,8BAA8B;IAWpE,IAAI,WAAW,IAAI,MAAM,CAExB;IAGD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAGD,MAAM,IAAI,OAAO;IASjB,QAAQ,IAAI,kBAAkB;IAK9B,UAAU,IAAI,IAAI;IAUlB,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IASN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB/B,OAAO,CAAC,QAAQ;YAcF,IAAI;CAyBnB;AAOD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,MAAM,CAsD/E;AAiBD,wBAAgB,0BAA0B,IAAI,SAAS,MAAM,EAAE,CAI9D;AAGD,wBAAgB,6BAA6B,IAAI,IAAI,CAOpD;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAI/E;AAGD,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseCredentialLease = exports.DatabaseCredentialExpiredError = void 0;
|
|
4
|
+
exports.leasedClientClass = leasedClientClass;
|
|
5
|
+
exports.expiredBiomeDatabaseLeases = expiredBiomeDatabaseLeases;
|
|
6
|
+
exports.assertBiomeDatabaseLeasesLive = assertBiomeDatabaseLeasesLive;
|
|
7
|
+
exports.registerBiomeDatabaseLease = registerBiomeDatabaseLease;
|
|
8
|
+
exports.stopBiomeDatabaseLeases = stopBiomeDatabaseLeases;
|
|
9
|
+
const pg_1 = require("pg");
|
|
10
|
+
const credential_client_1 = require("./credential-client");
|
|
11
|
+
class DatabaseCredentialExpiredError extends Error {
|
|
12
|
+
logicalName;
|
|
13
|
+
expiresAt;
|
|
14
|
+
constructor(logicalName, expiresAt) {
|
|
15
|
+
super(`[biome-database] the leased runtime credential for "${logicalName}" expired at ` +
|
|
16
|
+
`${expiresAt} and could not be renewed. New database connections are refused ` +
|
|
17
|
+
'rather than attempted with a credential the server no longer accepts.');
|
|
18
|
+
this.logicalName = logicalName;
|
|
19
|
+
this.expiresAt = expiresAt;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.DatabaseCredentialExpiredError = DatabaseCredentialExpiredError;
|
|
23
|
+
const MAX_RETRY_MS = 30_000;
|
|
24
|
+
const MIN_RETRY_MS = 1_000;
|
|
25
|
+
class DatabaseCredentialLease {
|
|
26
|
+
options;
|
|
27
|
+
current;
|
|
28
|
+
timer;
|
|
29
|
+
stopped = false;
|
|
30
|
+
now;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.options = options;
|
|
33
|
+
if (options.initial.credentialMode !== credential_client_1.DatabaseCredentialMode.Scoped) {
|
|
34
|
+
throw new Error(`[biome-database] a lease holds only SCOPED credentials; "${options.logicalName}" ` +
|
|
35
|
+
`was issued in ${options.initial.credentialMode} mode.`);
|
|
36
|
+
}
|
|
37
|
+
this.current = options.initial;
|
|
38
|
+
this.now = options.now ?? Date.now;
|
|
39
|
+
}
|
|
40
|
+
get logicalName() {
|
|
41
|
+
return this.options.logicalName;
|
|
42
|
+
}
|
|
43
|
+
get expiresAt() {
|
|
44
|
+
return this.current.expiresAt;
|
|
45
|
+
}
|
|
46
|
+
isLive() {
|
|
47
|
+
return this.now() < Date.parse(this.current.expiresAt);
|
|
48
|
+
}
|
|
49
|
+
snapshot() {
|
|
50
|
+
return { user: this.current.username, password: this.current.password };
|
|
51
|
+
}
|
|
52
|
+
assertLive() {
|
|
53
|
+
if (!this.isLive()) {
|
|
54
|
+
throw new DatabaseCredentialExpiredError(this.options.logicalName, this.current.expiresAt);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
start() {
|
|
58
|
+
if (this.timer === undefined && !this.stopped) {
|
|
59
|
+
this.schedule(Date.parse(this.current.renewAfter) - this.now());
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
stop() {
|
|
63
|
+
this.stopped = true;
|
|
64
|
+
if (this.timer !== undefined) {
|
|
65
|
+
clearTimeout(this.timer);
|
|
66
|
+
this.timer = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async renewNow() {
|
|
70
|
+
const next = await this.options.renew();
|
|
71
|
+
if (next.credentialMode !== credential_client_1.DatabaseCredentialMode.Scoped) {
|
|
72
|
+
throw new Error(`[biome-database] renewal of "${this.options.logicalName}" returned a ` +
|
|
73
|
+
`${next.credentialMode} credential; a binding never returns from scoped to ` +
|
|
74
|
+
'legacy without a restart, so this is refused rather than adopted.');
|
|
75
|
+
}
|
|
76
|
+
if (next.host !== this.current.host ||
|
|
77
|
+
next.port !== this.current.port ||
|
|
78
|
+
next.database !== this.current.database ||
|
|
79
|
+
next.schema !== this.current.schema) {
|
|
80
|
+
throw new Error(`[biome-database] renewal of "${this.options.logicalName}" moved the database ` +
|
|
81
|
+
`(${this.current.database}.${String(this.current.schema)} → ` +
|
|
82
|
+
`${next.database}.${String(next.schema)}). A lease renews a credential, never ` +
|
|
83
|
+
'a location; refusing.');
|
|
84
|
+
}
|
|
85
|
+
this.current = next;
|
|
86
|
+
}
|
|
87
|
+
schedule(delayMs) {
|
|
88
|
+
if (this.stopped) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.timer = setTimeout(() => {
|
|
92
|
+
this.timer = undefined;
|
|
93
|
+
void this.tick();
|
|
94
|
+
}, Math.max(0, delayMs));
|
|
95
|
+
this.timer.unref();
|
|
96
|
+
}
|
|
97
|
+
async tick() {
|
|
98
|
+
try {
|
|
99
|
+
await this.renewNow();
|
|
100
|
+
this.options.logger.log(`[biome-database] renewed runtime credential for "${this.options.logicalName}" ` +
|
|
101
|
+
`(user ${this.current.username}, expires ${String(this.current.expiresAt)}).`);
|
|
102
|
+
this.schedule(Date.parse(this.current.renewAfter) - this.now());
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const remaining = Date.parse(this.current.expiresAt) - this.now();
|
|
106
|
+
this.options.logger.error(`[biome-database] renewing the runtime credential for ` +
|
|
107
|
+
`"${this.options.logicalName}" failed (${remaining}ms of lease left): ` +
|
|
108
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
if (remaining > 0) {
|
|
110
|
+
this.schedule(Math.min(MAX_RETRY_MS, Math.max(MIN_RETRY_MS, remaining / 4)));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.DatabaseCredentialLease = DatabaseCredentialLease;
|
|
116
|
+
function leasedClientClass(lease) {
|
|
117
|
+
return class LeasedClient extends pg_1.Client {
|
|
118
|
+
constructor(config) {
|
|
119
|
+
super(config);
|
|
120
|
+
const credential = lease.snapshot();
|
|
121
|
+
const self = this;
|
|
122
|
+
self.connectionParameters.user = credential.user;
|
|
123
|
+
self.user = credential.user;
|
|
124
|
+
self.password = () => {
|
|
125
|
+
lease.assertLive();
|
|
126
|
+
return credential.password;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
connect(callback) {
|
|
130
|
+
if (!lease.isLive()) {
|
|
131
|
+
const refusal = new DatabaseCredentialExpiredError(lease.logicalName, lease.expiresAt);
|
|
132
|
+
if (callback !== undefined) {
|
|
133
|
+
process.nextTick(() => callback(refusal));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
return Promise.reject(refusal);
|
|
137
|
+
}
|
|
138
|
+
return callback !== undefined ? super.connect(callback) : super.connect();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const LEASE_READINESS = Symbol.for('xema.biome-database.lease-readiness');
|
|
143
|
+
const leases = new Set();
|
|
144
|
+
function expiredBiomeDatabaseLeases() {
|
|
145
|
+
return [...leases]
|
|
146
|
+
.filter((lease) => !lease.isLive())
|
|
147
|
+
.map((lease) => `${lease.logicalName} (expired ${lease.expiresAt})`);
|
|
148
|
+
}
|
|
149
|
+
function assertBiomeDatabaseLeasesLive() {
|
|
150
|
+
const expired = expiredBiomeDatabaseLeases();
|
|
151
|
+
if (expired.length > 0) {
|
|
152
|
+
throw new Error(`[biome-database] database credential lease(s) expired: ${expired.join(', ')}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function registerBiomeDatabaseLease(lease) {
|
|
156
|
+
leases.add(lease);
|
|
157
|
+
globalThis[LEASE_READINESS] =
|
|
158
|
+
assertBiomeDatabaseLeasesLive;
|
|
159
|
+
}
|
|
160
|
+
function stopBiomeDatabaseLeases() {
|
|
161
|
+
for (const lease of leases) {
|
|
162
|
+
lease.stop();
|
|
163
|
+
}
|
|
164
|
+
leases.clear();
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=credential-lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-lease.js","sourceRoot":"","sources":["../../src/lib/credential-lease.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { BiomeDatabaseMigrationMode } from '../migration-mode';
|
|
2
2
|
import type { BiomeDatabaseDeclaration } from '../bootstrap';
|
|
3
|
-
import type { DynamicModule } from '@nestjs/common';
|
|
3
|
+
import type { DynamicModule, OnApplicationShutdown } from '@nestjs/common';
|
|
4
4
|
export declare const BIOME_DATABASE_READY: unique symbol;
|
|
5
5
|
interface BiomeDatabaseModuleCommonOptions {
|
|
6
6
|
readonly biomeId: string;
|
|
7
|
+
readonly env?: () => NodeJS.ProcessEnv;
|
|
7
8
|
}
|
|
8
9
|
export interface ApplicationManagedBiomeDatabaseModuleOptions extends BiomeDatabaseModuleCommonOptions {
|
|
9
10
|
readonly migrationMode: BiomeDatabaseMigrationMode.ApplicationManaged;
|
|
@@ -11,7 +12,8 @@ export interface ApplicationManagedBiomeDatabaseModuleOptions extends BiomeDatab
|
|
|
11
12
|
readonly requiredExtensions?: readonly string[];
|
|
12
13
|
}
|
|
13
14
|
export type BiomeDatabaseModuleOptions = ApplicationManagedBiomeDatabaseModuleOptions;
|
|
14
|
-
export declare class BiomeDatabaseModule {
|
|
15
|
+
export declare class BiomeDatabaseModule implements OnApplicationShutdown {
|
|
16
|
+
onApplicationShutdown(): void;
|
|
15
17
|
static forRoot(opts: BiomeDatabaseModuleOptions): DynamicModule;
|
|
16
18
|
}
|
|
17
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biome-database.module.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"biome-database.module.d.ts","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAY3E,eAAO,MAAM,oBAAoB,eAEhC,CAAC;AAEF,UAAU,gCAAgC;IAExC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAgBzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,4CACf,SAAQ,gCAAgC;IACxC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC,kBAAkB,CAAC;IAKtE,QAAQ,CAAC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IASxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAID,MAAM,MAAM,0BAA0B,GACpC,4CAA4C,CAAC;AAsE/C,qBACa,mBAAoB,YAAW,qBAAqB;IAM/D,qBAAqB,IAAI,IAAI;IAI7B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,GAAG,aAAa;CAiDhE"}
|
|
@@ -12,6 +12,7 @@ const common_1 = require("@nestjs/common");
|
|
|
12
12
|
const identity_client_1 = require("@xemahq/identity-client");
|
|
13
13
|
const service_registry_nest_1 = require("@xemahq/service-registry-nest");
|
|
14
14
|
const bootstrap_1 = require("../bootstrap");
|
|
15
|
+
const credential_lease_1 = require("../credential-lease");
|
|
15
16
|
const migration_mode_1 = require("../migration-mode");
|
|
16
17
|
exports.BIOME_DATABASE_READY = Symbol.for('@xemahq/biome-database-nest:ready');
|
|
17
18
|
function assertBiomeDatabaseModuleOptions(opts) {
|
|
@@ -28,6 +29,9 @@ function assertBiomeDatabaseModuleOptions(opts) {
|
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
let BiomeDatabaseModule = BiomeDatabaseModule_1 = class BiomeDatabaseModule {
|
|
32
|
+
onApplicationShutdown() {
|
|
33
|
+
(0, credential_lease_1.stopBiomeDatabaseLeases)();
|
|
34
|
+
}
|
|
31
35
|
static forRoot(opts) {
|
|
32
36
|
assertBiomeDatabaseModuleOptions(opts);
|
|
33
37
|
const databases = opts.databases;
|
|
@@ -50,6 +54,7 @@ let BiomeDatabaseModule = BiomeDatabaseModule_1 = class BiomeDatabaseModule {
|
|
|
50
54
|
biomeId: opts.biomeId,
|
|
51
55
|
migrationMode: opts.migrationMode,
|
|
52
56
|
databases,
|
|
57
|
+
...(opts.env !== undefined ? { env: opts.env } : {}),
|
|
53
58
|
...(opts.requiredExtensions !== undefined
|
|
54
59
|
? { requiredExtensions: opts.requiredExtensions }
|
|
55
60
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"biome-database.module.js","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAwC;AACxC,6DAAmE;AACnE,yEAGuC;AAEvC,4CAAuD;AACvD,sDAA+D;AAiBlD,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAC5C,mCAAmC,CACpC,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"biome-database.module.js","sourceRoot":"","sources":["../../../src/lib/nest/biome-database.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAwC;AACxC,6DAAmE;AACnE,yEAGuC;AAEvC,4CAAuD;AACvD,0DAA8D;AAC9D,sDAA+D;AAiBlD,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAC5C,mCAAmC,CACpC,CAAC;AA+CF,SAAS,gCAAgC,CACvC,IAAa;IAEb,IACE,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;QAC1B,IAAI,CAAC,aAAa,KAAK,2CAA0B,CAAC,kBAAkB,EACpE,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IACE,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;QACtB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC;AA8CM,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAM9B,qBAAqB;QACnB,IAAA,0CAAuB,GAAE,CAAC;IAC5B,CAAC;IAGD,MAAM,CAAC,OAAO,CAAC,IAAa;QAC1B,gCAAgC,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAwC,IAAI,CAAC,SAAS,CAAC;QAQtE,IAAI,IAAA,2CAAmB,GAAE,EAAE,CAAC;YAC1B,OAAO;gBACL,MAAM,EAAE,qBAAmB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,4BAAoB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9D,OAAO,EAAE,CAAC,4BAAoB,CAAC;aAChC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,qBAAmB;YAC3B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,4BAAoB;oBAC7B,UAAU,EAAE,KAAK,EACf,iBAA2C,EAC3C,WAAwB,EACT,EAAE;wBACjB,MAAM,IAAA,mCAAuB,EAAC;4BAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,SAAS;4BACT,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACpD,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS;gCACvC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;gCACjD,CAAC,CAAC,EAAE,CAAC;4BACP,YAAY,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE;4BACtD,WAAW;yBACZ,CAAC,CAAC;wBACH,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,EAAE,CAAC,0CAAwB,EAAE,0CAAkB,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,CAAC,4BAAoB,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AA3DY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,mBAAmB,CA2D/B"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { DatabaseCredentialLease } from './credential-lease';
|
|
1
2
|
export interface ResolvedBiomeConnection {
|
|
2
3
|
readonly url: string;
|
|
3
4
|
readonly schema?: string;
|
|
4
5
|
readonly poolMax?: number;
|
|
6
|
+
readonly lease?: DatabaseCredentialLease;
|
|
5
7
|
}
|
|
6
8
|
export declare function publishResolvedBiomeConnection(dbKey: string | undefined, connection: ResolvedBiomeConnection): void;
|
|
7
9
|
export declare function readResolvedBiomeConnection(dbKey?: string): ResolvedBiomeConnection | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolved-connection.d.ts","sourceRoot":"","sources":["../../src/lib/resolved-connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolved-connection.d.ts","sourceRoot":"","sources":["../../src/lib/resolved-connection.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,MAAM,WAAW,uBAAuB;IAMtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAO1B,QAAQ,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC;CAC1C;AAqCD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,uBAAuB,GAClC,IAAI,CAiBN;AAWD,wBAAgB,2BAA2B,CACzC,KAAK,CAAC,EAAE,MAAM,GACb,uBAAuB,GAAG,SAAS,CAIrC;AAUD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -4,26 +4,30 @@ exports.publishResolvedBiomeConnection = publishResolvedBiomeConnection;
|
|
|
4
4
|
exports.readResolvedBiomeConnection = readResolvedBiomeConnection;
|
|
5
5
|
exports.clearResolvedBiomeConnections = clearResolvedBiomeConnections;
|
|
6
6
|
const schema_name_1 = require("./schema-name");
|
|
7
|
+
const scoped_env_1 = require("./scoped-env");
|
|
7
8
|
const resolvedConnections = new Map();
|
|
8
9
|
function normalizeKey(dbKey) {
|
|
9
10
|
return dbKey === undefined || dbKey === '' ? schema_name_1.DEFAULT_BIOME_DB_KEY : dbKey;
|
|
10
11
|
}
|
|
12
|
+
function registryKey(dbKey, subject) {
|
|
13
|
+
return `${(0, scoped_env_1.currentMountKey)(subject)}\u0000${normalizeKey(dbKey)}`;
|
|
14
|
+
}
|
|
11
15
|
function publishResolvedBiomeConnection(dbKey, connection) {
|
|
12
16
|
const key = normalizeKey(dbKey);
|
|
13
|
-
const
|
|
17
|
+
const slot = registryKey(dbKey, 'Publishing a resolved biome connection');
|
|
18
|
+
const existing = resolvedConnections.get(slot);
|
|
14
19
|
if (existing !== undefined &&
|
|
15
20
|
(existing.url !== connection.url || existing.schema !== connection.schema)) {
|
|
16
21
|
throw new Error(`[biome-database] a different connection is already resolved for dbKey ` +
|
|
17
22
|
`"${key}" (schema "${existing.schema ?? '<none>'}" vs ` +
|
|
18
|
-
`"${connection.schema ?? '<none>'}").
|
|
19
|
-
`
|
|
20
|
-
`become the connection BOTH
|
|
21
|
-
`key, or run them in separate processes.`);
|
|
23
|
+
`"${connection.schema ?? '<none>'}"). One service cannot resolve two ` +
|
|
24
|
+
`connections for one dbKey: whichever published second would silently ` +
|
|
25
|
+
`become the connection BOTH readers use. Give each database its own key.`);
|
|
22
26
|
}
|
|
23
|
-
resolvedConnections.set(
|
|
27
|
+
resolvedConnections.set(slot, connection);
|
|
24
28
|
}
|
|
25
29
|
function readResolvedBiomeConnection(dbKey) {
|
|
26
|
-
return resolvedConnections.get(
|
|
30
|
+
return resolvedConnections.get(registryKey(dbKey, 'Reading a resolved biome connection'));
|
|
27
31
|
}
|
|
28
32
|
function clearResolvedBiomeConnections() {
|
|
29
33
|
resolvedConnections.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolved-connection.js","sourceRoot":"","sources":["../../src/lib/resolved-connection.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resolved-connection.js","sourceRoot":"","sources":["../../src/lib/resolved-connection.ts"],"names":[],"mappings":";;AAyGA,wEAoBC;AAWD,kEAMC;AAUD,sEAEC;AA9GD,+CAAqD;AACrD,6CAA+C;AAqC/C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAmC,CAAC;AAGvE,SAAS,YAAY,CAAC,KAAyB;IAC7C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,kCAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,CAAC;AAGD,SAAS,WAAW,CAAC,KAAyB,EAAE,OAAe;IAC7D,OAAO,GAAG,IAAA,4BAAe,EAAC,OAAO,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;AACnE,CAAC;AAaD,SAAgB,8BAA8B,CAC5C,KAAyB,EACzB,UAAmC;IAEnC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,IACE,QAAQ,KAAK,SAAS;QACtB,CAAC,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wEAAwE;YACtE,IAAI,GAAG,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,OAAO;YACvD,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,qCAAqC;YACtE,uEAAuE;YACvE,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAWD,SAAgB,2BAA2B,CACzC,KAAc;IAEd,OAAO,mBAAmB,CAAC,GAAG,CAC5B,WAAW,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAUD,SAAgB,6BAA6B;IAC3C,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-env.d.ts","sourceRoot":"","sources":["../../src/lib/scoped-env.ts"],"names":[],"mappings":"AAiFA,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAkBhE;AAsBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBvD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scopedEnvView = scopedEnvView;
|
|
4
|
+
exports.currentMountKey = currentMountKey;
|
|
5
|
+
const XEMA_SERVICE_MOUNT_SCOPE = Symbol.for('xema.service-mount-scope');
|
|
6
|
+
const XEMA_SCOPED_ENV_VIEW = Symbol.for('xema.scoped-env-view');
|
|
7
|
+
function scopedEnvView(subject) {
|
|
8
|
+
const carrier = globalThis;
|
|
9
|
+
const reader = carrier[XEMA_SCOPED_ENV_VIEW];
|
|
10
|
+
if (typeof reader === 'function') {
|
|
11
|
+
return reader(subject);
|
|
12
|
+
}
|
|
13
|
+
if (typeof carrier[XEMA_SERVICE_MOUNT_SCOPE] === 'function') {
|
|
14
|
+
throw new Error(`${subject} is running in a COMPOSED process whose host published no ` +
|
|
15
|
+
'scoped environment reader. The host installed a service-mount scope ' +
|
|
16
|
+
'but not `Symbol.for("xema.scoped-env-view")`, which means it predates ' +
|
|
17
|
+
'that seam. Reading `process.env` here would take whichever value a ' +
|
|
18
|
+
'sibling mount left behind — for a database bootstrap, that is ' +
|
|
19
|
+
"migrating another biome's database — so it refuses instead. Raise " +
|
|
20
|
+
'`@xemahq/xema-service-nest` to a version that publishes the reader.');
|
|
21
|
+
}
|
|
22
|
+
return process.env;
|
|
23
|
+
}
|
|
24
|
+
function currentMountKey(subject) {
|
|
25
|
+
const hook = globalThis[XEMA_SERVICE_MOUNT_SCOPE];
|
|
26
|
+
if (typeof hook !== 'function') {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
const mount = hook();
|
|
30
|
+
if (mount === undefined) {
|
|
31
|
+
throw new Error(`${subject} ran in a COMPOSED process outside every mount. Its state is ` +
|
|
32
|
+
'held per mount, and no mount is on the stack, so any answer would ' +
|
|
33
|
+
"be a sibling's — for a database, another biome's connection. Run it " +
|
|
34
|
+
'inside the mount being built (every `useFactory` and constructor ' +
|
|
35
|
+
'`NestFactory.create` runs already is).');
|
|
36
|
+
}
|
|
37
|
+
return mount.mountId;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=scoped-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-env.js","sourceRoot":"","sources":["../../src/lib/scoped-env.ts"],"names":[],"mappings":";;AAiFA,sCAkBC;AAsBD,0CAgBC;AApFD,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAGxE,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAyBhE,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAG,UAAqC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAQ,MAA4B,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,wBAAwB,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,4DAA4D;YACpE,sEAAsE;YACtE,wEAAwE;YACxE,qEAAqE;YACrE,gEAAgE;YAChE,oEAAoE;YACpE,qEAAqE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC;AACrB,CAAC;AAsBD,SAAgB,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAI,UAAsC,CAAC,wBAAwB,CAAC,CAAC;IAC/E,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAI,IAA4C,EAAE,CAAC;IAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,+DAA+D;YACvE,oEAAoE;YACpE,sEAAsE;YACtE,mEAAmE;YACnE,wCAAwC,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/biome-database-nest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Explicit database migration ownership, least-privilege runtime verification, and schema-qualified Prisma wiring for Xema biome services.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
|
|
@@ -29,33 +29,33 @@
|
|
|
29
29
|
"@types/jest": "^30.0.0",
|
|
30
30
|
"@types/node": "25.2.3",
|
|
31
31
|
"@types/pg": "^8.16.0",
|
|
32
|
-
"@xemahq/identity-client": "^0.
|
|
33
|
-
"@xemahq/contracts": "^0.
|
|
34
|
-
"@xemahq/pg-test-harness": "^0.3.
|
|
35
|
-
"@xemahq/platform-common": ">=0.
|
|
32
|
+
"@xemahq/identity-client": "^0.12.0",
|
|
33
|
+
"@xemahq/contracts": "^0.27.0",
|
|
34
|
+
"@xemahq/pg-test-harness": "^0.3.1",
|
|
35
|
+
"@xemahq/platform-common": ">=0.43.0",
|
|
36
36
|
"eslint": "^9.39.4",
|
|
37
37
|
"jest": "^30.3.0",
|
|
38
38
|
"prettier": "3.6.2",
|
|
39
39
|
"prisma": "7.8.0",
|
|
40
40
|
"ts-jest": "^29.4.9",
|
|
41
41
|
"typescript": "5.9.3",
|
|
42
|
-
"@xemahq/
|
|
43
|
-
"@xemahq/
|
|
44
|
-
"@xemahq/
|
|
42
|
+
"@xemahq/service-registry-nest": "0.16.0",
|
|
43
|
+
"@xemahq/eslint-config": "0.9.0",
|
|
44
|
+
"@xemahq/xema-decorators": "0.20.0"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@nestjs/common": "^10 || ^11",
|
|
48
48
|
"@nestjs/core": "^10 || ^11",
|
|
49
49
|
"@prisma/adapter-pg": "^7",
|
|
50
50
|
"@prisma/client": "^7",
|
|
51
|
-
"@xemahq/identity-client": "
|
|
51
|
+
"@xemahq/identity-client": ">=0.9.0",
|
|
52
52
|
"@xemahq/contracts": ">=0.4.0",
|
|
53
53
|
"@xemahq/service-registry-nest": ">=0.12.0",
|
|
54
54
|
"@xemahq/platform-common": ">=0.18.0"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@xemahq/migration-runner-prisma": "^0.3.1",
|
|
58
|
-
"@xemahq/org-erasure-nest": "^1.0.
|
|
58
|
+
"@xemahq/org-erasure-nest": "^1.0.2",
|
|
59
59
|
"pg": "^8.16.3"
|
|
60
60
|
},
|
|
61
61
|
"exports": {
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { BiomeDatabaseConfig } from './config';
|
|
2
|
-
export interface SystemDatabaseConfigRequest {
|
|
3
|
-
readonly biomeId: string;
|
|
4
|
-
readonly dbKey?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function fetchSystemDatabaseConfig(baseUrl: string, serviceToken: string, req: SystemDatabaseConfigRequest): Promise<BiomeDatabaseConfig>;
|
|
7
|
-
//# sourceMappingURL=control-plane-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane-client.d.ts","sourceRoot":"","sources":["../../src/lib/control-plane-client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAYD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,2BAA2B,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CA6B9B"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchSystemDatabaseConfig = fetchSystemDatabaseConfig;
|
|
4
|
-
const platform_common_1 = require("@xemahq/platform-common");
|
|
5
|
-
async function fetchSystemDatabaseConfig(baseUrl, serviceToken, req) {
|
|
6
|
-
const url = `${baseUrl.replace(/\/$/, '')}/system-databases/config`;
|
|
7
|
-
const response = await fetch(url, {
|
|
8
|
-
method: 'POST',
|
|
9
|
-
headers: {
|
|
10
|
-
authorization: `Bearer ${serviceToken}`,
|
|
11
|
-
'content-type': 'application/json',
|
|
12
|
-
},
|
|
13
|
-
body: JSON.stringify({
|
|
14
|
-
biomeId: req.biomeId,
|
|
15
|
-
...(req.dbKey !== undefined ? { dbKey: req.dbKey } : {}),
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
if (!response.ok) {
|
|
19
|
-
const body = await response.text().catch(() => '<unreadable body>');
|
|
20
|
-
throw new Error(`fetchSystemDatabaseConfig: ${url} responded ${response.status} ${response.statusText}: ${body}`);
|
|
21
|
-
}
|
|
22
|
-
const payload = await response.json();
|
|
23
|
-
const config = (0, platform_common_1.unwrapPlatformResponseEnvelope)(payload, `fetchSystemDatabaseConfig: ${url}`);
|
|
24
|
-
assertCompleteConfig(config, url);
|
|
25
|
-
return config;
|
|
26
|
-
}
|
|
27
|
-
const REQUIRED_CONFIG_FIELDS = [
|
|
28
|
-
'host',
|
|
29
|
-
'port',
|
|
30
|
-
'username',
|
|
31
|
-
'password',
|
|
32
|
-
'database',
|
|
33
|
-
];
|
|
34
|
-
function assertCompleteConfig(config, url) {
|
|
35
|
-
const record = config !== null && typeof config === 'object'
|
|
36
|
-
? Object.fromEntries(Object.entries(config))
|
|
37
|
-
: {};
|
|
38
|
-
const missing = REQUIRED_CONFIG_FIELDS.filter((field) => {
|
|
39
|
-
const value = record[field];
|
|
40
|
-
return value === undefined || value === null || value === '';
|
|
41
|
-
});
|
|
42
|
-
if (missing.length > 0) {
|
|
43
|
-
throw new Error(`fetchSystemDatabaseConfig: ${url} returned a config missing required ` +
|
|
44
|
-
`field(s): ${missing.join(', ')}. Present keys: ` +
|
|
45
|
-
`[${Object.keys(record).join(', ')}]. (If the keys look nested, the ` +
|
|
46
|
-
`{ data } response envelope was not unwrapped.)`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=control-plane-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane-client.js","sourceRoot":"","sources":["../../src/lib/control-plane-client.ts"],"names":[],"mappings":";;AAmDA,8DAiCC;AApDD,6DAAyE;AAmBlE,KAAK,UAAU,yBAAyB,CAC7C,OAAe,EACf,YAAoB,EACpB,GAAgC;IAEhC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,YAAY,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAY,IAAA,gDAA8B,EACpD,OAAO,EACP,8BAA8B,GAAG,EAAE,CACpC,CAAC;IACF,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,sBAAsB,GAAG;IAC7B,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,UAAU;CACF,CAAC;AASX,SAAS,oBAAoB,CAC3B,MAAe,EACf,GAAW;IAIX,MAAM,MAAM,GACV,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC3C,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,sCAAsC;YACrE,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB;YACjD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC;YACrE,gDAAgD,CACnD,CAAC;IACJ,CAAC;AACH,CAAC"}
|