@schemavaults/auth-ui 0.9.3 → 0.9.13

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.
@@ -1,8 +1,11 @@
1
1
  import { type FC } from "react";
2
+ import type { AvailableMfaFactor } from "@schemavaults/auth-common";
2
3
  export interface MfaChallengeFormProps {
3
4
  challenge_id: string;
4
5
  client_app_id: string;
5
6
  expires_at?: number;
7
+ available_factors: AvailableMfaFactor[];
8
+ recovery_codes_available: boolean;
6
9
  onAuthenticated: (authorization_code: string) => Promise<void> | void;
7
10
  onChallengeExpired?: () => void;
8
11
  }
@@ -4,10 +4,15 @@ import { useState } from "react";
4
4
  import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Input, } from "@schemavaults/ui";
5
5
  import { useMfa } from "@schemavaults/auth-react-provider";
6
6
  import { ShieldCheck } from "lucide-react";
7
- export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, onAuthenticated, onChallengeExpired, }) => {
7
+ import { MfaFactorPicker } from "../MfaFactorPicker";
8
+ export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, available_factors, recovery_codes_available, onAuthenticated, onChallengeExpired, }) => {
8
9
  const { submitChallenge } = useMfa();
9
10
  const [useRecovery, setUseRecovery] = useState(false);
10
11
  const [value, setValue] = useState("");
12
+ const [selectedFactorId, setSelectedFactorId] = useState(
13
+ // Default to the most-recently-used factor — the login response sorts
14
+ // available_factors by last_used_at DESC NULLS LAST.
15
+ available_factors[0]?.factor_id ?? "");
11
16
  const [error, setError] = useState(null);
12
17
  const [submitting, setSubmitting] = useState(false);
13
18
  const handleSubmit = async (e) => {
@@ -17,7 +22,11 @@ export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, onAu
17
22
  try {
18
23
  const proof = useRecovery
19
24
  ? ({ type: "recovery_code", recovery_code: value })
20
- : ({ type: "totp", code: value });
25
+ : ({
26
+ type: "totp",
27
+ factor_id: selectedFactorId,
28
+ code: value,
29
+ });
21
30
  const result = await submitChallenge(challenge_id, client_app_id, proof);
22
31
  if (result.kind === "authenticated") {
23
32
  await onAuthenticated(result.authorization_code);
@@ -46,17 +55,25 @@ export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, onAu
46
55
  const expiresLabel = typeof expires_at === "number"
47
56
  ? `Expires ${new Date(expires_at).toLocaleTimeString()}`
48
57
  : null;
58
+ const showFactorPicker = !useRecovery && available_factors.length > 1;
59
+ const canSubmit = !submitting &&
60
+ value.length > 0 &&
61
+ (useRecovery || selectedFactorId.length > 0);
49
62
  return (_jsxs(Card, { className: "w-full max-w-md", children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Verify it's you" }), _jsxs(CardDescription, { children: [useRecovery
50
63
  ? "Enter one of your recovery codes."
51
- : "Enter the 6-digit code from your authenticator app.", expiresLabel ? (_jsx("span", { suppressHydrationWarning: true, children: ` ${expiresLabel}.` })) : null] })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs(CardContent, { className: "space-y-3", children: [_jsx(Input, { inputMode: useRecovery ? "text" : "numeric", autoComplete: "one-time-code", value: value, onChange: (e) => setValue(useRecovery
64
+ : "Enter the 6-digit code from your authenticator app.", expiresLabel ? (_jsx("span", { suppressHydrationWarning: true, children: ` ${expiresLabel}.` })) : null] })] }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs(CardContent, { className: "space-y-3", children: [showFactorPicker ? (_jsx(MfaFactorPicker, { factors: available_factors, selected_factor_id: selectedFactorId, onSelect: (id) => {
65
+ setSelectedFactorId(id);
66
+ setValue("");
67
+ setError(null);
68
+ }, disabled: submitting })) : null, _jsx(Input, { inputMode: useRecovery ? "text" : "numeric", autoComplete: "one-time-code", value: value, onChange: (e) => setValue(useRecovery
52
69
  ? e.target.value
53
- : e.target.value.replace(/\D+/g, "").slice(0, 6)), placeholder: useRecovery ? "abcde-fghij" : "123456", "data-testid": "mfa-challenge-input" }), _jsx("button", { type: "button", className: "text-sm underline text-muted-foreground", onClick: () => {
70
+ : e.target.value.replace(/\D+/g, "").slice(0, 6)), placeholder: useRecovery ? "abcde-fghij" : "123456", "data-testid": "mfa-challenge-input" }), recovery_codes_available ? (_jsx(Button, { type: "button", variant: "link", className: "h-auto p-0 text-sm text-muted-foreground", onClick: () => {
54
71
  setUseRecovery((p) => !p);
55
72
  setValue("");
56
73
  setError(null);
57
74
  }, "data-testid": "mfa-challenge-toggle-recovery", children: useRecovery
58
75
  ? "Use authenticator app instead"
59
- : "Use a recovery code instead" }), error && _jsx("p", { className: "text-sm text-destructive", children: error })] }), _jsx(CardFooter, { children: _jsxs(Button, { type: "submit", disabled: submitting || value.length === 0, "data-testid": "mfa-challenge-submit", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ShieldCheck, { className: "h-4 w-4" }), submitting ? "Verifying…" : "Verify"] }) })] })] }));
76
+ : "Use a recovery code instead" })) : null, error && _jsx("p", { className: "text-sm text-destructive", children: error })] }), _jsx(CardFooter, { children: _jsxs(Button, { type: "submit", disabled: !canSubmit, "data-testid": "mfa-challenge-submit", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ShieldCheck, { className: "h-4 w-4" }), submitting ? "Verifying…" : "Verify"] }) })] })] }));
60
77
  };
61
78
  export default MfaChallengeForm;
62
79
  //# sourceMappingURL=mfa-challenge-form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mfa-challenge-form.js","sourceRoot":"","sources":["../../../src/components/MfaChallengeForm/mfa-challenge-form.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mfa-challenge-form.js","sourceRoot":"","sources":["../../../src/components/MfaChallengeForm/mfa-challenge-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { MfaFactorType } from "@schemavaults/auth-common";
2
+ export interface MfaFactorTypeLabel {
3
+ label: string;
4
+ description: string;
5
+ }
6
+ export declare const MFA_FACTOR_TYPE_LABELS: Record<MfaFactorType, MfaFactorTypeLabel>;
7
+ export declare function labelForFactorType(factor_type: MfaFactorType): MfaFactorTypeLabel;
@@ -0,0 +1,13 @@
1
+ // Single source of truth for human-readable factor labels. Adding a new
2
+ // factor type to `MfaFactorType` requires (and only requires) adding a new
3
+ // entry here for the factor picker to render it.
4
+ export const MFA_FACTOR_TYPE_LABELS = {
5
+ totp: {
6
+ label: "Authenticator app",
7
+ description: "Enter the 6-digit code from your authenticator app.",
8
+ },
9
+ };
10
+ export function labelForFactorType(factor_type) {
11
+ return MFA_FACTOR_TYPE_LABELS[factor_type];
12
+ }
13
+ //# sourceMappingURL=factor-type-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factor-type-labels.js","sourceRoot":"","sources":["../../../src/components/MfaFactorPicker/factor-type-labels.ts"],"names":[],"mappings":"AAOA,wEAAwE;AACxE,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,CAAC,MAAM,sBAAsB,GACjC;IACE,IAAI,EAAE;QACJ,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,qDAAqD;KACnE;CACF,CAAC;AAEJ,MAAM,UAAU,kBAAkB,CAAC,WAA0B;IAC3D,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MfaFactorPicker, default } from "./mfa-factor-picker";
2
+ export type { MfaFactorPickerProps } from "./mfa-factor-picker";
3
+ export { MFA_FACTOR_TYPE_LABELS, labelForFactorType, type MfaFactorTypeLabel, } from "./factor-type-labels";
@@ -0,0 +1,3 @@
1
+ export { MfaFactorPicker, default } from "./mfa-factor-picker";
2
+ export { MFA_FACTOR_TYPE_LABELS, labelForFactorType, } from "./factor-type-labels";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/MfaFactorPicker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type FC } from "react";
2
+ import type { AvailableMfaFactor } from "@schemavaults/auth-common";
3
+ export interface MfaFactorPickerProps {
4
+ factors: AvailableMfaFactor[];
5
+ selected_factor_id: string;
6
+ onSelect: (factor_id: string) => void;
7
+ disabled?: boolean;
8
+ }
9
+ export declare const MfaFactorPicker: FC<MfaFactorPickerProps>;
10
+ export default MfaFactorPicker;
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { RadioGroup, RadioGroupItem, Label } from "@schemavaults/ui";
4
+ import { labelForFactorType } from "./factor-type-labels";
5
+ export const MfaFactorPicker = ({ factors, selected_factor_id, onSelect, disabled, }) => {
6
+ return (_jsx(RadioGroup, { value: selected_factor_id, onValueChange: onSelect, disabled: disabled, className: "space-y-2", "data-testid": "mfa-factor-picker", children: factors.map((factor) => {
7
+ const { label, description } = labelForFactorType(factor.factor_type);
8
+ const inputId = `mfa-factor-${factor.factor_id}`;
9
+ return (_jsxs("div", { className: "flex items-start gap-3 rounded-md border p-3", children: [_jsx(RadioGroupItem, { value: factor.factor_id, id: inputId, className: "mt-1" }), _jsxs(Label, { htmlFor: inputId, className: "flex flex-col gap-0.5 cursor-pointer", children: [_jsx("span", { className: "font-medium", children: label }), _jsx("span", { className: "text-sm text-muted-foreground", children: description })] })] }, factor.factor_id));
10
+ }) }));
11
+ };
12
+ export default MfaFactorPicker;
13
+ //# sourceMappingURL=mfa-factor-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfa-factor-picker.js","sourceRoot":"","sources":["../../../src/components/MfaFactorPicker/mfa-factor-picker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAS1D,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,EACxD,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,QAAQ,GACT,EAAgB,EAAE;IACjB,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,kBAAkB,EACzB,aAAa,EAAE,QAAQ,EACvB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,WAAW,iBACT,mBAAmB,YAE9B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,cAAc,MAAM,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO,CACL,eAEE,SAAS,EAAC,8CAA8C,aAExD,KAAC,cAAc,IACb,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,MAAM,GAChB,EACF,MAAC,KAAK,IACJ,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,sCAAsC,aAEhD,eAAM,SAAS,EAAC,aAAa,YAAE,KAAK,GAAQ,EAC5C,eAAM,SAAS,EAAC,+BAA+B,YAC5C,WAAW,GACP,IACD,KAhBH,MAAM,CAAC,SAAS,CAiBjB,CACP,CAAC;QACJ,CAAC,CAAC,GACS,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { type FC } from "react";
2
2
  export interface MfaRegenerateRecoveryCodesDialogProps {
3
3
  open: boolean;
4
+ factor_id: string;
4
5
  onClose: () => void;
5
6
  }
6
7
  export declare const MfaRegenerateRecoveryCodesDialog: FC<MfaRegenerateRecoveryCodesDialogProps>;
@@ -5,7 +5,7 @@ import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogH
5
5
  import { useMfa } from "@schemavaults/auth-react-provider";
6
6
  import { Check, RefreshCw, X } from "lucide-react";
7
7
  import { RecoveryCodesPanel } from "../RecoveryCodesPanel";
8
- export const MfaRegenerateRecoveryCodesDialog = ({ open, onClose }) => {
8
+ export const MfaRegenerateRecoveryCodesDialog = ({ open, factor_id, onClose }) => {
9
9
  const { regenerateRecoveryCodes } = useMfa();
10
10
  const [code, setCode] = useState("");
11
11
  const [submitting, setSubmitting] = useState(false);
@@ -16,7 +16,7 @@ export const MfaRegenerateRecoveryCodesDialog = ({ open, onClose }) => {
16
16
  setSubmitting(true);
17
17
  setError(null);
18
18
  try {
19
- const res = await regenerateRecoveryCodes(code);
19
+ const res = await regenerateRecoveryCodes(factor_id, code);
20
20
  setNewCodes(res.recovery_codes);
21
21
  }
22
22
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"mfa-regenerate-recovery-codes-dialog.js","sourceRoot":"","sources":["../../../src/components/MfaRegenerateRecoveryCodesDialog/mfa-regenerate-recovery-codes-dialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mfa-regenerate-recovery-codes-dialog.js","sourceRoot":"","sources":["../../../src/components/MfaRegenerateRecoveryCodesDialog/mfa-regenerate-recovery-codes-dialog.tsx"],"names":[],"mappings":"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"}
@@ -2,20 +2,27 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState } from "react";
4
4
  import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
5
- import { useMfa } from "@schemavaults/auth-react-provider";
5
+ import { useMfa, useMfaFactorStatusSwr, } from "@schemavaults/auth-react-provider";
6
6
  import { ShieldCheck, ShieldAlert, KeyRound, ShieldOff, Smartphone, } from "lucide-react";
7
7
  import { TotpEnrollmentDialog } from "../TotpEnrollmentDialog";
8
8
  import { MfaRemoveFactorDialog } from "../MfaRemoveFactorDialog";
9
9
  import { MfaRegenerateRecoveryCodesDialog } from "../MfaRegenerateRecoveryCodesDialog";
10
10
  export const MfaSettingsCard = ({ className, }) => {
11
- const { status, isLoading } = useMfa();
11
+ // The settings card only manages the TOTP factor, so query that factor
12
+ // type explicitly rather than picking an arbitrary entry out of the
13
+ // account-wide factor list (there is no "primary" factor — all are
14
+ // equivalent). Recovery codes are account-wide, so that count still
15
+ // comes from the aggregate status.
16
+ const { status, isLoading: aggregateLoading } = useMfa();
17
+ const { data: totpStatus, isLoading: totpLoading } = useMfaFactorStatusSwr("totp");
12
18
  const [enrolling, setEnrolling] = useState(false);
13
19
  const [removing, setRemoving] = useState(false);
14
20
  const [regenerating, setRegenerating] = useState(false);
15
- const enabled = !!status?.enabled;
21
+ const isLoading = aggregateLoading || totpLoading;
22
+ const enabled = !!totpStatus?.enabled;
16
23
  return (_jsxs(Card, { className: cn("w-full", className), children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [enabled ? (_jsx(ShieldCheck, { className: "h-5 w-5 text-emerald-600" })) : (_jsx(ShieldAlert, { className: "h-5 w-5 text-muted-foreground" })), "Multi-Factor Authentication"] }), _jsx(CardDescription, { children: enabled
17
24
  ? "An authenticator app is required at sign-in."
18
- : "Add a second factor to protect your account." })] }), _jsx(CardContent, { children: isLoading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Loading status\u2026" })) : enabled ? (_jsxs("div", { className: "space-y-2 text-sm", children: [_jsxs("div", { children: [_jsx("strong", { children: "Status:" }), " Enabled (TOTP)"] }), typeof status?.recovery_codes_remaining === "number" && (_jsxs("div", { children: [_jsx("strong", { children: "Recovery codes remaining:" }), " ", status.recovery_codes_remaining] })), typeof status?.verified_at === "number" && (_jsxs("div", { className: "text-muted-foreground", children: ["Enabled on", " ", new Date(status.verified_at).toLocaleString()] }))] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "MFA is not currently enabled on your account." })) }), _jsx(CardFooter, { className: "flex flex-wrap gap-2", children: enabled ? (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "outline", onClick: () => setRegenerating(true), disabled: regenerating, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(KeyRound, { className: "h-4 w-4" }), "Regenerate recovery codes"] }), _jsxs(Button, { variant: "destructive", onClick: () => setRemoving(true), disabled: removing, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ShieldOff, { className: "h-4 w-4" }), "Remove authenticator"] })] })) : (_jsxs(Button, { onClick: () => setEnrolling(true), disabled: enrolling, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Smartphone, { className: "h-4 w-4" }), "Set up authenticator app"] })) }), enrolling && (_jsx(TotpEnrollmentDialog, { open: enrolling, onClose: () => setEnrolling(false) })), removing && status?.factor_id && (_jsx(MfaRemoveFactorDialog, { open: removing, factor_id: status.factor_id, onClose: () => setRemoving(false) })), regenerating && (_jsx(MfaRegenerateRecoveryCodesDialog, { open: regenerating, onClose: () => setRegenerating(false) }))] }));
25
+ : "Add a second factor to protect your account." })] }), _jsx(CardContent, { children: isLoading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Loading status\u2026" })) : enabled ? (_jsxs("div", { className: "space-y-2 text-sm", children: [_jsxs("div", { children: [_jsx("strong", { children: "Status:" }), " Enabled (TOTP)"] }), typeof status?.recovery_codes_remaining === "number" && (_jsxs("div", { children: [_jsx("strong", { children: "Recovery codes remaining:" }), " ", status.recovery_codes_remaining] })), typeof totpStatus?.verified_at === "number" && (_jsxs("div", { className: "text-muted-foreground", children: ["Enabled on", " ", new Date(totpStatus.verified_at).toLocaleString()] }))] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "MFA is not currently enabled on your account." })) }), _jsx(CardFooter, { className: "flex flex-wrap gap-2", children: enabled ? (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "outline", onClick: () => setRegenerating(true), disabled: regenerating, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(KeyRound, { className: "h-4 w-4" }), "Regenerate recovery codes"] }), _jsxs(Button, { variant: "destructive", onClick: () => setRemoving(true), disabled: removing, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ShieldOff, { className: "h-4 w-4" }), "Remove authenticator"] })] })) : (_jsxs(Button, { onClick: () => setEnrolling(true), disabled: enrolling, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Smartphone, { className: "h-4 w-4" }), "Set up authenticator app"] })) }), enrolling && (_jsx(TotpEnrollmentDialog, { open: enrolling, onClose: () => setEnrolling(false) })), removing && totpStatus?.factor_id && (_jsx(MfaRemoveFactorDialog, { open: removing, factor_id: totpStatus.factor_id, onClose: () => setRemoving(false) })), regenerating && totpStatus?.factor_id && (_jsx(MfaRegenerateRecoveryCodesDialog, { open: regenerating, factor_id: totpStatus.factor_id, onClose: () => setRegenerating(false) }))] }));
19
26
  };
20
27
  export default MfaSettingsCard;
21
28
  //# sourceMappingURL=mfa-settings-card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mfa-settings-card.js","sourceRoot":"","sources":["../../../src/components/MfaSettingsCard/mfa-settings-card.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mfa-settings-card.js","sourceRoot":"","sources":["../../../src/components/MfaSettingsCard/mfa-settings-card.tsx"],"names":[],"mappings":"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"}
@@ -62,6 +62,8 @@ export { RecoveryCodesPanel } from "./RecoveryCodesPanel";
62
62
  export type { RecoveryCodesPanelProps } from "./RecoveryCodesPanel";
63
63
  export { MfaChallengeForm } from "./MfaChallengeForm";
64
64
  export type { MfaChallengeFormProps } from "./MfaChallengeForm";
65
+ export { MfaFactorPicker, MFA_FACTOR_TYPE_LABELS, labelForFactorType, } from "./MfaFactorPicker";
66
+ export type { MfaFactorPickerProps, MfaFactorTypeLabel, } from "./MfaFactorPicker";
65
67
  export { MfaRemoveFactorDialog } from "./MfaRemoveFactorDialog";
66
68
  export type { MfaRemoveFactorDialogProps } from "./MfaRemoveFactorDialog";
67
69
  export { MfaRegenerateRecoveryCodesDialog } from "./MfaRegenerateRecoveryCodesDialog";
@@ -29,6 +29,7 @@ export { MfaSettingsCard } from "./MfaSettingsCard";
29
29
  export { TotpEnrollmentDialog } from "./TotpEnrollmentDialog";
30
30
  export { RecoveryCodesPanel } from "./RecoveryCodesPanel";
31
31
  export { MfaChallengeForm } from "./MfaChallengeForm";
32
+ export { MfaFactorPicker, MFA_FACTOR_TYPE_LABELS, labelForFactorType, } from "./MfaFactorPicker";
32
33
  export { MfaRemoveFactorDialog } from "./MfaRemoveFactorDialog";
33
34
  export { MfaRegenerateRecoveryCodesDialog } from "./MfaRegenerateRecoveryCodesDialog";
34
35
  export { AuthActionButtons } from "./AuthActionButtons";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAG9B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,YAAY,CAAC;AAK3B,cAAc,kBAAkB,CAAC;AAKjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAMtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAMtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAG9B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,YAAY,CAAC;AAK3B,cAAc,kBAAkB,CAAC;AAKjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAMtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAMtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schemavaults/auth-ui",
3
- "version": "0.9.3",
3
+ "version": "0.9.13",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "description": "React.js UI components for authentication/authorization shared between different SchemaVaults apps",
@@ -17,9 +17,9 @@
17
17
  "react-dom": "^19.2.6",
18
18
  "next": "^16.2.6",
19
19
  "@schemavaults/ui": "^0.54.3",
20
- "@schemavaults/auth-react-provider": "0.12.2",
20
+ "@schemavaults/auth-react-provider": "0.12.11",
21
21
  "@schemavaults/app-definitions": "0.7.1",
22
- "@schemavaults/auth-common": "0.12.10",
22
+ "@schemavaults/auth-common": "0.12.15",
23
23
  "lucide-react": "0.575.0",
24
24
  "swr": "2.3.4",
25
25
  "postcss": "8.5.3",