@stackframe/stack 2.7.19 → 2.7.20
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.js +2 -1
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/elements/sidebar-layout.js +10 -7
- package/dist/components/elements/sidebar-layout.js.map +1 -1
- package/dist/components/link.d.mts +14 -0
- package/dist/components/link.d.ts +14 -0
- package/dist/components/link.js +63 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/selected-team-switcher.js +4 -5
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components-page/account-settings.js +2 -3
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.js +3 -2
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/forgot-password.js +2 -1
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/oauth-callback.js +4 -4
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +5 -3
- package/dist/components-page/stack-handler.d.ts +5 -3
- package/dist/components-page/stack-handler.js +173 -157
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/components-page/team-creation.js +2 -3
- package/dist/components-page/team-creation.js.map +1 -1
- package/dist/esm/components/credential-sign-in.js +2 -1
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/elements/sidebar-layout.js +10 -7
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -1
- package/dist/esm/components/link.js +28 -0
- package/dist/esm/components/link.js.map +1 -0
- package/dist/esm/components/selected-team-switcher.js +4 -5
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +2 -3
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +2 -1
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +2 -1
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +4 -4
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +173 -157
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components-page/team-creation.js +2 -3
- package/dist/esm/components-page/team-creation.js.map +1 -1
- package/dist/esm/lib/stack-app.js +34 -13
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/stack-provider-client.js +1 -2
- package/dist/esm/providers/stack-provider-client.js.map +1 -1
- package/dist/esm/providers/stack-provider.js +8 -7
- package/dist/esm/providers/stack-provider.js.map +1 -1
- package/dist/esm/providers/translation-provider.js +1 -1
- package/dist/esm/providers/translation-provider.js.map +1 -1
- package/dist/generated/quetzal-translations.d.mts +2 -2
- package/dist/generated/quetzal-translations.d.ts +2 -2
- package/dist/lib/stack-app.d.mts +5 -1
- package/dist/lib/stack-app.d.ts +5 -1
- package/dist/lib/stack-app.js +34 -13
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +2 -1
- package/dist/providers/stack-provider-client.d.ts +2 -1
- package/dist/providers/stack-provider-client.js +1 -2
- package/dist/providers/stack-provider-client.js.map +1 -1
- package/dist/providers/stack-provider.d.mts +2 -2
- package/dist/providers/stack-provider.d.ts +2 -2
- package/dist/providers/stack-provider.js +8 -7
- package/dist/providers/stack-provider.js.map +1 -1
- package/dist/providers/translation-provider.d.mts +1 -1
- package/dist/providers/translation-provider.d.ts +1 -1
- package/dist/providers/translation-provider.js +1 -1
- package/dist/providers/translation-provider.js.map +1 -1
- package/package.json +5 -5
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
// src/components-page/oauth-callback.tsx
|
|
5
|
-
import {
|
|
6
|
-
import { useStackApp } from "..";
|
|
5
|
+
import { captureError } from "@stackframe/stack-shared/dist/utils/errors";
|
|
7
6
|
import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
|
|
7
|
+
import { useEffect, useRef, useState } from "react";
|
|
8
|
+
import { useStackApp } from "..";
|
|
9
|
+
import { StyledLink } from "../components/link";
|
|
8
10
|
import { MessageCard } from "../components/message-cards/message-card";
|
|
9
|
-
import { StyledLink } from "@stackframe/stack-ui";
|
|
10
|
-
import { captureError } from "@stackframe/stack-shared/dist/utils/errors";
|
|
11
11
|
import { useTranslation } from "../lib/translations";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
function OAuthCallback(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport { captureError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { StyledLink } from \"../components/link\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function OAuthCallback(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n let hasRedirected = false;\n try {\n hasRedirected = await app.callOAuthCallback();\n } catch (e: any) {\n captureError(\"<OAuthCallback />\", e);\n setError(e);\n }\n if (!hasRedirected && (!error || process.env.NODE_ENV === 'production')) {\n await app.redirectToSignIn({ noRedirectBack: true });\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>{t('If you are not redirected automatically, ')}<StyledLink href={app.urls.home}>{t(\"click here\")}</StyledLink></p> : null}\n {error ? <div>\n <p>{t(\"Something went wrong while processing the OAuth callback:\")}</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>{t(\"This is most likely an error in Stack. Please report it.\")}</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;AAOA,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AA6BP,SAAmD,KAAnD;AA3BjB,SAAS,cAAc,OAA+B;AAC3D,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,MAAM,YAAY;AACxB,QAAM,SAAS,OAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAE9D,YAAU,MAAM,kBAAkB,YAAY;AAC5C,QAAI,OAAO,QAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,mBAAa,qBAAqB,CAAC;AACnC,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,kBAAkB,CAAC,SAAS,QAAQ,IAAI,aAAa,eAAe;AACvE,YAAM,IAAI,iBAAiB,EAAE,gBAAgB,KAAK,CAAC;AAAA,IACrD;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,YAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,qBAAC,eAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,qBAAC,OAAG;AAAA,QAAE,2CAA2C;AAAA,MAAE,oBAAC,cAAW,MAAM,IAAI,KAAK,MAAO,YAAE,YAAY,GAAE;AAAA,OAAa,IAAO;AAAA,IAC5I,QAAQ,qBAAC,SACR;AAAA,0BAAC,OAAG,YAAE,2DAA2D,GAAE;AAAA,MACnE,oBAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,oBAAC,OAAG,YAAE,0DAA0D,GAAE;AAAA,OACpE,IAAS;AAAA,KACX;AACF;","names":[]}
|
|
@@ -17,7 +17,158 @@ import { SignOut } from "./sign-out";
|
|
|
17
17
|
import { TeamInvitation } from "./team-invitation";
|
|
18
18
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
19
19
|
var next15DeprecationWarning = "DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.";
|
|
20
|
-
|
|
20
|
+
var availablePaths = {
|
|
21
|
+
signIn: "sign-in",
|
|
22
|
+
signUp: "sign-up",
|
|
23
|
+
emailVerification: "email-verification",
|
|
24
|
+
passwordReset: "password-reset",
|
|
25
|
+
forgotPassword: "forgot-password",
|
|
26
|
+
signOut: "sign-out",
|
|
27
|
+
oauthCallback: "oauth-callback",
|
|
28
|
+
magicLinkCallback: "magic-link-callback",
|
|
29
|
+
teamInvitation: "team-invitation",
|
|
30
|
+
accountSettings: "account-settings",
|
|
31
|
+
error: "error"
|
|
32
|
+
};
|
|
33
|
+
var pathAliases = {
|
|
34
|
+
// also includes the uppercase and non-dashed versions
|
|
35
|
+
...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),
|
|
36
|
+
"log-in": availablePaths.signIn,
|
|
37
|
+
"register": availablePaths.signUp
|
|
38
|
+
};
|
|
39
|
+
function renderComponent(props) {
|
|
40
|
+
const { path, searchParams, fullPage, componentProps, redirectIfNotHandler, onNotFound, app } = props;
|
|
41
|
+
switch (path) {
|
|
42
|
+
case availablePaths.signIn: {
|
|
43
|
+
redirectIfNotHandler?.("signIn");
|
|
44
|
+
return /* @__PURE__ */ jsx(
|
|
45
|
+
SignIn,
|
|
46
|
+
{
|
|
47
|
+
fullPage,
|
|
48
|
+
automaticRedirect: true,
|
|
49
|
+
...filterUndefinedINU(componentProps?.SignIn)
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
case availablePaths.signUp: {
|
|
54
|
+
redirectIfNotHandler?.("signUp");
|
|
55
|
+
return /* @__PURE__ */ jsx(
|
|
56
|
+
SignUp,
|
|
57
|
+
{
|
|
58
|
+
fullPage,
|
|
59
|
+
automaticRedirect: true,
|
|
60
|
+
...filterUndefinedINU(componentProps?.SignUp)
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
case availablePaths.emailVerification: {
|
|
65
|
+
redirectIfNotHandler?.("emailVerification");
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
EmailVerification,
|
|
68
|
+
{
|
|
69
|
+
searchParams,
|
|
70
|
+
fullPage,
|
|
71
|
+
...filterUndefinedINU(componentProps?.EmailVerification)
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
case availablePaths.passwordReset: {
|
|
76
|
+
redirectIfNotHandler?.("passwordReset");
|
|
77
|
+
return /* @__PURE__ */ jsx(
|
|
78
|
+
PasswordReset,
|
|
79
|
+
{
|
|
80
|
+
searchParams,
|
|
81
|
+
fullPage,
|
|
82
|
+
...filterUndefinedINU(componentProps?.PasswordReset)
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
case availablePaths.forgotPassword: {
|
|
87
|
+
redirectIfNotHandler?.("forgotPassword");
|
|
88
|
+
return /* @__PURE__ */ jsx(
|
|
89
|
+
ForgotPassword,
|
|
90
|
+
{
|
|
91
|
+
fullPage,
|
|
92
|
+
...filterUndefinedINU(componentProps?.ForgotPassword)
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
case availablePaths.signOut: {
|
|
97
|
+
redirectIfNotHandler?.("signOut");
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
SignOut,
|
|
100
|
+
{
|
|
101
|
+
fullPage,
|
|
102
|
+
...filterUndefinedINU(componentProps?.SignOut)
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
case availablePaths.oauthCallback: {
|
|
107
|
+
redirectIfNotHandler?.("oauthCallback");
|
|
108
|
+
return /* @__PURE__ */ jsx(
|
|
109
|
+
OAuthCallback,
|
|
110
|
+
{
|
|
111
|
+
fullPage,
|
|
112
|
+
...filterUndefinedINU(componentProps?.OAuthCallback)
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
case availablePaths.magicLinkCallback: {
|
|
117
|
+
redirectIfNotHandler?.("magicLinkCallback");
|
|
118
|
+
return /* @__PURE__ */ jsx(
|
|
119
|
+
MagicLinkCallback,
|
|
120
|
+
{
|
|
121
|
+
searchParams,
|
|
122
|
+
fullPage,
|
|
123
|
+
...filterUndefinedINU(componentProps?.MagicLinkCallback)
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
case availablePaths.teamInvitation: {
|
|
128
|
+
redirectIfNotHandler?.("teamInvitation");
|
|
129
|
+
return /* @__PURE__ */ jsx(
|
|
130
|
+
TeamInvitation,
|
|
131
|
+
{
|
|
132
|
+
searchParams,
|
|
133
|
+
fullPage,
|
|
134
|
+
...filterUndefinedINU(componentProps?.TeamInvitation)
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
case availablePaths.accountSettings: {
|
|
139
|
+
return /* @__PURE__ */ jsx(
|
|
140
|
+
AccountSettings,
|
|
141
|
+
{
|
|
142
|
+
fullPage,
|
|
143
|
+
...filterUndefinedINU(componentProps?.AccountSettings)
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
case availablePaths.error: {
|
|
148
|
+
return /* @__PURE__ */ jsx(
|
|
149
|
+
ErrorPage,
|
|
150
|
+
{
|
|
151
|
+
searchParams,
|
|
152
|
+
fullPage,
|
|
153
|
+
...filterUndefinedINU(componentProps?.ErrorPage)
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
default: {
|
|
158
|
+
if (Object.values(availablePaths).includes(path)) {
|
|
159
|
+
throw new StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });
|
|
160
|
+
}
|
|
161
|
+
for (const [key, value] of Object.entries(pathAliases)) {
|
|
162
|
+
if (path === key.toLowerCase().replaceAll("-", "")) {
|
|
163
|
+
const redirectUrl = `${app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`;
|
|
164
|
+
return { redirect: redirectUrl };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return onNotFound();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function NextStackHandler(props) {
|
|
21
172
|
if (!("routeProps" in props)) {
|
|
22
173
|
console.warn(next15DeprecationWarning);
|
|
23
174
|
}
|
|
@@ -31,181 +182,46 @@ async function StackHandler(props) {
|
|
|
31
182
|
" at this location. Make sure that the file is in a folder called [...stack] and you are passing the routeProps prop."
|
|
32
183
|
] }) });
|
|
33
184
|
}
|
|
34
|
-
|
|
185
|
+
const path = params.stack.join("/");
|
|
186
|
+
const redirectIfNotHandler = (name) => {
|
|
35
187
|
const url = props.app.urls[name];
|
|
36
188
|
const handlerUrl = props.app.urls.handler;
|
|
37
189
|
if (url !== handlerUrl && url.startsWith(handlerUrl + "/")) {
|
|
38
190
|
return;
|
|
39
191
|
}
|
|
40
192
|
const urlObj = new URL(url, "http://example.com");
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
redirect(getRelativePart(urlObj), RedirectType.replace);
|
|
45
|
-
}
|
|
46
|
-
;
|
|
47
|
-
const availablePaths = {
|
|
48
|
-
signIn: "sign-in",
|
|
49
|
-
signUp: "sign-up",
|
|
50
|
-
emailVerification: "email-verification",
|
|
51
|
-
passwordReset: "password-reset",
|
|
52
|
-
forgotPassword: "forgot-password",
|
|
53
|
-
signOut: "sign-out",
|
|
54
|
-
oauthCallback: "oauth-callback",
|
|
55
|
-
magicLinkCallback: "magic-link-callback",
|
|
56
|
-
teamInvitation: "team-invitation",
|
|
57
|
-
accountSettings: "account-settings",
|
|
58
|
-
error: "error"
|
|
59
|
-
};
|
|
60
|
-
const pathAliases = {
|
|
61
|
-
// also includes the uppercase and non-dashed versions
|
|
62
|
-
...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),
|
|
63
|
-
"log-in": availablePaths.signIn,
|
|
64
|
-
"register": availablePaths.signUp
|
|
65
|
-
};
|
|
66
|
-
const path = params.stack.join("/");
|
|
67
|
-
const render = () => {
|
|
68
|
-
switch (path) {
|
|
69
|
-
case availablePaths.signIn: {
|
|
70
|
-
redirectIfNotHandler("signIn");
|
|
71
|
-
return /* @__PURE__ */ jsx(
|
|
72
|
-
SignIn,
|
|
73
|
-
{
|
|
74
|
-
fullPage: props.fullPage,
|
|
75
|
-
automaticRedirect: true,
|
|
76
|
-
...filterUndefinedINU(props.componentProps?.SignIn)
|
|
77
|
-
}
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
case availablePaths.signUp: {
|
|
81
|
-
redirectIfNotHandler("signUp");
|
|
82
|
-
return /* @__PURE__ */ jsx(
|
|
83
|
-
SignUp,
|
|
84
|
-
{
|
|
85
|
-
fullPage: props.fullPage,
|
|
86
|
-
automaticRedirect: true,
|
|
87
|
-
...filterUndefinedINU(props.componentProps?.SignUp)
|
|
88
|
-
}
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
case availablePaths.emailVerification: {
|
|
92
|
-
redirectIfNotHandler("emailVerification");
|
|
93
|
-
return /* @__PURE__ */ jsx(
|
|
94
|
-
EmailVerification,
|
|
95
|
-
{
|
|
96
|
-
searchParams,
|
|
97
|
-
fullPage: props.fullPage,
|
|
98
|
-
...filterUndefinedINU(props.componentProps?.EmailVerification)
|
|
99
|
-
}
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
case availablePaths.passwordReset: {
|
|
103
|
-
redirectIfNotHandler("passwordReset");
|
|
104
|
-
return /* @__PURE__ */ jsx(
|
|
105
|
-
PasswordReset,
|
|
106
|
-
{
|
|
107
|
-
searchParams: searchParams || {},
|
|
108
|
-
fullPage: props.fullPage,
|
|
109
|
-
...filterUndefinedINU(props.componentProps?.PasswordReset)
|
|
110
|
-
}
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
case availablePaths.forgotPassword: {
|
|
114
|
-
redirectIfNotHandler("forgotPassword");
|
|
115
|
-
return /* @__PURE__ */ jsx(
|
|
116
|
-
ForgotPassword,
|
|
117
|
-
{
|
|
118
|
-
fullPage: props.fullPage,
|
|
119
|
-
...filterUndefinedINU(props.componentProps?.ForgotPassword)
|
|
120
|
-
}
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
case availablePaths.signOut: {
|
|
124
|
-
redirectIfNotHandler("signOut");
|
|
125
|
-
return /* @__PURE__ */ jsx(
|
|
126
|
-
SignOut,
|
|
127
|
-
{
|
|
128
|
-
fullPage: props.fullPage,
|
|
129
|
-
...filterUndefinedINU(props.componentProps?.SignOut)
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
case availablePaths.oauthCallback: {
|
|
134
|
-
redirectIfNotHandler("oauthCallback");
|
|
135
|
-
return /* @__PURE__ */ jsx(
|
|
136
|
-
OAuthCallback,
|
|
137
|
-
{
|
|
138
|
-
fullPage: props.fullPage,
|
|
139
|
-
...filterUndefinedINU(props.componentProps?.OAuthCallback)
|
|
140
|
-
}
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
case availablePaths.magicLinkCallback: {
|
|
144
|
-
redirectIfNotHandler("magicLinkCallback");
|
|
145
|
-
return /* @__PURE__ */ jsx(
|
|
146
|
-
MagicLinkCallback,
|
|
147
|
-
{
|
|
148
|
-
searchParams: searchParams || {},
|
|
149
|
-
fullPage: props.fullPage,
|
|
150
|
-
...filterUndefinedINU(props.componentProps?.MagicLinkCallback)
|
|
151
|
-
}
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
case availablePaths.teamInvitation: {
|
|
155
|
-
redirectIfNotHandler("teamInvitation");
|
|
156
|
-
return /* @__PURE__ */ jsx(
|
|
157
|
-
TeamInvitation,
|
|
158
|
-
{
|
|
159
|
-
searchParams: searchParams || {},
|
|
160
|
-
fullPage: props.fullPage,
|
|
161
|
-
...filterUndefinedINU(props.componentProps?.TeamInvitation)
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
case availablePaths.accountSettings: {
|
|
166
|
-
return /* @__PURE__ */ jsx(
|
|
167
|
-
AccountSettings,
|
|
168
|
-
{
|
|
169
|
-
fullPage: props.fullPage,
|
|
170
|
-
...filterUndefinedINU(props.componentProps?.AccountSettings)
|
|
171
|
-
}
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
case availablePaths.error: {
|
|
175
|
-
return /* @__PURE__ */ jsx(
|
|
176
|
-
ErrorPage,
|
|
177
|
-
{
|
|
178
|
-
searchParams: searchParams || {},
|
|
179
|
-
fullPage: props.fullPage,
|
|
180
|
-
...filterUndefinedINU(props.componentProps?.ErrorPage)
|
|
181
|
-
}
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
default: {
|
|
185
|
-
if (Object.values(availablePaths).includes(path)) {
|
|
186
|
-
throw new StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });
|
|
187
|
-
}
|
|
188
|
-
for (const [key, value] of Object.entries(pathAliases)) {
|
|
189
|
-
if (path === key.toLowerCase().replaceAll("-", "")) {
|
|
190
|
-
redirect(`${props.app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`, RedirectType.replace);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return notFound();
|
|
193
|
+
if (searchParams) {
|
|
194
|
+
for (const [key, value] of Object.entries(searchParams)) {
|
|
195
|
+
urlObj.searchParams.set(key, value);
|
|
194
196
|
}
|
|
195
197
|
}
|
|
198
|
+
redirect(getRelativePart(urlObj), RedirectType.replace);
|
|
196
199
|
};
|
|
200
|
+
const result = renderComponent({
|
|
201
|
+
path,
|
|
202
|
+
searchParams: searchParams ?? {},
|
|
203
|
+
fullPage: props.fullPage,
|
|
204
|
+
componentProps: props.componentProps,
|
|
205
|
+
redirectIfNotHandler,
|
|
206
|
+
onNotFound: () => notFound(),
|
|
207
|
+
app: props.app
|
|
208
|
+
});
|
|
209
|
+
if (result && "redirect" in result) {
|
|
210
|
+
redirect(result.redirect, RedirectType.replace);
|
|
211
|
+
}
|
|
197
212
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
198
213
|
process.env.NODE_ENV === "development" && !("routeProps" in props) && /* @__PURE__ */ jsxs("span", { style: { color: "red" }, children: [
|
|
199
214
|
next15DeprecationWarning,
|
|
200
215
|
". This warning will not be shown in production."
|
|
201
216
|
] }),
|
|
202
|
-
/* @__PURE__ */ jsx(IframePreventer, { children:
|
|
217
|
+
/* @__PURE__ */ jsx(IframePreventer, { children: result })
|
|
203
218
|
] });
|
|
204
219
|
}
|
|
220
|
+
var stack_handler_default = NextStackHandler;
|
|
205
221
|
function filterUndefinedINU(value) {
|
|
206
222
|
return value === void 0 ? value : filterUndefined(value);
|
|
207
223
|
}
|
|
208
224
|
export {
|
|
209
|
-
|
|
225
|
+
stack_handler_default as default
|
|
210
226
|
};
|
|
211
227
|
//# sourceMappingURL=stack-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { FilterUndefined, filterUndefined, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { IframePreventer } from \"../components/iframe-preventer\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { EmailVerification } from \"./email-verification\";\nimport { ErrorPage } from \"./error-page\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n};\n\ntype RouteProps = {\n params: Promise<{ stack?: string[] }> | { stack?: string[] },\n searchParams: Promise<Record<string, string>> | Record<string, string>,\n};\n\nconst next15DeprecationWarning = \"DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>(props: {\n app: StackServerApp<HasTokenStore>,\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>[0];\n },\n} & (\n | Partial<RouteProps>\n | {\n routeProps: RouteProps | unknown,\n }\n)): Promise<any> {\n if (!(\"routeProps\" in props)) {\n console.warn(next15DeprecationWarning);\n }\n\n const routeProps = \"routeProps\" in props ? props.routeProps as RouteProps : pick(props, [\"params\", \"searchParams\"] as any);\n const params = await routeProps.params;\n const searchParams = await routeProps.searchParams;\n if (!params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use {\"<StackHandler />\"} at this location. Make sure that the file is in a folder called [...stack] and you are passing the routeProps prop.</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = props.app.urls[name];\n const handlerUrl = props.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(routeProps.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 magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n error: 'error',\n };\n\n const pathAliases = {\n // also includes the uppercase and non-dashed versions\n ...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),\n \"log-in\": availablePaths.signIn,\n \"register\": availablePaths.signUp,\n };\n\n const path = params.stack.join('/');\n\n const render = () => {\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler('signIn');\n return <SignIn\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler('signUp');\n return <SignUp\n fullPage={props.fullPage}\n automaticRedirect\n {...filterUndefinedINU(props.componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification\n searchParams={searchParams}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler('signOut');\n return <SignOut\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler('teamInvitation');\n return <TeamInvitation\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={searchParams || {}}\n fullPage={props.fullPage}\n {...filterUndefinedINU(props.componentProps?.ErrorPage)}\n />;\n }\n default: {\n if (Object.values(availablePaths).includes(path)) {\n throw new StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });\n }\n for (const [key, value] of Object.entries(pathAliases)) {\n if (path === key.toLowerCase().replaceAll('-', '')) {\n redirect(`${props.app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`, RedirectType.replace);\n }\n }\n return notFound();\n }\n }\n };\n\n return <>\n {process.env.NODE_ENV === \"development\" && !(\"routeProps\" in props) && (\n <span style={{ color: \"red\" }}>\n {next15DeprecationWarning}. This warning will not be shown in production.\n </span>\n )}\n <IframePreventer>\n {render()}\n </IframePreventer>\n </>;\n}\n\n\nfunction filterUndefinedINU<T extends {}>(value: T | undefined): FilterUndefined<T> | undefined {\n return value === undefined ? value : filterUndefined(value);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { FilterUndefined, filterUndefined, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { useMemo } from 'react';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { IframePreventer } from \"../components/iframe-preventer\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls, StackClientApp } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { EmailVerification } from \"./email-verification\";\nimport { ErrorPage } from \"./error-page\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n};\n\ntype RouteProps = {\n params: Promise<{ stack?: string[] }> | { stack?: string[] },\n searchParams: Promise<Record<string, string>> | Record<string, string>,\n};\n\nconst next15DeprecationWarning = \"DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.\";\n\nconst 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 magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n error: 'error',\n} as const;\n\nconst pathAliases = {\n // also includes the uppercase and non-dashed versions\n ...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),\n \"log-in\": availablePaths.signIn,\n \"register\": availablePaths.signUp,\n} as const;\n\ntype BaseHandlerProps = {\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>[0];\n },\n};\n\nfunction renderComponent(props: {\n path: string,\n searchParams: Record<string, string>,\n fullPage: boolean,\n componentProps?: BaseHandlerProps['componentProps'],\n redirectIfNotHandler?: (name: keyof HandlerUrls) => void,\n onNotFound: () => any,\n app: StackClientApp<any> | StackServerApp<any>,\n}) {\n const { path, searchParams, fullPage, componentProps, redirectIfNotHandler, onNotFound, app } = props;\n\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler?.('signIn');\n return <SignIn\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler?.('signUp');\n return <SignUp\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler?.('emailVerification');\n return <EmailVerification\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler?.('passwordReset');\n return <PasswordReset\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler?.('forgotPassword');\n return <ForgotPassword\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler?.('signOut');\n return <SignOut\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler?.('oauthCallback');\n return <OAuthCallback\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler?.('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler?.('teamInvitation');\n return <TeamInvitation\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ErrorPage)}\n />;\n }\n default: {\n if (Object.values(availablePaths).includes(path as any)) {\n throw new StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });\n }\n for (const [key, value] of Object.entries(pathAliases)) {\n if (path === key.toLowerCase().replaceAll('-', '')) {\n const redirectUrl = `${app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`;\n return { redirect: redirectUrl };\n }\n }\n return onNotFound();\n }\n }\n}\n\nasync function NextStackHandler<HasTokenStore extends boolean>(props: BaseHandlerProps & {\n app: StackServerApp<HasTokenStore>,\n} & (\n | Partial<RouteProps>\n | {\n routeProps: RouteProps | unknown,\n }\n)): Promise<any> {\n if (!(\"routeProps\" in props)) {\n console.warn(next15DeprecationWarning);\n }\n\n const routeProps = \"routeProps\" in props ? props.routeProps as RouteProps : pick(props, [\"params\", \"searchParams\"] as any);\n const params = await routeProps.params;\n const searchParams = await routeProps.searchParams;\n\n if (!params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use {\"<StackHandler />\"} at this location. Make sure that the file is in a folder called [...stack] and you are passing the routeProps prop.</p>\n </MessageCard>\n );\n }\n\n const path = params.stack.join('/');\n\n const redirectIfNotHandler = (name: keyof HandlerUrls) => {\n const url = props.app.urls[name];\n const handlerUrl = props.app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n if (searchParams) {\n for (const [key, value] of Object.entries(searchParams)) {\n urlObj.searchParams.set(key, value);\n }\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const result = renderComponent({\n path,\n searchParams: searchParams ?? {},\n fullPage: props.fullPage,\n componentProps: props.componentProps,\n redirectIfNotHandler,\n onNotFound: () => notFound(),\n app: props.app,\n });\n\n if (result && 'redirect' in result) {\n redirect(result.redirect, RedirectType.replace);\n }\n\n return <>\n {process.env.NODE_ENV === \"development\" && !(\"routeProps\" in props) && (\n <span style={{ color: \"red\" }}>\n {next15DeprecationWarning}. This warning will not be shown in production.\n </span>\n )}\n <IframePreventer>\n {result}\n </IframePreventer>\n </>;\n}\n\n\nexport default NextStackHandler;\n\nfunction filterUndefinedINU<T extends {}>(value: T | undefined): FilterUndefined<T> | undefined {\n return value === undefined ? value : filterUndefined(value);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,6 @@ import { yupResolver } from "@hookform/resolvers/yup";
|
|
|
6
6
|
import { yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields";
|
|
7
7
|
import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises";
|
|
8
8
|
import { Button, Input, Label, Typography } from "@stackframe/stack-ui";
|
|
9
|
-
import { useRouter } from "next/navigation";
|
|
10
9
|
import { useState } from "react";
|
|
11
10
|
import { useForm } from "react-hook-form";
|
|
12
11
|
import { MessageCard, useStackApp, useUser } from "..";
|
|
@@ -26,7 +25,7 @@ function TeamCreation(props) {
|
|
|
26
25
|
const project = app.useProject();
|
|
27
26
|
const user = useUser({ or: "redirect" });
|
|
28
27
|
const [loading, setLoading] = useState(false);
|
|
29
|
-
const
|
|
28
|
+
const navigate = app.useNavigate();
|
|
30
29
|
if (!project.config.clientTeamCreationEnabled) {
|
|
31
30
|
return /* @__PURE__ */ jsx(MessageCard, { title: t("Team creation is not enabled") });
|
|
32
31
|
}
|
|
@@ -34,7 +33,7 @@ function TeamCreation(props) {
|
|
|
34
33
|
setLoading(true);
|
|
35
34
|
try {
|
|
36
35
|
const team = await user.createTeam({ displayName: data.displayName });
|
|
37
|
-
|
|
36
|
+
navigate(`${app.urls.handler}/team-settings/${team.id}`);
|
|
38
37
|
} finally {
|
|
39
38
|
setLoading(false);
|
|
40
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/team-creation.tsx"],"sourcesContent":["'use client';\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, Typography } from \"@stackframe/stack-ui\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/team-creation.tsx"],"sourcesContent":["'use client';\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Input, Label, Typography } from \"@stackframe/stack-ui\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { MessageCard, useStackApp, useUser } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport function TeamCreation(props: { fullPage?: boolean }) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n displayName: yupString().defined().nonEmpty(t('Please enter a team name')),\n });\n\n const { register, handleSubmit, formState: { errors } } = useForm({\n resolver: yupResolver(schema)\n });\n const app = useStackApp();\n const project = app.useProject();\n const user = useUser({ or: 'redirect' });\n const [loading, setLoading] = useState(false);\n const navigate = app.useNavigate();\n\n if (!project.config.clientTeamCreationEnabled) {\n return <MessageCard title={t('Team creation is not enabled')} />;\n }\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n\n try {\n const team = await user.createTeam({ displayName: data.displayName });\n navigate(`${app.urls.handler}/team-settings/${team.id}`);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className='stack-scope flex flex-col items-stretch' style={{ maxWidth: '380px', flexBasis: '380px', padding: props.fullPage ? '1rem' : 0 }}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n {t('Create a Team')}\n </Typography>\n </div>\n <form\n className=\"flex flex-col items-stretch stack-scope\"\n onSubmit={e => runAsynchronously(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"display-name\" className=\"mb-1\">{t('Display name')}</Label>\n <Input\n id=\"display-name\"\n {...register('displayName')}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n {t('Create')}\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}\n"],"mappings":";;;AAOA,SAAS,mBAAmB;AAC5B,SAAS,WAAW,iBAAiB;AACrC,SAAS,yBAAyB;AAClC,SAAS,QAAQ,OAAO,OAAO,kBAAkB;AACjD,SAAS,gBAAgB;AACzB,SAAS,eAAe;AAExB,SAAS,aAAa,aAAa,eAAe;AAClD,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAmBpB,cAsBH,YAtBG;AAjBJ,SAAS,aAAa,OAA+B;AAC1D,QAAM,EAAE,EAAE,IAAI,eAAe;AAE7B,QAAM,SAAS,UAAU;AAAA,IACvB,aAAa,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,CAAC;AAAA,EAC3E,CAAC;AAED,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,EAAE,IAAI,QAAQ;AAAA,IAChE,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,MAAM,YAAY;AACxB,QAAM,UAAU,IAAI,WAAW;AAC/B,QAAM,OAAO,QAAQ,EAAE,IAAI,WAAW,CAAC;AACvC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,WAAW,IAAI,YAAY;AAEjC,MAAI,CAAC,QAAQ,OAAO,2BAA2B;AAC7C,WAAO,oBAAC,eAAY,OAAO,EAAE,8BAA8B,GAAG;AAAA,EAChE;AAEA,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AAEf,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,WAAW,EAAE,aAAa,KAAK,YAAY,CAAC;AACpE,eAAS,GAAG,IAAI,KAAK,OAAO,kBAAkB,KAAK,EAAE,EAAE;AAAA,IACzD,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE,oBAAC,iBAAc,UAAU,CAAC,CAAC,MAAM,UAC/B,+BAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,UAAU,SAAS,WAAW,SAAS,SAAS,MAAM,WAAW,SAAS,EAAE,GAC5I;AAAA,wBAAC,SAAI,WAAU,oBACb,8BAAC,cAAW,MAAK,MACd,YAAE,eAAe,GACpB,GACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,UAAU,OAAK,kBAAkB,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,QAC1D,YAAU;AAAA,QAEV;AAAA,8BAAC,SAAM,SAAQ,gBAAe,WAAU,QAAQ,YAAE,cAAc,GAAE;AAAA,UAClE;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACF,GAAG,SAAS,aAAa;AAAA;AAAA,UAC5B;AAAA,UACA,oBAAC,mBAAgB,MAAM,OAAO,aAAa,SAAS,SAAS,GAAG;AAAA,UAEhE,oBAAC,UAAO,MAAK,UAAS,WAAU,QAAO,SACpC,YAAE,QAAQ,GACb;AAAA;AAAA;AAAA,IACF;AAAA,KACF,GACF;AAEJ;","names":[]}
|
|
@@ -24,10 +24,11 @@ import { constructRedirectUrl } from "../utils/url";
|
|
|
24
24
|
import { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from "./auth";
|
|
25
25
|
import { createBrowserCookieHelper, createCookieHelper, createEmptyCookieHelper, deleteCookieClient, getCookieClient, setOrDeleteCookie, setOrDeleteCookieClient } from "./cookie";
|
|
26
26
|
import * as sc from "@stackframe/stack-sc";
|
|
27
|
+
import { cookies } from "@stackframe/stack-sc";
|
|
27
28
|
var isReactServer2 = false;
|
|
28
29
|
isReactServer2 = sc.isReactServer;
|
|
29
30
|
var NextNavigation = scrambleDuringCompileTime(NextNavigationUnscrambled);
|
|
30
|
-
var clientVersion = "js @stackframe/stack@2.7.
|
|
31
|
+
var clientVersion = "js @stackframe/stack@2.7.20";
|
|
31
32
|
if (clientVersion.startsWith("STACK_COMPILE_TIME")) {
|
|
32
33
|
throw new StackAssertionError("Client version was not replaced. Something went wrong during build!");
|
|
33
34
|
}
|
|
@@ -241,7 +242,10 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
241
242
|
getBaseUrl: () => getBaseUrl(_options.baseUrl),
|
|
242
243
|
projectId: _options.projectId ?? getDefaultProjectId(),
|
|
243
244
|
clientVersion,
|
|
244
|
-
publishableClientKey: _options.publishableClientKey ?? getDefaultPublishableClientKey()
|
|
245
|
+
publishableClientKey: _options.publishableClientKey ?? getDefaultPublishableClientKey(),
|
|
246
|
+
prepareRequest: async () => {
|
|
247
|
+
await cookies?.();
|
|
248
|
+
}
|
|
245
249
|
});
|
|
246
250
|
}
|
|
247
251
|
this._tokenStoreInit = _options.tokenStore;
|
|
@@ -345,9 +349,9 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
345
349
|
get _refreshTokenCookieName() {
|
|
346
350
|
return `stack-refresh-${this.projectId}`;
|
|
347
351
|
}
|
|
348
|
-
_getTokensFromCookies(
|
|
349
|
-
const refreshToken =
|
|
350
|
-
const accessTokenObject =
|
|
352
|
+
_getTokensFromCookies(cookies2) {
|
|
353
|
+
const refreshToken = cookies2.refreshTokenCookie;
|
|
354
|
+
const accessTokenObject = cookies2.accessTokenCookie?.startsWith('["') ? JSON.parse(cookies2.accessTokenCookie) : null;
|
|
351
355
|
const accessToken = accessTokenObject && refreshToken === accessTokenObject[0] ? accessTokenObject[1] : null;
|
|
352
356
|
return {
|
|
353
357
|
refreshToken,
|
|
@@ -920,16 +924,29 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
920
924
|
async _redirectTo(options) {
|
|
921
925
|
if (this._redirectMethod === "none") {
|
|
922
926
|
return;
|
|
923
|
-
}
|
|
924
|
-
if (isReactServer2 && this._redirectMethod === "nextjs") {
|
|
927
|
+
} else if (isReactServer2 && this._redirectMethod === "nextjs") {
|
|
925
928
|
NextNavigation.redirect(options.url.toString(), options.replace ? NextNavigation.RedirectType.replace : NextNavigation.RedirectType.push);
|
|
929
|
+
} else if (typeof this._redirectMethod === "object" && this._redirectMethod.navigate) {
|
|
930
|
+
this._redirectMethod.navigate(options.url.toString());
|
|
926
931
|
} else {
|
|
927
932
|
if (options.replace) {
|
|
928
933
|
window.location.replace(options.url);
|
|
929
934
|
} else {
|
|
930
935
|
window.location.assign(options.url);
|
|
931
936
|
}
|
|
932
|
-
|
|
937
|
+
}
|
|
938
|
+
await wait(2e3);
|
|
939
|
+
}
|
|
940
|
+
useNavigate() {
|
|
941
|
+
if (typeof this._redirectMethod === "object") {
|
|
942
|
+
return this._redirectMethod.useNavigate();
|
|
943
|
+
} else if (this._redirectMethod === "window") {
|
|
944
|
+
return () => window.location.assign;
|
|
945
|
+
} else if (this._redirectMethod === "nextjs") {
|
|
946
|
+
return NextNavigation.useRouter().push;
|
|
947
|
+
} else {
|
|
948
|
+
return (to) => {
|
|
949
|
+
};
|
|
933
950
|
}
|
|
934
951
|
}
|
|
935
952
|
async _redirectIfTrusted(url, options) {
|
|
@@ -1096,7 +1113,6 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
1096
1113
|
}
|
|
1097
1114
|
useUser(options) {
|
|
1098
1115
|
this._ensurePersistentTokenStore(options?.tokenStore);
|
|
1099
|
-
const router = NextNavigation.useRouter();
|
|
1100
1116
|
const session = this._useSession(options?.tokenStore);
|
|
1101
1117
|
const crud = useAsyncCache(this._currentUserCache, [session], "useUser()");
|
|
1102
1118
|
if (crud === null) {
|
|
@@ -1393,6 +1409,9 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
1393
1409
|
if (!("publishableClientKey" in this._interface.options)) {
|
|
1394
1410
|
throw new StackAssertionError("Cannot serialize to JSON from an application without a publishable client key");
|
|
1395
1411
|
}
|
|
1412
|
+
if (typeof this._redirectMethod !== "string") {
|
|
1413
|
+
throw new StackAssertionError("Cannot serialize to JSON from an application with a non-string redirect method");
|
|
1414
|
+
}
|
|
1396
1415
|
return {
|
|
1397
1416
|
baseUrl: this._options.baseUrl,
|
|
1398
1417
|
projectId: this.projectId,
|
|
@@ -1400,7 +1419,8 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
1400
1419
|
tokenStore: this._tokenStoreInit,
|
|
1401
1420
|
urls: this._urlOptions,
|
|
1402
1421
|
oauthScopesOnSignIn: this._oauthScopesOnSignIn,
|
|
1403
|
-
uniqueIdentifier: this._getUniqueIdentifier()
|
|
1422
|
+
uniqueIdentifier: this._getUniqueIdentifier(),
|
|
1423
|
+
redirectMethod: this._redirectMethod
|
|
1404
1424
|
};
|
|
1405
1425
|
},
|
|
1406
1426
|
setCurrentUser: (userJsonPromise) => {
|
|
@@ -1434,7 +1454,8 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
1434
1454
|
publishableClientKey: options.publishableClientKey,
|
|
1435
1455
|
tokenStore: options.tokenStore,
|
|
1436
1456
|
urls: options.urls ?? {},
|
|
1437
|
-
oauthScopesOnSignIn: options.oauthScopesOnSignIn ?? {}
|
|
1457
|
+
oauthScopesOnSignIn: options.oauthScopesOnSignIn ?? {},
|
|
1458
|
+
redirectMethod: options.redirectMethod
|
|
1438
1459
|
});
|
|
1439
1460
|
// TODO override the client user cache to use the server user cache, so we save some requests
|
|
1440
1461
|
this._currentServerUserCache = createCacheBySession(async (session) => {
|
|
@@ -1830,7 +1851,6 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
1830
1851
|
return this.useUserById(options);
|
|
1831
1852
|
} else {
|
|
1832
1853
|
this._ensurePersistentTokenStore(options?.tokenStore);
|
|
1833
|
-
const router = NextNavigation.useRouter();
|
|
1834
1854
|
const session = this._useSession(options?.tokenStore);
|
|
1835
1855
|
const crud = useAsyncCache(this._currentServerUserCache, [session], "useUser()");
|
|
1836
1856
|
if (crud === null) {
|
|
@@ -1942,7 +1962,8 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
|
|
|
1942
1962
|
projectId: options.projectId,
|
|
1943
1963
|
tokenStore: options.tokenStore,
|
|
1944
1964
|
urls: options.urls,
|
|
1945
|
-
oauthScopesOnSignIn: options.oauthScopesOnSignIn
|
|
1965
|
+
oauthScopesOnSignIn: options.oauthScopesOnSignIn,
|
|
1966
|
+
redirectMethod: options.redirectMethod
|
|
1946
1967
|
});
|
|
1947
1968
|
this._adminProjectCache = createCache(async () => {
|
|
1948
1969
|
return await this._interface.getProject();
|