@stackframe/stack 2.5.17 → 2.5.19
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 +20 -0
- package/dist/components/credential-sign-in.js +4 -1
- package/dist/components/credential-sign-in.js.map +1 -1
- package/dist/components/elements/sidebar-layout.d.mts +21 -0
- package/dist/components/elements/sidebar-layout.d.ts +21 -0
- package/dist/components/elements/sidebar-layout.js +125 -0
- package/dist/components/elements/sidebar-layout.js.map +1 -0
- package/dist/components/elements/user-avatar.d.mts +5 -11
- package/dist/components/elements/user-avatar.d.ts +5 -11
- package/dist/components/elements/user-avatar.js.map +1 -1
- package/dist/components/message-cards/predefined-message-card.d.mts +1 -1
- package/dist/components/message-cards/predefined-message-card.d.ts +1 -1
- package/dist/components/message-cards/predefined-message-card.js +8 -0
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/selected-team-switcher.d.mts +1 -0
- package/dist/components/selected-team-switcher.d.ts +1 -0
- package/dist/components/selected-team-switcher.js +35 -5
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components-page/account-settings.js +123 -31
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.d.mts +1 -0
- package/dist/components-page/auth-page.d.ts +1 -0
- package/dist/components-page/auth-page.js +4 -1
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/forgot-password.d.mts +4 -1
- package/dist/components-page/forgot-password.d.ts +4 -1
- package/dist/components-page/forgot-password.js +55 -7
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/password-reset.d.mts +6 -2
- package/dist/components-page/password-reset.d.ts +6 -2
- package/dist/components-page/password-reset.js +100 -8
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +1 -0
- package/dist/components-page/stack-handler.d.ts +1 -0
- package/dist/components-page/stack-handler.js +32 -6
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/{components/password-reset-form.d.mts → components-page/team-creation.d.mts} +2 -3
- package/dist/{components/password-reset-form.d.ts → components-page/team-creation.d.ts} +2 -3
- package/dist/components-page/team-creation.js +92 -0
- package/dist/components-page/team-creation.js.map +1 -0
- package/dist/components-page/team-invitation.d.mts +8 -0
- package/dist/components-page/team-invitation.d.ts +8 -0
- package/dist/components-page/team-invitation.js +141 -0
- package/dist/components-page/team-invitation.js.map +1 -0
- package/dist/components-page/team-settings.d.mts +8 -0
- package/dist/components-page/team-settings.d.ts +8 -0
- package/dist/components-page/team-settings.js +139 -0
- package/dist/components-page/team-settings.js.map +1 -0
- package/dist/esm/components/credential-sign-in.js +4 -1
- package/dist/esm/components/credential-sign-in.js.map +1 -1
- package/dist/esm/components/elements/sidebar-layout.js +90 -0
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -0
- package/dist/esm/components/elements/user-avatar.js.map +1 -1
- package/dist/esm/components/message-cards/predefined-message-card.js +8 -0
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js +39 -7
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +114 -32
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +4 -1
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +52 -5
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +101 -9
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +32 -6
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components-page/team-creation.js +68 -0
- package/dist/esm/components-page/team-creation.js.map +1 -0
- package/dist/esm/components-page/team-invitation.js +107 -0
- package/dist/esm/components-page/team-invitation.js.map +1 -0
- package/dist/esm/components-page/team-settings.js +115 -0
- package/dist/esm/components-page/team-settings.js.map +1 -0
- package/dist/esm/generated/global-css.js +1 -1
- package/dist/esm/generated/global-css.js.map +1 -1
- package/dist/esm/lib/auth.js +5 -1
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/stack-app.js +272 -25
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/generated/global-css.d.mts +1 -1
- package/dist/generated/global-css.d.ts +1 -1
- package/dist/generated/global-css.js +1 -1
- package/dist/generated/global-css.js.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/lib/auth.js +5 -1
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/hooks.d.mts +1 -0
- package/dist/lib/hooks.d.ts +1 -0
- package/dist/lib/stack-app.d.mts +64 -5
- package/dist/lib/stack-app.d.ts +64 -5
- package/dist/lib/stack-app.js +272 -25
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +1 -0
- package/dist/providers/stack-provider-client.d.ts +1 -0
- package/dist/providers/stack-provider.d.mts +1 -0
- package/dist/providers/stack-provider.d.ts +1 -0
- package/package.json +10 -6
- package/dist/components/forgot-password-form.d.mts +0 -7
- package/dist/components/forgot-password-form.d.ts +0 -7
- package/dist/components/forgot-password-form.js +0 -83
- package/dist/components/forgot-password-form.js.map +0 -1
- package/dist/components/password-reset-form.js +0 -135
- package/dist/components/password-reset-form.js.map +0 -1
- package/dist/esm/components/forgot-password-form.js +0 -59
- package/dist/esm/components/forgot-password-form.js.map +0 -1
- package/dist/esm/components/password-reset-form.js +0 -105
- package/dist/esm/components/password-reset-form.js.map +0 -1
|
@@ -32,17 +32,109 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
// src/components-page/password-reset.tsx
|
|
33
33
|
var password_reset_exports = {};
|
|
34
34
|
__export(password_reset_exports, {
|
|
35
|
-
PasswordReset: () => PasswordReset
|
|
35
|
+
PasswordReset: () => PasswordReset,
|
|
36
|
+
default: () => PasswordResetForm
|
|
36
37
|
});
|
|
37
38
|
module.exports = __toCommonJS(password_reset_exports);
|
|
38
|
-
var
|
|
39
|
-
var import__ = require("..");
|
|
40
|
-
var import_react = __toESM(require("react"));
|
|
41
|
-
var import_password_reset_form = __toESM(require("../components/password-reset-form"));
|
|
42
|
-
var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
|
|
39
|
+
var import_yup = require("@hookform/resolvers/yup");
|
|
43
40
|
var import_stack_shared = require("@stackframe/stack-shared");
|
|
41
|
+
var import_password = require("@stackframe/stack-shared/dist/helpers/password");
|
|
42
|
+
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
43
|
+
var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
|
|
44
|
+
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
44
45
|
var import_stack_ui = require("@stackframe/stack-ui");
|
|
46
|
+
var import_react = __toESM(require("react"));
|
|
47
|
+
var import_react_hook_form = require("react-hook-form");
|
|
48
|
+
var yup = __toESM(require("yup"));
|
|
49
|
+
var import__ = require("..");
|
|
50
|
+
var import_form_warning = require("../components/elements/form-warning");
|
|
51
|
+
var import_maybe_full_page = require("../components/elements/maybe-full-page");
|
|
52
|
+
var import_message_card = require("../components/message-cards/message-card");
|
|
53
|
+
var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
|
|
45
54
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
55
|
+
var schema = (0, import_schema_fields.yupObject)({
|
|
56
|
+
password: (0, import_schema_fields.yupString)().required("Please enter your password").test({
|
|
57
|
+
name: "is-valid-password",
|
|
58
|
+
test: (value, ctx) => {
|
|
59
|
+
const error = (0, import_password.getPasswordError)(value);
|
|
60
|
+
if (error) {
|
|
61
|
+
return ctx.createError({ message: error.message });
|
|
62
|
+
} else {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}),
|
|
67
|
+
passwordRepeat: (0, import_schema_fields.yupString)().nullable().oneOf([yup.ref("password"), null], "Passwords do not match").required("Please repeat your password")
|
|
68
|
+
});
|
|
69
|
+
function PasswordResetForm({ code, fullPage = false }) {
|
|
70
|
+
const { register, handleSubmit, formState: { errors }, clearErrors } = (0, import_react_hook_form.useForm)({
|
|
71
|
+
resolver: (0, import_yup.yupResolver)(schema)
|
|
72
|
+
});
|
|
73
|
+
const stackApp = (0, import__.useStackApp)();
|
|
74
|
+
const [finished, setFinished] = (0, import_react.useState)(false);
|
|
75
|
+
const [resetError, setResetError] = (0, import_react.useState)(false);
|
|
76
|
+
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
77
|
+
const onSubmit = async (data) => {
|
|
78
|
+
setLoading(true);
|
|
79
|
+
try {
|
|
80
|
+
const { password } = data;
|
|
81
|
+
const errorCode = await stackApp.resetPassword({ password, code });
|
|
82
|
+
if (errorCode) {
|
|
83
|
+
setResetError(true);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
setFinished(true);
|
|
87
|
+
} finally {
|
|
88
|
+
setLoading(false);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
if (finished) {
|
|
92
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "passwordReset", fullPage });
|
|
93
|
+
}
|
|
94
|
+
if (resetError) {
|
|
95
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Failed to reset password", fullPage, children: "Failed to reset password. Please request a new password reset link" });
|
|
96
|
+
}
|
|
97
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_maybe_full_page.MaybeFullPage, { fullPage, children: [
|
|
98
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: "Reset Your Password" }) }),
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
100
|
+
"form",
|
|
101
|
+
{
|
|
102
|
+
style: { display: "flex", flexDirection: "column", alignItems: "stretch" },
|
|
103
|
+
onSubmit: (e) => (0, import_promises.runAsynchronouslyWithAlert)(handleSubmit(onSubmit)(e)),
|
|
104
|
+
noValidate: true,
|
|
105
|
+
children: [
|
|
106
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "password", className: "mb-1", children: "New Password" }),
|
|
107
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
108
|
+
import_stack_ui.PasswordInput,
|
|
109
|
+
{
|
|
110
|
+
id: "password",
|
|
111
|
+
...register("password"),
|
|
112
|
+
onChange: () => {
|
|
113
|
+
clearErrors("password");
|
|
114
|
+
clearErrors("passwordRepeat");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.password?.message?.toString() }),
|
|
119
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "repeat-password", className: "mt-4 mb-1", children: "Repeat New Password" }),
|
|
120
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
121
|
+
import_stack_ui.PasswordInput,
|
|
122
|
+
{
|
|
123
|
+
id: "repeat-password",
|
|
124
|
+
...register("passwordRepeat"),
|
|
125
|
+
onChange: () => {
|
|
126
|
+
clearErrors("password");
|
|
127
|
+
clearErrors("passwordRepeat");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.passwordRepeat?.message?.toString() }),
|
|
132
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Reset Password" })
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
] });
|
|
137
|
+
}
|
|
46
138
|
var cachedVerifyPasswordResetCode = (0, import_caches.cacheFunction)(async (stackApp, code) => {
|
|
47
139
|
return await stackApp.verifyPasswordResetCode(code);
|
|
48
140
|
});
|
|
@@ -54,7 +146,7 @@ function PasswordReset({
|
|
|
54
146
|
const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Invalid Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Please double check if you have the correct password reset link." }) });
|
|
55
147
|
const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Expired Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Your password reset link has expired. Please request a new password reset link from the login page." }) });
|
|
56
148
|
const usedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.MessageCard, { title: "Used Password Reset Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page." }) });
|
|
57
|
-
const code = searchParams
|
|
149
|
+
const code = searchParams.code;
|
|
58
150
|
if (!code) {
|
|
59
151
|
return invalidJsx;
|
|
60
152
|
}
|
|
@@ -68,7 +160,7 @@ function PasswordReset({
|
|
|
68
160
|
} else if (error) {
|
|
69
161
|
throw error;
|
|
70
162
|
}
|
|
71
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
163
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PasswordResetForm, { code, fullPage });
|
|
72
164
|
}
|
|
73
165
|
// Annotate the CommonJS export names for ESM import in node:
|
|
74
166
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { yupObject, yupString } from \"@stackframe/stack-shared/dist/schema-fields\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Button, Label, PasswordInput, Typography } from \"@stackframe/stack-ui\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport * as yup from \"yup\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst schema = yupObject({\n password: yupString().required('Please enter your password').test({\n name: 'is-valid-password',\n test: (value, ctx) => {\n const error = getPasswordError(value);\n if (error) {\n return ctx.createError({ message: error.message });\n } else {\n return true;\n }\n }\n }),\n passwordRepeat: yupString().nullable().oneOf([yup.ref('password'), null], 'Passwords do not match').required('Please repeat your password')\n});\n\nexport default function PasswordResetForm(\n { code, fullPage = false }:\n { code: string, fullPage?: boolean }\n) {\n const { register, handleSubmit, formState: { errors }, clearErrors } = useForm({\n resolver: yupResolver(schema)\n });\n const stackApp = useStackApp();\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onSubmit = async (data: yup.InferType<typeof schema>) => {\n setLoading(true);\n try {\n const { password } = data;\n const errorCode = await stackApp.resetPassword({ password, code });\n if (errorCode) {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n } finally {\n setLoading(false);\n }\n };\n\n if (finished) {\n return <PredefinedMessageCard type='passwordReset' fullPage={fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title=\"Failed to reset password\" fullPage={fullPage}>\n Failed to reset password. Please request a new password reset link\n </MessageCard>\n );\n }\n\n return (\n <MaybeFullPage fullPage={fullPage}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>Reset Your Password</Typography>\n </div>\n\n <form\n style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">New Password</Label>\n <PasswordInput\n id=\"password\"\n {...register('password')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.password?.message?.toString()} />\n\n <Label htmlFor=\"repeat-password\" className=\"mt-4 mb-1\">Repeat New Password</Label>\n <PasswordInput\n id=\"repeat-password\"\n {...register('passwordRepeat')}\n onChange={() => {\n clearErrors('password');\n clearErrors('passwordRepeat');\n }}\n />\n <FormWarningText text={errors.passwordRepeat?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Reset Password\n </Button>\n </form>\n </MaybeFullPage>\n );\n}\n\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport function PasswordReset({\n searchParams,\n fullPage = false,\n}: {\n searchParams: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Password Reset Link\" fullPage={fullPage}>\n <Typography>Please double check if you have the correct password reset link.</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Password Reset Link\" fullPage={fullPage}>\n <Typography>Your password reset link has expired. Please request a new password reset link from the login page.</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title=\"Used Password Reset Link\" fullPage={fullPage}>\n <Typography>This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page.</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n const error = React.use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return usedJsx;\n } else if (error) {\n throw error;\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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","names":["React"]}
|
|
@@ -9,6 +9,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
9
9
|
import '@stackframe/stack-shared/dist/sessions';
|
|
10
10
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
12
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
12
13
|
|
|
13
14
|
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, fullPage, }: {
|
|
14
15
|
app: StackServerApp<HasTokenStore>;
|
|
@@ -9,6 +9,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
|
|
|
9
9
|
import '@stackframe/stack-shared/dist/sessions';
|
|
10
10
|
import '@stackframe/stack-shared/dist/utils/json';
|
|
11
11
|
import '@stackframe/stack-shared/dist/utils/oauth';
|
|
12
|
+
import '@stackframe/stack-shared/dist/utils/results';
|
|
12
13
|
|
|
13
14
|
declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, fullPage, }: {
|
|
14
15
|
app: StackServerApp<HasTokenStore>;
|
|
@@ -23,18 +23,21 @@ __export(stack_handler_exports, {
|
|
|
23
23
|
default: () => StackHandler
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(stack_handler_exports);
|
|
26
|
+
var import_urls = require("@stackframe/stack-shared/dist/utils/urls");
|
|
26
27
|
var import_navigation = require("next/navigation");
|
|
27
|
-
var import_email_verification = require("./email-verification");
|
|
28
28
|
var import__ = require("..");
|
|
29
29
|
var import_message_card = require("../components/message-cards/message-card");
|
|
30
|
-
var import_sign_out = require("./sign-out");
|
|
31
|
-
var import_forgot_password = require("./forgot-password");
|
|
32
|
-
var import_oauth_callback = require("./oauth-callback");
|
|
33
30
|
var import_account_settings = require("./account-settings");
|
|
34
|
-
var
|
|
31
|
+
var import_email_verification = require("./email-verification");
|
|
35
32
|
var import_error_page = require("./error-page");
|
|
33
|
+
var import_forgot_password = require("./forgot-password");
|
|
34
|
+
var import_magic_link_callback = require("./magic-link-callback");
|
|
35
|
+
var import_oauth_callback = require("./oauth-callback");
|
|
36
36
|
var import_password_reset = require("./password-reset");
|
|
37
|
-
var
|
|
37
|
+
var import_sign_out = require("./sign-out");
|
|
38
|
+
var import_team_invitation = require("./team-invitation");
|
|
39
|
+
var import_team_settings = require("./team-settings");
|
|
40
|
+
var import_team_creation = require("./team-creation");
|
|
38
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
42
|
async function StackHandler({
|
|
40
43
|
app,
|
|
@@ -68,9 +71,20 @@ async function StackHandler({
|
|
|
68
71
|
oauthCallback: "oauth-callback",
|
|
69
72
|
accountSettings: "account-settings",
|
|
70
73
|
magicLinkCallback: "magic-link-callback",
|
|
74
|
+
teamInvitation: "team-invitation",
|
|
75
|
+
teamCreation: "team-creation",
|
|
71
76
|
error: "error"
|
|
72
77
|
};
|
|
73
78
|
const path = stack.join("/");
|
|
79
|
+
if (/team-settings\/[a-zA-Z0-9-]+/.test(path)) {
|
|
80
|
+
const teamId = path.split("/")[1];
|
|
81
|
+
const user = await app.getUser();
|
|
82
|
+
const team = await user?.getTeam(teamId);
|
|
83
|
+
if (!team) {
|
|
84
|
+
return (0, import_navigation.notFound)();
|
|
85
|
+
}
|
|
86
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_team_settings.TeamSettings, { fullPage, teamId });
|
|
87
|
+
}
|
|
74
88
|
switch (path) {
|
|
75
89
|
case availablePaths.signIn: {
|
|
76
90
|
redirectIfNotHandler("signIn");
|
|
@@ -108,6 +122,18 @@ async function StackHandler({
|
|
|
108
122
|
redirectIfNotHandler("magicLinkCallback");
|
|
109
123
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_magic_link_callback.MagicLinkCallback, { searchParams, fullPage });
|
|
110
124
|
}
|
|
125
|
+
case availablePaths.teamInvitation: {
|
|
126
|
+
redirectIfNotHandler("teamInvitation");
|
|
127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_team_invitation.TeamInvitation, { searchParams, fullPage });
|
|
128
|
+
}
|
|
129
|
+
case availablePaths.teamCreation: {
|
|
130
|
+
const project = await app.getProject();
|
|
131
|
+
if (!project.config.clientTeamCreationEnabled) {
|
|
132
|
+
return (0, import_navigation.notFound)();
|
|
133
|
+
}
|
|
134
|
+
redirectIfNotHandler("teamCreation");
|
|
135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_team_creation.TeamCreation, { fullPage });
|
|
136
|
+
}
|
|
111
137
|
case availablePaths.error: {
|
|
112
138
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_error_page.ErrorPage, { searchParams, fullPage });
|
|
113
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["import { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport { AuthPage, StackServerApp } from \"..\";\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\";\nimport { TeamSettings } from \"./team-settings\";\nimport { TeamCreation } from \"./team-creation\";\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 teamInvitation: 'team-invitation',\n teamCreation: 'team-creation',\n error: 'error',\n };\n\n const path = stack.join('/');\n\n if (/team-settings\\/[a-zA-Z0-9-]+/.test(path)) {\n const teamId = path.split('/')[1];\n const user = await app.getUser();\n const team = await user?.getTeam(teamId);\n\n if (!team) {\n return notFound();\n }\n\n return <TeamSettings fullPage={fullPage} teamId={teamId} />;\n }\n\n\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler('signIn');\n return <AuthPage fullPage={fullPage} type='sign-in' automaticRedirect />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler('signUp');\n return <AuthPage fullPage={fullPage} type='sign-up' automaticRedirect />;\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.teamInvitation: {\n redirectIfNotHandler('teamInvitation');\n return <TeamInvitation searchParams={searchParams} fullPage={fullPage} />;\n }\n case availablePaths.teamCreation: {\n const project = await app.getProject();\n if (!project.config.clientTeamCreationEnabled) {\n return notFound();\n }\n\n redirectIfNotHandler('teamCreation');\n return <TeamCreation 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":[]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
4
|
-
code: string;
|
|
3
|
+
declare function TeamCreation(props: {
|
|
5
4
|
fullPage?: boolean;
|
|
6
5
|
}): react_jsx_runtime.JSX.Element;
|
|
7
6
|
|
|
8
|
-
export {
|
|
7
|
+
export { TeamCreation };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
declare function
|
|
4
|
-
code: string;
|
|
3
|
+
declare function TeamCreation(props: {
|
|
5
4
|
fullPage?: boolean;
|
|
6
5
|
}): react_jsx_runtime.JSX.Element;
|
|
7
6
|
|
|
8
|
-
export {
|
|
7
|
+
export { TeamCreation };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
"use client";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/components-page/team-creation.tsx
|
|
23
|
+
var team_creation_exports = {};
|
|
24
|
+
__export(team_creation_exports, {
|
|
25
|
+
TeamCreation: () => TeamCreation
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(team_creation_exports);
|
|
28
|
+
var import_yup = require("@hookform/resolvers/yup");
|
|
29
|
+
var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
|
|
30
|
+
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
31
|
+
var import_stack_ui = require("@stackframe/stack-ui");
|
|
32
|
+
var import_react = require("react");
|
|
33
|
+
var import_react_hook_form = require("react-hook-form");
|
|
34
|
+
var import__ = require("..");
|
|
35
|
+
var import_form_warning = require("../components/elements/form-warning");
|
|
36
|
+
var import_maybe_full_page = require("../components/elements/maybe-full-page");
|
|
37
|
+
var import_navigation = require("next/navigation");
|
|
38
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
|
+
var schema = (0, import_schema_fields.yupObject)({
|
|
40
|
+
displayName: (0, import_schema_fields.yupString)().required("Please enter a team name")
|
|
41
|
+
});
|
|
42
|
+
function TeamCreation(props) {
|
|
43
|
+
const { register, handleSubmit, formState: { errors } } = (0, import_react_hook_form.useForm)({
|
|
44
|
+
resolver: (0, import_yup.yupResolver)(schema)
|
|
45
|
+
});
|
|
46
|
+
const app = (0, import__.useStackApp)();
|
|
47
|
+
const project = app.useProject();
|
|
48
|
+
const user = (0, import__.useUser)({ or: "redirect" });
|
|
49
|
+
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
50
|
+
const router = (0, import_navigation.useRouter)();
|
|
51
|
+
if (!project.config.clientTeamCreationEnabled) {
|
|
52
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: "Team creation is not enabled" });
|
|
53
|
+
}
|
|
54
|
+
const onSubmit = async (data) => {
|
|
55
|
+
setLoading(true);
|
|
56
|
+
try {
|
|
57
|
+
const team = await user.createTeam({ displayName: data.displayName });
|
|
58
|
+
router.push(`${app.urls.handler}/team-settings/${team.id}`);
|
|
59
|
+
} finally {
|
|
60
|
+
setLoading(false);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_maybe_full_page.MaybeFullPage, { fullPage: props.fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "stack-scope flex flex-col items-stretch", children: [
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-center mb-6", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: "Create a Team" }) }),
|
|
65
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
66
|
+
"form",
|
|
67
|
+
{
|
|
68
|
+
className: "flex flex-col items-stretch stack-scope",
|
|
69
|
+
onSubmit: (e) => (0, import_promises.runAsynchronously)(handleSubmit(onSubmit)(e)),
|
|
70
|
+
noValidate: true,
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Label, { htmlFor: "email", className: "mb-1", children: "Display name" }),
|
|
73
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
74
|
+
import_stack_ui.Input,
|
|
75
|
+
{
|
|
76
|
+
id: "email",
|
|
77
|
+
type: "email",
|
|
78
|
+
...register("displayName")
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: errors.displayName?.message?.toString() }),
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Button, { type: "submit", className: "mt-6", loading, children: "Create" })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
] }) });
|
|
87
|
+
}
|
|
88
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
+
0 && (module.exports = {
|
|
90
|
+
TeamCreation
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=team-creation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/team-creation.tsx"],"sourcesContent":["'use client';\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 { useRouter } from \"next/navigation\";\n\nconst schema = yupObject({\n displayName: yupString().required('Please enter a team name'),\n});\n\nexport function TeamCreation(props: { fullPage?: boolean }) {\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 router = useRouter();\n\n if (!project.config.clientTeamCreationEnabled) {\n return <MessageCard title='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 router.push(`${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'>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>\n 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=\"email\" className=\"mb-1\">Display name</Label>\n <Input\n id=\"email\"\n type=\"email\"\n {...register('displayName')}\n />\n <FormWarningText text={errors.displayName?.message?.toString()} />\n\n <Button type=\"submit\" className=\"mt-6\" loading={loading}>\n Create\n </Button>\n </form>\n </div>\n </MaybeFullPage>\n );\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,iBAA4B;AAC5B,2BAAqC;AACrC,sBAAkC;AAClC,sBAAiD;AACjD,mBAAyB;AACzB,6BAAwB;AAExB,eAAkD;AAClD,0BAAgC;AAChC,6BAA8B;AAC9B,wBAA0B;AAiBf;AAfX,IAAM,aAAS,gCAAU;AAAA,EACvB,iBAAa,gCAAU,EAAE,SAAS,0BAA0B;AAC9D,CAAC;AAEM,SAAS,aAAa,OAA+B;AAC1D,QAAM,EAAE,UAAU,cAAc,WAAW,EAAE,OAAO,EAAE,QAAI,gCAAQ;AAAA,IAChE,cAAU,wBAAY,MAAM;AAAA,EAC9B,CAAC;AACD,QAAM,UAAM,sBAAY;AACxB,QAAM,UAAU,IAAI,WAAW;AAC/B,QAAM,WAAO,kBAAQ,EAAE,IAAI,WAAW,CAAC;AACvC,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAC5C,QAAM,aAAS,6BAAU;AAEzB,MAAI,CAAC,QAAQ,OAAO,2BAA2B;AAC7C,WAAO,4CAAC,wBAAY,OAAM,gCAA+B;AAAA,EAC3D;AAEA,QAAM,WAAW,OAAO,SAAuC;AAC7D,eAAW,IAAI;AAEf,QAAI;AACF,YAAM,OAAO,MAAM,KAAK,WAAW,EAAE,aAAa,KAAK,YAAY,CAAC;AACpE,aAAO,KAAK,GAAG,IAAI,KAAK,OAAO,kBAAkB,KAAK,EAAE,EAAE;AAAA,IAC5D,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE,4CAAC,wCAAc,UAAU,MAAM,UAC7B,uDAAC,SAAI,WAAU,2CACb;AAAA,gDAAC,SAAI,WAAU,oBACb,sDAAC,8BAAW,MAAK,MAAK,2BAEtB,GACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,UAAU,WAAK,mCAAkB,aAAa,QAAQ,EAAE,CAAC,CAAC;AAAA,QAC1D,YAAU;AAAA,QAEV;AAAA,sDAAC,yBAAM,SAAQ,SAAQ,WAAU,QAAO,0BAAY;AAAA,UACpD;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACH,MAAK;AAAA,cACJ,GAAG,SAAS,aAAa;AAAA;AAAA,UAC5B;AAAA,UACA,4CAAC,uCAAgB,MAAM,OAAO,aAAa,SAAS,SAAS,GAAG;AAAA,UAEhE,4CAAC,0BAAO,MAAK,UAAS,WAAU,QAAO,SAAkB,oBAEzD;AAAA;AAAA;AAAA,IACF;AAAA,KACF,GACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
"use client";
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
+
|
|
32
|
+
// src/components-page/team-invitation.tsx
|
|
33
|
+
var team_invitation_exports = {};
|
|
34
|
+
__export(team_invitation_exports, {
|
|
35
|
+
TeamInvitation: () => TeamInvitation
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(team_invitation_exports);
|
|
38
|
+
var import_stack_shared = require("@stackframe/stack-shared");
|
|
39
|
+
var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
|
|
40
|
+
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
41
|
+
var import_stack_ui = require("@stackframe/stack-ui");
|
|
42
|
+
var import_react = __toESM(require("react"));
|
|
43
|
+
var import__ = require("..");
|
|
44
|
+
var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
|
|
45
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
46
|
+
var cachedVerifyInvitation = (0, import_caches.cacheFunction)(async (stackApp, code) => {
|
|
47
|
+
return await stackApp.verifyTeamInvitationCode(code);
|
|
48
|
+
});
|
|
49
|
+
var cachedGetInvitationDetails = (0, import_caches.cacheFunction)(async (stackApp, code) => {
|
|
50
|
+
return await stackApp.getTeamInvitationDetails(code);
|
|
51
|
+
});
|
|
52
|
+
function TeamInvitationInner(props) {
|
|
53
|
+
const stackApp = (0, import__.useStackApp)();
|
|
54
|
+
const [success, setSuccess] = import_react.default.useState(false);
|
|
55
|
+
const [errorMessage, setErrorMessage] = import_react.default.useState(null);
|
|
56
|
+
const details = import_react.default.use(cachedGetInvitationDetails(stackApp, props.searchParams.code || ""));
|
|
57
|
+
if (errorMessage || details.status === "error") {
|
|
58
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "unknownError", fullPage: props.fullPage });
|
|
59
|
+
}
|
|
60
|
+
if (success) {
|
|
61
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
62
|
+
import__.MessageCard,
|
|
63
|
+
{
|
|
64
|
+
title: "Team invitation",
|
|
65
|
+
fullPage: props.fullPage,
|
|
66
|
+
primaryButtonText: "Go to home",
|
|
67
|
+
primaryAction: () => stackApp.redirectToHome(),
|
|
68
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Typography, { children: [
|
|
69
|
+
"You have successfully joined ",
|
|
70
|
+
details.data.teamDisplayName
|
|
71
|
+
] })
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
76
|
+
import__.MessageCard,
|
|
77
|
+
{
|
|
78
|
+
title: "Team invitation",
|
|
79
|
+
fullPage: props.fullPage,
|
|
80
|
+
primaryButtonText: "Join",
|
|
81
|
+
primaryAction: () => (0, import_promises.runAsynchronouslyWithAlert)(async () => {
|
|
82
|
+
const result = await stackApp.acceptTeamInvitation(props.searchParams.code || "");
|
|
83
|
+
if (result.status === "error") {
|
|
84
|
+
setErrorMessage(result.error.message);
|
|
85
|
+
} else {
|
|
86
|
+
setSuccess(true);
|
|
87
|
+
}
|
|
88
|
+
}),
|
|
89
|
+
secondaryButtonText: "Ignore",
|
|
90
|
+
secondaryAction: () => stackApp.redirectToHome(),
|
|
91
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_stack_ui.Typography, { children: [
|
|
92
|
+
"You are invited to join ",
|
|
93
|
+
details.data.teamDisplayName
|
|
94
|
+
] })
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
function TeamInvitation({ fullPage = false, searchParams }) {
|
|
99
|
+
const user = (0, import__.useUser)();
|
|
100
|
+
const stackApp = (0, import__.useStackApp)();
|
|
101
|
+
const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: "Invalid Team Invitation Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Please double check if you have the correct team invitation link." }) });
|
|
102
|
+
const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: "Expired Team Invitation Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Your team invitation link has expired. Please request a new team invitation link " }) });
|
|
103
|
+
const usedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.MessageCard, { title: "Used Team Invitation Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "This team invitation link has already been used." }) });
|
|
104
|
+
const code = searchParams.code;
|
|
105
|
+
if (!code) {
|
|
106
|
+
return invalidJsx;
|
|
107
|
+
}
|
|
108
|
+
if (!user) {
|
|
109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
110
|
+
import__.MessageCard,
|
|
111
|
+
{
|
|
112
|
+
title: "Team invitation",
|
|
113
|
+
fullPage,
|
|
114
|
+
primaryButtonText: "Go to sign in",
|
|
115
|
+
primaryAction: () => stackApp.redirectToSignIn(),
|
|
116
|
+
secondaryButtonText: "Cancel",
|
|
117
|
+
secondaryAction: () => stackApp.redirectToHome(),
|
|
118
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { children: "Sign in or create an account to join the team." })
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
const verificationResult = import_react.default.use(cachedVerifyInvitation(stackApp, searchParams.code || ""));
|
|
123
|
+
if (verificationResult.status === "error") {
|
|
124
|
+
const error = verificationResult.error;
|
|
125
|
+
if (error instanceof import_stack_shared.KnownErrors.VerificationCodeNotFound) {
|
|
126
|
+
return invalidJsx;
|
|
127
|
+
} else if (error instanceof import_stack_shared.KnownErrors.VerificationCodeExpired) {
|
|
128
|
+
return expiredJsx;
|
|
129
|
+
} else if (error instanceof import_stack_shared.KnownErrors.VerificationCodeAlreadyUsed) {
|
|
130
|
+
return usedJsx;
|
|
131
|
+
} else {
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TeamInvitationInner, { fullPage, searchParams });
|
|
136
|
+
}
|
|
137
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
138
|
+
0 && (module.exports = {
|
|
139
|
+
TeamInvitation
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=team-invitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components-page/team-invitation.tsx"],"sourcesContent":["'use client';\n\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Typography } from \"@stackframe/stack-ui\";\nimport React from \"react\";\nimport { MessageCard, StackClientApp, useStackApp, useUser } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst cachedVerifyInvitation = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyTeamInvitationCode(code);\n});\n\nconst cachedGetInvitationDetails = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.getTeamInvitationDetails(code);\n});\n\nfunction TeamInvitationInner(props: { fullPage?: boolean, searchParams: Record<string, string> }) {\n const stackApp = useStackApp();\n const [success, setSuccess] = React.useState(false);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n const details = React.use(cachedGetInvitationDetails(stackApp, props.searchParams.code || ''));\n\n if (errorMessage || details.status === 'error') {\n return (\n <PredefinedMessageCard type=\"unknownError\" fullPage={props.fullPage} />\n );\n }\n\n if (success) {\n return (\n <MessageCard\n title=\"Team invitation\"\n fullPage={props.fullPage}\n primaryButtonText=\"Go to home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>You have successfully joined {details.data.teamDisplayName}</Typography>\n </MessageCard>\n );\n }\n\n\n return (\n <MessageCard\n title=\"Team invitation\"\n fullPage={props.fullPage}\n primaryButtonText=\"Join\"\n primaryAction={() => runAsynchronouslyWithAlert(async () => {\n const result = await stackApp.acceptTeamInvitation(props.searchParams.code || '');\n if (result.status === 'error') {\n setErrorMessage(result.error.message);\n } else {\n setSuccess(true);\n }\n })}\n secondaryButtonText=\"Ignore\"\n secondaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>You are invited to join {details.data.teamDisplayName}</Typography>\n </MessageCard>\n );\n}\n\nexport function TeamInvitation({ fullPage=false, searchParams }: { fullPage?: boolean, searchParams: Record<string, string> }) {\n const user = useUser();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Team Invitation Link\" fullPage={fullPage}>\n <Typography>Please double check if you have the correct team invitation link.</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Team Invitation Link\" fullPage={fullPage}>\n <Typography>Your team invitation link has expired. Please request a new team invitation link </Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title=\"Used Team Invitation Link\" fullPage={fullPage}>\n <Typography>This team invitation link has already been used.</Typography>\n </MessageCard>\n );\n\n const code = searchParams.code;\n if (!code) {\n return invalidJsx;\n }\n\n if (!user) {\n return (\n <MessageCard\n title=\"Team invitation\"\n fullPage={fullPage}\n primaryButtonText=\"Go to sign in\"\n primaryAction={() => stackApp.redirectToSignIn()}\n secondaryButtonText=\"Cancel\"\n secondaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>Sign in or create an account to join the team.</Typography>\n </MessageCard>\n );\n }\n\n const verificationResult = React.use(cachedVerifyInvitation(stackApp, searchParams.code || ''));\n\n if (verificationResult.status === 'error') {\n const error = verificationResult.error;\n if (error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\n return usedJsx;\n } else {\n throw error;\n }\n }\n\n return <TeamInvitationInner fullPage={fullPage} searchParams={searchParams} />;\n};\n"],"mappings":"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","names":["React"]}
|