@multitenantkit/sdk 0.1.2 → 0.1.4
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/supabase.d.ts +23 -74
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +113 -124
- package/dist/supabase.js.map +1 -1
- package/package.json +3 -3
package/dist/supabase.d.ts
CHANGED
|
@@ -1,56 +1,6 @@
|
|
|
1
1
|
import { createUseCases } from '@multitenantkit/composition';
|
|
2
|
+
import type { ToolkitOptions } from '@multitenantkit/domain-contracts';
|
|
2
3
|
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
4
|
/**
|
|
55
5
|
* Create a complete Express application with Supabase defaults
|
|
56
6
|
*
|
|
@@ -60,11 +10,14 @@ export interface SupabaseToolkitOptions<TUserCustomFields = {}, TOrganizationCus
|
|
|
60
10
|
* - Pre-configured Supabase defaults (auth.users, raw_user_meta_data, etc.)
|
|
61
11
|
* - All MultiTenantKit routes and middleware
|
|
62
12
|
*
|
|
13
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
14
|
+
* User-provided options take precedence over defaults.
|
|
15
|
+
*
|
|
63
16
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
64
17
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
65
18
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
66
19
|
*
|
|
67
|
-
* @param options -
|
|
20
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
68
21
|
* @returns Express application ready to listen on a port
|
|
69
22
|
*
|
|
70
23
|
* @example
|
|
@@ -78,7 +31,7 @@ export interface SupabaseToolkitOptions<TUserCustomFields = {}, TOrganizationCus
|
|
|
78
31
|
*
|
|
79
32
|
* @example
|
|
80
33
|
* ```typescript
|
|
81
|
-
* // With custom fields
|
|
34
|
+
* // With custom fields and hooks
|
|
82
35
|
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
83
36
|
* import { z } from 'zod';
|
|
84
37
|
*
|
|
@@ -87,25 +40,15 @@ export interface SupabaseToolkitOptions<TUserCustomFields = {}, TOrganizationCus
|
|
|
87
40
|
* customFields: {
|
|
88
41
|
* customSchema: z.object({
|
|
89
42
|
* 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()
|
|
43
|
+
* lastName: z.string()
|
|
101
44
|
* })
|
|
102
45
|
* }
|
|
103
46
|
* },
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* }
|
|
47
|
+
* useCaseHooks: {
|
|
48
|
+
* CreateUser: {
|
|
49
|
+
* onSuccess: async ({ stepResults }) => {
|
|
50
|
+
* await sendWelcomeEmail(stepResults.output.email);
|
|
51
|
+
* }
|
|
109
52
|
* }
|
|
110
53
|
* }
|
|
111
54
|
* });
|
|
@@ -113,18 +56,21 @@ export interface SupabaseToolkitOptions<TUserCustomFields = {}, TOrganizationCus
|
|
|
113
56
|
* app.listen(3000);
|
|
114
57
|
* ```
|
|
115
58
|
*/
|
|
116
|
-
export declare function createSupabaseExpressApp<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?:
|
|
59
|
+
export declare function createSupabaseExpressApp<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): Express;
|
|
117
60
|
/**
|
|
118
61
|
* Create an Express Router with Supabase defaults
|
|
119
62
|
*
|
|
120
63
|
* Use this when you want to integrate MultiTenantKit into an existing Express application.
|
|
121
64
|
* The router can be mounted at any path in your app.
|
|
122
65
|
*
|
|
66
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
67
|
+
* User-provided options take precedence over defaults.
|
|
68
|
+
*
|
|
123
69
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
124
70
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
125
71
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
126
72
|
*
|
|
127
|
-
* @param options -
|
|
73
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
128
74
|
* @returns Express Router with all MultiTenantKit routes
|
|
129
75
|
*
|
|
130
76
|
* @example
|
|
@@ -163,18 +109,21 @@ export declare function createSupabaseExpressApp<TUserCustomFields = {}, TOrgani
|
|
|
163
109
|
* });
|
|
164
110
|
* ```
|
|
165
111
|
*/
|
|
166
|
-
export declare function createSupabaseExpressRouter<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?:
|
|
112
|
+
export declare function createSupabaseExpressRouter<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): Router;
|
|
167
113
|
/**
|
|
168
114
|
* Create use cases with Supabase defaults
|
|
169
115
|
*
|
|
170
116
|
* Use this when you want to use MultiTenantKit use cases directly without Express.
|
|
171
117
|
* Useful for background jobs, CLI tools, or custom transport layers.
|
|
172
118
|
*
|
|
119
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
120
|
+
* User-provided options take precedence over defaults.
|
|
121
|
+
*
|
|
173
122
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
174
123
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
175
124
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
176
125
|
*
|
|
177
|
-
* @param options -
|
|
126
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
178
127
|
* @returns Configured use cases ready to execute
|
|
179
128
|
*
|
|
180
129
|
* @example
|
|
@@ -202,5 +151,5 @@ export declare function createSupabaseExpressRouter<TUserCustomFields = {}, TOrg
|
|
|
202
151
|
* });
|
|
203
152
|
* ```
|
|
204
153
|
*/
|
|
205
|
-
export declare function createSupabaseUseCases<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?:
|
|
154
|
+
export declare function createSupabaseUseCases<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): ReturnType<typeof createUseCases<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>>;
|
|
206
155
|
//# sourceMappingURL=supabase.d.ts.map
|
package/dist/supabase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAOA,OAAO,EAGH,cAAc,EACjB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAOA,OAAO,EAGH,cAAc,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAA0B,MAAM,kCAAkC,CAAC;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAqH/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAgB,wBAAwB,CAEpC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,cAAc,CACpB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,OAAO,CAwCT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,2BAA2B,CAEvC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,cAAc,CACpB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,MAAM,CAwCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,cAAc,CACpB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,UAAU,CACT,OAAO,cAAc,CACjB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CACJ,CA2BA"}
|
package/dist/supabase.js
CHANGED
|
@@ -6,109 +6,99 @@ import { buildExpressApp, buildExpressRouter } from '@multitenantkit/adapter-tra
|
|
|
6
6
|
import { buildHandlers } from '@multitenantkit/api-handlers';
|
|
7
7
|
import { createPostgresAdapters, createSystemAdapters, createUseCases } from '@multitenantkit/composition';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Merges user-provided ToolkitOptions with Supabase-specific defaults.
|
|
10
|
+
*
|
|
11
|
+
* Supabase defaults applied:
|
|
12
|
+
* - namingStrategy: 'snake_case'
|
|
13
|
+
* - users.database: { schema: 'auth', table: 'users' }
|
|
14
|
+
* - users.customFields.columnMapping: { externalId: 'id', username: 'email' }
|
|
15
|
+
* - users.customFields.customMapper: maps to/from raw_user_meta_data
|
|
16
|
+
* - organizations.database: { schema: 'public', table: 'organizations' }
|
|
17
|
+
* - organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }
|
|
18
|
+
*
|
|
19
|
+
* User-provided options take precedence over defaults.
|
|
11
20
|
*/
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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'
|
|
21
|
+
function applySupabaseDefaults(options) {
|
|
22
|
+
// Default Supabase customMapper for users (maps to raw_user_meta_data)
|
|
23
|
+
const supabaseUserMapper = {
|
|
24
|
+
toDb: (fields) => ({
|
|
25
|
+
raw_user_meta_data: {
|
|
26
|
+
sub: fields.id,
|
|
27
|
+
email: fields.email,
|
|
28
|
+
...fields,
|
|
29
|
+
email_verified: true,
|
|
30
|
+
phone_verified: false
|
|
86
31
|
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
32
|
+
}),
|
|
33
|
+
toDomain: (dbRow) => {
|
|
34
|
+
const metadata = dbRow.raw_user_meta_data || {};
|
|
35
|
+
// biome-ignore lint/correctness/noUnusedVariables: these fields are intentionally extracted to exclude them
|
|
36
|
+
const { sub, email_verified, phone_verified, ...customFields } = metadata;
|
|
37
|
+
return customFields;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Default Supabase columnMapping for users
|
|
41
|
+
const supabaseUserColumnMapping = {
|
|
42
|
+
externalId: 'id',
|
|
43
|
+
username: 'email'
|
|
44
|
+
};
|
|
45
|
+
// Build users config with Supabase defaults
|
|
46
|
+
const usersConfig = {
|
|
47
|
+
customFields: {
|
|
48
|
+
// User's customSchema if provided
|
|
49
|
+
...(options?.users?.customFields?.customSchema && {
|
|
50
|
+
customSchema: options.users.customFields.customSchema
|
|
51
|
+
}),
|
|
52
|
+
// Use user's columnMapping or Supabase default
|
|
53
|
+
columnMapping: options?.users?.customFields?.columnMapping ?? supabaseUserColumnMapping,
|
|
54
|
+
// Use user's customMapper or Supabase default (only if customSchema is provided)
|
|
55
|
+
...(options?.users?.customFields?.customSchema && {
|
|
56
|
+
customMapper: options?.users?.customFields?.customMapper ?? supabaseUserMapper
|
|
57
|
+
})
|
|
58
|
+
},
|
|
59
|
+
database: {
|
|
60
|
+
schema: options?.users?.database?.schema ?? 'auth',
|
|
61
|
+
table: options?.users?.database?.table ?? 'users',
|
|
62
|
+
...(options?.users?.database?.namingStrategy && {
|
|
63
|
+
namingStrategy: options.users.database.namingStrategy
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
// Build organizations config with Supabase defaults
|
|
68
|
+
const organizationsConfig = {
|
|
69
|
+
...(options?.organizations?.customFields && {
|
|
70
|
+
customFields: options.organizations.customFields
|
|
71
|
+
}),
|
|
72
|
+
database: {
|
|
73
|
+
schema: options?.organizations?.database?.schema ?? 'public',
|
|
74
|
+
table: options?.organizations?.database?.table ?? 'organizations',
|
|
75
|
+
...(options?.organizations?.database?.namingStrategy && {
|
|
76
|
+
namingStrategy: options.organizations.database.namingStrategy
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
// Build organization memberships config with Supabase defaults
|
|
81
|
+
const organizationMembershipsConfig = {
|
|
82
|
+
...(options?.organizationMemberships?.customFields && {
|
|
83
|
+
customFields: options.organizationMemberships.customFields
|
|
84
|
+
}),
|
|
85
|
+
database: {
|
|
86
|
+
schema: options?.organizationMemberships?.database?.schema ?? 'public',
|
|
87
|
+
table: options?.organizationMemberships?.database?.table ?? 'organization_memberships',
|
|
88
|
+
...(options?.organizationMemberships?.database?.namingStrategy && {
|
|
89
|
+
namingStrategy: options.organizationMemberships.database.namingStrategy
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
namingStrategy: options?.namingStrategy ?? 'snake_case',
|
|
95
|
+
users: usersConfig,
|
|
96
|
+
organizations: organizationsConfig,
|
|
97
|
+
organizationMemberships: organizationMembershipsConfig,
|
|
98
|
+
// Pass through other options as-is
|
|
99
|
+
...(options?.useCaseHooks && { useCaseHooks: options.useCaseHooks }),
|
|
100
|
+
...(options?.responseTransformers && { responseTransformers: options.responseTransformers })
|
|
101
|
+
};
|
|
112
102
|
}
|
|
113
103
|
/**
|
|
114
104
|
* Create a complete Express application with Supabase defaults
|
|
@@ -119,11 +109,14 @@ function buildSupabaseToolkitOptions(options) {
|
|
|
119
109
|
* - Pre-configured Supabase defaults (auth.users, raw_user_meta_data, etc.)
|
|
120
110
|
* - All MultiTenantKit routes and middleware
|
|
121
111
|
*
|
|
112
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
113
|
+
* User-provided options take precedence over defaults.
|
|
114
|
+
*
|
|
122
115
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
123
116
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
124
117
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
125
118
|
*
|
|
126
|
-
* @param options -
|
|
119
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
127
120
|
* @returns Express application ready to listen on a port
|
|
128
121
|
*
|
|
129
122
|
* @example
|
|
@@ -137,7 +130,7 @@ function buildSupabaseToolkitOptions(options) {
|
|
|
137
130
|
*
|
|
138
131
|
* @example
|
|
139
132
|
* ```typescript
|
|
140
|
-
* // With custom fields
|
|
133
|
+
* // With custom fields and hooks
|
|
141
134
|
* import { createSupabaseExpressApp } from '@multitenantkit/sdk';
|
|
142
135
|
* import { z } from 'zod';
|
|
143
136
|
*
|
|
@@ -146,25 +139,15 @@ function buildSupabaseToolkitOptions(options) {
|
|
|
146
139
|
* customFields: {
|
|
147
140
|
* customSchema: z.object({
|
|
148
141
|
* 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()
|
|
142
|
+
* lastName: z.string()
|
|
160
143
|
* })
|
|
161
144
|
* }
|
|
162
145
|
* },
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
* }
|
|
146
|
+
* useCaseHooks: {
|
|
147
|
+
* CreateUser: {
|
|
148
|
+
* onSuccess: async ({ stepResults }) => {
|
|
149
|
+
* await sendWelcomeEmail(stepResults.output.email);
|
|
150
|
+
* }
|
|
168
151
|
* }
|
|
169
152
|
* }
|
|
170
153
|
* });
|
|
@@ -173,7 +156,7 @@ function buildSupabaseToolkitOptions(options) {
|
|
|
173
156
|
* ```
|
|
174
157
|
*/
|
|
175
158
|
export function createSupabaseExpressApp(options) {
|
|
176
|
-
const toolkitOptions =
|
|
159
|
+
const toolkitOptions = applySupabaseDefaults(options);
|
|
177
160
|
// 1. Create persistence adapters (PostgreSQL)
|
|
178
161
|
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
179
162
|
// 2. Create system and metrics adapters
|
|
@@ -197,11 +180,14 @@ export function createSupabaseExpressApp(options) {
|
|
|
197
180
|
* Use this when you want to integrate MultiTenantKit into an existing Express application.
|
|
198
181
|
* The router can be mounted at any path in your app.
|
|
199
182
|
*
|
|
183
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
184
|
+
* User-provided options take precedence over defaults.
|
|
185
|
+
*
|
|
200
186
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
201
187
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
202
188
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
203
189
|
*
|
|
204
|
-
* @param options -
|
|
190
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
205
191
|
* @returns Express Router with all MultiTenantKit routes
|
|
206
192
|
*
|
|
207
193
|
* @example
|
|
@@ -241,7 +227,7 @@ export function createSupabaseExpressApp(options) {
|
|
|
241
227
|
* ```
|
|
242
228
|
*/
|
|
243
229
|
export function createSupabaseExpressRouter(options) {
|
|
244
|
-
const toolkitOptions =
|
|
230
|
+
const toolkitOptions = applySupabaseDefaults(options);
|
|
245
231
|
// 1. Create persistence adapters (PostgreSQL)
|
|
246
232
|
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
247
233
|
// 2. Create system and metrics adapters
|
|
@@ -265,11 +251,14 @@ export function createSupabaseExpressRouter(options) {
|
|
|
265
251
|
* Use this when you want to use MultiTenantKit use cases directly without Express.
|
|
266
252
|
* Useful for background jobs, CLI tools, or custom transport layers.
|
|
267
253
|
*
|
|
254
|
+
* Accepts standard ToolkitOptions and applies Supabase-specific defaults.
|
|
255
|
+
* User-provided options take precedence over defaults.
|
|
256
|
+
*
|
|
268
257
|
* @template TUserCustomFields - Custom fields schema for Users
|
|
269
258
|
* @template TOrganizationCustomFields - Custom fields schema for Organizations
|
|
270
259
|
* @template TOrganizationMembershipCustomFields - Custom fields schema for Organization Memberships
|
|
271
260
|
*
|
|
272
|
-
* @param options -
|
|
261
|
+
* @param options - ToolkitOptions with Supabase defaults applied automatically
|
|
273
262
|
* @returns Configured use cases ready to execute
|
|
274
263
|
*
|
|
275
264
|
* @example
|
|
@@ -298,7 +287,7 @@ export function createSupabaseExpressRouter(options) {
|
|
|
298
287
|
* ```
|
|
299
288
|
*/
|
|
300
289
|
export function createSupabaseUseCases(options) {
|
|
301
|
-
const toolkitOptions =
|
|
290
|
+
const toolkitOptions = applySupabaseDefaults(options);
|
|
302
291
|
// 1. Create persistence adapters (PostgreSQL)
|
|
303
292
|
const persistenceAdapters = createPostgresAdapters(undefined, toolkitOptions);
|
|
304
293
|
// 2. Create system and metrics adapters
|
package/dist/supabase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,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,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACjB,MAAM,6BAA6B,CAAC;
|
|
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.4",
|
|
4
4
|
"description": "Complete SDK for building multi-tenant SaaS applications - includes all adapters and options",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"multitenantkit",
|
|
@@ -63,8 +63,8 @@
|
|
|
63
63
|
"@multitenantkit/adapter-transport-express": "^0.1.1",
|
|
64
64
|
"@multitenantkit/api-handlers": "^0.1.2",
|
|
65
65
|
"@multitenantkit/api-contracts": "^0.1.1",
|
|
66
|
-
"@multitenantkit/domain-contracts": "^0.1.
|
|
67
|
-
"@multitenantkit/domain": "^0.1.
|
|
66
|
+
"@multitenantkit/domain-contracts": "^0.1.2",
|
|
67
|
+
"@multitenantkit/domain": "^0.1.3",
|
|
68
68
|
"@multitenantkit/composition": "^0.1.2"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|