@schemavaults/auth-react-provider 0.10.41 → 0.11.0
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 +4 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-mfa-status-swr.d.ts +12 -0
- package/dist/hooks/use-mfa-status-swr.js +32 -0
- package/dist/hooks/use-mfa-status-swr.js.map +1 -0
- package/dist/hooks/use-mfa.d.ts +23 -0
- package/dist/hooks/use-mfa.js +60 -0
- package/dist/hooks/use-mfa.js.map +1 -0
- package/package.json +3 -3
package/dist/hooks/index.d.ts
CHANGED
|
@@ -26,3 +26,7 @@ export { useDefaultAccessTokenAudiences } from "./use-default-access-token-audie
|
|
|
26
26
|
export { useAutoReacquireDefaultAccessTokens } from "./use-auto-reacquire-default-access-tokens";
|
|
27
27
|
export { useOnLogout } from "./use-on-logout";
|
|
28
28
|
export type * from "./use-on-logout";
|
|
29
|
+
export { useMfaStatusSwr } from "./use-mfa-status-swr";
|
|
30
|
+
export type * from "./use-mfa-status-swr";
|
|
31
|
+
export { useMfa } from "./use-mfa";
|
|
32
|
+
export type * from "./use-mfa";
|
package/dist/hooks/index.js
CHANGED
|
@@ -14,4 +14,6 @@ export { useIsAuthServer } from "./use-is-auth-server";
|
|
|
14
14
|
export { useDefaultAccessTokenAudiences } from "./use-default-access-token-audiences";
|
|
15
15
|
export { useAutoReacquireDefaultAccessTokens } from "./use-auto-reacquire-default-access-tokens";
|
|
16
16
|
export { useOnLogout } from "./use-on-logout";
|
|
17
|
+
export { useMfaStatusSwr } from "./use-mfa-status-swr";
|
|
18
|
+
export { useMfa } from "./use-mfa";
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
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,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"}
|
|
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;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MfaStatusResponse } from "@schemavaults/auth-common";
|
|
2
|
+
import { type KeyedMutator } from "swr";
|
|
3
|
+
export interface UseMfaStatusSwrResult {
|
|
4
|
+
data: MfaStatusResponse | null;
|
|
5
|
+
isLoading: boolean;
|
|
6
|
+
refresh: KeyedMutator<MfaStatusResponse | null>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Loads the current user's MFA enrollment status from
|
|
10
|
+
* /api/user/mfa/status. Returns null when the user is unauthenticated.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useMfaStatusSwr(): UseMfaStatusSwrResult;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import useSWR from "swr";
|
|
3
|
+
import useAuth from "./use-auth";
|
|
4
|
+
import useCurrentUser from "./use-current-user";
|
|
5
|
+
const REFRESH_INTERVAL_MS = 60_000;
|
|
6
|
+
const DEDUPING_INTERVAL_MS = 15_000;
|
|
7
|
+
/**
|
|
8
|
+
* Loads the current user's MFA enrollment status from
|
|
9
|
+
* /api/user/mfa/status. Returns null when the user is unauthenticated.
|
|
10
|
+
*/
|
|
11
|
+
export function useMfaStatusSwr() {
|
|
12
|
+
const auth = useAuth();
|
|
13
|
+
const inMemoryUser = useCurrentUser();
|
|
14
|
+
const clientRef = auth.ready ? auth.client : null;
|
|
15
|
+
const enabled = !!(auth.ready && clientRef?.current && inMemoryUser);
|
|
16
|
+
const { data, isLoading, mutate } = useSWR(enabled ? "/api/user/mfa/status" : null, async () => {
|
|
17
|
+
const authClient = clientRef?.current ?? null;
|
|
18
|
+
if (!authClient)
|
|
19
|
+
return null;
|
|
20
|
+
return await authClient.getMfaStatus();
|
|
21
|
+
}, {
|
|
22
|
+
refreshInterval: REFRESH_INTERVAL_MS,
|
|
23
|
+
dedupingInterval: DEDUPING_INTERVAL_MS,
|
|
24
|
+
revalidateOnFocus: true,
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
data: data ?? null,
|
|
28
|
+
isLoading,
|
|
29
|
+
refresh: mutate,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=use-mfa-status-swr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mfa-status-swr.js","sourceRoot":"","sources":["../../src/hooks/use-mfa-status-swr.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,MAA6B,MAAM,KAAK,CAAC;AAChD,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,cAAc,MAAM,0BAA0B,CAAC;AAEtD,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAQpC;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,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,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CACxC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EACvC,KAAK,IAAuC,EAAE;QAC5C,MAAM,UAAU,GACd,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,MAAM,UAAU,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC,EACD;QACE,eAAe,EAAE,mBAAmB;QACpC,gBAAgB,EAAE,oBAAoB;QACtC,iBAAiB,EAAE,IAAI;KACxB,CACF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,IAAI,IAAI,IAAI;QAClB,SAAS;QACT,OAAO,EAAE,MAAM;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MfaStatusResponse, MfaEnrollResponse, MfaVerifyEnrollmentResponse, AuthenticateResult } from "@schemavaults/auth-common";
|
|
2
|
+
export interface UseMfaResult {
|
|
3
|
+
status: MfaStatusResponse | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
refresh: () => Promise<MfaStatusResponse | null | undefined>;
|
|
6
|
+
enrollTotp: () => Promise<MfaEnrollResponse>;
|
|
7
|
+
confirmTotpEnrollment: (factor_id: string, code: string) => Promise<MfaVerifyEnrollmentResponse>;
|
|
8
|
+
removeFactor: (factor_id: string, code: string) => Promise<void>;
|
|
9
|
+
regenerateRecoveryCodes: (code: string) => Promise<MfaVerifyEnrollmentResponse>;
|
|
10
|
+
submitChallenge: (challenge_id: string, client_app_id: string, proof: {
|
|
11
|
+
type: "totp";
|
|
12
|
+
code: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: "recovery_code";
|
|
15
|
+
recovery_code: string;
|
|
16
|
+
}) => Promise<AuthenticateResult>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read + mutate the current user's MFA enrollment. Mutators automatically
|
|
20
|
+
* trigger an SWR revalidation so the surrounding UI reflects the new
|
|
21
|
+
* status without a manual refresh.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useMfa(): UseMfaResult;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import useAuth from "./use-auth";
|
|
4
|
+
import { useMfaStatusSwr } from "./use-mfa-status-swr";
|
|
5
|
+
function requireClient(auth) {
|
|
6
|
+
if (!auth.ready) {
|
|
7
|
+
throw new Error("Auth client is not ready yet.");
|
|
8
|
+
}
|
|
9
|
+
const client = auth.client.current;
|
|
10
|
+
if (!client) {
|
|
11
|
+
throw new Error("Auth client is not available.");
|
|
12
|
+
}
|
|
13
|
+
return client;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read + mutate the current user's MFA enrollment. Mutators automatically
|
|
17
|
+
* trigger an SWR revalidation so the surrounding UI reflects the new
|
|
18
|
+
* status without a manual refresh.
|
|
19
|
+
*/
|
|
20
|
+
export function useMfa() {
|
|
21
|
+
const auth = useAuth();
|
|
22
|
+
const { data, isLoading, refresh } = useMfaStatusSwr();
|
|
23
|
+
const enrollTotp = useCallback(async () => {
|
|
24
|
+
const client = requireClient(auth);
|
|
25
|
+
const result = await client.enrollTotp();
|
|
26
|
+
return result;
|
|
27
|
+
}, [auth]);
|
|
28
|
+
const confirmTotpEnrollment = useCallback(async (factor_id, code) => {
|
|
29
|
+
const client = requireClient(auth);
|
|
30
|
+
const result = await client.confirmTotpEnrollment(factor_id, code);
|
|
31
|
+
await refresh();
|
|
32
|
+
return result;
|
|
33
|
+
}, [auth, refresh]);
|
|
34
|
+
const removeFactor = useCallback(async (factor_id, code) => {
|
|
35
|
+
const client = requireClient(auth);
|
|
36
|
+
await client.removeFactor(factor_id, code);
|
|
37
|
+
await refresh();
|
|
38
|
+
}, [auth, refresh]);
|
|
39
|
+
const regenerateRecoveryCodes = useCallback(async (code) => {
|
|
40
|
+
const client = requireClient(auth);
|
|
41
|
+
const result = await client.regenerateRecoveryCodes(code);
|
|
42
|
+
await refresh();
|
|
43
|
+
return result;
|
|
44
|
+
}, [auth, refresh]);
|
|
45
|
+
const submitChallenge = useCallback(async (challenge_id, client_app_id, proof) => {
|
|
46
|
+
const client = requireClient(auth);
|
|
47
|
+
return await client.verifyMfaChallenge(challenge_id, client_app_id, proof);
|
|
48
|
+
}, [auth]);
|
|
49
|
+
return {
|
|
50
|
+
status: data,
|
|
51
|
+
isLoading,
|
|
52
|
+
refresh,
|
|
53
|
+
enrollTotp,
|
|
54
|
+
confirmTotpEnrollment,
|
|
55
|
+
removeFactor,
|
|
56
|
+
regenerateRecoveryCodes,
|
|
57
|
+
submitChallenge,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=use-mfa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mfa.js","sourceRoot":"","sources":["../../src/hooks/use-mfa.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQpC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAwBvD,SAAS,aAAa,CACpB,IAAgC;IAEhC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IAEvD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,qBAAqB,GAAG,WAAW,CACvC,KAAK,EAAE,SAAiB,EAAE,IAAY,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,IAAI,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,KAAK,EAAE,SAAiB,EAAE,IAAY,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,EACD,CAAC,IAAI,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,MAAM,uBAAuB,GAAG,WAAW,CACzC,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,IAAI,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EACH,YAAoB,EACpB,aAAqB,EACrB,KAEoD,EACpD,EAAE;QACF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,MAAM,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,SAAS;QACT,OAAO;QACP,UAAU;QACV,qBAAqB;QACrB,YAAY;QACZ,uBAAuB;QACvB,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schemavaults/auth-react-provider",
|
|
3
3
|
"description": "React hooks and components to make using the @schemavaults/auth-client-sdk a breeze",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
7
7
|
"repository": {
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"types": "dist/index.d.ts",
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"zod": "3.25.8",
|
|
18
|
-
"@schemavaults/auth-client-sdk": "0.
|
|
18
|
+
"@schemavaults/auth-client-sdk": "0.10.0",
|
|
19
19
|
"@schemavaults/app-definitions": "0.6.23",
|
|
20
|
-
"@schemavaults/auth-common": "0.
|
|
20
|
+
"@schemavaults/auth-common": "0.12.0",
|
|
21
21
|
"cookies-next": "6.1.1",
|
|
22
22
|
"uuid": "11.0.3",
|
|
23
23
|
"swr": "2.3.4"
|