@multitenantkit/sdk 0.1.1 → 0.1.2
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/dist/convenience.d.ts.map +1 -1
- package/dist/convenience.js +3 -7
- package/dist/convenience.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/supabase.d.ts +206 -0
- package/dist/supabase.d.ts.map +1 -0
- package/dist/supabase.js +313 -0
- package/dist/supabase.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convenience.d.ts","sourceRoot":"","sources":["../src/convenience.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convenience.d.ts","sourceRoot":"","sources":["../src/convenience.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB;AA+ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,wBAAgB,gBAAgB,CAE5B,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,MAAM,CAAC,EACD,cAAc,CACV,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACD,qBAAqB,EAC3B,MAAM,CAAC,EACD,cAAc,CACV,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACD,qBAAqB,GAC5B,OAAO,CAoDT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,mBAAmB,CAE/B,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,MAAM,CAAC,EACD,cAAc,CACV,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACD,qBAAqB,EAC3B,MAAM,CAAC,EACD,cAAc,CACV,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACD,qBAAqB,GAC5B,MAAM,CAoDR"}
|
package/dist/convenience.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { createSupabaseAuthService } from '@multitenantkit/adapter-auth-supabase';
|
|
5
5
|
import { buildExpressApp, buildExpressRouter } from '@multitenantkit/adapter-transport-express';
|
|
6
6
|
import { buildHandlers } from '@multitenantkit/api-handlers';
|
|
7
|
-
import { createJsonAdapters,
|
|
7
|
+
import { createJsonAdapters, createPostgresAdapters, createSystemAdapters, createUseCases } from '@multitenantkit/composition';
|
|
8
8
|
/**
|
|
9
9
|
* Detects which parameter is which based on their properties
|
|
10
10
|
* This allows calling the function with parameters in any order
|
|
@@ -116,12 +116,10 @@ export function createExpressApp(param1, param2) {
|
|
|
116
116
|
: createPostgresAdapters(undefined, toolkitOptions);
|
|
117
117
|
// 2. Create system and metrics adapters
|
|
118
118
|
const systemAdapters = createSystemAdapters();
|
|
119
|
-
const metricsAdapter = createMetricsAdapter();
|
|
120
119
|
// 3. Create use cases with all adapters
|
|
121
120
|
const useCases = createUseCases({
|
|
122
121
|
persistence: persistenceAdapters,
|
|
123
|
-
system: systemAdapters
|
|
124
|
-
observability: metricsAdapter
|
|
122
|
+
system: systemAdapters
|
|
125
123
|
}, toolkitOptions);
|
|
126
124
|
// 4. Build HTTP handlers
|
|
127
125
|
const handlers = buildHandlers(useCases, toolkitOptions);
|
|
@@ -191,12 +189,10 @@ export function createExpressRouter(param1, param2) {
|
|
|
191
189
|
: createPostgresAdapters(undefined, toolkitOptions);
|
|
192
190
|
// 2. Create system and metrics adapters
|
|
193
191
|
const systemAdapters = createSystemAdapters();
|
|
194
|
-
const metricsAdapter = createMetricsAdapter();
|
|
195
192
|
// 3. Create use cases with all adapters
|
|
196
193
|
const useCases = createUseCases({
|
|
197
194
|
persistence: persistenceAdapters,
|
|
198
|
-
system: systemAdapters
|
|
199
|
-
observability: metricsAdapter
|
|
195
|
+
system: systemAdapters
|
|
200
196
|
}, toolkitOptions);
|
|
201
197
|
// 4. Build HTTP handlers
|
|
202
198
|
const handlers = buildHandlers(useCases, toolkitOptions);
|
package/dist/convenience.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convenience.js","sourceRoot":"","sources":["../src/convenience.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wCAAwC;AACxC,gFAAgF;AAEhF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACH,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"convenience.js","sourceRoot":"","sources":["../src/convenience.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,mBAAmB,MAAM,uCAAuC,CAAC;AAE7E,OAAO,KAAK,sBAAsB,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,8CAA8C,CAAC;AAE3F,OAAO,KAAK,uBAAuB,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,wBAAwB,MAAM,6CAA6C,CAAC;AAExF,OAAO,KAAK,uBAAuB,MAAM,2CAA2C,CAAC;AACrF,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,mBAAmB,MAAM,uCAAuC,CAAC;AAE7E,OAAO,KAAK,sBAAsB,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,8CAA8C,CAAC;AAE3F,OAAO,KAAK,uBAAuB,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,wBAAwB,MAAM,6CAA6C,CAAC;AAExF,OAAO,KAAK,uBAAuB,MAAM,2CAA2C,CAAC;AACrF,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,eAAe,CAAC;AAE9B,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,4 +23,6 @@ export * from '@multitenantkit/domain';
|
|
|
23
23
|
export * from '@multitenantkit/domain-contracts';
|
|
24
24
|
// Convenience functions for quick setup
|
|
25
25
|
export * from './convenience';
|
|
26
|
+
// Supabase-specific convenience functions
|
|
27
|
+
export * from './supabase';
|
|
26
28
|
//# 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,gFAAgF;AAChF,qBAAqB;AACrB,qEAAqE;AACrE,gFAAgF;AAEhF,gDAAgD;AAChD,OAAO,KAAK,mBAAmB,MAAM,uCAAuC,CAAC;AAC7E,4EAA4E;AAC5E,OAAO,KAAK,sBAAsB,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,8CAA8C,CAAC;AAC3F,wCAAwC;AACxC,OAAO,KAAK,uBAAuB,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,wBAAwB,MAAM,6CAA6C,CAAC;AACxF,2CAA2C;AAC3C,OAAO,KAAK,uBAAuB,MAAM,2CAA2C,CAAC;AACrF,cAAc,+BAA+B,CAAC;AAC9C,gCAAgC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,+BAA+B;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,sEAAsE;AACtE,cAAc,wBAAwB,CAAC;AACvC,iDAAiD;AACjD,cAAc,kCAAkC,CAAC;AACjD,wCAAwC;AACxC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qBAAqB;AACrB,qEAAqE;AACrE,gFAAgF;AAEhF,gDAAgD;AAChD,OAAO,KAAK,mBAAmB,MAAM,uCAAuC,CAAC;AAC7E,4EAA4E;AAC5E,OAAO,KAAK,sBAAsB,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,0BAA0B,MAAM,8CAA8C,CAAC;AAC3F,wCAAwC;AACxC,OAAO,KAAK,uBAAuB,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,wBAAwB,MAAM,6CAA6C,CAAC;AACxF,2CAA2C;AAC3C,OAAO,KAAK,uBAAuB,MAAM,2CAA2C,CAAC;AACrF,cAAc,+BAA+B,CAAC;AAC9C,gCAAgC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,+BAA+B;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,sEAAsE;AACtE,cAAc,wBAAwB,CAAC;AACvC,iDAAiD;AACjD,cAAc,kCAAkC,CAAC;AACjD,wCAAwC;AACxC,cAAc,eAAe,CAAC;AAC9B,0CAA0C;AAC1C,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { createUseCases } from '@multitenantkit/composition';
|
|
2
|
+
import type { Express, Router } from 'express';
|
|
3
|
+
import type { ZodSchema } from 'zod';
|
|
4
|
+
/**
|
|
5
|
+
* Simplified custom fields configuration for Supabase users
|
|
6
|
+
* Only requires the schema, everything else is pre-configured
|
|
7
|
+
*/
|
|
8
|
+
export interface SupabaseUserCustomFieldsConfig<TCustomFields> {
|
|
9
|
+
/**
|
|
10
|
+
* Zod schema defining custom fields structure
|
|
11
|
+
*/
|
|
12
|
+
customSchema: ZodSchema<TCustomFields>;
|
|
13
|
+
}
|
|
14
|
+
export interface SupabaseOrganizationCustomFieldsConfig<TCustomFields> {
|
|
15
|
+
/**
|
|
16
|
+
* Zod schema defining custom fields structure
|
|
17
|
+
*/
|
|
18
|
+
customSchema: ZodSchema<TCustomFields>;
|
|
19
|
+
}
|
|
20
|
+
export interface SupabaseOrganizationMembershipCustomFieldsConfig<TCustomFields> {
|
|
21
|
+
/**
|
|
22
|
+
* Zod schema defining custom fields structure
|
|
23
|
+
*/
|
|
24
|
+
customSchema: ZodSchema<TCustomFields>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Simplified toolkit options for Supabase
|
|
28
|
+
* Pre-configures common Supabase defaults
|
|
29
|
+
*/
|
|
30
|
+
export interface SupabaseToolkitOptions<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}> {
|
|
31
|
+
/**
|
|
32
|
+
* Optional naming strategy (defaults to snake_case for Supabase/PostgreSQL)
|
|
33
|
+
*/
|
|
34
|
+
namingStrategy?: 'camelCase' | 'snake_case' | 'kebab-case' | 'PascalCase';
|
|
35
|
+
/**
|
|
36
|
+
* Users configuration (optional, uses Supabase defaults)
|
|
37
|
+
*/
|
|
38
|
+
users?: {
|
|
39
|
+
customFields?: SupabaseUserCustomFieldsConfig<TUserCustomFields>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Organizations configuration (optional, uses Supabase defaults)
|
|
43
|
+
*/
|
|
44
|
+
organizations?: {
|
|
45
|
+
customFields?: SupabaseOrganizationCustomFieldsConfig<TOrganizationCustomFields>;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Organization memberships configuration (optional, uses Supabase defaults)
|
|
49
|
+
*/
|
|
50
|
+
organizationMemberships?: {
|
|
51
|
+
customFields?: SupabaseOrganizationMembershipCustomFieldsConfig<TOrganizationMembershipCustomFields>;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a complete Express application with Supabase defaults
|
|
56
|
+
*
|
|
57
|
+
* This convenience function sets up a fully configured Express app with:
|
|
58
|
+
* - PostgreSQL persistence
|
|
59
|
+
* - Supabase authentication
|
|
60
|
+
* - Pre-configured Supabase defaults (auth.users, raw_user_meta_data, etc.)
|
|
61
|
+
* - All MultiTenantKit routes and middleware
|
|
62
|
+
*
|
|
63
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
64
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
65
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
66
|
+
*
|
|
67
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
68
|
+
* @returns Express application ready to listen on a port
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* // Minimal setup - no custom fields
|
|
73
|
+
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
74
|
+
*
|
|
75
|
+
* const app = createSupabaseExpressApp();
|
|
76
|
+
* app.listen(3000);
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* // With custom fields
|
|
82
|
+
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
83
|
+
* import { z } from 'zod';
|
|
84
|
+
*
|
|
85
|
+
* const app = createSupabaseExpressApp({
|
|
86
|
+
* users: {
|
|
87
|
+
* customFields: {
|
|
88
|
+
* customSchema: z.object({
|
|
89
|
+
* firstName: z.string(),
|
|
90
|
+
* lastName: z.string(),
|
|
91
|
+
* phone: z.string().optional()
|
|
92
|
+
* })
|
|
93
|
+
* }
|
|
94
|
+
* },
|
|
95
|
+
* organizations: {
|
|
96
|
+
* customFields: {
|
|
97
|
+
* customSchema: z.object({
|
|
98
|
+
* organizationName: z.string(),
|
|
99
|
+
* industry: z.string().optional(),
|
|
100
|
+
* size: z.string().optional()
|
|
101
|
+
* })
|
|
102
|
+
* }
|
|
103
|
+
* },
|
|
104
|
+
* organizationMemberships: {
|
|
105
|
+
* customFields: {
|
|
106
|
+
* customSchema: z.object({
|
|
107
|
+
* internalRole: z.string().optional()
|
|
108
|
+
* })
|
|
109
|
+
* }
|
|
110
|
+
* }
|
|
111
|
+
* });
|
|
112
|
+
*
|
|
113
|
+
* app.listen(3000);
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare function createSupabaseExpressApp<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: SupabaseToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): Express;
|
|
117
|
+
/**
|
|
118
|
+
* Create an Express Router with Supabase defaults
|
|
119
|
+
*
|
|
120
|
+
* Use this when you want to integrate MultiTenantKit into an existing Express application.
|
|
121
|
+
* The router can be mounted at any path in your app.
|
|
122
|
+
*
|
|
123
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
124
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
125
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
126
|
+
*
|
|
127
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
128
|
+
* @returns Express Router with all MultiTenantKit routes
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* // Add to existing Express app
|
|
133
|
+
* import express from 'express';
|
|
134
|
+
* import { createSupabaseExpressRouter } from '@multitenantkit/sdk';
|
|
135
|
+
*
|
|
136
|
+
* const app = express();
|
|
137
|
+
*
|
|
138
|
+
* // Your existing routes
|
|
139
|
+
* app.get('/api/billing', billingHandler);
|
|
140
|
+
*
|
|
141
|
+
* // Add MultiTenantKit routes under /api/teams
|
|
142
|
+
* const teamsRouter = createSupabaseExpressRouter();
|
|
143
|
+
* app.use('/api/teams', teamsRouter);
|
|
144
|
+
*
|
|
145
|
+
* app.listen(3000);
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* // With custom fields
|
|
151
|
+
* import { createSupabaseExpressRouter } from '@multitenantkit/sdk';
|
|
152
|
+
* import { z } from 'zod';
|
|
153
|
+
*
|
|
154
|
+
* const router = createSupabaseExpressRouter({
|
|
155
|
+
* users: {
|
|
156
|
+
* customFields: {
|
|
157
|
+
* customSchema: z.object({
|
|
158
|
+
* firstName: z.string(),
|
|
159
|
+
* lastName: z.string()
|
|
160
|
+
* })
|
|
161
|
+
* }
|
|
162
|
+
* }
|
|
163
|
+
* });
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export declare function createSupabaseExpressRouter<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: SupabaseToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): Router;
|
|
167
|
+
/**
|
|
168
|
+
* Create use cases with Supabase defaults
|
|
169
|
+
*
|
|
170
|
+
* Use this when you want to use MultiTenantKit use cases directly without Express.
|
|
171
|
+
* Useful for background jobs, CLI tools, or custom transport layers.
|
|
172
|
+
*
|
|
173
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
174
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
175
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
176
|
+
*
|
|
177
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
178
|
+
* @returns Configured use cases ready to execute
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* // Create use cases for background job
|
|
183
|
+
* import { createSupabaseUseCases } from '@multitenantkit/sdk';
|
|
184
|
+
* import { z } from 'zod';
|
|
185
|
+
*
|
|
186
|
+
* const useCases = createSupabaseUseCases({
|
|
187
|
+
* users: {
|
|
188
|
+
* customFields: {
|
|
189
|
+
* customSchema: z.object({
|
|
190
|
+
* firstName: z.string(),
|
|
191
|
+
* lastName: z.string()
|
|
192
|
+
* })
|
|
193
|
+
* }
|
|
194
|
+
* }
|
|
195
|
+
* });
|
|
196
|
+
*
|
|
197
|
+
* // Use in background job
|
|
198
|
+
* const result = await useCases.users.getUser.execute({
|
|
199
|
+
* userId: 'user-123',
|
|
200
|
+
* requestId: crypto.randomUUID(),
|
|
201
|
+
* actorUserId: 'system'
|
|
202
|
+
* });
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export declare function createSupabaseUseCases<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: SupabaseToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): ReturnType<typeof createUseCases<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>>;
|
|
206
|
+
//# sourceMappingURL=supabase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAOA,OAAO,EAGH,cAAc,EACjB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,8BAA8B,CAAC,aAAa;IACzD;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,sCAAsC,CAAC,aAAa;IACjE;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gDAAgD,CAAC,aAAa;IAC3E;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAEnC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE;IAExC;;OAEG;IACH,cAAc,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;IAE1E;;OAEG;IACH,KAAK,CAAC,EAAE;QACJ,YAAY,CAAC,EAAE,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;KACpE,CAAC;IAEF;;OAEG;IACH,aAAa,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,sCAAsC,CAAC,yBAAyB,CAAC,CAAC;KACpF,CAAC;IAEF;;OAEG;IACH,uBAAuB,CAAC,EAAE;QACtB,YAAY,CAAC,EAAE,gDAAgD,CAAC,mCAAmC,CAAC,CAAC;KACxG,CAAC;CACL;AAmID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,wBAAwB,CAEpC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,sBAAsB,CAC5B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,OAAO,CAwCT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,2BAA2B,CAEvC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,sBAAsB,CAC5B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,MAAM,CAwCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,sBAAsB,CAC5B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,UAAU,CACT,OAAO,cAAc,CACjB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CACJ,CA2BA"}
|
package/dist/supabase.js
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Supabase-specific convenience functions
|
|
3
|
+
// =============================================================================
|
|
4
|
+
import { createSupabaseAuthService } from '@multitenantkit/adapter-auth-supabase';
|
|
5
|
+
import { buildExpressApp, buildExpressRouter } from '@multitenantkit/adapter-transport-express';
|
|
6
|
+
import { buildHandlers } from '@multitenantkit/api-handlers';
|
|
7
|
+
import { createPostgresAdapters, createSystemAdapters, createUseCases } from '@multitenantkit/composition';
|
|
8
|
+
/**
|
|
9
|
+
* Converts simplified Supabase options to full ToolkitOptions
|
|
10
|
+
* Applies Supabase-specific defaults
|
|
11
|
+
*/
|
|
12
|
+
function buildSupabaseToolkitOptions(options) {
|
|
13
|
+
const toolkitOptions = {
|
|
14
|
+
namingStrategy: options?.namingStrategy ?? 'snake_case'
|
|
15
|
+
};
|
|
16
|
+
// Configure users with Supabase defaults
|
|
17
|
+
if (options?.users?.customFields) {
|
|
18
|
+
const userCustomFieldsConfig = {
|
|
19
|
+
customSchema: options.users.customFields.customSchema,
|
|
20
|
+
// Map to Supabase's raw_user_meta_data column
|
|
21
|
+
customMapper: {
|
|
22
|
+
toDb: (fields) => ({
|
|
23
|
+
raw_user_meta_data: {
|
|
24
|
+
sub: fields.id,
|
|
25
|
+
email: fields.email,
|
|
26
|
+
...fields,
|
|
27
|
+
email_verified: true,
|
|
28
|
+
phone_verified: false
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
toDomain: (dbRow) => {
|
|
32
|
+
const metadata = dbRow.raw_user_meta_data || {};
|
|
33
|
+
// biome-ignore lint/correctness/noUnusedVariables: these fields are intentionally extracted to exclude them
|
|
34
|
+
const { sub, email_verified, phone_verified, ...customFields } = metadata;
|
|
35
|
+
return customFields;
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
// Map base fields to Supabase columns
|
|
39
|
+
columnMapping: {
|
|
40
|
+
externalId: 'id',
|
|
41
|
+
username: 'email'
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
toolkitOptions.users = {
|
|
45
|
+
customFields: userCustomFieldsConfig,
|
|
46
|
+
database: {
|
|
47
|
+
schema: 'auth',
|
|
48
|
+
table: 'users'
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// No custom fields, but still configure Supabase defaults for users
|
|
54
|
+
toolkitOptions.users = {
|
|
55
|
+
customFields: {
|
|
56
|
+
columnMapping: {
|
|
57
|
+
externalId: 'id',
|
|
58
|
+
username: 'email'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
database: {
|
|
62
|
+
schema: 'auth',
|
|
63
|
+
table: 'users'
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Configure organizations with Supabase defaults
|
|
68
|
+
if (options?.organizations?.customFields) {
|
|
69
|
+
const orgCustomFieldsConfig = {
|
|
70
|
+
customSchema: options.organizations.customFields.customSchema
|
|
71
|
+
};
|
|
72
|
+
toolkitOptions.organizations = {
|
|
73
|
+
customFields: orgCustomFieldsConfig,
|
|
74
|
+
database: {
|
|
75
|
+
schema: 'public',
|
|
76
|
+
table: 'organizations'
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// No custom fields, but still configure database defaults
|
|
82
|
+
toolkitOptions.organizations = {
|
|
83
|
+
database: {
|
|
84
|
+
schema: 'public',
|
|
85
|
+
table: 'organizations'
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Configure organization memberships with Supabase defaults
|
|
90
|
+
if (options?.organizationMemberships?.customFields) {
|
|
91
|
+
const membershipCustomFieldsConfig = {
|
|
92
|
+
customSchema: options.organizationMemberships.customFields.customSchema
|
|
93
|
+
};
|
|
94
|
+
toolkitOptions.organizationMemberships = {
|
|
95
|
+
customFields: membershipCustomFieldsConfig,
|
|
96
|
+
database: {
|
|
97
|
+
schema: 'public',
|
|
98
|
+
table: 'organization_memberships'
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// No custom fields, but still configure database defaults
|
|
104
|
+
toolkitOptions.organizationMemberships = {
|
|
105
|
+
database: {
|
|
106
|
+
schema: 'public',
|
|
107
|
+
table: 'organization_memberships'
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return toolkitOptions;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a complete Express application with Supabase defaults
|
|
115
|
+
*
|
|
116
|
+
* This convenience function sets up a fully configured Express app with:
|
|
117
|
+
* - PostgreSQL persistence
|
|
118
|
+
* - Supabase authentication
|
|
119
|
+
* - Pre-configured Supabase defaults (auth.users, raw_user_meta_data, etc.)
|
|
120
|
+
* - All MultiTenantKit routes and middleware
|
|
121
|
+
*
|
|
122
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
123
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
124
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
125
|
+
*
|
|
126
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
127
|
+
* @returns Express application ready to listen on a port
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* // Minimal setup - no custom fields
|
|
132
|
+
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
133
|
+
*
|
|
134
|
+
* const app = createSupabaseExpressApp();
|
|
135
|
+
* app.listen(3000);
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // With custom fields
|
|
141
|
+
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
142
|
+
* import { z } from 'zod';
|
|
143
|
+
*
|
|
144
|
+
* const app = createSupabaseExpressApp({
|
|
145
|
+
* users: {
|
|
146
|
+
* customFields: {
|
|
147
|
+
* customSchema: z.object({
|
|
148
|
+
* firstName: z.string(),
|
|
149
|
+
* lastName: z.string(),
|
|
150
|
+
* phone: z.string().optional()
|
|
151
|
+
* })
|
|
152
|
+
* }
|
|
153
|
+
* },
|
|
154
|
+
* organizations: {
|
|
155
|
+
* customFields: {
|
|
156
|
+
* customSchema: z.object({
|
|
157
|
+
* organizationName: z.string(),
|
|
158
|
+
* industry: z.string().optional(),
|
|
159
|
+
* size: z.string().optional()
|
|
160
|
+
* })
|
|
161
|
+
* }
|
|
162
|
+
* },
|
|
163
|
+
* organizationMemberships: {
|
|
164
|
+
* customFields: {
|
|
165
|
+
* customSchema: z.object({
|
|
166
|
+
* internalRole: z.string().optional()
|
|
167
|
+
* })
|
|
168
|
+
* }
|
|
169
|
+
* }
|
|
170
|
+
* });
|
|
171
|
+
*
|
|
172
|
+
* app.listen(3000);
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
export function createSupabaseExpressApp(options) {
|
|
176
|
+
const toolkitOptions = buildSupabaseToolkitOptions(options);
|
|
177
|
+
// 1. Create persistence adapters (PostgreSQL)
|
|
178
|
+
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
179
|
+
// 2. Create system and metrics adapters
|
|
180
|
+
const systemAdapters = createSystemAdapters();
|
|
181
|
+
// 3. Create use cases with all adapters
|
|
182
|
+
const useCases = createUseCases({
|
|
183
|
+
persistence: persistenceAdapters,
|
|
184
|
+
system: systemAdapters
|
|
185
|
+
}, toolkitOptions);
|
|
186
|
+
// 4. Build HTTP handlers
|
|
187
|
+
const handlers = buildHandlers(useCases, toolkitOptions);
|
|
188
|
+
// 5. Create Supabase auth service
|
|
189
|
+
const authService = createSupabaseAuthService();
|
|
190
|
+
// 6. Build Express app with all middleware and routes
|
|
191
|
+
const app = buildExpressApp(handlers, authService);
|
|
192
|
+
return app;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create an Express Router with Supabase defaults
|
|
196
|
+
*
|
|
197
|
+
* Use this when you want to integrate MultiTenantKit into an existing Express application.
|
|
198
|
+
* The router can be mounted at any path in your app.
|
|
199
|
+
*
|
|
200
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
201
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
202
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
203
|
+
*
|
|
204
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
205
|
+
* @returns Express Router with all MultiTenantKit routes
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* // Add to existing Express app
|
|
210
|
+
* import express from 'express';
|
|
211
|
+
* import { createSupabaseExpressRouter } from '@multitenantkit/sdk';
|
|
212
|
+
*
|
|
213
|
+
* const app = express();
|
|
214
|
+
*
|
|
215
|
+
* // Your existing routes
|
|
216
|
+
* app.get('/api/billing', billingHandler);
|
|
217
|
+
*
|
|
218
|
+
* // Add MultiTenantKit routes under /api/teams
|
|
219
|
+
* const teamsRouter = createSupabaseExpressRouter();
|
|
220
|
+
* app.use('/api/teams', teamsRouter);
|
|
221
|
+
*
|
|
222
|
+
* app.listen(3000);
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* // With custom fields
|
|
228
|
+
* import { createSupabaseExpressRouter } from '@multitenantkit/sdk';
|
|
229
|
+
* import { z } from 'zod';
|
|
230
|
+
*
|
|
231
|
+
* const router = createSupabaseExpressRouter({
|
|
232
|
+
* users: {
|
|
233
|
+
* customFields: {
|
|
234
|
+
* customSchema: z.object({
|
|
235
|
+
* firstName: z.string(),
|
|
236
|
+
* lastName: z.string()
|
|
237
|
+
* })
|
|
238
|
+
* }
|
|
239
|
+
* }
|
|
240
|
+
* });
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
export function createSupabaseExpressRouter(options) {
|
|
244
|
+
const toolkitOptions = buildSupabaseToolkitOptions(options);
|
|
245
|
+
// 1. Create persistence adapters (PostgreSQL)
|
|
246
|
+
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
247
|
+
// 2. Create system and metrics adapters
|
|
248
|
+
const systemAdapters = createSystemAdapters();
|
|
249
|
+
// 3. Create use cases with all adapters
|
|
250
|
+
const useCases = createUseCases({
|
|
251
|
+
persistence: persistenceAdapters,
|
|
252
|
+
system: systemAdapters
|
|
253
|
+
}, toolkitOptions);
|
|
254
|
+
// 4. Build HTTP handlers
|
|
255
|
+
const handlers = buildHandlers(useCases, toolkitOptions);
|
|
256
|
+
// 5. Create Supabase auth service
|
|
257
|
+
const authService = createSupabaseAuthService();
|
|
258
|
+
// 6. Build Express router with routes only (no global middleware)
|
|
259
|
+
const router = buildExpressRouter(handlers, authService);
|
|
260
|
+
return router;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Create use cases with Supabase defaults
|
|
264
|
+
*
|
|
265
|
+
* Use this when you want to use MultiTenantKit use cases directly without Express.
|
|
266
|
+
* Useful for background jobs, CLI tools, or custom transport layers.
|
|
267
|
+
*
|
|
268
|
+
* @template TUserCustomFields - Custom fields schema for Users
|
|
269
|
+
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
270
|
+
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
271
|
+
*
|
|
272
|
+
* @param options - Simplified Supabase toolkit options (only custom fields needed)
|
|
273
|
+
* @returns Configured use cases ready to execute
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* // Create use cases for background job
|
|
278
|
+
* import { createSupabaseUseCases } from '@multitenantkit/sdk';
|
|
279
|
+
* import { z } from 'zod';
|
|
280
|
+
*
|
|
281
|
+
* const useCases = createSupabaseUseCases({
|
|
282
|
+
* users: {
|
|
283
|
+
* customFields: {
|
|
284
|
+
* customSchema: z.object({
|
|
285
|
+
* firstName: z.string(),
|
|
286
|
+
* lastName: z.string()
|
|
287
|
+
* })
|
|
288
|
+
* }
|
|
289
|
+
* }
|
|
290
|
+
* });
|
|
291
|
+
*
|
|
292
|
+
* // Use in background job
|
|
293
|
+
* const result = await useCases.users.getUser.execute({
|
|
294
|
+
* userId: 'user-123',
|
|
295
|
+
* requestId: crypto.randomUUID(),
|
|
296
|
+
* actorUserId: 'system'
|
|
297
|
+
* });
|
|
298
|
+
* ```
|
|
299
|
+
*/
|
|
300
|
+
export function createSupabaseUseCases(options) {
|
|
301
|
+
const toolkitOptions = buildSupabaseToolkitOptions(options);
|
|
302
|
+
// 1. Create persistence adapters (PostgreSQL)
|
|
303
|
+
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
304
|
+
// 2. Create system and metrics adapters
|
|
305
|
+
const systemAdapters = createSystemAdapters();
|
|
306
|
+
// 3. Create and return use cases
|
|
307
|
+
const useCases = createUseCases({
|
|
308
|
+
persistence: persistenceAdapters,
|
|
309
|
+
system: systemAdapters
|
|
310
|
+
}, toolkitOptions);
|
|
311
|
+
return useCases;
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=supabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multitenantkit/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Complete SDK for building multi-tenant SaaS applications - includes all adapters and options",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multitenantkit",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"@multitenantkit/adapter-system-crypto-uuid": "^0.1.1",
|
|
62
62
|
"@multitenantkit/adapter-system-system-clock": "^0.1.1",
|
|
63
63
|
"@multitenantkit/adapter-transport-express": "^0.1.1",
|
|
64
|
-
"@multitenantkit/api-handlers": "^0.1.
|
|
64
|
+
"@multitenantkit/api-handlers": "^0.1.2",
|
|
65
65
|
"@multitenantkit/api-contracts": "^0.1.1",
|
|
66
66
|
"@multitenantkit/domain-contracts": "^0.1.1",
|
|
67
|
-
"@multitenantkit/domain": "^0.1.
|
|
68
|
-
"@multitenantkit/composition": "^0.1.
|
|
67
|
+
"@multitenantkit/domain": "^0.1.2",
|
|
68
|
+
"@multitenantkit/composition": "^0.1.2"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"typescript": "^5.0.0"
|