@schemavaults/auth-react-provider 0.10.37 → 0.10.41
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/hooks/index.d.ts +2 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-auth-client-state-watcher.js +9 -5
- package/dist/hooks/use-auth-client-state-watcher.js.map +1 -1
- package/dist/hooks/use-current-user-swr.d.ts +12 -0
- package/dist/hooks/use-current-user-swr.js +38 -0
- package/dist/hooks/use-current-user-swr.js.map +1 -0
- package/dist/hooks/use-current-user.js +31 -42
- package/dist/hooks/use-current-user.js.map +1 -1
- package/package.json +1 -1
package/dist/hooks/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ export { useAuth } from "./use-auth";
|
|
|
2
2
|
export type * from "./use-auth";
|
|
3
3
|
export { useCurrentUser } from "./use-current-user";
|
|
4
4
|
export type * from "./use-current-user";
|
|
5
|
+
export { useCurrentUserWithRevalidation } from "./use-current-user-swr";
|
|
6
|
+
export type * from "./use-current-user-swr";
|
|
5
7
|
export { useAdmin } from "./use-admin";
|
|
6
8
|
export type * from "./use-admin";
|
|
7
9
|
export { useAppEnvironment } from "./use-app-environment";
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { useAuth } from "./use-auth";
|
|
2
2
|
export { useCurrentUser } from "./use-current-user";
|
|
3
|
+
export { useCurrentUserWithRevalidation } from "./use-current-user-swr";
|
|
3
4
|
export { useAdmin } from "./use-admin";
|
|
4
5
|
export { useAppEnvironment } from "./use-app-environment";
|
|
5
6
|
export { useTradeAuthorizationCodeForTokensEffect } from "./use-trade-authorization-code-for-tokens";
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,wCAAwC,EAAE,MAAM,2CAA2C,CAAC;AAGrG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,wCAAwC,EAAE,MAAM,2CAA2C,CAAC;AAGrG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AAEtF,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -5,6 +5,10 @@ import { useAppEnvironment, } from "./use-app-environment";
|
|
|
5
5
|
import { useDebugWithSpecifiedBooleanOrLookupDefault } from "./use-debug";
|
|
6
6
|
export function useAuthClientStateWatcher({ onAuthStateChanged, ...opts }) {
|
|
7
7
|
const auth = useAuth();
|
|
8
|
+
const ready = auth.ready;
|
|
9
|
+
const clientRef = auth.ready
|
|
10
|
+
? auth.client
|
|
11
|
+
: null;
|
|
8
12
|
const environment = useAppEnvironment();
|
|
9
13
|
const debug = useDebugWithSpecifiedBooleanOrLookupDefault(environment, opts.debug);
|
|
10
14
|
const handleAuthSDKStateChangeEvent = useEffectEvent(async function handleAuthSDKStateChangeEvent() {
|
|
@@ -12,10 +16,10 @@ export function useAuthClientStateWatcher({ onAuthStateChanged, ...opts }) {
|
|
|
12
16
|
console.log("[useAuthClientStateWatcher] Auth SDK state changed.");
|
|
13
17
|
}
|
|
14
18
|
try {
|
|
15
|
-
if (!
|
|
19
|
+
if (!ready || !clientRef) {
|
|
16
20
|
throw new Error("Cannot handle auth SDK state change event when auth client is not initialized");
|
|
17
21
|
}
|
|
18
|
-
const authClient =
|
|
22
|
+
const authClient = clientRef.current;
|
|
19
23
|
if (!authClient) {
|
|
20
24
|
if (debug) {
|
|
21
25
|
console.warn("[useAuthClientStateWatcher] Auth client is null.");
|
|
@@ -42,13 +46,13 @@ export function useAuthClientStateWatcher({ onAuthStateChanged, ...opts }) {
|
|
|
42
46
|
}); // end of handleAuthSDKStateChangeEvent)
|
|
43
47
|
// Attach an auth-state change listener to the auth client
|
|
44
48
|
useEffect(() => {
|
|
45
|
-
if (!
|
|
49
|
+
if (!ready || !clientRef) {
|
|
46
50
|
if (debug) {
|
|
47
51
|
console.log("[useAuthClientStateWatcher] Auth client not ready, skipping...");
|
|
48
52
|
}
|
|
49
53
|
return;
|
|
50
54
|
}
|
|
51
|
-
const authClientRef =
|
|
55
|
+
const authClientRef = clientRef;
|
|
52
56
|
if (authClientRef.current) {
|
|
53
57
|
if (debug) {
|
|
54
58
|
console.log("[useAuthClientStateWatcher] Adding auth state change listener...");
|
|
@@ -79,6 +83,6 @@ export function useAuthClientStateWatcher({ onAuthStateChanged, ...opts }) {
|
|
|
79
83
|
};
|
|
80
84
|
return unsubscribe;
|
|
81
85
|
}
|
|
82
|
-
}, [
|
|
86
|
+
}, [ready, clientRef, debug]);
|
|
83
87
|
}
|
|
84
88
|
//# sourceMappingURL=use-auth-client-state-watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-auth-client-state-watcher.js","sourceRoot":"","sources":["../../src/hooks/use-auth-client-state-watcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAkB,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,iBAAiB,GAElB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2CAA2C,EAAE,MAAM,aAAa,CAAC;AAc1E,MAAM,UAAU,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,GAAG,IAAI,EAC0B;IACjC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,WAAW,GAA+B,iBAAiB,EAAE,CAAC;IACpE,MAAM,KAAK,GAAY,2CAA2C,CAChE,WAAW,EACX,IAAI,CAAC,KAAK,CACX,CAAC;IAEF,MAAM,6BAA6B,GAAG,cAAc,CAClD,KAAK,UAAU,6BAA6B;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"use-auth-client-state-watcher.js","sourceRoot":"","sources":["../../src/hooks/use-auth-client-state-watcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UserData } from "@schemavaults/auth-common";
|
|
2
|
+
/**
|
|
3
|
+
* @name useCurrentUserWithRevalidation
|
|
4
|
+
* @description Like {@link useCurrentUser}, but additionally revalidates the
|
|
5
|
+
* current user against the auth server's `/api/auth/whoami` endpoint on an
|
|
6
|
+
* interval and on window focus. The in-memory auth client state remains the
|
|
7
|
+
* primary source of truth so login/logout transitions propagate instantly; the
|
|
8
|
+
* SWR layer serves as a self-healing fallback that picks up server-side role
|
|
9
|
+
* changes without a page refresh.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useCurrentUserWithRevalidation(): UserData | null;
|
|
12
|
+
export default useCurrentUserWithRevalidation;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import useSWR from "swr";
|
|
3
|
+
import useAuth from "./use-auth";
|
|
4
|
+
import useAppId from "./use-app-id";
|
|
5
|
+
import useCurrentUser from "./use-current-user";
|
|
6
|
+
const WHOAMI_REFRESH_INTERVAL_MS = 60_000;
|
|
7
|
+
const WHOAMI_DEDUPING_INTERVAL_MS = 15_000;
|
|
8
|
+
/**
|
|
9
|
+
* @name useCurrentUserWithRevalidation
|
|
10
|
+
* @description Like {@link useCurrentUser}, but additionally revalidates the
|
|
11
|
+
* current user against the auth server's `/api/auth/whoami` endpoint on an
|
|
12
|
+
* interval and on window focus. The in-memory auth client state remains the
|
|
13
|
+
* primary source of truth so login/logout transitions propagate instantly; the
|
|
14
|
+
* SWR layer serves as a self-healing fallback that picks up server-side role
|
|
15
|
+
* changes without a page refresh.
|
|
16
|
+
*/
|
|
17
|
+
export function useCurrentUserWithRevalidation() {
|
|
18
|
+
const inMemoryUser = useCurrentUser();
|
|
19
|
+
const auth = useAuth();
|
|
20
|
+
const app_id = useAppId();
|
|
21
|
+
const clientRef = auth.ready ? auth.client : null;
|
|
22
|
+
const enabled = !!(auth.ready && clientRef?.current && inMemoryUser);
|
|
23
|
+
const { data: revalidatedUser } = useSWR(enabled ? `/api/auth/whoami/${app_id}` : null, async () => {
|
|
24
|
+
const authClient = clientRef?.current ?? null;
|
|
25
|
+
if (!authClient) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return await authClient.checkIfAuthenticatedWithServer();
|
|
29
|
+
}, {
|
|
30
|
+
refreshInterval: WHOAMI_REFRESH_INTERVAL_MS,
|
|
31
|
+
dedupingInterval: WHOAMI_DEDUPING_INTERVAL_MS,
|
|
32
|
+
revalidateOnFocus: true,
|
|
33
|
+
fallbackData: inMemoryUser,
|
|
34
|
+
});
|
|
35
|
+
return inMemoryUser ?? revalidatedUser ?? null;
|
|
36
|
+
}
|
|
37
|
+
export default useCurrentUserWithRevalidation;
|
|
38
|
+
//# sourceMappingURL=use-current-user-swr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-current-user-swr.js","sourceRoot":"","sources":["../../src/hooks/use-current-user-swr.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,MAAM,MAAM,KAAK,CAAC;AACzB,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,cAAc,MAAM,0BAA0B,CAAC;AAEtD,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,IAAI,YAAY,CAAC,CAAC;IAErE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,CACtC,OAAO,CAAC,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAC7C,KAAK,IAA8B,EAAE;QACnC,MAAM,UAAU,GAAmC,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC;QAC9E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,UAAU,CAAC,8BAA8B,EAAE,CAAC;IAC3D,CAAC,EACD;QACE,eAAe,EAAE,0BAA0B;QAC3C,gBAAgB,EAAE,2BAA2B;QAC7C,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,YAAY;KAC3B,CACF,CAAC;IAEF,OAAO,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC;AACjD,CAAC;AAED,eAAe,8BAA8B,CAAC"}
|
|
@@ -1,50 +1,39 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
2
3
|
import useAuth from "./use-auth";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function maybeGetCurrentUserFromAuthHook(authClientRef, debug = false) {
|
|
11
|
-
if (authClientRef.ready &&
|
|
12
|
-
authClientRef.client &&
|
|
13
|
-
authClientRef.client.current) {
|
|
14
|
-
const auth = authClientRef.client.current;
|
|
15
|
-
const currentUser = getCurrentUser(auth);
|
|
16
|
-
if (currentUser) {
|
|
17
|
-
if (debug) {
|
|
18
|
-
console.log("[maybeGetCurrentUserFromAuthHook] Loaded current user data from auth client: ", currentUser);
|
|
19
|
-
}
|
|
20
|
-
return currentUser;
|
|
4
|
+
export function useCurrentUser() {
|
|
5
|
+
const auth = useAuth();
|
|
6
|
+
const ready = auth.ready;
|
|
7
|
+
const clientRef = auth.ready ? auth.client : null;
|
|
8
|
+
const [user, setUser] = useState(() => {
|
|
9
|
+
if (!ready || !clientRef || !clientRef.current) {
|
|
10
|
+
return null;
|
|
21
11
|
}
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
return clientRef.current.currentUser;
|
|
13
|
+
});
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!ready || !clientRef) {
|
|
16
|
+
return;
|
|
24
17
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
export function useCurrentUser() {
|
|
30
|
-
const environment = useAppEnvironment();
|
|
31
|
-
const authClientRef = useAuth();
|
|
32
|
-
const debug = useDebug(environment);
|
|
33
|
-
const [user, setUser] = useState(maybeGetCurrentUserFromAuthHook(authClientRef, debug));
|
|
34
|
-
useAuthClientStateWatcher({
|
|
35
|
-
debug,
|
|
36
|
-
onAuthStateChanged: async function updateCurrentUserOnAuthStateChanged({ auth, }) {
|
|
37
|
-
const user = auth.currentUser;
|
|
38
|
-
if (debug) {
|
|
39
|
-
console.log("[updateCurrentUserOnAuthStateChanged] Updating current user: ", user);
|
|
40
|
-
}
|
|
41
|
-
setUser(user);
|
|
18
|
+
const authClient = clientRef.current;
|
|
19
|
+
if (!authClient) {
|
|
42
20
|
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
21
|
+
}
|
|
22
|
+
// Sync once on mount / when ready flips — closes the race where the auth
|
|
23
|
+
// client finishes initializing before a listener can attach.
|
|
24
|
+
setUser(authClient.currentUser);
|
|
25
|
+
const listener_id = authClient.onAuthStateChanged(() => {
|
|
26
|
+
setUser(authClient.currentUser);
|
|
27
|
+
});
|
|
28
|
+
return () => {
|
|
29
|
+
try {
|
|
30
|
+
authClient.removeAuthStateChangeListener(listener_id);
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error("[useCurrentUser] Failed to remove auth state change listener: ", e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}, [ready, clientRef]);
|
|
48
37
|
return user;
|
|
49
38
|
}
|
|
50
39
|
export default useCurrentUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-current-user.js","sourceRoot":"","sources":["../../src/hooks/use-current-user.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"use-current-user.js","sourceRoot":"","sources":["../../src/hooks/use-current-user.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAElD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE;QACrD,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAwB,EAAE;QAClC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAmC,SAAS,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,yEAAyE;QACzE,6DAA6D;QAC7D,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAW,UAAU,CAAC,kBAAkB,CAAC,GAAS,EAAE;YACnE,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,OAAO,GAAS,EAAE;YAChB,IAAI,CAAC;gBACH,UAAU,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CACX,gEAAgE,EAChE,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,cAAc,CAAC"}
|
package/package.json
CHANGED