@stackframe/stack 2.5.8 → 2.5.9
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/CHANGELOG.md +10 -0
- package/dist/components/credential-sign-in.d.mts +5 -0
- package/dist/components/credential-sign-in.d.ts +5 -0
- package/dist/components/{credential-sign-in-form.js → credential-sign-in.js} +8 -8
- package/dist/components/credential-sign-in.js.map +1 -0
- package/dist/components/credential-sign-up.d.mts +5 -0
- package/dist/components/credential-sign-up.d.ts +5 -0
- package/dist/components/{credential-sign-up-form.js → credential-sign-up.js} +8 -8
- package/dist/components/credential-sign-up.js.map +1 -0
- package/dist/components/elements/user-avatar.d.mts +1 -1
- package/dist/components/elements/user-avatar.d.ts +1 -1
- package/dist/components/magic-link-sign-in.d.mts +5 -0
- package/dist/components/magic-link-sign-in.d.ts +5 -0
- package/dist/components/{magic-link-sign-in-form.js → magic-link-sign-in.js} +8 -8
- package/dist/components/magic-link-sign-in.js.map +1 -0
- package/dist/components/message-cards/predefined-message-card.js +8 -8
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/selected-team-switcher.d.mts +1 -1
- package/dist/components/selected-team-switcher.d.ts +1 -1
- package/dist/components/user-button.js +3 -3
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-page/account-settings.js +4 -4
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +21 -8
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +2 -2
- package/dist/components-page/stack-handler.d.ts +2 -2
- package/dist/components-page/stack-handler.js +8 -15
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/{credential-sign-in-form.js → credential-sign-in.js} +4 -4
- package/dist/esm/components/credential-sign-in.js.map +1 -0
- package/dist/esm/components/{credential-sign-up-form.js → credential-sign-up.js} +4 -4
- package/dist/esm/components/credential-sign-up.js.map +1 -0
- package/dist/esm/components/{magic-link-sign-in-form.js → magic-link-sign-in.js} +4 -4
- package/dist/esm/components/magic-link-sign-in.js.map +1 -0
- package/dist/esm/components/message-cards/predefined-message-card.js +8 -8
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/user-button.js +3 -3
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +4 -4
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +21 -8
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +8 -15
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/index.js +7 -9
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/auth.js +3 -3
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/cookie.js +8 -6
- package/dist/esm/lib/cookie.js.map +1 -1
- package/dist/esm/lib/stack-app.js +139 -91
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/stack-provider-client.js +1 -3
- package/dist/esm/providers/stack-provider-client.js.map +1 -1
- package/dist/esm/utils/url.js +9 -1
- package/dist/esm/utils/url.js.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +6 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.js +3 -3
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/cookie.js +6 -6
- package/dist/lib/cookie.js.map +1 -1
- package/dist/lib/hooks.d.mts +1 -1
- package/dist/lib/hooks.d.ts +1 -1
- package/dist/lib/stack-app.d.mts +58 -23
- package/dist/lib/stack-app.d.ts +58 -23
- package/dist/lib/stack-app.js +139 -91
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +1 -1
- package/dist/providers/stack-provider-client.d.ts +1 -1
- package/dist/providers/stack-provider-client.js +1 -3
- package/dist/providers/stack-provider-client.js.map +1 -1
- package/dist/providers/stack-provider.d.mts +1 -1
- package/dist/providers/stack-provider.d.ts +1 -1
- package/dist/utils/url.js +9 -1
- package/dist/utils/url.js.map +1 -1
- package/package.json +6 -4
- package/dist/components/credential-sign-in-form.d.mts +0 -5
- package/dist/components/credential-sign-in-form.d.ts +0 -5
- package/dist/components/credential-sign-in-form.js.map +0 -1
- package/dist/components/credential-sign-up-form.d.mts +0 -5
- package/dist/components/credential-sign-up-form.d.ts +0 -5
- package/dist/components/credential-sign-up-form.js.map +0 -1
- package/dist/components/magic-link-sign-in-form.d.mts +0 -5
- package/dist/components/magic-link-sign-in-form.d.ts +0 -5
- package/dist/components/magic-link-sign-in-form.js.map +0 -1
- package/dist/esm/components/credential-sign-in-form.js.map +0 -1
- package/dist/esm/components/credential-sign-up-form.js.map +0 -1
- package/dist/esm/components/magic-link-sign-in-form.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport { CredentialSignIn } from '../components/credential-sign-in';\nimport { SeparatorWithText } from '../components/elements/separator-with-text';\nimport { OAuthButtonGroup } from '../components/oauth-button-group';\nimport { MaybeFullPage } from '../components/elements/maybe-full-page';\nimport { useUser, useStackApp } from '..';\nimport { PredefinedMessageCard } from '../components/message-cards/predefined-message-card';\nimport { MagicLinkSignIn } from '../components/magic-link-sign-in';\nimport { CredentialSignUp } from '../components/credential-sign-up';\nimport { StyledLink, Tabs, TabsContent, TabsList, TabsTrigger, Typography } from '@stackframe/stack-ui';\nimport { Project } from '../lib/stack-app';\nimport { runAsynchronously } from '@stackframe/stack-shared/dist/utils/promises';\nimport { useEffect } from 'react';\n\nexport function AuthPage({\n fullPage=false,\n type,\n mockProject,\n}: {\n fullPage?: boolean,\n type: 'sign-in' | 'sign-up',\n mockProject?: {\n config: {\n credentialEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const projectFromHook = stackApp.useProject();\n const project = mockProject || projectFromHook;\n\n useEffect(() => {\n if (user && !mockProject) {\n runAsynchronously(type === 'sign-in' ? stackApp.redirectToAfterSignIn() : stackApp.redirectToAfterSignUp());\n }\n }, [user, mockProject, stackApp]);\n\n if (user && !mockProject) {\n return <PredefinedMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const enableSeparator = (project.config.credentialEnabled || project.config.magicLinkEnabled) && project.config.oauthProviders.length > 0;\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className='stack-scope flex flex-col items-stretch'>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}\n </Typography>\n {type === 'sign-in' ? (\n <Typography>\n {\"Don't have an account? \"}\n <StyledLink href={stackApp.urls.signUp} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>\n Sign up\n </StyledLink>\n </Typography>\n ) : (\n <Typography>\n {\"Already have an account? \"}\n <StyledLink href={stackApp.urls.signIn} onClick={(e) => {\n runAsynchronously(stackApp.redirectToSignUp());\n e.preventDefault();\n }}>\n Sign in\n </StyledLink>\n </Typography>\n )}\n </div>\n <OAuthButtonGroup type={type} mockProject={mockProject} />\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.config.credentialEnabled && project.config.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList className='w-full mb-2'>\n <TabsTrigger value='magic-link' className='flex-1'>Magic Link</TabsTrigger>\n <TabsTrigger value='password' className='flex-1'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.config.credentialEnabled ? (\n type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.config.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;AAEA,SAAS,wBAAwB;AACjC,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,SAAS,mBAAmB;AACrC,SAAS,6BAA6B;AACtC,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,YAAY,MAAM,aAAa,UAAU,aAAa,kBAAkB;AAEjF,SAAS,yBAAyB;AAClC,SAAS,iBAAiB;AA+Bf,cAaC,YAbD;AA7BJ,SAAS,SAAS;AAAA,EACvB,WAAS;AAAA,EACT;AAAA,EACA;AACF,GAYG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,QAAQ;AACrB,QAAM,kBAAkB,SAAS,WAAW;AAC5C,QAAM,UAAU,eAAe;AAE/B,YAAU,MAAM;AACd,QAAI,QAAQ,CAAC,aAAa;AACxB,wBAAkB,SAAS,YAAY,SAAS,sBAAsB,IAAI,SAAS,sBAAsB,CAAC;AAAA,IAC5G;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,QAAQ,CAAC;AAEhC,MAAI,QAAQ,CAAC,aAAa;AACxB,WAAO,oBAAC,yBAAsB,MAAK,YAAW,UAAoB;AAAA,EACpE;AAEA,QAAM,mBAAmB,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,eAAe,SAAS;AAExI,SACE,oBAAC,iBAAc,UACb,+BAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,oBACb;AAAA,0BAAC,cAAW,MAAK,MACd,mBAAS,YAAY,4BAA4B,wBACpD;AAAA,MACC,SAAS,YACR,qBAAC,cACE;AAAA;AAAA,QACD,oBAAC,cAAW,MAAM,SAAS,KAAK,QAAQ,SAAS,CAAC,MAAM;AACtD,4BAAkB,SAAS,iBAAiB,CAAC;AAC7C,YAAE,eAAe;AAAA,QACnB,GAAG,qBAEH;AAAA,SACF,IAEA,qBAAC,cACE;AAAA;AAAA,QACD,oBAAC,cAAW,MAAM,SAAS,KAAK,QAAQ,SAAS,CAAC,MAAM;AACtD,4BAAkB,SAAS,iBAAiB,CAAC;AAC7C,YAAE,eAAe;AAAA,QACnB,GAAG,qBAEH;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,oBAAC,oBAAiB,MAAY,aAA0B;AAAA,IACvD,mBAAmB,oBAAC,qBAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,OAAO,qBAAqB,QAAQ,OAAO,mBAClD,qBAAC,QAAK,cAAa,cACjB;AAAA,2BAAC,YAAS,WAAU,eAClB;AAAA,4BAAC,eAAY,OAAM,cAAa,WAAU,UAAS,wBAAU;AAAA,QAC7D,oBAAC,eAAY,OAAM,YAAW,WAAU,UAAS,sBAAQ;AAAA,SAC3D;AAAA,MACA,oBAAC,eAAY,OAAM,cACjB,8BAAC,mBAAe,GAClB;AAAA,MACA,oBAAC,eAAY,OAAM,YAChB,mBAAS,YAAY,oBAAC,oBAAgB,IAAK,oBAAC,oBAAgB,GAC/D;AAAA,OACF,IACE,QAAQ,OAAO,oBACjB,SAAS,YAAY,oBAAC,oBAAgB,IAAK,oBAAC,oBAAgB,IAC1D,QAAQ,OAAO,mBACjB,oBAAC,mBAAe,IACd;AAAA,KACN,GACF;AAEJ;","names":[]}
|
|
@@ -11,35 +11,30 @@ import { AccountSettings } from "./account-settings";
|
|
|
11
11
|
import { MagicLinkCallback } from "./magic-link-callback";
|
|
12
12
|
import { ErrorPage } from "./error-page";
|
|
13
13
|
import { PasswordReset } from "./password-reset";
|
|
14
|
+
import { getRelativePart } from "@stackframe/stack-shared/dist/utils/urls";
|
|
14
15
|
import { jsx } from "react/jsx-runtime";
|
|
15
16
|
async function StackHandler({
|
|
16
17
|
app,
|
|
17
18
|
params: { stack } = {},
|
|
18
19
|
searchParams = {},
|
|
19
|
-
|
|
20
|
-
fullPage = "deprecated-unset"
|
|
20
|
+
fullPage = false
|
|
21
21
|
}) {
|
|
22
|
-
if (fullPage === "deprecated-unset") {
|
|
23
|
-
console.warn("You are not passing `fullPage` to Stack's Handler. The default behaviour will soon change from `true` to `false`. Please update your Handler component in handler/[...stack]/page.tsx by adding the `fullPage` prop.");
|
|
24
|
-
fullPage = true;
|
|
25
|
-
}
|
|
26
22
|
if (!stack) {
|
|
27
23
|
return /* @__PURE__ */ jsx(MessageCard, { title: "Invalid Stack Handler Setup", fullPage, children: /* @__PURE__ */ jsx("p", { children: "Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack]." }) });
|
|
28
24
|
}
|
|
29
25
|
function redirectIfNotHandler(name) {
|
|
30
26
|
const url = app.urls[name];
|
|
31
27
|
const handlerUrl = app.urls.handler;
|
|
32
|
-
if (url.startsWith(handlerUrl)) {
|
|
28
|
+
if (url !== handlerUrl && url.startsWith(handlerUrl + "/")) {
|
|
33
29
|
return;
|
|
34
30
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const user = await app.getUser();
|
|
39
|
-
if (user) {
|
|
40
|
-
redirect(app.urls.afterSignIn);
|
|
31
|
+
const urlObj = new URL(url, "http://example.com");
|
|
32
|
+
for (const [key, value] of Object.entries(searchParams)) {
|
|
33
|
+
urlObj.searchParams.set(key, value);
|
|
41
34
|
}
|
|
35
|
+
redirect(getRelativePart(urlObj), RedirectType.replace);
|
|
42
36
|
}
|
|
37
|
+
;
|
|
43
38
|
const availablePaths = {
|
|
44
39
|
signIn: "sign-in",
|
|
45
40
|
signUp: "sign-up",
|
|
@@ -56,12 +51,10 @@ async function StackHandler({
|
|
|
56
51
|
switch (path) {
|
|
57
52
|
case availablePaths.signIn: {
|
|
58
53
|
redirectIfNotHandler("signIn");
|
|
59
|
-
await redirectIfHasUser();
|
|
60
54
|
return /* @__PURE__ */ jsx(SignIn, { fullPage });
|
|
61
55
|
}
|
|
62
56
|
case availablePaths.signUp: {
|
|
63
57
|
redirectIfNotHandler("signUp");
|
|
64
|
-
await redirectIfHasUser();
|
|
65
58
|
return /* @__PURE__ */ jsx(SignUp, { fullPage });
|
|
66
59
|
}
|
|
67
60
|
case availablePaths.emailVerification: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import { SignUp } from \"./sign-up\";\nimport { SignIn } from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { EmailVerification } from \"./email-verification\";\nimport { StackServerApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport { SignOut } from \"./sign-out\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { AccountSettings } from \"./account-settings\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { ErrorPage } from \"./error-page\";\nimport { PasswordReset } from \"./password-reset\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import { SignUp } from \"./sign-up\";\nimport { SignIn } from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { EmailVerification } from \"./email-verification\";\nimport { StackServerApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport { SignOut } from \"./sign-out\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { AccountSettings } from \"./account-settings\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { ErrorPage } from \"./error-page\";\nimport { PasswordReset } from \"./password-reset\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n fullPage = false,\n}: {\n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] },\n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n if (!stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={fullPage}>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = app.urls[name];\n const handlerUrl = app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n // don't redirect if the url is a handler url\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n for (const [key, value] of Object.entries(searchParams)) {\n urlObj.searchParams.set(key, value);\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const availablePaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n emailVerification: 'email-verification',\n passwordReset: 'password-reset',\n forgotPassword: 'forgot-password',\n signOut: 'sign-out',\n oauthCallback: 'oauth-callback',\n accountSettings: 'account-settings',\n magicLinkCallback: 'magic-link-callback',\n error: 'error',\n };\n\n const path = stack.join('/');\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler('signIn');\n return <SignIn fullPage={fullPage} />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler('signUp');\n return <SignUp fullPage={fullPage} />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification searchParams={searchParams} fullPage={fullPage} />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset searchParams={searchParams} fullPage={fullPage} />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword fullPage={fullPage} />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler('signOut');\n return <SignOut fullPage={fullPage} />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback fullPage={fullPage} />;\n }\n case availablePaths.accountSettings: {\n redirectIfNotHandler('accountSettings');\n return <AccountSettings fullPage={fullPage} />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback searchParams={searchParams} fullPage={fullPage} />;\n }\n case availablePaths.error: {\n return <ErrorPage searchParams={searchParams} fullPage={fullPage} />;\n }\n default: {\n for (const [key, value] of Object.entries(availablePaths)) {\n if (path === value.replaceAll('-', '')) {\n redirect(`${app.urls.handler}/${value}`, RedirectType.replace);\n }\n }\n return notFound();\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -13,23 +13,22 @@ import { MessageCard } from "./components/message-cards/message-card";
|
|
|
13
13
|
import { UserButton } from "./components/user-button";
|
|
14
14
|
import { AccountSettings } from "./components-page/account-settings";
|
|
15
15
|
import { AuthPage } from "./components-page/auth-page";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
16
|
+
import { CredentialSignIn } from "./components/credential-sign-in";
|
|
17
|
+
import { CredentialSignUp } from "./components/credential-sign-up";
|
|
18
|
+
import { MagicLinkSignIn } from "./components/magic-link-sign-in";
|
|
19
19
|
import { OAuthButton } from "./components/oauth-button";
|
|
20
20
|
import { OAuthButtonGroup } from "./components/oauth-button-group";
|
|
21
21
|
import {
|
|
22
|
-
SelectedTeamSwitcher
|
|
23
|
-
SelectedTeamSwitcher as SelectedTeamSwitcher2
|
|
22
|
+
SelectedTeamSwitcher
|
|
24
23
|
} from "./components/selected-team-switcher";
|
|
25
24
|
export {
|
|
26
25
|
AccountSettings,
|
|
27
26
|
AuthPage,
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
CredentialSignIn,
|
|
28
|
+
CredentialSignUp,
|
|
30
29
|
EmailVerification,
|
|
31
30
|
ForgotPassword,
|
|
32
|
-
|
|
31
|
+
MagicLinkSignIn,
|
|
33
32
|
MessageCard,
|
|
34
33
|
OAuthButton,
|
|
35
34
|
OAuthButtonGroup,
|
|
@@ -40,7 +39,6 @@ export {
|
|
|
40
39
|
default3 as StackHandler,
|
|
41
40
|
default2 as StackProvider,
|
|
42
41
|
StackTheme,
|
|
43
|
-
SelectedTeamSwitcher2 as TeamSwitcher,
|
|
44
42
|
UserButton,
|
|
45
43
|
useStackApp,
|
|
46
44
|
useUser
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { StackTheme } from './providers/theme-provider';\nexport * from './lib/stack-app';\n\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { UserButton } from \"./components/user-button\";\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport {
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { StackTheme } from './providers/theme-provider';\nexport * from './lib/stack-app';\n\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { UserButton } from \"./components/user-button\";\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport { CredentialSignIn as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { CredentialSignUp as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { MagicLinkSignIn as MagicLinkSignIn } from \"./components/magic-link-sign-in\";\nexport { OAuthButton } from \"./components/oauth-button\";\nexport { OAuthButtonGroup } from \"./components/oauth-button-group\";\n\nexport {\n SelectedTeamSwitcher,\n} from \"./components/selected-team-switcher\";\n"],"mappings":";AAAA,SAAoB,WAAXA,gBAAgC;AACzC,SAAS,SAAS,mBAAmB;AACrC,SAAoB,WAAXA,gBAA+B;AACxC,SAAS,kBAAkB;AAC3B,cAAc;AAEd,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAA6B,wBAAwB;AACrD,SAA6B,wBAAwB;AACrD,SAA4B,uBAAuB;AACnD,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,OACK;","names":["default"]}
|
package/dist/esm/lib/auth.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/lib/auth.ts
|
|
2
|
-
import { saveVerifierAndState, getVerifierAndState } from "./cookie";
|
|
3
|
-
import { constructRedirectUrl } from "../utils/url";
|
|
4
|
-
import { neverResolve } from "@stackframe/stack-shared/dist/utils/promises";
|
|
5
2
|
import { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors";
|
|
3
|
+
import { neverResolve } from "@stackframe/stack-shared/dist/utils/promises";
|
|
4
|
+
import { constructRedirectUrl } from "../utils/url";
|
|
5
|
+
import { getVerifierAndState, saveVerifierAndState } from "./cookie";
|
|
6
6
|
async function signInWithOAuth(iface, options) {
|
|
7
7
|
const { codeChallenge, state } = await saveVerifierAndState();
|
|
8
8
|
const location = await iface.getOAuthUrl({
|
package/dist/esm/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { getVerifierAndState, saveVerifierAndState } from \"./cookie\";\n\nexport async function signInWithOAuth(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n }\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n codeChallenge,\n state,\n type: \"authenticate\",\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\nexport async function addNewOAuthProviderOrScope(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n },\n session: InternalSession,\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n afterCallbackRedirectUrl: constructRedirectUrl(window.location.href),\n codeChallenge,\n state,\n type: \"link\",\n session,\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\n/**\n * Checks if the current URL has the query parameters for an OAuth callback, and if so, removes them.\n *\n * Must be synchronous for the logic in callOAuthCallback to work without race conditions.\n */\nfunction consumeOAuthCallbackQueryParams(expectedState: string): null | URL {\n const requiredParams = [\"code\", \"state\"];\n const originalUrl = new URL(window.location.href);\n for (const param of requiredParams) {\n if (!originalUrl.searchParams.has(param)) {\n return null;\n }\n }\n\n if (expectedState !== originalUrl.searchParams.get(\"state\")) {\n // If the state doesn't match, then the callback wasn't meant for us.\n // Maybe the website uses another OAuth library?\n return null;\n }\n\n\n const newUrl = new URL(originalUrl);\n for (const param of requiredParams) {\n newUrl.searchParams.delete(param);\n }\n\n // let's get rid of the authorization code in the history as we\n // don't redirect to `redirectUrl` if there's a validation error\n // (as the redirectUrl might be malicious!).\n //\n // We use history.replaceState instead of location.assign(...) to\n // prevent an unnecessary reload\n window.history.replaceState({}, \"\", newUrl.toString());\n\n return originalUrl;\n}\n\nexport async function callOAuthCallback(\n iface: StackClientInterface,\n redirectUrl: string,\n) {\n // note: this part of the function (until the return) needs\n // to be synchronous, to prevent race conditions when\n // callOAuthCallback is called multiple times in parallel\n const { codeVerifier, state } = getVerifierAndState();\n if (!codeVerifier || !state) {\n throw new Error(\"Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.\");\n }\n const originalUrl = consumeOAuthCallbackQueryParams(state);\n if (!originalUrl) return null;\n\n // the rest can be asynchronous (we now know that we are the\n // intended recipient of the callback)\n try {\n return await iface.callOAuthCallback({\n oauthParams: originalUrl.searchParams,\n redirectUri: constructRedirectUrl(redirectUrl),\n codeVerifier,\n state,\n });\n } catch (e) {\n throw new StackAssertionError(\"Error signing in during OAuth callback. Please try again.\", { cause: e });\n }\n}\n"],"mappings":";AAEA,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,qBAAqB,4BAA4B;AAE1D,eAAsB,gBACpB,OACA,SAMA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAEA,eAAsB,2BACpB,OACA,SAMA,SACA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D,0BAA0B,qBAAqB,OAAO,SAAS,IAAI;AAAA,IACnE;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAOA,SAAS,gCAAgC,eAAmC;AAC1E,QAAM,iBAAiB,CAAC,QAAQ,OAAO;AACvC,QAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI;AAChD,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,YAAY,aAAa,IAAI,KAAK,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,IAAI,IAAI,WAAW;AAClC,aAAW,SAAS,gBAAgB;AAClC,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AAQA,SAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC;AAErD,SAAO;AACT;AAEA,eAAsB,kBACpB,OACA,aACA;AAIA,QAAM,EAAE,cAAc,MAAM,IAAI,oBAAoB;AACpD,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC3B,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AACA,QAAM,cAAc,gCAAgC,KAAK;AACzD,MAAI,CAAC,YAAa,QAAO;AAIzB,MAAI;AACF,WAAO,MAAM,MAAM,kBAAkB;AAAA,MACnC,aAAa,YAAY;AAAA,MACzB,aAAa,qBAAqB,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,IAAI,oBAAoB,6DAA6D,EAAE,OAAO,EAAE,CAAC;AAAA,EACzG;AACF;","names":[]}
|
package/dist/esm/lib/cookie.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// src/lib/cookie.ts
|
|
2
|
+
import { cookies as rscCookies } from "@stackframe/stack-sc/force-react-server";
|
|
3
|
+
import Cookies from "js-cookie";
|
|
4
|
+
|
|
1
5
|
// ../../node_modules/.pnpm/oauth4webapi@2.10.4/node_modules/oauth4webapi/build/index.js
|
|
2
6
|
var USER_AGENT;
|
|
3
7
|
if (typeof navigator === "undefined" || !navigator.userAgent?.startsWith?.("Mozilla/5.0 ")) {
|
|
@@ -126,8 +130,6 @@ var skipStateCheck = Symbol();
|
|
|
126
130
|
var expectNoState = Symbol();
|
|
127
131
|
|
|
128
132
|
// src/lib/cookie.ts
|
|
129
|
-
import Cookies from "js-cookie";
|
|
130
|
-
import { cookies as rscCookies } from "@stackframe/stack-sc/force-react-server";
|
|
131
133
|
function isRscCookieUnavailableError(e) {
|
|
132
134
|
const allowedMessageSnippets = ["was called outside a request scope", "cookies() expects to have requestAsyncStorage"];
|
|
133
135
|
return typeof e?.message === "string" && allowedMessageSnippets.some((msg) => e.message.includes(msg));
|
|
@@ -186,16 +188,16 @@ async function saveVerifierAndState() {
|
|
|
186
188
|
const codeVerifier = generateRandomCodeVerifier();
|
|
187
189
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
188
190
|
const state = generateRandomState();
|
|
189
|
-
setCookie("stack-code-verifier", codeVerifier, { maxAge: 60 * 10 });
|
|
190
|
-
setCookie("stack-state", state, { maxAge: 60 * 10 });
|
|
191
|
+
setCookie("stack-outer-code-verifier", codeVerifier, { maxAge: 60 * 10 });
|
|
192
|
+
setCookie("stack-outer-state", state, { maxAge: 60 * 10 });
|
|
191
193
|
return {
|
|
192
194
|
codeChallenge,
|
|
193
195
|
state
|
|
194
196
|
};
|
|
195
197
|
}
|
|
196
198
|
function getVerifierAndState() {
|
|
197
|
-
const codeVerifier = getCookie("stack-code-verifier");
|
|
198
|
-
const state = getCookie("stack-state");
|
|
199
|
+
const codeVerifier = getCookie("stack-outer-code-verifier");
|
|
200
|
+
const state = getCookie("stack-outer-state");
|
|
199
201
|
return {
|
|
200
202
|
codeVerifier,
|
|
201
203
|
state
|