@stratum-hq/lib 1.7.0 → 1.8.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 +29 -2
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +50 -10
- package/dist/crypto.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/migrate-schemas.d.ts +4 -0
- package/dist/migrate-schemas.d.ts.map +1 -1
- package/dist/migrate-schemas.js +16 -6
- package/dist/migrate-schemas.js.map +1 -1
- package/dist/migrate.d.ts +24 -0
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +44 -6
- package/dist/migrate.js.map +1 -1
- package/dist/migration-sql.d.ts +25 -0
- package/dist/migration-sql.d.ts.map +1 -0
- package/dist/migration-sql.js +64 -0
- package/dist/migration-sql.js.map +1 -0
- package/dist/migrations/029_tenant_parent_cycle_guard.sql +2 -2
- package/dist/migrations/031_subtree_read_scope.sql +6 -6
- package/dist/migrations/032_control_role.sql +809 -0
- package/dist/migrations/033_api_keys_tenant_index.sql +14 -0
- package/dist/pinned-query.d.ts +29 -0
- package/dist/pinned-query.d.ts.map +1 -0
- package/dist/pinned-query.js +60 -0
- package/dist/pinned-query.js.map +1 -0
- package/dist/pool-helpers.d.ts +2 -0
- package/dist/pool-helpers.d.ts.map +1 -1
- package/dist/pool-helpers.js +17 -3
- package/dist/pool-helpers.js.map +1 -1
- package/dist/role-model.d.ts +178 -0
- package/dist/role-model.d.ts.map +1 -0
- package/dist/role-model.js +670 -0
- package/dist/role-model.js.map +1 -0
- package/dist/services/api-key-service.d.ts +12 -2
- package/dist/services/api-key-service.d.ts.map +1 -1
- package/dist/services/api-key-service.js +33 -9
- package/dist/services/api-key-service.js.map +1 -1
- package/dist/services/config-service.d.ts +15 -6
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +96 -50
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/tenant-service.d.ts.map +1 -1
- package/dist/services/tenant-service.js +4 -4
- package/dist/services/tenant-service.js.map +1 -1
- package/dist/stratum-policies.d.ts +51 -0
- package/dist/stratum-policies.d.ts.map +1 -0
- package/dist/stratum-policies.js +217 -0
- package/dist/stratum-policies.js.map +1 -0
- package/dist/stratum-tables.d.ts.map +1 -1
- package/dist/stratum-tables.js +1 -0
- package/dist/stratum-tables.js.map +1 -1
- package/dist/stratum.d.ts +52 -7
- package/dist/stratum.d.ts.map +1 -1
- package/dist/stratum.js +75 -14
- package/dist/stratum.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-model.js","sourceRoot":"","sources":["../src/role-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export interface CreateApiKeyOptions {
|
|
|
31
31
|
rateLimitMax?: number;
|
|
32
32
|
rateLimitWindow?: string;
|
|
33
33
|
}
|
|
34
|
-
export declare function createApiKey(pool: pg.Pool, keyPrefix: string, tenantId: string, nameOrOptions?: string | CreateApiKeyOptions, expiresAt?: Date): Promise<CreatedApiKey>;
|
|
34
|
+
export declare function createApiKey(pool: pg.Pool, keyPrefix: string, tenantId: string | null, nameOrOptions?: string | CreateApiKeyOptions, expiresAt?: Date): Promise<CreatedApiKey>;
|
|
35
35
|
export interface ValidatedApiKey {
|
|
36
36
|
tenant_id: string | null;
|
|
37
37
|
key_id: string;
|
|
@@ -39,7 +39,17 @@ export interface ValidatedApiKey {
|
|
|
39
39
|
rate_limit_max: number | null;
|
|
40
40
|
rate_limit_window: string | null;
|
|
41
41
|
}
|
|
42
|
-
export
|
|
42
|
+
export interface ValidateApiKeyOptions {
|
|
43
|
+
/**
|
|
44
|
+
* Accept a key stored with the unkeyed SHA-256 hash (version 1) while
|
|
45
|
+
* STRATUM_API_KEY_HMAC_SECRET is set, and re-hash it with HMAC when it
|
|
46
|
+
* authenticates. Default true in 1.x; the default becomes false in 2.0.
|
|
47
|
+
*/
|
|
48
|
+
allowLegacyHashes?: boolean;
|
|
49
|
+
/** Called when a version 1 hash authenticated while the HMAC secret is set. */
|
|
50
|
+
onLegacyHash?: () => void;
|
|
51
|
+
}
|
|
52
|
+
export declare function validateApiKey(pool: pg.Pool, key: string, options?: ValidateApiKeyOptions): Promise<ValidatedApiKey | null>;
|
|
43
53
|
export declare function revokeApiKey(pool: pg.Pool, keyId: string): Promise<boolean>;
|
|
44
54
|
export declare function rotateApiKey(pool: pg.Pool, keyPrefix: string, oldKeyId: string, newName?: string): Promise<CreatedApiKey>;
|
|
45
55
|
export declare function listApiKeys(pool: pg.Pool, tenantId?: string): Promise<Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-service.d.ts","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"api-key-service.d.ts","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,IAAI,CAAC;IACjB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;CACvB;AA8CD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAK7G;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,aAAa,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAC5C,SAAS,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,aAAa,CAAC,CA6BxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAeD,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA4FjC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjF;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAyDxB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAgB9K;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAS9K;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC,CAY5H"}
|
|
@@ -18,6 +18,19 @@ const core_1 = require("@stratum-hq/core");
|
|
|
18
18
|
// --- Hashing ---
|
|
19
19
|
const HASH_V1_SHA256 = 1;
|
|
20
20
|
const HASH_V2_HMAC = 2;
|
|
21
|
+
// The shortest STRATUM_API_KEY_HMAC_SECRET accepted outside development and
|
|
22
|
+
// test (an unset NODE_ENV counts as development), checked when the module
|
|
23
|
+
// loads, like STRATUM_ENCRYPTION_KEY in crypto.ts.
|
|
24
|
+
const MIN_HMAC_SECRET_BYTES = 32;
|
|
25
|
+
(() => {
|
|
26
|
+
const nodeEnv = process.env.NODE_ENV || "development";
|
|
27
|
+
if (nodeEnv === "development" || nodeEnv === "test")
|
|
28
|
+
return;
|
|
29
|
+
const secret = process.env.STRATUM_API_KEY_HMAC_SECRET;
|
|
30
|
+
if (secret && Buffer.byteLength(secret, "utf8") < MIN_HMAC_SECRET_BYTES) {
|
|
31
|
+
throw new Error(`STRATUM_API_KEY_HMAC_SECRET must be at least ${MIN_HMAC_SECRET_BYTES} bytes in ${nodeEnv}`);
|
|
32
|
+
}
|
|
33
|
+
})();
|
|
21
34
|
function getHmacSecret() {
|
|
22
35
|
return process.env.STRATUM_API_KEY_HMAC_SECRET;
|
|
23
36
|
}
|
|
@@ -66,7 +79,10 @@ async function createApiKey(pool, keyPrefix, tenantId, nameOrOptions, expiresAt)
|
|
|
66
79
|
: { name: nameOrOptions, expiresAt };
|
|
67
80
|
const { plaintextKey, keyHash, hashVersion } = generateKey(keyPrefix);
|
|
68
81
|
return (0, pool_helpers_js_1.withClient)(pool, async (client) => {
|
|
69
|
-
|
|
82
|
+
// A global key (tenantId null) has no tenant whose state could block it.
|
|
83
|
+
if (tenantId !== null) {
|
|
84
|
+
await assertTenantAcceptsKeys(client, tenantId, "create an API key for");
|
|
85
|
+
}
|
|
70
86
|
const res = await client.query(`INSERT INTO api_keys (tenant_id, key_hash, key_prefix, name, expires_at, rate_limit_max, rate_limit_window, hash_version)
|
|
71
87
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
72
88
|
RETURNING *`, [tenantId, keyHash, keyPrefix, opts.name ?? null, opts.expiresAt ?? null, opts.rateLimitMax ?? null, opts.rateLimitWindow ?? null, hashVersion]);
|
|
@@ -92,14 +108,20 @@ const STAMP_INTERVAL_SECONDS = 60;
|
|
|
92
108
|
* that waits on a row lock then cannot delay authentication for longer.
|
|
93
109
|
*/
|
|
94
110
|
const STAMP_TIMEOUT_MS = 1000;
|
|
95
|
-
async function validateApiKey(pool, key) {
|
|
111
|
+
async function validateApiKey(pool, key, options = {}) {
|
|
96
112
|
const hmacSecret = getHmacSecret();
|
|
97
|
-
//
|
|
113
|
+
// Candidate hashes. With an HMAC secret, HMAC hashes (version 2) come
|
|
114
|
+
// first, because they depend on a secret only the server holds. The legacy
|
|
115
|
+
// SHA-256 hashes (version 1) are tried too unless the caller turned
|
|
116
|
+
// allowLegacyHashes off. 1.x accepts them by default and re-hashes each
|
|
117
|
+
// on use; 2.0 will not. Without a secret, SHA-256 is the only hash there is.
|
|
98
118
|
const candidates = [];
|
|
99
119
|
if (hmacSecret) {
|
|
100
120
|
candidates.push({ hash: hmacHash(key, hmacSecret), version: HASH_V2_HMAC });
|
|
101
121
|
}
|
|
102
|
-
|
|
122
|
+
if (!hmacSecret || options.allowLegacyHashes !== false) {
|
|
123
|
+
candidates.push({ hash: sha256Hash(key), version: HASH_V1_SHA256 });
|
|
124
|
+
}
|
|
103
125
|
// Everything below runs on one pooled connection: nothing here may acquire a
|
|
104
126
|
// second connection while this one is held.
|
|
105
127
|
const found = await (0, pool_helpers_js_1.withClient)(pool, async (client) => {
|
|
@@ -110,7 +132,7 @@ async function validateApiKey(pool, key) {
|
|
|
110
132
|
(ak.last_used_at IS NULL OR ak.last_used_at < now() - make_interval(secs => $2)) AS stamp_due
|
|
111
133
|
FROM api_keys ak
|
|
112
134
|
LEFT JOIN tenants t ON t.id = ak.tenant_id
|
|
113
|
-
WHERE ak.key_hash = $1 AND ak.revoked_at IS NULL AND (ak.expires_at IS NULL OR ak.expires_at > now())
|
|
135
|
+
WHERE ak.key_hash = $1 AND ak.hash_version = $3 AND ak.revoked_at IS NULL AND (ak.expires_at IS NULL OR ak.expires_at > now())
|
|
114
136
|
AND (ak.tenant_id IS NULL OR (
|
|
115
137
|
t.status = 'active'
|
|
116
138
|
AND NOT EXISTS (
|
|
@@ -118,7 +140,7 @@ async function validateApiKey(pool, key) {
|
|
|
118
140
|
WHERE anc.id = ANY (string_to_array(trim(both '/' from t.ancestry_path), '/')::uuid[])
|
|
119
141
|
AND anc.status <> 'active'
|
|
120
142
|
)
|
|
121
|
-
))`, [candidate.hash, STAMP_INTERVAL_SECONDS]);
|
|
143
|
+
))`, [candidate.hash, STAMP_INTERVAL_SECONDS, candidate.version]);
|
|
122
144
|
if (res.rows.length === 0)
|
|
123
145
|
continue;
|
|
124
146
|
const row = res.rows[0];
|
|
@@ -144,17 +166,19 @@ async function validateApiKey(pool, key) {
|
|
|
144
166
|
// When a stamp is due, we await it so that a read made after validateApiKey
|
|
145
167
|
// resolves sees the new last_used_at. Without the await, listDormantKeys can
|
|
146
168
|
// report a just-used key.
|
|
147
|
-
// Transparent upgrade: if we matched via legacy SHA-256
|
|
148
|
-
//
|
|
169
|
+
// Transparent upgrade: if we matched via legacy SHA-256 and the HMAC secret
|
|
170
|
+
// is set, re-hash with HMAC and update the stored hash in place.
|
|
149
171
|
const { row } = found;
|
|
150
172
|
const upgrade = row.hash_version === HASH_V1_SHA256 && hmacSecret;
|
|
173
|
+
if (upgrade)
|
|
174
|
+
options.onLegacyHash?.();
|
|
151
175
|
if (!upgrade && !row.stamp_due)
|
|
152
176
|
return found.validated;
|
|
153
177
|
await (0, pool_helpers_js_1.withClient)(pool, async (client) => {
|
|
154
178
|
// SET LOCAL ends with this transaction, so the pooled connection keeps its own timeout.
|
|
155
179
|
await client.query(`SET LOCAL statement_timeout = ${STAMP_TIMEOUT_MS}`);
|
|
156
180
|
return upgrade
|
|
157
|
-
? client.query(`UPDATE api_keys SET key_hash = $1, hash_version = $2, last_used_at = now() WHERE id = $3`, [hmacHash(key, hmacSecret), HASH_V2_HMAC, row.id])
|
|
181
|
+
? client.query(`UPDATE api_keys SET key_hash = $1, hash_version = $2, last_used_at = now() WHERE id = $3 AND hash_version = 1`, [hmacHash(key, hmacSecret), HASH_V2_HMAC, row.id])
|
|
158
182
|
: // The condition repeats the check, so a concurrent request that stamped first wins.
|
|
159
183
|
client.query(`UPDATE api_keys SET last_used_at = now()
|
|
160
184
|
WHERE id = $1 AND (last_used_at IS NULL OR last_used_at < now() - make_interval(secs => $2))`, [row.id, STAMP_INTERVAL_SECONDS]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-service.js","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"api-key-service.js","sourceRoot":"","sources":["../../src/services/api-key-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
import pg from "pg";
|
|
2
|
-
import { type ConfigEntry, type SetConfigInput, type BatchSetConfigEntry, type ResolvedConfig, type BatchSetConfigResult } from "@stratum-hq/core";
|
|
2
|
+
import { type ConfigEntry, type SetConfigInput, type BatchSetConfigEntry, type ResolvedConfig, type ResolveConfigOptions, type BatchSetConfigResult } from "@stratum-hq/core";
|
|
3
3
|
/**
|
|
4
4
|
* Resolve the effective config for a tenant by batch-loading ancestor configs
|
|
5
5
|
* in a single query and walking root→leaf.
|
|
6
|
+
*
|
|
7
|
+
* Sensitive values inherited from an ancestor come back masked unless
|
|
8
|
+
* `options` reveals them (see {@link ResolveConfigOptions}).
|
|
6
9
|
*/
|
|
7
|
-
export declare function resolveConfig(pool: pg.Pool, tenantId: string): Promise<ResolvedConfig>;
|
|
10
|
+
export declare function resolveConfig(pool: pg.Pool, tenantId: string, options?: ResolveConfigOptions): Promise<ResolvedConfig>;
|
|
8
11
|
/**
|
|
9
12
|
* Set (upsert) a config key for a tenant.
|
|
10
13
|
* Rejects if the key is locked by an ancestor.
|
|
11
14
|
*/
|
|
12
15
|
export declare function setConfig(pool: pg.Pool, tenantId: string, key: string, input: SetConfigInput): Promise<ConfigEntry>;
|
|
13
16
|
/**
|
|
14
|
-
* Set multiple config keys for a tenant in a single transaction.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* Set multiple config keys for a tenant in a single, atomic transaction.
|
|
18
|
+
*
|
|
19
|
+
* Every entry is checked before anything is written. If any key is locked by
|
|
20
|
+
* an active ancestor or is invalid, the whole batch is rolled back: nothing is
|
|
21
|
+
* written, `rolled_back` is true, and each result has status "error". The
|
|
22
|
+
* offending keys carry their own reason; the rest name the keys that caused
|
|
23
|
+
* the rollback.
|
|
17
24
|
*/
|
|
18
25
|
export declare function batchSetConfig(pool: pg.Pool, tenantId: string, entries: BatchSetConfigEntry[]): Promise<BatchSetConfigResult>;
|
|
19
26
|
/**
|
|
@@ -23,6 +30,8 @@ export declare function deleteConfig(pool: pg.Pool, tenantId: string, key: strin
|
|
|
23
30
|
/**
|
|
24
31
|
* Return all config entries for a tenant showing inheritance status:
|
|
25
32
|
* inherited (from ancestor), overridden (tenant has own value), or locked.
|
|
33
|
+
*
|
|
34
|
+
* Inherited sensitive values are masked as in {@link resolveConfig}.
|
|
26
35
|
*/
|
|
27
|
-
export declare function getConfigWithInheritance(pool: pg.Pool, tenantId: string): Promise<ResolvedConfig>;
|
|
36
|
+
export declare function getConfigWithInheritance(pool: pg.Pool, tenantId: string, options?: ResolveConfigOptions): Promise<ResolvedConfig>;
|
|
28
37
|
//# sourceMappingURL=config-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAO1B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAO1B,MAAM,kBAAkB,CAAC;AAyC1B;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAmEzB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,WAAW,CAAC,CA2CtB;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAwF/B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAwFzB"}
|
|
@@ -9,11 +9,45 @@ const pool_helpers_js_1 = require("../pool-helpers.js");
|
|
|
9
9
|
const core_1 = require("@stratum-hq/core");
|
|
10
10
|
const crypto_js_1 = require("../crypto.js");
|
|
11
11
|
const tenant_service_js_1 = require("./tenant-service.js");
|
|
12
|
+
/**
|
|
13
|
+
* Build the resolved entry for a stored `entry` read at `tenantId`.
|
|
14
|
+
*
|
|
15
|
+
* A sensitive value set on another tenant (an ancestor) is masked: `value` is
|
|
16
|
+
* null and `masked` is true, and it is never decrypted. `options` reveals it
|
|
17
|
+
* to trusted server code (`revealSensitive`) or to the tenant that set it
|
|
18
|
+
* (`viewerTenantId`). A tenant's own sensitive values are always decrypted.
|
|
19
|
+
*/
|
|
20
|
+
function toResolvedEntry(entry, tenantId, inherited, locked, options) {
|
|
21
|
+
const resolved = {
|
|
22
|
+
key: entry.key,
|
|
23
|
+
value: entry.value,
|
|
24
|
+
source_tenant_id: entry.source_tenant_id,
|
|
25
|
+
inherited,
|
|
26
|
+
locked,
|
|
27
|
+
};
|
|
28
|
+
if (!entry.sensitive)
|
|
29
|
+
return resolved;
|
|
30
|
+
resolved.sensitive = true;
|
|
31
|
+
const reveal = entry.tenant_id === tenantId ||
|
|
32
|
+
options.revealSensitive === true ||
|
|
33
|
+
(options.viewerTenantId !== undefined && options.viewerTenantId === entry.source_tenant_id);
|
|
34
|
+
if (reveal) {
|
|
35
|
+
resolved.value = JSON.parse((0, crypto_js_1.decrypt)(entry.value));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
resolved.value = null;
|
|
39
|
+
resolved.masked = true;
|
|
40
|
+
}
|
|
41
|
+
return resolved;
|
|
42
|
+
}
|
|
12
43
|
/**
|
|
13
44
|
* Resolve the effective config for a tenant by batch-loading ancestor configs
|
|
14
45
|
* in a single query and walking root→leaf.
|
|
46
|
+
*
|
|
47
|
+
* Sensitive values inherited from an ancestor come back masked unless
|
|
48
|
+
* `options` reveals them (see {@link ResolveConfigOptions}).
|
|
15
49
|
*/
|
|
16
|
-
async function resolveConfig(pool, tenantId) {
|
|
50
|
+
async function resolveConfig(pool, tenantId, options = {}) {
|
|
17
51
|
return (0, pool_helpers_js_1.withClient)(pool, async (client) => {
|
|
18
52
|
const tenantRes = await client.query(`SELECT ancestry_path FROM tenants WHERE id = $1 AND status != 'archived'`, [tenantId]);
|
|
19
53
|
if (tenantRes.rows.length === 0) {
|
|
@@ -54,16 +88,7 @@ async function resolveConfig(pool, tenantId) {
|
|
|
54
88
|
continue;
|
|
55
89
|
}
|
|
56
90
|
const isCurrentTenant = currentTenantId === tenantId;
|
|
57
|
-
|
|
58
|
-
? JSON.parse((0, crypto_js_1.decrypt)(entry.value))
|
|
59
|
-
: entry.value;
|
|
60
|
-
resolved.set(entry.key, {
|
|
61
|
-
key: entry.key,
|
|
62
|
-
value: resolvedValue,
|
|
63
|
-
source_tenant_id: entry.source_tenant_id,
|
|
64
|
-
inherited: !isCurrentTenant,
|
|
65
|
-
locked: entry.locked,
|
|
66
|
-
});
|
|
91
|
+
resolved.set(entry.key, toResolvedEntry(entry, tenantId, !isCurrentTenant, entry.locked, options));
|
|
67
92
|
}
|
|
68
93
|
}
|
|
69
94
|
return Object.fromEntries(resolved);
|
|
@@ -108,9 +133,33 @@ async function setConfig(pool, tenantId, key, input) {
|
|
|
108
133
|
});
|
|
109
134
|
}
|
|
110
135
|
/**
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
|
|
136
|
+
* Return why a batch entry cannot be written, or null when it can.
|
|
137
|
+
* The value must serialize to JSON because config_entries.value is JSONB NOT NULL.
|
|
138
|
+
*/
|
|
139
|
+
function invalidBatchEntryReason(entry) {
|
|
140
|
+
if (typeof entry.key !== "string" || entry.key.length === 0) {
|
|
141
|
+
return "Config key must be a non-empty string";
|
|
142
|
+
}
|
|
143
|
+
let serialized;
|
|
144
|
+
try {
|
|
145
|
+
serialized = JSON.stringify(entry.value);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
serialized = undefined;
|
|
149
|
+
}
|
|
150
|
+
if (serialized === undefined) {
|
|
151
|
+
return `Config '${entry.key}' has a value that cannot be stored as JSON`;
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Set multiple config keys for a tenant in a single, atomic transaction.
|
|
157
|
+
*
|
|
158
|
+
* Every entry is checked before anything is written. If any key is locked by
|
|
159
|
+
* an active ancestor or is invalid, the whole batch is rolled back: nothing is
|
|
160
|
+
* written, `rolled_back` is true, and each result has status "error". The
|
|
161
|
+
* offending keys carry their own reason; the rest name the keys that caused
|
|
162
|
+
* the rollback.
|
|
114
163
|
*/
|
|
115
164
|
async function batchSetConfig(pool, tenantId, entries) {
|
|
116
165
|
return (0, pool_helpers_js_1.withTransaction)(pool, async (client) => {
|
|
@@ -131,20 +180,36 @@ async function batchSetConfig(pool, tenantId, entries) {
|
|
|
131
180
|
lockedKeys.set(row.key, row.source_tenant_id);
|
|
132
181
|
}
|
|
133
182
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
183
|
+
// Check every entry before writing anything.
|
|
184
|
+
const failures = new Map();
|
|
185
|
+
entries.forEach((entry, i) => {
|
|
186
|
+
const invalid = invalidBatchEntryReason(entry);
|
|
187
|
+
if (invalid) {
|
|
188
|
+
failures.set(i, invalid);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
138
191
|
const lockerTenantId = lockedKeys.get(entry.key);
|
|
139
192
|
if (lockerTenantId) {
|
|
140
|
-
|
|
193
|
+
failures.set(i, `Config '${entry.key}' is locked by tenant ${lockerTenantId} and cannot be overridden`);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
if (failures.size > 0) {
|
|
197
|
+
const failedKeys = [...failures.keys()].map((i) => `'${entries[i].key}'`).join(", ");
|
|
198
|
+
const rolledBack = `Not applied: the batch was rolled back because ${failedKeys} failed`;
|
|
199
|
+
return {
|
|
200
|
+
results: entries.map((entry, i) => ({
|
|
141
201
|
key: entry.key,
|
|
142
202
|
status: "error",
|
|
143
|
-
error:
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
203
|
+
error: failures.get(i) ?? rolledBack,
|
|
204
|
+
})),
|
|
205
|
+
succeeded: 0,
|
|
206
|
+
failed: entries.length,
|
|
207
|
+
rolled_back: true,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const results = [];
|
|
211
|
+
let succeeded = 0;
|
|
212
|
+
for (const entry of entries) {
|
|
148
213
|
const sensitive = entry.sensitive ?? false;
|
|
149
214
|
const storedValue = sensitive
|
|
150
215
|
? JSON.stringify((0, crypto_js_1.encrypt)(JSON.stringify(entry.value)))
|
|
@@ -165,7 +230,7 @@ async function batchSetConfig(pool, tenantId, entries) {
|
|
|
165
230
|
});
|
|
166
231
|
succeeded++;
|
|
167
232
|
}
|
|
168
|
-
return { results, succeeded, failed };
|
|
233
|
+
return { results, succeeded, failed: 0, rolled_back: false };
|
|
169
234
|
});
|
|
170
235
|
}
|
|
171
236
|
/**
|
|
@@ -182,8 +247,10 @@ async function deleteConfig(pool, tenantId, key) {
|
|
|
182
247
|
/**
|
|
183
248
|
* Return all config entries for a tenant showing inheritance status:
|
|
184
249
|
* inherited (from ancestor), overridden (tenant has own value), or locked.
|
|
250
|
+
*
|
|
251
|
+
* Inherited sensitive values are masked as in {@link resolveConfig}.
|
|
185
252
|
*/
|
|
186
|
-
async function getConfigWithInheritance(pool, tenantId) {
|
|
253
|
+
async function getConfigWithInheritance(pool, tenantId, options = {}) {
|
|
187
254
|
return (0, pool_helpers_js_1.withClient)(pool, async (client) => {
|
|
188
255
|
const tenantRes = await client.query(`SELECT ancestry_path FROM tenants WHERE id = $1`, [tenantId]);
|
|
189
256
|
if (tenantRes.rows.length === 0) {
|
|
@@ -231,9 +298,6 @@ async function getConfigWithInheritance(pool, tenantId) {
|
|
|
231
298
|
}
|
|
232
299
|
}
|
|
233
300
|
}
|
|
234
|
-
const decryptEntryValue = (entry) => entry.sensitive
|
|
235
|
-
? JSON.parse((0, crypto_js_1.decrypt)(entry.value))
|
|
236
|
-
: entry.value;
|
|
237
301
|
const result = {};
|
|
238
302
|
for (const [key, rec] of byKey) {
|
|
239
303
|
const lockedEntry = rec.lockedBy;
|
|
@@ -241,33 +305,15 @@ async function getConfigWithInheritance(pool, tenantId) {
|
|
|
241
305
|
const ancestorEntry = rec.ancestorEntry;
|
|
242
306
|
if (lockedEntry) {
|
|
243
307
|
// Key is locked: show ancestor's locked value regardless of tenant override
|
|
244
|
-
result[key] =
|
|
245
|
-
key,
|
|
246
|
-
value: decryptEntryValue(lockedEntry),
|
|
247
|
-
source_tenant_id: lockedEntry.source_tenant_id,
|
|
248
|
-
inherited: true,
|
|
249
|
-
locked: true,
|
|
250
|
-
};
|
|
308
|
+
result[key] = toResolvedEntry(lockedEntry, tenantId, true, true, options);
|
|
251
309
|
}
|
|
252
310
|
else if (tenantEntry) {
|
|
253
311
|
// Tenant has its own value (override or own entry)
|
|
254
|
-
result[key] =
|
|
255
|
-
key,
|
|
256
|
-
value: decryptEntryValue(tenantEntry),
|
|
257
|
-
source_tenant_id: tenantEntry.source_tenant_id,
|
|
258
|
-
inherited: false,
|
|
259
|
-
locked: tenantEntry.locked,
|
|
260
|
-
};
|
|
312
|
+
result[key] = toResolvedEntry(tenantEntry, tenantId, false, tenantEntry.locked, options);
|
|
261
313
|
}
|
|
262
314
|
else if (ancestorEntry) {
|
|
263
315
|
// Inherited from ancestor
|
|
264
|
-
result[key] =
|
|
265
|
-
key,
|
|
266
|
-
value: decryptEntryValue(ancestorEntry),
|
|
267
|
-
source_tenant_id: ancestorEntry.source_tenant_id,
|
|
268
|
-
inherited: true,
|
|
269
|
-
locked: ancestorEntry.locked,
|
|
270
|
-
};
|
|
316
|
+
result[key] = toResolvedEntry(ancestorEntry, tenantId, true, ancestorEntry.locked, options);
|
|
271
317
|
}
|
|
272
318
|
}
|
|
273
319
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-service.d.ts","sourceRoot":"","sources":["../../src/services/tenant-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EAalB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmB7F;AAYD,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4D/F;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,eAAe,UAAQ,GACtB,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,IAAI,EAAE,MAAM,EACZ,eAAe,UAAQ,GACtB,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,UAAU,EAAE,eAAe,EAC3B,MAAM,GAAE,YAAuB,GAC9B,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CA8BtC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,UAAU,CAAC,CAmErB;
|
|
1
|
+
{"version":3,"file":"tenant-service.d.ts","sourceRoot":"","sources":["../../src/services/tenant-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EAalB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjG;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmB7F;AAYD,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4D/F;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,eAAe,UAAQ,GACtB,OAAO,CAAC,UAAU,CAAC,CAyBrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,IAAI,EAAE,MAAM,EACZ,eAAe,UAAQ,GACtB,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,UAAU,EAAE,eAAe,EAC3B,MAAM,GAAE,YAAuB,GAC9B,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CA8BtC;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,UAAU,CAAC,CAmErB;AAkED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAalF;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAalF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BjF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAenF;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CA+ErB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,MAAM,EAAE,iBAAiB,EAAE,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAmF5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBnF;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyB5E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,EAAE,EAAE,MAAM,EACV,eAAe,UAAQ,GACtB,OAAO,CAAC,UAAU,EAAE,CAAC,CAyBvB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAwDpG"}
|
|
@@ -295,10 +295,10 @@ async function loadForTransition(client, id) {
|
|
|
295
295
|
* and forces a leaf-first walk so no active tenant is ever left under a
|
|
296
296
|
* non-active parent.
|
|
297
297
|
*/
|
|
298
|
-
async function assertNoActiveChildren(client, id) {
|
|
298
|
+
async function assertNoActiveChildren(client, id, action) {
|
|
299
299
|
const childrenRes = await client.query(`SELECT COUNT(*) as count FROM tenants WHERE parent_id = $1 AND status = 'active'`, [id]);
|
|
300
300
|
if (parseInt(childrenRes.rows[0].count, 10) > 0) {
|
|
301
|
-
throw new core_1.TenantHasChildrenError(id);
|
|
301
|
+
throw new core_1.TenantHasChildrenError(id, action);
|
|
302
302
|
}
|
|
303
303
|
}
|
|
304
304
|
/**
|
|
@@ -311,7 +311,7 @@ async function suspendTenant(pool, id) {
|
|
|
311
311
|
if (tenant.status !== "active") {
|
|
312
312
|
throw new core_1.InvalidTenantStateError(id, tenant.status, "suspend", ["active"]);
|
|
313
313
|
}
|
|
314
|
-
await assertNoActiveChildren(client, id);
|
|
314
|
+
await assertNoActiveChildren(client, id, "suspend");
|
|
315
315
|
const res = await client.query(`UPDATE tenants SET status = 'suspended', updated_at = now() WHERE id = $1 RETURNING *`, [id]);
|
|
316
316
|
return res.rows[0];
|
|
317
317
|
});
|
|
@@ -326,7 +326,7 @@ async function archiveTenant(pool, id) {
|
|
|
326
326
|
if (tenant.status !== "active" && tenant.status !== "suspended") {
|
|
327
327
|
throw new core_1.InvalidTenantStateError(id, tenant.status, "archive", ["active", "suspended"]);
|
|
328
328
|
}
|
|
329
|
-
await assertNoActiveChildren(client, id);
|
|
329
|
+
await assertNoActiveChildren(client, id, "archive");
|
|
330
330
|
const res = await client.query(`UPDATE tenants SET status = 'archived', deleted_at = now(), updated_at = now() WHERE id = $1 RETURNING *`, [id]);
|
|
331
331
|
return res.rows[0];
|
|
332
332
|
});
|