@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.
- package/dist/components/card-frame.d.ts +0 -1
- package/dist/components/credential-sign-in.d.ts +0 -1
- package/dist/components/credential-sign-up.d.ts +0 -1
- package/dist/components/forgot-password.d.ts +0 -1
- package/dist/components/form-warning.d.ts +0 -1
- package/dist/components/magic-link-sign-in.d.ts +1 -0
- package/dist/components/magic-link-sign-in.js +33 -0
- package/dist/components/message-card.d.ts +0 -1
- package/dist/components/oauth-button.d.ts +0 -1
- package/dist/components/oauth-group.d.ts +0 -1
- package/dist/components/password-field.d.ts +0 -1
- package/dist/components/password-reset-inner.d.ts +0 -1
- package/dist/components/redirect-message-card.d.ts +0 -1
- package/dist/components/separator-with-text.d.ts +0 -1
- package/dist/components/user-avatar.d.ts +0 -1
- package/dist/components/user-button.d.ts +0 -1
- package/dist/components-core/avatar.d.ts +0 -1
- package/dist/components-core/button.d.ts +0 -1
- package/dist/components-core/card.d.ts +0 -1
- package/dist/components-core/collapsible.d.ts +0 -1
- package/dist/components-core/container.d.ts +0 -1
- package/dist/components-core/dropdown.d.ts +0 -1
- package/dist/components-core/index.d.ts +17 -14
- package/dist/components-core/index.js +35 -99
- package/dist/components-core/input.d.ts +0 -1
- package/dist/components-core/label.d.ts +0 -1
- package/dist/components-core/label.js +2 -2
- package/dist/components-core/link.d.ts +0 -1
- package/dist/components-core/loading-indicator.d.ts +0 -1
- package/dist/components-core/popover.d.ts +0 -1
- package/dist/components-core/separator.d.ts +0 -1
- package/dist/components-core/tabs.d.ts +7 -0
- package/dist/components-core/tabs.js +50 -0
- package/dist/components-core/text.d.ts +0 -1
- package/dist/components-core-joy/button.d.ts +0 -1
- package/dist/components-core-joy/input.d.ts +0 -1
- package/dist/components-core-joy/separator.d.ts +1 -2
- package/dist/components-core-joy/tabs.d.ts +5 -0
- package/dist/components-core-joy/tabs.js +20 -0
- package/dist/components-core-joy/text.d.ts +0 -1
- package/dist/components-page/account-settings.d.ts +0 -1
- package/dist/components-page/account-settings.js +1 -1
- package/dist/components-page/auth-page.d.ts +4 -0
- package/dist/components-page/auth-page.js +20 -0
- package/dist/components-page/email-verification.d.ts +0 -1
- package/dist/components-page/forgot-password.d.ts +0 -1
- package/dist/{components/PasswordReset.d.ts → components-page/magic-link-callback.d.ts} +1 -2
- package/dist/components-page/magic-link-callback.js +35 -0
- package/dist/components-page/oauth-callback.d.ts +0 -1
- package/dist/components-page/password-reset.d.ts +0 -1
- package/dist/components-page/sign-in.d.ts +0 -1
- package/dist/components-page/sign-in.js +3 -16
- package/dist/components-page/sign-out.d.ts +0 -1
- package/dist/components-page/sign-out.js +1 -2
- package/dist/components-page/sign-up.d.ts +0 -1
- package/dist/components-page/sign-up.js +3 -16
- package/dist/components-page/stack-handler.d.ts +0 -1
- package/dist/components-page/stack-handler.js +5 -0
- package/dist/index.d.ts +0 -1
- package/dist/joy.d.ts +0 -1
- package/dist/lib/auth.d.ts +0 -1
- package/dist/lib/cookie.d.ts +0 -1
- package/dist/lib/cookie.js +1 -1
- package/dist/lib/hooks.d.ts +0 -1
- package/dist/lib/stack-app.d.ts +6 -1
- package/dist/lib/stack-app.js +32 -1
- package/dist/providers/component-provider.d.ts +8 -1
- package/dist/providers/component-provider.js +5 -0
- package/dist/providers/design-provider.d.ts +0 -1
- package/dist/providers/joy-provider.d.ts +5 -2
- package/dist/providers/joy-provider.js +5 -0
- package/dist/providers/stack-provider-client.d.ts +0 -1
- package/dist/providers/stack-provider.d.ts +0 -1
- package/dist/providers/styled-components-registry.d.ts +0 -1
- package/dist/providers/theme-provider.d.ts +0 -1
- package/dist/utils/constants.d.ts +0 -1
- package/dist/utils/email.d.ts +1 -2
- package/dist/utils/email.js +4 -4
- package/dist/utils/next.d.ts +0 -1
- package/dist/utils/url.d.ts +0 -1
- package/package.json +6 -4
- package/dist/components/EmailVerification.d.ts +0 -6
- package/dist/components/EmailVerification.d.ts.map +0 -1
- package/dist/components/EmailVerification.js +0 -29
- package/dist/components/ForgotPassword.d.ts +0 -4
- package/dist/components/ForgotPassword.d.ts.map +0 -1
- package/dist/components/ForgotPassword.js +0 -22
- package/dist/components/OAuthCallback.d.ts +0 -2
- package/dist/components/OAuthCallback.d.ts.map +0 -1
- package/dist/components/OAuthCallback.js +0 -20
- package/dist/components/PasswordReset.d.ts.map +0 -1
- package/dist/components/PasswordReset.js +0 -36
- package/dist/components/SignIn.d.ts +0 -5
- package/dist/components/SignIn.d.ts.map +0 -1
- package/dist/components/SignIn.js +0 -20
- package/dist/components/SignOut.d.ts +0 -4
- package/dist/components/SignOut.d.ts.map +0 -1
- package/dist/components/SignOut.js +0 -12
- package/dist/components/SignUp.d.ts +0 -5
- package/dist/components/SignUp.d.ts.map +0 -1
- package/dist/components/SignUp.js +0 -19
- package/dist/components/StackHandler.d.ts +0 -9
- package/dist/components/StackHandler.d.ts.map +0 -1
- package/dist/components/StackHandler.js +0 -58
- package/dist/components/card-frame.d.ts.map +0 -1
- package/dist/components/credential-sign-in.d.ts.map +0 -1
- package/dist/components/credential-sign-up.d.ts.map +0 -1
- package/dist/components/forgot-password.d.ts.map +0 -1
- package/dist/components/form-warning.d.ts.map +0 -1
- package/dist/components/message-card.d.ts.map +0 -1
- package/dist/components/oauth-button.d.ts.map +0 -1
- package/dist/components/oauth-group.d.ts.map +0 -1
- package/dist/components/password-field.d.ts.map +0 -1
- package/dist/components/password-reset-inner.d.ts.map +0 -1
- package/dist/components/redirect-message-card.d.ts.map +0 -1
- package/dist/components/separator-with-text.d.ts.map +0 -1
- package/dist/components/user-avatar.d.ts.map +0 -1
- package/dist/components/user-button.d.ts.map +0 -1
- package/dist/components-core/avatar.d.ts.map +0 -1
- package/dist/components-core/button.d.ts.map +0 -1
- package/dist/components-core/card.d.ts.map +0 -1
- package/dist/components-core/collapsible.d.ts.map +0 -1
- package/dist/components-core/container.d.ts.map +0 -1
- package/dist/components-core/dropdown.d.ts.map +0 -1
- package/dist/components-core/index.d.ts.map +0 -1
- package/dist/components-core/input.d.ts.map +0 -1
- package/dist/components-core/label.d.ts.map +0 -1
- package/dist/components-core/link.d.ts.map +0 -1
- package/dist/components-core/loading-indicator.d.ts.map +0 -1
- package/dist/components-core/popover.d.ts.map +0 -1
- package/dist/components-core/separator.d.ts.map +0 -1
- package/dist/components-core/text.d.ts.map +0 -1
- package/dist/components-core-joy/button.d.ts.map +0 -1
- package/dist/components-core-joy/input.d.ts.map +0 -1
- package/dist/components-core-joy/separator.d.ts.map +0 -1
- package/dist/components-core-joy/text.d.ts.map +0 -1
- package/dist/components-page/account-settings.d.ts.map +0 -1
- package/dist/components-page/email-verification.d.ts.map +0 -1
- package/dist/components-page/forgot-password.d.ts.map +0 -1
- package/dist/components-page/oauth-callback.d.ts.map +0 -1
- package/dist/components-page/password-reset.d.ts.map +0 -1
- package/dist/components-page/sign-in.d.ts.map +0 -1
- package/dist/components-page/sign-out.d.ts.map +0 -1
- package/dist/components-page/sign-up.d.ts.map +0 -1
- package/dist/components-page/stack-handler.d.ts.map +0 -1
- package/dist/elements/Button.d.ts +0 -11
- package/dist/elements/Button.d.ts.map +0 -1
- package/dist/elements/Button.js +0 -18
- package/dist/elements/CardFrame.d.ts +0 -6
- package/dist/elements/CardFrame.d.ts.map +0 -1
- package/dist/elements/CardFrame.js +0 -10
- package/dist/elements/CardHeader.d.ts +0 -6
- package/dist/elements/CardHeader.d.ts.map +0 -1
- package/dist/elements/CardHeader.js +0 -4
- package/dist/elements/CredentialSignIn.d.ts +0 -4
- package/dist/elements/CredentialSignIn.d.ts.map +0 -1
- package/dist/elements/CredentialSignIn.js +0 -57
- package/dist/elements/CredentialSignUp.d.ts +0 -4
- package/dist/elements/CredentialSignUp.d.ts.map +0 -1
- package/dist/elements/CredentialSignUp.js +0 -73
- package/dist/elements/DividerWithText.d.ts +0 -4
- package/dist/elements/DividerWithText.d.ts.map +0 -1
- package/dist/elements/DividerWithText.js +0 -5
- package/dist/elements/ForgotPassword.d.ts +0 -4
- package/dist/elements/ForgotPassword.d.ts.map +0 -1
- package/dist/elements/ForgotPassword.js +0 -32
- package/dist/elements/FormWarning.d.ts +0 -4
- package/dist/elements/FormWarning.d.ts.map +0 -1
- package/dist/elements/FormWarning.js +0 -7
- package/dist/elements/MessageCard.d.ts +0 -7
- package/dist/elements/MessageCard.d.ts.map +0 -1
- package/dist/elements/MessageCard.js +0 -5
- package/dist/elements/OAuthButton.d.ts +0 -6
- package/dist/elements/OAuthButton.d.ts.map +0 -1
- package/dist/elements/OAuthButton.js +0 -67
- package/dist/elements/OAuthGroup.d.ts +0 -5
- package/dist/elements/OAuthGroup.d.ts.map +0 -1
- package/dist/elements/OAuthGroup.js +0 -8
- package/dist/elements/PasswordField.d.ts +0 -3
- package/dist/elements/PasswordField.d.ts.map +0 -1
- package/dist/elements/PasswordField.js +0 -27
- package/dist/elements/PasswordResetInner.d.ts +0 -5
- package/dist/elements/PasswordResetInner.d.ts.map +0 -1
- package/dist/elements/PasswordResetInner.js +0 -61
- package/dist/elements/RedirectMessageCard.d.ts +0 -5
- package/dist/elements/RedirectMessageCard.d.ts.map +0 -1
- package/dist/elements/RedirectMessageCard.js +0 -55
- package/dist/index.d.ts.map +0 -1
- package/dist/joy.d.ts.map +0 -1
- package/dist/lib/auth.d.ts.map +0 -1
- package/dist/lib/cookie.d.ts.map +0 -1
- package/dist/lib/hooks.d.ts.map +0 -1
- package/dist/lib/stack-app.d.ts.map +0 -1
- package/dist/providers/StackProvider.d.ts +0 -7
- package/dist/providers/StackProvider.d.ts.map +0 -1
- package/dist/providers/StackProvider.js +0 -6
- package/dist/providers/StackProviderClient.d.ts +0 -10
- package/dist/providers/StackProviderClient.d.ts.map +0 -1
- package/dist/providers/StackProviderClient.js +0 -14
- package/dist/providers/component-provider.d.ts.map +0 -1
- package/dist/providers/design-provider.d.ts.map +0 -1
- package/dist/providers/joy-provider.d.ts.map +0 -1
- package/dist/providers/stack-provider-client.d.ts.map +0 -1
- package/dist/providers/stack-provider.d.ts.map +0 -1
- package/dist/providers/styled-components-registry.d.ts.map +0 -1
- package/dist/providers/theme-provider.d.ts.map +0 -1
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/email.d.ts.map +0 -1
- package/dist/utils/next.d.ts.map +0 -1
- package/dist/utils/react.d.ts +0 -2
- package/dist/utils/react.d.ts.map +0 -1
- package/dist/utils/react.js +0 -6
- package/dist/utils/results.d.ts +0 -25
- package/dist/utils/results.d.ts.map +0 -1
- package/dist/utils/results.js +0 -46
- package/dist/utils/url.d.ts.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export default function
|
|
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,19 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx
|
|
3
|
-
import
|
|
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
|
-
|
|
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,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 {
|
|
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,19 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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
package/dist/lib/auth.d.ts
CHANGED
|
@@ -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
|
package/dist/lib/cookie.d.ts
CHANGED
package/dist/lib/cookie.js
CHANGED
package/dist/lib/hooks.d.ts
CHANGED
package/dist/lib/stack-app.d.ts
CHANGED
|
@@ -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
|
package/dist/lib/stack-app.js
CHANGED
|
@@ -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() {
|
|
@@ -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<
|
|
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();
|
|
@@ -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
|
package/dist/utils/email.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export declare function validateEmail(email: string):
|
|
2
|
-
//# sourceMappingURL=email.d.ts.map
|
|
1
|
+
export declare function validateEmail(email: string): boolean;
|
package/dist/utils/email.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import * as yup from "yup";
|
|
1
2
|
export function validateEmail(email) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
;
|
package/dist/utils/next.d.ts
CHANGED
package/dist/utils/url.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackframe/stack",
|
|
3
|
-
"version": "2.
|
|
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
|
-
"
|
|
34
|
-
"@stackframe/stack-
|
|
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 +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 +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"}
|