@stratum-hq/lib 0.2.3 → 0.3.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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/__tests__/migrate-schemas.test.d.ts +2 -0
- package/dist/__tests__/migrate-schemas.test.d.ts.map +1 -0
- package/dist/__tests__/migrate-schemas.test.js +225 -0
- package/dist/__tests__/migrate-schemas.test.js.map +1 -0
- package/dist/__tests__/stratum-als.test.d.ts +2 -0
- package/dist/__tests__/stratum-als.test.d.ts.map +1 -0
- package/dist/__tests__/stratum-als.test.js +49 -0
- package/dist/__tests__/stratum-als.test.js.map +1 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +9 -3
- package/dist/crypto.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/migrate-schemas.d.ts +22 -0
- package/dist/migrate-schemas.d.ts.map +1 -0
- package/dist/migrate-schemas.js +128 -0
- package/dist/migrate-schemas.js.map +1 -0
- package/dist/migrations/001_init.sql +12 -3
- package/dist/services/event-service.d.ts +7 -0
- package/dist/services/event-service.d.ts.map +1 -1
- package/dist/services/event-service.js +2 -0
- package/dist/services/event-service.js.map +1 -1
- package/dist/stratum.d.ts +16 -3
- package/dist/stratum.d.ts.map +1 -1
- package/dist/stratum.js +30 -23
- package/dist/stratum.js.map +1 -1
- package/package.json +25 -1
- package/dist/migrations/migrations/001_init.sql +0 -145
- package/dist/migrations/migrations/002_schema_isolation.sql +0 -6
- package/dist/migrations/migrations/003_db_isolation.sql +0 -12
- package/dist/migrations/migrations/004_webhooks.sql +0 -53
- package/dist/migrations/migrations/005_audit_logs.sql +0 -21
- package/dist/migrations/migrations/006_api_key_scopes.sql +0 -2
- package/dist/migrations/migrations/007_sensitive_config.sql +0 -1
- package/dist/migrations/migrations/008_api_key_management.sql +0 -7
- package/dist/migrations/migrations/009_consent.sql +0 -18
- package/dist/migrations/migrations/010_multi_region.sql +0 -19
- package/dist/migrations/migrations/011_demo_bootstrap.sql +0 -5
- package/dist/migrations/migrations/012_roles.sql +0 -18
- package/dist/migrations/migrations/013_api_key_hmac.sql +0 -4
- package/dist/migrations/migrations/014_sort_order.sql +0 -5
- package/dist/migrations/migrations/015_region_url_encryption.sql +0 -5
- package/dist/migrations/migrations/016_migration_alias.sql +0 -8
- /package/dist/migrations/{migrations/017_abac_policies.sql → 017_abac_policies.sql} +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christian Crank
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# @stratum-hq/lib
|
|
2
|
+
|
|
3
|
+
Framework-agnostic library for embedding [Stratum](https://github.com/stratum-hq/Stratum) directly in your Node.js app. Talks straight to PostgreSQL with no HTTP server in between — maximum performance for tenant operations.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @stratum-hq/lib @stratum-hq/core pg
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Pool } from "pg";
|
|
15
|
+
import { Stratum } from "@stratum-hq/lib";
|
|
16
|
+
|
|
17
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
18
|
+
const stratum = new Stratum({ pool, autoMigrate: true });
|
|
19
|
+
await stratum.initialize();
|
|
20
|
+
|
|
21
|
+
const msp = await stratum.createTenant({ name: "NorthStar MSP", slug: "northstar" });
|
|
22
|
+
const customer = await stratum.createTenant({
|
|
23
|
+
name: "Acme Corp",
|
|
24
|
+
slug: "acme",
|
|
25
|
+
parent_id: msp.id,
|
|
26
|
+
isolation_strategy: "SHARED_RLS",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Config flows root → leaf — children inherit automatically
|
|
30
|
+
await stratum.setConfig(msp.id, "max_seats", { value: 500, locked: true });
|
|
31
|
+
const config = await stratum.resolveConfig(customer.id);
|
|
32
|
+
// → { max_seats: { value: 500, inherited: true, locked: true } }
|
|
33
|
+
|
|
34
|
+
const permissions = await stratum.resolvePermissions(customer.id);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The `pool` is **borrowed, not owned** — Stratum never creates or closes it. With `autoMigrate: true`, `initialize()` runs the schema migrations on first start; leave it off and manage migrations yourself via `migrate`.
|
|
38
|
+
|
|
39
|
+
## API Summary
|
|
40
|
+
|
|
41
|
+
The `Stratum` instance covers the full tenant lifecycle:
|
|
42
|
+
|
|
43
|
+
- **Tenants** — `createTenant`, `getTenant`, `listTenants`, `updateTenant`, `moveTenant`, `getAncestors`, `getDescendants`, `batchCreateTenants`
|
|
44
|
+
- **Config** — `resolveConfig`, `setConfig`, `deleteConfig`, `batchSetConfig`, `diffConfig`
|
|
45
|
+
- **Permissions & ABAC** — `resolvePermissions`, `createPermission`, `createAbacPolicy`, `evaluateAbac`
|
|
46
|
+
- **API keys & roles** — `createApiKey`, `validateApiKey`, `rotateApiKey`, `createRole`, `assignRoleToKey`
|
|
47
|
+
- **Webhooks & audit** — `createWebhook`, `testWebhook`, `queryAuditLogs`, `listFailedDeliveries`
|
|
48
|
+
- **GDPR & regions** — `exportTenantData`, `purgeTenant`, `grantConsent`, `createRegion`, `migrateRegion`
|
|
49
|
+
|
|
50
|
+
Low-level pool helpers are also exported:
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { withClient, withTransaction } from "@stratum-hq/lib";
|
|
54
|
+
|
|
55
|
+
await withTransaction(pool, async (client) => {
|
|
56
|
+
await client.query("INSERT INTO ...");
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Error Handling
|
|
61
|
+
|
|
62
|
+
All errors come from `@stratum-hq/core` and extend `StratumError`:
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { ConfigLockedError } from "@stratum-hq/core";
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
await stratum.setConfig(childId, "max_seats", { value: 999 });
|
|
69
|
+
} catch (err) {
|
|
70
|
+
if (err instanceof ConfigLockedError) {
|
|
71
|
+
// A parent locked this key — child cannot override
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Links
|
|
77
|
+
|
|
78
|
+
- Documentation: https://docs.stratum-hq.org/packages/lib/
|
|
79
|
+
- GitHub: https://github.com/stratum-hq/Stratum
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT © Christian Crank
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-schemas.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/migrate-schemas.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const migrate_schemas_js_1 = require("../migrate-schemas.js");
|
|
5
|
+
// Mock fs and path so we don't need real migration files
|
|
6
|
+
vitest_1.vi.mock("node:fs", () => ({
|
|
7
|
+
default: {
|
|
8
|
+
existsSync: vitest_1.vi.fn().mockReturnValue(true),
|
|
9
|
+
readdirSync: vitest_1.vi.fn().mockReturnValue(["001_init.sql", "002_schema.sql"]),
|
|
10
|
+
readFileSync: vitest_1.vi.fn().mockImplementation((_path) => {
|
|
11
|
+
if (_path.includes("001_init"))
|
|
12
|
+
return "CREATE TABLE test1 (id INT);";
|
|
13
|
+
return "CREATE TABLE test2 (id INT);";
|
|
14
|
+
}),
|
|
15
|
+
},
|
|
16
|
+
}));
|
|
17
|
+
function createMockClient() {
|
|
18
|
+
const applied = new Set();
|
|
19
|
+
return {
|
|
20
|
+
query: vitest_1.vi.fn().mockImplementation((sql, params) => {
|
|
21
|
+
// Track SET search_path calls
|
|
22
|
+
if (typeof sql === "string" && sql.includes("search_path")) {
|
|
23
|
+
return Promise.resolve({ rows: [] });
|
|
24
|
+
}
|
|
25
|
+
// Check if migration already applied
|
|
26
|
+
if (typeof sql === "string" &&
|
|
27
|
+
sql.includes("SELECT 1 FROM _migrations") &&
|
|
28
|
+
params) {
|
|
29
|
+
const name = params[0];
|
|
30
|
+
if (applied.has(name)) {
|
|
31
|
+
return Promise.resolve({ rows: [{ "?column?": 1 }] });
|
|
32
|
+
}
|
|
33
|
+
return Promise.resolve({ rows: [] });
|
|
34
|
+
}
|
|
35
|
+
// Record applied migration
|
|
36
|
+
if (typeof sql === "string" &&
|
|
37
|
+
sql.includes("INSERT INTO _migrations") &&
|
|
38
|
+
params) {
|
|
39
|
+
applied.add(params[0]);
|
|
40
|
+
return Promise.resolve({ rows: [] });
|
|
41
|
+
}
|
|
42
|
+
return Promise.resolve({ rows: [] });
|
|
43
|
+
}),
|
|
44
|
+
release: vitest_1.vi.fn(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function createMockPool(schemas, opts) {
|
|
48
|
+
const clients = [];
|
|
49
|
+
const pool = {
|
|
50
|
+
query: vitest_1.vi.fn().mockImplementation((sql) => {
|
|
51
|
+
if (sql.includes("SELECT slug FROM tenants")) {
|
|
52
|
+
return Promise.resolve({
|
|
53
|
+
rows: schemas.map((s) => ({ slug: s })),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return Promise.resolve({ rows: [] });
|
|
57
|
+
}),
|
|
58
|
+
connect: vitest_1.vi.fn().mockImplementation(() => {
|
|
59
|
+
const client = createMockClient();
|
|
60
|
+
if (opts?.failSchema) {
|
|
61
|
+
const origQuery = client.query;
|
|
62
|
+
client.query = vitest_1.vi.fn().mockImplementation((sql, params) => {
|
|
63
|
+
// Fail on the actual migration SQL for the target schema
|
|
64
|
+
if (typeof sql === "string" &&
|
|
65
|
+
sql.includes("search_path") &&
|
|
66
|
+
sql.includes(`tenant_${opts.failSchema}`)) {
|
|
67
|
+
// Let the search_path call succeed, but fail on the next migration SQL
|
|
68
|
+
const innerQuery = vitest_1.vi.fn().mockImplementation((innerSql, innerParams) => {
|
|
69
|
+
if (innerSql.startsWith("CREATE TABLE test")) {
|
|
70
|
+
return Promise.reject(new Error(`Migration failed for schema tenant_${opts.failSchema}`));
|
|
71
|
+
}
|
|
72
|
+
return origQuery(innerSql, innerParams);
|
|
73
|
+
});
|
|
74
|
+
// Replace query for subsequent calls
|
|
75
|
+
client.query = innerQuery;
|
|
76
|
+
return Promise.resolve({ rows: [] });
|
|
77
|
+
}
|
|
78
|
+
return origQuery(sql, params);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
clients.push(client);
|
|
82
|
+
return Promise.resolve(client);
|
|
83
|
+
}),
|
|
84
|
+
_clients: clients,
|
|
85
|
+
};
|
|
86
|
+
return pool;
|
|
87
|
+
}
|
|
88
|
+
(0, vitest_1.beforeEach)(() => {
|
|
89
|
+
vitest_1.vi.clearAllMocks();
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.describe)("migrateAllSchemas", () => {
|
|
92
|
+
(0, vitest_1.it)("discovers schemas from tenants table", async () => {
|
|
93
|
+
const pool = createMockPool(["acme", "globex"]);
|
|
94
|
+
await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool });
|
|
95
|
+
(0, vitest_1.expect)(pool.query).toHaveBeenCalledWith(vitest_1.expect.stringContaining("SELECT slug FROM tenants"));
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.it)("runs migrations per schema with correct search_path", async () => {
|
|
98
|
+
const pool = createMockPool(["acme"]);
|
|
99
|
+
const result = await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool });
|
|
100
|
+
(0, vitest_1.expect)(result.succeeded).toContain("tenant_acme");
|
|
101
|
+
(0, vitest_1.expect)(result.failed).toHaveLength(0);
|
|
102
|
+
// Verify search_path was set for the schema
|
|
103
|
+
const allCalls = pool._clients.flatMap((c) => c.query.mock.calls.map((call) => call[0]));
|
|
104
|
+
const searchPathCalls = allCalls.filter((s) => typeof s === "string" && s.includes("search_path"));
|
|
105
|
+
(0, vitest_1.expect)(searchPathCalls.some((s) => s.includes("tenant_acme"))).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.it)("continue-on-error: collects failures in result.failed[]", async () => {
|
|
108
|
+
// Create a pool where one schema will fail
|
|
109
|
+
const pool = createMockPool(["acme", "badco"]);
|
|
110
|
+
// Override connect to fail for badco's migration
|
|
111
|
+
let callCount = 0;
|
|
112
|
+
const origConnect = pool.connect;
|
|
113
|
+
pool.connect = vitest_1.vi.fn().mockImplementation(() => {
|
|
114
|
+
callCount++;
|
|
115
|
+
const client = createMockClient();
|
|
116
|
+
// Make every other set of clients fail for badco
|
|
117
|
+
const origQuery = client.query;
|
|
118
|
+
let currentSchema = "";
|
|
119
|
+
client.query = vitest_1.vi.fn().mockImplementation((sql, params) => {
|
|
120
|
+
if (typeof sql === "string" && sql.includes("search_path")) {
|
|
121
|
+
if (sql.includes("tenant_badco")) {
|
|
122
|
+
currentSchema = "badco";
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
currentSchema = "";
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (currentSchema === "badco" &&
|
|
129
|
+
typeof sql === "string" &&
|
|
130
|
+
sql.startsWith("CREATE TABLE test")) {
|
|
131
|
+
return Promise.reject(new Error("Schema migration failed"));
|
|
132
|
+
}
|
|
133
|
+
return origQuery(sql, params);
|
|
134
|
+
});
|
|
135
|
+
pool._clients.push(client);
|
|
136
|
+
return Promise.resolve(client);
|
|
137
|
+
});
|
|
138
|
+
const result = await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool });
|
|
139
|
+
(0, vitest_1.expect)(result.succeeded).toContain("tenant_acme");
|
|
140
|
+
(0, vitest_1.expect)(result.failed.length).toBeGreaterThan(0);
|
|
141
|
+
(0, vitest_1.expect)(result.failed[0].schema).toBe("tenant_badco");
|
|
142
|
+
(0, vitest_1.expect)(result.failed[0].error).toBeInstanceOf(Error);
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)("progress callback called with correct args", async () => {
|
|
145
|
+
const pool = createMockPool(["acme", "globex"]);
|
|
146
|
+
const progress = vitest_1.vi.fn();
|
|
147
|
+
await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool, onProgress: progress });
|
|
148
|
+
(0, vitest_1.expect)(progress).toHaveBeenCalledTimes(2);
|
|
149
|
+
// Each call should have (schema, index, total)
|
|
150
|
+
const calls = progress.mock.calls;
|
|
151
|
+
for (const call of calls) {
|
|
152
|
+
(0, vitest_1.expect)(typeof call[0]).toBe("string");
|
|
153
|
+
(0, vitest_1.expect)(typeof call[1]).toBe("number");
|
|
154
|
+
(0, vitest_1.expect)(call[2]).toBe(2);
|
|
155
|
+
}
|
|
156
|
+
// Indices should be 1 and 2 (completed count)
|
|
157
|
+
const indices = calls.map((c) => c[1]).sort();
|
|
158
|
+
(0, vitest_1.expect)(indices).toEqual([1, 2]);
|
|
159
|
+
});
|
|
160
|
+
(0, vitest_1.it)("idempotent re-run: already-applied migrations skipped", async () => {
|
|
161
|
+
// Create pool with a client that reports migrations as already applied
|
|
162
|
+
const pool = createMockPool(["acme"]);
|
|
163
|
+
const origConnect = pool.connect;
|
|
164
|
+
pool.connect = vitest_1.vi.fn().mockImplementation(() => {
|
|
165
|
+
const client = createMockClient();
|
|
166
|
+
// Override: all migrations already applied
|
|
167
|
+
const origQuery = client.query;
|
|
168
|
+
client.query = vitest_1.vi.fn().mockImplementation((sql, params) => {
|
|
169
|
+
if (typeof sql === "string" &&
|
|
170
|
+
sql.includes("SELECT 1 FROM _migrations") &&
|
|
171
|
+
params) {
|
|
172
|
+
return Promise.resolve({ rows: [{ "?column?": 1 }] });
|
|
173
|
+
}
|
|
174
|
+
return origQuery(sql, params);
|
|
175
|
+
});
|
|
176
|
+
pool._clients.push(client);
|
|
177
|
+
return Promise.resolve(client);
|
|
178
|
+
});
|
|
179
|
+
const result = await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool });
|
|
180
|
+
(0, vitest_1.expect)(result.succeeded).toContain("tenant_acme");
|
|
181
|
+
(0, vitest_1.expect)(result.failed).toHaveLength(0);
|
|
182
|
+
// No INSERT should have been called (migrations skipped)
|
|
183
|
+
const allCalls = pool._clients.flatMap((c) => c.query.mock.calls.map((call) => call[0]));
|
|
184
|
+
const inserts = allCalls.filter((s) => typeof s === "string" && s.includes("INSERT INTO _migrations"));
|
|
185
|
+
(0, vitest_1.expect)(inserts).toHaveLength(0);
|
|
186
|
+
});
|
|
187
|
+
(0, vitest_1.it)("empty schema list returns empty result", async () => {
|
|
188
|
+
const pool = createMockPool([]);
|
|
189
|
+
const result = await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool });
|
|
190
|
+
(0, vitest_1.expect)(result.succeeded).toEqual([]);
|
|
191
|
+
(0, vitest_1.expect)(result.failed).toEqual([]);
|
|
192
|
+
});
|
|
193
|
+
(0, vitest_1.it)("respects concurrency limit", async () => {
|
|
194
|
+
const schemas = Array.from({ length: 10 }, (_, i) => `tenant${i}`);
|
|
195
|
+
const pool = createMockPool(schemas);
|
|
196
|
+
let maxConcurrent = 0;
|
|
197
|
+
let currentConcurrent = 0;
|
|
198
|
+
const origConnect = pool.connect;
|
|
199
|
+
pool.connect = vitest_1.vi.fn().mockImplementation(async () => {
|
|
200
|
+
currentConcurrent++;
|
|
201
|
+
if (currentConcurrent > maxConcurrent) {
|
|
202
|
+
maxConcurrent = currentConcurrent;
|
|
203
|
+
}
|
|
204
|
+
const client = createMockClient();
|
|
205
|
+
// Add a small delay to simulate work
|
|
206
|
+
const origQuery = client.query;
|
|
207
|
+
client.query = vitest_1.vi.fn().mockImplementation(async (sql, params) => {
|
|
208
|
+
if (typeof sql === "string" && sql.includes("COMMIT")) {
|
|
209
|
+
// Small delay on commit
|
|
210
|
+
await new Promise((r) => setTimeout(r, 5));
|
|
211
|
+
currentConcurrent--;
|
|
212
|
+
}
|
|
213
|
+
return origQuery(sql, params);
|
|
214
|
+
});
|
|
215
|
+
pool._clients.push(client);
|
|
216
|
+
return client;
|
|
217
|
+
});
|
|
218
|
+
await (0, migrate_schemas_js_1.migrateAllSchemas)({ pool, concurrency: 3 });
|
|
219
|
+
// maxConcurrent should not exceed concurrency * migrations_per_schema
|
|
220
|
+
// but the schema-level concurrency should be limited
|
|
221
|
+
// Due to the semaphore, we expect at most 3 schemas in flight
|
|
222
|
+
(0, vitest_1.expect)(maxConcurrent).toBeLessThanOrEqual(3 * 2); // 3 concurrent * 2 migration files
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=migrate-schemas.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-schemas.test.js","sourceRoot":"","sources":["../../src/__tests__/migrate-schemas.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratum-als.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stratum-als.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const stratum_js_1 = require("../stratum.js");
|
|
5
|
+
const mockContext = {
|
|
6
|
+
tenant_id: "t_abc-123",
|
|
7
|
+
ancestry_path: "/t_abc-123",
|
|
8
|
+
depth: 0,
|
|
9
|
+
resolved_config: { feature_x: true },
|
|
10
|
+
resolved_permissions: {},
|
|
11
|
+
isolation_strategy: "SHARED_RLS",
|
|
12
|
+
};
|
|
13
|
+
(0, vitest_1.describe)("Stratum ALS convenience methods", () => {
|
|
14
|
+
(0, vitest_1.it)("currentTenantId() returns tenant ID inside runWithTenant", () => {
|
|
15
|
+
const result = stratum_js_1.Stratum.runWithTenant(mockContext, () => {
|
|
16
|
+
return stratum_js_1.Stratum.currentTenantId();
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.expect)(result).toBe("t_abc-123");
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.it)("currentTenantId() returns undefined outside any context", () => {
|
|
21
|
+
(0, vitest_1.expect)(stratum_js_1.Stratum.currentTenantId()).toBeUndefined();
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.it)("currentTenantContext() returns full context object", () => {
|
|
24
|
+
const result = stratum_js_1.Stratum.runWithTenant(mockContext, () => {
|
|
25
|
+
return stratum_js_1.Stratum.currentTenantContext();
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.expect)(result).toEqual(mockContext);
|
|
28
|
+
});
|
|
29
|
+
(0, vitest_1.it)("currentTenantContext() returns undefined outside any context", () => {
|
|
30
|
+
(0, vitest_1.expect)(stratum_js_1.Stratum.currentTenantContext()).toBeUndefined();
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)("runWithTenant() executes the function and returns its value", () => {
|
|
33
|
+
const result = stratum_js_1.Stratum.runWithTenant(mockContext, () => 42);
|
|
34
|
+
(0, vitest_1.expect)(result).toBe(42);
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)("nested runWithTenant() uses innermost context", () => {
|
|
37
|
+
const inner = {
|
|
38
|
+
...mockContext,
|
|
39
|
+
tenant_id: "t_inner-456",
|
|
40
|
+
};
|
|
41
|
+
const result = stratum_js_1.Stratum.runWithTenant(mockContext, () => {
|
|
42
|
+
return stratum_js_1.Stratum.runWithTenant(inner, () => {
|
|
43
|
+
return stratum_js_1.Stratum.currentTenantId();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.expect)(result).toBe("t_inner-456");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=stratum-als.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratum-als.test.js","sourceRoot":"","sources":["../../src/__tests__/stratum-als.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,8CAAwC;AAGxC,MAAM,WAAW,GAAwB;IACvC,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,YAAY;IAC3B,KAAK,EAAE,CAAC;IACR,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;IACpC,oBAAoB,EAAE,EAAE;IACxB,kBAAkB,EAAE,YAAY;CACjC,CAAC;AAEF,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAA,WAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,oBAAO,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE;YACrD,OAAO,oBAAO,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,IAAA,eAAM,EAAC,oBAAO,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,oBAAO,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE;YACrD,OAAO,oBAAO,CAAC,oBAAoB,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,IAAA,eAAM,EAAC,oBAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,oBAAO,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAwB;YACjC,GAAG,WAAW;YACd,SAAS,EAAE,aAAa;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,oBAAO,CAAC,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE;YACrD,OAAO,oBAAO,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE;gBACvC,OAAO,oBAAO,CAAC,eAAe,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAmEA,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;yDAEyD;AACzD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAcjD;AAED,uHAAuH;AACvH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAGnG"}
|
package/dist/crypto.js
CHANGED
|
@@ -11,9 +11,15 @@ const ALGORITHM = "aes-256-gcm";
|
|
|
11
11
|
const IV_LENGTH = 12;
|
|
12
12
|
const AUTH_TAG_LENGTH = 16;
|
|
13
13
|
const CURRENT_KEY_VERSION = "v1";
|
|
14
|
-
const HKDF_SALT =
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const HKDF_SALT = (() => {
|
|
15
|
+
if (process.env.STRATUM_HKDF_SALT) {
|
|
16
|
+
return Buffer.from(process.env.STRATUM_HKDF_SALT, "hex");
|
|
17
|
+
}
|
|
18
|
+
if (process.env.NODE_ENV === "production") {
|
|
19
|
+
throw new Error("STRATUM_HKDF_SALT must be set in production");
|
|
20
|
+
}
|
|
21
|
+
return node_crypto_1.default.randomBytes(32);
|
|
22
|
+
})();
|
|
17
23
|
function hkdfDeriveKey(keyMaterial, info = "stratum-aes-key") {
|
|
18
24
|
return Buffer.from(node_crypto_1.default.hkdfSync("sha256", Buffer.from(keyMaterial, "utf8"), HKDF_SALT, info, 32));
|
|
19
25
|
}
|
package/dist/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":";;;;;AAoEA,0BAEC;AAKD,0BAcC;AAGD,8BAGC;AA/FD,8DAAiC;AAEjC,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,SAAS,GAAW,CAAC,GAAG,EAAE;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,qBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,aAAa,CAAC,WAAmB,EAAE,IAAI,GAAG,iBAAiB;IAClE,OAAO,MAAM,CAAC,IAAI,CAChB,qBAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACxF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,yDAAyD;IACzD,OAAO,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB;IACpC,OAAO,aAAa,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,GAAW;IACpD,MAAM,EAAE,GAAG,qBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,qBAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,OAAO,GAAG,mBAAmB,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAChH,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAa,EAAE,UAAkB,EAAE,aAAqB,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,sCAAsC;QACtC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,GAAG,KAAyC,CAAC;IACnF,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,gCAAgC;QAChC,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,GAAG,KAAiC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,qBAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;IACjG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/E,CAAC;AAED,qFAAqF;AACrF,SAAgB,OAAO,CAAC,SAAiB;IACvC,OAAO,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACvD,CAAC;AAED;;yDAEyD;AACzD,SAAgB,OAAO,CAAC,SAAiB;IACvC,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,SAAgB,SAAS,CAAC,SAAiB,EAAE,cAAsB,EAAE,cAAsB;IACzF,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { Stratum, type StratumOptions } from "./stratum.js";
|
|
2
2
|
export { migrate, type MigrateOptions } from "./migrate.js";
|
|
3
|
+
export { migrateAllSchemas, type MigrateSchemasOptions, type MigrateSchemasResult, } from "./migrate-schemas.js";
|
|
3
4
|
export { withClient, withTransaction } from "./pool-helpers.js";
|
|
4
5
|
export { traced, getTracer, isTracingEnabled } from "./telemetry.js";
|
|
5
6
|
export type { TenantNode, TenantContext, CreateTenantInput, UpdateTenantInput, MoveTenantInput, PaginationInput, PaginatedResult, ConfigEntry, SetConfigInput, ResolvedConfigEntry, ResolvedConfig, PermissionPolicy, CreatePermissionInput, UpdatePermissionInput, ResolvedPermission, } from "@stratum-hq/core";
|
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,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,YAAY,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvH,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGzF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,YAAY,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvH,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGzF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.noopLogger = exports.defaultLogger = exports.isTracingEnabled = exports.getTracer = exports.traced = exports.withTransaction = exports.withClient = exports.migrate = exports.Stratum = void 0;
|
|
3
|
+
exports.noopLogger = exports.defaultLogger = exports.isTracingEnabled = exports.getTracer = exports.traced = exports.withTransaction = exports.withClient = exports.migrateAllSchemas = exports.migrate = exports.Stratum = void 0;
|
|
4
4
|
var stratum_js_1 = require("./stratum.js");
|
|
5
5
|
Object.defineProperty(exports, "Stratum", { enumerable: true, get: function () { return stratum_js_1.Stratum; } });
|
|
6
6
|
var migrate_js_1 = require("./migrate.js");
|
|
7
7
|
Object.defineProperty(exports, "migrate", { enumerable: true, get: function () { return migrate_js_1.migrate; } });
|
|
8
|
+
var migrate_schemas_js_1 = require("./migrate-schemas.js");
|
|
9
|
+
Object.defineProperty(exports, "migrateAllSchemas", { enumerable: true, get: function () { return migrate_schemas_js_1.migrateAllSchemas; } });
|
|
8
10
|
var pool_helpers_js_1 = require("./pool-helpers.js");
|
|
9
11
|
Object.defineProperty(exports, "withClient", { enumerable: true, get: function () { return pool_helpers_js_1.withClient; } });
|
|
10
12
|
Object.defineProperty(exports, "withTransaction", { enumerable: true, get: function () { return pool_helpers_js_1.withTransaction; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAChB,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAChB,qDAAgE;AAAvD,6GAAA,UAAU,OAAA;AAAE,kHAAA,eAAe,OAAA;AACpC,+CAAqE;AAA5D,sGAAA,MAAM,OAAA;AAAE,yGAAA,SAAS,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AA8B5C,yCAAwD;AAA/C,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAChB,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAChB,2DAI8B;AAH5B,uHAAA,iBAAiB,OAAA;AAInB,qDAAgE;AAAvD,6GAAA,UAAU,OAAA;AAAE,kHAAA,eAAe,OAAA;AACpC,+CAAqE;AAA5D,sGAAA,MAAM,OAAA;AAAE,yGAAA,SAAS,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AA8B5C,yCAAwD;AAA/C,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import pg from "pg";
|
|
2
|
+
export interface MigrateSchemasOptions {
|
|
3
|
+
pool: pg.Pool;
|
|
4
|
+
concurrency?: number;
|
|
5
|
+
onProgress?: (schema: string, index: number, total: number) => void;
|
|
6
|
+
enforceRls?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface MigrateSchemasResult {
|
|
9
|
+
succeeded: string[];
|
|
10
|
+
failed: {
|
|
11
|
+
schema: string;
|
|
12
|
+
error: Error;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Discover all tenant schemas (tenants with SCHEMA_PER_TENANT isolation)
|
|
17
|
+
* and run the standard migration set against each one.
|
|
18
|
+
*
|
|
19
|
+
* Continues on error: schemas that fail are collected in result.failed[].
|
|
20
|
+
*/
|
|
21
|
+
export declare function migrateAllSchemas(options: MigrateSchemasOptions): Promise<MigrateSchemasResult>;
|
|
22
|
+
//# sourceMappingURL=migrate-schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-schemas.d.ts","sourceRoot":"","sources":["../src/migrate-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA2D/B"}
|