@svadmin/supabase 0.11.5 → 0.11.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svadmin/supabase",
3
- "version": "0.11.5",
3
+ "version": "0.11.8",
4
4
  "description": "Supabase adapters — DataProvider, AuthProvider, LiveProvider, AuditHandler",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -24,10 +24,10 @@
24
24
  }
25
25
  },
26
26
  "peerDependencies": {
27
- "@svadmin/core": "^0.32.2",
28
- "@supabase/supabase-js": "^2.0.0",
29
- "@refinedev/supabase": "^5.0.0",
30
- "@supacloud/js": "^0.12.0"
27
+ "@svadmin/core": "^0.34.2",
28
+ "@supabase/supabase-js": "^2.112.2",
29
+ "@refinedev/supabase": "^6.0.2",
30
+ "@supacloud/js": "^0.21.1"
31
31
  },
32
32
  "license": "MIT",
33
33
  "author": "zuohuadong",
@@ -55,9 +55,9 @@
55
55
  }
56
56
  },
57
57
  "dependencies": {
58
- "@svadmin/refine-adapter": "^0.10.0"
58
+ "@svadmin/refine-adapter": "^0.10.1"
59
59
  },
60
60
  "devDependencies": {
61
- "@supabase/supabase-js": "^2.110.7"
61
+ "@supabase/supabase-js": "^2.112.2"
62
62
  }
63
63
  }
@@ -1,8 +1,21 @@
1
1
  // Supabase AuthProvider
2
- import type { SupabaseClient } from '@supabase/supabase-js';
2
+ import type { SupabaseClient, User } from '@supabase/supabase-js';
3
3
  import type { AuthProvider, Identity, AuthActionResult, CheckResult } from '@svadmin/core';
4
4
  import { audit } from '@svadmin/core';
5
5
 
6
+ export interface SupabasePermissionResolverContext {
7
+ client: SupabaseClient;
8
+ user: User;
9
+ }
10
+
11
+ export type SupabasePermissionResolver = (
12
+ context: SupabasePermissionResolverContext,
13
+ ) => Promise<unknown> | unknown;
14
+
15
+ export interface SupabaseAuthProviderOptions {
16
+ getPermissions?: SupabasePermissionResolver;
17
+ }
18
+
6
19
  const INVALID_REFRESH_TOKEN_MESSAGES = [
7
20
  'refresh token is not valid',
8
21
  'invalid refresh token',
@@ -23,7 +36,20 @@ async function clearInvalidSession(client: SupabaseClient): Promise<void> {
23
36
  await client.auth.signOut({ scope: 'local' });
24
37
  }
25
38
 
26
- export function createSupabaseAuthProvider(client: SupabaseClient): AuthProvider {
39
+ async function currentPermissionUser(client: SupabaseClient): Promise<User | null> {
40
+ const { data: { user }, error } = await client.auth.getUser();
41
+ if (error && isInvalidRefreshTokenError(error)) {
42
+ await clearInvalidSession(client);
43
+ return null;
44
+ }
45
+ if (error) throw error;
46
+ return user ?? null;
47
+ }
48
+
49
+ export function createSupabaseAuthProvider(
50
+ client: SupabaseClient,
51
+ options: SupabaseAuthProviderOptions = {},
52
+ ): AuthProvider {
27
53
  return {
28
54
  async login({ email, password }: Record<string, unknown>): Promise<AuthActionResult> {
29
55
  const { data, error } = await client.auth.signInWithPassword({
@@ -90,12 +116,10 @@ export function createSupabaseAuthProvider(client: SupabaseClient): AuthProvider
90
116
  },
91
117
 
92
118
  async getPermissions(): Promise<unknown> {
93
- const { data: { user }, error } = await client.auth.getUser();
94
- if (error && isInvalidRefreshTokenError(error)) {
95
- await clearInvalidSession(client);
96
- return null;
97
- }
98
- return user?.user_metadata?.role ?? 'user';
119
+ if (!options.getPermissions) return null;
120
+ const user = await currentPermissionUser(client);
121
+ if (!user) return null;
122
+ return options.getPermissions({ client, user });
99
123
  },
100
124
 
101
125
  async register({ email, password, ...rest }: Record<string, unknown>): Promise<AuthActionResult> {
package/src/index.ts CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  export { createSupabaseDataProvider } from './data-provider';
4
4
  export { createSupabaseAuthProvider } from './auth-provider';
5
+ export type {
6
+ SupabaseAuthProviderOptions,
7
+ SupabasePermissionResolver,
8
+ SupabasePermissionResolverContext,
9
+ } from './auth-provider';
5
10
  export { createSupabaseLiveProvider } from './live-provider';
6
11
  export { createSupabaseAuditHandler } from './audit-handler';
7
12
  export {