@stackframe/stack 2.2.5 → 2.3.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 (216) hide show
  1. package/dist/components/card-frame.d.ts +0 -1
  2. package/dist/components/credential-sign-in.d.ts +0 -1
  3. package/dist/components/credential-sign-up.d.ts +0 -1
  4. package/dist/components/forgot-password.d.ts +0 -1
  5. package/dist/components/form-warning.d.ts +0 -1
  6. package/dist/components/magic-link-sign-in.d.ts +1 -0
  7. package/dist/components/magic-link-sign-in.js +33 -0
  8. package/dist/components/message-card.d.ts +0 -1
  9. package/dist/components/oauth-button.d.ts +0 -1
  10. package/dist/components/oauth-group.d.ts +0 -1
  11. package/dist/components/password-field.d.ts +0 -1
  12. package/dist/components/password-reset-inner.d.ts +0 -1
  13. package/dist/components/redirect-message-card.d.ts +0 -1
  14. package/dist/components/separator-with-text.d.ts +0 -1
  15. package/dist/components/user-avatar.d.ts +0 -1
  16. package/dist/components/user-button.d.ts +0 -1
  17. package/dist/components-core/avatar.d.ts +0 -1
  18. package/dist/components-core/button.d.ts +0 -1
  19. package/dist/components-core/card.d.ts +0 -1
  20. package/dist/components-core/collapsible.d.ts +0 -1
  21. package/dist/components-core/container.d.ts +0 -1
  22. package/dist/components-core/dropdown.d.ts +0 -1
  23. package/dist/components-core/index.d.ts +17 -14
  24. package/dist/components-core/index.js +35 -99
  25. package/dist/components-core/input.d.ts +0 -1
  26. package/dist/components-core/label.d.ts +0 -1
  27. package/dist/components-core/label.js +2 -2
  28. package/dist/components-core/link.d.ts +0 -1
  29. package/dist/components-core/loading-indicator.d.ts +0 -1
  30. package/dist/components-core/popover.d.ts +0 -1
  31. package/dist/components-core/separator.d.ts +0 -1
  32. package/dist/components-core/tabs.d.ts +7 -0
  33. package/dist/components-core/tabs.js +50 -0
  34. package/dist/components-core/text.d.ts +0 -1
  35. package/dist/components-core-joy/button.d.ts +0 -1
  36. package/dist/components-core-joy/input.d.ts +0 -1
  37. package/dist/components-core-joy/separator.d.ts +1 -2
  38. package/dist/components-core-joy/tabs.d.ts +5 -0
  39. package/dist/components-core-joy/tabs.js +20 -0
  40. package/dist/components-core-joy/text.d.ts +0 -1
  41. package/dist/components-page/account-settings.d.ts +0 -1
  42. package/dist/components-page/account-settings.js +1 -1
  43. package/dist/components-page/auth-page.d.ts +4 -0
  44. package/dist/components-page/auth-page.js +20 -0
  45. package/dist/components-page/email-verification.d.ts +0 -1
  46. package/dist/components-page/forgot-password.d.ts +0 -1
  47. package/dist/{components/PasswordReset.d.ts → components-page/magic-link-callback.d.ts} +1 -2
  48. package/dist/components-page/magic-link-callback.js +35 -0
  49. package/dist/components-page/oauth-callback.d.ts +0 -1
  50. package/dist/components-page/password-reset.d.ts +0 -1
  51. package/dist/components-page/sign-in.d.ts +0 -1
  52. package/dist/components-page/sign-in.js +3 -16
  53. package/dist/components-page/sign-out.d.ts +0 -1
  54. package/dist/components-page/sign-out.js +1 -2
  55. package/dist/components-page/sign-up.d.ts +0 -1
  56. package/dist/components-page/sign-up.js +3 -16
  57. package/dist/components-page/stack-handler.d.ts +0 -1
  58. package/dist/components-page/stack-handler.js +5 -0
  59. package/dist/index.d.ts +0 -1
  60. package/dist/joy.d.ts +0 -1
  61. package/dist/lib/auth.d.ts +0 -1
  62. package/dist/lib/cookie.d.ts +0 -1
  63. package/dist/lib/cookie.js +1 -1
  64. package/dist/lib/hooks.d.ts +0 -1
  65. package/dist/lib/stack-app.d.ts +6 -1
  66. package/dist/lib/stack-app.js +32 -1
  67. package/dist/providers/component-provider.d.ts +8 -1
  68. package/dist/providers/component-provider.js +5 -0
  69. package/dist/providers/design-provider.d.ts +0 -1
  70. package/dist/providers/joy-provider.d.ts +5 -2
  71. package/dist/providers/joy-provider.js +5 -0
  72. package/dist/providers/stack-provider-client.d.ts +0 -1
  73. package/dist/providers/stack-provider.d.ts +0 -1
  74. package/dist/providers/styled-components-registry.d.ts +0 -1
  75. package/dist/providers/theme-provider.d.ts +0 -1
  76. package/dist/utils/constants.d.ts +0 -1
  77. package/dist/utils/email.d.ts +1 -2
  78. package/dist/utils/email.js +4 -4
  79. package/dist/utils/next.d.ts +0 -1
  80. package/dist/utils/url.d.ts +0 -1
  81. package/package.json +6 -4
  82. package/dist/components/EmailVerification.d.ts +0 -6
  83. package/dist/components/EmailVerification.d.ts.map +0 -1
  84. package/dist/components/EmailVerification.js +0 -29
  85. package/dist/components/ForgotPassword.d.ts +0 -4
  86. package/dist/components/ForgotPassword.d.ts.map +0 -1
  87. package/dist/components/ForgotPassword.js +0 -22
  88. package/dist/components/OAuthCallback.d.ts +0 -2
  89. package/dist/components/OAuthCallback.d.ts.map +0 -1
  90. package/dist/components/OAuthCallback.js +0 -20
  91. package/dist/components/PasswordReset.d.ts.map +0 -1
  92. package/dist/components/PasswordReset.js +0 -36
  93. package/dist/components/SignIn.d.ts +0 -5
  94. package/dist/components/SignIn.d.ts.map +0 -1
  95. package/dist/components/SignIn.js +0 -20
  96. package/dist/components/SignOut.d.ts +0 -4
  97. package/dist/components/SignOut.d.ts.map +0 -1
  98. package/dist/components/SignOut.js +0 -12
  99. package/dist/components/SignUp.d.ts +0 -5
  100. package/dist/components/SignUp.d.ts.map +0 -1
  101. package/dist/components/SignUp.js +0 -19
  102. package/dist/components/StackHandler.d.ts +0 -9
  103. package/dist/components/StackHandler.d.ts.map +0 -1
  104. package/dist/components/StackHandler.js +0 -58
  105. package/dist/components/card-frame.d.ts.map +0 -1
  106. package/dist/components/credential-sign-in.d.ts.map +0 -1
  107. package/dist/components/credential-sign-up.d.ts.map +0 -1
  108. package/dist/components/forgot-password.d.ts.map +0 -1
  109. package/dist/components/form-warning.d.ts.map +0 -1
  110. package/dist/components/message-card.d.ts.map +0 -1
  111. package/dist/components/oauth-button.d.ts.map +0 -1
  112. package/dist/components/oauth-group.d.ts.map +0 -1
  113. package/dist/components/password-field.d.ts.map +0 -1
  114. package/dist/components/password-reset-inner.d.ts.map +0 -1
  115. package/dist/components/redirect-message-card.d.ts.map +0 -1
  116. package/dist/components/separator-with-text.d.ts.map +0 -1
  117. package/dist/components/user-avatar.d.ts.map +0 -1
  118. package/dist/components/user-button.d.ts.map +0 -1
  119. package/dist/components-core/avatar.d.ts.map +0 -1
  120. package/dist/components-core/button.d.ts.map +0 -1
  121. package/dist/components-core/card.d.ts.map +0 -1
  122. package/dist/components-core/collapsible.d.ts.map +0 -1
  123. package/dist/components-core/container.d.ts.map +0 -1
  124. package/dist/components-core/dropdown.d.ts.map +0 -1
  125. package/dist/components-core/index.d.ts.map +0 -1
  126. package/dist/components-core/input.d.ts.map +0 -1
  127. package/dist/components-core/label.d.ts.map +0 -1
  128. package/dist/components-core/link.d.ts.map +0 -1
  129. package/dist/components-core/loading-indicator.d.ts.map +0 -1
  130. package/dist/components-core/popover.d.ts.map +0 -1
  131. package/dist/components-core/separator.d.ts.map +0 -1
  132. package/dist/components-core/text.d.ts.map +0 -1
  133. package/dist/components-core-joy/button.d.ts.map +0 -1
  134. package/dist/components-core-joy/input.d.ts.map +0 -1
  135. package/dist/components-core-joy/separator.d.ts.map +0 -1
  136. package/dist/components-core-joy/text.d.ts.map +0 -1
  137. package/dist/components-page/account-settings.d.ts.map +0 -1
  138. package/dist/components-page/email-verification.d.ts.map +0 -1
  139. package/dist/components-page/forgot-password.d.ts.map +0 -1
  140. package/dist/components-page/oauth-callback.d.ts.map +0 -1
  141. package/dist/components-page/password-reset.d.ts.map +0 -1
  142. package/dist/components-page/sign-in.d.ts.map +0 -1
  143. package/dist/components-page/sign-out.d.ts.map +0 -1
  144. package/dist/components-page/sign-up.d.ts.map +0 -1
  145. package/dist/components-page/stack-handler.d.ts.map +0 -1
  146. package/dist/elements/Button.d.ts +0 -11
  147. package/dist/elements/Button.d.ts.map +0 -1
  148. package/dist/elements/Button.js +0 -18
  149. package/dist/elements/CardFrame.d.ts +0 -6
  150. package/dist/elements/CardFrame.d.ts.map +0 -1
  151. package/dist/elements/CardFrame.js +0 -10
  152. package/dist/elements/CardHeader.d.ts +0 -6
  153. package/dist/elements/CardHeader.d.ts.map +0 -1
  154. package/dist/elements/CardHeader.js +0 -4
  155. package/dist/elements/CredentialSignIn.d.ts +0 -4
  156. package/dist/elements/CredentialSignIn.d.ts.map +0 -1
  157. package/dist/elements/CredentialSignIn.js +0 -57
  158. package/dist/elements/CredentialSignUp.d.ts +0 -4
  159. package/dist/elements/CredentialSignUp.d.ts.map +0 -1
  160. package/dist/elements/CredentialSignUp.js +0 -73
  161. package/dist/elements/DividerWithText.d.ts +0 -4
  162. package/dist/elements/DividerWithText.d.ts.map +0 -1
  163. package/dist/elements/DividerWithText.js +0 -5
  164. package/dist/elements/ForgotPassword.d.ts +0 -4
  165. package/dist/elements/ForgotPassword.d.ts.map +0 -1
  166. package/dist/elements/ForgotPassword.js +0 -32
  167. package/dist/elements/FormWarning.d.ts +0 -4
  168. package/dist/elements/FormWarning.d.ts.map +0 -1
  169. package/dist/elements/FormWarning.js +0 -7
  170. package/dist/elements/MessageCard.d.ts +0 -7
  171. package/dist/elements/MessageCard.d.ts.map +0 -1
  172. package/dist/elements/MessageCard.js +0 -5
  173. package/dist/elements/OAuthButton.d.ts +0 -6
  174. package/dist/elements/OAuthButton.d.ts.map +0 -1
  175. package/dist/elements/OAuthButton.js +0 -67
  176. package/dist/elements/OAuthGroup.d.ts +0 -5
  177. package/dist/elements/OAuthGroup.d.ts.map +0 -1
  178. package/dist/elements/OAuthGroup.js +0 -8
  179. package/dist/elements/PasswordField.d.ts +0 -3
  180. package/dist/elements/PasswordField.d.ts.map +0 -1
  181. package/dist/elements/PasswordField.js +0 -27
  182. package/dist/elements/PasswordResetInner.d.ts +0 -5
  183. package/dist/elements/PasswordResetInner.d.ts.map +0 -1
  184. package/dist/elements/PasswordResetInner.js +0 -61
  185. package/dist/elements/RedirectMessageCard.d.ts +0 -5
  186. package/dist/elements/RedirectMessageCard.d.ts.map +0 -1
  187. package/dist/elements/RedirectMessageCard.js +0 -55
  188. package/dist/index.d.ts.map +0 -1
  189. package/dist/joy.d.ts.map +0 -1
  190. package/dist/lib/auth.d.ts.map +0 -1
  191. package/dist/lib/cookie.d.ts.map +0 -1
  192. package/dist/lib/hooks.d.ts.map +0 -1
  193. package/dist/lib/stack-app.d.ts.map +0 -1
  194. package/dist/providers/StackProvider.d.ts +0 -7
  195. package/dist/providers/StackProvider.d.ts.map +0 -1
  196. package/dist/providers/StackProvider.js +0 -6
  197. package/dist/providers/StackProviderClient.d.ts +0 -10
  198. package/dist/providers/StackProviderClient.d.ts.map +0 -1
  199. package/dist/providers/StackProviderClient.js +0 -14
  200. package/dist/providers/component-provider.d.ts.map +0 -1
  201. package/dist/providers/design-provider.d.ts.map +0 -1
  202. package/dist/providers/joy-provider.d.ts.map +0 -1
  203. package/dist/providers/stack-provider-client.d.ts.map +0 -1
  204. package/dist/providers/stack-provider.d.ts.map +0 -1
  205. package/dist/providers/styled-components-registry.d.ts.map +0 -1
  206. package/dist/providers/theme-provider.d.ts.map +0 -1
  207. package/dist/utils/constants.d.ts.map +0 -1
  208. package/dist/utils/email.d.ts.map +0 -1
  209. package/dist/utils/next.d.ts.map +0 -1
  210. package/dist/utils/react.d.ts +0 -2
  211. package/dist/utils/react.d.ts.map +0 -1
  212. package/dist/utils/react.js +0 -6
  213. package/dist/utils/results.d.ts +0 -25
  214. package/dist/utils/results.d.ts.map +0 -1
  215. package/dist/utils/results.js +0 -46
  216. package/dist/utils/url.d.ts.map +0 -1
@@ -1,5 +1,4 @@
1
- export default function PasswordReset({ searchParams, fullPage, }: {
1
+ export default function MagicLinkCallback({ searchParams: { code, }, fullPage, }: {
2
2
  searchParams?: Record<string, string>;
3
3
  fullPage?: boolean;
4
4
  }): import("react/jsx-runtime").JSX.Element | undefined;
5
- //# sourceMappingURL=PasswordReset.d.ts.map
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { use } from "react";
4
+ import { useStackApp, useUser } from "..";
5
+ import MessageCard from "../components/message-card";
6
+ import RedirectMessageCard from "../components/redirect-message-card";
7
+ import { KnownErrors } from "@stackframe/stack-shared";
8
+ import { neverResolve } from "@stackframe/stack-shared/dist/utils/promises";
9
+ export default function MagicLinkCallback({ searchParams: { code = "", } = {}, fullPage = false, }) {
10
+ const stackApp = useStackApp();
11
+ const user = useUser();
12
+ if (user) {
13
+ return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
14
+ }
15
+ const invalidJsx = (_jsx(MessageCard, { title: "Invalid Magic Link", fullPage: fullPage, children: _jsx("p", { children: "Please check if you have the correct link. If you continue to have issues, please contact support." }) }));
16
+ const expiredJsx = (_jsx(MessageCard, { title: "Expired Magic Link", fullPage: fullPage, children: _jsx("p", { children: "Your magic link has expired. Please request a new magic link if you need to sign-in." }) }));
17
+ const allredyUsedJsx = (_jsx(MessageCard, { title: "Magic Link Already Used", fullPage: fullPage, children: _jsx("p", { children: "The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again." }) }));
18
+ if (!code) {
19
+ return invalidJsx;
20
+ }
21
+ const error = use(stackApp.signInWithMagicLink(code));
22
+ if (error instanceof KnownErrors.MagicLinkCodeNotFound) {
23
+ return invalidJsx;
24
+ }
25
+ else if (error instanceof KnownErrors.MagicLinkCodeExpired) {
26
+ return expiredJsx;
27
+ }
28
+ else if (error instanceof KnownErrors.MagicLinkCodeAlreadyUsed) {
29
+ return allredyUsedJsx;
30
+ }
31
+ else if (error) {
32
+ throw error;
33
+ }
34
+ use(neverResolve());
35
+ }
@@ -1,2 +1 @@
1
1
  export default function OAuthCallback(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=oauth-callback.d.ts.map
@@ -2,4 +2,3 @@ export default function PasswordReset({ searchParams, fullPage, }: {
2
2
  searchParams?: Record<string, string>;
3
3
  fullPage?: boolean;
4
4
  }): import("react/jsx-runtime").JSX.Element;
5
- //# sourceMappingURL=password-reset.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export default function SignIn({ fullPage }: {
2
2
  fullPage?: boolean;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
- //# sourceMappingURL=sign-in.d.ts.map
@@ -1,19 +1,6 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import CredentialSignIn from '../components/credential-sign-in';
4
- import SeparatorWithText from '../components/separator-with-text';
5
- import OAuthGroup from '../components/oauth-group';
6
- import CardFrame from '../components/card-frame';
7
- import { useUser, useStackApp } from '..';
8
- import RedirectMessageCard from '../components/redirect-message-card';
9
- import { Link, Text } from "../components-core";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import AuthPage from './auth-page';
10
4
  export default function SignIn({ fullPage = false }) {
11
- const stackApp = useStackApp();
12
- const user = useUser();
13
- const project = stackApp.useProject();
14
- if (user) {
15
- return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
16
- }
17
- const enableSeparator = project.credentialEnabled && project.oauthProviders.filter(p => p.enabled).length > 0;
18
- return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsxs("div", { style: { textAlign: 'center', marginBottom: '1.5rem' }, children: [_jsx(Text, { size: "xl", as: 'h2', children: "Sign into Your Account" }), _jsxs(Text, { children: ["Don't have an account? ", _jsx(Link, { href: stackApp.urls['signUp'], children: "Sign up" })] })] }), _jsx(OAuthGroup, { type: 'signin' }), enableSeparator && _jsx(SeparatorWithText, { text: 'or continue with email' }), project.credentialEnabled && _jsx(CredentialSignIn, {})] }));
5
+ return _jsx(AuthPage, { fullPage: fullPage, type: 'sign-in' });
19
6
  }
@@ -1,2 +1 @@
1
1
  export default function Signout(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=sign-out.d.ts.map
@@ -1,11 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { use } from "react";
4
- import { useStackApp, useUser } from "..";
4
+ import { useUser } from "..";
5
5
  import GoHomeMessageCard from "../components/redirect-message-card";
6
6
  export default function Signout() {
7
7
  const user = useUser();
8
- const app = useStackApp();
9
8
  if (user) {
10
9
  use(user.signOut());
11
10
  }
@@ -1,4 +1,3 @@
1
1
  export default function SignUp({ fullPage }: {
2
2
  fullPage?: boolean;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
- //# sourceMappingURL=sign-up.d.ts.map
@@ -1,19 +1,6 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import SeparatorWithText from '../components/separator-with-text';
4
- import OAuthGroup from '../components/oauth-group';
5
- import CardFrame from '../components/card-frame';
6
- import CredentialSignUp from '../components/credential-sign-up';
7
- import { useUser, useStackApp } from '..';
8
- import RedirectMessageCard from '../components/redirect-message-card';
9
- import { Link, Text } from "../components-core";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import AuthPage from './auth-page';
10
4
  export default function SignUp({ fullPage = false }) {
11
- const stackApp = useStackApp();
12
- const user = useUser();
13
- const project = stackApp.useProject();
14
- if (user) {
15
- return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
16
- }
17
- const enableSeparator = project.credentialEnabled && project.oauthProviders.filter(p => p.enabled).length > 0;
18
- return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsxs("div", { style: { textAlign: 'center', marginBottom: '1.5rem' }, children: [_jsx(Text, { size: "xl", as: 'h2', children: "Create a New Account" }), _jsxs(Text, { children: ["Already have an account? ", _jsx(Link, { href: stackApp.urls['signIn'], children: "Sign in" })] })] }), _jsx(OAuthGroup, { type: 'signup' }), enableSeparator && _jsx(SeparatorWithText, { text: 'or continue with email' }), project.credentialEnabled && _jsx(CredentialSignUp, {})] }));
5
+ return _jsx(AuthPage, { fullPage: fullPage, type: 'sign-up' });
19
6
  }
@@ -6,4 +6,3 @@ export default function StackHandler<HasTokenStore extends boolean>({ app, param
6
6
  };
7
7
  searchParams?: Record<string, string>;
8
8
  }): Promise<import("react/jsx-runtime").JSX.Element>;
9
- //# sourceMappingURL=stack-handler.d.ts.map
@@ -9,6 +9,7 @@ import Signout from "./sign-out";
9
9
  import ForgotPassword from "./forgot-password";
10
10
  import OAuthCallback from "./oauth-callback";
11
11
  import AccountSettings from "./account-settings";
12
+ import MagicLinkCallback from "./magic-link-callback";
12
13
  export default async function StackHandler({ app, params: { stack } = {}, searchParams = {}, }) {
13
14
  if (!stack) {
14
15
  return (_jsx(MessageCard, { title: "Invalid Stack Handler Setup", fullPage: true, children: _jsx("p", { children: "Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack]." }) }));
@@ -56,6 +57,10 @@ export default async function StackHandler({ app, params: { stack } = {}, search
56
57
  redirectIfNotHandler('accountSettings');
57
58
  return _jsx(AccountSettings, { fullPage: true });
58
59
  }
60
+ case 'magic-link-callback': {
61
+ redirectIfNotHandler('magicLinkCallback');
62
+ return _jsx(MagicLinkCallback, { searchParams: searchParams, fullPage: true });
63
+ }
59
64
  default: {
60
65
  return notFound();
61
66
  }
package/dist/index.d.ts CHANGED
@@ -20,4 +20,3 @@ export { useComponents } from './providers/component-provider';
20
20
  export { StackTheme, ThemeConfig } from './providers/theme-provider';
21
21
  export { CurrentUser, Project, ServerUser, ApiKeySetFirstView, ApiKeySet } from './lib/stack-app';
22
22
  export * from './components-core';
23
- //# sourceMappingURL=index.d.ts.map
package/dist/joy.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export { StackJoyTheme } from './providers/joy-provider';
2
- //# sourceMappingURL=joy.d.ts.map
@@ -5,4 +5,3 @@ export declare function signInWithOAuth(iface: StackClientInterface, { provider,
5
5
  redirectUrl?: string;
6
6
  }): Promise<void>;
7
7
  export declare function callOAuthCallback(iface: StackClientInterface, tokenStore: TokenStore, redirectUrl: string): Promise<import("oauth4webapi").OAuth2TokenEndpointResponse | null>;
8
- //# sourceMappingURL=auth.d.ts.map
@@ -10,4 +10,3 @@ export declare function getVerifierAndState(): {
10
10
  codeVerifier: string | null;
11
11
  state: string | null;
12
12
  };
13
- //# sourceMappingURL=cookie.d.ts.map
@@ -31,7 +31,7 @@ export function setCookie(name, value) {
31
31
  rscCookies().set(name, value);
32
32
  }
33
33
  else {
34
- Cookies.set(name, value);
34
+ Cookies.set(name, value, { secure: window.location.protocol === "https:" });
35
35
  }
36
36
  }
37
37
  export async function saveVerifierAndState() {
@@ -27,4 +27,3 @@ export declare function useStackApp<ProjectId extends string>(options?: {
27
27
  projectIdMustMatch?: ProjectId;
28
28
  }): StackClientApp<true, ProjectId>;
29
29
  export {};
30
- //# sourceMappingURL=hooks.d.ts.map
@@ -16,6 +16,7 @@ export type HandlerUrls = {
16
16
  forgotPassword: string;
17
17
  home: string;
18
18
  oauthCallback: string;
19
+ magicLinkCallback: string;
19
20
  accountSettings: string;
20
21
  };
21
22
  type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
@@ -71,6 +72,9 @@ export type User = {
71
72
  readonly signedUpAt: Date;
72
73
  readonly clientMetadata: ReadonlyJson;
73
74
  readonly authMethod: 'credential' | 'oauth';
75
+ readonly hasPassword: boolean;
76
+ readonly authWithEmail: boolean;
77
+ readonly oauthProviders: readonly string[];
74
78
  toJson(this: CurrentUser): UserJson;
75
79
  };
76
80
  export type CurrentUser = Auth<User, UserCustomizableJson> & User;
@@ -165,12 +169,14 @@ export type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId ex
165
169
  }): Promise<KnownErrors["UserEmailAlreadyExists"] | undefined>;
166
170
  callOAuthCallback(): Promise<void>;
167
171
  sendForgotPasswordEmail(email: string): Promise<KnownErrors["UserNotFound"] | undefined>;
172
+ sendMagicLinkEmail(email: string): Promise<KnownErrors["RedirectUrlNotWhitelisted"] | undefined>;
168
173
  resetPassword(options: {
169
174
  code: string;
170
175
  password: string;
171
176
  }): Promise<KnownErrors["PasswordResetError"] | undefined>;
172
177
  verifyPasswordResetCode(code: string): Promise<KnownErrors["PasswordResetCodeError"] | undefined>;
173
178
  verifyEmail(code: string): Promise<KnownErrors["EmailVerificationError"] | undefined>;
179
+ signInWithMagicLink(code: string): Promise<KnownErrors["MagicLinkError"] | undefined>;
174
180
  [stackAppInternalsSymbol]: {
175
181
  toClientJson(): Promise<StackClientAppJson<HasTokenStore, ProjectId>>;
176
182
  };
@@ -217,4 +223,3 @@ type StackAdminAppConstructor = {
217
223
  };
218
224
  export declare const StackAdminApp: StackAdminAppConstructor;
219
225
  export {};
220
- //# sourceMappingURL=stack-app.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import React, { use, useCallback, useMemo } from "react";
2
- import { StackAdminInterface, StackClientInterface, StackServerInterface } from "@stackframe/stack-shared";
2
+ import { KnownError, StackAdminInterface, StackClientInterface, StackServerInterface } from "@stackframe/stack-shared";
3
3
  import { getCookie, setOrDeleteCookie } from "./cookie";
4
4
  import { StackAssertionError, throwErr } from "@stackframe/stack-shared/dist/utils/errors";
5
5
  import { generateUuid } from "@stackframe/stack-shared/dist/utils/uuids";
@@ -29,6 +29,7 @@ function getUrls(partial) {
29
29
  passwordReset: `${handler}/password-reset`,
30
30
  forgotPassword: `${handler}/forgot-password`,
31
31
  oauthCallback: `${handler}/oauth-callback`,
32
+ magicLinkCallback: `${handler}/magic-link-callback`,
32
33
  home: "/",
33
34
  accountSettings: `${handler}/account-settings`,
34
35
  ...filterUndefined(partial),
@@ -240,6 +241,9 @@ class _StackClientAppImpl {
240
241
  signedUpAt: new Date(json.signedUpAtMillis),
241
242
  clientMetadata: json.clientMetadata,
242
243
  authMethod: json.authMethod,
244
+ hasPassword: json.hasPassword,
245
+ authWithEmail: json.authWithEmail,
246
+ oauthProviders: json.oauthProviders,
243
247
  toJson() {
244
248
  return json;
245
249
  }
@@ -300,6 +304,9 @@ class _StackClientAppImpl {
300
304
  signedUpAtMillis: user.signedUpAt.getTime(),
301
305
  clientMetadata: user.clientMetadata,
302
306
  authMethod: user.authMethod,
307
+ hasPassword: user.hasPassword,
308
+ authWithEmail: user.authWithEmail,
309
+ oauthProviders: user.oauthProviders,
303
310
  };
304
311
  }
305
312
  _projectAdminFromJson(data, adminInterface, onRefresh) {
@@ -361,6 +368,7 @@ class _StackClientAppImpl {
361
368
  async redirectToForgotPassword() { return await this._redirectTo("forgotPassword"); }
362
369
  async redirectToHome() { return await this._redirectTo("home"); }
363
370
  async redirectToOAuthCallback() { return await this._redirectTo("oauthCallback"); }
371
+ async redirectToMagicLinkCallback() { return await this._redirectTo("magicLinkCallback"); }
364
372
  async redirectToAfterSignIn() { return await this._redirectTo("afterSignIn"); }
365
373
  async redirectToAfterSignUp() { return await this._redirectTo("afterSignUp"); }
366
374
  async redirectToAfterSignOut() { return await this._redirectTo("afterSignOut"); }
@@ -370,6 +378,11 @@ class _StackClientAppImpl {
370
378
  const error = await this._interface.sendForgotPasswordEmail(email, redirectUrl);
371
379
  return error;
372
380
  }
381
+ async sendMagicLinkEmail(email) {
382
+ const magicLinkRedirectUrl = constructRedirectUrl(this.urls.magicLinkCallback);
383
+ const error = await this._interface.sendMagicLinkEmail(email, magicLinkRedirectUrl);
384
+ return error;
385
+ }
373
386
  async resetPassword(options) {
374
387
  const error = await this._interface.resetPassword(options);
375
388
  return error;
@@ -460,6 +473,21 @@ class _StackClientAppImpl {
460
473
  }
461
474
  return errorCode;
462
475
  }
476
+ async signInWithMagicLink(code) {
477
+ this._ensurePersistentTokenStore();
478
+ const tokenStore = getTokenStore(this._tokenStoreOptions);
479
+ const result = await this._interface.signInWithMagicLink(code, tokenStore);
480
+ if (result instanceof KnownError) {
481
+ return result;
482
+ }
483
+ if (result.newUser) {
484
+ window.location.replace(this.urls.afterSignUp);
485
+ }
486
+ else {
487
+ window.location.replace(this.urls.afterSignIn);
488
+ }
489
+ await neverResolve();
490
+ }
463
491
  async callOAuthCallback() {
464
492
  this._ensurePersistentTokenStore();
465
493
  const tokenStore = getTokenStore(this._tokenStoreOptions);
@@ -704,6 +732,9 @@ class _StackServerAppImpl extends _StackClientAppImpl {
704
732
  clientMetadata: user.clientMetadata,
705
733
  serverMetadata: user.serverMetadata,
706
734
  authMethod: user.authMethod,
735
+ hasPassword: user.hasPassword,
736
+ authWithEmail: user.authWithEmail,
737
+ oauthProviders: user.oauthProviders,
707
738
  };
708
739
  }
709
740
  async getServerUser() {
@@ -36,6 +36,10 @@ export declare const Components: {
36
36
  readonly CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
37
37
  readonly CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
38
38
  readonly CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
39
+ readonly Tabs: React.ForwardRefExoticComponent<import("@radix-ui/react-tabs").TabsProps & React.RefAttributes<HTMLDivElement>>;
40
+ readonly TabsList: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
41
+ readonly TabsContent: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
42
+ readonly TabsTrigger: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
39
43
  };
40
44
  export type ComponentConfig = {
41
45
  components?: Partial<typeof Components>;
@@ -75,8 +79,11 @@ export declare function useComponents(): {
75
79
  readonly CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
76
80
  readonly CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
77
81
  readonly CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
82
+ readonly Tabs: React.ForwardRefExoticComponent<import("@radix-ui/react-tabs").TabsProps & React.RefAttributes<HTMLDivElement>>;
83
+ readonly TabsList: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
84
+ readonly TabsContent: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
85
+ readonly TabsTrigger: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-tabs").TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
78
86
  };
79
87
  export declare function StackComponentProvider(props: {
80
88
  children?: React.ReactNode;
81
89
  } & ComponentConfig): import("react/jsx-runtime").JSX.Element;
82
- //# sourceMappingURL=component-provider.d.ts.map
@@ -13,6 +13,7 @@ import { Popover, PopoverTrigger, PopoverContent } from '../components-core/popo
13
13
  import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, } from '../components-core/dropdown';
14
14
  import { Avatar, AvatarFallback, AvatarImage } from '../components-core/avatar';
15
15
  import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '../components-core/collapsible';
16
+ import { Tabs, TabsList, TabsContent, TabsTrigger } from '../components-core/tabs';
16
17
  export const Components = {
17
18
  Input,
18
19
  Button,
@@ -40,6 +41,10 @@ export const Components = {
40
41
  CardHeader,
41
42
  CardContent,
42
43
  CardFooter,
44
+ Tabs,
45
+ TabsList,
46
+ TabsContent,
47
+ TabsTrigger,
43
48
  };
44
49
  const ComponentContext = createContext(undefined);
45
50
  export function useComponents() {
@@ -37,4 +37,3 @@ export declare function StackDesignProvider(props: {
37
37
  } & DesignConfig): import("react/jsx-runtime").JSX.Element | null;
38
38
  export declare function useDesign(): DesignContextValue;
39
39
  export {};
40
- //# sourceMappingURL=design-provider.d.ts.map
@@ -8,10 +8,13 @@ export declare const defaultComponents: {
8
8
  as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
9
9
  size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
10
10
  } & Omit<import("react").HTMLProps<HTMLParagraphElement>, "size">, "ref"> & import("react").RefAttributes<HTMLParagraphElement>, "ref"> & import("react").RefAttributes<HTMLParagraphElement>, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
11
- Separator: import("react").ForwardRefExoticComponent<Omit<Omit<Omit<import("@radix-ui/react-separator").SeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLHRElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
11
+ Separator: import("react").ForwardRefExoticComponent<Omit<Omit<Omit<import("@radix-ui/react-separator").SeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
12
+ Tabs: import("react").ForwardRefExoticComponent<Omit<Omit<import("@radix-ui/react-tabs").TabsProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
13
+ TabsList: import("react").ForwardRefExoticComponent<Omit<Omit<Omit<import("@radix-ui/react-tabs").TabsListProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
14
+ TabsTrigger: import("react").ForwardRefExoticComponent<Omit<Omit<Omit<import("@radix-ui/react-tabs").TabsTriggerProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
15
+ TabsContent: import("react").ForwardRefExoticComponent<Omit<Omit<Omit<import("@radix-ui/react-tabs").TabsContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
12
16
  };
13
17
  export declare function StackJoyTheme(props: {
14
18
  theme?: ThemeConfig;
15
19
  children?: React.ReactNode;
16
20
  }): import("react/jsx-runtime").JSX.Element;
17
- //# sourceMappingURL=joy-provider.d.ts.map
@@ -6,11 +6,16 @@ import { Button } from '../components-core-joy/button';
6
6
  import { Input } from '../components-core-joy/input';
7
7
  import { Text } from '../components-core-joy/text';
8
8
  import { Separator } from '../components-core-joy/separator';
9
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from '../components-core-joy/tabs';
9
10
  export const defaultComponents = {
10
11
  Button,
11
12
  Input,
12
13
  Text,
13
14
  Separator,
15
+ Tabs,
16
+ TabsList,
17
+ TabsTrigger,
18
+ TabsContent,
14
19
  };
15
20
  export function StackJoyTheme(props) {
16
21
  const { mode, systemMode, setMode } = useColorScheme();
@@ -7,4 +7,3 @@ export declare function StackProviderClient(props: {
7
7
  appJsonPromise: Promise<StackClientAppJson<true, string>>;
8
8
  children?: React.ReactNode;
9
9
  }): import("react/jsx-runtime").JSX.Element;
10
- //# sourceMappingURL=stack-provider-client.d.ts.map
@@ -4,4 +4,3 @@ export default function StackProvider({ children, app, }: {
4
4
  children: React.ReactNode;
5
5
  app: StackClientApp<true>;
6
6
  }): import("react/jsx-runtime").JSX.Element;
7
- //# sourceMappingURL=stack-provider.d.ts.map
@@ -2,4 +2,3 @@ import React from 'react';
2
2
  export default function StyledComponentsRegistry({ children, }: {
3
3
  children: React.ReactNode;
4
4
  }): import("react/jsx-runtime").JSX.Element;
5
- //# sourceMappingURL=styled-components-registry.d.ts.map
@@ -8,4 +8,3 @@ export declare function StackTheme({ theme, children, colorModeConfig, }: {
8
8
  theme?: DesignConfig & ComponentConfig;
9
9
  colorModeConfig?: Omit<ComponentProps<typeof NextThemeProvider>, "themes" | "children">;
10
10
  }): import("react/jsx-runtime").JSX.Element;
11
- //# sourceMappingURL=theme-provider.d.ts.map
@@ -44,4 +44,3 @@ export declare const DEFAULT_COLORS: {
44
44
  readonly neutralColor: "#e4e4e7";
45
45
  };
46
46
  };
47
- //# sourceMappingURL=constants.d.ts.map
@@ -1,2 +1 @@
1
- export declare function validateEmail(email: string): RegExpMatchArray | null;
2
- //# sourceMappingURL=email.d.ts.map
1
+ export declare function validateEmail(email: string): boolean;
@@ -1,7 +1,7 @@
1
+ import * as yup from "yup";
1
2
  export function validateEmail(email) {
2
- // TODO prevent regex DoS
3
- return String(email)
4
- .toLowerCase()
5
- .match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
3
+ if (typeof email !== "string")
4
+ throw new Error("Email must be a string");
5
+ return yup.string().email().isValidSync(email);
6
6
  }
7
7
  ;
@@ -1,2 +1 @@
1
1
  export declare function isClient(): boolean;
2
- //# sourceMappingURL=next.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export declare function autoRedirect(): void;
2
2
  export declare function constructRedirectUrl(redirectUrl: URL | string | undefined): string;
3
- //# sourceMappingURL=url.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackframe/stack",
3
- "version": "2.2.5",
3
+ "version": "2.3.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -16,12 +16,13 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
+ "@radix-ui/react-separator": "^1.0.3",
20
+ "@radix-ui/react-tabs": "^1.0.4",
19
21
  "@radix-ui/react-avatar": "^1.0.4",
20
22
  "@radix-ui/react-collapsible": "^1.0.3",
21
23
  "@radix-ui/react-dropdown-menu": "^2.0.6",
22
24
  "@radix-ui/react-label": "^2.0.2",
23
25
  "@radix-ui/react-popover": "^1.0.7",
24
- "@radix-ui/react-separator": "^1.0.3",
25
26
  "color": "^4.2.3",
26
27
  "js-cookie": "^3.0.5",
27
28
  "next-themes": "^0.2.1",
@@ -30,8 +31,9 @@
30
31
  "server-only": "^0.0.1",
31
32
  "styled-components": "^6.1.8",
32
33
  "tailwindcss-scoped-preflight": "^2.1.0",
33
- "@stackframe/stack-sc": "1.3.2",
34
- "@stackframe/stack-shared": "2.2.2"
34
+ "yup": "^1.4.0",
35
+ "@stackframe/stack-sc": "1.4.0",
36
+ "@stackframe/stack-shared": "2.3.0"
35
37
  },
36
38
  "peerDependencies": {
37
39
  "@mui/joy": "^5.0.0-beta.30",
@@ -1,6 +0,0 @@
1
- export default function EmailVerification({ searchParams: { code, }, fullPage, }: {
2
- searchParams?: Record<string, string>;
3
- fullPage?: boolean;
4
- redirectUrl?: string;
5
- }): import("react/jsx-runtime").JSX.Element | null;
6
- //# sourceMappingURL=EmailVerification.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailVerification.d.ts","sourceRoot":"","sources":["../../src/components/EmailVerification.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EACxC,YAAY,EAAE,EACZ,IAAS,GACL,EACN,QAAgB,GACjB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,kDAkCA"}
@@ -1,29 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { use } from "react";
4
- import { useStackApp } from "..";
5
- import MessageCard from "../elements/MessageCard";
6
- import RedirectMessageCard from "../elements/RedirectMessageCard";
7
- import { EmailVerificationLinkExpiredErrorCode, EmailVerificationLinkInvalidErrorCode, EmailVerificationLinkUsedErrorCode } from "@stackframe/stack-shared/dist/utils/types";
8
- export default function EmailVerification({ searchParams: { code = "", } = {}, fullPage = false, }) {
9
- const stackApp = useStackApp();
10
- const invalidJsx = (_jsx(MessageCard, { title: "Invalid Verification Link", fullPage: fullPage, children: _jsx("p", { children: "Please check if you have the correct link. If you continue to have issues, please contact support." }) }));
11
- const expiredJsx = (_jsx(MessageCard, { title: "Expired Verification Link", fullPage: fullPage, children: _jsx("p", { children: "Your email verification link has expired. Please request a new verification link from your account settings." }) }));
12
- if (!code) {
13
- return invalidJsx;
14
- }
15
- const errorCode = use(stackApp.verifyEmail(code));
16
- switch (errorCode) {
17
- case EmailVerificationLinkInvalidErrorCode: {
18
- return invalidJsx;
19
- }
20
- case EmailVerificationLinkExpiredErrorCode: {
21
- return expiredJsx;
22
- }
23
- case EmailVerificationLinkUsedErrorCode:
24
- case undefined: {
25
- return _jsx(RedirectMessageCard, { type: 'emailVerified', fullPage: fullPage });
26
- }
27
- }
28
- return null;
29
- }
@@ -1,4 +0,0 @@
1
- export default function ForgotPassword({ fullPage }: {
2
- fullPage?: boolean;
3
- }): import("react/jsx-runtime").JSX.Element;
4
- //# sourceMappingURL=ForgotPassword.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ForgotPassword.d.ts","sourceRoot":"","sources":["../../src/components/ForgotPassword.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,QAAc,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,2CA0BhF"}
@@ -1,22 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import ForgotPasswordElement from "../elements/ForgotPassword";
4
- import CardFrame from "../elements/CardFrame";
5
- import CardHeader from "../elements/CardHeader";
6
- import { useUser, useStackApp } from "..";
7
- import RedirectMessageCard from "../elements/RedirectMessageCard";
8
- import NextLink from 'next/link';
9
- import { useState } from "react";
10
- export default function ForgotPassword({ fullPage = false }) {
11
- const stackApp = useStackApp();
12
- const user = useUser();
13
- const [sent, setSent] = useState(false);
14
- if (user) {
15
- return _jsx(RedirectMessageCard, { type: 'signedIn', fullPage: fullPage });
16
- }
17
- if (sent) {
18
- return _jsx(RedirectMessageCard, { type: 'emailSent', fullPage: fullPage });
19
- }
20
- return (_jsxs(CardFrame, { fullPage: fullPage, children: [_jsx(CardHeader, { title: "Reset Your Password", children: _jsxs("p", { children: ["Don't need to reset? ", _jsx(NextLink, { href: stackApp.urls['signUp'], passHref: true, className: "wl_text-blue-500", children: "Sign In" })] }) }), _jsx(ForgotPasswordElement, { onSent: () => setSent(true) })] }));
21
- }
22
- ;
@@ -1,2 +0,0 @@
1
- export default function OAuthCallback(): import("react/jsx-runtime").JSX.Element;
2
- //# sourceMappingURL=OAuthCallback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OAuthCallback.d.ts","sourceRoot":"","sources":["../../src/components/OAuthCallback.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,aAAa,4CAapC"}
@@ -1,20 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useRef, useEffect } from "react";
4
- import { useStackApp } from "..";
5
- import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
6
- import MessageCard from "../elements/MessageCard";
7
- import { useRouter } from "next/navigation";
8
- export default function OAuthCallback() {
9
- const app = useStackApp();
10
- const router = useRouter();
11
- const called = useRef(false);
12
- useEffect(() => runAsynchronously(async () => {
13
- if (called.current)
14
- return;
15
- called.current = true;
16
- await app.callOAuthCallback();
17
- router.push(app.urls.userHome);
18
- }), []);
19
- return _jsx(MessageCard, { title: 'Redirecting...', fullPage: true });
20
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"PasswordReset.d.ts","sourceRoot":"","sources":["../../src/components/PasswordReset.tsx"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,YAAY,EACZ,QAAgB,GACjB,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,uDA0CA"}