@stackframe/stack 2.8.11 → 2.8.16

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 (248) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/components/api-key-dialogs.js +5 -4
  3. package/dist/components/api-key-dialogs.js.map +1 -1
  4. package/dist/components/credential-sign-in.js +4 -4
  5. package/dist/components/credential-sign-up.js +3 -3
  6. package/dist/components/elements/maybe-full-page.js +1 -1
  7. package/dist/components/elements/sidebar-layout.js +1 -1
  8. package/dist/components/magic-link-sign-in.js +6 -6
  9. package/dist/components/magic-link-sign-in.js.map +1 -1
  10. package/dist/components/message-cards/known-error-message-card.js +2 -2
  11. package/dist/components/message-cards/message-card.js +1 -1
  12. package/dist/components/message-cards/predefined-message-card.js +3 -3
  13. package/dist/components/oauth-button-group.js +2 -2
  14. package/dist/components/oauth-button.js +27 -16
  15. package/dist/components/oauth-button.js.map +1 -1
  16. package/dist/components/passkey-button.js +2 -2
  17. package/dist/components/profile-image-editor.js +87 -34
  18. package/dist/components/profile-image-editor.js.map +1 -1
  19. package/dist/components/selected-team-switcher.js +41 -9
  20. package/dist/components/selected-team-switcher.js.map +1 -1
  21. package/dist/components/{iframe-preventer.js → use-in-iframe.js} +9 -19
  22. package/dist/components/use-in-iframe.js.map +1 -0
  23. package/dist/components/user-button.js +41 -8
  24. package/dist/components/user-button.js.map +1 -1
  25. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +57 -12
  26. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  27. package/dist/components-page/account-settings/api-keys/api-keys-page.js +100 -12
  28. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  29. package/dist/components-page/account-settings/editable-text.js +1 -1
  30. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js +12 -12
  31. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  32. package/dist/components-page/account-settings/email-and-auth/emails-section.js +15 -6
  33. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  34. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +18 -5
  35. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  36. package/dist/components-page/account-settings/email-and-auth/otp-section.js +18 -5
  37. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  38. package/dist/components-page/account-settings/email-and-auth/passkey-section.js +19 -6
  39. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  40. package/dist/components-page/account-settings/email-and-auth/password-section.js +20 -7
  41. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  42. package/dist/components-page/account-settings/profile-page/profile-page.js +18 -8
  43. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  44. package/dist/components-page/account-settings/settings/delete-account-section.js +19 -10
  45. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  46. package/dist/components-page/account-settings/settings/settings-page.js +6 -6
  47. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -1
  48. package/dist/components-page/account-settings/settings/sign-out-section.js +15 -6
  49. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  50. package/dist/components-page/account-settings/teams/leave-team-section.js +3 -3
  51. package/dist/components-page/account-settings/teams/team-api-keys-section.js +9 -6
  52. package/dist/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  53. package/dist/components-page/account-settings/teams/team-creation-page.js +19 -10
  54. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  55. package/dist/components-page/account-settings/teams/team-display-name-section.js +4 -4
  56. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  57. package/dist/components-page/account-settings/teams/team-member-list-section.js +7 -4
  58. package/dist/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  59. package/dist/components-page/account-settings/teams/team-page.js +8 -8
  60. package/dist/components-page/account-settings/teams/team-profile-image-section.js +4 -4
  61. package/dist/components-page/account-settings/teams/team-profile-user-section.js +4 -4
  62. package/dist/components-page/account-settings.js +29 -21
  63. package/dist/components-page/account-settings.js.map +1 -1
  64. package/dist/components-page/auth-page.js +16 -17
  65. package/dist/components-page/auth-page.js.map +1 -1
  66. package/dist/components-page/cli-auth-confirm.js +3 -3
  67. package/dist/components-page/email-verification.js +6 -6
  68. package/dist/components-page/email-verification.js.map +1 -1
  69. package/dist/components-page/error-page.js +9 -9
  70. package/dist/components-page/error-page.js.map +1 -1
  71. package/dist/components-page/forgot-password.js +6 -6
  72. package/dist/components-page/magic-link-callback.js +7 -7
  73. package/dist/components-page/magic-link-callback.js.map +1 -1
  74. package/dist/components-page/mfa.js +190 -0
  75. package/dist/components-page/mfa.js.map +1 -0
  76. package/dist/components-page/oauth-callback.js +4 -4
  77. package/dist/components-page/password-reset.js +9 -9
  78. package/dist/components-page/password-reset.js.map +1 -1
  79. package/dist/components-page/sign-in.js +3 -2
  80. package/dist/components-page/sign-in.js.map +1 -1
  81. package/dist/components-page/sign-out.js +2 -2
  82. package/dist/components-page/sign-up.js +1 -1
  83. package/dist/components-page/stack-handler.js +25 -14
  84. package/dist/components-page/stack-handler.js.map +1 -1
  85. package/dist/components-page/team-creation.js +4 -4
  86. package/dist/components-page/team-invitation.js +6 -6
  87. package/dist/components-page/team-invitation.js.map +1 -1
  88. package/dist/esm/components/api-key-dialogs.js +5 -4
  89. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  90. package/dist/esm/components/credential-sign-in.js +4 -4
  91. package/dist/esm/components/credential-sign-up.js +3 -3
  92. package/dist/esm/components/elements/maybe-full-page.js +1 -1
  93. package/dist/esm/components/elements/sidebar-layout.js +1 -1
  94. package/dist/esm/components/magic-link-sign-in.js +6 -6
  95. package/dist/esm/components/magic-link-sign-in.js.map +1 -1
  96. package/dist/esm/components/message-cards/known-error-message-card.js +2 -2
  97. package/dist/esm/components/message-cards/message-card.js +1 -1
  98. package/dist/esm/components/message-cards/predefined-message-card.js +3 -3
  99. package/dist/esm/components/oauth-button-group.js +2 -2
  100. package/dist/esm/components/oauth-button.js +28 -17
  101. package/dist/esm/components/oauth-button.js.map +1 -1
  102. package/dist/esm/components/passkey-button.js +2 -2
  103. package/dist/esm/components/profile-image-editor.js +86 -34
  104. package/dist/esm/components/profile-image-editor.js.map +1 -1
  105. package/dist/esm/components/selected-team-switcher.js +41 -9
  106. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  107. package/dist/esm/components/use-in-iframe.js +18 -0
  108. package/dist/esm/components/use-in-iframe.js.map +1 -0
  109. package/dist/esm/components/user-button.js +41 -8
  110. package/dist/esm/components/user-button.js.map +1 -1
  111. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +57 -12
  112. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  113. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +100 -12
  114. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  115. package/dist/esm/components-page/account-settings/editable-text.js +1 -1
  116. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js +12 -12
  117. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  118. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +15 -6
  119. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  120. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +18 -5
  121. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  122. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js +18 -5
  123. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  124. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js +19 -6
  125. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  126. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +20 -7
  127. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  128. package/dist/esm/components-page/account-settings/profile-page/profile-page.js +18 -8
  129. package/dist/esm/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  130. package/dist/esm/components-page/account-settings/settings/delete-account-section.js +19 -10
  131. package/dist/esm/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  132. package/dist/esm/components-page/account-settings/settings/settings-page.js +6 -6
  133. package/dist/esm/components-page/account-settings/settings/settings-page.js.map +1 -1
  134. package/dist/esm/components-page/account-settings/settings/sign-out-section.js +15 -6
  135. package/dist/esm/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  136. package/dist/esm/components-page/account-settings/teams/leave-team-section.js +3 -3
  137. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js +9 -6
  138. package/dist/esm/components-page/account-settings/teams/team-api-keys-section.js.map +1 -1
  139. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +19 -10
  140. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  141. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js +4 -4
  142. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  143. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js +7 -4
  144. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js.map +1 -1
  145. package/dist/esm/components-page/account-settings/teams/team-page.js +8 -8
  146. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js +4 -4
  147. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js +4 -4
  148. package/dist/esm/components-page/account-settings.js +29 -21
  149. package/dist/esm/components-page/account-settings.js.map +1 -1
  150. package/dist/esm/components-page/auth-page.js +16 -17
  151. package/dist/esm/components-page/auth-page.js.map +1 -1
  152. package/dist/esm/components-page/cli-auth-confirm.js +3 -3
  153. package/dist/esm/components-page/email-verification.js +6 -6
  154. package/dist/esm/components-page/email-verification.js.map +1 -1
  155. package/dist/esm/components-page/error-page.js +9 -9
  156. package/dist/esm/components-page/error-page.js.map +1 -1
  157. package/dist/esm/components-page/forgot-password.js +6 -6
  158. package/dist/esm/components-page/magic-link-callback.js +7 -7
  159. package/dist/esm/components-page/magic-link-callback.js.map +1 -1
  160. package/dist/esm/components-page/mfa.js +174 -0
  161. package/dist/esm/components-page/mfa.js.map +1 -0
  162. package/dist/esm/components-page/oauth-callback.js +4 -4
  163. package/dist/esm/components-page/password-reset.js +9 -9
  164. package/dist/esm/components-page/password-reset.js.map +1 -1
  165. package/dist/esm/components-page/sign-in.js +3 -2
  166. package/dist/esm/components-page/sign-in.js.map +1 -1
  167. package/dist/esm/components-page/sign-out.js +2 -2
  168. package/dist/esm/components-page/sign-up.js +1 -1
  169. package/dist/esm/components-page/stack-handler.js +25 -14
  170. package/dist/esm/components-page/stack-handler.js.map +1 -1
  171. package/dist/esm/components-page/team-creation.js +4 -4
  172. package/dist/esm/components-page/team-invitation.js +6 -6
  173. package/dist/esm/components-page/team-invitation.js.map +1 -1
  174. package/dist/esm/generated/global-css.js +1 -1
  175. package/dist/esm/generated/global-css.js.map +1 -1
  176. package/dist/esm/generated/quetzal-translations.js +3574 -2364
  177. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  178. package/dist/esm/index.js +22 -22
  179. package/dist/esm/lib/auth.js +3 -3
  180. package/dist/esm/lib/auth.js.map +1 -1
  181. package/dist/esm/lib/cookie.js +1 -129
  182. package/dist/esm/lib/cookie.js.map +1 -1
  183. package/dist/esm/lib/hooks.js +1 -1
  184. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +8 -8
  185. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  186. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +57 -26
  187. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  188. package/dist/esm/lib/stack-app/apps/implementations/common.js +2 -1
  189. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  190. package/dist/esm/lib/stack-app/apps/implementations/index.js +3 -3
  191. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +35 -17
  192. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  193. package/dist/esm/lib/stack-app/apps/index.js +3 -3
  194. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +1 -1
  195. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +1 -1
  196. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  197. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +1 -1
  198. package/dist/esm/lib/stack-app/common.js.map +1 -1
  199. package/dist/esm/lib/stack-app/index.js +2 -2
  200. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -1
  201. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  202. package/dist/esm/lib/translations.js +1 -1
  203. package/dist/esm/providers/stack-provider-client.js +2 -2
  204. package/dist/esm/providers/stack-provider.js +3 -3
  205. package/dist/esm/providers/theme-provider.js +3 -3
  206. package/dist/esm/providers/translation-provider.js +2 -2
  207. package/dist/esm/utils/browser-script.js +1 -1
  208. package/dist/generated/global-css.js +1 -1
  209. package/dist/generated/global-css.js.map +1 -1
  210. package/dist/generated/quetzal-translations.js +3574 -2364
  211. package/dist/generated/quetzal-translations.js.map +1 -1
  212. package/dist/index.d.mts +73 -2
  213. package/dist/index.d.ts +73 -2
  214. package/dist/index.js +23 -23
  215. package/dist/index.js.map +1 -1
  216. package/dist/lib/auth.js +3 -3
  217. package/dist/lib/auth.js.map +1 -1
  218. package/dist/lib/cookie.js +4 -132
  219. package/dist/lib/cookie.js.map +1 -1
  220. package/dist/lib/hooks.js +1 -1
  221. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +8 -8
  222. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  223. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +57 -26
  224. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  225. package/dist/lib/stack-app/apps/implementations/common.js +2 -1
  226. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  227. package/dist/lib/stack-app/apps/implementations/index.js +3 -3
  228. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +35 -17
  229. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  230. package/dist/lib/stack-app/apps/index.js +3 -3
  231. package/dist/lib/stack-app/apps/interfaces/admin-app.js +1 -1
  232. package/dist/lib/stack-app/apps/interfaces/client-app.js +1 -1
  233. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  234. package/dist/lib/stack-app/apps/interfaces/server-app.js +1 -1
  235. package/dist/lib/stack-app/common.js.map +1 -1
  236. package/dist/lib/stack-app/index.js +2 -2
  237. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -1
  238. package/dist/lib/stack-app/users/index.js.map +1 -1
  239. package/dist/lib/translations.js +1 -1
  240. package/dist/providers/stack-provider-client.js +2 -2
  241. package/dist/providers/stack-provider.js +3 -3
  242. package/dist/providers/theme-provider.js +3 -3
  243. package/dist/providers/translation-provider.js +2 -2
  244. package/dist/utils/browser-script.js +1 -1
  245. package/package.json +5 -5
  246. package/dist/components/iframe-preventer.js.map +0 -1
  247. package/dist/esm/components/iframe-preventer.js +0 -28
  248. package/dist/esm/components/iframe-preventer.js.map +0 -1
@@ -0,0 +1,190 @@
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/mfa.tsx
23
+ var mfa_exports = {};
24
+ __export(mfa_exports, {
25
+ MFA: () => MFA
26
+ });
27
+ module.exports = __toCommonJS(mfa_exports);
28
+ var import_stack_shared = require("@stackframe/stack-shared");
29
+ var import_stack_ui = require("@stackframe/stack-ui");
30
+ var import_lucide_react = require("lucide-react");
31
+ var import_react = require("react");
32
+ var import__ = require("../index.js");
33
+ var import_form_warning = require("../components/elements/form-warning.js");
34
+ var import_maybe_full_page = require("../components/elements/maybe-full-page.js");
35
+ var import_translations = require("../lib/translations.js");
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ function MfaForm({ onSuccess, onCancel }) {
38
+ const stackApp = (0, import__.useStackApp)();
39
+ const { t } = (0, import_translations.useTranslation)();
40
+ const [otp, setOtp] = (0, import_react.useState)("");
41
+ const formRef = (0, import_react.useRef)(null);
42
+ const [submitting, setSubmitting] = (0, import_react.useState)(false);
43
+ const [error, setError] = (0, import_react.useState)(null);
44
+ const [verified, setVerified] = (0, import_react.useState)(false);
45
+ const [attemptCode, setAttemptCode] = (0, import_react.useState)(null);
46
+ (0, import_react.useEffect)(() => {
47
+ if (!attemptCode && typeof window !== "undefined") {
48
+ const code = window.sessionStorage.getItem("stack_mfa_attempt_code");
49
+ if (code) {
50
+ setAttemptCode(code);
51
+ }
52
+ }
53
+ }, [attemptCode]);
54
+ (0, import_react.useEffect)(() => {
55
+ if (otp.length === 6 && !submitting) {
56
+ if (document.activeElement instanceof HTMLElement) {
57
+ document.activeElement.blur();
58
+ }
59
+ if (formRef.current) {
60
+ const inputs = formRef.current.querySelectorAll("input");
61
+ for (const input of inputs) {
62
+ input.blur();
63
+ }
64
+ }
65
+ setSubmitting(true);
66
+ setError(null);
67
+ if (attemptCode) {
68
+ stackApp.signInWithMfa(otp, attemptCode, { noRedirect: true }).then(async (result) => {
69
+ if (result.status === "ok") {
70
+ setVerified(true);
71
+ if (typeof window !== "undefined") {
72
+ window.sessionStorage.removeItem("stack_mfa_attempt_code");
73
+ }
74
+ if (onSuccess) {
75
+ onSuccess();
76
+ } else {
77
+ await stackApp.redirectToAfterSignIn();
78
+ }
79
+ } else {
80
+ throw result.error;
81
+ }
82
+ }).catch((e) => {
83
+ if (e instanceof import_stack_shared.KnownErrors.InvalidTotpCode) {
84
+ setError(t("Invalid TOTP code"));
85
+ } else {
86
+ setError(t("Verification failed"));
87
+ }
88
+ }).finally(() => {
89
+ setSubmitting(false);
90
+ if (!verified) {
91
+ setOtp("");
92
+ }
93
+ });
94
+ } else {
95
+ setSubmitting(false);
96
+ setError(t("Missing verification information"));
97
+ }
98
+ }
99
+ if (otp.length !== 0 && otp.length !== 6) {
100
+ setError(null);
101
+ }
102
+ }, [otp, submitting, onSuccess, attemptCode, stackApp, t, verified]);
103
+ const inputStyleClass = (0, import_react.useMemo)(() => {
104
+ if (verified) {
105
+ return "opacity-85 transition-all duration-300";
106
+ }
107
+ if (error) {
108
+ return "ring-red-500 border-red-500";
109
+ }
110
+ return "focus:ring-primary/50";
111
+ }, [error, verified]);
112
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-stretch stack-scope", children: [
113
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("form", { ref: formRef, className: "w-full flex flex-col items-center gap-4", children: [
114
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
115
+ import_stack_ui.InputOTP,
116
+ {
117
+ maxLength: 6,
118
+ type: "text",
119
+ inputMode: "numeric",
120
+ placeholder: "\xB7\xB7\xB7\xB7\xB7\xB7",
121
+ value: otp,
122
+ onChange: (value) => setOtp(value.toUpperCase()),
123
+ disabled: submitting || verified,
124
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.InputOTPGroup, { children: [0, 1, 2, 3, 4, 5].map((index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
125
+ import_stack_ui.InputOTPSlot,
126
+ {
127
+ index,
128
+ size: "lg",
129
+ className: (0, import_stack_ui.cn)(
130
+ "border focus:ring-2 transition-all",
131
+ inputStyleClass
132
+ )
133
+ },
134
+ index
135
+ )) })
136
+ }
137
+ ),
138
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "h-8 flex flex-col gap-4 items-center justify-center w-full", children: [
139
+ verified ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 animate-in fade-in duration-300 slide-in-from-bottom-2", children: [
140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckIcon, { className: "w-5 h-5 text-green-600 animate-in zoom-in duration-300" }),
141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { className: "text-sm font-medium", children: t("Verified! Redirecting...") })
142
+ ] }) : submitting ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
143
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Spinner, { className: "text-primary h-4 w-4" }),
144
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { className: "text-sm", children: t("Verifying...") })
145
+ ] }) : null,
146
+ error !== null && !submitting && !verified ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form_warning.FormWarningText, { text: error }) : null
147
+ ] })
148
+ ] }),
149
+ onCancel && !verified && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
150
+ import_stack_ui.Button,
151
+ {
152
+ variant: "link",
153
+ onClick: onCancel,
154
+ className: "underline mt-4 self-center",
155
+ disabled: submitting || verified,
156
+ children: t("Cancel")
157
+ }
158
+ )
159
+ ] });
160
+ }
161
+ function MFA(props) {
162
+ const { t } = (0, import_translations.useTranslation)();
163
+ const headerText = t("Multi-Factor Authentication");
164
+ const instructionText = t("Enter the six-digit code from your authenticator app");
165
+ if (props.fullPage) {
166
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_maybe_full_page.MaybeFullPage, { fullPage: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
167
+ "div",
168
+ {
169
+ className: "stack-scope flex flex-col items-stretch",
170
+ style: { maxWidth: "380px", flexBasis: "380px", padding: "1rem" },
171
+ children: [
172
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-center mb-6", children: [
173
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { type: "h2", children: headerText }),
174
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { className: "mt-2", children: instructionText })
175
+ ] }),
176
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MfaForm, { onSuccess: props.onSuccess, onCancel: props.onCancel })
177
+ ]
178
+ }
179
+ ) });
180
+ }
181
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-stretch stack-scope", children: [
182
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_stack_ui.Typography, { className: "mb-4 text-center", children: instructionText }),
183
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MfaForm, { onSuccess: props.onSuccess, onCancel: props.onCancel })
184
+ ] });
185
+ }
186
+ // Annotate the CommonJS export names for ESM import in node:
187
+ 0 && (module.exports = {
188
+ MFA
189
+ });
190
+ //# sourceMappingURL=mfa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/mfa.tsx"],"sourcesContent":["\"use client\";\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport {\n Button,\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n Spinner,\n Typography,\n cn,\n} from \"@stackframe/stack-ui\";\nimport { CheckIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { FormWarningText } from \"../components/elements/form-warning\";\nimport { MaybeFullPage } from \"../components/elements/maybe-full-page\";\nimport { useTranslation } from \"../lib/translations\";\n\nfunction MfaForm({ onSuccess, onCancel }: {\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const stackApp = useStackApp();\n const { t } = useTranslation();\n const [otp, setOtp] = useState<string>(\"\");\n const formRef = useRef<HTMLFormElement>(null);\n\n const [submitting, setSubmitting] = useState<boolean>(false);\n const [error, setError] = useState<string | null>(null);\n const [verified, setVerified] = useState<boolean>(false);\n\n const [attemptCode, setAttemptCode] = useState<string | null>(null);\n\n useEffect(() => {\n if (!attemptCode && typeof window !== \"undefined\") {\n const code = window.sessionStorage.getItem(\"stack_mfa_attempt_code\");\n if (code) {\n setAttemptCode(code);\n }\n }\n }, [ attemptCode]);\n\n // Handle OTP verification when code is complete\n useEffect(() => {\n if (otp.length === 6 && !submitting) {\n // Blur any focused inputs\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n if (formRef.current) {\n const inputs = formRef.current.querySelectorAll('input');\n for (const input of inputs) {\n input.blur();\n }\n }\n\n setSubmitting(true);\n setError(null);\n\n if (attemptCode) {\n stackApp\n .signInWithMfa(otp, attemptCode, { noRedirect: true })\n .then(async (result) => {\n if (result.status === \"ok\") {\n setVerified(true);\n\n // Cleanup session storage\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(\"stack_mfa_attempt_code\");\n }\n\n if (onSuccess) {\n onSuccess();\n } else {\n await stackApp.redirectToAfterSignIn();\n }\n } else {\n throw result.error;\n }\n })\n .catch((e) => {\n if (e instanceof KnownErrors.InvalidTotpCode) {\n setError(t(\"Invalid TOTP code\"));\n } else {\n setError(t(\"Verification failed\"));\n }\n })\n .finally(() => {\n setSubmitting(false);\n if (!verified) {\n setOtp(\"\");\n }\n });\n } else {\n setSubmitting(false);\n setError(t(\"Missing verification information\"));\n }\n }\n\n // Clear error when user is typing\n if (otp.length !== 0 && otp.length !== 6) {\n setError(null);\n }\n }, [otp, submitting, onSuccess, attemptCode, stackApp, t, verified]);\n\n\n const inputStyleClass = useMemo(() => {\n if (verified) {\n return \"opacity-85 transition-all duration-300\";\n }\n\n if (error) {\n return \"ring-red-500 border-red-500\";\n }\n\n return \"focus:ring-primary/50\";\n }, [error, verified]);\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <form ref={formRef} className=\"w-full flex flex-col items-center gap-4\">\n <InputOTP\n maxLength={6}\n type=\"text\"\n inputMode=\"numeric\"\n placeholder=\"······\"\n value={otp}\n onChange={(value) => setOtp(value.toUpperCase())}\n disabled={submitting || verified}\n >\n <InputOTPGroup>\n {[0, 1, 2, 3, 4, 5].map((index) => (\n <InputOTPSlot\n key={index}\n index={index}\n size=\"lg\"\n className={cn(\n \"border focus:ring-2 transition-all\",\n inputStyleClass,\n )}\n />\n ))}\n </InputOTPGroup>\n </InputOTP>\n\n {/* Verification Status */}\n <div className=\"h-8 flex flex-col gap-4 items-center justify-center w-full\">\n {verified ? (\n <div className=\"flex items-center gap-2 animate-in fade-in duration-300 slide-in-from-bottom-2\">\n <CheckIcon className=\"w-5 h-5 text-green-600 animate-in zoom-in duration-300\" />\n <Typography className=\"text-sm font-medium\">{t(\"Verified! Redirecting...\")}</Typography>\n </div>\n ) : submitting ? (\n <div className=\"flex items-center gap-2\">\n <Spinner className=\"text-primary h-4 w-4\" />\n <Typography className=\"text-sm\">{t(\"Verifying...\")}</Typography>\n </div>\n ) : null}\n\n {/* Error reporting */}\n {error !== null && !submitting && !verified ? <FormWarningText text={error} /> : null}\n </div>\n </form>\n\n {/* Cancel Button */}\n {onCancel && !verified && (\n <Button\n variant=\"link\"\n onClick={onCancel}\n className=\"underline mt-4 self-center\"\n disabled={submitting || verified}\n >\n {t(\"Cancel\")}\n </Button>\n )}\n </div>\n );\n}\n\nexport function MFA(props: {\n fullPage?: boolean,\n onSuccess?: () => void,\n onCancel?: () => void,\n}) {\n const { t } = useTranslation();\n\n const headerText = t(\"Multi-Factor Authentication\");\n const instructionText = t(\"Enter the six-digit code from your authenticator app\");\n\n if (props.fullPage) {\n return (\n <MaybeFullPage fullPage={true}>\n <div\n className=\"stack-scope flex flex-col items-stretch\"\n style={{ maxWidth: \"380px\", flexBasis: \"380px\", padding: \"1rem\" }}\n >\n <div className=\"text-center mb-6\">\n <Typography type=\"h2\">{headerText}</Typography>\n <Typography className=\"mt-2\">{instructionText}</Typography>\n </div>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n </MaybeFullPage>\n );\n }\n\n return (\n <div className=\"flex flex-col items-stretch stack-scope\">\n <Typography className=\"mb-4 text-center\">{instructionText}</Typography>\n <MfaForm onSuccess={props.onSuccess} onCancel={props.onCancel} />\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -29,10 +29,10 @@ var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
29
29
  var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
30
30
  var import_stack_ui = require("@stackframe/stack-ui");
31
31
  var import_react = require("react");
32
- var import__ = require("..");
33
- var import_maybe_full_page = require("../components/elements/maybe-full-page");
34
- var import_link = require("../components/link");
35
- var import_translations = require("../lib/translations");
32
+ var import__ = require("../index.js");
33
+ var import_maybe_full_page = require("../components/elements/maybe-full-page.js");
34
+ var import_link = require("../components/link.js");
35
+ var import_translations = require("../lib/translations.js");
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
37
  function OAuthCallback({ fullPage }) {
38
38
  const { t } = (0, import_translations.useTranslation)();
@@ -46,12 +46,12 @@ var import_stack_ui = require("@stackframe/stack-ui");
46
46
  var import_react = __toESM(require("react"));
47
47
  var import_react_hook_form = require("react-hook-form");
48
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");
54
- var import_translations = require("../lib/translations");
49
+ var import__ = require("../index.js");
50
+ var import_form_warning = require("../components/elements/form-warning.js");
51
+ var import_maybe_full_page = require("../components/elements/maybe-full-page.js");
52
+ var import_message_card = require("../components/message-cards/message-card.js");
53
+ var import_predefined_message_card = require("../components/message-cards/predefined-message-card.js");
54
+ var import_translations = require("../lib/translations.js");
55
55
  var import_jsx_runtime = require("react/jsx-runtime");
56
56
  function PasswordResetForm(props) {
57
57
  const { t } = (0, import_translations.useTranslation)();
@@ -160,11 +160,11 @@ function PasswordReset({
160
160
  }
161
161
  const result = import_react.default.use(cachedVerifyPasswordResetCode(stackApp, code));
162
162
  if (result.status === "error") {
163
- if (result.error instanceof import_stack_shared.KnownErrors.VerificationCodeNotFound) {
163
+ if (import_stack_shared.KnownErrors.VerificationCodeNotFound.isInstance(result.error)) {
164
164
  return invalidJsx;
165
- } else if (result.error instanceof import_stack_shared.KnownErrors.VerificationCodeExpired) {
165
+ } else if (import_stack_shared.KnownErrors.VerificationCodeExpired.isInstance(result.error)) {
166
166
  return expiredJsx;
167
- } else if (result.error instanceof import_stack_shared.KnownErrors.VerificationCodeAlreadyUsed) {
167
+ } else if (import_stack_shared.KnownErrors.VerificationCodeAlreadyUsed.isInstance(result.error)) {
168
168
  return usedJsx;
169
169
  } else {
170
170
  throw result.error;
@@ -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 (result.error instanceof KnownErrors.VerificationCodeNotFound) {\n return invalidJsx;\n } else if (result.error instanceof KnownErrors.VerificationCodeExpired) {\n return expiredJsx;\n } else if (result.error instanceof KnownErrors.VerificationCodeAlreadyUsed) {\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 { 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"]}
@@ -23,7 +23,7 @@ __export(sign_in_exports, {
23
23
  SignIn: () => SignIn
24
24
  });
25
25
  module.exports = __toCommonJS(sign_in_exports);
26
- var import_auth_page = require("./auth-page");
26
+ var import_auth_page = require("./auth-page.js");
27
27
  var import_jsx_runtime = require("react/jsx-runtime");
28
28
  function SignIn(props) {
29
29
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -33,7 +33,8 @@ function SignIn(props) {
33
33
  type: "sign-in",
34
34
  automaticRedirect: !!props.automaticRedirect,
35
35
  extraInfo: props.extraInfo,
36
- firstTab: props.firstTab
36
+ firstTab: props.firstTab,
37
+ mockProject: props.mockProject
37
38
  }
38
39
  );
39
40
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/sign-in.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { AuthPage } from \"./auth-page\";\n\nexport function SignIn(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n}) {\n return (\n <AuthPage\n fullPage={!!props.fullPage}\n type=\"sign-in\"\n automaticRedirect={!!props.automaticRedirect}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,uBAAyB;AASrB;AAPG,SAAS,OAAO,OAKpB;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC,CAAC,MAAM;AAAA,MAClB,MAAK;AAAA,MACL,mBAAmB,CAAC,CAAC,MAAM;AAAA,MAC3B,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA;AAAA,EAClB;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components-page/sign-in.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { AuthPage } from \"./auth-page\";\n\nexport function SignIn(props: {\n fullPage?: boolean,\n automaticRedirect?: boolean,\n extraInfo?: React.ReactNode,\n firstTab?: 'magic-link' | 'password',\n mockProject?: {\n config: {\n signUpEnabled: boolean,\n credentialEnabled: boolean,\n passkeyEnabled: boolean,\n magicLinkEnabled: boolean,\n oauthProviders: {\n id: string,\n }[],\n },\n },\n}) {\n return (\n <AuthPage\n fullPage={!!props.fullPage}\n type=\"sign-in\"\n automaticRedirect={!!props.automaticRedirect}\n extraInfo={props.extraInfo}\n firstTab={props.firstTab}\n mockProject={props.mockProject}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,uBAAyB;AAoBrB;AAlBG,SAAS,OAAO,OAgBpB;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC,CAAC,MAAM;AAAA,MAClB,MAAK;AAAA,MACL,mBAAmB,CAAC,CAAC,MAAM;AAAA,MAC3B,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA;AAAA,EACrB;AAEJ;","names":[]}
@@ -37,8 +37,8 @@ __export(sign_out_exports, {
37
37
  module.exports = __toCommonJS(sign_out_exports);
38
38
  var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
39
39
  var import_react = __toESM(require("react"));
40
- var import__ = require("..");
41
- var import_predefined_message_card = require("../components/message-cards/predefined-message-card");
40
+ var import__ = require("../index.js");
41
+ var import_predefined_message_card = require("../components/message-cards/predefined-message-card.js");
42
42
  var import_jsx_runtime = require("react/jsx-runtime");
43
43
  var cacheSignOut = (0, import_caches.cacheFunction)(async (user) => {
44
44
  return await user.signOut();
@@ -25,7 +25,7 @@ __export(sign_up_exports, {
25
25
  SignUp: () => SignUp
26
26
  });
27
27
  module.exports = __toCommonJS(sign_up_exports);
28
- var import_auth_page = require("./auth-page");
28
+ var import_auth_page = require("./auth-page.js");
29
29
  var import_jsx_runtime = require("react/jsx-runtime");
30
30
  function SignUp(props) {
31
31
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -27,19 +27,19 @@ var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
27
27
  var import_objects = require("@stackframe/stack-shared/dist/utils/objects");
28
28
  var import_urls = require("@stackframe/stack-shared/dist/utils/urls");
29
29
  var import_navigation = require("next/navigation");
30
- var import__ = require("..");
31
- var import_iframe_preventer = require("../components/iframe-preventer");
32
- var import_message_card = require("../components/message-cards/message-card");
33
- var import_account_settings = require("./account-settings");
34
- var import_cli_auth_confirm = require("./cli-auth-confirm");
35
- var import_email_verification = require("./email-verification");
36
- var import_error_page = require("./error-page");
37
- var import_forgot_password = require("./forgot-password");
38
- var import_magic_link_callback = require("./magic-link-callback");
39
- var import_oauth_callback = require("./oauth-callback");
40
- var import_password_reset = require("./password-reset");
41
- var import_sign_out = require("./sign-out");
42
- var import_team_invitation = require("./team-invitation");
30
+ var import__ = require("../index.js");
31
+ var import_message_card = require("../components/message-cards/message-card.js");
32
+ var import_account_settings = require("./account-settings.js");
33
+ var import_cli_auth_confirm = require("./cli-auth-confirm.js");
34
+ var import_email_verification = require("./email-verification.js");
35
+ var import_error_page = require("./error-page.js");
36
+ var import_forgot_password = require("./forgot-password.js");
37
+ var import_magic_link_callback = require("./magic-link-callback.js");
38
+ var import_oauth_callback = require("./oauth-callback.js");
39
+ var import_mfa = require("./mfa.js");
40
+ var import_password_reset = require("./password-reset.js");
41
+ var import_sign_out = require("./sign-out.js");
42
+ var import_team_invitation = require("./team-invitation.js");
43
43
  var import_jsx_runtime = require("react/jsx-runtime");
44
44
  var next15DeprecationWarning = "DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.";
45
45
  var availablePaths = {
@@ -54,6 +54,7 @@ var availablePaths = {
54
54
  teamInvitation: "team-invitation",
55
55
  accountSettings: "account-settings",
56
56
  cliAuthConfirm: "cli-auth-confirm",
57
+ mfa: "mfa",
57
58
  error: "error"
58
59
  };
59
60
  var pathAliases = {
@@ -189,6 +190,16 @@ function renderComponent(props) {
189
190
  }
190
191
  );
191
192
  }
193
+ case availablePaths.mfa: {
194
+ redirectIfNotHandler?.("mfa");
195
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
196
+ import_mfa.MFA,
197
+ {
198
+ fullPage,
199
+ ...filterUndefinedINU(componentProps?.MFA)
200
+ }
201
+ );
202
+ }
192
203
  default: {
193
204
  if (Object.values(availablePaths).includes(path)) {
194
205
  throw new import_errors.StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });
@@ -249,7 +260,7 @@ async function NextStackHandler(props) {
249
260
  next15DeprecationWarning,
250
261
  ". This warning will not be shown in production."
251
262
  ] }),
252
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iframe_preventer.IframePreventer, { children: result })
263
+ result
253
264
  ] });
254
265
  }
255
266
  var stack_handler_default = NextStackHandler;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { FilterUndefined, filterUndefined, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation'; // THIS_LINE_PLATFORM next\nimport { useMemo } from 'react';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { IframePreventer } from \"../components/iframe-preventer\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\nimport { HandlerUrls, StackClientApp } from \"../lib/stack-app\";\nimport { AccountSettings } from \"./account-settings\";\nimport { 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 { OAuthCallback } from \"./oauth-callback\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n CliAuthConfirmation: typeof CliAuthConfirmation,\n};\n\ntype RouteProps = {\n params: Promise<{ stack?: string[] }> | { stack?: string[] },\n searchParams: Promise<Record<string, string>> | Record<string, string>,\n};\n\nconst next15DeprecationWarning = \"DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.\";\n\nconst availablePaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n emailVerification: 'email-verification',\n passwordReset: 'password-reset',\n forgotPassword: 'forgot-password',\n signOut: 'sign-out',\n oauthCallback: 'oauth-callback',\n magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n cliAuthConfirm: 'cli-auth-confirm',\n error: 'error',\n} as const;\n\nconst pathAliases = {\n // also includes the uppercase and non-dashed versions\n ...Object.fromEntries(Object.entries(availablePaths).map(([key, value]) => [value, value])),\n \"log-in\": availablePaths.signIn,\n \"register\": availablePaths.signUp,\n} as const;\n\ntype BaseHandlerProps = {\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>[0];\n },\n};\n\nfunction renderComponent(props: {\n path: string,\n searchParams: Record<string, string>,\n fullPage: boolean,\n componentProps?: BaseHandlerProps['componentProps'],\n redirectIfNotHandler?: (name: keyof HandlerUrls) => void,\n onNotFound: () => any,\n app: StackClientApp<any> | StackServerApp<any>,\n}) {\n const { path, searchParams, fullPage, componentProps, redirectIfNotHandler, onNotFound, app } = props;\n\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler?.('signIn');\n return <SignIn\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler?.('signUp');\n return <SignUp\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler?.('emailVerification');\n return <EmailVerification\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler?.('passwordReset');\n return <PasswordReset\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler?.('forgotPassword');\n return <ForgotPassword\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler?.('signOut');\n return <SignOut\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler?.('oauthCallback');\n return <OAuthCallback\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler?.('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler?.('teamInvitation');\n return <TeamInvitation\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ErrorPage)}\n />;\n }\n case availablePaths.cliAuthConfirm: {\n return <CliAuthConfirmation\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.CliAuthConfirmation)}\n />;\n }\n default: {\n if (Object.values(availablePaths).includes(path as any)) {\n throw new StackAssertionError(`Path alias ${path} not included in switch statement, but in availablePaths?`, { availablePaths });\n }\n for (const [key, value] of Object.entries(pathAliases)) {\n if (path === key.toLowerCase().replaceAll('-', '')) {\n const redirectUrl = `${app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`;\n return { redirect: redirectUrl };\n }\n }\n return onNotFound();\n }\n }\n}\n\nasync function NextStackHandler<HasTokenStore extends boolean>(props: BaseHandlerProps & {\n app: StackServerApp<HasTokenStore>,\n} & (\n | Partial<RouteProps>\n | {\n routeProps: RouteProps | unknown,\n }\n)): Promise<any> {\n if (!(\"routeProps\" in props)) {\n console.warn(next15DeprecationWarning);\n }\n\n const routeProps = \"routeProps\" in props ? props.routeProps as RouteProps : pick(props, [\"params\", \"searchParams\"] as any);\n const params = await routeProps.params;\n const searchParams = await routeProps.searchParams;\n\n if (!params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use {\"<StackHandler />\"} at this location. Make sure that the file is in a folder called [...stack] and you are passing the routeProps prop.</p>\n </MessageCard>\n );\n }\n\n const path = params.stack.join('/');\n\n const redirectIfNotHandler = (name: keyof HandlerUrls) => {\n const url = props.app.urls[name];\n const handlerUrl = props.app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n if (searchParams) {\n for (const [key, value] of Object.entries(searchParams)) {\n urlObj.searchParams.set(key, value);\n }\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const result = renderComponent({\n path,\n searchParams: searchParams ?? {},\n fullPage: props.fullPage,\n componentProps: props.componentProps,\n redirectIfNotHandler,\n onNotFound: () => notFound(),\n app: props.app,\n });\n\n if (result && 'redirect' in result) {\n redirect(result.redirect, RedirectType.replace);\n }\n\n return <>\n {process.env.NODE_ENV === \"development\" && !(\"routeProps\" in props) && (\n <span style={{ color: \"red\" }}>\n {next15DeprecationWarning}. This warning will not be shown in production.\n </span>\n )}\n <IframePreventer>\n {result}\n </IframePreventer>\n </>;\n}\n\n\nexport default NextStackHandler;\n\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":[]}
1
+ {"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { FilterUndefined, filterUndefined, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { getRelativePart } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { RedirectType, notFound, redirect } from 'next/navigation'; // THIS_LINE_PLATFORM next\nimport { useMemo } from 'react';\nimport { SignIn, SignUp, StackServerApp } from \"..\";\nimport { MessageCard } from \"../components/message-cards/message-card\";\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 { OAuthCallback } from \"./oauth-callback\";\nimport { MFA } from \"./mfa\";\nimport { PasswordReset } from \"./password-reset\";\nimport { SignOut } from \"./sign-out\";\nimport { TeamInvitation } from \"./team-invitation\";\n\ntype Components = {\n SignIn: typeof SignIn,\n SignUp: typeof SignUp,\n EmailVerification: typeof EmailVerification,\n PasswordReset: typeof PasswordReset,\n ForgotPassword: typeof ForgotPassword,\n SignOut: typeof SignOut,\n OAuthCallback: typeof OAuthCallback,\n MagicLinkCallback: typeof MagicLinkCallback,\n TeamInvitation: typeof TeamInvitation,\n ErrorPage: typeof ErrorPage,\n AccountSettings: typeof AccountSettings,\n 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 next15DeprecationWarning = \"DEPRECATION WARNING: Next.js 15 disallows spreading the props argument of <StackHandler /> like `{...props}`, so you must now explicitly pass them in the `routeProps` argument: `routeProps={props}`. You can fix this by updating the code in the file `app/handler/[...stack]/route.tsx`.\";\n\nconst availablePaths = {\n signIn: 'sign-in',\n signUp: 'sign-up',\n emailVerification: 'email-verification',\n passwordReset: 'password-reset',\n forgotPassword: 'forgot-password',\n signOut: 'sign-out',\n oauthCallback: 'oauth-callback',\n magicLinkCallback: 'magic-link-callback',\n teamInvitation: 'team-invitation',\n accountSettings: 'account-settings',\n 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\ntype BaseHandlerProps = {\n fullPage: boolean,\n componentProps?: {\n [K in keyof Components]?: Parameters<Components[K]>[0];\n },\n};\n\nfunction renderComponent(props: {\n path: string,\n searchParams: Record<string, string>,\n fullPage: boolean,\n componentProps?: BaseHandlerProps['componentProps'],\n redirectIfNotHandler?: (name: keyof HandlerUrls) => void,\n onNotFound: () => any,\n app: StackClientApp<any> | StackServerApp<any>,\n}) {\n const { path, searchParams, fullPage, componentProps, redirectIfNotHandler, onNotFound, app } = props;\n\n switch (path) {\n case availablePaths.signIn: {\n redirectIfNotHandler?.('signIn');\n return <SignIn\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignIn)}\n />;\n }\n case availablePaths.signUp: {\n redirectIfNotHandler?.('signUp');\n return <SignUp\n fullPage={fullPage}\n automaticRedirect\n {...filterUndefinedINU(componentProps?.SignUp)}\n />;\n }\n case availablePaths.emailVerification: {\n redirectIfNotHandler?.('emailVerification');\n return <EmailVerification\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.EmailVerification)}\n />;\n }\n case availablePaths.passwordReset: {\n redirectIfNotHandler?.('passwordReset');\n return <PasswordReset\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.PasswordReset)}\n />;\n }\n case availablePaths.forgotPassword: {\n redirectIfNotHandler?.('forgotPassword');\n return <ForgotPassword\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ForgotPassword)}\n />;\n }\n case availablePaths.signOut: {\n redirectIfNotHandler?.('signOut');\n return <SignOut\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.SignOut)}\n />;\n }\n case availablePaths.oauthCallback: {\n redirectIfNotHandler?.('oauthCallback');\n return <OAuthCallback\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.OAuthCallback)}\n />;\n }\n case availablePaths.magicLinkCallback: {\n redirectIfNotHandler?.('magicLinkCallback');\n return <MagicLinkCallback\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.MagicLinkCallback)}\n />;\n }\n case availablePaths.teamInvitation: {\n redirectIfNotHandler?.('teamInvitation');\n return <TeamInvitation\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.TeamInvitation)}\n />;\n }\n case availablePaths.accountSettings: {\n return <AccountSettings\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.AccountSettings)}\n />;\n }\n case availablePaths.error: {\n return <ErrorPage\n searchParams={searchParams}\n fullPage={fullPage}\n {...filterUndefinedINU(componentProps?.ErrorPage)}\n />;\n }\n 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 === key.toLowerCase().replaceAll('-', '')) {\n const redirectUrl = `${app.urls.handler}/${value}?${new URLSearchParams(searchParams).toString()}`;\n return { redirect: redirectUrl };\n }\n }\n return onNotFound();\n }\n }\n}\n\nasync function NextStackHandler<HasTokenStore extends boolean>(props: BaseHandlerProps & {\n app: StackServerApp<HasTokenStore>,\n} & (\n | Partial<RouteProps>\n | {\n routeProps: RouteProps | unknown,\n }\n)): Promise<any> {\n if (!(\"routeProps\" in props)) {\n console.warn(next15DeprecationWarning);\n }\n\n const routeProps = \"routeProps\" in props ? props.routeProps as RouteProps : pick(props, [\"params\", \"searchParams\"] as any);\n const params = await routeProps.params;\n const searchParams = await routeProps.searchParams;\n\n if (!params?.stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage={props.fullPage}>\n <p>Can't use {\"<StackHandler />\"} at this location. Make sure that the file is in a folder called [...stack] and you are passing the routeProps prop.</p>\n </MessageCard>\n );\n }\n\n const path = params.stack.join('/');\n\n const redirectIfNotHandler = (name: keyof HandlerUrls) => {\n const url = props.app.urls[name];\n const handlerUrl = props.app.urls.handler;\n\n if (url !== handlerUrl && url.startsWith(handlerUrl + \"/\")) {\n return;\n }\n\n const urlObj = new URL(url, \"http://example.com\");\n if (searchParams) {\n for (const [key, value] of Object.entries(searchParams)) {\n urlObj.searchParams.set(key, value);\n }\n }\n\n redirect(getRelativePart(urlObj), RedirectType.replace);\n };\n\n const result = renderComponent({\n path,\n searchParams: searchParams ?? {},\n fullPage: props.fullPage,\n componentProps: props.componentProps,\n redirectIfNotHandler,\n onNotFound: () => notFound(),\n app: props.app,\n });\n\n if (result && 'redirect' in result) {\n redirect(result.redirect, RedirectType.replace);\n }\n\n return <>\n {process.env.NODE_ENV === \"development\" && !(\"routeProps\" in props) && (\n <span style={{ color: \"red\" }}>\n {next15DeprecationWarning}. This warning will not be shown in production.\n </span>\n )}\n {result}\n </>;\n}\n\n\nexport default NextStackHandler;\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":[]}
@@ -31,10 +31,10 @@ var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
31
31
  var import_stack_ui = require("@stackframe/stack-ui");
32
32
  var import_react = require("react");
33
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_translations = require("../lib/translations");
34
+ var import__ = require("../index.js");
35
+ var import_form_warning = require("../components/elements/form-warning.js");
36
+ var import_maybe_full_page = require("../components/elements/maybe-full-page.js");
37
+ var import_translations = require("../lib/translations.js");
38
38
  var import_jsx_runtime = require("react/jsx-runtime");
39
39
  function TeamCreation(props) {
40
40
  const { t } = (0, import_translations.useTranslation)();
@@ -40,9 +40,9 @@ var import_caches = require("@stackframe/stack-shared/dist/utils/caches");
40
40
  var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
41
41
  var import_stack_ui = require("@stackframe/stack-ui");
42
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_translations = require("../lib/translations");
43
+ var import__ = require("../index.js");
44
+ var import_predefined_message_card = require("../components/message-cards/predefined-message-card.js");
45
+ var import_translations = require("../lib/translations.js");
46
46
  var import_jsx_runtime = require("react/jsx-runtime");
47
47
  var cachedVerifyInvitation = (0, import_caches.cacheFunction)(async (stackApp, code) => {
48
48
  return await stackApp.verifyTeamInvitationCode(code);
@@ -125,11 +125,11 @@ function TeamInvitation({ fullPage = false, searchParams }) {
125
125
  const verificationResult = import_react.default.use(cachedVerifyInvitation(stackApp, searchParams.code || ""));
126
126
  if (verificationResult.status === "error") {
127
127
  const error = verificationResult.error;
128
- if (error instanceof import_stack_shared.KnownErrors.VerificationCodeNotFound) {
128
+ if (import_stack_shared.KnownErrors.VerificationCodeNotFound.isInstance(error)) {
129
129
  return invalidJsx;
130
- } else if (error instanceof import_stack_shared.KnownErrors.VerificationCodeExpired) {
130
+ } else if (import_stack_shared.KnownErrors.VerificationCodeExpired.isInstance(error)) {
131
131
  return expiredJsx;
132
- } else if (error instanceof import_stack_shared.KnownErrors.VerificationCodeAlreadyUsed) {
132
+ } else if (import_stack_shared.KnownErrors.VerificationCodeAlreadyUsed.isInstance(error)) {
133
133
  return usedJsx;
134
134
  } else {
135
135
  throw error;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-page/team-invitation.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\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\";\nimport { useTranslation } from \"../lib/translations\";\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 { t } = useTranslation();\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={t('Team invitation')}\n fullPage={props.fullPage}\n primaryButtonText=\"Go 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={t('Team invitation')}\n fullPage={props.fullPage}\n primaryButtonText={t('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={t('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 { t } = useTranslation();\n const user = useUser();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t('Invalid Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('Please double check if you have the correct team invitation link.')}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t('Expired Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('Your team invitation link has expired. Please request a new team invitation link ')}</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title={t('Used Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('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={t('Team invitation')}\n fullPage={fullPage}\n primaryButtonText={t('Sign in')}\n primaryAction={() => stackApp.redirectToSignIn()}\n secondaryButtonText={t('Cancel')}\n secondaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>{t('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"]}
1
+ {"version":3,"sources":["../../src/components-page/team-invitation.tsx"],"sourcesContent":["'use client';\n\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\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\";\nimport { useTranslation } from \"../lib/translations\";\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 { t } = useTranslation();\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={t('Team invitation')}\n fullPage={props.fullPage}\n primaryButtonText=\"Go 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={t('Team invitation')}\n fullPage={props.fullPage}\n primaryButtonText={t('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={t('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 { t } = useTranslation();\n const user = useUser();\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title={t('Invalid Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('Please double check if you have the correct team invitation link.')}</Typography>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title={t('Expired Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('Your team invitation link has expired. Please request a new team invitation link ')}</Typography>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title={t('Used Team Invitation Link')} fullPage={fullPage}>\n <Typography>{t('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={t('Team invitation')}\n fullPage={fullPage}\n primaryButtonText={t('Sign in')}\n primaryAction={() => stackApp.redirectToSignIn()}\n secondaryButtonText={t('Cancel')}\n secondaryAction={() => stackApp.redirectToHome()}\n >\n <Typography>{t('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 (KnownErrors.VerificationCodeNotFound.isInstance(error)) {\n return invalidJsx;\n } else if (KnownErrors.VerificationCodeExpired.isInstance(error)) {\n return expiredJsx;\n } else if (KnownErrors.VerificationCodeAlreadyUsed.isInstance(error)) {\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"]}