@usebetterdev/tenant 0.2.0-beta.9 → 0.3.0-beta.3
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 +86 -24
- package/dist/drizzle.cjs +6 -2
- package/dist/drizzle.cjs.map +1 -1
- package/dist/drizzle.d.cts +2 -1
- package/dist/drizzle.d.ts +2 -1
- package/dist/drizzle.js +4 -2
- package/dist/drizzle.js.map +1 -1
- package/dist/express.cjs.map +1 -1
- package/dist/express.d.cts +1 -1
- package/dist/express.d.ts +1 -1
- package/dist/express.js.map +1 -1
- package/dist/index.cjs +0 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/prisma.cjs +31 -0
- package/dist/prisma.cjs.map +1 -0
- package/dist/prisma.d.cts +1 -0
- package/dist/prisma.d.ts +1 -0
- package/dist/prisma.js +6 -0
- package/dist/prisma.js.map +1 -0
- package/package.json +15 -7
package/README.md
CHANGED
|
@@ -55,23 +55,37 @@ npx @usebetterdev/tenant-cli seed --name "Acme Corp" --database-url $DATABASE_UR
|
|
|
55
55
|
|
|
56
56
|
### 5. Wire up your app
|
|
57
57
|
|
|
58
|
+
**With pg:**
|
|
59
|
+
|
|
58
60
|
```ts
|
|
59
61
|
import { drizzle } from "drizzle-orm/node-postgres";
|
|
60
62
|
import { Pool } from "pg";
|
|
61
63
|
import { betterTenant } from "@usebetterdev/tenant";
|
|
62
|
-
import {
|
|
63
|
-
drizzleAdapter,
|
|
64
|
-
createGetTenantRepository,
|
|
65
|
-
tenantsTable,
|
|
66
|
-
} from "@usebetterdev/tenant/drizzle";
|
|
64
|
+
import { drizzleDatabase } from "@usebetterdev/tenant/drizzle";
|
|
67
65
|
|
|
68
66
|
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
69
|
-
const
|
|
67
|
+
const database = drizzle(pool);
|
|
68
|
+
|
|
69
|
+
export const tenant = betterTenant({
|
|
70
|
+
database: drizzleDatabase(database),
|
|
71
|
+
tenantResolver: { header: "x-tenant-id" },
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**With postgres.js:**
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
79
|
+
import postgres from "postgres";
|
|
80
|
+
import { betterTenant } from "@usebetterdev/tenant";
|
|
81
|
+
import { drizzleDatabase } from "@usebetterdev/tenant/drizzle";
|
|
82
|
+
|
|
83
|
+
const client = postgres(process.env.DATABASE_URL);
|
|
84
|
+
const database = drizzle(client);
|
|
70
85
|
|
|
71
86
|
export const tenant = betterTenant({
|
|
72
|
-
|
|
87
|
+
database: drizzleDatabase(database),
|
|
73
88
|
tenantResolver: { header: "x-tenant-id" },
|
|
74
|
-
getTenantRepository: createGetTenantRepository(tenantsTable),
|
|
75
89
|
});
|
|
76
90
|
```
|
|
77
91
|
|
|
@@ -118,15 +132,41 @@ const projects = await db.select().from(projectsTable);
|
|
|
118
132
|
// ^ returns only current tenant's projects — no WHERE needed
|
|
119
133
|
```
|
|
120
134
|
|
|
135
|
+
### 8. Shared (non-tenant) tables
|
|
136
|
+
|
|
137
|
+
Tables without RLS (lookup data, settings, feature flags) work through the same `getDatabase()` handle — no separate connection needed. Wrap it for convenience:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
// src/database.ts
|
|
141
|
+
import { tenant } from "./tenant";
|
|
142
|
+
|
|
143
|
+
export function getDatabase() {
|
|
144
|
+
const database = tenant.getDatabase();
|
|
145
|
+
if (!database) {
|
|
146
|
+
throw new Error("No active tenant context");
|
|
147
|
+
}
|
|
148
|
+
return database;
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then use `getDatabase()` for everything:
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
import { getDatabase } from "../database";
|
|
156
|
+
|
|
157
|
+
const projects = await getDatabase().select().from(projectsTable); // RLS-filtered
|
|
158
|
+
const categories = await getDatabase().select().from(categoriesTable); // no RLS, all rows
|
|
159
|
+
```
|
|
160
|
+
|
|
121
161
|
## Subpath exports
|
|
122
162
|
|
|
123
|
-
| Import | Description
|
|
124
|
-
| ------------------------------ |
|
|
125
|
-
| `@usebetterdev/tenant` | Core API: `betterTenant`, `getContext`, `runAs`, `runAsSystem`
|
|
126
|
-
| `@usebetterdev/tenant/drizzle` | Drizzle
|
|
127
|
-
| `@usebetterdev/tenant/hono` | Hono middleware: `createHonoMiddleware`
|
|
128
|
-
| `@usebetterdev/tenant/express` | Express middleware: `createExpressMiddleware`
|
|
129
|
-
| `@usebetterdev/tenant/next` | Next.js wrapper: `withTenant`
|
|
163
|
+
| Import | Description |
|
|
164
|
+
| ------------------------------ | -------------------------------------------------------------------- |
|
|
165
|
+
| `@usebetterdev/tenant` | Core API: `betterTenant`, `getContext`, `runAs`, `runAsSystem` |
|
|
166
|
+
| `@usebetterdev/tenant/drizzle` | Drizzle: `drizzleDatabase`, `tenantsTable` |
|
|
167
|
+
| `@usebetterdev/tenant/hono` | Hono middleware: `createHonoMiddleware` |
|
|
168
|
+
| `@usebetterdev/tenant/express` | Express middleware: `createExpressMiddleware` |
|
|
169
|
+
| `@usebetterdev/tenant/next` | Next.js wrapper: `withTenant` |
|
|
130
170
|
|
|
131
171
|
## Tenant resolver
|
|
132
172
|
|
|
@@ -142,14 +182,38 @@ tenantResolver: {
|
|
|
142
182
|
}
|
|
143
183
|
```
|
|
144
184
|
|
|
185
|
+
### Resolving by slug
|
|
186
|
+
|
|
187
|
+
Slugs are automatically resolved to UUIDs. If a resolver returns `"acme"` (not a UUID), the library looks it up in the tenants table and uses the matching UUID for RLS. No extra config needed — subdomain resolution just works:
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
const tenant = betterTenant({
|
|
191
|
+
database: drizzleDatabase(db),
|
|
192
|
+
tenantResolver: { subdomain: true },
|
|
193
|
+
});
|
|
194
|
+
// acme.app.com → resolves "acme" → looks up slug → uses UUID for RLS
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
For custom mappings (e.g. custom domains), use `resolveToId`:
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
tenantResolver: {
|
|
201
|
+
custom: (req) => req.host, // "client.com"
|
|
202
|
+
resolveToId: async (domain) => {
|
|
203
|
+
const mapping = await lookupDomain(domain);
|
|
204
|
+
return mapping.tenantId; // UUID
|
|
205
|
+
},
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
145
209
|
## Tenant API
|
|
146
210
|
|
|
147
|
-
|
|
211
|
+
CRUD operations on the `tenants` table are available via `tenant.api`. All API calls run with RLS bypass (`runAsSystem`) so they can read and write tenants across the system. **Restrict these endpoints to admins** — do not expose them to regular tenant users.
|
|
148
212
|
|
|
149
213
|
| Method | Description |
|
|
150
214
|
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
151
215
|
| **createTenant(data)** | Create a tenant. `data`: `{ name: string, slug: string }` (both required, trimmed). Returns the created `Tenant` (`id`, `name`, `slug`, `createdAt`). |
|
|
152
|
-
| **listTenants(options?)** | List tenants with pagination. `options`: `{ limit?: number, offset?: number }`. Default `limit` 50
|
|
216
|
+
| **listTenants(options?)** | List tenants with pagination. `options`: `{ limit?: number, offset?: number }`. Default `limit` 50. Returns `Tenant[]`. |
|
|
153
217
|
| **updateTenant(tenantId, data)** | Update a tenant by ID. `data`: `{ name?: string, slug?: string }`. Returns the updated `Tenant`. |
|
|
154
218
|
| **deleteTenant(tenantId)** | Delete a tenant by ID. Returns `void`. |
|
|
155
219
|
|
|
@@ -157,31 +221,29 @@ Example:
|
|
|
157
221
|
|
|
158
222
|
```ts
|
|
159
223
|
// Create
|
|
160
|
-
const created = await tenant.
|
|
224
|
+
const created = await tenant.api.createTenant({
|
|
161
225
|
name: "Acme Corp",
|
|
162
226
|
slug: "acme",
|
|
163
227
|
});
|
|
164
228
|
|
|
165
229
|
// List (e.g. admin dashboard)
|
|
166
|
-
const tenants = await tenant.
|
|
230
|
+
const tenants = await tenant.api.listTenants({ limit: 20, offset: 0 });
|
|
167
231
|
|
|
168
232
|
// Update
|
|
169
|
-
await tenant.
|
|
233
|
+
await tenant.api.updateTenant(created.id, {
|
|
170
234
|
name: "Acme Inc",
|
|
171
235
|
slug: "acme-inc",
|
|
172
236
|
});
|
|
173
237
|
|
|
174
238
|
// Delete
|
|
175
|
-
await tenant.
|
|
239
|
+
await tenant.api.deleteTenant(created.id);
|
|
176
240
|
```
|
|
177
241
|
|
|
178
242
|
## Admin operations
|
|
179
243
|
|
|
180
244
|
```ts
|
|
181
|
-
import { runAs, runAsSystem } from "@usebetterdev/tenant";
|
|
182
|
-
|
|
183
245
|
// Run as a specific tenant (cron jobs, background tasks)
|
|
184
|
-
await tenant.runAs(tenantId,
|
|
246
|
+
await tenant.runAs(tenantId, async (db) => {
|
|
185
247
|
await db.select().from(projectsTable); // scoped to tenant
|
|
186
248
|
});
|
|
187
249
|
|
package/dist/drizzle.cjs
CHANGED
|
@@ -20,12 +20,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/drizzle.ts
|
|
21
21
|
var drizzle_exports = {};
|
|
22
22
|
__export(drizzle_exports, {
|
|
23
|
-
|
|
23
|
+
drizzleDatabase: () => import_tenant_drizzle.drizzleDatabase,
|
|
24
|
+
tenantId: () => import_tenant_drizzle.tenantId,
|
|
25
|
+
tenantsTable: () => import_tenant_drizzle.tenantsTable
|
|
24
26
|
});
|
|
25
27
|
module.exports = __toCommonJS(drizzle_exports);
|
|
26
28
|
var import_tenant_drizzle = require("@usebetterdev/tenant-drizzle");
|
|
27
29
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
30
|
0 && (module.exports = {
|
|
29
|
-
|
|
31
|
+
drizzleDatabase,
|
|
32
|
+
tenantId,
|
|
33
|
+
tenantsTable
|
|
30
34
|
});
|
|
31
35
|
//# sourceMappingURL=drizzle.cjs.map
|
package/dist/drizzle.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/drizzle.ts"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"sources":["../src/drizzle.ts"],"sourcesContent":["export { drizzleDatabase, tenantsTable, tenantId } from \"@usebetterdev/tenant-drizzle\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAwD;","names":[]}
|
package/dist/drizzle.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { drizzleDatabase, tenantId, tenantsTable } from '@usebetterdev/tenant-drizzle';
|
|
2
2
|
import '@usebetterdev/tenant-express';
|
|
3
3
|
import '@usebetterdev/tenant-hono';
|
|
4
4
|
import '@usebetterdev/tenant-core';
|
|
5
5
|
import '@usebetterdev/tenant-next';
|
|
6
|
+
import '@usebetterdev/tenant-prisma';
|
package/dist/drizzle.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { drizzleDatabase, tenantId, tenantsTable } from '@usebetterdev/tenant-drizzle';
|
|
2
2
|
import '@usebetterdev/tenant-express';
|
|
3
3
|
import '@usebetterdev/tenant-hono';
|
|
4
4
|
import '@usebetterdev/tenant-core';
|
|
5
5
|
import '@usebetterdev/tenant-next';
|
|
6
|
+
import '@usebetterdev/tenant-prisma';
|
package/dist/drizzle.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// src/drizzle.ts
|
|
2
|
-
import {
|
|
2
|
+
import { drizzleDatabase, tenantsTable, tenantId } from "@usebetterdev/tenant-drizzle";
|
|
3
3
|
export {
|
|
4
|
-
|
|
4
|
+
drizzleDatabase,
|
|
5
|
+
tenantId,
|
|
6
|
+
tenantsTable
|
|
5
7
|
};
|
|
6
8
|
//# sourceMappingURL=drizzle.js.map
|
package/dist/drizzle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/drizzle.ts"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"sources":["../src/drizzle.ts"],"sourcesContent":["export { drizzleDatabase, tenantsTable, tenantId } from \"@usebetterdev/tenant-drizzle\";\n"],"mappings":";AAAA,SAAS,iBAAiB,cAAc,gBAAgB;","names":[]}
|
package/dist/express.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/express.ts"],"sourcesContent":["export { createExpressMiddleware } from \"@usebetterdev/tenant-express\";\nexport type {\n CreateExpressMiddlewareOptions,\n ExpressRequestLike,\n ExpressResponseLike,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressTenantLike,\n} from \"@usebetterdev/tenant-express\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAwC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/express.ts"],"sourcesContent":["export { createExpressMiddleware } from \"@usebetterdev/tenant-express\";\nexport type {\n CreateExpressMiddlewareOptions,\n ExpressRequestLike,\n ExpressResponseLike,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressTenantLike,\n TenantContext,\n} from \"@usebetterdev/tenant-express\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAwC;","names":[]}
|
package/dist/express.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { CreateExpressMiddlewareOptions, ExpressMiddleware, ExpressNextFunction, ExpressRequestLike, ExpressResponseLike, ExpressTenantLike, createExpressMiddleware } from '@usebetterdev/tenant-express';
|
|
1
|
+
export { CreateExpressMiddlewareOptions, ExpressMiddleware, ExpressNextFunction, ExpressRequestLike, ExpressResponseLike, ExpressTenantLike, TenantContext, createExpressMiddleware } from '@usebetterdev/tenant-express';
|
package/dist/express.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { CreateExpressMiddlewareOptions, ExpressMiddleware, ExpressNextFunction, ExpressRequestLike, ExpressResponseLike, ExpressTenantLike, createExpressMiddleware } from '@usebetterdev/tenant-express';
|
|
1
|
+
export { CreateExpressMiddlewareOptions, ExpressMiddleware, ExpressNextFunction, ExpressRequestLike, ExpressResponseLike, ExpressTenantLike, TenantContext, createExpressMiddleware } from '@usebetterdev/tenant-express';
|
package/dist/express.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/express.ts"],"sourcesContent":["export { createExpressMiddleware } from \"@usebetterdev/tenant-express\";\nexport type {\n CreateExpressMiddlewareOptions,\n ExpressRequestLike,\n ExpressResponseLike,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressTenantLike,\n} from \"@usebetterdev/tenant-express\";\n"],"mappings":";AAAA,SAAS,+BAA+B;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/express.ts"],"sourcesContent":["export { createExpressMiddleware } from \"@usebetterdev/tenant-express\";\nexport type {\n CreateExpressMiddlewareOptions,\n ExpressRequestLike,\n ExpressResponseLike,\n ExpressNextFunction,\n ExpressMiddleware,\n ExpressTenantLike,\n TenantContext,\n} from \"@usebetterdev/tenant-express\";\n"],"mappings":";AAAA,SAAS,+BAA+B;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -27,11 +27,9 @@ __export(index_exports, {
|
|
|
27
27
|
getContext: () => import_tenant_core.getContext,
|
|
28
28
|
handleRequest: () => import_tenant_core.handleRequest,
|
|
29
29
|
resolveTenant: () => import_tenant_core.resolveTenant,
|
|
30
|
-
resolveTenantAsync: () => import_tenant_core.resolveTenantAsync,
|
|
31
30
|
runAs: () => import_tenant_core.runAs,
|
|
32
31
|
runAsSystem: () => import_tenant_core.runAsSystem,
|
|
33
32
|
runWithTenant: () => import_tenant_core.runWithTenant,
|
|
34
|
-
runWithTenantAndDatabase: () => import_tenant_core.runWithTenantAndDatabase,
|
|
35
33
|
toResolvableRequest: () => import_tenant_core.toResolvableRequest
|
|
36
34
|
});
|
|
37
35
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -45,11 +43,9 @@ var import_tenant_core = require("@usebetterdev/tenant-core");
|
|
|
45
43
|
getContext,
|
|
46
44
|
handleRequest,
|
|
47
45
|
resolveTenant,
|
|
48
|
-
resolveTenantAsync,
|
|
49
46
|
runAs,
|
|
50
47
|
runAsSystem,
|
|
51
48
|
runWithTenant,
|
|
52
|
-
runWithTenantAndDatabase,
|
|
53
49
|
toResolvableRequest
|
|
54
50
|
});
|
|
55
51
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n betterTenant,\n getContext,\n runWithTenant,\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n betterTenant,\n getContext,\n runWithTenant,\n resolveTenant,\n handleRequest,\n toResolvableRequest,\n runAs,\n runAsSystem,\n createTenantApi,\n TenantNotResolvedError,\n TenantMiddlewareError,\n} from \"@usebetterdev/tenant-core\";\nexport type {\n BetterTenantInstance,\n TenantApi,\n CreateTenantData,\n UpdateTenantData,\n ListTenantsOptions,\n HandleRequestOptions,\n Tenant,\n TenantContext,\n TenantScopedDatabase,\n SystemDatabase,\n TenantAdapter,\n TenantRepository,\n DatabaseProvider,\n TenantResolverConfig,\n ResolvableRequest,\n BetterTenantPlugin,\n BetterTenantConfig,\n NodeLikeRequest,\n PathResolverConfig,\n SubdomainResolverConfig,\n JwtResolverConfig,\n ConsoleRegistration,\n} from \"@usebetterdev/tenant-core\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAYO;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { BetterTenantConfig, BetterTenantInstance, BetterTenantPlugin, CreateTenantData, HandleRequestOptions, JwtResolverConfig, ListTenantsOptions, NodeLikeRequest, PathResolverConfig, ResolvableRequest, SubdomainResolverConfig, SystemDatabase, Tenant, TenantAdapter, TenantApi, TenantContext, TenantMiddlewareError, TenantNotResolvedError, TenantRepository, TenantResolverConfig, TenantScopedDatabase, UpdateTenantData, betterTenant, createTenantApi, getContext, handleRequest, resolveTenant,
|
|
1
|
+
export { BetterTenantConfig, BetterTenantInstance, BetterTenantPlugin, ConsoleRegistration, CreateTenantData, DatabaseProvider, HandleRequestOptions, JwtResolverConfig, ListTenantsOptions, NodeLikeRequest, PathResolverConfig, ResolvableRequest, SubdomainResolverConfig, SystemDatabase, Tenant, TenantAdapter, TenantApi, TenantContext, TenantMiddlewareError, TenantNotResolvedError, TenantRepository, TenantResolverConfig, TenantScopedDatabase, UpdateTenantData, betterTenant, createTenantApi, getContext, handleRequest, resolveTenant, runAs, runAsSystem, runWithTenant, toResolvableRequest } from '@usebetterdev/tenant-core';
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { BetterTenantConfig, BetterTenantInstance, BetterTenantPlugin, CreateTenantData, HandleRequestOptions, JwtResolverConfig, ListTenantsOptions, NodeLikeRequest, PathResolverConfig, ResolvableRequest, SubdomainResolverConfig, SystemDatabase, Tenant, TenantAdapter, TenantApi, TenantContext, TenantMiddlewareError, TenantNotResolvedError, TenantRepository, TenantResolverConfig, TenantScopedDatabase, UpdateTenantData, betterTenant, createTenantApi, getContext, handleRequest, resolveTenant,
|
|
1
|
+
export { BetterTenantConfig, BetterTenantInstance, BetterTenantPlugin, ConsoleRegistration, CreateTenantData, DatabaseProvider, HandleRequestOptions, JwtResolverConfig, ListTenantsOptions, NodeLikeRequest, PathResolverConfig, ResolvableRequest, SubdomainResolverConfig, SystemDatabase, Tenant, TenantAdapter, TenantApi, TenantContext, TenantMiddlewareError, TenantNotResolvedError, TenantRepository, TenantResolverConfig, TenantScopedDatabase, UpdateTenantData, betterTenant, createTenantApi, getContext, handleRequest, resolveTenant, runAs, runAsSystem, runWithTenant, toResolvableRequest } from '@usebetterdev/tenant-core';
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,7 @@ import {
|
|
|
3
3
|
betterTenant,
|
|
4
4
|
getContext,
|
|
5
5
|
runWithTenant,
|
|
6
|
-
runWithTenantAndDatabase,
|
|
7
6
|
resolveTenant,
|
|
8
|
-
resolveTenantAsync,
|
|
9
7
|
handleRequest,
|
|
10
8
|
toResolvableRequest,
|
|
11
9
|
runAs,
|
|
@@ -22,11 +20,9 @@ export {
|
|
|
22
20
|
getContext,
|
|
23
21
|
handleRequest,
|
|
24
22
|
resolveTenant,
|
|
25
|
-
resolveTenantAsync,
|
|
26
23
|
runAs,
|
|
27
24
|
runAsSystem,
|
|
28
25
|
runWithTenant,
|
|
29
|
-
runWithTenantAndDatabase,
|
|
30
26
|
toResolvableRequest
|
|
31
27
|
};
|
|
32
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n betterTenant,\n getContext,\n runWithTenant,\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n betterTenant,\n getContext,\n runWithTenant,\n resolveTenant,\n handleRequest,\n toResolvableRequest,\n runAs,\n runAsSystem,\n createTenantApi,\n TenantNotResolvedError,\n TenantMiddlewareError,\n} from \"@usebetterdev/tenant-core\";\nexport type {\n BetterTenantInstance,\n TenantApi,\n CreateTenantData,\n UpdateTenantData,\n ListTenantsOptions,\n HandleRequestOptions,\n Tenant,\n TenantContext,\n TenantScopedDatabase,\n SystemDatabase,\n TenantAdapter,\n TenantRepository,\n DatabaseProvider,\n TenantResolverConfig,\n ResolvableRequest,\n BetterTenantPlugin,\n BetterTenantConfig,\n NodeLikeRequest,\n PathResolverConfig,\n SubdomainResolverConfig,\n JwtResolverConfig,\n ConsoleRegistration,\n} from \"@usebetterdev/tenant-core\";\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
package/dist/prisma.cjs
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/prisma.ts
|
|
21
|
+
var prisma_exports = {};
|
|
22
|
+
__export(prisma_exports, {
|
|
23
|
+
prismaDatabase: () => import_tenant_prisma.prismaDatabase
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(prisma_exports);
|
|
26
|
+
var import_tenant_prisma = require("@usebetterdev/tenant-prisma");
|
|
27
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
+
0 && (module.exports = {
|
|
29
|
+
prismaDatabase
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=prisma.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/prisma.ts"],"sourcesContent":["export { prismaDatabase } from \"@usebetterdev/tenant-prisma\";\nexport type {\n PrismaClientLike,\n PrismaTransactionClient,\n WithOptionalTenant,\n} from \"@usebetterdev/tenant-prisma\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA+B;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PrismaClientLike, PrismaTransactionClient, WithOptionalTenant, prismaDatabase } from '@usebetterdev/tenant-prisma';
|
package/dist/prisma.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PrismaClientLike, PrismaTransactionClient, WithOptionalTenant, prismaDatabase } from '@usebetterdev/tenant-prisma';
|
package/dist/prisma.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/prisma.ts"],"sourcesContent":["export { prismaDatabase } from \"@usebetterdev/tenant-prisma\";\nexport type {\n PrismaClientLike,\n PrismaTransactionClient,\n WithOptionalTenant,\n} from \"@usebetterdev/tenant-prisma\";\n"],"mappings":";AAAA,SAAS,sBAAsB;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usebetterdev/tenant",
|
|
3
|
-
"description": "Multi-tenancy for Postgres in minutes. RLS-based tenant isolation, framework adapters (Hono, Express, Next.js), Drizzle ORM support.",
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "Multi-tenancy for Postgres in minutes. RLS-based tenant isolation, framework adapters (Hono, Express, Next.js), Drizzle and Prisma ORM support.",
|
|
4
|
+
"version": "0.3.0-beta.3",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multi-tenancy",
|
|
7
7
|
"postgres",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"row-level-security",
|
|
10
10
|
"tenant",
|
|
11
11
|
"drizzle",
|
|
12
|
+
"prisma",
|
|
12
13
|
"hono",
|
|
13
14
|
"express",
|
|
14
15
|
"nextjs",
|
|
@@ -53,6 +54,12 @@
|
|
|
53
54
|
"import": "./dist/next.js",
|
|
54
55
|
"require": "./dist/next.cjs",
|
|
55
56
|
"default": "./dist/next.js"
|
|
57
|
+
},
|
|
58
|
+
"./prisma": {
|
|
59
|
+
"types": "./dist/prisma.d.ts",
|
|
60
|
+
"import": "./dist/prisma.js",
|
|
61
|
+
"require": "./dist/prisma.cjs",
|
|
62
|
+
"default": "./dist/prisma.js"
|
|
56
63
|
}
|
|
57
64
|
},
|
|
58
65
|
"files": [
|
|
@@ -60,11 +67,12 @@
|
|
|
60
67
|
"README.md"
|
|
61
68
|
],
|
|
62
69
|
"dependencies": {
|
|
63
|
-
"@usebetterdev/tenant-
|
|
64
|
-
"@usebetterdev/tenant-
|
|
65
|
-
"@usebetterdev/tenant-
|
|
66
|
-
"@usebetterdev/tenant-
|
|
67
|
-
"@usebetterdev/tenant-
|
|
70
|
+
"@usebetterdev/tenant-express": "0.3.0-beta.3",
|
|
71
|
+
"@usebetterdev/tenant-hono": "0.3.0-beta.3",
|
|
72
|
+
"@usebetterdev/tenant-next": "0.3.0-beta.3",
|
|
73
|
+
"@usebetterdev/tenant-drizzle": "0.3.0-beta.3",
|
|
74
|
+
"@usebetterdev/tenant-prisma": "0.3.0-beta.3",
|
|
75
|
+
"@usebetterdev/tenant-core": "0.3.0-beta.3"
|
|
68
76
|
},
|
|
69
77
|
"devDependencies": {
|
|
70
78
|
"tsup": "^8.3.5",
|