@stackframe/react 2.8.49 → 2.8.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components-page/password-reset.js +6 -5
  3. package/dist/components-page/password-reset.js.map +1 -1
  4. package/dist/components-page/sign-out.js +2 -12
  5. package/dist/components-page/sign-out.js.map +1 -1
  6. package/dist/components-page/stack-handler-client.js +274 -0
  7. package/dist/components-page/stack-handler-client.js.map +1 -0
  8. package/dist/components-page/stack-handler.js +4 -239
  9. package/dist/components-page/stack-handler.js.map +1 -1
  10. package/dist/components-page/team-invitation.js +6 -5
  11. package/dist/components-page/team-invitation.js.map +1 -1
  12. package/dist/esm/components-page/password-reset.js +3 -2
  13. package/dist/esm/components-page/password-reset.js.map +1 -1
  14. package/dist/esm/components-page/sign-out.js +2 -2
  15. package/dist/esm/components-page/sign-out.js.map +1 -1
  16. package/dist/esm/components-page/stack-handler-client.js +250 -0
  17. package/dist/esm/components-page/stack-handler-client.js.map +1 -0
  18. package/dist/esm/components-page/stack-handler.js +4 -239
  19. package/dist/esm/components-page/stack-handler.js.map +1 -1
  20. package/dist/esm/components-page/team-invitation.js +3 -2
  21. package/dist/esm/components-page/team-invitation.js.map +1 -1
  22. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +7 -0
  23. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  24. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +49 -32
  25. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  26. package/dist/esm/lib/stack-app/apps/implementations/common.js +3 -3
  27. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  28. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +39 -0
  29. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  30. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  31. package/dist/esm/lib/stack-app/common.js.map +1 -1
  32. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  33. package/dist/index.d.mts +119 -89
  34. package/dist/index.d.ts +119 -89
  35. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +7 -0
  36. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  37. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +49 -32
  38. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  39. package/dist/lib/stack-app/apps/implementations/common.js +2 -2
  40. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  41. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +49 -0
  42. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  43. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  44. package/dist/lib/stack-app/common.js.map +1 -1
  45. package/dist/lib/stack-app/users/index.js.map +1 -1
  46. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @stackframe/stack
2
2
 
3
+ ## 2.8.51
4
+
5
+ ### Patch Changes
6
+
7
+ - Various changes
8
+ - Updated dependencies
9
+ - @stackframe/stack-shared@2.8.51
10
+ - @stackframe/stack-ui@2.8.51
11
+ - @stackframe/stack-sc@2.8.51
12
+
13
+ ## 2.8.50
14
+
15
+ ### Patch Changes
16
+
17
+ - Various changes
18
+ - Updated dependencies
19
+ - @stackframe/stack-sc@2.8.50
20
+ - @stackframe/stack-shared@2.8.50
21
+ - @stackframe/stack-ui@2.8.50
22
+
3
23
  ## 2.8.49
4
24
 
5
25
  ### Patch Changes
@@ -42,8 +42,9 @@ var import_password = require("@stackframe/stack-shared/dist/helpers/password");
42
42
  var import_schema_fields = require("@stackframe/stack-shared/dist/schema-fields");
43
43
  var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
44
44
  var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
45
+ var import_react = require("@stackframe/stack-shared/dist/utils/react");
45
46
  var import_stack_ui = require("@stackframe/stack-ui");
46
- var import_react = __toESM(require("react"));
47
+ var import_react2 = require("react");
47
48
  var import_react_hook_form = require("react-hook-form");
48
49
  var yup = __toESM(require("yup"));
49
50
  var import__ = require("../index.js");
@@ -73,9 +74,9 @@ function PasswordResetForm(props) {
73
74
  resolver: (0, import_yup.yupResolver)(schema)
74
75
  });
75
76
  const stackApp = (0, import__.useStackApp)();
76
- const [finished, setFinished] = (0, import_react.useState)(false);
77
- const [resetError, setResetError] = (0, import_react.useState)(false);
78
- const [loading, setLoading] = (0, import_react.useState)(false);
77
+ const [finished, setFinished] = (0, import_react2.useState)(false);
78
+ const [resetError, setResetError] = (0, import_react2.useState)(false);
79
+ const [loading, setLoading] = (0, import_react2.useState)(false);
79
80
  const onSubmit = async (data) => {
80
81
  setLoading(true);
81
82
  try {
@@ -158,7 +159,7 @@ function PasswordReset({
158
159
  if (!code) {
159
160
  return invalidJsx;
160
161
  }
161
- const result = import_react.default.use(cachedVerifyPasswordResetCode(stackApp, code));
162
+ const result = (0, import_react.use)(cachedVerifyPasswordResetCode(stackApp, code));
162
163
  if (result.status === "error") {
163
164
  if (import_stack_shared.KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {
164
165
  return invalidJsx;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { passwordSchema, 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, cn } 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\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n password: passwordSchema.defined(t(\"Please enter your password\")).nonEmpty(t(\"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], t(\"Passwords do not match\")).defined().nonEmpty(t(\"Please repeat your password\"))\n });\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 result = await stackApp.resetPassword({ password, code: props.code });\n if (result.status === 'error') {\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={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title={t(\"Failed to reset password\")} fullPage={!!props.fullPage}>\n {t(\"Failed to reset password. Please request a new password reset link\")}\n </MessageCard>\n );\n }\n\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className={cn(\n \"flex flex-col items-stretch max-w-[380px] flex-basis-[380px]\",\n props.fullPage ? \"p-4\" : \"p-0\"\n )}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n </div>\n\n <form\n className=\"flex flex-col items-stretch\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">{t(\"New Password\")}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-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\">{t(\"Repeat New Password\")}</Label>\n <PasswordInput\n id=\"repeat-password\"\n autoComplete=\"new-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 {t(\"Reset Password\")}\n </Button>\n </form>\n </div>\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 { t } = useTranslation();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Please double check if you have the correct password reset link.\")}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"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={t(\"Used Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"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 result = React.use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {\n return invalidJsx;\n } else if (KnownErrors.VerificationCodeExpired.isInstance(result.error)) {\n return expiredJsx;\n } else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) {\n return usedJsx;\n } else {\n throw result.error;\n }\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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","names":["React"]}
1
+ {"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { passwordSchema, 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 { use } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { Button, Label, PasswordInput, Typography, cn } from \"@stackframe/stack-ui\";\nimport { 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\";\nimport { useTranslation } from \"../lib/translations\";\n\nexport default function PasswordResetForm(props: {\n code: string,\n fullPage?: boolean,\n}) {\n const { t } = useTranslation();\n\n const schema = yupObject({\n password: passwordSchema.defined(t(\"Please enter your password\")).nonEmpty(t(\"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], t(\"Passwords do not match\")).defined().nonEmpty(t(\"Please repeat your password\"))\n });\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 result = await stackApp.resetPassword({ password, code: props.code });\n if (result.status === 'error') {\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={!!props.fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title={t(\"Failed to reset password\")} fullPage={!!props.fullPage}>\n {t(\"Failed to reset password. Please request a new password reset link\")}\n </MessageCard>\n );\n }\n\n\n return (\n <MaybeFullPage fullPage={!!props.fullPage}>\n <div className={cn(\n \"flex flex-col items-stretch max-w-[380px] flex-basis-[380px]\",\n props.fullPage ? \"p-4\" : \"p-0\"\n )}>\n <div className=\"text-center mb-6\">\n <Typography type='h2'>{t(\"Reset Your Password\")}</Typography>\n </div>\n\n <form\n className=\"flex flex-col items-stretch\"\n onSubmit={e => runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))}\n noValidate\n >\n <Label htmlFor=\"password\" className=\"mb-1\">{t(\"New Password\")}</Label>\n <PasswordInput\n id=\"password\"\n autoComplete=\"new-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\">{t(\"Repeat New Password\")}</Label>\n <PasswordInput\n id=\"repeat-password\"\n autoComplete=\"new-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 {t(\"Reset Password\")}\n </Button>\n </form>\n </div>\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 { t } = useTranslation();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t(\"Invalid Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"Please double check if you have the correct password reset link.\")}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t(\"Expired Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"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={t(\"Used Password Reset Link\")} fullPage={fullPage}>\n <Typography>{t(\"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 result = use(cachedVerifyPasswordResetCode(stackApp, code));\n\n if (result.status === 'error') {\n if (KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {\n return invalidJsx;\n } else if (KnownErrors.VerificationCodeExpired.isInstance(result.error)) {\n return expiredJsx;\n } else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) {\n return usedJsx;\n } else {\n throw result.error;\n }\n }\n\n return <PasswordResetForm code={code} fullPage={fullPage} />;\n}\n"],"mappings":"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","names":["import_react"]}
@@ -1,11 +1,9 @@
1
1
  "use client";
2
2
  "use strict";
3
3
  "use client";
4
- var __create = Object.create;
5
4
  var __defProp = Object.defineProperty;
6
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getProtoOf = Object.getPrototypeOf;
9
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
8
  var __export = (target, all) => {
11
9
  for (var name in all)
@@ -19,14 +17,6 @@ var __copyProps = (to, from, except, desc) => {
19
17
  }
20
18
  return to;
21
19
  };
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
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
21
 
32
22
  // src/components-page/sign-out.tsx
@@ -36,7 +26,7 @@ __export(sign_out_exports, {
36
26
  });
37
27
  module.exports = __toCommonJS(sign_out_exports);
38
28
  var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
39
- var import_react = __toESM(require("react"));
29
+ var import_react = require("@stackframe/stack-shared/dist/utils/react");
40
30
  var import__ = require("../index.js");
41
31
  var import_predefined_message_card = require("../components/message-cards/predefined-message-card.js");
42
32
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -46,7 +36,7 @@ var cacheSignOut = (0, import_caches.cacheFunction)(async (user) => {
46
36
  function SignOut(props) {
47
37
  const user = (0, import__.useUser)();
48
38
  if (user) {
49
- import_react.default.use(cacheSignOut(user));
39
+ (0, import_react.use)(cacheSignOut(user));
50
40
  }
51
41
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_predefined_message_card.PredefinedMessageCard, { type: "signedOut", fullPage: props.fullPage });
52
42
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport React from \"react\";\nimport { CurrentUser, useUser } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst cacheSignOut = cacheFunction(async (user: CurrentUser) => {\n return await user.signOut();\n});\n\nexport function SignOut(props: { fullPage?: boolean }) {\n const user = useUser();\n\n if (user) {\n React.use(cacheSignOut(user));\n }\n\n return <PredefinedMessageCard type='signedOut' fullPage={props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,oBAA8B;AAC9B,mBAAkB;AAClB,eAAqC;AACrC,qCAAsC;AAa7B;AAXT,IAAM,mBAAe,6BAAc,OAAO,SAAsB;AAC9D,SAAO,MAAM,KAAK,QAAQ;AAC5B,CAAC;AAEM,SAAS,QAAQ,OAA+B;AACrD,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,iBAAAA,QAAM,IAAI,aAAa,IAAI,CAAC;AAAA,EAC9B;AAEA,SAAO,4CAAC,wDAAsB,MAAK,aAAY,UAAU,MAAM,UAAU;AAC3E;","names":["React"]}
1
+ {"version":3,"sources":["../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { use } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { CurrentUser, useUser } from \"..\";\nimport { PredefinedMessageCard } from \"../components/message-cards/predefined-message-card\";\n\nconst cacheSignOut = cacheFunction(async (user: CurrentUser) => {\n return await user.signOut();\n});\n\nexport function SignOut(props: { fullPage?: boolean }) {\n const user = useUser();\n\n if (user) {\n use(cacheSignOut(user));\n }\n\n return <PredefinedMessageCard type='signedOut' fullPage={props.fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,oBAA8B;AAC9B,mBAAoB;AACpB,eAAqC;AACrC,qCAAsC;AAa7B;AAXT,IAAM,mBAAe,6BAAc,OAAO,SAAsB;AAC9D,SAAO,MAAM,KAAK,QAAQ;AAC5B,CAAC;AAEM,SAAS,QAAQ,OAA+B;AACrD,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,0BAAI,aAAa,IAAI,CAAC;AAAA,EACxB;AAEA,SAAO,4CAAC,wDAAsB,MAAK,aAAY,UAAU,MAAM,UAAU;AAC3E;","names":[]}
@@ -0,0 +1,274 @@
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/stack-handler-client.tsx
23
+ var stack_handler_client_exports = {};
24
+ __export(stack_handler_client_exports, {
25
+ StackHandlerClient: () => StackHandlerClient
26
+ });
27
+ module.exports = __toCommonJS(stack_handler_client_exports);
28
+ var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
29
+ var import_objects = require("@stackframe/stack-shared/dist/utils/objects");
30
+ var import_urls = require("@stackframe/stack-shared/dist/utils/urls");
31
+ var import_react = require("react");
32
+ var import__ = require("../index.js");
33
+ var import_hooks = require("../lib/hooks.js");
34
+ var import_account_settings = require("./account-settings.js");
35
+ var import_cli_auth_confirm = require("./cli-auth-confirm.js");
36
+ var import_email_verification = require("./email-verification.js");
37
+ var import_error_page = require("./error-page.js");
38
+ var import_forgot_password = require("./forgot-password.js");
39
+ var import_magic_link_callback = require("./magic-link-callback.js");
40
+ var import_mfa = require("./mfa.js");
41
+ var import_oauth_callback = require("./oauth-callback.js");
42
+ var import_password_reset = require("./password-reset.js");
43
+ var import_sign_out = require("./sign-out.js");
44
+ var import_team_invitation = require("./team-invitation.js");
45
+ var import_message_card = require("../components/message-cards/message-card.js");
46
+ var import_jsx_runtime = require("react/jsx-runtime");
47
+ var 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
+ cliAuthConfirm: "cli-auth-confirm",
59
+ mfa: "mfa",
60
+ error: "error"
61
+ };
62
+ var pathAliases = {
63
+ // also includes the uppercase and non-dashed versions
64
+ ...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),
65
+ "log-in": availablePaths.signIn,
66
+ "register": availablePaths.signUp
67
+ };
68
+ function renderComponent(props) {
69
+ const { path, searchParams, fullPage, componentProps, redirectIfNotHandler, onNotFound, app } = props;
70
+ switch (path) {
71
+ case availablePaths.signIn: {
72
+ redirectIfNotHandler?.("signIn");
73
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
74
+ import__.SignIn,
75
+ {
76
+ fullPage,
77
+ automaticRedirect: true,
78
+ ...filterUndefinedINU(componentProps?.SignIn)
79
+ }
80
+ );
81
+ }
82
+ case availablePaths.signUp: {
83
+ redirectIfNotHandler?.("signUp");
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ import__.SignUp,
86
+ {
87
+ fullPage,
88
+ automaticRedirect: true,
89
+ ...filterUndefinedINU(componentProps?.SignUp)
90
+ }
91
+ );
92
+ }
93
+ case availablePaths.emailVerification: {
94
+ redirectIfNotHandler?.("emailVerification");
95
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
+ import_email_verification.EmailVerification,
97
+ {
98
+ searchParams,
99
+ fullPage,
100
+ ...filterUndefinedINU(componentProps?.EmailVerification)
101
+ }
102
+ );
103
+ }
104
+ case availablePaths.passwordReset: {
105
+ redirectIfNotHandler?.("passwordReset");
106
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
107
+ import_password_reset.PasswordReset,
108
+ {
109
+ searchParams,
110
+ fullPage,
111
+ ...filterUndefinedINU(componentProps?.PasswordReset)
112
+ }
113
+ );
114
+ }
115
+ case availablePaths.forgotPassword: {
116
+ redirectIfNotHandler?.("forgotPassword");
117
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
118
+ import_forgot_password.ForgotPassword,
119
+ {
120
+ fullPage,
121
+ ...filterUndefinedINU(componentProps?.ForgotPassword)
122
+ }
123
+ );
124
+ }
125
+ case availablePaths.signOut: {
126
+ redirectIfNotHandler?.("signOut");
127
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
128
+ import_sign_out.SignOut,
129
+ {
130
+ fullPage,
131
+ ...filterUndefinedINU(componentProps?.SignOut)
132
+ }
133
+ );
134
+ }
135
+ case availablePaths.oauthCallback: {
136
+ redirectIfNotHandler?.("oauthCallback");
137
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
138
+ import_oauth_callback.OAuthCallback,
139
+ {
140
+ fullPage,
141
+ ...filterUndefinedINU(componentProps?.OAuthCallback)
142
+ }
143
+ );
144
+ }
145
+ case availablePaths.magicLinkCallback: {
146
+ redirectIfNotHandler?.("magicLinkCallback");
147
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
148
+ import_magic_link_callback.MagicLinkCallback,
149
+ {
150
+ searchParams,
151
+ fullPage,
152
+ ...filterUndefinedINU(componentProps?.MagicLinkCallback)
153
+ }
154
+ );
155
+ }
156
+ case availablePaths.teamInvitation: {
157
+ redirectIfNotHandler?.("teamInvitation");
158
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
159
+ import_team_invitation.TeamInvitation,
160
+ {
161
+ searchParams,
162
+ fullPage,
163
+ ...filterUndefinedINU(componentProps?.TeamInvitation)
164
+ }
165
+ );
166
+ }
167
+ case availablePaths.accountSettings: {
168
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
169
+ import_account_settings.AccountSettings,
170
+ {
171
+ fullPage,
172
+ ...filterUndefinedINU(componentProps?.AccountSettings)
173
+ }
174
+ );
175
+ }
176
+ case availablePaths.error: {
177
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
178
+ import_error_page.ErrorPage,
179
+ {
180
+ searchParams,
181
+ fullPage,
182
+ ...filterUndefinedINU(componentProps?.ErrorPage)
183
+ }
184
+ );
185
+ }
186
+ case availablePaths.cliAuthConfirm: {
187
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
188
+ import_cli_auth_confirm.CliAuthConfirmation,
189
+ {
190
+ fullPage,
191
+ ...filterUndefinedINU(componentProps?.CliAuthConfirmation)
192
+ }
193
+ );
194
+ }
195
+ case availablePaths.mfa: {
196
+ redirectIfNotHandler?.("mfa");
197
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
198
+ import_mfa.MFA,
199
+ {
200
+ fullPage,
201
+ ...filterUndefinedINU(componentProps?.MFA)
202
+ }
203
+ );
204
+ }
205
+ default: {
206
+ if (Object.values(availablePaths).includes(path)) {
207
+ throw new import_errors.StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });
208
+ }
209
+ for (const [key, value] of Object.entries(pathAliases)) {
210
+ if (path.toLowerCase().replaceAll("-", "") === key.toLowerCase().replaceAll("-", "")) {
211
+ const redirectUrl = `${app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`;
212
+ return { redirect: redirectUrl };
213
+ }
214
+ }
215
+ return onNotFound();
216
+ }
217
+ }
218
+ }
219
+ function StackHandlerClient(props) {
220
+ const stackApp = (0, import_hooks.useStackApp)();
221
+ const currentLocation = props.location ?? window.location.pathname;
222
+ const searchParamsSource = new URLSearchParams(window.location.search);
223
+ const { path, searchParams } = (0, import_react.useMemo)(() => {
224
+ const handlerPath = new URL(stackApp.urls.handler, "http://example.com").pathname;
225
+ const relativePath = currentLocation.startsWith(handlerPath) ? currentLocation.slice(handlerPath.length).replace(/^\/+/, "") : currentLocation.replace(/^\/+/, "");
226
+ return {
227
+ path: relativePath,
228
+ searchParams: Object.fromEntries(searchParamsSource.entries())
229
+ };
230
+ }, [currentLocation, searchParamsSource, stackApp.urls.handler]);
231
+ const redirectIfNotHandler = (name) => {
232
+ const url = stackApp.urls[name];
233
+ const handlerUrl = stackApp.urls.handler;
234
+ if (url !== handlerUrl && url.startsWith(handlerUrl + "/")) {
235
+ return;
236
+ }
237
+ const urlObj = new URL(url, "http://example.com");
238
+ for (const [key, value] of Object.entries(searchParams)) {
239
+ urlObj.searchParams.set(key, value);
240
+ }
241
+ window.location.href = (0, import_urls.getRelativePart)(urlObj);
242
+ };
243
+ const result = renderComponent({
244
+ path,
245
+ searchParams,
246
+ fullPage: props.fullPage,
247
+ componentProps: props.componentProps,
248
+ redirectIfNotHandler,
249
+ onNotFound: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
250
+ import_message_card.MessageCard,
251
+ {
252
+ title: "Page does not exist",
253
+ fullPage: props.fullPage,
254
+ primaryButtonText: "Go to Home",
255
+ primaryAction: () => stackApp.redirectToHome(),
256
+ children: "The page you are looking for could not be found. Please check the URL and try again."
257
+ }
258
+ ),
259
+ app: stackApp
260
+ });
261
+ if (result && "redirect" in result) {
262
+ window.location.href = result.redirect;
263
+ return null;
264
+ }
265
+ return result;
266
+ }
267
+ function filterUndefinedINU(value) {
268
+ return value === void 0 ? value : (0, import_objects.filterUndefined)(value);
269
+ }
270
+ // Annotate the CommonJS export names for ESM import in node:
271
+ 0 && (module.exports = {
272
+ StackHandlerClient
273
+ });
274
+ //# sourceMappingURL=stack-handler-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/stack-handler-client.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\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 } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { useMemo } from 'react';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { useStackApp } from \"../lib/hooks\";\nimport { HandlerUrls, StackClientApp } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { CliAuthConfirmation } from \"./cli-auth-confirm\";\nimport { EmailVerification } from \"./email-verification\";\nimport { ErrorPage } from \"./error-page\";\nimport { ForgotPassword } from \"./forgot-password\";\nimport { MagicLinkCallback } from \"./magic-link-callback\";\nimport { MFA } from \"./mfa\";\nimport { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\n\nimport { MessageCard } from \"../components/message-cards/message-card\";\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 CliAuthConfirmation: typeof CliAuthConfirmation,\n MFA: typeof MFA,\n};\n\ntype RouteProps = {\n params: Promise<{ stack?: string[] }> | { stack?: string[] },\n searchParams: Promise<Record<string, string>> | Record<string, string>,\n};\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 cliAuthConfirm: 'cli-auth-confirm',\n mfa: 'mfa',\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\nexport type 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 case availablePaths.cliAuthConfirm: {\n return <CliAuthConfirmation\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.CliAuthConfirmation)}\n />;\n }\n case availablePaths.mfa: {\n redirectIfNotHandler?.('mfa');\n return <MFA\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.MFA)}\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.toLowerCase().replaceAll('-', '') === 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\nexport function StackHandlerClient(props: BaseHandlerProps & Partial<RouteProps> & { location?: string }) {\n // Use hooks to get app\n const stackApp = useStackApp();\n\n const currentLocation = props.location ?? window.location.pathname;\n const searchParamsSource = new URLSearchParams(window.location.search);\n\n const { path, searchParams } = useMemo(() => {\n const handlerPath = new URL(stackApp.urls.handler, 'http://example.com').pathname;\n const relativePath = currentLocation.startsWith(handlerPath)\n ? currentLocation.slice(handlerPath.length).replace(/^\\/+/, '')\n : currentLocation.replace(/^\\/+/, '');\n\n return {\n path: relativePath,\n searchParams: Object.fromEntries(searchParamsSource.entries())\n };\n }, [currentLocation, searchParamsSource, stackApp.urls.handler]);\n\n const redirectIfNotHandler = (name: keyof HandlerUrls) => {\n const url = stackApp.urls[name];\n const handlerUrl = stackApp.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\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 window.location.href = getRelativePart(urlObj);\n };\n\n const result = renderComponent({\n path,\n searchParams,\n fullPage: props.fullPage,\n componentProps: props.componentProps,\n redirectIfNotHandler,\n onNotFound: () =>\n (\n <MessageCard\n title=\"Page does not exist\"\n fullPage={props.fullPage}\n primaryButtonText=\"Go to Home\"\n primaryAction={() => stackApp.redirectToHome()}\n >\n The page you are looking for could not be found. Please check the URL and try again.\n </MessageCard>\n )\n ,\n app: stackApp,\n });\n\n if (result && 'redirect' in result) {\n window.location.href = result.redirect;\n return null;\n }\n\n return result;\n}\n\n// filter undefined values in object. if object itself is undefined, return undefined\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":[]}