@multitenantkit/sdk-supabase 0.2.2 → 0.2.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.
@@ -3,33 +3,70 @@
3
3
  *
4
4
  * Creates complete adapters bundle for Supabase Edge Functions.
5
5
  * Uses Web Crypto API for UUID generation (Deno compatible).
6
+ * Applies Supabase-specific defaults automatically.
6
7
  */
7
8
  import type { Adapters, ToolkitOptions } from '@multitenantkit/domain-contracts';
8
9
  import type { SupabaseClient } from '@supabase/supabase-js';
10
+ /**
11
+ * Merges user-provided ToolkitOptions with Supabase-specific defaults.
12
+ *
13
+ * Supabase defaults applied:
14
+ * - namingStrategy: 'snake_case'
15
+ * - users.database: { schema: 'auth', table: 'users' }
16
+ * - users.customFields.columnMapping: { externalId: 'id', username: 'email' }
17
+ * - users.customFields.customMapper: maps to/from raw_user_meta_data
18
+ * - organizations.database: { schema: 'public', table: 'organizations' }
19
+ * - organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }
20
+ *
21
+ * User-provided options take precedence over defaults.
22
+ */
23
+ export declare function applySupabaseDefaults<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>(options?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
9
24
  /**
10
25
  * Options for creating Supabase adapters
11
26
  */
12
27
  export interface CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
13
28
  /** Supabase client instance */
14
29
  client: SupabaseClient;
15
- /** Toolkit options for custom fields and database configuration */
30
+ /**
31
+ * Toolkit options for custom fields and database configuration.
32
+ * Supabase defaults are applied automatically (auth.users, snake_case, etc.)
33
+ * Your options take precedence over defaults.
34
+ */
16
35
  toolkitOptions?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
17
36
  }
37
+ /**
38
+ * Result of createSupabaseAdapters including adapters and resolved toolkitOptions
39
+ */
40
+ export interface SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
41
+ /** The adapters bundle (persistence + system) */
42
+ adapters: Adapters<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
43
+ /** The toolkit options with Supabase defaults applied */
44
+ toolkitOptions: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
45
+ }
18
46
  /**
19
47
  * Create complete Supabase adapters bundle (persistence + system)
20
48
  *
21
49
  * This is the main factory function for Supabase/Deno environments.
22
50
  * It creates all necessary adapters with NO Node.js dependencies.
23
51
  *
52
+ * **Supabase defaults applied automatically:**
53
+ * - `namingStrategy: 'snake_case'`
54
+ * - `users.database: { schema: 'auth', table: 'users' }`
55
+ * - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
56
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
57
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
58
+ *
59
+ * Your options take precedence over defaults.
60
+ *
24
61
  * @example
25
62
  * ```typescript
26
63
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
27
64
  * import { createClient } from '@supabase/supabase-js';
28
65
  *
29
66
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
30
- * const adapters = createSupabaseAdapters({ client });
31
- * const useCases = createUseCases(adapters);
67
+ * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
68
+ * const useCases = createUseCases(adapters, toolkitOptions);
32
69
  * ```
33
70
  */
34
- export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): Adapters<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
71
+ export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
35
72
  //# sourceMappingURL=AdapterFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACR,QAAQ,EAIR,cAAc,EACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAY5D;;GAEG;AACH,MAAM,WAAW,6BAA6B,CAC1C,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC,+BAA+B;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,mEAAmE;IACnE,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;CACL;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,EAAE,6BAA6B,CAClC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,QAAQ,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,mCAAmC,CAAC,CAwB7F"}
1
+ {"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACR,QAAQ,EAIR,cAAc,EAEjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAY5D;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACjC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,EAEnC,OAAO,CAAC,EAAE,cAAc,CACpB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,cAAc,CACb,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAoFA;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B,CAC1C,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC,+BAA+B;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CACnC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC,iDAAiD;IACjD,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;IACF,yDAAyD;IACzD,cAAc,EAAE,cAAc,CAC1B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;CACL;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,EAAE,6BAA6B,CAClC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,sBAAsB,CACrB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAqCA"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Creates complete adapters bundle for Supabase Edge Functions.
5
5
  * Uses Web Crypto API for UUID generation (Deno compatible).
6
+ * Applies Supabase-specific defaults automatically.
6
7
  */
7
8
  import { createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
8
9
  import { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
@@ -15,24 +16,128 @@ class WebClock {
15
16
  return new Date();
16
17
  }
17
18
  }
19
+ /**
20
+ * Merges user-provided ToolkitOptions with Supabase-specific defaults.
21
+ *
22
+ * Supabase defaults applied:
23
+ * - namingStrategy: 'snake_case'
24
+ * - users.database: { schema: 'auth', table: 'users' }
25
+ * - users.customFields.columnMapping: { externalId: 'id', username: 'email' }
26
+ * - users.customFields.customMapper: maps to/from raw_user_meta_data
27
+ * - organizations.database: { schema: 'public', table: 'organizations' }
28
+ * - organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }
29
+ *
30
+ * User-provided options take precedence over defaults.
31
+ */
32
+ export function applySupabaseDefaults(options) {
33
+ // Default Supabase customMapper for users (maps to raw_user_meta_data)
34
+ const supabaseUserMapper = {
35
+ toDb: (fields) => ({
36
+ raw_user_meta_data: {
37
+ ...fields,
38
+ email_verified: true,
39
+ phone_verified: false
40
+ }
41
+ }),
42
+ toDomain: (dbRow) => {
43
+ const metadata = dbRow.raw_user_meta_data || {};
44
+ // biome-ignore lint/correctness/noUnusedVariables: intentionally extracted to exclude
45
+ const { sub, email_verified, phone_verified, ...customFields } = metadata;
46
+ return customFields;
47
+ }
48
+ };
49
+ // Default Supabase columnMapping for users
50
+ const supabaseUserColumnMapping = {
51
+ externalId: 'id',
52
+ username: 'email'
53
+ };
54
+ // Build users config with Supabase defaults
55
+ const usersConfig = {
56
+ customFields: {
57
+ // User's customSchema if provided
58
+ ...(options?.users?.customFields?.customSchema && {
59
+ customSchema: options.users.customFields.customSchema
60
+ }),
61
+ // Use user's columnMapping or Supabase default
62
+ columnMapping: options?.users?.customFields?.columnMapping ?? supabaseUserColumnMapping,
63
+ // Use user's customMapper or Supabase default (only if customSchema is provided)
64
+ ...(options?.users?.customFields?.customSchema && {
65
+ customMapper: options?.users?.customFields?.customMapper ?? supabaseUserMapper
66
+ })
67
+ },
68
+ database: {
69
+ schema: options?.users?.database?.schema ?? 'auth',
70
+ table: options?.users?.database?.table ?? 'users',
71
+ ...(options?.users?.database?.namingStrategy && {
72
+ namingStrategy: options.users.database.namingStrategy
73
+ })
74
+ }
75
+ };
76
+ // Build organizations config with Supabase defaults
77
+ const organizationsConfig = {
78
+ ...(options?.organizations?.customFields && {
79
+ customFields: options.organizations.customFields
80
+ }),
81
+ database: {
82
+ schema: options?.organizations?.database?.schema ?? 'public',
83
+ table: options?.organizations?.database?.table ?? 'organizations',
84
+ ...(options?.organizations?.database?.namingStrategy && {
85
+ namingStrategy: options.organizations.database.namingStrategy
86
+ })
87
+ }
88
+ };
89
+ // Build organization memberships config with Supabase defaults
90
+ const organizationMembershipsConfig = {
91
+ ...(options?.organizationMemberships?.customFields && {
92
+ customFields: options.organizationMemberships.customFields
93
+ }),
94
+ database: {
95
+ schema: options?.organizationMemberships?.database?.schema ?? 'public',
96
+ table: options?.organizationMemberships?.database?.table ?? 'organization_memberships',
97
+ ...(options?.organizationMemberships?.database?.namingStrategy && {
98
+ namingStrategy: options.organizationMemberships.database.namingStrategy
99
+ })
100
+ }
101
+ };
102
+ return {
103
+ namingStrategy: options?.namingStrategy ?? 'snake_case',
104
+ users: usersConfig,
105
+ organizations: organizationsConfig,
106
+ organizationMemberships: organizationMembershipsConfig,
107
+ // Pass through other options as-is
108
+ ...(options?.useCaseHooks && { useCaseHooks: options.useCaseHooks }),
109
+ ...(options?.responseTransformers && { responseTransformers: options.responseTransformers })
110
+ };
111
+ }
18
112
  /**
19
113
  * Create complete Supabase adapters bundle (persistence + system)
20
114
  *
21
115
  * This is the main factory function for Supabase/Deno environments.
22
116
  * It creates all necessary adapters with NO Node.js dependencies.
23
117
  *
118
+ * **Supabase defaults applied automatically:**
119
+ * - `namingStrategy: 'snake_case'`
120
+ * - `users.database: { schema: 'auth', table: 'users' }`
121
+ * - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
122
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
123
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
124
+ *
125
+ * Your options take precedence over defaults.
126
+ *
24
127
  * @example
25
128
  * ```typescript
26
129
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
27
130
  * import { createClient } from '@supabase/supabase-js';
28
131
  *
29
132
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
30
- * const adapters = createSupabaseAdapters({ client });
31
- * const useCases = createUseCases(adapters);
133
+ * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
134
+ * const useCases = createUseCases(adapters, toolkitOptions);
32
135
  * ```
33
136
  */
34
137
  export function createSupabaseAdapters(options) {
35
- const { client, toolkitOptions } = options;
138
+ const { client, toolkitOptions: userOptions } = options;
139
+ // Apply Supabase defaults to toolkit options
140
+ const toolkitOptions = applySupabaseDefaults(userOptions);
36
141
  // Create persistence adapters using Supabase repositories
37
142
  const persistence = createSupabaseRepositories({ client, toolkitOptions });
38
143
  // Create system adapters using Web APIs (Deno compatible)
@@ -40,9 +145,10 @@ export function createSupabaseAdapters(options) {
40
145
  clock: new WebClock(),
41
146
  uuid: new WebCryptoUuid()
42
147
  };
43
- return {
148
+ const adapters = {
44
149
  persistence: persistence,
45
150
  system
46
151
  };
152
+ return { adapters, toolkitOptions };
47
153
  }
48
154
  //# sourceMappingURL=AdapterFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAU1E;;;GAGG;AACH,MAAM,QAAQ;IACV,GAAG;QACC,OAAO,IAAI,IAAI,EAAE,CAAC;IACtB,CAAC;CACJ;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CAQlC,OAIC;IAED,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE3C,0DAA0D;IAC1D,MAAM,WAAW,GAAG,0BAA0B,CAI5C,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,MAAM,MAAM,GAAmB;QAC3B,KAAK,EAAE,IAAI,QAAQ,EAAE;QACrB,IAAI,EAAE,IAAI,aAAa,EAAE;KAC5B,CAAC;IAEF,OAAO;QACH,WAAW,EAAE,WAIZ;QACD,MAAM;KACT,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAW1E;;;GAGG;AACH,MAAM,QAAQ;IACV,GAAG;QACC,OAAO,IAAI,IAAI,EAAE,CAAC;IACtB,CAAC;CACJ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAKjC,OAIC;IAMD,uEAAuE;IACvE,MAAM,kBAAkB,GAAG;QACvB,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;YACxB,kBAAkB,EAAE;gBAChB,GAAI,MAAkC;gBACtC,cAAc,EAAE,IAAI;gBACpB,cAAc,EAAE,KAAK;aACxB;SACJ,CAAC;QACF,QAAQ,EAAE,CAAC,KAA8B,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAI,KAAK,CAAC,kBAA8C,IAAI,EAAE,CAAC;YAC7E,sFAAsF;YACtF,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC;YAC1E,OAAO,YAAY,CAAC;QACxB,CAAC;KACJ,CAAC;IAEF,2CAA2C;IAC3C,MAAM,yBAAyB,GAAG;QAC9B,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,OAAO;KACpB,CAAC;IAEF,4CAA4C;IAC5C,MAAM,WAAW,GAAG;QAChB,YAAY,EAAE;YACV,kCAAkC;YAClC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,IAAI;gBAC9C,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY;aACxD,CAAC;YACF,+CAA+C;YAC/C,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,IAAI,yBAAyB;YACvF,iFAAiF;YACjF,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,IAAI;gBAC9C,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,IAAI,kBAAkB;aACjF,CAAC;SACwC;QAC9C,QAAQ,EAAE;YACN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,MAAM;YAClD,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,OAAO;YACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,IAAI;gBAC5C,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc;aACxD,CAAC;SACL;KACJ,CAAC;IAEF,oDAAoD;IACpD,MAAM,mBAAmB,GAAG;QACxB,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,IAAI;YACxC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,YAAY;SACnD,CAAC;QACF,QAAQ,EAAE;YACN,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,IAAI,QAAQ;YAC5D,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,IAAI,eAAe;YACjE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,IAAI;gBACpD,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc;aAChE,CAAC;SACL;KACJ,CAAC;IAEF,+DAA+D;IAC/D,MAAM,6BAA6B,GAAG;QAClC,GAAG,CAAC,OAAO,EAAE,uBAAuB,EAAE,YAAY,IAAI;YAClD,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,YAAY;SAC7D,CAAC;QACF,QAAQ,EAAE;YACN,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,IAAI,QAAQ;YACtE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,IAAI,0BAA0B;YACtF,GAAG,CAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,cAAc,IAAI;gBAC9D,cAAc,EAAE,OAAO,CAAC,uBAAuB,CAAC,QAAQ,CAAC,cAAc;aAC1E,CAAC;SACL;KACJ,CAAC;IAEF,OAAO;QACH,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,YAAY;QACvD,KAAK,EAAE,WAAW;QAClB,aAAa,EAAE,mBAAmB;QAClC,uBAAuB,EAAE,6BAA6B;QACtD,mCAAmC;QACnC,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,EAAE,oBAAoB,IAAI,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;KAC/F,CAAC;AACN,CAAC;AA8CD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,sBAAsB,CAQlC,OAIC;IAMD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAExD,6CAA6C;IAC7C,MAAM,cAAc,GAAG,qBAAqB,CAI1C,WAAW,CAAC,CAAC;IAEf,0DAA0D;IAC1D,MAAM,WAAW,GAAG,0BAA0B,CAI5C,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,MAAM,MAAM,GAAmB;QAC3B,KAAK,EAAE,IAAI,QAAQ,EAAE;QACrB,IAAI,EAAE,IAAI,aAAa,EAAE;KAC5B,CAAC;IAEF,MAAM,QAAQ,GAIV;QACA,WAAW,EAAE,WAIZ;QACD,MAAM;KACT,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,18 +6,25 @@
6
6
  * This SDK provides everything you need to run MultiTenantKit in Supabase Edge Functions
7
7
  * without any Node.js dependencies.
8
8
  *
9
+ * **Supabase defaults applied automatically:**
10
+ * - `namingStrategy: 'snake_case'`
11
+ * - `users.database: { schema: 'auth', table: 'users' }`
12
+ * - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
13
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
14
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
15
+ *
9
16
  * @example
10
17
  * ```typescript
11
18
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
12
19
  * import { createClient } from '@supabase/supabase-js';
13
20
  *
14
21
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
15
- * const adapters = createSupabaseAdapters({ client });
16
- * const useCases = createUseCases(adapters);
22
+ * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
23
+ * const useCases = createUseCases(adapters, toolkitOptions);
17
24
  * ```
18
25
  */
19
26
  export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories, type SupabaseClient, type SupabaseConfig, type SupabaseFactoryOptions, type SupabaseRepositoryBundle } from '@multitenantkit/adapter-persistence-supabase';
20
27
  export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
21
- export { type CreateSupabaseAdaptersOptions, createSupabaseAdapters } from './factories/AdapterFactory';
28
+ export { applySupabaseDefaults, type CreateSupabaseAdaptersOptions, createSupabaseAdapters, type SupabaseAdaptersResult } from './factories/AdapterFactory';
22
29
  export { createUseCases } from './factories/UseCaseFactory';
23
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAChC,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,OAAO,EACH,KAAK,6BAA6B,EAClC,sBAAsB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAChC,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,OAAO,EACH,qBAAqB,EACrB,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,KAAK,sBAAsB,EAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -6,21 +6,28 @@
6
6
  * This SDK provides everything you need to run MultiTenantKit in Supabase Edge Functions
7
7
  * without any Node.js dependencies.
8
8
  *
9
+ * **Supabase defaults applied automatically:**
10
+ * - `namingStrategy: 'snake_case'`
11
+ * - `users.database: { schema: 'auth', table: 'users' }`
12
+ * - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
13
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
14
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
15
+ *
9
16
  * @example
10
17
  * ```typescript
11
18
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
12
19
  * import { createClient } from '@supabase/supabase-js';
13
20
  *
14
21
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
15
- * const adapters = createSupabaseAdapters({ client });
16
- * const useCases = createUseCases(adapters);
22
+ * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
23
+ * const useCases = createUseCases(adapters, toolkitOptions);
17
24
  * ```
18
25
  */
19
26
  // Re-export persistence adapter
20
27
  export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
21
28
  // Re-export system adapter
22
29
  export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
23
- // Export factories
24
- export { createSupabaseAdapters } from './factories/AdapterFactory';
30
+ // Export factories and utilities
31
+ export { applySupabaseDefaults, createSupabaseAdapters } from './factories/AdapterFactory';
25
32
  export { createUseCases } from './factories/UseCaseFactory';
26
33
  //# 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;;;;;;;;;;;;;;;;;GAiBG;AAEH,gCAAgC;AAChC,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAK7B,MAAM,8CAA8C,CAAC;AAEtD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,mBAAmB;AACnB,OAAO,EAEH,sBAAsB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,gCAAgC;AAChC,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAK7B,MAAM,8CAA8C,CAAC;AAEtD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,iCAAiC;AACjC,OAAO,EACH,qBAAqB,EAErB,sBAAsB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multitenantkit/sdk-supabase",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "type": "module",
5
5
  "description": "MultiTenantKit SDK for Supabase Edge Functions (Deno compatible)",
6
6
  "keywords": [
@@ -46,10 +46,10 @@
46
46
  "type-check": "tsc --noEmit"
47
47
  },
48
48
  "dependencies": {
49
- "@multitenantkit/domain": "^0.2.2",
49
+ "@multitenantkit/domain": "^0.2.3",
50
50
  "@multitenantkit/domain-contracts": "^0.2.0",
51
- "@multitenantkit/adapter-persistence-supabase": "^0.2.2",
52
- "@multitenantkit/adapter-system-web-crypto": "^0.2.2",
51
+ "@multitenantkit/adapter-persistence-supabase": "^0.2.3",
52
+ "@multitenantkit/adapter-system-web-crypto": "^0.2.3",
53
53
  "@supabase/supabase-js": "^2.39.0"
54
54
  },
55
55
  "devDependencies": {