@xemahq/biome-database-nest 7.2.0 → 8.0.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 +57 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-lock.d.ts +2 -0
- package/dist/lib/advisory-lock.d.ts.map +1 -1
- package/dist/lib/advisory-lock.js +8 -0
- package/dist/lib/advisory-lock.js.map +1 -1
- package/dist/lib/biome-migrations.d.ts +2 -0
- package/dist/lib/biome-migrations.d.ts.map +1 -1
- package/dist/lib/biome-migrations.js +3 -1
- package/dist/lib/biome-migrations.js.map +1 -1
- package/dist/lib/bootstrap.d.ts +2 -0
- package/dist/lib/bootstrap.d.ts.map +1 -1
- package/dist/lib/bootstrap.js +4 -3
- package/dist/lib/bootstrap.js.map +1 -1
- package/dist/lib/ledger-rows.d.ts +1 -0
- package/dist/lib/ledger-rows.d.ts.map +1 -1
- package/dist/lib/ledger-rows.js +9 -0
- package/dist/lib/ledger-rows.js.map +1 -1
- package/dist/lib/nest/biome-database.module.d.ts +2 -0
- 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/nest/org-erasure.module.d.ts.map +1 -1
- package/dist/lib/nest/org-erasure.module.js +4 -6
- package/dist/lib/nest/org-erasure.module.js.map +1 -1
- package/dist/lib/nest/prisma-service-factory.d.ts.map +1 -1
- package/dist/lib/nest/prisma-service-factory.js +23 -13
- package/dist/lib/nest/prisma-service-factory.js.map +1 -1
- package/dist/lib/org-erasure-coverage/assert-org-erasure-armed.d.ts +4 -0
- package/dist/lib/org-erasure-coverage/assert-org-erasure-armed.d.ts.map +1 -0
- package/dist/lib/org-erasure-coverage/assert-org-erasure-armed.js +13 -0
- package/dist/lib/org-erasure-coverage/assert-org-erasure-armed.js.map +1 -0
- package/dist/lib/org-quiesce/org-erasure-isolation-error.d.ts +6 -0
- package/dist/lib/org-quiesce/org-erasure-isolation-error.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-erasure-isolation-error.js +16 -0
- package/dist/lib/org-quiesce/org-erasure-isolation-error.js.map +1 -0
- package/dist/lib/org-quiesce/org-erasure-transaction.d.ts +2 -0
- package/dist/lib/org-quiesce/org-erasure-transaction.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-erasure-transaction.js +16 -0
- package/dist/lib/org-quiesce/org-erasure-transaction.js.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.d.ts +9 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.js +42 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.js.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.migrations.d.ts +4 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.migrations.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.migrations.js +74 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.migrations.js.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.module.d.ts +3 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.module.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.module.js +21 -0
- package/dist/lib/org-quiesce/org-quiesce-marks.module.js.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal-mapping.d.ts +13 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal-mapping.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal-mapping.js +63 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal-mapping.js.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal.d.ts +33 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal.js +50 -0
- package/dist/lib/org-quiesce/org-quiesce-refusal.js.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-apply.d.ts +10 -0
- package/dist/lib/org-quiesce/org-write-fence-apply.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-apply.js +55 -0
- package/dist/lib/org-quiesce/org-write-fence-apply.js.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-coverage.d.ts +18 -0
- package/dist/lib/org-quiesce/org-write-fence-coverage.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-coverage.js +51 -0
- package/dist/lib/org-quiesce/org-write-fence-coverage.js.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-token.sql.d.ts +2 -0
- package/dist/lib/org-quiesce/org-write-fence-token.sql.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-token.sql.js +80 -0
- package/dist/lib/org-quiesce/org-write-fence-token.sql.js.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-triggers.d.ts +48 -0
- package/dist/lib/org-quiesce/org-write-fence-triggers.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence-triggers.js +171 -0
- package/dist/lib/org-quiesce/org-write-fence-triggers.js.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence.sql.d.ts +2 -0
- package/dist/lib/org-quiesce/org-write-fence.sql.d.ts.map +1 -0
- package/dist/lib/org-quiesce/org-write-fence.sql.js +132 -0
- package/dist/lib/org-quiesce/org-write-fence.sql.js.map +1 -0
- package/dist/lib/sdk-owned-migrations.d.ts.map +1 -1
- package/dist/lib/sdk-owned-migrations.js +5 -1
- package/dist/lib/sdk-owned-migrations.js.map +1 -1
- package/dist/lib/service-migration-scan.d.ts +2 -1
- package/dist/lib/service-migration-scan.d.ts.map +1 -1
- package/dist/lib/service-migration-scan.js +7 -2
- package/dist/lib/service-migration-scan.js.map +1 -1
- package/dist/lib/session-timezone.d.ts +6 -1
- package/dist/lib/session-timezone.d.ts.map +1 -1
- package/dist/lib/session-timezone.js +12 -0
- package/dist/lib/session-timezone.js.map +1 -1
- package/dist/lib/tenant-isolation/authored-resource-org-erasure.d.ts.map +1 -1
- package/dist/lib/tenant-isolation/authored-resource-org-erasure.js +22 -19
- package/dist/lib/tenant-isolation/authored-resource-org-erasure.js.map +1 -1
- package/dist/lib/tenant-isolation/org-erasure.d.ts +1 -0
- package/dist/lib/tenant-isolation/org-erasure.d.ts.map +1 -1
- package/dist/lib/tenant-isolation/org-erasure.js +9 -7
- package/dist/lib/tenant-isolation/org-erasure.js.map +1 -1
- package/package.json +12 -11
- package/xema-peer-facts.json +7 -7
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ORG_WRITE_FENCE_SQL = void 0;
|
|
4
|
+
exports.ORG_WRITE_FENCE_SQL = `
|
|
5
|
+
CREATE FUNCTION xema_org_quiesce_lock_key(p_org text) RETURNS bigint
|
|
6
|
+
LANGUAGE sql STABLE SET search_path FROM CURRENT AS $fn$
|
|
7
|
+
SELECT hashtext(current_schema() || ':' || 'org-quiesce:' || p_org)::bigint
|
|
8
|
+
$fn$;
|
|
9
|
+
|
|
10
|
+
CREATE FUNCTION xema_org_holds_erasure_lock(p_org text) RETURNS boolean
|
|
11
|
+
LANGUAGE sql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
12
|
+
SELECT EXISTS (
|
|
13
|
+
SELECT 1
|
|
14
|
+
FROM pg_locks AS l, xema_org_quiesce_lock_key(p_org) AS k(key)
|
|
15
|
+
WHERE l.locktype = 'advisory'
|
|
16
|
+
AND l.database = (SELECT d.oid FROM pg_database AS d WHERE d.datname = current_database())
|
|
17
|
+
AND l.pid = pg_backend_pid()
|
|
18
|
+
AND l.mode = 'ExclusiveLock'
|
|
19
|
+
AND l.granted
|
|
20
|
+
AND l.objsubid = 1
|
|
21
|
+
AND l.classid::bigint = (k.key >> 32) & 4294967295
|
|
22
|
+
AND l.objid::bigint = k.key & 4294967295
|
|
23
|
+
)
|
|
24
|
+
$fn$;
|
|
25
|
+
|
|
26
|
+
CREATE FUNCTION xema_org_is_quiescing(p_org text) RETURNS boolean
|
|
27
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
28
|
+
BEGIN
|
|
29
|
+
-- The hot path: one shared advisory lock and one indexed read. The pg_locks
|
|
30
|
+
-- scan (which takes every lock-manager partition lock) runs ONLY for a
|
|
31
|
+
-- marked org, never per ordinary row write.
|
|
32
|
+
PERFORM pg_advisory_xact_lock_shared(xema_org_quiesce_lock_key(p_org));
|
|
33
|
+
IF EXISTS (SELECT 1 FROM "org_quiesce_marks" AS m WHERE m."org_id" = p_org) THEN
|
|
34
|
+
RETURN NOT xema_org_holds_erasure_lock(p_org);
|
|
35
|
+
END IF;
|
|
36
|
+
RETURN false;
|
|
37
|
+
END
|
|
38
|
+
$fn$;
|
|
39
|
+
|
|
40
|
+
CREATE FUNCTION xema_org_write_fence(p_org text) RETURNS void
|
|
41
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
42
|
+
BEGIN
|
|
43
|
+
IF xema_org_is_quiescing(p_org) THEN
|
|
44
|
+
RAISE EXCEPTION USING ERRCODE = 'XQ409', MESSAGE = 'ORG_QUIESCING', DETAIL = p_org;
|
|
45
|
+
END IF;
|
|
46
|
+
END
|
|
47
|
+
$fn$;
|
|
48
|
+
|
|
49
|
+
CREATE FUNCTION xema_org_write_fence_org_of_row(p_row jsonb, p_is_new boolean, p_nargs integer, p_a0 text, p_a1 text, p_a2 text, p_a3 text) RETURNS text
|
|
50
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
51
|
+
DECLARE
|
|
52
|
+
fk_value text;
|
|
53
|
+
key_type text;
|
|
54
|
+
parent_org text;
|
|
55
|
+
found boolean;
|
|
56
|
+
BEGIN
|
|
57
|
+
IF p_nargs = 1 THEN
|
|
58
|
+
RETURN p_row ->> p_a0;
|
|
59
|
+
END IF;
|
|
60
|
+
IF p_nargs <> 4 THEN
|
|
61
|
+
RAISE EXCEPTION 'xema_org_write_fence_trigger takes (org_column) or (fk_column, parent_table, parent_key, parent_org_column), got % arguments', p_nargs;
|
|
62
|
+
END IF;
|
|
63
|
+
fk_value := p_row ->> p_a0;
|
|
64
|
+
IF fk_value IS NULL THEN
|
|
65
|
+
RETURN NULL;
|
|
66
|
+
END IF;
|
|
67
|
+
-- The parameter is cast to the parent key's own type, never the column to
|
|
68
|
+
-- text, so the lookup uses the key's index (a uuid or int key included).
|
|
69
|
+
SELECT format_type(a.atttypid, a.atttypmod) INTO key_type
|
|
70
|
+
FROM pg_attribute AS a
|
|
71
|
+
WHERE a.attrelid = to_regclass(quote_ident(p_a1)) AND a.attname = p_a2 AND NOT a.attisdropped;
|
|
72
|
+
IF key_type IS NULL THEN
|
|
73
|
+
RAISE EXCEPTION 'xema_org_write_fence_trigger: parent key %.% does not exist', p_a1, p_a2;
|
|
74
|
+
END IF;
|
|
75
|
+
EXECUTE format('SELECT true, %I::text FROM %I WHERE %I = $1::%s', p_a3, p_a1, p_a2, key_type)
|
|
76
|
+
INTO found, parent_org USING fk_value;
|
|
77
|
+
IF found IS NOT TRUE THEN
|
|
78
|
+
-- A row that is written (NEW) must have its parent: without it the org is
|
|
79
|
+
-- unknown, and an unknown org must never pass the fence.
|
|
80
|
+
IF p_is_new THEN
|
|
81
|
+
RAISE EXCEPTION USING ERRCODE = 'XQ404', MESSAGE = 'ORG_FENCE_PARENT_MISSING', DETAIL = fk_value;
|
|
82
|
+
END IF;
|
|
83
|
+
-- A row that is removed or replaced (OLD) with no parent passes: an ON
|
|
84
|
+
-- DELETE CASCADE from the parent runs after the parent row is gone, and
|
|
85
|
+
-- the parent's own delete was already fenced by its own trigger.
|
|
86
|
+
RETURN NULL;
|
|
87
|
+
END IF;
|
|
88
|
+
RETURN parent_org;
|
|
89
|
+
END
|
|
90
|
+
$fn$;
|
|
91
|
+
|
|
92
|
+
CREATE FUNCTION xema_org_write_fence_trigger() RETURNS trigger
|
|
93
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
94
|
+
DECLARE
|
|
95
|
+
new_org text;
|
|
96
|
+
old_org text;
|
|
97
|
+
BEGIN
|
|
98
|
+
IF TG_OP IN ('INSERT', 'UPDATE') THEN
|
|
99
|
+
new_org := xema_org_write_fence_org_of_row(to_jsonb(NEW), true, TG_NARGS, TG_ARGV[0], TG_ARGV[1], TG_ARGV[2], TG_ARGV[3]);
|
|
100
|
+
IF new_org IS NOT NULL THEN
|
|
101
|
+
PERFORM xema_org_write_fence(new_org);
|
|
102
|
+
END IF;
|
|
103
|
+
END IF;
|
|
104
|
+
IF TG_OP IN ('UPDATE', 'DELETE') THEN
|
|
105
|
+
old_org := xema_org_write_fence_org_of_row(to_jsonb(OLD), false, TG_NARGS, TG_ARGV[0], TG_ARGV[1], TG_ARGV[2], TG_ARGV[3]);
|
|
106
|
+
IF old_org IS NOT NULL AND old_org IS DISTINCT FROM new_org THEN
|
|
107
|
+
PERFORM xema_org_write_fence(old_org);
|
|
108
|
+
END IF;
|
|
109
|
+
END IF;
|
|
110
|
+
IF TG_OP = 'DELETE' THEN
|
|
111
|
+
RETURN OLD;
|
|
112
|
+
END IF;
|
|
113
|
+
RETURN NEW;
|
|
114
|
+
END
|
|
115
|
+
$fn$;
|
|
116
|
+
|
|
117
|
+
CREATE FUNCTION xema_org_write_fence_truncate() RETURNS trigger
|
|
118
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
119
|
+
BEGIN
|
|
120
|
+
RAISE EXCEPTION USING ERRCODE = 'XQ410', MESSAGE = 'ORG_FENCE_TRUNCATE_REFUSED', DETAIL = TG_TABLE_NAME;
|
|
121
|
+
END
|
|
122
|
+
$fn$;
|
|
123
|
+
|
|
124
|
+
CREATE FUNCTION xema_org_quiesce_mark(p_org text) RETURNS void
|
|
125
|
+
LANGUAGE plpgsql VOLATILE SET search_path FROM CURRENT AS $fn$
|
|
126
|
+
BEGIN
|
|
127
|
+
PERFORM pg_advisory_xact_lock(xema_org_quiesce_lock_key(p_org));
|
|
128
|
+
INSERT INTO "org_quiesce_marks" ("org_id") VALUES (p_org) ON CONFLICT ("org_id") DO NOTHING;
|
|
129
|
+
END
|
|
130
|
+
$fn$;
|
|
131
|
+
`;
|
|
132
|
+
//# sourceMappingURL=org-write-fence.sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-write-fence.sql.js","sourceRoot":"","sources":["../../../src/lib/org-quiesce/org-write-fence.sql.ts"],"names":[],"mappings":";;;AAyCa,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+HlC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-owned-migrations.d.ts","sourceRoot":"","sources":["../../src/lib/sdk-owned-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-owned-migrations.d.ts","sourceRoot":"","sources":["../../src/lib/sdk-owned-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AAYvB,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAmBnC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GACpC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQrB;AAiDD,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,yBAAyB,EACnC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -5,6 +5,7 @@ exports.applySdkOwnedMigrations = applySdkOwnedMigrations;
|
|
|
5
5
|
const ledger_rows_1 = require("./ledger-rows");
|
|
6
6
|
const operator_migration_1 = require("./operator-migration");
|
|
7
7
|
const operator_migration_ledger_1 = require("./operator-migration-ledger");
|
|
8
|
+
const org_write_fence_apply_1 = require("./org-quiesce/org-write-fence-apply");
|
|
8
9
|
const owned_table_shape_1 = require("./owned-table-shape");
|
|
9
10
|
const sdk_owned_errors_1 = require("./sdk-owned-errors");
|
|
10
11
|
const sdk_owned_migration_set_1 = require("./sdk-owned-migration-set");
|
|
@@ -18,7 +19,10 @@ function sdkOwnedTableOwners(sets) {
|
|
|
18
19
|
return new Map(all.flatMap((set) => set.tables.map((table) => [table.name, set.owner])));
|
|
19
20
|
}
|
|
20
21
|
async function assertLedgerKnownToImage(database, sets) {
|
|
21
|
-
const known = new Set(
|
|
22
|
+
const known = new Set([
|
|
23
|
+
...migrationIdsOf([operator_migration_ledger_1.operatorMigrationLedgerMigrations, ...sets]),
|
|
24
|
+
org_write_fence_apply_1.ORG_WRITE_FENCE_DECLARATION_ID,
|
|
25
|
+
]);
|
|
22
26
|
const recorded = await database.query(`SELECT migration_id FROM "${operator_migration_ledger_1.OPERATOR_MIGRATION_LEDGER_TABLE}" WHERE phase = $1 ORDER BY migration_id`, [ledger_rows_1.OperatorMigrationPhase.Applied]);
|
|
23
27
|
const unknown = recorded.rows
|
|
24
28
|
.map((row) => row.migration_id)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-owned-migrations.js","sourceRoot":"","sources":["../../src/lib/sdk-owned-migrations.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"sdk-owned-migrations.js","sourceRoot":"","sources":["../../src/lib/sdk-owned-migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SdkOwnedTablePriorCreator } from './sdk-owned-migration-set';
|
|
1
2
|
export declare function sdkOwnedTableNamedByMigration(sql: string, tables: readonly string[]): string | undefined;
|
|
2
|
-
export declare function assertServiceMigrationsLeaveSdkOwnedTablesAlone(workspaceDir: string, ownerOfTable: ReadonlyMap<string, string
|
|
3
|
+
export declare function assertServiceMigrationsLeaveSdkOwnedTablesAlone(workspaceDir: string, ownerOfTable: ReadonlyMap<string, string>, priorCreators: readonly SdkOwnedTablePriorCreator[]): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=service-migration-scan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-migration-scan.d.ts","sourceRoot":"","sources":["../../src/lib/service-migration-scan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-migration-scan.d.ts","sourceRoot":"","sources":["../../src/lib/service-migration-scan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AA4J3E,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,GAAG,SAAS,CAuBpB;AAeD,wBAAsB,+CAA+C,CACnE,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,aAAa,EAAE,SAAS,yBAAyB,EAAE,GAClD,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -4,6 +4,7 @@ exports.sdkOwnedTableNamedByMigration = sdkOwnedTableNamedByMigration;
|
|
|
4
4
|
exports.assertServiceMigrationsLeaveSdkOwnedTablesAlone = assertServiceMigrationsLeaveSdkOwnedTablesAlone;
|
|
5
5
|
const promises_1 = require("node:fs/promises");
|
|
6
6
|
const node_path_1 = require("node:path");
|
|
7
|
+
const ledger_rows_1 = require("./ledger-rows");
|
|
7
8
|
const migration_history_1 = require("./migration-history");
|
|
8
9
|
const sdk_owned_errors_1 = require("./sdk-owned-errors");
|
|
9
10
|
var TokenKind;
|
|
@@ -151,11 +152,15 @@ function sdkOwnedTableNamedByMigration(sql, tables) {
|
|
|
151
152
|
}
|
|
152
153
|
return undefined;
|
|
153
154
|
}
|
|
154
|
-
async function assertServiceMigrationsLeaveSdkOwnedTablesAlone(workspaceDir, ownerOfTable) {
|
|
155
|
+
async function assertServiceMigrationsLeaveSdkOwnedTablesAlone(workspaceDir, ownerOfTable, priorCreators) {
|
|
155
156
|
const tables = [...ownerOfTable.keys()];
|
|
156
157
|
for (const migration of await (0, migration_history_1.readLocalPrismaMigrationNames)(workspaceDir)) {
|
|
157
158
|
const sql = await (0, promises_1.readFile)((0, node_path_1.join)(workspaceDir, 'prisma', 'migrations', migration, 'migration.sql'), 'utf8');
|
|
158
|
-
const
|
|
159
|
+
const checksum = (0, ledger_rows_1.sha256)(sql);
|
|
160
|
+
const declared = new Set(priorCreators
|
|
161
|
+
.filter((prior) => prior.serviceMigration === migration && prior.sha256 === checksum)
|
|
162
|
+
.map((prior) => prior.table));
|
|
163
|
+
const table = sdkOwnedTableNamedByMigration(sql, tables.filter((candidate) => !declared.has(candidate)));
|
|
159
164
|
if (table !== undefined) {
|
|
160
165
|
throw new sdk_owned_errors_1.ServiceMigrationTouchesSdkOwnedTableError(migration, table, ownerOfTable.get(table) ?? '');
|
|
161
166
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-migration-scan.js","sourceRoot":"","sources":["../../src/lib/service-migration-scan.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"service-migration-scan.js","sourceRoot":"","sources":["../../src/lib/service-migration-scan.ts"],"names":[],"mappings":";;AAmKA,sEA0BC;AAeD,0GAgCC;AA5OD,+CAA4C;AAC5C,yCAAiC;AAEjC,+CAAuC;AACvC,2DAAoE;AACpE,yDAA+E;AAI/E,IAAK,SAOJ;AAPD,WAAK,SAAS;IAEZ,0BAAa,CAAA;IAEb,gCAAmB,CAAA;IAEnB,uCAA0B,CAAA;AAC5B,CAAC,EAPI,SAAS,KAAT,SAAS,QAOb;AAOD,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,UAAU,GAAG,mCAAmC,CAAC;AAGvD,SAAS,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,CAAC;YACX,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,CAAC,CAAC;YACX,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAS,UAAU,CACjB,GAAW,EACX,KAAa,EACb,KAAa,EACb,gBAAyB;IAEzB,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IACtB,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,gBAAgB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC7B,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,IAAI,OAAO,GAAY,EAAE,CAAC;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACvC,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;aAC1D,CAAC,CAAC;YACH,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACvE,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS,CAAC,UAAU;gBAC1B,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;aACzC,CAAC,CAAC;YACH,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,CAAC;aAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;YACpB,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,GAAG,IAAI,CAAC,CAAC;YACX,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACjE,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAQD,SAAS,oBAAoB,CAAC,SAA2B;IACvD,MAAM,KAAK,GAAG,SAAS;SACpB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;SAChD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IACE,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;QACrB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,KAAK,SAAS,CAAC;AAC9D,CAAC;AAGD,SAAS,cAAc,CAAC,SAA2B;IACjD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAC7E,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,QAAQ,CAAC;AAC9C,CAAC;AAQD,SAAgB,6BAA6B,CAC3C,GAAW,EACX,MAAyB;IAEzB,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;YACD,IACE,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU;gBACnC,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBAChC,CAAC,cAAc,CAAC,SAAS,CAAC,EAC1B,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,IAAI,MAAM,CAAC,qBAAqB,KAAK,mBAAmB,EAAE,GAAG,CAAC,CAAC,IAAI,CACjE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CACxC,CACF,CAAC;gBACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAeM,KAAK,UAAU,+CAA+C,CACnE,YAAoB,EACpB,YAAyC,EACzC,aAAmD;IAEnD,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM,SAAS,IAAI,MAAM,IAAA,iDAA6B,EAAC,YAAY,CAAC,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAQ,EACxB,IAAA,gBAAI,EAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,CAAC,EACtE,MAAM,CACP,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,oBAAM,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,aAAa;aACV,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CACpE;aACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/B,CAAC;QACF,MAAM,KAAK,GAAG,6BAA6B,CACzC,GAAG,EACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CACvD,CAAC;QACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,4DAAyC,CACjD,SAAS,EACT,KAAK,EACL,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare enum DatabaseSessionPath {
|
|
2
2
|
AppPool = "app-pool",
|
|
3
3
|
Bootstrap = "bootstrap",
|
|
4
|
-
OperatorMigration = "operator-migration"
|
|
4
|
+
OperatorMigration = "operator-migration",
|
|
5
|
+
ConsumerPool = "consumer-pool"
|
|
5
6
|
}
|
|
6
7
|
export declare class DatabaseSessionTimeZoneError extends Error {
|
|
7
8
|
readonly expected: string;
|
|
@@ -34,4 +35,8 @@ export interface ConnectableSessionClient extends PgSessionProbe {
|
|
|
34
35
|
end(): Promise<void>;
|
|
35
36
|
}
|
|
36
37
|
export declare function connectVerified(client: ConnectableSessionClient, path: DatabaseSessionPath): Promise<void>;
|
|
38
|
+
export interface ClosableSessionPool extends PgSessionProbe {
|
|
39
|
+
end(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export declare function verifyPgPoolSessionUtc<P extends ClosableSessionPool>(pool: P): Promise<P>;
|
|
37
42
|
//# sourceMappingURL=session-timezone.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-timezone.d.ts","sourceRoot":"","sources":["../../src/lib/session-timezone.ts"],"names":[],"mappings":"AAMA,oBAAY,mBAAmB;IAE7B,OAAO,aAAa;IAEpB,SAAS,cAAc;IAEvB,iBAAiB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"session-timezone.d.ts","sourceRoot":"","sources":["../../src/lib/session-timezone.ts"],"names":[],"mappings":"AAMA,oBAAY,mBAAmB;IAE7B,OAAO,aAAa;IAEpB,SAAS,cAAc;IAEvB,iBAAiB,uBAAuB;IAKxC,YAAY,kBAAkB;CAC/B;AAgBD,qBAAa,4BAA6B,SAAQ,KAAK;IAEnD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,cAAc,EAAE,mBAAmB;gBAFnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,mBAAmB;CAW/C;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CACxE;AAGD,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACzE;AAGD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,EAAE,CAAC;QAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,kBAAkB,GAClB,yBAAyB,CAAC;AAqC9B,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAUf;AAGD,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,wBAAwB,EAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,IAAI,CAAC,CAQf;AAGD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAWD,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,mBAAmB,EACxE,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,CAAC,CAAC,CAQZ"}
|
|
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DatabaseSessionTimeZoneError = exports.DatabaseSessionPath = void 0;
|
|
4
4
|
exports.assertDatabaseSessionUtc = assertDatabaseSessionUtc;
|
|
5
5
|
exports.connectVerified = connectVerified;
|
|
6
|
+
exports.verifyPgPoolSessionUtc = verifyPgPoolSessionUtc;
|
|
6
7
|
const database_url_1 = require("./database-url");
|
|
7
8
|
var DatabaseSessionPath;
|
|
8
9
|
(function (DatabaseSessionPath) {
|
|
9
10
|
DatabaseSessionPath["AppPool"] = "app-pool";
|
|
10
11
|
DatabaseSessionPath["Bootstrap"] = "bootstrap";
|
|
11
12
|
DatabaseSessionPath["OperatorMigration"] = "operator-migration";
|
|
13
|
+
DatabaseSessionPath["ConsumerPool"] = "consumer-pool";
|
|
12
14
|
})(DatabaseSessionPath || (exports.DatabaseSessionPath = DatabaseSessionPath = {}));
|
|
13
15
|
const SHOW_TIME_ZONE_SQL = 'SHOW TimeZone';
|
|
14
16
|
const ACCEPTED_ZONES = [
|
|
@@ -71,4 +73,14 @@ async function connectVerified(client, path) {
|
|
|
71
73
|
throw error;
|
|
72
74
|
}
|
|
73
75
|
}
|
|
76
|
+
async function verifyPgPoolSessionUtc(pool) {
|
|
77
|
+
try {
|
|
78
|
+
await assertDatabaseSessionUtc(pool, DatabaseSessionPath.ConsumerPool);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
await pool.end();
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
return pool;
|
|
85
|
+
}
|
|
74
86
|
//# sourceMappingURL=session-timezone.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-timezone.js","sourceRoot":"","sources":["../../src/lib/session-timezone.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"session-timezone.js","sourceRoot":"","sources":["../../src/lib/session-timezone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-resource-org-erasure.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/authored-resource-org-erasure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authored-resource-org-erasure.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/authored-resource-org-erasure.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAeD,MAAM,MAAM,kCAAkC,GAAG,MAAM,CAAC;AAexD,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,kCAAkC,EAC1C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiCjC"}
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.eraseOwnedAuthoredResourceGraph = eraseOwnedAuthoredResourceGraph;
|
|
4
|
+
const org_erasure_transaction_1 = require("../org-quiesce/org-erasure-transaction");
|
|
4
5
|
async function eraseOwnedAuthoredResourceGraph(client, orgId, names) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
return await (0, org_erasure_transaction_1.inOrgErasureTransaction)(client, orgId, async (tx) => {
|
|
7
|
+
const identity = requireIdentityDelegate(tx, names.identityModel);
|
|
8
|
+
const revision = requireDeleteManyDelegate(tx, names.revisionModel);
|
|
9
|
+
const draft = requireDeleteManyDelegate(tx, names.draftModel);
|
|
10
|
+
const releaseIntent = requireDeleteManyDelegate(tx, names.releaseIntentModel);
|
|
11
|
+
const identityWhere = { ownerOrgId: orgId };
|
|
12
|
+
const childWhere = { identity: { ownerOrgId: orgId } };
|
|
13
|
+
await identity.updateMany({
|
|
14
|
+
where: identityWhere,
|
|
15
|
+
data: { draftId: null },
|
|
16
|
+
});
|
|
17
|
+
const intents = await releaseIntent.deleteMany({ where: childWhere });
|
|
18
|
+
const drafts = await draft.deleteMany({ where: childWhere });
|
|
19
|
+
const revisions = await revision.deleteMany({ where: childWhere });
|
|
20
|
+
const identities = await identity.deleteMany({ where: identityWhere });
|
|
21
|
+
return {
|
|
22
|
+
[names.releaseIntentModel]: intents.count,
|
|
23
|
+
[names.draftModel]: drafts.count,
|
|
24
|
+
[names.revisionModel]: revisions.count,
|
|
25
|
+
[names.identityModel]: identities.count,
|
|
26
|
+
};
|
|
14
27
|
});
|
|
15
|
-
const intents = await releaseIntent.deleteMany({ where: childWhere });
|
|
16
|
-
const drafts = await draft.deleteMany({ where: childWhere });
|
|
17
|
-
const revisions = await revision.deleteMany({ where: childWhere });
|
|
18
|
-
const identities = await identity.deleteMany({ where: identityWhere });
|
|
19
|
-
return {
|
|
20
|
-
[names.releaseIntentModel]: intents.count,
|
|
21
|
-
[names.draftModel]: drafts.count,
|
|
22
|
-
[names.revisionModel]: revisions.count,
|
|
23
|
-
[names.identityModel]: identities.count,
|
|
24
|
-
};
|
|
25
28
|
}
|
|
26
29
|
function requireDeleteManyDelegate(client, modelName) {
|
|
27
30
|
const delegate = client[delegateName(modelName)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authored-resource-org-erasure.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/authored-resource-org-erasure.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"authored-resource-org-erasure.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/authored-resource-org-erasure.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,6 @@ export declare class OrgErasureMatchesNothingError extends Error {
|
|
|
15
15
|
constructor(orgField: string, knownModels: readonly string[], exemptModels: readonly string[]);
|
|
16
16
|
}
|
|
17
17
|
export declare function assertOrgErasureMatchesModels(client: unknown, options?: EraseOrgDataOptions): ReadonlySet<string>;
|
|
18
|
+
export declare function delegateKeyForModel(modelName: string): string;
|
|
18
19
|
export declare function eraseOrgData(client: unknown, orgId: string, options?: EraseOrgDataOptions): Promise<OrgErasureReport>;
|
|
19
20
|
//# sourceMappingURL=org-erasure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-erasure.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/org-erasure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"org-erasure.d.ts","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/org-erasure.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAKjE,MAAM,WAAW,mBAAmB;IAElC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAQ3B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAGD,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE;gBADhC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,SAAS,MAAM,EAAE;CAY5C;AAiBD,qBAAa,6BAA8B,SAAQ,KAAK;IAEpD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE;gBAF/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,YAAY,EAAE,SAAS,MAAM,EAAE;CAkB3C;AAoBD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,mBAAwB,GAChC,WAAW,CAAC,MAAM,CAAC,CAYrB;AAOD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAkBD,wBAAsB,YAAY,CAChC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,gBAAgB,CAAC,CA2D3B"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OrgErasureMatchesNothingError = exports.OrgErasureBlockedError = void 0;
|
|
4
4
|
exports.assertOrgErasureMatchesModels = assertOrgErasureMatchesModels;
|
|
5
|
+
exports.delegateKeyForModel = delegateKeyForModel;
|
|
5
6
|
exports.eraseOrgData = eraseOrgData;
|
|
6
7
|
const tenant_isolation_extension_1 = require("./tenant-isolation.extension");
|
|
8
|
+
const org_erasure_transaction_1 = require("../org-quiesce/org-erasure-transaction");
|
|
7
9
|
const PRISMA_FK_VIOLATION_CODE = 'P2003';
|
|
8
10
|
class OrgErasureBlockedError extends Error {
|
|
9
11
|
orgId;
|
|
@@ -72,14 +74,14 @@ async function eraseOrgData(client, orgId, options = {}) {
|
|
|
72
74
|
const blocked = [];
|
|
73
75
|
let progressed = false;
|
|
74
76
|
for (const modelName of remaining) {
|
|
75
|
-
const delegate = client[delegateKeyForModel(modelName)];
|
|
76
|
-
if (delegate?.deleteMany === undefined) {
|
|
77
|
-
throw new Error(`[org-erasure] Prisma client has no deleteMany delegate for model ` +
|
|
78
|
-
`"${modelName}" (looked up "${delegateKeyForModel(modelName)}").`);
|
|
79
|
-
}
|
|
80
77
|
try {
|
|
81
|
-
const { count } = await
|
|
82
|
-
|
|
78
|
+
const { count } = await (0, org_erasure_transaction_1.inOrgErasureTransaction)(client, orgId, async (tx) => {
|
|
79
|
+
const delegate = tx[delegateKeyForModel(modelName)];
|
|
80
|
+
if (delegate?.deleteMany === undefined) {
|
|
81
|
+
throw new Error(`[org-erasure] Prisma client has no deleteMany delegate for model ` +
|
|
82
|
+
`"${modelName}" (looked up "${delegateKeyForModel(modelName)}").`);
|
|
83
|
+
}
|
|
84
|
+
return await delegate.deleteMany({ where: { [orgField]: orgId } });
|
|
83
85
|
});
|
|
84
86
|
deletedByModel[modelName] = (deletedByModel[modelName] ?? 0) + count;
|
|
85
87
|
progressed = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-erasure.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/org-erasure.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"org-erasure.js","sourceRoot":"","sources":["../../../src/lib/tenant-isolation/org-erasure.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/biome-database-nest",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.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)",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@types/jest": "^30.0.0",
|
|
36
36
|
"@types/node": "25.2.3",
|
|
37
37
|
"@types/pg": "^8.16.0",
|
|
38
|
-
"@xemahq/identity-client": "^0.
|
|
38
|
+
"@xemahq/identity-client": "^0.36.0",
|
|
39
39
|
"@xemahq/contracts": "^0.111.0",
|
|
40
40
|
"@xemahq/pg-test-harness": "^0.8.0",
|
|
41
41
|
"@xemahq/platform-common": ">=0.83.1",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"prisma": "7.8.0",
|
|
46
46
|
"ts-jest": "^29.4.9",
|
|
47
47
|
"typescript": "5.9.3",
|
|
48
|
-
"@xemahq/
|
|
49
|
-
"@xemahq/
|
|
50
|
-
"@xemahq/
|
|
51
|
-
"@xemahq/
|
|
48
|
+
"@xemahq/eslint-config": "0.14.2",
|
|
49
|
+
"@xemahq/service-registry-nest": "1.3.0",
|
|
50
|
+
"@xemahq/xema-decorators": "2.1.0",
|
|
51
|
+
"@xemahq/peer-analysis": "0.2.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@nestjs/common": "^10 || ^11",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@prisma/generator-helper": "7.8.0",
|
|
65
65
|
"@xemahq/migration-runner-prisma": "^0.3.1",
|
|
66
|
-
"@xemahq/org-erasure-nest": "^6.0.
|
|
66
|
+
"@xemahq/org-erasure-nest": "^6.0.1",
|
|
67
67
|
"pg": "^8.16.3"
|
|
68
68
|
},
|
|
69
69
|
"exports": {
|
|
@@ -88,11 +88,12 @@
|
|
|
88
88
|
"clean": "rm -rf dist xema-peer-facts.json",
|
|
89
89
|
"build": "tsc -p tsconfig.build.json && xema-peer-facts",
|
|
90
90
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
91
|
+
"generate:fixtures": "prisma generate --config test/fixture-org-write-fence/prisma.config.ts",
|
|
92
|
+
"lint": "pnpm run generate:fixtures && eslint .",
|
|
93
|
+
"test": "pnpm run generate:fixtures && NODE_OPTIONS=--experimental-vm-modules jest --config jest.config.ts && jest --config jest.pg.config.ts",
|
|
94
|
+
"typecheck": "pnpm run generate:fixtures && tsc -p tsconfig.json --noEmit"
|
|
94
95
|
},
|
|
95
96
|
"xemaRelease": {
|
|
96
|
-
"sourceDigest": "sha256:
|
|
97
|
+
"sourceDigest": "sha256:59a110847590327b80caf480d1de692b71fd0f689994611283df94153ef86583"
|
|
97
98
|
}
|
|
98
99
|
}
|
package/xema-peer-facts.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"factsVersion": 1,
|
|
3
3
|
"package": {
|
|
4
4
|
"name": "@xemahq/biome-database-nest",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "8.0.0"
|
|
6
6
|
},
|
|
7
7
|
"seamTable": {
|
|
8
8
|
"version": 3,
|
|
9
|
-
"sha256": "
|
|
9
|
+
"sha256": "88a8fa49f2443deeb259556d44d4c38ed6e4039871fec2920ac3c33e668d3bfc"
|
|
10
10
|
},
|
|
11
11
|
"exports": [
|
|
12
12
|
{
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"evidence": {
|
|
48
48
|
"path": "src/index.ts",
|
|
49
|
-
"line":
|
|
49
|
+
"line": 310,
|
|
50
50
|
"seam": "package-peer-facts"
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
},
|
|
69
69
|
"evidence": {
|
|
70
70
|
"path": "src/index.ts",
|
|
71
|
-
"line":
|
|
71
|
+
"line": 310,
|
|
72
72
|
"seam": "package-peer-facts"
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
},
|
|
91
91
|
"evidence": {
|
|
92
92
|
"path": "src/lib/nest/org-erasure.module.ts",
|
|
93
|
-
"line":
|
|
93
|
+
"line": 52,
|
|
94
94
|
"seam": "package-peer-facts"
|
|
95
95
|
}
|
|
96
96
|
}
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
},
|
|
113
113
|
"evidence": {
|
|
114
114
|
"path": "src/index.ts",
|
|
115
|
-
"line":
|
|
115
|
+
"line": 310,
|
|
116
116
|
"seam": "package-peer-facts"
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -244,7 +244,7 @@
|
|
|
244
244
|
},
|
|
245
245
|
"evidence": {
|
|
246
246
|
"path": "src/lib/nest/org-erasure.module.ts",
|
|
247
|
-
"line":
|
|
247
|
+
"line": 52,
|
|
248
248
|
"seam": "package-peer-facts"
|
|
249
249
|
}
|
|
250
250
|
}
|