@multitenantkit/sdk-supabase 0.2.8 → 0.2.10

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.
@@ -6,7 +6,7 @@
6
6
  * Applies Supabase-specific defaults automatically.
7
7
  */
8
8
  import type { Adapters, ToolkitOptions } from '@multitenantkit/domain-contracts';
9
- import type { SupabaseClient } from '@supabase/supabase-js';
9
+ import { type SupabaseClient } from '@supabase/supabase-js';
10
10
  /**
11
11
  * Merges user-provided ToolkitOptions with Supabase-specific defaults.
12
12
  *
@@ -29,8 +29,13 @@ export declare function applySupabaseDefaults<TUserCustomFields, TOrganizationCu
29
29
  * Options for creating Supabase adapters
30
30
  */
31
31
  export interface CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
32
- /** Supabase client instance */
33
- client: SupabaseClient;
32
+ /**
33
+ * Supabase client instance.
34
+ * If not provided, one will be created automatically using environment variables:
35
+ * - SUPABASE_URL or PROJECT_URL
36
+ * - SUPABASE_SERVICE_ROLE_KEY or SERVICE_ROLE_KEY
37
+ */
38
+ client?: SupabaseClient;
34
39
  /**
35
40
  * Toolkit options for custom fields and database configuration.
36
41
  * Supabase defaults are applied automatically (auth.users, snake_case, etc.)
@@ -64,13 +69,17 @@ export interface SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFi
64
69
  *
65
70
  * @example
66
71
  * ```typescript
72
+ * // Simplest usage - auto-creates client from env vars
67
73
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
68
- * import { createClient } from '@supabase/supabase-js';
69
74
  *
75
+ * const { adapters, toolkitOptions } = createSupabaseAdapters();
76
+ * const useCases = createUseCases(adapters, toolkitOptions);
77
+ *
78
+ * // Or provide your own client
79
+ * import { createClient } from '@supabase/supabase-js';
70
80
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
71
81
  * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
72
- * const useCases = createUseCases(adapters, toolkitOptions);
73
82
  * ```
74
83
  */
75
- export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
84
+ export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
76
85
  //# sourceMappingURL=AdapterFactory.d.ts.map
@@ -1 +1 @@
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;;;;;;;;;;;;;;;;GAgBG;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,CAoEA;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"}
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,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAoC1E;;;;;;;;;;;;;;;;GAgBG;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,CAoEA;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B,CAC1C,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,6BAA6B,CACnC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,sBAAsB,CACrB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAyDA"}
@@ -7,6 +7,21 @@
7
7
  */
8
8
  import { createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
9
9
  import { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
10
+ import { createClient } from '@supabase/supabase-js';
11
+ /**
12
+ * Get environment variable with runtime detection (Node.js or Deno)
13
+ */
14
+ function getEnvVar(key) {
15
+ // Deno runtime (Supabase Edge Functions)
16
+ if (typeof Deno !== 'undefined') {
17
+ return Deno.env.get(key);
18
+ }
19
+ // Node.js runtime
20
+ if (typeof process !== 'undefined' && process.env) {
21
+ return process.env[key];
22
+ }
23
+ return undefined;
24
+ }
10
25
  /**
11
26
  * Simple clock implementation using standard Date API
12
27
  * Deno compatible - no Node.js dependencies
@@ -115,16 +130,35 @@ export function applySupabaseDefaults(options) {
115
130
  *
116
131
  * @example
117
132
  * ```typescript
133
+ * // Simplest usage - auto-creates client from env vars
118
134
  * import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
119
- * import { createClient } from '@supabase/supabase-js';
120
135
  *
136
+ * const { adapters, toolkitOptions } = createSupabaseAdapters();
137
+ * const useCases = createUseCases(adapters, toolkitOptions);
138
+ *
139
+ * // Or provide your own client
140
+ * import { createClient } from '@supabase/supabase-js';
121
141
  * const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
122
142
  * const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
123
- * const useCases = createUseCases(adapters, toolkitOptions);
124
143
  * ```
125
144
  */
126
145
  export function createSupabaseAdapters(options) {
127
- const { client, toolkitOptions: userOptions } = options;
146
+ const { client: providedClient, toolkitOptions: userOptions } = options ?? {};
147
+ // Create or use provided Supabase client
148
+ let client;
149
+ if (providedClient) {
150
+ client = providedClient;
151
+ }
152
+ else {
153
+ // Auto-create client from environment variables
154
+ const supabaseUrl = getEnvVar('SUPABASE_URL') ?? getEnvVar('PROJECT_URL');
155
+ const supabaseServiceKey = getEnvVar('SUPABASE_SERVICE_ROLE_KEY') ?? getEnvVar('SERVICE_ROLE_KEY');
156
+ if (!supabaseUrl || !supabaseServiceKey) {
157
+ throw new Error('Missing Supabase credentials. Either provide a client or set environment variables: ' +
158
+ 'SUPABASE_URL/PROJECT_URL and SUPABASE_SERVICE_ROLE_KEY/SERVICE_ROLE_KEY');
159
+ }
160
+ client = createClient(supabaseUrl, supabaseServiceKey);
161
+ }
128
162
  // Apply Supabase defaults to toolkit options
129
163
  const toolkitOptions = applySupabaseDefaults(userOptions);
130
164
  // Create persistence adapters using Supabase repositories
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Supabase Edge Handler Factory
3
+ *
4
+ * Creates a complete Edge Function handler with a single function call.
5
+ * All configuration is optional - uses sensible defaults.
6
+ */
7
+ import type { ToolkitOptions } from '@multitenantkit/domain-contracts';
8
+ /**
9
+ * CORS configuration options for Edge Functions
10
+ */
11
+ export interface CorsOptions {
12
+ /** Allowed origins - can be '*' for all, a single origin, or array of origins */
13
+ allowOrigin: string | string[];
14
+ /** Headers that can be used in the actual request */
15
+ allowHeaders: string[];
16
+ /** HTTP methods allowed when accessing the resource */
17
+ allowMethods: string[];
18
+ /** How long (in seconds) the results of a preflight request can be cached */
19
+ maxAge?: number;
20
+ }
21
+ /**
22
+ * Edge Function configuration options
23
+ */
24
+ export interface EdgeOptions {
25
+ /**
26
+ * Base path prefix for all routes.
27
+ * @default '/api'
28
+ */
29
+ basePath?: string;
30
+ /**
31
+ * CORS configuration.
32
+ * @default Allows all origins with common headers
33
+ */
34
+ cors?: CorsOptions;
35
+ /**
36
+ * Enable debug logging.
37
+ * @default false
38
+ */
39
+ debug?: boolean;
40
+ }
41
+ /**
42
+ * Options for createSupabaseEdgeHandler
43
+ */
44
+ export interface CreateSupabaseEdgeHandlerOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
45
+ /**
46
+ * Toolkit options for custom fields and configuration.
47
+ * Supabase defaults are applied automatically.
48
+ */
49
+ toolkitOptions?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
50
+ /**
51
+ * Edge Function configuration (basePath, cors, debug).
52
+ * @default { basePath: '/api' }
53
+ */
54
+ edgeOptions?: EdgeOptions;
55
+ }
56
+ /**
57
+ * Create a complete Supabase Edge Function handler with a single call.
58
+ *
59
+ * This is the simplest way to set up MultiTenantKit for Supabase Edge Functions.
60
+ * Everything is auto-configured from environment variables.
61
+ *
62
+ * **Environment variables required:**
63
+ * - `SUPABASE_URL` or `PROJECT_URL`
64
+ * - `SUPABASE_SERVICE_ROLE_KEY` or `SERVICE_ROLE_KEY`
65
+ *
66
+ * **Supabase defaults applied automatically:**
67
+ * - `namingStrategy: 'snake_case'`
68
+ * - `users.database: { schema: 'public', table: 'profiles' }`
69
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
70
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Simplest usage - zero configuration!
75
+ * import { createSupabaseEdgeHandler } from '@multitenantkit/sdk-supabase';
76
+ *
77
+ * const handler = createSupabaseEdgeHandler();
78
+ * Deno.serve(handler);
79
+ *
80
+ * // With custom fields
81
+ * const handler = createSupabaseEdgeHandler({
82
+ * toolkitOptions: {
83
+ * users: { customFields: { customSchema: userSchema } }
84
+ * }
85
+ * });
86
+ *
87
+ * // With edge options
88
+ * const handler = createSupabaseEdgeHandler({
89
+ * edgeOptions: {
90
+ * basePath: '/multitenantkit',
91
+ * cors: { allowOrigin: 'https://myapp.com', ... }
92
+ * }
93
+ * });
94
+ * ```
95
+ */
96
+ export declare function createSupabaseEdgeHandler<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options?: CreateSupabaseEdgeHandlerOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): (request: Request) => Promise<Response>;
97
+ //# sourceMappingURL=EdgeHandlerFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgeHandlerFactory.d.ts","sourceRoot":"","sources":["../../src/factories/EdgeHandlerFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,iFAAiF;IACjF,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC,CAC7C,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,yBAAyB,CAErC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,CAAC,EAAE,gCAAgC,CACtC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA2BzC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Supabase Edge Handler Factory
3
+ *
4
+ * Creates a complete Edge Function handler with a single function call.
5
+ * All configuration is optional - uses sensible defaults.
6
+ */
7
+ import { createSupabaseAuthService } from '@multitenantkit/adapter-auth-supabase';
8
+ import { buildEdgeFunction } from '@multitenantkit/adapter-transport-supabase-edge';
9
+ import { buildHandlers } from '@multitenantkit/api-handlers';
10
+ import { createSupabaseAdapters } from './AdapterFactory';
11
+ import { createUseCases } from './UseCaseFactory';
12
+ /**
13
+ * Default CORS configuration for Edge Functions
14
+ */
15
+ const DEFAULT_CORS = {
16
+ allowOrigin: '*',
17
+ allowHeaders: ['authorization', 'x-client-info', 'apikey', 'content-type', 'x-request-id'],
18
+ allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']
19
+ };
20
+ /**
21
+ * Create a complete Supabase Edge Function handler with a single call.
22
+ *
23
+ * This is the simplest way to set up MultiTenantKit for Supabase Edge Functions.
24
+ * Everything is auto-configured from environment variables.
25
+ *
26
+ * **Environment variables required:**
27
+ * - `SUPABASE_URL` or `PROJECT_URL`
28
+ * - `SUPABASE_SERVICE_ROLE_KEY` or `SERVICE_ROLE_KEY`
29
+ *
30
+ * **Supabase defaults applied automatically:**
31
+ * - `namingStrategy: 'snake_case'`
32
+ * - `users.database: { schema: 'public', table: 'profiles' }`
33
+ * - `organizations.database: { schema: 'public', table: 'organizations' }`
34
+ * - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // Simplest usage - zero configuration!
39
+ * import { createSupabaseEdgeHandler } from '@multitenantkit/sdk-supabase';
40
+ *
41
+ * const handler = createSupabaseEdgeHandler();
42
+ * Deno.serve(handler);
43
+ *
44
+ * // With custom fields
45
+ * const handler = createSupabaseEdgeHandler({
46
+ * toolkitOptions: {
47
+ * users: { customFields: { customSchema: userSchema } }
48
+ * }
49
+ * });
50
+ *
51
+ * // With edge options
52
+ * const handler = createSupabaseEdgeHandler({
53
+ * edgeOptions: {
54
+ * basePath: '/multitenantkit',
55
+ * cors: { allowOrigin: 'https://myapp.com', ... }
56
+ * }
57
+ * });
58
+ * ```
59
+ */
60
+ export function createSupabaseEdgeHandler(options) {
61
+ const { toolkitOptions: userToolkitOptions, edgeOptions } = options ?? {};
62
+ // 1. Create adapters (auto-creates Supabase client from env vars)
63
+ const { adapters, toolkitOptions } = createSupabaseAdapters({ toolkitOptions: userToolkitOptions });
64
+ // 2. Create use cases
65
+ const useCases = createUseCases(adapters, toolkitOptions);
66
+ // 3. Build HTTP handlers
67
+ const handlers = buildHandlers(useCases, toolkitOptions);
68
+ // 4. Create auth service (auto-detects runtime)
69
+ const authService = createSupabaseAuthService();
70
+ // 5. Build Edge Function handler with defaults
71
+ const handler = buildEdgeFunction(handlers, authService, {
72
+ basePath: edgeOptions?.basePath ?? '/api',
73
+ cors: edgeOptions?.cors ?? DEFAULT_CORS,
74
+ debug: edgeOptions?.debug ?? false
75
+ });
76
+ return handler;
77
+ }
78
+ //# sourceMappingURL=EdgeHandlerFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgeHandlerFactory.js","sourceRoot":"","sources":["../../src/factories/EdgeHandlerFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA6DlD;;GAEG;AACH,MAAM,YAAY,GAAgB;IAC9B,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC;IAC1F,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;CACrE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,yBAAyB,CAQrC,OAIC;IAED,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE1E,kEAAkE;IAClE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,sBAAsB,CAIzD,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAE1C,sBAAsB;IACtB,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAE1D,yBAAyB;IACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEzD,gDAAgD;IAChD,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAEhD,+CAA+C;IAC/C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE;QACrD,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,MAAM;QACzC,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,YAAY;QACvC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,KAAK;KACrC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -28,8 +28,12 @@
28
28
  * const useCases = createUseCases(adapters, toolkitOptions);
29
29
  * ```
30
30
  */
31
+ export { createSupabaseAuthService, type SupabaseAuthConfig, type SupabaseAuthEnvironmentVariables, type SupabaseAuthInput, SupabaseAuthService } from '@multitenantkit/adapter-auth-supabase';
31
32
  export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories, type SupabaseClient, type SupabaseConfig, type SupabaseFactoryOptions, type SupabaseRepositoryBundle } from '@multitenantkit/adapter-persistence-supabase';
32
33
  export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
34
+ export { buildEdgeFunction } from '@multitenantkit/adapter-transport-supabase-edge';
35
+ export { buildHandlers } from '@multitenantkit/api-handlers';
33
36
  export { applySupabaseDefaults, type CreateSupabaseAdaptersOptions, createSupabaseAdapters, type SupabaseAdaptersResult } from './factories/AdapterFactory';
37
+ export { type CorsOptions, type CreateSupabaseEdgeHandlerOptions, createSupabaseEdgeHandler, type EdgeOptions } from './factories/EdgeHandlerFactory';
34
38
  export { createUseCases } from './factories/UseCaseFactory';
35
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EACH,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gCAAgC,EACrC,KAAK,iBAAiB,EACtB,mBAAmB,EACtB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAChC,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EACH,qBAAqB,EACrB,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,KAAK,sBAAsB,EAC9B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,gCAAgC,EACrC,yBAAyB,EACzB,KAAK,WAAW,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -28,11 +28,19 @@
28
28
  * const useCases = createUseCases(adapters, toolkitOptions);
29
29
  * ```
30
30
  */
31
+ // Re-export auth adapter (runtime-agnostic: works in both Node.js and Deno)
32
+ export { createSupabaseAuthService, SupabaseAuthService } from '@multitenantkit/adapter-auth-supabase';
31
33
  // Re-export persistence adapter
32
34
  export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
33
35
  // Re-export system adapter
34
36
  export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
37
+ // Re-export Edge Functions transport
38
+ export { buildEdgeFunction } from '@multitenantkit/adapter-transport-supabase-edge';
39
+ // Re-export API handlers
40
+ export { buildHandlers } from '@multitenantkit/api-handlers';
35
41
  // Export factories and utilities
36
42
  export { applySupabaseDefaults, createSupabaseAdapters } from './factories/AdapterFactory';
43
+ // Export Edge Handler factory (all-in-one function)
44
+ export { createSupabaseEdgeHandler } from './factories/EdgeHandlerFactory';
37
45
  export { createUseCases } from './factories/UseCaseFactory';
38
46
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,4EAA4E;AAC5E,OAAO,EACH,yBAAyB,EAIzB,mBAAmB,EACtB,MAAM,uCAAuC,CAAC;AAC/C,gCAAgC;AAChC,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAK7B,MAAM,8CAA8C,CAAC;AACtD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,iCAAiC;AACjC,OAAO,EACH,qBAAqB,EAErB,sBAAsB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,oDAAoD;AACpD,OAAO,EAGH,yBAAyB,EAE5B,MAAM,gCAAgC,CAAC;AACxC,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.8",
3
+ "version": "0.2.10",
4
4
  "type": "module",
5
5
  "description": "MultiTenantKit SDK for Supabase Edge Functions (Deno compatible)",
6
6
  "keywords": [
@@ -48,8 +48,11 @@
48
48
  "dependencies": {
49
49
  "@multitenantkit/domain": "^0.2.8",
50
50
  "@multitenantkit/domain-contracts": "^0.2.0",
51
+ "@multitenantkit/api-handlers": "^0.2.0",
52
+ "@multitenantkit/adapter-auth-supabase": "^0.2.2",
51
53
  "@multitenantkit/adapter-persistence-supabase": "^0.2.8",
52
54
  "@multitenantkit/adapter-system-web-crypto": "^0.2.8",
55
+ "@multitenantkit/adapter-transport-supabase-edge": "^0.2.10",
53
56
  "@supabase/supabase-js": "^2.39.0"
54
57
  },
55
58
  "devDependencies": {