@stackframe/react 2.8.12 → 2.8.17

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 +46 -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 +3 -3
  9. package/dist/components/message-cards/known-error-message-card.js +2 -2
  10. package/dist/components/message-cards/message-card.js +1 -1
  11. package/dist/components/message-cards/predefined-message-card.js +3 -3
  12. package/dist/components/oauth-button-group.js +2 -2
  13. package/dist/components/oauth-button.js +27 -16
  14. package/dist/components/oauth-button.js.map +1 -1
  15. package/dist/components/passkey-button.js +2 -2
  16. package/dist/components/profile-image-editor.js +87 -34
  17. package/dist/components/profile-image-editor.js.map +1 -1
  18. package/dist/components/selected-team-switcher.js +60 -14
  19. package/dist/components/selected-team-switcher.js.map +1 -1
  20. package/dist/components/team-icon.js +4 -0
  21. package/dist/components/team-icon.js.map +1 -1
  22. package/dist/components/{iframe-preventer.js → use-in-iframe.js} +9 -19
  23. package/dist/components/use-in-iframe.js.map +1 -0
  24. package/dist/components/user-button.js +41 -8
  25. package/dist/components/user-button.js.map +1 -1
  26. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js +57 -12
  27. package/dist/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  28. package/dist/components-page/account-settings/api-keys/api-keys-page.js +100 -12
  29. package/dist/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  30. package/dist/components-page/account-settings/editable-text.js +1 -1
  31. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js +12 -12
  32. package/dist/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  33. package/dist/components-page/account-settings/email-and-auth/emails-section.js +14 -5
  34. package/dist/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  35. package/dist/components-page/account-settings/email-and-auth/mfa-section.js +18 -5
  36. package/dist/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  37. package/dist/components-page/account-settings/email-and-auth/otp-section.js +18 -5
  38. package/dist/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  39. package/dist/components-page/account-settings/email-and-auth/passkey-section.js +19 -6
  40. package/dist/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  41. package/dist/components-page/account-settings/email-and-auth/password-section.js +20 -7
  42. package/dist/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  43. package/dist/components-page/account-settings/notifications/notifications-page.js +59 -0
  44. package/dist/components-page/account-settings/notifications/notifications-page.js.map +1 -0
  45. package/dist/components-page/account-settings/profile-page/profile-page.js +18 -8
  46. package/dist/components-page/account-settings/profile-page/profile-page.js.map +1 -1
  47. package/dist/components-page/account-settings/settings/delete-account-section.js +19 -10
  48. package/dist/components-page/account-settings/settings/delete-account-section.js.map +1 -1
  49. package/dist/components-page/account-settings/settings/settings-page.js +6 -6
  50. package/dist/components-page/account-settings/settings/settings-page.js.map +1 -1
  51. package/dist/components-page/account-settings/settings/sign-out-section.js +15 -6
  52. package/dist/components-page/account-settings/settings/sign-out-section.js.map +1 -1
  53. package/dist/components-page/account-settings/teams/leave-team-section.js +3 -3
  54. package/dist/components-page/account-settings/teams/team-api-keys-section.js +5 -5
  55. package/dist/components-page/account-settings/teams/team-creation-page.js +19 -10
  56. package/dist/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  57. package/dist/components-page/account-settings/teams/team-display-name-section.js +4 -4
  58. package/dist/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  59. package/dist/components-page/account-settings/teams/team-member-list-section.js +3 -3
  60. package/dist/components-page/account-settings/teams/team-page.js +8 -8
  61. package/dist/components-page/account-settings/teams/team-profile-image-section.js +4 -4
  62. package/dist/components-page/account-settings/teams/team-profile-user-section.js +4 -4
  63. package/dist/components-page/account-settings.js +43 -21
  64. package/dist/components-page/account-settings.js.map +1 -1
  65. package/dist/components-page/auth-page.js +11 -12
  66. package/dist/components-page/auth-page.js.map +1 -1
  67. package/dist/components-page/cli-auth-confirm.js +3 -3
  68. package/dist/components-page/email-verification.js +3 -3
  69. package/dist/components-page/error-page.js +6 -6
  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 +4 -4
  73. package/dist/components-page/mfa.js +190 -0
  74. package/dist/components-page/mfa.js.map +1 -0
  75. package/dist/components-page/oauth-callback.js +4 -4
  76. package/dist/components-page/password-reset.js +6 -6
  77. package/dist/components-page/sign-in.js +3 -2
  78. package/dist/components-page/sign-in.js.map +1 -1
  79. package/dist/components-page/sign-out.js +2 -2
  80. package/dist/components-page/sign-up.js +1 -1
  81. package/dist/components-page/stack-handler.js +25 -14
  82. package/dist/components-page/stack-handler.js.map +1 -1
  83. package/dist/components-page/team-creation.js +4 -4
  84. package/dist/components-page/team-invitation.js +3 -3
  85. package/dist/esm/components/api-key-dialogs.js +5 -4
  86. package/dist/esm/components/api-key-dialogs.js.map +1 -1
  87. package/dist/esm/components/credential-sign-in.js +4 -4
  88. package/dist/esm/components/credential-sign-up.js +3 -3
  89. package/dist/esm/components/elements/maybe-full-page.js +1 -1
  90. package/dist/esm/components/elements/sidebar-layout.js +1 -1
  91. package/dist/esm/components/magic-link-sign-in.js +3 -3
  92. package/dist/esm/components/message-cards/known-error-message-card.js +2 -2
  93. package/dist/esm/components/message-cards/message-card.js +1 -1
  94. package/dist/esm/components/message-cards/predefined-message-card.js +3 -3
  95. package/dist/esm/components/oauth-button-group.js +2 -2
  96. package/dist/esm/components/oauth-button.js +28 -17
  97. package/dist/esm/components/oauth-button.js.map +1 -1
  98. package/dist/esm/components/passkey-button.js +2 -2
  99. package/dist/esm/components/profile-image-editor.js +86 -34
  100. package/dist/esm/components/profile-image-editor.js.map +1 -1
  101. package/dist/esm/components/selected-team-switcher.js +60 -14
  102. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  103. package/dist/esm/components/team-icon.js +4 -0
  104. package/dist/esm/components/team-icon.js.map +1 -1
  105. package/dist/esm/components/use-in-iframe.js +18 -0
  106. package/dist/esm/components/use-in-iframe.js.map +1 -0
  107. package/dist/esm/components/user-button.js +41 -8
  108. package/dist/esm/components/user-button.js.map +1 -1
  109. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js +57 -12
  110. package/dist/esm/components-page/account-settings/active-sessions/active-sessions-page.js.map +1 -1
  111. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js +100 -12
  112. package/dist/esm/components-page/account-settings/api-keys/api-keys-page.js.map +1 -1
  113. package/dist/esm/components-page/account-settings/editable-text.js +1 -1
  114. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js +12 -12
  115. package/dist/esm/components-page/account-settings/email-and-auth/email-and-auth-page.js.map +1 -1
  116. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js +14 -5
  117. package/dist/esm/components-page/account-settings/email-and-auth/emails-section.js.map +1 -1
  118. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js +18 -5
  119. package/dist/esm/components-page/account-settings/email-and-auth/mfa-section.js.map +1 -1
  120. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js +18 -5
  121. package/dist/esm/components-page/account-settings/email-and-auth/otp-section.js.map +1 -1
  122. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js +19 -6
  123. package/dist/esm/components-page/account-settings/email-and-auth/passkey-section.js.map +1 -1
  124. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js +20 -7
  125. package/dist/esm/components-page/account-settings/email-and-auth/password-section.js.map +1 -1
  126. package/dist/esm/components-page/account-settings/notifications/notifications-page.js +34 -0
  127. package/dist/esm/components-page/account-settings/notifications/notifications-page.js.map +1 -0
  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 +5 -5
  138. package/dist/esm/components-page/account-settings/teams/team-creation-page.js +19 -10
  139. package/dist/esm/components-page/account-settings/teams/team-creation-page.js.map +1 -1
  140. package/dist/esm/components-page/account-settings/teams/team-display-name-section.js +4 -4
  141. package/dist/esm/components-page/account-settings/teams/team-member-invitation-section.js +4 -4
  142. package/dist/esm/components-page/account-settings/teams/team-member-list-section.js +3 -3
  143. package/dist/esm/components-page/account-settings/teams/team-page.js +8 -8
  144. package/dist/esm/components-page/account-settings/teams/team-profile-image-section.js +4 -4
  145. package/dist/esm/components-page/account-settings/teams/team-profile-user-section.js +4 -4
  146. package/dist/esm/components-page/account-settings.js +43 -21
  147. package/dist/esm/components-page/account-settings.js.map +1 -1
  148. package/dist/esm/components-page/auth-page.js +11 -12
  149. package/dist/esm/components-page/auth-page.js.map +1 -1
  150. package/dist/esm/components-page/cli-auth-confirm.js +3 -3
  151. package/dist/esm/components-page/email-verification.js +3 -3
  152. package/dist/esm/components-page/error-page.js +6 -6
  153. package/dist/esm/components-page/error-page.js.map +1 -1
  154. package/dist/esm/components-page/forgot-password.js +6 -6
  155. package/dist/esm/components-page/magic-link-callback.js +4 -4
  156. package/dist/esm/components-page/mfa.js +174 -0
  157. package/dist/esm/components-page/mfa.js.map +1 -0
  158. package/dist/esm/components-page/oauth-callback.js +4 -4
  159. package/dist/esm/components-page/password-reset.js +6 -6
  160. package/dist/esm/components-page/sign-in.js +3 -2
  161. package/dist/esm/components-page/sign-in.js.map +1 -1
  162. package/dist/esm/components-page/sign-out.js +2 -2
  163. package/dist/esm/components-page/sign-up.js +1 -1
  164. package/dist/esm/components-page/stack-handler.js +25 -14
  165. package/dist/esm/components-page/stack-handler.js.map +1 -1
  166. package/dist/esm/components-page/team-creation.js +4 -4
  167. package/dist/esm/components-page/team-invitation.js +3 -3
  168. package/dist/esm/generated/global-css.js +1 -1
  169. package/dist/esm/generated/global-css.js.map +1 -1
  170. package/dist/esm/generated/quetzal-translations.js +3616 -2364
  171. package/dist/esm/generated/quetzal-translations.js.map +1 -1
  172. package/dist/esm/index.js +22 -22
  173. package/dist/esm/lib/auth.js +2 -2
  174. package/dist/esm/lib/cookie.js +1 -129
  175. package/dist/esm/lib/cookie.js.map +1 -1
  176. package/dist/esm/lib/hooks.js +1 -1
  177. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js +11 -8
  178. package/dist/esm/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  179. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +79 -21
  180. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  181. package/dist/esm/lib/stack-app/apps/implementations/common.js +2 -1
  182. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  183. package/dist/esm/lib/stack-app/apps/implementations/index.js +3 -3
  184. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +34 -8
  185. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  186. package/dist/esm/lib/stack-app/apps/index.js +3 -3
  187. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js +1 -1
  188. package/dist/esm/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  189. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js +1 -1
  190. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  191. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js +1 -1
  192. package/dist/esm/lib/stack-app/common.js.map +1 -1
  193. package/dist/esm/lib/stack-app/contact-channels/index.js.map +1 -1
  194. package/dist/esm/lib/stack-app/index.js +2 -2
  195. package/dist/esm/lib/stack-app/internal-api-keys/index.js.map +1 -1
  196. package/dist/esm/lib/stack-app/notification-categories/index.js +1 -0
  197. package/dist/esm/lib/stack-app/notification-categories/index.js.map +1 -0
  198. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  199. package/dist/esm/lib/translations.js +1 -1
  200. package/dist/esm/providers/stack-provider-client.js +2 -2
  201. package/dist/esm/providers/stack-provider.js +2 -2
  202. package/dist/esm/providers/theme-provider.js +3 -3
  203. package/dist/esm/providers/translation-provider.js +2 -2
  204. package/dist/esm/utils/browser-script.js +1 -1
  205. package/dist/generated/global-css.js +1 -1
  206. package/dist/generated/global-css.js.map +1 -1
  207. package/dist/generated/quetzal-translations.js +3616 -2364
  208. package/dist/generated/quetzal-translations.js.map +1 -1
  209. package/dist/index.d.mts +92 -7
  210. package/dist/index.d.ts +92 -7
  211. package/dist/index.js +23 -23
  212. package/dist/index.js.map +1 -1
  213. package/dist/lib/auth.js +2 -2
  214. package/dist/lib/cookie.js +4 -132
  215. package/dist/lib/cookie.js.map +1 -1
  216. package/dist/lib/hooks.js +1 -1
  217. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js +11 -8
  218. package/dist/lib/stack-app/apps/implementations/admin-app-impl.js.map +1 -1
  219. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +79 -21
  220. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  221. package/dist/lib/stack-app/apps/implementations/common.js +2 -1
  222. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  223. package/dist/lib/stack-app/apps/implementations/index.js +3 -3
  224. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +34 -8
  225. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  226. package/dist/lib/stack-app/apps/index.js +3 -3
  227. package/dist/lib/stack-app/apps/interfaces/admin-app.js +1 -1
  228. package/dist/lib/stack-app/apps/interfaces/admin-app.js.map +1 -1
  229. package/dist/lib/stack-app/apps/interfaces/client-app.js +1 -1
  230. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  231. package/dist/lib/stack-app/apps/interfaces/server-app.js +1 -1
  232. package/dist/lib/stack-app/common.js.map +1 -1
  233. package/dist/lib/stack-app/contact-channels/index.js.map +1 -1
  234. package/dist/lib/stack-app/index.js +2 -2
  235. package/dist/lib/stack-app/internal-api-keys/index.js.map +1 -1
  236. package/dist/lib/stack-app/notification-categories/index.js +19 -0
  237. package/dist/lib/stack-app/notification-categories/index.js.map +1 -0
  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 +2 -2
  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 +4 -4
  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
@@ -14,18 +14,18 @@ import { deindent, mergeScopeStrings } from "@stackframe/stack-shared/dist/utils
14
14
  import { getRelativePart, isRelative } from "@stackframe/stack-shared/dist/utils/urls";
15
15
  import { generateUuid } from "@stackframe/stack-shared/dist/utils/uuids";
16
16
  import * as cookie from "cookie";
17
- import { constructRedirectUrl } from "../../../../utils/url";
18
- import { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from "../../../auth";
19
- import { createBrowserCookieHelper, createCookieHelper, createPlaceholderCookieHelper, deleteCookieClient, getCookieClient, setOrDeleteCookie, setOrDeleteCookieClient } from "../../../cookie";
20
- import { apiKeyCreationOptionsToCrud } from "../../api-keys";
21
- import { stackAppInternalsSymbol } from "../../common";
22
- import { contactChannelCreateOptionsToCrud, contactChannelUpdateOptionsToCrud } from "../../contact-channels";
23
- import { adminProjectCreateOptionsToCrud } from "../../projects";
24
- import { teamCreateOptionsToCrud, teamUpdateOptionsToCrud } from "../../teams";
25
- import { userUpdateOptionsToCrud } from "../../users";
26
- import { clientVersion, createCache, createCacheBySession, createEmptyTokenStore, getBaseUrl, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getUrls } from "./common";
17
+ import { constructRedirectUrl } from "../../../../utils/url.js";
18
+ import { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from "../../../auth.js";
19
+ import { createBrowserCookieHelper, createCookieHelper, createPlaceholderCookieHelper, deleteCookieClient, getCookieClient, setOrDeleteCookie, setOrDeleteCookieClient } from "../../../cookie.js";
20
+ import { apiKeyCreationOptionsToCrud } from "../../api-keys/index.js";
21
+ import { stackAppInternalsSymbol } from "../../common.js";
22
+ import { contactChannelCreateOptionsToCrud, contactChannelUpdateOptionsToCrud } from "../../contact-channels/index.js";
23
+ import { adminProjectCreateOptionsToCrud } from "../../projects/index.js";
24
+ import { teamCreateOptionsToCrud, teamUpdateOptionsToCrud } from "../../teams/index.js";
25
+ import { userUpdateOptionsToCrud } from "../../users/index.js";
26
+ import { clientVersion, createCache, createCacheBySession, createEmptyTokenStore, getBaseUrl, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getUrls } from "./common.js";
27
27
  import React, { useCallback, useMemo } from "react";
28
- import { useAsyncCache } from "./common";
28
+ import { useAsyncCache } from "./common.js";
29
29
  var isReactServer = false;
30
30
  var process = globalThis.process ?? { env: {} };
31
31
  var allClientApps = /* @__PURE__ */ new Map();
@@ -117,6 +117,12 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
117
117
  return results;
118
118
  }
119
119
  );
120
+ this._notificationCategoriesCache = createCacheBySession(
121
+ async (session) => {
122
+ const results = await this._interface.listNotificationCategories(session);
123
+ return results;
124
+ }
125
+ );
120
126
  this._anonymousSignUpInProgress = null;
121
127
  this._memoryTokenStore = createEmptyTokenStore();
122
128
  this._nextServerCookiesTokenStores = /* @__PURE__ */ new WeakMap();
@@ -611,6 +617,19 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
611
617
  }
612
618
  };
613
619
  }
620
+ _clientNotificationCategoryFromCrud(crud, session) {
621
+ const app = this;
622
+ return {
623
+ id: crud.notification_category_id,
624
+ name: crud.notification_category_name,
625
+ enabled: crud.enabled,
626
+ canDisable: crud.can_disable,
627
+ async setEnabled(enabled) {
628
+ await app._interface.setNotificationsEnabled(crud.notification_category_id, enabled, session);
629
+ await app._notificationCategoriesCache.refresh([session]);
630
+ }
631
+ };
632
+ }
614
633
  _createAuth(session) {
615
634
  const app = this;
616
635
  return {
@@ -870,6 +889,14 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
870
889
  await app._clientContactChannelsCache.refresh([session]);
871
890
  return app._clientContactChannelFromCrud(crud2, session);
872
891
  },
892
+ useNotificationCategories() {
893
+ const results = useAsyncCache(app._notificationCategoriesCache, [session], "user.useNotificationCategories()");
894
+ return results.map((crud2) => app._clientNotificationCategoryFromCrud(crud2, session));
895
+ },
896
+ async listNotificationCategories() {
897
+ const results = Result.orThrow(await app._notificationCategoriesCache.getOrWait([session], "write-only"));
898
+ return results.map((crud2) => app._clientNotificationCategoryFromCrud(crud2, session));
899
+ },
873
900
  useApiKeys() {
874
901
  const result = useAsyncCache(app._userApiKeysCache, [session], "user.useApiKeys()");
875
902
  return result.map((crud2) => app._clientApiKeyFromCrud(session, crud2));
@@ -1055,6 +1082,9 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1055
1082
  async redirectToTeamInvitation(options) {
1056
1083
  return await this._redirectToHandler("teamInvitation", options);
1057
1084
  }
1085
+ async redirectToMfa(options) {
1086
+ return await this._redirectToHandler("mfa", options);
1087
+ }
1058
1088
  async sendForgotPasswordEmail(email, options) {
1059
1089
  return await this._interface.sendForgotPasswordEmail(email, options?.callbackUrl ?? constructRedirectUrl(this.urls.passwordReset, "callbackUrl"));
1060
1090
  }
@@ -1191,19 +1221,14 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1191
1221
  );
1192
1222
  }
1193
1223
  /**
1194
- * @deprecated
1195
- * TODO remove
1224
+ * Handles MFA verification by redirecting to the OTP page
1196
1225
  */
1197
1226
  async _experimentalMfa(error, session) {
1198
- const otp = prompt("Please enter the six-digit TOTP code from your authenticator app.");
1199
- if (!otp) {
1200
- throw new KnownErrors.InvalidTotpCode();
1227
+ if (typeof window !== "undefined") {
1228
+ window.sessionStorage.setItem("stack_mfa_attempt_code", error.details?.attempt_code ?? throwErr("attempt code missing"));
1201
1229
  }
1202
- return await this._interface.totpMfa(
1203
- error.details?.attempt_code ?? throwErr("attempt code missing"),
1204
- otp,
1205
- session
1206
- );
1230
+ await this.redirectToMfa();
1231
+ throw new StackAssertionError("we should have redirected in redirectToMfa()");
1207
1232
  }
1208
1233
  /**
1209
1234
  * @deprecated
@@ -1387,6 +1412,39 @@ ${url}`);
1387
1412
  }
1388
1413
  return Result.error(new KnownErrors.CliAuthError("Timed out waiting for CLI authentication."));
1389
1414
  }
1415
+ /*
1416
+ * Completes the MFA sign-in process by verifying the provided OTP code
1417
+ * @param totp The TOTP (Time-based One-Time Password) provided by the user
1418
+ * @param code The Attempt code provided by the user
1419
+ * @param options Additional options for the sign-in process
1420
+ * @returns A Result indicating success or failure
1421
+ */
1422
+ async signInWithMfa(totp, code, options) {
1423
+ this._ensurePersistentTokenStore();
1424
+ let result;
1425
+ try {
1426
+ result = await this._catchMfaRequiredError(async () => {
1427
+ return await this._interface.signInWithMfa(totp, code);
1428
+ });
1429
+ } catch (e) {
1430
+ if (e instanceof KnownErrors.InvalidTotpCode) {
1431
+ return Result.error(e);
1432
+ }
1433
+ throw e;
1434
+ }
1435
+ if (result.status === "ok") {
1436
+ await this._signInToAccountWithTokens(result.data);
1437
+ if (!options?.noRedirect) {
1438
+ if (result.data.newUser) {
1439
+ await this.redirectToAfterSignUp({ replace: true });
1440
+ } else {
1441
+ await this.redirectToAfterSignIn({ replace: true });
1442
+ }
1443
+ }
1444
+ return Result.ok(void 0);
1445
+ }
1446
+ return Result.error(result.error);
1447
+ }
1390
1448
  async signInWithPasskey() {
1391
1449
  this._ensurePersistentTokenStore();
1392
1450
  const session = await this._getSession();