@artatol-acp/auth-nextjs 0.3.6 → 0.3.7
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/client/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type ACPAuthContextValue = {
|
|
|
5
5
|
isLoading: boolean;
|
|
6
6
|
login: (email: string, password: string) => Promise<void>;
|
|
7
7
|
logout: () => Promise<void>;
|
|
8
|
-
refresh: () => Promise<
|
|
8
|
+
refresh: () => Promise<boolean>;
|
|
9
9
|
resendVerification: (email: string) => Promise<void>;
|
|
10
10
|
};
|
|
11
11
|
export type ACPAuthProviderProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAuE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5G,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD,CAAC;AAIF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,oBAAoB,2CAuF1E;AAED,wBAAgB,OAAO,IAAI,mBAAmB,CAM7C;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,mBAAmB,sBAAsB,CAAC"}
|
package/dist/client/index.jsx
CHANGED
|
@@ -1,62 +1,80 @@
|
|
|
1
1
|
/** @jsxImportSource react */
|
|
2
2
|
'use client';
|
|
3
3
|
import { ACPAuthClient } from '@artatol-acp/auth-js';
|
|
4
|
-
import { createContext, useContext, useState, useEffect } from 'react';
|
|
4
|
+
import { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react';
|
|
5
5
|
const ACPAuthContext = createContext(null);
|
|
6
6
|
export function ACPAuthProvider({ children, baseUrl }) {
|
|
7
7
|
const [user, setUser] = useState(null);
|
|
8
8
|
const [isLoading, setIsLoading] = useState(true);
|
|
9
|
-
const
|
|
9
|
+
const clientRef = useRef(new ACPAuthClient({
|
|
10
10
|
baseUrl,
|
|
11
11
|
apiKey: '',
|
|
12
12
|
autoRefresh: true,
|
|
13
13
|
refreshThresholdSeconds: 60
|
|
14
14
|
}));
|
|
15
|
-
const
|
|
15
|
+
const intervalRef = useRef(null);
|
|
16
|
+
const clearRefreshInterval = useCallback(() => {
|
|
17
|
+
if (intervalRef.current) {
|
|
18
|
+
clearInterval(intervalRef.current);
|
|
19
|
+
intervalRef.current = null;
|
|
20
|
+
}
|
|
21
|
+
}, []);
|
|
22
|
+
const refresh = useCallback(async () => {
|
|
16
23
|
try {
|
|
17
|
-
await
|
|
18
|
-
|
|
19
|
-
const userData = await client.me();
|
|
24
|
+
await clientRef.current.refresh();
|
|
25
|
+
const userData = await clientRef.current.me();
|
|
20
26
|
setUser(userData);
|
|
27
|
+
return true;
|
|
21
28
|
}
|
|
22
|
-
catch
|
|
23
|
-
|
|
24
|
-
client.setAccessToken(null);
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
25
31
|
}
|
|
26
|
-
};
|
|
27
|
-
const login = async (email, password) => {
|
|
28
|
-
const result = await
|
|
32
|
+
}, []);
|
|
33
|
+
const login = useCallback(async (email, password) => {
|
|
34
|
+
const result = await clientRef.current.login({ email, password });
|
|
29
35
|
if ('requiresTwoFactor' in result) {
|
|
30
36
|
throw new Error('2FA_REQUIRED');
|
|
31
37
|
}
|
|
32
38
|
// User logged in successfully, token is automatically set in client
|
|
33
39
|
setUser(result.user);
|
|
34
|
-
};
|
|
35
|
-
const logout = async () => {
|
|
36
|
-
|
|
40
|
+
}, []);
|
|
41
|
+
const logout = useCallback(async () => {
|
|
42
|
+
// First clear the interval to prevent race conditions
|
|
43
|
+
clearRefreshInterval();
|
|
44
|
+
// Then clear user state
|
|
37
45
|
setUser(null);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
// Finally call logout API
|
|
47
|
+
try {
|
|
48
|
+
await clientRef.current.logout();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Ignore logout errors, user is already logged out locally
|
|
52
|
+
}
|
|
53
|
+
}, [clearRefreshInterval]);
|
|
54
|
+
const resendVerification = useCallback(async (email) => {
|
|
55
|
+
await clientRef.current.resendVerificationEmail({ email });
|
|
56
|
+
}, []);
|
|
57
|
+
// Initial session restore
|
|
42
58
|
useEffect(() => {
|
|
43
|
-
// Try to restore session on mount
|
|
44
59
|
refresh().finally(() => setIsLoading(false));
|
|
45
|
-
}, []);
|
|
46
|
-
// Auto-refresh interval
|
|
60
|
+
}, [refresh]);
|
|
61
|
+
// Auto-refresh interval
|
|
47
62
|
useEffect(() => {
|
|
48
|
-
if (!user)
|
|
63
|
+
if (!user) {
|
|
64
|
+
clearRefreshInterval();
|
|
49
65
|
return;
|
|
66
|
+
}
|
|
50
67
|
const REFRESH_INTERVAL = 4 * 60 * 1000; // 4 minutes
|
|
51
|
-
|
|
52
|
-
refresh().
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
68
|
+
intervalRef.current = setInterval(() => {
|
|
69
|
+
refresh().then(success => {
|
|
70
|
+
if (!success) {
|
|
71
|
+
clearRefreshInterval();
|
|
72
|
+
setUser(null);
|
|
73
|
+
}
|
|
56
74
|
});
|
|
57
75
|
}, REFRESH_INTERVAL);
|
|
58
|
-
return
|
|
59
|
-
}, [user]);
|
|
76
|
+
return clearRefreshInterval;
|
|
77
|
+
}, [user, refresh, clearRefreshInterval]);
|
|
60
78
|
return (<ACPAuthContext.Provider value={{ user, isLoading, login, logout, refresh, resendVerification }}>
|
|
61
79
|
{children}
|
|
62
80
|
</ACPAuthContext.Provider>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED