@schemavaults/auth-ui 0.9.13 → 0.10.1

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.
Files changed (41) hide show
  1. package/dist/components/MfaChallengeForm/mfa-challenge-form.d.ts +5 -1
  2. package/dist/components/MfaChallengeForm/mfa-challenge-form.js +21 -8
  3. package/dist/components/MfaChallengeForm/mfa-challenge-form.js.map +1 -1
  4. package/dist/components/MfaFactorPicker/factor-type-labels.js +4 -0
  5. package/dist/components/MfaFactorPicker/factor-type-labels.js.map +1 -1
  6. package/dist/components/UsersTable/UserMfaFactorsCell.js +2 -0
  7. package/dist/components/UsersTable/UserMfaFactorsCell.js.map +1 -1
  8. package/dist/components/index.d.ts +0 -10
  9. package/dist/components/index.js +0 -5
  10. package/dist/components/index.js.map +1 -1
  11. package/package.json +4 -4
  12. package/dist/components/MfaRegenerateRecoveryCodesDialog/index.d.ts +0 -2
  13. package/dist/components/MfaRegenerateRecoveryCodesDialog/index.js +0 -2
  14. package/dist/components/MfaRegenerateRecoveryCodesDialog/index.js.map +0 -1
  15. package/dist/components/MfaRegenerateRecoveryCodesDialog/mfa-regenerate-recovery-codes-dialog.d.ts +0 -8
  16. package/dist/components/MfaRegenerateRecoveryCodesDialog/mfa-regenerate-recovery-codes-dialog.js +0 -34
  17. package/dist/components/MfaRegenerateRecoveryCodesDialog/mfa-regenerate-recovery-codes-dialog.js.map +0 -1
  18. package/dist/components/MfaRemoveFactorDialog/index.d.ts +0 -2
  19. package/dist/components/MfaRemoveFactorDialog/index.js +0 -2
  20. package/dist/components/MfaRemoveFactorDialog/index.js.map +0 -1
  21. package/dist/components/MfaRemoveFactorDialog/mfa-remove-factor-dialog.d.ts +0 -8
  22. package/dist/components/MfaRemoveFactorDialog/mfa-remove-factor-dialog.js +0 -29
  23. package/dist/components/MfaRemoveFactorDialog/mfa-remove-factor-dialog.js.map +0 -1
  24. package/dist/components/MfaSettingsCard/index.d.ts +0 -2
  25. package/dist/components/MfaSettingsCard/index.js +0 -2
  26. package/dist/components/MfaSettingsCard/index.js.map +0 -1
  27. package/dist/components/MfaSettingsCard/mfa-settings-card.d.ts +0 -6
  28. package/dist/components/MfaSettingsCard/mfa-settings-card.js +0 -28
  29. package/dist/components/MfaSettingsCard/mfa-settings-card.js.map +0 -1
  30. package/dist/components/RecoveryCodesPanel/index.d.ts +0 -2
  31. package/dist/components/RecoveryCodesPanel/index.js +0 -2
  32. package/dist/components/RecoveryCodesPanel/index.js.map +0 -1
  33. package/dist/components/RecoveryCodesPanel/recovery-codes-panel.d.ts +0 -8
  34. package/dist/components/RecoveryCodesPanel/recovery-codes-panel.js +0 -37
  35. package/dist/components/RecoveryCodesPanel/recovery-codes-panel.js.map +0 -1
  36. package/dist/components/TotpEnrollmentDialog/index.d.ts +0 -2
  37. package/dist/components/TotpEnrollmentDialog/index.js +0 -2
  38. package/dist/components/TotpEnrollmentDialog/index.js.map +0 -1
  39. package/dist/components/TotpEnrollmentDialog/totp-enrollment-dialog.d.ts +0 -7
  40. package/dist/components/TotpEnrollmentDialog/totp-enrollment-dialog.js +0 -64
  41. package/dist/components/TotpEnrollmentDialog/totp-enrollment-dialog.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { type FC } from "react";
1
+ import { type FC, type ReactNode } from "react";
2
2
  import type { AvailableMfaFactor } from "@schemavaults/auth-common";
3
3
  export interface MfaChallengeFormProps {
4
4
  challenge_id: string;
@@ -8,6 +8,10 @@ export interface MfaChallengeFormProps {
8
8
  recovery_codes_available: boolean;
9
9
  onAuthenticated: (authorization_code: string) => Promise<void> | void;
10
10
  onChallengeExpired?: () => void;
11
+ renderPasskeyAction?: (args: {
12
+ factor_id: string;
13
+ onError: (message: string) => void;
14
+ }) => ReactNode;
11
15
  }
12
16
  export declare const MfaChallengeForm: FC<MfaChallengeFormProps>;
13
17
  export default MfaChallengeForm;
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from "react";
3
+ 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
7
  import { MfaFactorPicker } from "../MfaFactorPicker";
8
- export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, available_factors, recovery_codes_available, onAuthenticated, onChallengeExpired, }) => {
8
+ export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, available_factors, recovery_codes_available, onAuthenticated, onChallengeExpired, renderPasskeyAction, }) => {
9
9
  const { submitChallenge } = useMfa();
10
10
  const [useRecovery, setUseRecovery] = useState(false);
11
11
  const [value, setValue] = useState("");
@@ -55,25 +55,38 @@ export const MfaChallengeForm = ({ challenge_id, client_app_id, expires_at, avai
55
55
  const expiresLabel = typeof expires_at === "number"
56
56
  ? `Expires ${new Date(expires_at).toLocaleTimeString()}`
57
57
  : null;
58
+ const selectedFactor = available_factors.find((f) => f.factor_id === selectedFactorId) ?? null;
59
+ // When a passkey factor is the active choice, delegate to the injected
60
+ // passkey slot (browser assertion ceremony) instead of the code input.
61
+ const usePasskey = !useRecovery &&
62
+ selectedFactor?.factor_type === "webauthn" &&
63
+ typeof renderPasskeyAction === "function";
58
64
  const showFactorPicker = !useRecovery && available_factors.length > 1;
59
65
  const canSubmit = !submitting &&
66
+ !usePasskey &&
60
67
  value.length > 0 &&
61
68
  (useRecovery || selectedFactorId.length > 0);
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
63
- ? "Enter one of your recovery codes."
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) => {
69
+ const promptText = useRecovery
70
+ ? "Enter one of your recovery codes."
71
+ : usePasskey
72
+ ? "Use your passkey, security key, or device biometrics to verify."
73
+ : "Enter the 6-digit code from your authenticator app.";
74
+ return (_jsxs(Card, { className: "w-full max-w-md", children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Verify it's you" }), _jsxs(CardDescription, { children: [promptText, 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
75
  setSelectedFactorId(id);
66
76
  setValue("");
67
77
  setError(null);
68
- }, disabled: submitting })) : null, _jsx(Input, { inputMode: useRecovery ? "text" : "numeric", autoComplete: "one-time-code", value: value, onChange: (e) => setValue(useRecovery
78
+ }, disabled: submitting })) : null, usePasskey ? (_jsx("div", { "data-testid": "mfa-challenge-passkey-action", children: renderPasskeyAction?.({
79
+ factor_id: selectedFactorId,
80
+ onError: (message) => setError(message),
81
+ }) })) : (_jsx(Input, { inputMode: useRecovery ? "text" : "numeric", autoComplete: "one-time-code", value: value, onChange: (e) => setValue(useRecovery
69
82
  ? e.target.value
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: () => {
83
+ : 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: () => {
71
84
  setUseRecovery((p) => !p);
72
85
  setValue("");
73
86
  setError(null);
74
87
  }, "data-testid": "mfa-challenge-toggle-recovery", children: useRecovery
75
88
  ? "Use authenticator app instead"
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"] }) })] })] }));
89
+ : "Use a recovery code instead" })) : null, error && _jsx("p", { className: "text-sm text-destructive", children: error })] }), usePasskey ? null : (_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"] }) }))] })] }));
77
90
  };
78
91
  export default MfaChallengeForm;
79
92
  //# 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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"}
@@ -6,6 +6,10 @@ export const MFA_FACTOR_TYPE_LABELS = {
6
6
  label: "Authenticator app",
7
7
  description: "Enter the 6-digit code from your authenticator app.",
8
8
  },
9
+ webauthn: {
10
+ label: "Passkey / Security key",
11
+ description: "Use your passkey, security key, or device biometrics.",
12
+ },
9
13
  };
10
14
  export function labelForFactorType(factor_type) {
11
15
  return MFA_FACTOR_TYPE_LABELS[factor_type];
@@ -1 +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"}
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;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,uDAAuD;KAC1D;CACF,CAAC;AAEJ,MAAM,UAAU,kBAAkB,CAAC,WAA0B;IAC3D,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC"}
@@ -8,6 +8,8 @@ function factorTypeLabel(t) {
8
8
  switch (t) {
9
9
  case "totp":
10
10
  return "TOTP";
11
+ case "webauthn":
12
+ return "Passkey";
11
13
  default: {
12
14
  const _exhaustive = t;
13
15
  return _exhaustive;
@@ -1 +1 @@
1
- {"version":3,"file":"UserMfaFactorsCell.js","sourceRoot":"","sources":["../../../src/components/UsersTable/UserMfaFactorsCell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserMfaFactorsCell.js","sourceRoot":"","sources":["../../../src/components/UsersTable/UserMfaFactorsCell.tsx"],"names":[],"mappings":"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"}
@@ -54,18 +54,8 @@ export { DeleteApiServerDialog } from "./DeleteApiServerDialog";
54
54
  export type { DeleteApiServerDialogProps } from "./DeleteApiServerDialog";
55
55
  export { DisconnectAppToApiDialog } from "./DisconnectAppToApiDialog";
56
56
  export type { DisconnectAppToApiDialogProps, DisconnectAppToApiConfirmationTarget, } from "./DisconnectAppToApiDialog";
57
- export { MfaSettingsCard } from "./MfaSettingsCard";
58
- export type { MfaSettingsCardProps } from "./MfaSettingsCard";
59
- export { TotpEnrollmentDialog } from "./TotpEnrollmentDialog";
60
- export type { TotpEnrollmentDialogProps } from "./TotpEnrollmentDialog";
61
- export { RecoveryCodesPanel } from "./RecoveryCodesPanel";
62
- export type { RecoveryCodesPanelProps } from "./RecoveryCodesPanel";
63
57
  export { MfaChallengeForm } from "./MfaChallengeForm";
64
58
  export type { MfaChallengeFormProps } from "./MfaChallengeForm";
65
59
  export { MfaFactorPicker, MFA_FACTOR_TYPE_LABELS, labelForFactorType, } from "./MfaFactorPicker";
66
60
  export type { MfaFactorPickerProps, MfaFactorTypeLabel, } from "./MfaFactorPicker";
67
- export { MfaRemoveFactorDialog } from "./MfaRemoveFactorDialog";
68
- export type { MfaRemoveFactorDialogProps } from "./MfaRemoveFactorDialog";
69
- export { MfaRegenerateRecoveryCodesDialog } from "./MfaRegenerateRecoveryCodesDialog";
70
- export type { MfaRegenerateRecoveryCodesDialogProps } from "./MfaRegenerateRecoveryCodesDialog";
71
61
  export { AuthActionButtons } from "./AuthActionButtons";
@@ -25,12 +25,7 @@ export { OrganizationSettingsCard } from "./OrganizationSettingsCard";
25
25
  export { DeleteAppDialog } from "./DeleteAppDialog";
26
26
  export { DeleteApiServerDialog } from "./DeleteApiServerDialog";
27
27
  export { DisconnectAppToApiDialog } from "./DisconnectAppToApiDialog";
28
- export { MfaSettingsCard } from "./MfaSettingsCard";
29
- export { TotpEnrollmentDialog } from "./TotpEnrollmentDialog";
30
- export { RecoveryCodesPanel } from "./RecoveryCodesPanel";
31
28
  export { MfaChallengeForm } from "./MfaChallengeForm";
32
29
  export { MfaFactorPicker, MFA_FACTOR_TYPE_LABELS, labelForFactorType, } from "./MfaFactorPicker";
33
- export { MfaRemoveFactorDialog } from "./MfaRemoveFactorDialog";
34
- export { MfaRegenerateRecoveryCodesDialog } from "./MfaRegenerateRecoveryCodesDialog";
35
30
  export { AuthActionButtons } from "./AuthActionButtons";
36
31
  //# sourceMappingURL=index.js.map
@@ -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,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"}
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,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAM3B,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.13",
3
+ "version": "0.10.1",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "description": "React.js UI components for authentication/authorization shared between different SchemaVaults apps",
@@ -16,10 +16,10 @@
16
16
  "react": "^19.2.6",
17
17
  "react-dom": "^19.2.6",
18
18
  "next": "^16.2.6",
19
- "@schemavaults/ui": "^0.54.3",
20
- "@schemavaults/auth-react-provider": "0.12.11",
19
+ "@schemavaults/ui": "^0.63.0",
20
+ "@schemavaults/auth-react-provider": "0.13.0",
21
21
  "@schemavaults/app-definitions": "0.7.1",
22
- "@schemavaults/auth-common": "0.12.15",
22
+ "@schemavaults/auth-common": "0.13.0",
23
23
  "lucide-react": "0.575.0",
24
24
  "swr": "2.3.4",
25
25
  "postcss": "8.5.3",
@@ -1,2 +0,0 @@
1
- export { MfaRegenerateRecoveryCodesDialog, default, } from "./mfa-regenerate-recovery-codes-dialog";
2
- export type { MfaRegenerateRecoveryCodesDialogProps } from "./mfa-regenerate-recovery-codes-dialog";
@@ -1,2 +0,0 @@
1
- export { MfaRegenerateRecoveryCodesDialog, default, } from "./mfa-regenerate-recovery-codes-dialog";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/MfaRegenerateRecoveryCodesDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,OAAO,GACR,MAAM,wCAAwC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { type FC } from "react";
2
- export interface MfaRegenerateRecoveryCodesDialogProps {
3
- open: boolean;
4
- factor_id: string;
5
- onClose: () => void;
6
- }
7
- export declare const MfaRegenerateRecoveryCodesDialog: FC<MfaRegenerateRecoveryCodesDialogProps>;
8
- export default MfaRegenerateRecoveryCodesDialog;
@@ -1,34 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, } from "@schemavaults/ui";
5
- import { useMfa } from "@schemavaults/auth-react-provider";
6
- import { Check, RefreshCw, X } from "lucide-react";
7
- import { RecoveryCodesPanel } from "../RecoveryCodesPanel";
8
- export const MfaRegenerateRecoveryCodesDialog = ({ open, factor_id, onClose }) => {
9
- const { regenerateRecoveryCodes } = useMfa();
10
- const [code, setCode] = useState("");
11
- const [submitting, setSubmitting] = useState(false);
12
- const [error, setError] = useState(null);
13
- const [newCodes, setNewCodes] = useState(null);
14
- const [acknowledged, setAcknowledged] = useState(false);
15
- const handleConfirm = async () => {
16
- setSubmitting(true);
17
- setError(null);
18
- try {
19
- const res = await regenerateRecoveryCodes(factor_id, code);
20
- setNewCodes(res.recovery_codes);
21
- }
22
- catch (e) {
23
- setError(e instanceof Error ? e.message : "Failed to regenerate codes");
24
- }
25
- finally {
26
- setSubmitting(false);
27
- }
28
- };
29
- return (_jsx(Dialog, { open: open, onOpenChange: (v) => !v && onClose(), children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Regenerate recovery codes" }), _jsx(DialogDescription, { children: newCodes
30
- ? "Save the new codes. The previous set is no longer valid."
31
- : "Enter your current 6-digit authenticator code to generate a new set of recovery codes. This invalidates all previous codes." })] }), newCodes ? (_jsx(RecoveryCodesPanel, { codes: newCodes, onAcknowledge: setAcknowledged })) : (_jsxs(_Fragment, { children: [_jsx(Input, { inputMode: "numeric", autoComplete: "one-time-code", maxLength: 6, value: code, onChange: (e) => setCode(e.target.value.replace(/\D+/g, "")), placeholder: "123456", "data-testid": "mfa-regenerate-code-input" }), error && _jsx("p", { className: "text-sm text-destructive", children: error })] })), _jsx(DialogFooter, { children: newCodes ? (_jsxs(Button, { onClick: onClose, disabled: !acknowledged, "data-testid": "mfa-regenerate-done", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Check, { className: "h-4 w-4" }), "Done"] })) : (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "outline", onClick: onClose, disabled: submitting, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(X, { className: "h-4 w-4" }), "Cancel"] }), _jsxs(Button, { onClick: handleConfirm, disabled: submitting || code.length !== 6, "data-testid": "mfa-regenerate-confirm", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(RefreshCw, { className: "h-4 w-4" }), submitting ? "Generating…" : "Generate new codes"] })] })) })] }) }));
32
- };
33
- export default MfaRegenerateRecoveryCodesDialog;
34
- //# sourceMappingURL=mfa-regenerate-recovery-codes-dialog.js.map
@@ -1 +0,0 @@
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,2 +0,0 @@
1
- export { MfaRemoveFactorDialog, default, } from "./mfa-remove-factor-dialog";
2
- export type { MfaRemoveFactorDialogProps } from "./mfa-remove-factor-dialog";
@@ -1,2 +0,0 @@
1
- export { MfaRemoveFactorDialog, default, } from "./mfa-remove-factor-dialog";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/MfaRemoveFactorDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,OAAO,GACR,MAAM,4BAA4B,CAAC"}
@@ -1,8 +0,0 @@
1
- import { type FC } from "react";
2
- export interface MfaRemoveFactorDialogProps {
3
- open: boolean;
4
- factor_id: string;
5
- onClose: () => void;
6
- }
7
- export declare const MfaRemoveFactorDialog: FC<MfaRemoveFactorDialogProps>;
8
- export default MfaRemoveFactorDialog;
@@ -1,29 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, } from "@schemavaults/ui";
5
- import { useMfa } from "@schemavaults/auth-react-provider";
6
- import { Trash2, X } from "lucide-react";
7
- export const MfaRemoveFactorDialog = ({ open, factor_id, onClose, }) => {
8
- const { removeFactor } = useMfa();
9
- const [code, setCode] = useState("");
10
- const [submitting, setSubmitting] = useState(false);
11
- const [error, setError] = useState(null);
12
- const handleConfirm = async () => {
13
- setSubmitting(true);
14
- setError(null);
15
- try {
16
- await removeFactor(factor_id, code);
17
- onClose();
18
- }
19
- catch (e) {
20
- setError(e instanceof Error ? e.message : "Failed to remove factor");
21
- }
22
- finally {
23
- setSubmitting(false);
24
- }
25
- };
26
- return (_jsx(Dialog, { open: open, onOpenChange: (v) => !v && onClose(), children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Remove authenticator" }), _jsx(DialogDescription, { children: "Enter your current 6-digit authenticator code to confirm. Removing the authenticator also invalidates your recovery codes." })] }), _jsx(Input, { inputMode: "numeric", autoComplete: "one-time-code", maxLength: 6, value: code, onChange: (e) => setCode(e.target.value.replace(/\D+/g, "")), placeholder: "123456", "data-testid": "mfa-remove-factor-code" }), error && _jsx("p", { className: "text-sm text-destructive", children: error }), _jsxs(DialogFooter, { children: [_jsxs(Button, { variant: "outline", onClick: onClose, disabled: submitting, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(X, { className: "h-4 w-4" }), "Cancel"] }), _jsxs(Button, { variant: "destructive", onClick: handleConfirm, disabled: submitting || code.length !== 6, "data-testid": "mfa-remove-factor-confirm", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Trash2, { className: "h-4 w-4" }), submitting ? "Removing…" : "Remove"] })] })] }) }));
27
- };
28
- export default MfaRemoveFactorDialog;
29
- //# sourceMappingURL=mfa-remove-factor-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mfa-remove-factor-dialog.js","sourceRoot":"","sources":["../../../src/components/MfaRemoveFactorDialog/mfa-remove-factor-dialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAA8B,MAAM,OAAO,CAAC;AAC7D,OAAO,EACL,MAAM,EACN,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,KAAK,GACN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAQzC,MAAM,CAAC,MAAM,qBAAqB,GAAmC,CAAC,EACpE,IAAI,EACJ,SAAS,EACT,OAAO,GACR,EAAgB,EAAE;IACjB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;IAClC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACvE,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,YACtD,MAAC,aAAa,eACZ,MAAC,YAAY,eACX,KAAC,WAAW,uCAAmC,EAC/C,KAAC,iBAAiB,6IAIE,IACP,EACf,KAAC,KAAK,IACJ,SAAS,EAAC,SAAS,EACnB,YAAY,EAAC,eAAe,EAC5B,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAC5D,WAAW,EAAC,QAAQ,iBACR,wBAAwB,GACpC,EACD,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAK,EAC7D,MAAC,YAAY,eACX,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,iCAAiC,aAE3C,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,cAElB,EACT,MAAC,MAAM,IACL,OAAO,EAAC,aAAa,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,iBAC7B,2BAA2B,EACvC,SAAS,EAAC,iCAAiC,aAE3C,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,GAAG,EAC7B,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,IAC7B,IACI,IACD,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { MfaSettingsCard, default } from "./mfa-settings-card";
2
- export type { MfaSettingsCardProps } from "./mfa-settings-card";
@@ -1,2 +0,0 @@
1
- export { MfaSettingsCard, default } from "./mfa-settings-card";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/MfaSettingsCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,6 +0,0 @@
1
- import { type FC } from "react";
2
- export interface MfaSettingsCardProps {
3
- className?: string;
4
- }
5
- export declare const MfaSettingsCard: FC<MfaSettingsCardProps>;
6
- export default MfaSettingsCard;
@@ -1,28 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
5
- import { useMfa, useMfaFactorStatusSwr, } from "@schemavaults/auth-react-provider";
6
- import { ShieldCheck, ShieldAlert, KeyRound, ShieldOff, Smartphone, } from "lucide-react";
7
- import { TotpEnrollmentDialog } from "../TotpEnrollmentDialog";
8
- import { MfaRemoveFactorDialog } from "../MfaRemoveFactorDialog";
9
- import { MfaRegenerateRecoveryCodesDialog } from "../MfaRegenerateRecoveryCodesDialog";
10
- export const MfaSettingsCard = ({ className, }) => {
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");
18
- const [enrolling, setEnrolling] = useState(false);
19
- const [removing, setRemoving] = useState(false);
20
- const [regenerating, setRegenerating] = useState(false);
21
- const isLoading = aggregateLoading || totpLoading;
22
- const enabled = !!totpStatus?.enabled;
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
24
- ? "An authenticator app is required at sign-in."
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) }))] }));
26
- };
27
- export default MfaSettingsCard;
28
- //# sourceMappingURL=mfa-settings-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mfa-settings-card.js","sourceRoot":"","sources":["../../../src/components/MfaSettingsCard/mfa-settings-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAA8B,MAAM,OAAO,CAAC;AAC7D,OAAO,EACL,MAAM,EACN,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,EACT,EAAE,GACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AAMvF,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,EACxD,SAAS,GACV,EAAgB,EAAE;IACjB,uEAAuE;IACvE,oEAAoE;IACpE,mEAAmE;IACnE,oEAAoE;IACpE,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAAC;IACzD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,gBAAgB,IAAI,WAAW,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC;IAEtC,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,aACtC,MAAC,UAAU,eACT,MAAC,SAAS,IAAC,SAAS,EAAC,yBAAyB,aAC3C,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,WAAW,IAAC,SAAS,EAAC,0BAA0B,GAAG,CACrD,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,+BAA+B,GAAG,CAC1D,mCAES,EACZ,KAAC,eAAe,cACb,OAAO;4BACN,CAAC,CAAC,8CAA8C;4BAChD,CAAC,CAAC,8CAA8C,GAClC,IACP,EACb,KAAC,WAAW,cACT,SAAS,CAAC,CAAC,CAAC,CACX,YAAG,SAAS,EAAC,+BAA+B,qCAAoB,CACjE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,eAAK,SAAS,EAAC,mBAAmB,aAChC,0BACE,uCAAwB,uBACpB,EACL,OAAO,MAAM,EAAE,wBAAwB,KAAK,QAAQ,IAAI,CACvD,0BACE,yDAA0C,EAAC,GAAG,EAC7C,MAAM,CAAC,wBAAwB,IAC5B,CACP,EACA,OAAO,UAAU,EAAE,WAAW,KAAK,QAAQ,IAAI,CAC9C,eAAK,SAAS,EAAC,uBAAuB,2BACzB,GAAG,EACb,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,IAC9C,CACP,IACG,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,+BAA+B,8DAExC,CACL,GACW,EACd,KAAC,UAAU,IAAC,SAAS,EAAC,sBAAsB,YACzC,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EACpC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAC,iCAAiC,aAE3C,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,GAAG,iCAEzB,EACT,MAAC,MAAM,IACL,OAAO,EAAC,aAAa,EACrB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,iCAAiC,aAE3C,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,4BAE1B,IACR,CACJ,CAAC,CAAC,CAAC,CACF,MAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACjC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAC,iCAAiC,aAE3C,KAAC,UAAU,IAAC,SAAS,EAAC,SAAS,GAAG,gCAE3B,CACV,GACU,EACZ,SAAS,IAAI,CACZ,KAAC,oBAAoB,IACnB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,GAClC,CACH,EACA,QAAQ,IAAI,UAAU,EAAE,SAAS,IAAI,CACpC,KAAC,qBAAqB,IACpB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,GACjC,CACH,EACA,YAAY,IAAI,UAAU,EAAE,SAAS,IAAI,CACxC,KAAC,gCAAgC,IAC/B,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,UAAU,CAAC,SAAS,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,GACrC,CACH,IACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,2 +0,0 @@
1
- export { RecoveryCodesPanel, default } from "./recovery-codes-panel";
2
- export type { RecoveryCodesPanelProps } from "./recovery-codes-panel";
@@ -1,2 +0,0 @@
1
- export { RecoveryCodesPanel, default } from "./recovery-codes-panel";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/RecoveryCodesPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { type FC } from "react";
2
- export interface RecoveryCodesPanelProps {
3
- codes: readonly string[];
4
- onAcknowledge?: (acknowledged: boolean) => void;
5
- className?: string;
6
- }
7
- export declare const RecoveryCodesPanel: FC<RecoveryCodesPanelProps>;
8
- export default RecoveryCodesPanel;
@@ -1,37 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useCallback } from "react";
4
- import { Button, Checkbox, cn, } from "@schemavaults/ui";
5
- import { ClipboardCopy, Download } from "lucide-react";
6
- export const RecoveryCodesPanel = ({ codes, onAcknowledge, className, }) => {
7
- const [acknowledged, setAcknowledged] = useState(false);
8
- const handleAck = useCallback((next) => {
9
- setAcknowledged(next);
10
- if (onAcknowledge)
11
- onAcknowledge(next);
12
- }, [onAcknowledge]);
13
- const handleCopy = useCallback(async () => {
14
- try {
15
- await navigator.clipboard.writeText(codes.join("\n"));
16
- }
17
- catch (e) {
18
- console.warn("Failed to copy recovery codes", e);
19
- }
20
- }, [codes]);
21
- const handleDownload = useCallback(() => {
22
- const blob = new Blob([codes.join("\n")], {
23
- type: "text/plain;charset=utf-8",
24
- });
25
- const url = URL.createObjectURL(blob);
26
- const a = document.createElement("a");
27
- a.href = url;
28
- a.download = "schemavaults-mfa-recovery-codes.txt";
29
- document.body.appendChild(a);
30
- a.click();
31
- document.body.removeChild(a);
32
- URL.revokeObjectURL(url);
33
- }, [codes]);
34
- return (_jsxs("div", { className: cn("space-y-3", className), children: [_jsx("div", { className: "rounded border border-amber-300 bg-amber-50 p-3 text-sm text-amber-900 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-200", children: "These recovery codes are shown only once. Save them now \u2014 each can be used in place of an authenticator code if you lose your device." }), _jsx("div", { "data-testid": "mfa-recovery-codes-list", className: "grid grid-cols-2 gap-2 rounded border bg-muted p-3 font-mono text-sm", children: codes.map((code, idx) => (_jsx("div", { className: "select-all", children: code }, `${code}-${idx}`))) }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { variant: "outline", type: "button", onClick: handleCopy, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ClipboardCopy, { className: "h-4 w-4" }), "Copy all"] }), _jsxs(Button, { variant: "outline", type: "button", onClick: handleDownload, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Download, { className: "h-4 w-4" }), "Download .txt"] })] }), _jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { id: "mfa-recovery-codes-acknowledge", checked: acknowledged, onCheckedChange: (v) => handleAck(v === true), "data-testid": "mfa-recovery-codes-acknowledge" }), _jsx("label", { htmlFor: "mfa-recovery-codes-acknowledge", children: "I have saved these recovery codes somewhere safe." })] })] }));
35
- };
36
- export default RecoveryCodesPanel;
37
- //# sourceMappingURL=recovery-codes-panel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recovery-codes-panel.js","sourceRoot":"","sources":["../../../src/components/RecoveryCodesPanel/recovery-codes-panel.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export { TotpEnrollmentDialog, default } from "./totp-enrollment-dialog";
2
- export type { TotpEnrollmentDialogProps } from "./totp-enrollment-dialog";
@@ -1,2 +0,0 @@
1
- export { TotpEnrollmentDialog, default } from "./totp-enrollment-dialog";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/TotpEnrollmentDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,7 +0,0 @@
1
- import { type FC } from "react";
2
- export interface TotpEnrollmentDialogProps {
3
- open: boolean;
4
- onClose: () => void;
5
- }
6
- export declare const TotpEnrollmentDialog: FC<TotpEnrollmentDialogProps>;
7
- export default TotpEnrollmentDialog;
@@ -1,64 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useState } from "react";
4
- import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, useToast, } from "@schemavaults/ui";
5
- import { useMfa } from "@schemavaults/auth-react-provider";
6
- import { Check, ShieldCheck, X } from "lucide-react";
7
- import { RecoveryCodesPanel } from "../RecoveryCodesPanel";
8
- export const TotpEnrollmentDialog = ({ open, onClose, }) => {
9
- const { enrollTotp, confirmTotpEnrollment } = useMfa();
10
- const { toast } = useToast();
11
- const [step, setStep] = useState("loading");
12
- const [enrollment, setEnrollment] = useState(null);
13
- const [code, setCode] = useState("");
14
- const [recoveryCodes, setRecoveryCodes] = useState([]);
15
- const [error, setError] = useState(null);
16
- const [submitting, setSubmitting] = useState(false);
17
- const [acknowledged, setAcknowledged] = useState(false);
18
- useEffect(() => {
19
- let cancelled = false;
20
- if (open && step === "loading") {
21
- void enrollTotp()
22
- .then((res) => {
23
- if (cancelled)
24
- return;
25
- setEnrollment(res);
26
- setStep("scan");
27
- })
28
- .catch((e) => {
29
- if (cancelled)
30
- return;
31
- setError(e instanceof Error ? e.message : "Failed to start enrollment");
32
- setStep("error");
33
- });
34
- }
35
- return () => {
36
- cancelled = true;
37
- };
38
- }, [open, step, enrollTotp]);
39
- const handleConfirm = async () => {
40
- if (!enrollment)
41
- return;
42
- setSubmitting(true);
43
- setError(null);
44
- try {
45
- const result = await confirmTotpEnrollment(enrollment.factor_id, code);
46
- setRecoveryCodes(result.recovery_codes);
47
- setStep("recovery");
48
- toast({
49
- variant: "default",
50
- title: "Multi-factor authentication enabled",
51
- description: "Your authenticator app is now required at sign-in. Save the recovery codes before closing this dialog.",
52
- });
53
- }
54
- catch (e) {
55
- setError(e instanceof Error ? e.message : "Failed to confirm authenticator code");
56
- }
57
- finally {
58
- setSubmitting(false);
59
- }
60
- };
61
- return (_jsx(Dialog, { open: open, onOpenChange: (v) => !v && onClose(), children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Set up an authenticator app" }), _jsx(DialogDescription, { children: "Scan the QR code with your authenticator app, then enter the 6-digit code it generates." })] }), step === "loading" && (_jsx("p", { className: "text-sm text-muted-foreground", children: "Starting enrollment\u2026" })), step === "error" && (_jsx("p", { className: "text-sm text-destructive", children: error ?? "Unknown error" })), step === "scan" && enrollment && (_jsxs("div", { className: "space-y-3", children: [_jsx("img", { src: enrollment.qr_code_data_url, alt: "TOTP QR code", className: "mx-auto h-56 w-56", "data-testid": "mfa-enroll-qr" }), _jsxs("details", { className: "text-xs text-muted-foreground", children: [_jsx("summary", { className: "cursor-pointer", children: "Can't scan? Show secret" }), _jsx("code", { className: "mt-1 block break-all rounded bg-muted p-2 font-mono", children: enrollment.secret })] }), _jsx(Input, { inputMode: "numeric", autoComplete: "one-time-code", maxLength: 6, value: code, onChange: (e) => setCode(e.target.value.replace(/\D+/g, "")), placeholder: "123456", "data-testid": "mfa-enroll-code-input" }), error && _jsx("p", { className: "text-sm text-destructive", children: error }), _jsxs(DialogFooter, { children: [_jsxs(Button, { variant: "outline", onClick: onClose, disabled: submitting, className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(X, { className: "h-4 w-4" }), "Cancel"] }), _jsxs(Button, { onClick: handleConfirm, disabled: submitting || code.length !== 6, "data-testid": "mfa-enroll-confirm", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(ShieldCheck, { className: "h-4 w-4" }), submitting ? "Verifying…" : "Verify code"] })] })] })), step === "recovery" && (_jsxs("div", { className: "space-y-3", children: [_jsx(RecoveryCodesPanel, { codes: recoveryCodes, onAcknowledge: setAcknowledged }), _jsx(DialogFooter, { children: _jsxs(Button, { onClick: onClose, disabled: !acknowledged, "data-testid": "mfa-enroll-done", className: "flex flex-row gap-2 flex-nowrap", children: [_jsx(Check, { className: "h-4 w-4" }), "Done"] }) })] }))] }) }));
62
- };
63
- export default TotpEnrollmentDialog;
64
- //# sourceMappingURL=totp-enrollment-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"totp-enrollment-dialog.js","sourceRoot":"","sources":["../../../src/components/TotpEnrollmentDialog/totp-enrollment-dialog.tsx"],"names":[],"mappings":"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"}