@fayz-ai/auth 0.47.0 → 0.48.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.
Files changed (136) hide show
  1. package/README.md +4 -0
  2. package/dist/chunk-2MO4QTQA.js +78 -0
  3. package/dist/chunk-2MO4QTQA.js.map +1 -0
  4. package/dist/chunk-2S7KVJQO.js +18 -0
  5. package/dist/chunk-2S7KVJQO.js.map +1 -0
  6. package/dist/chunk-4HVM2UJS.js +30 -0
  7. package/dist/chunk-4HVM2UJS.js.map +1 -0
  8. package/dist/chunk-55RFOMW5.js +15 -0
  9. package/dist/chunk-55RFOMW5.js.map +1 -0
  10. package/dist/chunk-7JYNJQJJ.js +138 -0
  11. package/dist/chunk-7JYNJQJJ.js.map +1 -0
  12. package/dist/chunk-BGCCXJJA.js +174 -0
  13. package/dist/chunk-BGCCXJJA.js.map +1 -0
  14. package/dist/chunk-CV4LQYNX.js +109 -0
  15. package/dist/chunk-CV4LQYNX.js.map +1 -0
  16. package/dist/chunk-ERIPMYL2.js +137 -0
  17. package/dist/chunk-ERIPMYL2.js.map +1 -0
  18. package/dist/chunk-HKILBDG2.js +158 -0
  19. package/dist/chunk-HKILBDG2.js.map +1 -0
  20. package/dist/chunk-KLQDHFVS.js +11 -0
  21. package/dist/chunk-KLQDHFVS.js.map +1 -0
  22. package/dist/chunk-OI74ER2Z.js +31 -0
  23. package/dist/chunk-OI74ER2Z.js.map +1 -0
  24. package/dist/chunk-Q6DFI35B.js +187 -0
  25. package/dist/chunk-Q6DFI35B.js.map +1 -0
  26. package/dist/chunk-QJRTW7Q3.js +90 -0
  27. package/dist/chunk-QJRTW7Q3.js.map +1 -0
  28. package/dist/chunk-REU4D5UF.js +44 -0
  29. package/dist/chunk-REU4D5UF.js.map +1 -0
  30. package/dist/chunk-SMFXGZN7.js +18 -0
  31. package/dist/chunk-SMFXGZN7.js.map +1 -0
  32. package/dist/chunk-W35GQEGU.js +80 -0
  33. package/dist/chunk-W35GQEGU.js.map +1 -0
  34. package/dist/chunk-W7565FXD.js +64 -0
  35. package/dist/chunk-W7565FXD.js.map +1 -0
  36. package/dist/chunk-WZVZMNLB.js +48 -0
  37. package/dist/chunk-WZVZMNLB.js.map +1 -0
  38. package/dist/components/AmbassadorBubbles.d.ts +9 -0
  39. package/dist/components/AmbassadorBubbles.d.ts.map +1 -0
  40. package/dist/components/AmbassadorBubbles.js +3 -0
  41. package/dist/components/AmbassadorBubbles.js.map +1 -0
  42. package/dist/components/TrialPromise.d.ts +12 -0
  43. package/dist/components/TrialPromise.d.ts.map +1 -0
  44. package/dist/components/TrialPromise.js +3 -0
  45. package/dist/components/TrialPromise.js.map +1 -0
  46. package/dist/components/form-classes.d.ts +3 -0
  47. package/dist/components/form-classes.d.ts.map +1 -0
  48. package/dist/components/form-classes.js +3 -0
  49. package/dist/components/form-classes.js.map +1 -0
  50. package/dist/context.js +5 -0
  51. package/dist/context.js.map +1 -0
  52. package/dist/data/mock.d.ts.map +1 -0
  53. package/dist/data/mock.js +3 -0
  54. package/dist/data/mock.js.map +1 -0
  55. package/dist/data/supabase.d.ts.map +1 -0
  56. package/dist/data/supabase.js +4 -0
  57. package/dist/data/supabase.js.map +1 -0
  58. package/dist/domain/auth-config.d.ts +71 -0
  59. package/dist/domain/auth-config.d.ts.map +1 -0
  60. package/dist/domain/auth-config.js +3 -0
  61. package/dist/domain/auth-config.js.map +1 -0
  62. package/dist/domain/auth-link.d.ts +26 -0
  63. package/dist/domain/auth-link.d.ts.map +1 -0
  64. package/dist/domain/auth-link.js +3 -0
  65. package/dist/domain/auth-link.js.map +1 -0
  66. package/dist/domain/password.d.ts +5 -0
  67. package/dist/domain/password.d.ts.map +1 -0
  68. package/dist/domain/password.js +3 -0
  69. package/dist/domain/password.js.map +1 -0
  70. package/dist/index.d.ts +8 -6
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +6 -573
  73. package/dist/index.js.map +1 -1
  74. package/dist/lib/runtime.d.ts +6 -0
  75. package/dist/lib/runtime.d.ts.map +1 -0
  76. package/dist/lib/runtime.js +51 -0
  77. package/dist/lib/runtime.js.map +1 -0
  78. package/dist/lib/url-intent.d.ts +1 -25
  79. package/dist/lib/url-intent.d.ts.map +1 -1
  80. package/dist/lib/url-intent.js +3 -0
  81. package/dist/lib/url-intent.js.map +1 -0
  82. package/dist/store.js +3 -0
  83. package/dist/store.js.map +1 -0
  84. package/dist/views/AuthCallbackPage.d.ts +7 -0
  85. package/dist/views/AuthCallbackPage.d.ts.map +1 -0
  86. package/dist/views/AuthCallbackPage.js +33 -0
  87. package/dist/views/AuthCallbackPage.js.map +1 -0
  88. package/dist/views/AuthGate.d.ts +9 -0
  89. package/dist/views/AuthGate.d.ts.map +1 -0
  90. package/dist/views/AuthGate.js +28 -0
  91. package/dist/views/AuthGate.js.map +1 -0
  92. package/dist/views/ForgotPasswordForm.d.ts +18 -0
  93. package/dist/views/ForgotPasswordForm.d.ts.map +1 -0
  94. package/dist/views/ForgotPasswordForm.js +7 -0
  95. package/dist/views/ForgotPasswordForm.js.map +1 -0
  96. package/dist/views/LoginForm.d.ts +16 -0
  97. package/dist/views/LoginForm.d.ts.map +1 -0
  98. package/dist/views/LoginForm.js +8 -0
  99. package/dist/views/LoginForm.js.map +1 -0
  100. package/dist/views/LoginPage.d.ts +34 -0
  101. package/dist/views/LoginPage.d.ts.map +1 -0
  102. package/dist/views/LoginPage.js +16 -0
  103. package/dist/views/LoginPage.js.map +1 -0
  104. package/dist/views/OAuthButtons.d.ts +18 -0
  105. package/dist/views/OAuthButtons.d.ts.map +1 -0
  106. package/dist/views/OAuthButtons.js +7 -0
  107. package/dist/views/OAuthButtons.js.map +1 -0
  108. package/dist/views/ResetPasswordForm.d.ts +6 -0
  109. package/dist/views/ResetPasswordForm.d.ts.map +1 -0
  110. package/dist/views/ResetPasswordForm.js +53 -0
  111. package/dist/views/ResetPasswordForm.js.map +1 -0
  112. package/dist/views/ResetPasswordPage.d.ts +7 -0
  113. package/dist/views/ResetPasswordPage.d.ts.map +1 -0
  114. package/dist/views/ResetPasswordPage.js +16 -0
  115. package/dist/views/ResetPasswordPage.js.map +1 -0
  116. package/dist/views/SetPasswordPage.d.ts +15 -0
  117. package/dist/views/SetPasswordPage.d.ts.map +1 -0
  118. package/dist/views/SetPasswordPage.js +9 -0
  119. package/dist/views/SetPasswordPage.js.map +1 -0
  120. package/dist/views/SignupForm.d.ts +24 -0
  121. package/dist/views/SignupForm.d.ts.map +1 -0
  122. package/dist/views/SignupForm.js +9 -0
  123. package/dist/views/SignupForm.js.map +1 -0
  124. package/dist/views/VerifyEmailNotice.d.ts +15 -0
  125. package/dist/views/VerifyEmailNotice.d.ts.map +1 -0
  126. package/dist/views/VerifyEmailNotice.js +6 -0
  127. package/dist/views/VerifyEmailNotice.js.map +1 -0
  128. package/dist/views/usePasswordSetupGate.d.ts +20 -0
  129. package/dist/views/usePasswordSetupGate.d.ts.map +1 -0
  130. package/dist/views/usePasswordSetupGate.js +27 -0
  131. package/dist/views/usePasswordSetupGate.js.map +1 -0
  132. package/package.json +14 -3
  133. package/dist/adapters/mock.d.ts.map +0 -1
  134. package/dist/adapters/supabase.d.ts.map +0 -1
  135. /package/dist/{adapters → data}/mock.d.ts +0 -0
  136. /package/dist/{adapters → data}/supabase.d.ts +0 -0
@@ -0,0 +1,53 @@
1
+ import { newPasswordProblem } from '../chunk-KLQDHFVS.js';
2
+ import { useAuth } from '../chunk-Q6DFI35B.js';
3
+ import '../chunk-OI74ER2Z.js';
4
+ import { fieldClass, buttonClass } from '../chunk-55RFOMW5.js';
5
+ import '../chunk-2MO4QTQA.js';
6
+ import * as React from 'react';
7
+ import { tl } from '@fayz-ai/core';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ function ResetPasswordForm({ onSuccess }) {
11
+ const { updatePassword, error, isLoading } = useAuth();
12
+ const [password, setPassword] = React.useState("");
13
+ const [confirmPassword, setConfirmPassword] = React.useState("");
14
+ const [localError, setLocalError] = React.useState(null);
15
+ const [busy, setBusy] = React.useState(false);
16
+ const disabled = busy || isLoading;
17
+ async function submit(event) {
18
+ event.preventDefault();
19
+ setLocalError(null);
20
+ const problem = newPasswordProblem(password, confirmPassword);
21
+ if (problem === "too-short") {
22
+ setLocalError(tl("Password must be at least 8 characters.", "A senha precisa ter pelo menos 8 caracteres."));
23
+ return;
24
+ }
25
+ if (problem === "mismatch") {
26
+ setLocalError(tl("Passwords do not match.", "As senhas n\xE3o conferem."));
27
+ return;
28
+ }
29
+ setBusy(true);
30
+ try {
31
+ await updatePassword(password);
32
+ onSuccess?.();
33
+ } finally {
34
+ setBusy(false);
35
+ }
36
+ }
37
+ return /* @__PURE__ */ jsxs("form", { onSubmit: submit, className: "space-y-4", children: [
38
+ /* @__PURE__ */ jsxs("label", { className: "block space-y-1.5 text-sm font-medium", children: [
39
+ /* @__PURE__ */ jsx("span", { children: tl("New password", "Nova senha") }),
40
+ /* @__PURE__ */ jsx("input", { className: fieldClass(), type: "password", autoComplete: "new-password", required: true, value: password, onChange: (e) => setPassword(e.target.value), disabled })
41
+ ] }),
42
+ /* @__PURE__ */ jsxs("label", { className: "block space-y-1.5 text-sm font-medium", children: [
43
+ /* @__PURE__ */ jsx("span", { children: tl("Confirm password", "Confirme a senha") }),
44
+ /* @__PURE__ */ jsx("input", { className: fieldClass(), type: "password", autoComplete: "new-password", required: true, value: confirmPassword, onChange: (e) => setConfirmPassword(e.target.value), disabled })
45
+ ] }),
46
+ (localError || error) && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive", children: localError ?? error?.message }),
47
+ /* @__PURE__ */ jsx("button", { className: buttonClass(), type: "submit", disabled, children: disabled ? tl("Saving...", "Salvando...") : tl("Update password", "Atualizar senha") })
48
+ ] });
49
+ }
50
+
51
+ export { ResetPasswordForm };
52
+ //# sourceMappingURL=ResetPasswordForm.js.map
53
+ //# sourceMappingURL=ResetPasswordForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/views/ResetPasswordForm.tsx"],"names":[],"mappings":"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","file":"ResetPasswordForm.js","sourcesContent":["import * as React from 'react'\nimport { tl } from '@fayz-ai/core'\nimport { useAuth } from '../context'\nimport { newPasswordProblem } from '../domain/password'\nimport { buttonClass, fieldClass } from '../components/form-classes'\n\nexport interface ResetPasswordFormProps {\n onSuccess?: () => void\n}\n\nexport function ResetPasswordForm({ onSuccess }: ResetPasswordFormProps) {\n const { updatePassword, error, isLoading } = useAuth()\n const [password, setPassword] = React.useState('')\n const [confirmPassword, setConfirmPassword] = React.useState('')\n const [localError, setLocalError] = React.useState<string | null>(null)\n const [busy, setBusy] = React.useState(false)\n const disabled = busy || isLoading\n\n async function submit(event: React.FormEvent) {\n event.preventDefault()\n setLocalError(null)\n const problem = newPasswordProblem(password, confirmPassword)\n if (problem === 'too-short') {\n setLocalError(tl('Password must be at least 8 characters.', 'A senha precisa ter pelo menos 8 caracteres.'))\n return\n }\n if (problem === 'mismatch') {\n setLocalError(tl('Passwords do not match.', 'As senhas não conferem.'))\n return\n }\n setBusy(true)\n try {\n await updatePassword(password)\n onSuccess?.()\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <form onSubmit={submit} className=\"space-y-4\">\n <label className=\"block space-y-1.5 text-sm font-medium\">\n <span>{tl('New password', 'Nova senha')}</span>\n <input className={fieldClass()} type=\"password\" autoComplete=\"new-password\" required value={password} onChange={(e) => setPassword(e.target.value)} disabled={disabled} />\n </label>\n <label className=\"block space-y-1.5 text-sm font-medium\">\n <span>{tl('Confirm password', 'Confirme a senha')}</span>\n <input className={fieldClass()} type=\"password\" autoComplete=\"new-password\" required value={confirmPassword} onChange={(e) => setConfirmPassword(e.target.value)} disabled={disabled} />\n </label>\n {(localError || error) && <p className=\"text-sm text-destructive\">{localError ?? error?.message}</p>}\n <button className={buttonClass()} type=\"submit\" disabled={disabled}>\n {disabled ? tl('Saving...', 'Salvando...') : tl('Update password', 'Atualizar senha')}\n </button>\n </form>\n )\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export interface ResetPasswordPageProps {
2
+ onSuccess?: () => void;
3
+ }
4
+ /** Kept for apps that route `/auth/reset-password` themselves. The shell no
5
+ * longer needs a route: SetPasswordPage is mounted by usePasswordSetupGate. */
6
+ export declare function ResetPasswordPage({ onSuccess }: ResetPasswordPageProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=ResetPasswordPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPasswordPage.d.ts","sourceRoot":"","sources":["../../src/views/ResetPasswordPage.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED;gFACgF;AAChF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,+BAEtE"}
@@ -0,0 +1,16 @@
1
+ import { SetPasswordPage } from '../chunk-ERIPMYL2.js';
2
+ import '../chunk-KLQDHFVS.js';
3
+ import '../chunk-W7565FXD.js';
4
+ import '../chunk-Q6DFI35B.js';
5
+ import '../chunk-OI74ER2Z.js';
6
+ import '../chunk-55RFOMW5.js';
7
+ import '../chunk-2MO4QTQA.js';
8
+ import { jsx } from 'react/jsx-runtime';
9
+
10
+ function ResetPasswordPage({ onSuccess }) {
11
+ return /* @__PURE__ */ jsx(SetPasswordPage, { reason: "recovery", onSuccess });
12
+ }
13
+
14
+ export { ResetPasswordPage };
15
+ //# sourceMappingURL=ResetPasswordPage.js.map
16
+ //# sourceMappingURL=ResetPasswordPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/views/ResetPasswordPage.tsx"],"names":[],"mappings":";;;;;;;;;AAQO,SAAS,iBAAA,CAAkB,EAAE,SAAA,EAAU,EAA2B;AACvE,EAAA,uBAAO,GAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAO,UAAA,EAAW,SAAA,EAAsB,CAAA;AAClE","file":"ResetPasswordPage.js","sourcesContent":["import { SetPasswordPage } from './SetPasswordPage'\n\nexport interface ResetPasswordPageProps {\n onSuccess?: () => void\n}\n\n/** Kept for apps that route `/auth/reset-password` themselves. The shell no\n * longer needs a route: SetPasswordPage is mounted by usePasswordSetupGate. */\nexport function ResetPasswordPage({ onSuccess }: ResetPasswordPageProps) {\n return <SetPasswordPage reason=\"recovery\" onSuccess={onSuccess} />\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import type { PasswordSetupReason } from '../domain/auth-link';
3
+ export type SetPasswordReason = PasswordSetupReason;
4
+ export interface SetPasswordPageProps {
5
+ reason: SetPasswordReason;
6
+ appName?: string;
7
+ logo?: React.ReactNode;
8
+ /** Show the "ask for a new link" form instead of the password fields. */
9
+ expired?: boolean;
10
+ /** Waiting on the link's session — renders a quiet placeholder. */
11
+ checking?: boolean;
12
+ onSuccess?: () => void;
13
+ }
14
+ export declare function SetPasswordPage({ reason, appName, logo, expired, checking, onSuccess, }: SetPasswordPageProps): React.JSX.Element;
15
+ //# sourceMappingURL=SetPasswordPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetPasswordPage.d.ts","sourceRoot":"","sources":["../../src/views/SetPasswordPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAK9D,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,CAAA;AAanD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAe,EACf,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,qBAgItB"}
@@ -0,0 +1,9 @@
1
+ export { SetPasswordPage } from '../chunk-ERIPMYL2.js';
2
+ import '../chunk-KLQDHFVS.js';
3
+ import '../chunk-W7565FXD.js';
4
+ import '../chunk-Q6DFI35B.js';
5
+ import '../chunk-OI74ER2Z.js';
6
+ import '../chunk-55RFOMW5.js';
7
+ import '../chunk-2MO4QTQA.js';
8
+ //# sourceMappingURL=SetPasswordPage.js.map
9
+ //# sourceMappingURL=SetPasswordPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SetPasswordPage.js"}
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import type { OAuthProviderKey } from '../domain/auth-config';
3
+ export interface SignupFormProps {
4
+ onSuccess?: () => void;
5
+ /** Same social buttons the sign-in form offers. Parity is the point: an
6
+ * account created with Google must be creatable from this side too. */
7
+ showOAuth?: boolean;
8
+ oauthProviders?: OAuthProviderKey[];
9
+ oauthComingSoon?: OAuthProviderKey[];
10
+ /**
11
+ * Ask for the password twice.
12
+ *
13
+ * Off by default, and that is a deliberate reversal: the field exists to
14
+ * catch a typo you cannot see, and a reveal toggle catches the same typo
15
+ * while REMOVING a field from the shortest form in the product. Apps that
16
+ * must keep it (an internal policy, an audit) turn it back on.
17
+ */
18
+ requireConfirmation?: boolean;
19
+ /** Terms and privacy, shown under the button when the app has them. */
20
+ termsUrl?: string;
21
+ privacyUrl?: string;
22
+ }
23
+ export declare function SignupForm({ onSuccess, showOAuth, oauthProviders, oauthComingSoon, requireConfirmation, termsUrl, privacyUrl, }: SignupFormProps): React.JSX.Element;
24
+ //# sourceMappingURL=SignupForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignupForm.d.ts","sourceRoot":"","sources":["../../src/views/SignupForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAK7D,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;4EACwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACnC,eAAe,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACpC;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,SAAS,EACT,cAAc,EACd,eAAe,EACf,mBAA2B,EAC3B,QAAQ,EACR,UAAU,GACX,EAAE,eAAe,qBAuJjB"}
@@ -0,0 +1,9 @@
1
+ export { SignupForm } from '../chunk-HKILBDG2.js';
2
+ import '../chunk-WZVZMNLB.js';
3
+ import '../chunk-KLQDHFVS.js';
4
+ import '../chunk-Q6DFI35B.js';
5
+ import '../chunk-OI74ER2Z.js';
6
+ import '../chunk-55RFOMW5.js';
7
+ import '../chunk-2MO4QTQA.js';
8
+ //# sourceMappingURL=SignupForm.js.map
9
+ //# sourceMappingURL=SignupForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SignupForm.js"}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ export interface VerifyEmailNoticeProps {
3
+ email: string;
4
+ /** Back to the sign-up form with the pending account abandoned. */
5
+ onUseAnotherEmail?: () => void;
6
+ }
7
+ /**
8
+ * "We sent you a link."
9
+ *
10
+ * The screen that has to exist for a confirm-email project: sign-up succeeds,
11
+ * but the account has no session until the link is clicked. Without it the flow
12
+ * ended on a form that appeared to do nothing.
13
+ */
14
+ export declare function VerifyEmailNotice({ email, onUseAnotherEmail }: VerifyEmailNoticeProps): React.JSX.Element;
15
+ //# sourceMappingURL=VerifyEmailNotice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerifyEmailNotice.d.ts","sourceRoot":"","sources":["../../src/views/VerifyEmailNotice.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,sBAAsB,qBAyFrF"}
@@ -0,0 +1,6 @@
1
+ export { VerifyEmailNotice } from '../chunk-QJRTW7Q3.js';
2
+ import '../chunk-Q6DFI35B.js';
3
+ import '../chunk-OI74ER2Z.js';
4
+ import '../chunk-2MO4QTQA.js';
5
+ //# sourceMappingURL=VerifyEmailNotice.js.map
6
+ //# sourceMappingURL=VerifyEmailNotice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"VerifyEmailNotice.js"}
@@ -0,0 +1,20 @@
1
+ import { type PasswordSetupReason } from '../domain/auth-link';
2
+ export interface PasswordSetupGate {
3
+ /** null when nothing is pending and the shell should render normally. */
4
+ reason: PasswordSetupReason | null;
5
+ /** The link is dead (already used / expired) — offer a fresh one instead. */
6
+ expired: boolean;
7
+ /** Still resolving the session the link carries. */
8
+ checking: boolean;
9
+ /** Called by the screen once the password is set (or the user gives up). */
10
+ complete: () => void;
11
+ }
12
+ /**
13
+ * Decides whether the user owes us a password before they see the app.
14
+ *
15
+ * The URL intent is read from a snapshot taken at module load: supabase-js wipes
16
+ * the token fragment as soon as it initialises, so the reason the user is here is
17
+ * gone by the time React renders.
18
+ */
19
+ export declare function usePasswordSetupGate(): PasswordSetupGate;
20
+ //# sourceMappingURL=usePasswordSetupGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePasswordSetupGate.d.ts","sourceRoot":"","sources":["../../src/views/usePasswordSetupGate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAGnF,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAClC,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAA;IAChB,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAA;IACjB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAmBxD"}
@@ -0,0 +1,27 @@
1
+ import { decidePasswordSetup } from '../chunk-2S7KVJQO.js';
2
+ import { useAuth } from '../chunk-Q6DFI35B.js';
3
+ import '../chunk-OI74ER2Z.js';
4
+ import { readAuthUrlIntent, clearAuthUrlTokens } from '../chunk-2MO4QTQA.js';
5
+ import * as React from 'react';
6
+
7
+ function usePasswordSetupGate() {
8
+ const { user, isLoading, isAuthenticated } = useAuth();
9
+ const [done, setDone] = React.useState(false);
10
+ const intent = React.useMemo(() => readAuthUrlIntent(), []);
11
+ const complete = React.useCallback(() => {
12
+ clearAuthUrlTokens();
13
+ setDone(true);
14
+ }, []);
15
+ if (done) return { reason: null, expired: false, checking: false, complete };
16
+ const decision = decidePasswordSetup({
17
+ intent,
18
+ isLoading,
19
+ isAuthenticated,
20
+ mustSetPassword: user?.mustSetPassword
21
+ });
22
+ return { ...decision, complete };
23
+ }
24
+
25
+ export { usePasswordSetupGate };
26
+ //# sourceMappingURL=usePasswordSetupGate.js.map
27
+ //# sourceMappingURL=usePasswordSetupGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/views/usePasswordSetupGate.ts"],"names":[],"mappings":";;;;;;AAuBO,SAAS,oBAAA,GAA0C;AACxD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,eAAA,KAAoB,OAAA,EAAQ;AACrD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAe,KAAA,CAAA,OAAA,CAAQ,MAAM,iBAAA,EAAkB,EAAG,EAAE,CAAA;AAE1D,EAAA,MAAM,QAAA,GAAiB,kBAAY,MAAM;AACvC,IAAA,kBAAA,EAAmB;AACnB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,IAAA,SAAa,EAAE,MAAA,EAAQ,MAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAE3E,EAAA,MAAM,WAAW,mBAAA,CAAoB;AAAA,IACnC,MAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAiB,IAAA,EAAM;AAAA,GACxB,CAAA;AACD,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,QAAA,EAAS;AACjC","file":"usePasswordSetupGate.js","sourcesContent":["import * as React from 'react'\nimport { useAuth } from '../context'\nimport { decidePasswordSetup, type PasswordSetupReason } from '../domain/auth-link'\nimport { clearAuthUrlTokens, readAuthUrlIntent } from '../lib/url-intent'\n\nexport interface PasswordSetupGate {\n /** null when nothing is pending and the shell should render normally. */\n reason: PasswordSetupReason | null\n /** The link is dead (already used / expired) — offer a fresh one instead. */\n expired: boolean\n /** Still resolving the session the link carries. */\n checking: boolean\n /** Called by the screen once the password is set (or the user gives up). */\n complete: () => void\n}\n\n/**\n * Decides whether the user owes us a password before they see the app.\n *\n * The URL intent is read from a snapshot taken at module load: supabase-js wipes\n * the token fragment as soon as it initialises, so the reason the user is here is\n * gone by the time React renders.\n */\nexport function usePasswordSetupGate(): PasswordSetupGate {\n const { user, isLoading, isAuthenticated } = useAuth()\n const [done, setDone] = React.useState(false)\n const intent = React.useMemo(() => readAuthUrlIntent(), [])\n\n const complete = React.useCallback(() => {\n clearAuthUrlTokens()\n setDone(true)\n }, [])\n\n if (done) return { reason: null, expired: false, checking: false, complete }\n\n const decision = decidePasswordSetup({\n intent,\n isLoading,\n isAuthenticated,\n mustSetPassword: user?.mustSetPassword,\n })\n return { ...decision, complete }\n}\n"]}
package/package.json CHANGED
@@ -3,8 +3,8 @@
3
3
  "fayz": {
4
4
  "status": "beta"
5
5
  },
6
- "version": "0.47.0",
7
- "description": "Fayz SDK auth — pluggable authentication adapters with React hooks",
6
+ "version": "0.48.0",
7
+ "description": "Fayz SDK auth context — session, adapters, auth links and the login and password screens",
8
8
  "type": "module",
9
9
  "sideEffects": false,
10
10
  "main": "./dist/index.js",
@@ -14,6 +14,10 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
+ },
18
+ "./*": {
19
+ "types": "./dist/*.d.ts",
20
+ "import": "./dist/*.js"
17
21
  }
18
22
  },
19
23
  "files": [
@@ -21,15 +25,22 @@
21
25
  ],
22
26
  "peerDependencies": {
23
27
  "@supabase/supabase-js": "^2.45.0",
28
+ "lucide-react": ">=0.400.0 <1.0.0",
24
29
  "react": "^18.0.0 || ^19.0.0",
25
30
  "zustand": "^4.5.0 || ^5.0.0"
26
31
  },
32
+ "peerDependenciesMeta": {
33
+ "lucide-react": {
34
+ "optional": true
35
+ }
36
+ },
27
37
  "dependencies": {
28
- "@fayz-ai/core": "^0.47.0"
38
+ "@fayz-ai/core": "^0.48.0"
29
39
  },
30
40
  "devDependencies": {
31
41
  "@supabase/supabase-js": "^2.45.0",
32
42
  "@types/react": "^18.3.0",
43
+ "lucide-react": "^0.400.0",
33
44
  "react": "^18.3.0",
34
45
  "tsup": "^8.2.0",
35
46
  "typescript": "^5.5.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/adapters/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,eAAe,CAAA;AAEvE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAoDD,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,QAA4B,GAAG,WAAW,CAkFzF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/adapters/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,eAAe,CAAA;AAIrF;;;mEAGmE;AACnE,eAAO,MAAM,sBAAsB,2BAA2B,CAAA;AAE9D,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAyCD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,CAgMjF"}
File without changes
File without changes