@stratum-hq/db-adapters 0.2.4 → 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 +75 -0
- package/dist/__tests__/drizzle.test.js +21 -16
- package/dist/__tests__/drizzle.test.js.map +1 -1
- package/dist/adapters/drizzle.d.ts +4 -2
- package/dist/adapters/drizzle.d.ts.map +1 -1
- package/dist/adapters/drizzle.js +7 -5
- package/dist/adapters/drizzle.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
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,75 @@
|
|
|
1
|
+
# @stratum-hq/db-adapters
|
|
2
|
+
|
|
3
|
+
PostgreSQL adapters for [Stratum](https://github.com/stratum-hq/Stratum) that automatically scope queries to the current tenant using Row-Level Security. Supports raw `pg`, Prisma, Drizzle, and Sequelize, plus helpers for enabling RLS on your tables.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @stratum-hq/db-adapters @stratum-hq/core pg
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Raw PostgreSQL
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Pool } from "pg";
|
|
15
|
+
import { RawAdapter, createTenantPool } from "@stratum-hq/db-adapters";
|
|
16
|
+
import { getTenantContext } from "@stratum-hq/sdk";
|
|
17
|
+
|
|
18
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
19
|
+
|
|
20
|
+
// Automatic context from AsyncLocalStorage
|
|
21
|
+
const tenantPool = createTenantPool(pool, () => getTenantContext().tenant_id);
|
|
22
|
+
const orders = await tenantPool.query("SELECT * FROM orders");
|
|
23
|
+
|
|
24
|
+
// Or manual, per-query
|
|
25
|
+
const adapter = new RawAdapter(pool);
|
|
26
|
+
await adapter.query("tenant-id", "SELECT * FROM orders");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Every query is wrapped in a transaction that sets `app.current_tenant_id` via a parameterized `set_config()` (SQL-injection-safe), runs your query under the RLS policy, commits, and resets the tenant context before releasing the connection.
|
|
30
|
+
|
|
31
|
+
## ORM Adapters
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { withTenant } from "@stratum-hq/db-adapters"; // Prisma
|
|
35
|
+
import { withDrizzleTenant } from "@stratum-hq/db-adapters"; // Drizzle
|
|
36
|
+
import { SequelizeAdapter, withTenantScope } from "@stratum-hq/db-adapters"; // Sequelize
|
|
37
|
+
|
|
38
|
+
// Prisma — all queries scoped to the current tenant
|
|
39
|
+
const tenantPrisma = withTenant(prisma, () => getTenantContext().tenant_id, pool);
|
|
40
|
+
const orders = await tenantPrisma.order.findMany();
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## RLS & Migration Helpers
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { enableRLS, createPolicy, migrateTable } from "@stratum-hq/db-adapters";
|
|
47
|
+
|
|
48
|
+
const client = await pool.connect();
|
|
49
|
+
try {
|
|
50
|
+
await client.query("BEGIN");
|
|
51
|
+
// One step: add tenant_id, enable FORCE RLS, create the isolation policy
|
|
52
|
+
await migrateTable(client, "orders");
|
|
53
|
+
await client.query("COMMIT");
|
|
54
|
+
} finally {
|
|
55
|
+
client.release();
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Also available: `disableRLS`, `dropPolicy`, `isRLSEnabled`, `addTenantColumn`, `createIsolationPolicy`, and low-level session helpers `setTenantContext` / `resetTenantContext` / `getCurrentTenantId`. Schema-per-tenant and database-per-tenant variants (`SchemaRawAdapter`, `DatabasePoolManager`, …) are exported too.
|
|
60
|
+
|
|
61
|
+
## Security
|
|
62
|
+
|
|
63
|
+
- All DDL validates table names against `/^[a-zA-Z_][a-zA-Z0-9_]*$/`.
|
|
64
|
+
- Tenant ID is always set via `set_config($1, true)` — fully parameterized.
|
|
65
|
+
- `enableRLS()` always applies `FORCE ROW LEVEL SECURITY`, preventing bypass by table owners.
|
|
66
|
+
- Always reset the tenant context when returning connections to the pool; `createTenantPool` handles this for you.
|
|
67
|
+
|
|
68
|
+
## Links
|
|
69
|
+
|
|
70
|
+
- Documentation: https://docs.stratum-hq.org/packages/db-adapters/
|
|
71
|
+
- GitHub: https://github.com/stratum-hq/Stratum
|
|
72
|
+
|
|
73
|
+
## License
|
|
74
|
+
|
|
75
|
+
MIT © Christian Crank
|
|
@@ -47,22 +47,22 @@ function createMockDrizzle() {
|
|
|
47
47
|
(0, vitest_1.it)("extends BaseAdapter", () => {
|
|
48
48
|
(0, vitest_1.expect)(adapter).toBeInstanceOf(base_adapter_js_1.BaseAdapter);
|
|
49
49
|
});
|
|
50
|
-
(0, vitest_1.describe)("
|
|
50
|
+
(0, vitest_1.describe)("withTenant (method)", () => {
|
|
51
51
|
(0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
|
|
52
52
|
const mock = createMockDrizzle();
|
|
53
|
-
const result = adapter.
|
|
53
|
+
const result = adapter.withTenant(mock, () => "tenant-1");
|
|
54
54
|
(0, vitest_1.expect)(result).not.toBe(mock);
|
|
55
55
|
});
|
|
56
56
|
(0, vitest_1.it)("returned object exposes execute and transaction", () => {
|
|
57
57
|
const mock = createMockDrizzle();
|
|
58
|
-
const result = adapter.
|
|
58
|
+
const result = adapter.withTenant(mock, () => "tenant-1");
|
|
59
59
|
(0, vitest_1.expect)(typeof result.execute).toBe("function");
|
|
60
60
|
(0, vitest_1.expect)(typeof result.transaction).toBe("function");
|
|
61
61
|
});
|
|
62
62
|
(0, vitest_1.it)("wrapped execute calls transaction() and sets set_config inside it", async () => {
|
|
63
63
|
const mock = createMockDrizzle();
|
|
64
64
|
const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
|
|
65
|
-
const wrapped = adapter.
|
|
65
|
+
const wrapped = adapter.withTenant(mock, () => "tenant-abc");
|
|
66
66
|
await wrapped.execute({ sql: "SELECT 1" });
|
|
67
67
|
(0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
|
|
68
68
|
(0, vitest_1.expect)(mock.executions).toHaveLength(2);
|
|
@@ -72,14 +72,14 @@ function createMockDrizzle() {
|
|
|
72
72
|
});
|
|
73
73
|
(0, vitest_1.it)("set_config receives tenant ID as params", async () => {
|
|
74
74
|
const mock = createMockDrizzle();
|
|
75
|
-
const wrapped = adapter.
|
|
75
|
+
const wrapped = adapter.withTenant(mock, () => "tenant-xyz");
|
|
76
76
|
await wrapped.execute({ sql: "SELECT 1" });
|
|
77
77
|
(0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["tenant-xyz"]);
|
|
78
78
|
});
|
|
79
79
|
(0, vitest_1.it)("wrapped transaction injects set_config before user callback", async () => {
|
|
80
80
|
const mock = createMockDrizzle();
|
|
81
81
|
const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
|
|
82
|
-
const wrapped = adapter.
|
|
82
|
+
const wrapped = adapter.withTenant(mock, () => "tenant-abc");
|
|
83
83
|
await wrapped.transaction(async (tx) => {
|
|
84
84
|
await tx.execute({ sql: "INSERT INTO foo VALUES (1)" });
|
|
85
85
|
});
|
|
@@ -91,7 +91,7 @@ function createMockDrizzle() {
|
|
|
91
91
|
(0, vitest_1.it)("reads tenant ID lazily from contextFn on each call", async () => {
|
|
92
92
|
let currentTenant = "tenant-1";
|
|
93
93
|
const mock = createMockDrizzle();
|
|
94
|
-
const wrapped = adapter.
|
|
94
|
+
const wrapped = adapter.withTenant(mock, () => currentTenant);
|
|
95
95
|
await wrapped.execute({ sql: "SELECT 1" });
|
|
96
96
|
(0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["tenant-1"]);
|
|
97
97
|
currentTenant = "tenant-2";
|
|
@@ -101,12 +101,12 @@ function createMockDrizzle() {
|
|
|
101
101
|
});
|
|
102
102
|
(0, vitest_1.it)("throws when contextFn returns empty string (execute)", async () => {
|
|
103
103
|
const mock = createMockDrizzle();
|
|
104
|
-
const wrapped = adapter.
|
|
104
|
+
const wrapped = adapter.withTenant(mock, () => "");
|
|
105
105
|
await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("Tenant context is required for database operations.");
|
|
106
106
|
});
|
|
107
107
|
(0, vitest_1.it)("throws when contextFn returns empty string (transaction)", async () => {
|
|
108
108
|
const mock = createMockDrizzle();
|
|
109
|
-
const wrapped = adapter.
|
|
109
|
+
const wrapped = adapter.withTenant(mock, () => "");
|
|
110
110
|
await (0, vitest_1.expect)(wrapped.transaction(async (tx) => {
|
|
111
111
|
await tx.execute({ sql: "SELECT 1" });
|
|
112
112
|
})).rejects.toThrow("Tenant context is required for database operations.");
|
|
@@ -121,7 +121,7 @@ function createMockDrizzle() {
|
|
|
121
121
|
};
|
|
122
122
|
return fn(failTx);
|
|
123
123
|
};
|
|
124
|
-
const wrapped = adapter.
|
|
124
|
+
const wrapped = adapter.withTenant(mock, () => "tenant-1");
|
|
125
125
|
await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("set_config failed");
|
|
126
126
|
});
|
|
127
127
|
(0, vitest_1.it)("propagates errors thrown by set_config (transaction path)", async () => {
|
|
@@ -133,31 +133,31 @@ function createMockDrizzle() {
|
|
|
133
133
|
};
|
|
134
134
|
return fn(failTx);
|
|
135
135
|
};
|
|
136
|
-
const wrapped = adapter.
|
|
136
|
+
const wrapped = adapter.withTenant(mock, () => "tenant-1");
|
|
137
137
|
await (0, vitest_1.expect)(wrapped.transaction(async (tx) => {
|
|
138
138
|
await tx.execute({ sql: "SELECT 1" });
|
|
139
139
|
})).rejects.toThrow("set_config failed");
|
|
140
140
|
});
|
|
141
141
|
(0, vitest_1.it)("throws when execute() called with no tenant", async () => {
|
|
142
142
|
const mock = createMockDrizzle();
|
|
143
|
-
const wrapped = adapter.
|
|
143
|
+
const wrapped = adapter.withTenant(mock, () => "");
|
|
144
144
|
const query = { sql: "SELECT 1" };
|
|
145
145
|
await (0, vitest_1.expect)(wrapped.execute(query)).rejects.toThrow("Tenant context is required for database operations.");
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
148
|
});
|
|
149
|
-
(0, vitest_1.describe)("
|
|
149
|
+
(0, vitest_1.describe)("withTenant (convenience function)", () => {
|
|
150
150
|
(0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
|
|
151
151
|
const mock = createMockDrizzle();
|
|
152
152
|
const pool = new MockPool();
|
|
153
|
-
const result = (0, drizzle_js_1.
|
|
153
|
+
const result = (0, drizzle_js_1.withTenant)(mock, () => "tenant-1", pool);
|
|
154
154
|
(0, vitest_1.expect)(result).not.toBe(mock);
|
|
155
155
|
});
|
|
156
156
|
(0, vitest_1.it)("wrapped execute calls transaction() with set_config", async () => {
|
|
157
157
|
const mock = createMockDrizzle();
|
|
158
158
|
const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
|
|
159
159
|
const pool = new MockPool();
|
|
160
|
-
const wrapped = (0, drizzle_js_1.
|
|
160
|
+
const wrapped = (0, drizzle_js_1.withTenant)(mock, () => "fn-tenant", pool);
|
|
161
161
|
await wrapped.execute({ sql: "SELECT 1" });
|
|
162
162
|
(0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
|
|
163
163
|
(0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["fn-tenant"]);
|
|
@@ -165,8 +165,13 @@ function createMockDrizzle() {
|
|
|
165
165
|
(0, vitest_1.it)("throws when contextFn returns empty string", async () => {
|
|
166
166
|
const mock = createMockDrizzle();
|
|
167
167
|
const pool = new MockPool();
|
|
168
|
-
const wrapped = (0, drizzle_js_1.
|
|
168
|
+
const wrapped = (0, drizzle_js_1.withTenant)(mock, () => "", pool);
|
|
169
169
|
await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("Tenant context is required for database operations.");
|
|
170
170
|
});
|
|
171
171
|
});
|
|
172
|
+
(0, vitest_1.describe)("withTenantScope (deprecated alias)", () => {
|
|
173
|
+
(0, vitest_1.it)("is the same function as withTenant", () => {
|
|
174
|
+
(0, vitest_1.expect)(drizzle_js_1.withTenantScope).toBe(drizzle_js_1.withTenant);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
172
177
|
//# sourceMappingURL=drizzle.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle.test.js","sourceRoot":"","sources":["../../src/__tests__/drizzle.test.ts"],"names":[],"mappings":";;AAAA,mCAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"drizzle.test.js","sourceRoot":"","sources":["../../src/__tests__/drizzle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,9 @@ export declare class DrizzleAdapter extends BaseAdapter {
|
|
|
17
17
|
* When contextFn returns an empty string the original methods are forwarded
|
|
18
18
|
* without wrapping.
|
|
19
19
|
*/
|
|
20
|
-
|
|
20
|
+
withTenant(db: DrizzleLike, contextFn: () => string): DrizzleLike;
|
|
21
21
|
}
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function withTenant(db: DrizzleLike, contextFn: () => string, pool: pg.Pool): DrizzleLike;
|
|
23
|
+
/** @deprecated Use `withTenant` instead. */
|
|
24
|
+
export declare const withTenantScope: typeof withTenant;
|
|
23
25
|
//# sourceMappingURL=drizzle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAED,qBAAa,cAAe,SAAQ,WAAW;gBACjC,IAAI,EAAE,EAAE,CAAC,IAAI;IAIzB;;;;;;;;;;OAUG;IACH,
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/adapters/drizzle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAED,qBAAa,cAAe,SAAQ,WAAW;gBACjC,IAAI,EAAE,EAAE,CAAC,IAAI;IAIzB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,MAAM,GAAG,WAAW;CA0ClE;AAGD,wBAAgB,UAAU,CACxB,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,MAAM,MAAM,EACvB,IAAI,EAAE,EAAE,CAAC,IAAI,GACZ,WAAW,CAGb;AAED,4CAA4C;AAC5C,eAAO,MAAM,eAAe,mBAAa,CAAC"}
|
package/dist/adapters/drizzle.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DrizzleAdapter = void 0;
|
|
4
|
-
exports.
|
|
3
|
+
exports.withTenantScope = exports.DrizzleAdapter = void 0;
|
|
4
|
+
exports.withTenant = withTenant;
|
|
5
5
|
const base_adapter_js_1 = require("../base-adapter.js");
|
|
6
6
|
class DrizzleAdapter extends base_adapter_js_1.BaseAdapter {
|
|
7
7
|
constructor(pool) {
|
|
@@ -18,7 +18,7 @@ class DrizzleAdapter extends base_adapter_js_1.BaseAdapter {
|
|
|
18
18
|
* When contextFn returns an empty string the original methods are forwarded
|
|
19
19
|
* without wrapping.
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
withTenant(db, contextFn) {
|
|
22
22
|
const original = db;
|
|
23
23
|
const wrappedTransaction = async (fn) => {
|
|
24
24
|
const tenantId = contextFn();
|
|
@@ -56,8 +56,10 @@ class DrizzleAdapter extends base_adapter_js_1.BaseAdapter {
|
|
|
56
56
|
}
|
|
57
57
|
exports.DrizzleAdapter = DrizzleAdapter;
|
|
58
58
|
// Convenience function matching the other adapters' API shape.
|
|
59
|
-
function
|
|
59
|
+
function withTenant(db, contextFn, pool) {
|
|
60
60
|
const adapter = new DrizzleAdapter(pool);
|
|
61
|
-
return adapter.
|
|
61
|
+
return adapter.withTenant(db, contextFn);
|
|
62
62
|
}
|
|
63
|
+
/** @deprecated Use `withTenant` instead. */
|
|
64
|
+
exports.withTenantScope = withTenant;
|
|
63
65
|
//# sourceMappingURL=drizzle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../src/adapters/drizzle.ts"],"names":[],"mappings":";;;AAuEA,
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../src/adapters/drizzle.ts"],"names":[],"mappings":";;;AAuEA,gCAOC;AA9ED,wDAAiD;AAUjD,MAAa,cAAe,SAAQ,6BAAW;IAC7C,YAAY,IAAa;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAe,EAAE,SAAuB;QACjD,MAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,MAAM,kBAAkB,GAAG,KAAK,EAAK,EAAmC,EAAc,EAAE;YACtF,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,sDAAsD;oBACtD,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAe,EAAE,EAAE;gBACpD,MAAM,EAAE,CAAC,OAAO,CAAC;oBACf,GAAG,EAAE,sDAAsD;oBAC3D,MAAM,EAAE,CAAC,QAAQ,CAAC;iBACnB,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,KAAK,EAAE,KAAc,EAAoB,EAAE;YAChE,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CACb,sDAAsD;oBACtD,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAe,EAAE,EAAE;gBACpD,MAAM,EAAE,CAAC,OAAO,CAAC;oBACf,GAAG,EAAE,sDAAsD;oBAC3D,MAAM,EAAE,CAAC,QAAQ,CAAC;iBACnB,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,kBAAkB;SAChC,CAAC;IACJ,CAAC;CACF;AA1DD,wCA0DC;AAED,+DAA+D;AAC/D,SAAgB,UAAU,CACxB,EAAe,EACf,SAAuB,EACvB,IAAa;IAEb,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,4CAA4C;AAC/B,QAAA,eAAe,GAAG,UAAU,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,6 @@ export type { DatabasePoolManagerOptions } from "./database/pool-manager.js";
|
|
|
14
14
|
export { DatabaseRawAdapter } from "./adapters/database-raw.js";
|
|
15
15
|
export { DatabasePrismaAdapter } from "./adapters/database-prisma.js";
|
|
16
16
|
export { SequelizeAdapter, withTenantScope } from "./adapters/sequelize.js";
|
|
17
|
-
export { DrizzleAdapter, withTenantScope as withDrizzleTenantScope, } from "./adapters/drizzle.js";
|
|
17
|
+
export { DrizzleAdapter, withTenant as withDrizzleTenant, withTenantScope as withDrizzleTenantScope, } from "./adapters/drizzle.js";
|
|
18
18
|
export type { DrizzleLike } from "./adapters/drizzle.js";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
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,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,SAAS,IAAI,kBAAkB,EAC/B,qBAAqB,EACrB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,eAAe,IAAI,sBAAsB,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,SAAS,IAAI,kBAAkB,EAC/B,qBAAqB,EACrB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,UAAU,IAAI,iBAAiB,EAC/B,eAAe,IAAI,sBAAsB,GAC1C,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withDrizzleTenantScope = exports.DrizzleAdapter = exports.withTenantScope = exports.SequelizeAdapter = exports.DatabasePrismaAdapter = exports.DatabaseRawAdapter = exports.DatabasePoolManager = exports.dropDatabase = exports.createDatabase = exports.databaseExists = exports.getDatabaseName = exports.migrateTable = exports.createIsolationPolicy = exports.enableRLSMigration = exports.addTenantColumn = exports.getCurrentSearchPath = exports.resetSearchPath = exports.setSchemaSearchPath = exports.tenantSchemaName = exports.replicateTableToSchema = exports.listTenantSchemas = exports.schemaExists = exports.dropSchema = exports.createSchema = exports.getCurrentTenantId = exports.resetTenantContext = exports.setTenantContext = exports.isRLSEnabled = exports.disableRLS = exports.enableRLS = exports.dropPolicy = exports.createPolicy = exports.withSchemaTenant = exports.SchemaPrismaAdapter = exports.createSchemaTenantPool = exports.SchemaRawAdapter = exports.withTenant = exports.PrismaAdapter = exports.createTenantPool = exports.RawAdapter = exports.BaseAdapter = void 0;
|
|
3
|
+
exports.withDrizzleTenantScope = exports.withDrizzleTenant = exports.DrizzleAdapter = exports.withTenantScope = exports.SequelizeAdapter = exports.DatabasePrismaAdapter = exports.DatabaseRawAdapter = exports.DatabasePoolManager = exports.dropDatabase = exports.createDatabase = exports.databaseExists = exports.getDatabaseName = exports.migrateTable = exports.createIsolationPolicy = exports.enableRLSMigration = exports.addTenantColumn = exports.getCurrentSearchPath = exports.resetSearchPath = exports.setSchemaSearchPath = exports.tenantSchemaName = exports.replicateTableToSchema = exports.listTenantSchemas = exports.schemaExists = exports.dropSchema = exports.createSchema = exports.getCurrentTenantId = exports.resetTenantContext = exports.setTenantContext = exports.isRLSEnabled = exports.disableRLS = exports.enableRLS = exports.dropPolicy = exports.createPolicy = exports.withSchemaTenant = exports.SchemaPrismaAdapter = exports.createSchemaTenantPool = exports.SchemaRawAdapter = exports.withTenant = exports.PrismaAdapter = exports.createTenantPool = exports.RawAdapter = exports.BaseAdapter = void 0;
|
|
4
4
|
var base_adapter_js_1 = require("./base-adapter.js");
|
|
5
5
|
Object.defineProperty(exports, "BaseAdapter", { enumerable: true, get: function () { return base_adapter_js_1.BaseAdapter; } });
|
|
6
6
|
var raw_js_1 = require("./adapters/raw.js");
|
|
@@ -58,5 +58,6 @@ Object.defineProperty(exports, "SequelizeAdapter", { enumerable: true, get: func
|
|
|
58
58
|
Object.defineProperty(exports, "withTenantScope", { enumerable: true, get: function () { return sequelize_js_1.withTenantScope; } });
|
|
59
59
|
var drizzle_js_1 = require("./adapters/drizzle.js");
|
|
60
60
|
Object.defineProperty(exports, "DrizzleAdapter", { enumerable: true, get: function () { return drizzle_js_1.DrizzleAdapter; } });
|
|
61
|
+
Object.defineProperty(exports, "withDrizzleTenant", { enumerable: true, get: function () { return drizzle_js_1.withTenant; } });
|
|
61
62
|
Object.defineProperty(exports, "withDrizzleTenantScope", { enumerable: true, get: function () { return drizzle_js_1.withTenantScope; } });
|
|
62
63
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AAEpB,4CAAiE;AAAxD,oGAAA,UAAU,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AACrC,kDAAiE;AAAxD,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAClC,0DAGkC;AAFhC,iHAAA,gBAAgB,OAAA;AAChB,uHAAA,sBAAsB,OAAA;AAExB,gEAGqC;AAFnC,uHAAA,mBAAmB,OAAA;AACnB,oHAAA,gBAAgB,OAAA;AAGlB,+CAM0B;AALxB,0GAAA,YAAY,OAAA;AACZ,wGAAA,UAAU,OAAA;AACV,uGAAA,SAAS,OAAA;AACT,wGAAA,UAAU,OAAA;AACV,0GAAA,YAAY,OAAA;AAGd,+CAI0B;AAHxB,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAClB,gHAAA,kBAAkB,OAAA;AAGpB,kDAO6B;AAN3B,0GAAA,YAAY,OAAA;AACZ,wGAAA,UAAU,OAAA;AACV,0GAAA,YAAY,OAAA;AACZ,+GAAA,iBAAiB,OAAA;AACjB,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAGlB,kDAI6B;AAH3B,iHAAA,mBAAmB,OAAA;AACnB,6GAAA,eAAe,OAAA;AACf,kHAAA,oBAAoB,OAAA;AAGtB,+DAKgC;AAJ9B,uHAAA,eAAe,OAAA;AACf,0HAAA,SAAS,OAAsB;AAC/B,6HAAA,qBAAqB,OAAA;AACrB,oHAAA,YAAY,OAAA;AAGd,0BAA0B;AAC1B,oDAK+B;AAJ7B,6GAAA,eAAe,OAAA;AACf,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,0GAAA,YAAY,OAAA;AAGd,8DAAiE;AAAxD,sHAAA,mBAAmB,OAAA;AAG5B,8DAAgE;AAAvD,qHAAA,kBAAkB,OAAA;AAC3B,oEAAsE;AAA7D,2HAAA,qBAAqB,OAAA;AAC9B,wDAA4E;AAAnE,gHAAA,gBAAgB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAC1C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AAEpB,4CAAiE;AAAxD,oGAAA,UAAU,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AACrC,kDAAiE;AAAxD,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAClC,0DAGkC;AAFhC,iHAAA,gBAAgB,OAAA;AAChB,uHAAA,sBAAsB,OAAA;AAExB,gEAGqC;AAFnC,uHAAA,mBAAmB,OAAA;AACnB,oHAAA,gBAAgB,OAAA;AAGlB,+CAM0B;AALxB,0GAAA,YAAY,OAAA;AACZ,wGAAA,UAAU,OAAA;AACV,uGAAA,SAAS,OAAA;AACT,wGAAA,UAAU,OAAA;AACV,0GAAA,YAAY,OAAA;AAGd,+CAI0B;AAHxB,8GAAA,gBAAgB,OAAA;AAChB,gHAAA,kBAAkB,OAAA;AAClB,gHAAA,kBAAkB,OAAA;AAGpB,kDAO6B;AAN3B,0GAAA,YAAY,OAAA;AACZ,wGAAA,UAAU,OAAA;AACV,0GAAA,YAAY,OAAA;AACZ,+GAAA,iBAAiB,OAAA;AACjB,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAGlB,kDAI6B;AAH3B,iHAAA,mBAAmB,OAAA;AACnB,6GAAA,eAAe,OAAA;AACf,kHAAA,oBAAoB,OAAA;AAGtB,+DAKgC;AAJ9B,uHAAA,eAAe,OAAA;AACf,0HAAA,SAAS,OAAsB;AAC/B,6HAAA,qBAAqB,OAAA;AACrB,oHAAA,YAAY,OAAA;AAGd,0BAA0B;AAC1B,oDAK+B;AAJ7B,6GAAA,eAAe,OAAA;AACf,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,0GAAA,YAAY,OAAA;AAGd,8DAAiE;AAAxD,sHAAA,mBAAmB,OAAA;AAG5B,8DAAgE;AAAvD,qHAAA,kBAAkB,OAAA;AAC3B,oEAAsE;AAA7D,2HAAA,qBAAqB,OAAA;AAC9B,wDAA4E;AAAnE,gHAAA,gBAAgB,OAAA;AAAE,+GAAA,eAAe,OAAA;AAC1C,oDAI+B;AAH7B,4GAAA,cAAc,OAAA;AACd,+GAAA,UAAU,OAAqB;AAC/B,oHAAA,eAAe,OAA0B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stratum-hq/db-adapters",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Stratum PostgreSQL adapters for tenant-scoped query isolation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multi-tenancy",
|
|
@@ -56,5 +56,10 @@
|
|
|
56
56
|
"@types/pg": "^8.11.0",
|
|
57
57
|
"typescript": "^5.4.0",
|
|
58
58
|
"vitest": "^1.6.0"
|
|
59
|
+
},
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "https://github.com/stratum-hq/Stratum.git",
|
|
63
|
+
"directory": "packages/db-adapters"
|
|
59
64
|
}
|
|
60
65
|
}
|