@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 +7 -7
- package/src/auth-provider.ts +32 -8
- package/src/index.ts +5 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/supabase",
|
|
3
|
-
"version": "0.11.
|
|
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.
|
|
28
|
-
"@supabase/supabase-js": "^2.
|
|
29
|
-
"@refinedev/supabase": "^
|
|
30
|
-
"@supacloud/js": "^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.
|
|
58
|
+
"@svadmin/refine-adapter": "^0.10.1"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@supabase/supabase-js": "^2.
|
|
61
|
+
"@supabase/supabase-js": "^2.112.2"
|
|
62
62
|
}
|
|
63
63
|
}
|
package/src/auth-provider.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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 {
|