@stytch/react 20.0.0-next.0 → 20.0.0-next.1

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 (270) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/{StytchSSRProxy-CUOvjF03.js → StytchSSRProxy-Bz6LNYdq.js} +186 -1
  3. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -0
  4. package/dist/cjs/adminPortal/index.cjs +102 -26
  5. package/dist/cjs/adminPortal/index.cjs.map +1 -1
  6. package/dist/cjs/b2b/index.cjs +176 -138
  7. package/dist/cjs/b2b/index.cjs.map +1 -1
  8. package/dist/cjs/b2b/index.headless.cjs +24 -24
  9. package/dist/cjs/b2b/index.headless.cjs.map +1 -1
  10. package/dist/cjs/{idpHelpers-eUP8j58U.js → idpHelpers-Bj_7pbfW.js} +7 -191
  11. package/dist/cjs/idpHelpers-Bj_7pbfW.js.map +1 -0
  12. package/dist/cjs/{index-DfiRrtK8.js → index-Ni_dyEsz.js} +3 -3
  13. package/dist/cjs/{index-DfiRrtK8.js.map → index-Ni_dyEsz.js.map} +1 -1
  14. package/dist/cjs/index.cjs +207 -196
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.headless.cjs +32 -32
  17. package/dist/cjs/index.headless.cjs.map +1 -1
  18. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js → passwordManagerDisableAutofillProps-DV31RTL_.js} +2 -2
  19. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js.map → passwordManagerDisableAutofillProps-DV31RTL_.js.map} +1 -1
  20. package/dist/cjs/{shadcn-Bbv2Hk3P.js → shadcn-B8TEzQMT.js} +99 -81
  21. package/dist/cjs/shadcn-B8TEzQMT.js.map +1 -0
  22. package/dist/cjs-dev/{StytchSSRProxy-D0B5PuT0.js → StytchSSRProxy-CxXsyme4.js} +186 -1
  23. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +1 -0
  24. package/dist/cjs-dev/adminPortal/index.cjs +102 -26
  25. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  26. package/dist/cjs-dev/b2b/index.cjs +176 -138
  27. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  28. package/dist/cjs-dev/b2b/index.headless.cjs +24 -24
  29. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  30. package/dist/cjs-dev/{idpHelpers-DOOVv6dT.js → idpHelpers-Cf8Qq1B4.js} +7 -191
  31. package/dist/cjs-dev/idpHelpers-Cf8Qq1B4.js.map +1 -0
  32. package/dist/cjs-dev/{index-paeFcHjf.js → index-DdK3Jt4u.js} +3 -3
  33. package/dist/cjs-dev/{index-paeFcHjf.js.map → index-DdK3Jt4u.js.map} +1 -1
  34. package/dist/cjs-dev/index.cjs +207 -196
  35. package/dist/cjs-dev/index.cjs.map +1 -1
  36. package/dist/cjs-dev/index.headless.cjs +32 -32
  37. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  38. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js → passwordManagerDisableAutofillProps-D70WyvIu.js} +2 -2
  39. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js.map → passwordManagerDisableAutofillProps-D70WyvIu.js.map} +1 -1
  40. package/dist/cjs-dev/{shadcn-CdbmlhdF.js → shadcn-C4w3DtKK.js} +99 -81
  41. package/dist/cjs-dev/shadcn-C4w3DtKK.js.map +1 -0
  42. package/dist/esm/_virtual/index.mjs +4 -4
  43. package/dist/esm/_virtual/index3.mjs +3 -5
  44. package/dist/esm/_virtual/index3.mjs.map +1 -1
  45. package/dist/esm/_virtual/index4.mjs +5 -3
  46. package/dist/esm/_virtual/index4.mjs.map +1 -1
  47. package/dist/esm/_virtual/index6.mjs +2 -2
  48. package/dist/esm/_virtual/index7.mjs +2 -2
  49. package/dist/esm/adminPortal/index.mjs +4 -1
  50. package/dist/esm/adminPortal/index.mjs.map +1 -1
  51. package/dist/esm/b2b/index.mjs.map +1 -1
  52. package/dist/esm/node_modules/lodash.merge/index.mjs +1 -1
  53. package/dist/esm/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  54. package/dist/esm/packages/core/src/rpc/FrameClient.mjs +1 -0
  55. package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  56. package/dist/esm/packages/web/messages/b2b/en.json.mjs +10 -3
  57. package/dist/esm/packages/web/messages/b2b/en.json.mjs.map +1 -1
  58. package/dist/esm/packages/web/messages/en.json.mjs +10 -3
  59. package/dist/esm/packages/web/messages/en.json.mjs.map +1 -1
  60. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  61. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  62. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  63. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  64. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  65. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  66. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  67. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  68. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  69. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  70. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  71. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  72. package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  73. package/dist/esm/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  74. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  75. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  76. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  77. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  78. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  79. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  80. package/dist/esm/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  81. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  82. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  83. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  84. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  85. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  86. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  87. package/dist/esm/packages/web/src/ui/b2b/utils.mjs +8 -1
  88. package/dist/esm/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  89. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  90. package/dist/esm/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  91. package/dist/esm/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  92. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  93. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  94. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  95. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  96. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
  97. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  98. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
  99. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  100. package/dist/esm/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  101. package/dist/esm/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  102. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  103. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  104. package/dist/esm/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  105. package/dist/esm/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  106. package/dist/esm/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  107. package/dist/esm/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  108. package/dist/esm/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  109. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  110. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  111. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  112. package/dist/esm/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  113. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  114. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  115. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  116. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  117. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  118. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  119. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  120. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  121. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  122. package/dist/esm/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  123. package/dist/esm/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  124. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  125. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  126. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  127. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  128. package/dist/esm/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  129. package/dist/esm/packages/web/src/ui/components/organisms/OneTapError.mjs +1 -1
  130. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  131. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  132. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  133. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  134. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  135. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  136. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  137. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  138. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  139. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  140. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  141. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  142. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  143. package/dist/esm-dev/_virtual/index.mjs +4 -4
  144. package/dist/esm-dev/_virtual/index3.mjs +3 -5
  145. package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
  146. package/dist/esm-dev/_virtual/index4.mjs +5 -3
  147. package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
  148. package/dist/esm-dev/_virtual/index6.mjs +2 -2
  149. package/dist/esm-dev/_virtual/index7.mjs +2 -2
  150. package/dist/esm-dev/adminPortal/index.mjs +4 -1
  151. package/dist/esm-dev/adminPortal/index.mjs.map +1 -1
  152. package/dist/esm-dev/b2b/index.mjs.map +1 -1
  153. package/dist/esm-dev/node_modules/lodash.merge/index.mjs +1 -1
  154. package/dist/esm-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  155. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs +1 -0
  156. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  157. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs +10 -3
  158. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs.map +1 -1
  159. package/dist/esm-dev/packages/web/messages/en.json.mjs +10 -3
  160. package/dist/esm-dev/packages/web/messages/en.json.mjs.map +1 -1
  161. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  162. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  163. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  164. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  165. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  166. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  167. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  168. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  169. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  170. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  171. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  172. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  173. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  174. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  175. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  176. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  177. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  178. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  179. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  180. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  181. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  182. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  183. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  184. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  185. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  186. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  187. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  188. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs +8 -1
  189. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  190. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  191. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  192. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  193. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  194. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  195. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  196. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  197. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
  198. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  199. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
  200. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  201. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  202. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  203. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  204. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  205. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  206. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  207. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  208. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  209. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  210. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  211. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  212. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  213. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  214. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  215. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  216. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  217. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  218. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  219. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  220. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  221. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  222. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  223. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  224. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  225. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  226. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  227. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  228. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  229. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  230. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  231. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  232. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  233. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  234. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  235. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  236. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  237. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  238. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  239. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  240. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  241. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  242. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
  243. package/dist/types/{StytchB2BClient-Dq-ITB7Q.d.ts → StytchB2BClient-C_7NUKZh.d.ts} +1 -1
  244. package/dist/types/{StytchClient-BV0sT3Ox.d.ts → StytchClient-Ccvk8Nj1.d.ts} +1 -2
  245. package/dist/types/adminPortal/index.d.ts +5 -4
  246. package/dist/types/b2b/index.d.ts +11 -11
  247. package/dist/types/b2b/index.headless.d.ts +4 -4
  248. package/dist/types/{createAuthUrlHandler-Ck5TyB9J.d.ts → createAuthUrlHandler-BJRA2PHG.d.ts} +939 -39
  249. package/dist/types/idpHelpers-aCVwNrDk.d.ts +36 -0
  250. package/dist/types/index.d.ts +8 -8
  251. package/dist/types/index.headless.d.ts +4 -4
  252. package/dist/types/{shadcn-CFz8Asq0.d.ts → shadcn-0e4fkV5Z.d.ts} +6 -6
  253. package/messages/b2b/en.po +6 -3
  254. package/messages/en.po +6 -3
  255. package/package.json +1 -1
  256. package/dist/cjs/StytchSSRProxy-CUOvjF03.js.map +0 -1
  257. package/dist/cjs/idpHelpers-eUP8j58U.js.map +0 -1
  258. package/dist/cjs/shadcn-Bbv2Hk3P.js.map +0 -1
  259. package/dist/cjs-dev/StytchSSRProxy-D0B5PuT0.js.map +0 -1
  260. package/dist/cjs-dev/idpHelpers-DOOVv6dT.js.map +0 -1
  261. package/dist/cjs-dev/shadcn-CdbmlhdF.js.map +0 -1
  262. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  263. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  264. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  265. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  266. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  267. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  268. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  269. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  270. package/dist/types/idpHelpers-hBhPCtAC.d.ts +0 -936
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idpHelpers-Bj_7pbfW.js","sources":["../../../core/src/constants.ts","../../../core/src/NetworkClient.ts","../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/uuid/dist/esm-browser/regex.js","../../../../node_modules/uuid/dist/esm-browser/validate.js","../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/uuid/dist/esm-browser/v4.js","../../../core/src/utils/loadESModule.ts","../../../core/src/utils/getHttpsUrl.ts","../../../core/src/utils/logger.ts","../../../core/src/utils/api.ts","../../../core/src/utils/checks.ts","../../../core/src/utils/dfp.ts","../../../core/src/utils/index.ts","../../../core/src/DFPProtectedAuthProvider.ts","../../../core/src/ErrorMarshaller.ts","../../../core/src/EventLogger.ts","../../../core/src/HeadlessClients/HeadlessMagicLinkClient.ts","../../../core/src/HeadlessClients/HeadlessCryptoWalletClient.ts","../../../core/src/HeadlessClients/HeadlessPasswordClient.ts","../../../core/src/rbac.ts","../../../core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.ts","../../../core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.ts","../../../core/src/rpc/FrameClient.ts","../../../core/src/SearchManager.ts","../../../core/src/shouldTryRefresh.ts","../../../core/src/SessionManager.ts","../../../core/src/StateChangeClient.ts","../../../core/src/Vertical.ts","../../../web/src/BootstrapDataManager.ts","../../../web/src/CaptchaProvider.ts","../../../web/src/ClientsideServicesProvider.ts","../../../web/src/NetworkClient.ts","../../../web/src/oneTap/navigatorSupportsFedCM.ts","../../../web/src/oneTap/positionModes.ts","../../../web/src/oneTap/GoogleOneTapClient.ts","../../../web/src/oneTap/OneTapProvider.ts","../../../web/src/PKCEManager.ts","../../../../node_modules/js-cookie/dist/js.cookie.mjs","../../../web/src/SubscriptionService.ts","../../../web/src/utils/config.ts","../../../web/src/utils/createAuthUrlHandler.ts","../../../web/src/utils/idpHelpers.ts"],"sourcesContent":["export const TEST_API_URL = 'https://test.stytch.com';\nexport const LIVE_API_URL = 'https://api.stytch.com';\nexport const CLIENTSIDE_SERVICES_IFRAME_URL = 'https://js.stytch.com/clientside-services/index.html';\n\nexport const STYTCH_DFP_BACKEND_URL = `https://telemetry.stytch.com`;\nexport const STYTCH_DFP_CDN_URL = `https://elements.stytch.com`;\n\nexport const STYTCH_SESSION_COOKIE = 'stytch_session';\nexport const STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';\nexport const POWERED_BY_STYTCH_IMG_URL = 'https://public-assets.stytch.com/et_powered_by_stytch_logo.png';\n\nexport const GOOGLE_ONE_TAP_HOST = 'https://accounts.google.com/gsi';\n\nexport const GOOGLE_ONE_TAP_SCRIPT_URL = `${GOOGLE_ONE_TAP_HOST}/client`;\n\nexport const DEFAULT_SESSION_DURATION_MINUTES = 30;\nexport const DEFAULT_OTP_EXPIRATION_MINUTES = 5;\n\nexport const MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING =\n \"It looks like you're creating multiple copies of the Stytch client.\" +\n ' This behavior is unsupported, and unintended side effects may occur. ' +\n \"Make sure you are creating the Stytch client at the global level, and not inside a component's render function.\";\n","import { AnalyticsEvent } from './Events';\nimport { ResponseCommon, StytchAPIUnreachableError, StytchAPIError, StytchAPISchemaError } from './public';\n\ntype SDKRequestMethodAndBody =\n | {\n method: 'GET' | 'DELETE';\n body?: null;\n }\n | {\n method: 'POST' | 'PUT';\n body?: Record<string, unknown>;\n };\n\nexport type SDKRequestInfo = SDKRequestMethodAndBody & {\n url: string;\n additionalMetadata?: Record<string, string>;\n};\n\nexport interface SDKTelemetry {\n event_id: string;\n app_session_id: string;\n persistent_id: string;\n client_sent_at: string;\n timezone: string;\n\n // Logged in user data\n // Why don't we generate this from the session_token in the auth header?\n // - We don't want to tie analytics ingest to session validation. There's no need to put\n // that kind of pressure on API, and ingest could be moved to somewhere that doesn't\n // have the ability to validate tokens\n // - For bulk event batches, we want to keep track of whether or not a user was logged\n // in at each event. If we have 10 events, the user logs in at event 5, then they'll have\n // a token when they log the batch, but we want to know that they were not logged in for the\n // first 4 events\n\n // Versioning\n app: {\n identifier: string;\n version?: string;\n };\n os?: {\n identifier?: string;\n version?: string;\n };\n device?: {\n model?: string;\n screen_size?: string;\n };\n sdk: {\n identifier: string;\n version: string;\n };\n}\n\nexport type AdditionalTelemetryData =\n | { stytch_user_id?: string; stytch_session_id?: string }\n | { stytch_member_id?: string; stytch_member_session_id?: string };\n\nexport interface INetworkClient {\n createTelemetryBlob(additionalMetadata?: SDKRequestInfo['additionalMetadata']): SDKTelemetry;\n\n fetchSDK: <T extends ResponseCommon>(info: SDKRequestInfo) => Promise<T>;\n\n retriableFetchSDK: <T extends ResponseCommon>(info: RetriableSDKRequestInfo) => Promise<T>;\n\n logEvent<E extends AnalyticsEvent>({\n name,\n details,\n error,\n }: {\n name: E['name'];\n details: E['details'];\n error?: { error_code?: string; error_description?: string; http_status_code?: string };\n }): void;\n\n // @deprecated Use the new sessions.updateSession() method instead\n updateSessionToken: (sessionToken: string | null) => void;\n}\n\nexport type RetriableSDKRequestInfo = SDKRequestInfo & {\n retryCallback: (e: RetriableError, info: SDKBaseRequestInfo) => Promise<SDKBaseRequestInfo>;\n};\n\nexport type RetriableSDKBaseRequestInfo = SDKBaseRequestInfo & {\n retryCallback: (e: RetriableError, info: SDKBaseRequestInfo) => Promise<SDKBaseRequestInfo>;\n};\n\nexport enum RetriableErrorType {\n RequiredCaptcha = 'CAPTCHA required',\n}\n\nexport class RetriableError extends Error {\n type: RetriableErrorType;\n\n constructor(type: RetriableErrorType) {\n super(type);\n this.type = type;\n }\n}\n\nexport async function retriableFetchSDK<T extends ResponseCommon>({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n retryCallback,\n}: RetriableSDKBaseRequestInfo): Promise<T> {\n let req: SDKBaseRequestInfo = {\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n };\n\n try {\n return await baseFetchSDK<T>(req);\n } catch (err) {\n if (err instanceof RetriableError) {\n req = await retryCallback(err, req);\n return await baseFetchSDK<T>(req);\n }\n throw err;\n }\n}\n\nexport type SDKBaseRequestInfo = {\n basicAuthHeader: string;\n xSDKClientHeader: string;\n xSDKParentHostHeader?: string;\n body: SDKRequestInfo['body'];\n method: SDKRequestInfo['method'];\n finalURL: string;\n};\n\nexport async function baseFetchSDK<T extends ResponseCommon>({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n}: SDKBaseRequestInfo): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: basicAuthHeader,\n 'Content-Type': 'application/json',\n 'X-SDK-Client': xSDKClientHeader,\n };\n\n if (xSDKParentHostHeader) {\n headers['X-SDK-Parent-Host'] = xSDKParentHostHeader;\n }\n\n const fetchOpts: RequestInit = {\n method,\n headers,\n body: body && JSON.stringify(body),\n credentials: 'include',\n };\n\n let resp;\n try {\n resp = await fetch(finalURL, fetchOpts);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n } catch (e: any) {\n if (e.message === 'Failed to fetch') {\n throw new StytchAPIUnreachableError('Unable to contact our servers.');\n }\n throw e;\n }\n\n // We only return 200 from WB endpoints, but just in case let's accept all 2xx errors\n if (resp.status <= 299) {\n try {\n const respData = await resp.json();\n return respData.data;\n } catch {\n throw new StytchAPIUnreachableError('Invalid JSON response from our servers.');\n }\n }\n\n // 99% of errors will be well-formed JSON errors with an appropriate content-type set\n if (resp.status !== 200 && resp.headers.get('content-type')?.includes('application/json')) {\n let respError;\n try {\n respError = await resp.json();\n } catch {\n // Error was not JSON- but the content type said it was! This means the server lied to us, which it should never do...\n throw new StytchAPIUnreachableError('Invalid or no response from server');\n }\n // If this looks like a JSONSchema validation error, it probably means the caller isn't using\n // typescript and gave us a bad type.\n if ('body' in respError || 'params' in respError || 'query' in respError) {\n throw new StytchAPISchemaError(respError);\n }\n throw new StytchAPIError(respError);\n }\n\n // Finally handle the other 1% of errors (Captcha errors, network errors, 503s, etc.)\n let respData;\n try {\n respData = await resp.text();\n } catch {\n throw new StytchAPIUnreachableError('Invalid response from our servers.');\n }\n if (respData.includes('Captcha required')) {\n throw new RetriableError(RetriableErrorType.RequiredCaptcha);\n }\n throw new StytchAPIUnreachableError('Invalid response from our servers.');\n}\n\nexport async function baseSubmitFormSDK({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n}: SDKBaseRequestInfo): Promise<void> {\n const bodyParams = (body || {}) as Record<string, string>;\n const finalBody: Record<string, string> = {\n ...bodyParams,\n __Authorization: basicAuthHeader,\n '__X-SDK-Client': xSDKClientHeader,\n };\n\n if (xSDKParentHostHeader) {\n finalBody['__X-SDK-Parent-Host'] = xSDKParentHostHeader;\n }\n\n const children: HTMLInputElement[] = Object.entries(finalBody).map(([key, value]) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = key;\n input.value = value;\n return input;\n });\n\n const form = document.createElement('form');\n form.method = method;\n form.action = finalURL;\n form.append(...children);\n\n document.body.appendChild(form);\n form.submit();\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","const ModulePromiseCache: Record<string, Promise<unknown>> = {};\n\nexport const __clearcache = () => Object.keys(ModulePromiseCache).forEach((key) => delete ModulePromiseCache[key]);\n\nexport async function loadESModule<T>(url: string, moduleFromGlobalScope: () => T): Promise<T> {\n if (ModulePromiseCache[url] !== undefined) {\n return ModulePromiseCache[url] as Promise<T>;\n }\n\n ModulePromiseCache[url] = loadESModuleFromNetwork(url, moduleFromGlobalScope);\n return ModulePromiseCache[url] as Promise<T>;\n}\n\nfunction loadESModuleFromNetwork<T>(url: string, moduleFromGlobalScope: () => T): Promise<T> {\n return new Promise((resolve, reject) => {\n const maybeScript = findScript(url);\n if (maybeScript && maybeScript.dataset.loaded === 'true') {\n try {\n resolve(moduleFromGlobalScope());\n } catch (err) {\n return reject(new Error(`${url} already loaded, but module was not found in global scope: ${err}`));\n }\n }\n\n const script = createScript(url);\n\n script.addEventListener('load', () => {\n script.dataset.loaded = 'true';\n try {\n resolve(moduleFromGlobalScope());\n } catch (err) {\n reject(new Error(`${url} was loaded, but module was not found in global scope: ${err}`));\n }\n });\n\n script.addEventListener('error', (err) => {\n reject(new Error(`${url} could not be loaded: ${err}`));\n });\n });\n}\n\nconst findScriptsInDom = (url: string) => document.querySelectorAll<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\nfunction findScript(url: string): HTMLScriptElement | undefined {\n const scripts = findScriptsInDom(url);\n if (scripts[0]) {\n return scripts[0];\n }\n}\n\nfunction createScript(url: string): HTMLScriptElement {\n const script = document.createElement('script');\n script.setAttribute('src', url);\n script.setAttribute('async', 'true');\n script.setAttribute('defer', 'true');\n document.head.appendChild(script);\n return script;\n}\n","export const getHttpsUrl = (urlOrDomain: string) => {\n // If it's already a valid URL, extract the domain\n try {\n const url = new URL(urlOrDomain);\n return `https://${url.hostname}`;\n } catch {\n // invalid URLs are OK\n }\n\n // Prepend a scheme and verify it's a valid URL\n try {\n const url = new URL(`https://${urlOrDomain}`);\n return `https://${url.hostname}`;\n } catch {\n // Invalid URL, fallback to undefined\n }\n\n // Input was neither a valid URL nor a valid domain\n return undefined;\n};\n","/**\n * A set of tokens to stylize the console.log output\n * First token is the raw text. %c is a placeholder for string formatting\n * Second token starts our stylizing - adding custom color and background\n * Third token resets stylizing to baseline before showing the rest of the content.\n */\nconst STYTCH_BADGE =\n process.env.NODE_ENV === 'production'\n ? ['[Stytch]']\n : ['%c[Stytch]%c', 'background: #19303d; color: #13E5C0; padding: 2px;border-radius: 4px', ''];\n\n// Turn this to true to enable debug logs\n// TODO: Make this an env var\nconst DEBUG = false;\n\n/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * An ultralightweight wrapper around console.log.\n * In the future, the logger might be passed in from the customer,\n * or the level might be configurable.\n */\nexport const logger = {\n debug: (...args: any[]) => DEBUG && console.log(...STYTCH_BADGE, ...args),\n log: (...args: any[]) => console.log(...STYTCH_BADGE, ...args),\n warn: (...args: any[]) => console.warn(...STYTCH_BADGE, ...args),\n error: (...args: any[]) => console.error(...STYTCH_BADGE, ...args),\n};\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n/* eslint-enable no-console */\n","import { LIVE_API_URL, TEST_API_URL } from '../constants';\nimport { InternalStytchClientOptions } from '../types';\nimport { getHttpsUrl } from './getHttpsUrl';\nimport { logger } from './logger';\n\nexport const getLiveApiURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.customBaseUrl ?? opts?.endpointOptions?.apiDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.customBaseUrl ? 'customBaseUrl' : 'apiDomain';\n logger.warn(`Unable to use custom API domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.liveAPIURL ?? LIVE_API_URL;\n};\n\nexport const getTestApiURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.customBaseUrl ?? opts?.endpointOptions?.testApiDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.customBaseUrl ? 'customBaseUrl' : 'testApiDomain';\n logger.warn(`Unable to use custom API domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.testAPIURL ?? TEST_API_URL;\n};\n","import { logger } from './logger';\n\nconst trailer = `\nYou can find your public token at https://stytch.com/dashboard/api-keys.`;\nexport const checkPublicToken = (publicToken: unknown) => {\n if (typeof publicToken !== 'string') {\n logger.warn(`Public token is malformed. Expected a string, got ${typeof publicToken}.${trailer}`);\n } else if (publicToken === '') {\n logger.warn(`Public token is malformed. Expected \"public-token-...\", got an empty string.${trailer}`);\n } else if (!publicToken.startsWith('public-token-')) {\n logger.warn(`Public token is malformed. Expected \"public-token-...\", got ${publicToken}.${trailer}`);\n }\n};\n\nexport const checkNotSSR = () => {\n if (typeof window === 'undefined') {\n throw new Error(\n `\\`new StytchClient()\\` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use \\`createStytchClient()\\` instead.`,\n );\n }\n};\n\nexport const checkB2BNotSSR = () => {\n if (typeof window === 'undefined') {\n throw new Error(\n `\\`new StytchB2BClient()\\` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use \\`createStytchB2BClient()\\` instead.`,\n );\n }\n};\n","import { STYTCH_DFP_BACKEND_URL, STYTCH_DFP_CDN_URL } from '../constants';\nimport { InternalStytchClientOptions } from '../types';\nimport { getHttpsUrl } from './getHttpsUrl';\nimport { logger } from './logger';\n\nexport const getDFPBackendURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.dfppaUrl ?? opts?.endpointOptions?.dfppaDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.dfppaUrl ? 'dfppaUrl' : 'dfppaDomain';\n logger.warn(`Unable to use custom DFPPA domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.dfpBackendURL ?? STYTCH_DFP_BACKEND_URL;\n};\n\nexport const getDFPCdnURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.dfpCdnUrl ?? opts?.endpointOptions?.dfpCdnDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.dfpCdnUrl ? 'dfpCdnUrl' : 'dfpCdnDomain';\n logger.warn(`Unable to use custom DFP CDN domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return STYTCH_DFP_CDN_URL;\n};\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { OTPMethods, ResponseCommon, User } from '../public';\n\nexport type { Cacheable } from './Cacheable';\nexport type { EnumOrStringLiteral, StringLiteralFromEnum } from './EnumOrStringLiteral';\nexport { loadESModule } from './loadESModule';\nexport * from './api';\nexport * from './checks';\nexport * from './country';\nexport * from './dfp';\nexport * from './logger';\n\nexport { arrayUtils } from './arrayUtils';\n\nexport const isTestPublicToken = (token: string) => token.includes('public-token-test');\n\n/**\n * Normalizes an es5 promise with a .then(onSuccess, onFailure) signature to\n * the es6 .then().catch() signature\n */\nexport const normalizePromiseLike = <T>(prom: PromiseLike<T>): Promise<T> => {\n return new Promise<T>((resolve, reject) => {\n prom.then(resolve, reject);\n });\n};\n\nexport const createEventId = () => `event-id-${uuidv4()}`;\nexport const createAppSessionId = () => `app-session-id-${uuidv4()}`;\nexport const createPersistentId = () => `persistent-id-${uuidv4()}`;\n\nexport const isPhoneMethod = (selectionMethod: string) =>\n selectionMethod === OTPMethods.SMS || selectionMethod === OTPMethods.WhatsApp;\nexport const isEmailMethod = (selectionMethod: string) => selectionMethod === OTPMethods.Email;\n\nexport const removeResponseCommon = <T extends ResponseCommon>({\n request_id,\n\n status_code,\n ...rest\n}: T): Omit<T, keyof ResponseCommon> => rest;\n\nexport type WithUser<T> = T & { __user: User & ResponseCommon };\n\nexport const omitUser = <T extends ResponseCommon>(resp: T & { __user: User }): T => {\n const { __user, ...rest } = resp;\n return rest as unknown as T;\n};\n\nexport type Values<T extends object> = T[keyof T];\n\n// A simplified version of PartialDeep from type-fest to avoid referencing that package in exported types\ntype Primitive = null | undefined | string | number | boolean | symbol | bigint;\n\ntype _PartialDeep<T> = T extends Primitive\n ? T //\n : T extends object\n ? PartialObjectDeep<T>\n : unknown;\n\ntype PartialObjectDeep<ObjectType extends object> = {\n [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType]>;\n};\n\nexport type PartialDeep<T> = _PartialDeep<T>;\n","import { RetriableError, RetriableErrorType, SDKBaseRequestInfo } from './NetworkClient';\nimport { BootstrapData } from './types';\nimport { loadESModule } from './utils';\n\ndeclare global {\n // The telemetry.js script will set a global function called GetTelemetryID on the window\n // object. This interface is allows us to call that function while pleasing the TypeScript\n // compiler.\n interface Window {\n GetTelemetryID: (publicToken: string, submitURL: string) => Promise<string>;\n }\n}\n\nconst loadTelemetryJS = (domain: string) => loadESModule(`${domain}/telemetry.js`, () => window.GetTelemetryID);\n\nexport type DFPProtectedAuthMode = 'OBSERVATION' | 'DECISIONING';\n\nexport type DFPProtectedAuthState = {\n publicToken: string;\n dfpBackendURL: string;\n mode?: DFPProtectedAuthMode;\n enabled: boolean;\n loaded: boolean;\n executeRecaptcha: () => Promise<string | undefined>;\n};\n\nexport class DFPProtectedAuthProvider {\n private state: Promise<DFPProtectedAuthState>;\n constructor(\n publicToken: string,\n dfpBackendURL: string,\n dfpCdnDomain: string,\n private bootstrapPromise: Promise<BootstrapData>,\n executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n ) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.runDFPProtectedAuth) {\n return { publicToken, dfpBackendURL, enabled: false, loaded: false, executeRecaptcha };\n }\n await loadTelemetryJS(dfpCdnDomain);\n return {\n publicToken,\n dfpBackendURL,\n enabled: true,\n mode: bootstrapData.dfpProtectedAuthMode || 'OBSERVATION',\n loaded: true,\n executeRecaptcha,\n };\n });\n }\n\n isEnabled = async (): Promise<boolean> => {\n return this.state.then((state) => state.enabled);\n };\n\n getTelemetryID = async (): Promise<string | undefined> => {\n const { publicToken, enabled, dfpBackendURL } = await this.state;\n if (!enabled) {\n return undefined;\n }\n return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);\n };\n\n getDFPTelemetryIDAndCaptcha = async (): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }> => {\n const { enabled, executeRecaptcha, mode } = await this.state;\n\n let dfp_telemetry_id: string | undefined = undefined;\n let captcha_token: string | undefined = undefined;\n if (!enabled) {\n captcha_token = await executeRecaptcha();\n }\n if (mode === 'DECISIONING') {\n dfp_telemetry_id = await this.getTelemetryID();\n } else if (mode === 'OBSERVATION') {\n dfp_telemetry_id = await this.getTelemetryID();\n captcha_token = await executeRecaptcha();\n }\n return { dfp_telemetry_id, captcha_token };\n };\n\n retryWithCaptchaAndDFP = async (e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo> => {\n const { enabled, executeRecaptcha } = await this.state;\n if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {\n if (req.body) {\n req.body.dfp_telemetry_id = await this.getTelemetryID();\n req.body.captcha_token = await executeRecaptcha();\n }\n return req;\n }\n throw new Error('Unable to query captcha and/or dfp telemetry ID');\n };\n}\n\nexport const DisabledDFPProtectedAuthProvider = () => ({\n isEnabled: async () => false,\n getTelemetryID: async () => undefined,\n getDFPTelemetryIDAndCaptcha: async () => ({\n dfp_telemetry_id: undefined,\n captcha_token: undefined,\n }),\n retryWithCaptchaAndDFP: async () => {\n throw new Error('DFP protected auth is disabled');\n },\n});\n\nexport interface IDFPProtectedAuthProvider {\n isEnabled(): Promise<boolean>;\n getTelemetryID(): Promise<string | undefined>;\n retryWithCaptchaAndDFP(e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo>;\n getDFPTelemetryIDAndCaptcha(): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }>;\n}\n","import {\n StytchAPIUnreachableError,\n StytchAPIError,\n StytchAPISchemaError,\n SDKAPIUnreachableError,\n StytchSDKSchemaError,\n StytchSDKAPIError,\n} from './public';\n\n/**\n * Some errors are thrown from inside an iframe, but we can't serialize them\n * to the parent in Webkit. This class handles restoring marshalled errors\n * to their original form.\n * It preserves the error instance/class constructor by inspecting err.name\n * and calling `new` on the matching constructor.\n */\nexport class ErrorMarshaller {\n static inflate<T extends new (...any: never[]) => Error>(ErrorClass: T, ErrorData: Record<string, unknown>): Error {\n // !!HACK!!\n // We make the assumption that if the error takes in a required property\n // (StytchAPIError takes in an APIDetails obj...)\n // that we can just pass in the error body itself to satisfy the constructor...\n // And if the types don't work out, Object.assign(...) copies everything over anyway\n // This is a brittle and weak assumption.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const err = new ErrorClass(ErrorData);\n Object.assign(err, ErrorData);\n Object.setPrototypeOf(err, ErrorClass.prototype);\n return err as Error;\n }\n\n static unmarshall(error: Record<string, unknown>): Error {\n if ('name' in error) {\n switch (error.name) {\n case 'SDKAPIUnreachableError':\n return ErrorMarshaller.inflate(SDKAPIUnreachableError, error);\n case 'StytchSDKSchemaError':\n return ErrorMarshaller.inflate(StytchSDKSchemaError, error);\n case 'StytchAPIUnreachableError':\n return ErrorMarshaller.inflate(StytchAPIUnreachableError, error);\n case 'StytchAPISchemaError':\n return ErrorMarshaller.inflate(StytchAPISchemaError, error);\n case 'StytchSDKAPIError':\n return ErrorMarshaller.inflate(StytchSDKAPIError, error);\n case 'StytchAPIError':\n return ErrorMarshaller.inflate(StytchAPIError, error);\n case 'TypeError':\n return ErrorMarshaller.inflate(TypeError, error);\n case 'SyntaxError':\n return ErrorMarshaller.inflate(SyntaxError, error);\n case 'ReferenceError':\n return ErrorMarshaller.inflate(ReferenceError, error);\n case 'RangeError':\n return ErrorMarshaller.inflate(RangeError, error);\n case 'EvalError':\n return ErrorMarshaller.inflate(EvalError, error);\n case 'URIError':\n return ErrorMarshaller.inflate(URIError, error);\n }\n }\n return ErrorMarshaller.inflate(Error, error);\n }\n}\n","import { SDKTelemetry } from './NetworkClient';\n\nexport const DEFAULT_MAX_BATCH_SIZE = 15;\nexport const DEFAULT_INTERVAL_DURATION_MS = 800;\n\ntype EventLoggerArgs = {\n maxBatchSize: number;\n intervalDurationMs: number;\n logEventURL: string;\n};\n\nexport class EventLogger {\n private maxBatchSize: number;\n private logEventURL: string;\n private batch: Record<string, unknown>[];\n\n constructor(args: EventLoggerArgs) {\n this.maxBatchSize = args.maxBatchSize;\n this.logEventURL = args.logEventURL;\n // TODO: If we create more than one of these, we'll want a mechanism to clean up the intervals\n setInterval(this.flush.bind(this), args.intervalDurationMs);\n this.batch = [];\n }\n\n logEvent(telemetry: SDKTelemetry, event: Record<string, unknown>) {\n this.batch.push({ telemetry, event });\n if (this.batch.length >= this.maxBatchSize) {\n this.flush();\n }\n }\n\n async flush() {\n if (!this.batch.length) {\n return;\n }\n const batchToSubmit = this.batch;\n this.batch = [];\n try {\n await fetch(this.logEventURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(batchToSubmit),\n });\n } catch {\n // Silently ignore fetch errors\n }\n }\n}\n","import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessMagicLinksClient,\n MagicLinksAuthenticateOptions,\n MagicLinksAuthenticateResponse,\n MagicLinksLoginOrCreateOptions,\n MagicLinksLoginOrCreateResponse,\n MagicLinksSendOptions,\n MagicLinksSendResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessMagicLinksClient<TProjectConfiguration>\n{\n email: {\n loginOrCreate: (email: string, options?: MagicLinksLoginOrCreateOptions) => Promise<ResponseCommon>;\n send: (email: string, options?: MagicLinksSendOptions) => Promise<ResponseCommon>;\n };\n\n authenticate: (\n token: string,\n options: MagicLinksAuthenticateOptions,\n ) => Promise<MagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.email = {\n loginOrCreate: async (email: string, options: MagicLinksLoginOrCreateOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n return this._networkClient.retriableFetchSDK<MagicLinksLoginOrCreateResponse>({\n url: '/magic_links/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n\n send: async (email: string, options: MagicLinksSendOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/magic_links/email/send/secondary' : '/magic_links/email/send/primary';\n\n return this._networkClient.retriableFetchSDK<MagicLinksSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: MagicLinksAuthenticateOptions) => {\n validateInDev(\n 'stytch.magicLinks.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, { token, ...options });\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, { token, ...options });\n }\n\n return omitUser(resp);\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string> {\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: MagicLinksAuthenticateOptions & { token: string },\n ): Promise<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>> {\n const pkPair = await pkceManager.getPKPair();\n\n const requestBody = {\n code_verifier: pkPair?.code_verifier,\n ...data,\n };\n\n const resp = await this._networkClient.fetchSDK<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>>({\n url: '/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n","import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n CryptoWalletAuthenticateOptions,\n CryptoWalletAuthenticateResponse,\n CryptoWalletAuthenticateStartOptions,\n CryptoWalletAuthenticateStartResponse,\n IHeadlessCryptoWalletClient,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n siweRequiredForCryptoWallets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n siweRequiredForCryptoWallets: false,\n});\n\nexport class HeadlessCryptoWalletClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessCryptoWalletClient<TProjectConfiguration>\n{\n authenticate: (\n options: CryptoWalletAuthenticateOptions,\n ) => Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _apiNetworkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n private _config: DynamicConfig = DefaultDynamicConfig,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: CryptoWalletAuthenticateOptions,\n ): Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.cryptoWallets.authenticate', options, {\n signature: 'string',\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._apiNetworkClient.retriableFetchSDK<\n WithUser<CryptoWalletAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/crypto_wallets/authenticate',\n method: 'POST',\n body: {\n session_duration_minutes: options.session_duration_minutes,\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n signature: options.signature,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n async authenticateStart(\n options: CryptoWalletAuthenticateStartOptions,\n ): Promise<CryptoWalletAuthenticateStartResponse> {\n validateInDev('stytch.cryptoWallets.authenticateStart', options, {\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n });\n if (options.siwe_params) {\n validateInDev('stytch.cryptoWallets.authenticateStart', options.siwe_params, {\n uri: 'optionalString',\n chain_id: 'optionalString',\n issued_at: 'optionalString',\n statement: 'optionalString',\n not_before: 'optionalString',\n message_request_id: 'optionalString',\n resources: 'optionalStringArray',\n });\n }\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n const captcha_token = await this.executeRecaptcha();\n const { siweRequiredForCryptoWallets } = await this._config;\n\n const body: CryptoWalletAuthenticateStartOptions = {\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n };\n if (siweRequiredForCryptoWallets && options.crypto_wallet_type == 'ethereum') {\n body.siwe_params = { ...options.siwe_params, uri: options.siwe_params?.uri || window.location.origin };\n }\n\n const endpoint = isLoggedIn\n ? '/crypto_wallets/authenticate/start/secondary'\n : '/crypto_wallets/authenticate/start/primary';\n\n const requestBody = {\n ...body,\n captcha_token,\n };\n return this._apiNetworkClient.fetchSDK<CryptoWalletAuthenticateStartResponse>({\n url: endpoint,\n method: 'POST',\n body: requestBody,\n });\n }\n}\n","import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n","export const WILDCARD_ACTION = '*';\n\nexport type RBACPolicyRole = {\n role_id: string;\n description: string;\n permissions: {\n resource_id: string;\n actions: string[];\n }[];\n};\n\nexport type RBACPolicyScope = {\n scope: string;\n description: string;\n permissions: {\n resource_id: string;\n actions: string[];\n }[];\n};\n\nexport type RBACPolicyResource = {\n resource_id: string;\n description: string;\n actions: string[];\n};\n\nexport type RBACPolicyRaw = {\n roles: RBACPolicyRole[];\n resources: RBACPolicyResource[];\n scopes: RBACPolicyScope[];\n};\n\n/**\n * RBACPolicy represents an instance of a parsed Stytch RBAC policy object\n * It contains methods for computing outcomes for various permissions questions\n */\nexport class RBACPolicy {\n private rolesByID: Record<string, RBACPolicyRole>;\n\n constructor(\n public roles: RBACPolicyRole[],\n public resources: RBACPolicyResource[],\n ) {\n this.rolesByID = {};\n roles.forEach((role) => (this.rolesByID[role.role_id] = role));\n }\n\n static fromJSON(input: RBACPolicyRaw): RBACPolicy {\n return new RBACPolicy(input.roles, input.resources);\n }\n\n /**\n * Merges organization custom roles with this project policy.\n * Custom roles are additive - they add additional roles on top of the base project policy.\n * Resources remain from the project policy, roles are combined.\n * @param customRoles Array of custom organization roles to add\n * @returns A new RBACPolicy instance with merged roles\n */\n mergeWithCustomRoles(customRoles: RBACPolicyRole[]): RBACPolicy {\n const mergedRoles = [...this.roles, ...customRoles];\n\n // Resources come from the project policy - custom roles don't define new resources\n return new RBACPolicy(mergedRoles, this.resources);\n }\n\n /**\n * isAuthorized returns whether or not a user with a specific set of roles can perform a desired action\n * @example\n * const canDoIt = policy.callerIsAuthorized(roles, 'files', 'create')\n * console.log(canDoIt) // true\n */\n callerIsAuthorized(memberRoles: string[], resourceId: string, action: string): boolean {\n return !!memberRoles\n .map((roleId) => this.rolesByID[roleId])\n // Defense in depth: filter out null/undefined in case memberRoles contains a role that doesn't match the policy\n // This may happen if the member is loaded _before_ a fresh RBAC policy is loaded\n .filter((v) => v)\n .flatMap((role) => role.permissions)\n .filter((permission) => permission.resource_id === resourceId)\n .find((permission) => permission.actions.includes(action) || permission.actions.includes(WILDCARD_ACTION));\n }\n\n /**\n * allPermissions generates a map that allows quick lookup of all the permissions available to the user\n * @example\n * const perms = policy.allPermissions(roles)\n * console.log(perms.files.create) // true\n * console.log(perms.files.delete) // false\n */\n allPermissionsForCaller(memberRoles: string[]): Record<string, Record<string, boolean>> {\n const allPermsMap: Record<string, Record<string, boolean>> = Object.create(null);\n this.resources.forEach((resource) => {\n allPermsMap[resource.resource_id] = {};\n resource.actions.forEach((action) => {\n allPermsMap[resource.resource_id][action] = this.callerIsAuthorized(memberRoles, resource.resource_id, action);\n });\n });\n return allPermsMap;\n }\n}\n","import { DisabledDFPProtectedAuthProvider, IDFPProtectedAuthProvider } from '../../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../../NetworkClient';\nimport { IPKCEManager } from '../../PKCEManager';\nimport { IB2BSubscriptionService } from '../../SubscriptionService';\nimport {\n B2BMagicLinksInviteOptions,\n B2BMagicLinksInviteResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../../public';\nimport {\n B2BMagicLinkLoginOrSignupOptions,\n B2BMagicLinkLoginOrSignupResponse,\n B2BMagicLinksAuthenticateOptions,\n B2BMagicLinksAuthenticateResponse,\n B2BMagicLinksDiscoveryAuthenticateOptions,\n B2BMagicLinksDiscoveryAuthenticateResponse,\n B2BMagicLinksEmailDiscoverySendOptions,\n B2BMagicLinksEmailDiscoverySendResponse,\n IHeadlessB2BMagicLinksClient,\n} from '../../public/b2b/magicLinks';\n\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessB2BMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessB2BMagicLinksClient<TProjectConfiguration>\n{\n email: {\n invite: (data: B2BMagicLinksInviteOptions) => Promise<B2BMagicLinksInviteResponse>;\n loginOrSignup: (data: B2BMagicLinkLoginOrSignupOptions) => Promise<ResponseCommon>;\n discovery: {\n send: (data: B2BMagicLinksEmailDiscoverySendOptions) => Promise<B2BMagicLinksEmailDiscoverySendResponse>;\n };\n };\n\n authenticate: (\n data: B2BMagicLinksAuthenticateOptions,\n ) => Promise<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n discovery: {\n authenticate: (\n data: B2BMagicLinksDiscoveryAuthenticateOptions,\n ) => Promise<B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>>;\n };\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IB2BSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider = DisabledDFPProtectedAuthProvider(),\n ) {\n this.email = {\n invite: async (data: B2BMagicLinksInviteOptions): Promise<B2BMagicLinksInviteResponse> => {\n validateInDev('stytch.magicLinks.email.invite', data, {\n email_address: 'string',\n invite_redirect_url: 'optionalString',\n invite_template_id: 'optionalString',\n name: 'optionalString',\n locale: 'optionalString',\n roles: 'optionalStringArray',\n invite_expiration_minutes: 'optionalNumber',\n });\n\n return this._networkClient.fetchSDK<B2BMagicLinksInviteResponse>({\n url: '/b2b/magic_links/email/invite',\n body: data,\n method: 'POST',\n });\n },\n loginOrSignup: async (data: B2BMagicLinkLoginOrSignupOptions): Promise<ResponseCommon> => {\n validateInDev('stytch.magicLinks.email.loginOrSignup', data, {\n email_address: 'string',\n organization_id: 'string',\n login_redirect_url: 'optionalString',\n login_template_id: 'optionalString',\n signup_redirect_url: 'optionalString',\n signup_template_id: 'optionalString',\n locale: 'optionalString',\n login_expiration_minutes: 'optionalNumber',\n signup_expiration_minutes: 'optionalNumber',\n });\n\n const pkce_code_challenge = await this.getCodeChallenge();\n const requestBody = {\n ...data,\n pkce_code_challenge,\n };\n return this._networkClient.fetchSDK<B2BMagicLinkLoginOrSignupResponse>({\n url: '/b2b/magic_links/email/login_or_signup',\n body: requestBody,\n method: 'POST',\n });\n },\n discovery: {\n send: async (\n data: B2BMagicLinksEmailDiscoverySendOptions,\n ): Promise<B2BMagicLinksEmailDiscoverySendResponse> => {\n validateInDev('stytch.magicLinks.email.discovery.send', data, {\n email_address: 'string',\n discovery_redirect_url: 'optionalString',\n login_template_id: 'optionalString',\n locale: 'optionalString',\n discovery_expiration_minutes: 'optionalNumber',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkce_code_challenge = await this.getCodeChallenge();\n const requestBody = {\n ...data,\n pkce_code_challenge,\n dfp_telemetry_id,\n captcha_token,\n };\n return this._networkClient.retriableFetchSDK<B2BMagicLinksEmailDiscoverySendResponse>({\n url: '/b2b/magic_links/email/discovery/send',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(async (data: B2BMagicLinksAuthenticateOptions) => {\n validateInDev('stytch.magicLinks.authenticate', data, {\n magic_links_token: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: B2BMagicLinksAuthenticateResponse<TProjectConfiguration> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, data);\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, data);\n }\n\n return resp;\n });\n\n this.discovery = {\n authenticate: this._subscriptionService.withUpdateSession(\n async (\n data: B2BMagicLinksDiscoveryAuthenticateOptions,\n ): Promise<B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.magicLinks.discovery.authenticate', data, {\n discovery_magic_links_token: 'string',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n pkce_code_verifier: pkPair?.code_verifier,\n dfp_telemetry_id,\n captcha_token,\n ...data,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>\n >({\n url: '/b2b/magic_links/discovery/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return resp;\n },\n ),\n };\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n if (!pkceRequiredForEmailMagicLinks) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: B2BMagicLinksAuthenticateOptions,\n ): Promise<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>> {\n const pkPair = await pkceManager.getPKPair();\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n pkce_code_verifier: pkPair?.code_verifier,\n dfp_telemetry_id,\n captcha_token,\n intermediate_session_token: (await this._subscriptionService.getIntermediateSessionToken()) || undefined,\n ...data,\n };\n const resp = await this._networkClient.retriableFetchSDK<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>>({\n url: '/b2b/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n","import { IDFPProtectedAuthProvider } from '../../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../../NetworkClient';\nimport { IPKCEManager } from '../../PKCEManager';\nimport { IB2BSubscriptionService } from '../../SubscriptionService';\nimport { StytchProjectConfigurationInput } from '../../public/typeConfig';\nimport {\n B2BPasswordDiscoveryResetByEmailStartOptions,\n B2BPasswordDiscoveryResetByEmailStartResponse,\n B2BPasswordDiscoveryResetByEmailOptions,\n B2BPasswordDiscoveryResetByEmailResponse,\n B2BPasswordAuthenticateOptions,\n B2BPasswordAuthenticateResponse,\n B2BPasswordResetByEmailOptions,\n B2BPasswordResetByEmailResponse,\n B2BPasswordResetByEmailStartOptions,\n B2BPasswordResetByEmailStartResponse,\n B2BPasswordResetByExistingPasswordOptions,\n B2BPasswordResetByExistingPasswordResponse,\n B2BPasswordResetBySessionOptions,\n B2BPasswordResetBySessionResponse,\n B2BPasswordStrengthCheckOptions,\n B2BPasswordStrengthCheckResponse,\n IHeadlessB2BPasswordClient,\n B2BPasswordDiscoveryAuthenticateOptions,\n B2BPasswordDiscoveryAuthenticateResponse,\n} from '../../public/b2b/passwords';\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessB2BPasswordsClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessB2BPasswordClient<TProjectConfiguration>\n{\n authenticate: (\n options: B2BPasswordAuthenticateOptions,\n ) => Promise<B2BPasswordAuthenticateResponse<TProjectConfiguration>>;\n\n discovery: {\n resetByEmailStart: (\n options: B2BPasswordDiscoveryResetByEmailStartOptions,\n ) => Promise<B2BPasswordDiscoveryResetByEmailStartResponse>;\n resetByEmail: (\n options: B2BPasswordDiscoveryResetByEmailOptions,\n ) => Promise<B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>>;\n authenticate: (\n options: B2BPasswordDiscoveryAuthenticateOptions,\n ) => Promise<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>>;\n };\n\n resetByEmail: (\n options: B2BPasswordResetByEmailOptions,\n ) => Promise<B2BPasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: B2BPasswordResetByExistingPasswordOptions,\n ) => Promise<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: B2BPasswordResetBySessionOptions,\n ) => Promise<B2BPasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IB2BSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordAuthenticateOptions,\n ): Promise<B2BPasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n organization_id: 'string',\n password: 'string',\n email_address: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordAuthenticateResponse<TProjectConfiguration>>({\n url: '/b2b/passwords/authenticate',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n locale: options.locale,\n captcha_token,\n dfp_telemetry_id,\n code_verifier,\n intermediate_session_token: this._subscriptionService.getIntermediateSessionToken() || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n\n this.discovery = {\n resetByEmailStart: async (\n options: B2BPasswordDiscoveryResetByEmailStartOptions,\n ): Promise<B2BPasswordDiscoveryResetByEmailStartResponse> => {\n validateInDev('stytch.passwords.discovery.resetByEmailStart', options, {\n email_address: 'string',\n discovery_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n verify_email_template_id: 'optionalString',\n locale: 'optionalString',\n });\n\n const pkce_code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordDiscoveryResetByEmailStartResponse>({\n url: '/b2b/passwords/discovery/reset/start',\n method: 'POST',\n body: {\n email_address: options.email_address,\n discovery_redirect_url: options.discovery_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n verify_email_template_id: options.verify_email_template_id,\n locale: options.locale,\n pkce_code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n resetByEmail: this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordDiscoveryResetByEmailOptions,\n ): Promise<B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.discovery.resetByEmail', options, {\n password_reset_token: 'string',\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const pkce_code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>\n >({\n url: '/b2b/passwords/discovery/reset',\n method: 'POST',\n body: {\n password_reset_token: options.password_reset_token,\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n pkce_code_verifier,\n intermediate_session_token: (await this._subscriptionService.getIntermediateSessionToken()) || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return resp;\n },\n ),\n\n authenticate: this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordDiscoveryAuthenticateOptions,\n ): Promise<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.discovery.authenticate', options, {\n password: 'string',\n email_address: 'string',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>>(\n {\n url: '/b2b/passwords/discovery/authenticate',\n method: 'POST',\n body: {\n email_address: options.email_address,\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n code_verifier,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n },\n );\n },\n ),\n };\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetByEmailOptions,\n ): Promise<B2BPasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n password_reset_token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n B2BPasswordResetByEmailResponse<TProjectConfiguration>\n >({\n url: '/b2b/passwords/email/reset',\n method: 'POST',\n body: {\n password_reset_token: options.password_reset_token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n locale: options.locale,\n captcha_token,\n dfp_telemetry_id,\n code_verifier: code_verifier,\n intermediate_session_token: this._subscriptionService.getIntermediateSessionToken() || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n return resp;\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetByExistingPasswordOptions,\n ): Promise<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email_address: 'string',\n existing_password: 'string',\n new_password: 'string',\n locale: 'optionalString',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>>(\n {\n url: '/b2b/passwords/existing_password/reset',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n existing_password: options.existing_password,\n new_password: options.new_password,\n locale: options.locale,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n },\n );\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetBySessionOptions,\n ): Promise<B2BPasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/b2b/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: B2BPasswordResetByEmailStartOptions): Promise<B2BPasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email_address: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n verify_email_template_id: 'optionalString',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetByEmailStartResponse>({\n url: '/b2b/passwords/email/reset/start',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n verify_email_template_id: options.verify_email_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: B2BPasswordStrengthCheckOptions): Promise<B2BPasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email_address: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<B2BPasswordStrengthCheckResponse>({\n url: '/b2b/passwords/strength_check',\n method: 'POST',\n body: {\n email_address: options.email_address,\n password: options.password,\n },\n });\n }\n}\n","import { ErrorMarshaller } from '../ErrorMarshaller';\nimport { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from '../constants';\nimport { logger } from '../utils';\n\ntype RequestPayload = {\n method: string;\n args: unknown[];\n};\n\ntype ResponsePayload<T> = {\n success: boolean;\n payload: T;\n error: Record<string, unknown>;\n};\n\nexport class IframeHostClient {\n frame!: Promise<HTMLIFrameElement>;\n\n constructor(private iframeURL: string) {\n this.createIframe();\n }\n\n private createIframe() {\n let existingIframe = document.querySelector(`[src~=\"${this.iframeURL}\"]`) as HTMLIFrameElement;\n\n /* If an iframe does not exist yet, create one */\n if (!existingIframe) {\n existingIframe = document.createElement('iframe');\n existingIframe.src = this.iframeURL;\n existingIframe.style.position = 'absolute';\n existingIframe.style.width = '0';\n existingIframe.style.height = '0';\n existingIframe.style.border = '0';\n existingIframe.role = 'none';\n document.body.appendChild(existingIframe);\n } else {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n }\n\n /**\n * [NASTY BUG]\n * If we postMessage to an iframe that is _not yet loaded_, chrome will give a cryptic error message\n * Failed to execute 'postMessage' on 'DOMWindow':\n * The target origin provided ('https://js.stytch.com') does not match the recipient window's origin ('http://localhost:3000').\n * There is no builtin way to determine if an iframe is already loaded,\n * so we set a dataset attr in our onload handler and use that to determine loading state\n */\n if (existingIframe.dataset.loaded === 'true') {\n this.frame = Promise.resolve(existingIframe);\n return;\n }\n\n this.frame = new Promise((resolve) => {\n existingIframe.addEventListener(\n 'load',\n () => {\n existingIframe.dataset.loaded = 'true';\n resolve(existingIframe);\n },\n { once: true },\n );\n });\n }\n\n async call<T>(method: string, args: unknown[]): Promise<T> {\n const frame = await this.frame;\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (event) => {\n const resp = event.data as ResponsePayload<T>;\n channel.port1.close();\n if (resp.success) {\n resolve(resp.payload);\n } else {\n reject(ErrorMarshaller.unmarshall(resp.error));\n }\n };\n\n const message: RequestPayload = {\n method,\n args,\n };\n\n frame.contentWindow?.postMessage(message, this.iframeURL, [channel.port2]);\n });\n }\n}\n","import { INetworkClient } from './NetworkClient';\nimport { Member, ResponseCommon } from './public';\nimport { IDFPProtectedAuthProvider } from './DFPProtectedAuthProvider';\n\ntype UserSearchData = ResponseCommon & {\n userType: 'new' | 'passwordless' | 'password';\n};\n\nexport type InternalMember = Pick<Member, 'status' | 'name' | 'member_password_id'>;\n\nexport type MemberSearchData = ResponseCommon & { member: InternalMember | null };\n\nexport interface ISearchData {\n searchUser: (email: string) => Promise<UserSearchData>;\n searchMember: (email: string, organization_id: string) => Promise<MemberSearchData>;\n}\n\nexport class SearchDataManager implements ISearchData {\n constructor(\n private _networkClient: INetworkClient,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {}\n\n searchUser(email: string): Promise<UserSearchData> {\n return this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha().then(({ dfp_telemetry_id, captcha_token }) => {\n return this._networkClient.fetchSDK<UserSearchData>({\n url: `/users/search`,\n method: 'POST',\n body: { email, dfp_telemetry_id, captcha_token },\n });\n });\n }\n\n searchMember(email: string, organization_id: string): Promise<MemberSearchData> {\n return this._networkClient.fetchSDK<MemberSearchData>({\n url: `/b2b/organizations/members/search`,\n method: 'POST',\n body: { email_address: email, organization_id },\n });\n }\n}\n","import { B2BState, ConsumerState } from './public';\n\n// We should try refreshing the session if there exists a cached session in\n// state that might be stale. Otherwise, we know there is no session, so there's\n// no need.\nexport const shouldTryRefresh = <T extends ConsumerState | B2BState>(state: T | null) => !!state?.session;\n","import { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from './constants';\nimport {\n B2BState,\n ConsumerState,\n IHeadlessB2BSessionClient,\n IHeadlessSessionClient,\n SessionAuthenticateOptions,\n StytchProjectConfigurationInput,\n UNRECOVERABLE_ERROR_TYPES,\n} from './public';\nimport { shouldTryRefresh } from './shouldTryRefresh';\nimport { IB2BSubscriptionService, IConsumerSubscriptionService } from './SubscriptionService';\nimport { logger } from './utils';\nimport { SessionUpdateOptions } from './types';\n\nclass SessionManagerRegistry {\n private hasWarned = false;\n\n private registry = new Map<string, ISessionManager>();\n\n public register(key: string, sessionManager: ISessionManager) {\n const otherManager = this.registry.get(key);\n\n // If there appears to be another registered session manager, issue a\n // warning and cancel its background refresh in favor the newer registration\n if (otherManager && otherManager !== sessionManager) {\n if (!this.hasWarned) {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n this.hasWarned = true;\n }\n otherManager.cancelBackgroundRefresh();\n }\n this.registry.set(key, sessionManager);\n }\n\n public unregister(publicToken: string, sessionManager: ISessionManager) {\n const otherManager = this.registry.get(publicToken);\n if (otherManager && otherManager === sessionManager) {\n this.registry.delete(publicToken);\n }\n }\n}\n\nexport interface ISessionManager {\n performBackgroundRefresh: () => void;\n cancelBackgroundRefresh: () => void;\n}\n\nexport class SessionManager<TProjectConfiguration extends StytchProjectConfigurationInput> implements ISessionManager {\n // Three minutes\n private static REFRESH_INTERVAL_MS = 1000 * 60 * 3;\n // When testing - it's often more useful to set to a shorter duration\n // private static REFRESH_INTERVAL_MS = 1000 * 3;\n\n private timeout: ReturnType<typeof setTimeout> | null = null;\n\n /** In minutes */\n private lastAuthenticationSessionDuration: number | undefined;\n\n private static registry = new SessionManagerRegistry();\n\n private register() {\n SessionManager.registry.register(this._publicToken, this);\n }\n\n private unregister() {\n SessionManager.registry.unregister(this._publicToken, this);\n }\n\n constructor(\n private _subscriptionService:\n | IConsumerSubscriptionService<TProjectConfiguration>\n | IB2BSubscriptionService<TProjectConfiguration>,\n private _headlessSessionClient:\n | IHeadlessSessionClient<TProjectConfiguration>\n | IHeadlessB2BSessionClient<TProjectConfiguration>,\n private _publicToken: string,\n private _options: { keepSessionAlive?: boolean },\n ) {\n this._subscriptionService.subscribeToState(this._onDataChange);\n }\n\n /**\n * The core logic of the session refresh recursive trampoline\n * - Refreshes the currently issued session\n * - Schedules a future refresh if successful\n */\n performBackgroundRefresh() {\n logger.debug('performing background refresh at ', Date.now());\n this._reauthenticateWithBackoff()\n .then(() => {\n this.scheduleBackgroundRefresh();\n })\n .catch((error: unknown) => {\n logger.warn('Session background refresh failed. Signalling to app that user is logged out.', { error });\n this._subscriptionService.destroySession();\n });\n }\n\n private scheduleBackgroundRefresh() {\n /* Highlander rules - there can only ever be one */\n this.cancelBackgroundRefresh();\n this.register();\n logger.debug('Scheduling bg refresh', Date.now());\n this.timeout = setTimeout(() => {\n this.performBackgroundRefresh();\n }, SessionManager.REFRESH_INTERVAL_MS);\n }\n\n cancelBackgroundRefresh() {\n if (this.timeout !== null) {\n this.unregister();\n logger.debug('Cancelling bg refresh', Date.now());\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n /**\n * We need to listen to a few types of events:\n * - If the user logs in via invoking a .authenticate() call, we should start the background worker\n * - If the user steps up their authentication via another .authenticate call(), we should restart the background worker\n * - If the user logs out, we should terminate the worker\n * - We should ignore session changes that we ourselves caused - so if we already have a timeout, leave it be!\n */\n private _onDataChange = (\n state: (ConsumerState & SessionUpdateOptions) | (B2BState & SessionUpdateOptions) | null,\n ) => {\n if (state != null && state.sessionDurationMinutes) {\n this.lastAuthenticationSessionDuration = state.sessionDurationMinutes;\n }\n\n if (shouldTryRefresh(state)) {\n this.scheduleBackgroundRefresh();\n } else {\n this.cancelBackgroundRefresh();\n }\n };\n\n // In cases where we cannot get a satisfactory request:\n // - Stytch is hard-down\n // - The user's network is disconnected for an extended period of time\n // we will continue to retry every 4 minutes ad infinum\n private _reauthenticateWithBackoff = async () => {\n let count = 0;\n while (true) {\n try {\n const options: SessionAuthenticateOptions = {\n session_duration_minutes: this._options.keepSessionAlive ? this.lastAuthenticationSessionDuration : undefined,\n };\n\n return await this._headlessSessionClient.authenticate(options);\n } catch (err) {\n if (SessionManager.isUnrecoverableError(err)) {\n return Promise.reject(err);\n }\n count++;\n await new Promise((done) => setTimeout(done, SessionManager.timeoutForAttempt(count)));\n }\n }\n };\n\n // We start with a backoff of 2000ms and increase exponentially to ~4 minutes (+/- 175 ms for jitter)\n // A short backoff initially helps increase the chance that we refresh the session before the JWT expires\n static timeoutForAttempt(count: number) {\n count = Math.min(count, 7);\n const jitter = Math.floor(Math.random() * 350) - 175;\n const delayMS = 2000 * 2 ** count;\n return jitter + delayMS;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static isUnrecoverableError(error: any) {\n return UNRECOVERABLE_ERROR_TYPES.includes(error.error_type);\n }\n}\n","import { ISubscriptionService } from './SubscriptionService';\nimport { UnsubscribeFunction } from './public';\nimport { AllowedOpaqueTokens } from './typeConfig';\n\ntype DeepReadonly<T> = {\n readonly [P in keyof T]: DeepReadonly<T[P]>;\n};\n\nexport type StateChangeHandler<T> = (state: DeepReadonly<T>) => void;\nexport type StateChangeRegisterFunction<T> = (callback: StateChangeHandler<T>) => UnsubscribeFunction;\n\nexport class StateChangeClient<T> {\n constructor(\n private readonly _subscriptionService: ISubscriptionService<T | null, AllowedOpaqueTokens>,\n private readonly emptyState: T,\n ) {}\n\n public onStateChange: StateChangeRegisterFunction<T> = (callback) => {\n return this._subscriptionService.subscribeToState((state) => {\n callback(state ?? this.emptyState);\n });\n };\n}\n","export const VERTICAL_B2B = 'B2B';\nexport const VERTICAL_CONSUMER = 'CONSUMER';\n\nexport type Vertical = typeof VERTICAL_B2B | typeof VERTICAL_CONSUMER;\n","import { BootstrapData, RBACPolicyRaw, DFPProtectedAuthMode, INetworkClient, logger, Vertical } from '@stytch/core';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport interface IBootstrapData {\n getSync: () => BootstrapData;\n getAsync: () => Promise<BootstrapData>;\n}\n\ninterface RawBootstrapData {\n request_id: string;\n project_name: string;\n status_code: number;\n disable_sdk_watermark: boolean;\n cname_domain: string | null;\n email_domains: string[];\n captcha_settings: BootstrapData['captchaSettings'];\n pkce_required_for_email_magic_links: boolean;\n pkce_required_for_password_resets: boolean;\n pkce_required_for_oauth: boolean;\n pkce_required_for_sso: boolean;\n slug_pattern: string | null;\n create_organization_enabled: boolean;\n password_config: { luds_complexity: number; luds_minimum_count: number } | null;\n dfp_protected_auth_enabled?: boolean;\n dfp_protected_auth_mode?: DFPProtectedAuthMode;\n rbac_policy?: RBACPolicyRaw;\n siwe_required_for_crypto_wallets: boolean;\n vertical: Vertical;\n}\n\nconst BOOTSTRAP_CACHE_KEY = 'bootstrap';\nconst DEFAULT_BOOTSTRAP = (): BootstrapData => ({\n displayWatermark: false,\n projectName: null,\n cnameDomain: null,\n emailDomains: ['stytch.com'],\n captchaSettings: { enabled: false },\n pkceRequiredForEmailMagicLinks: false,\n pkceRequiredForPasswordResets: false,\n pkceRequiredForOAuth: false,\n pkceRequiredForSso: false,\n slugPattern: null,\n createOrganizationEnabled: false,\n passwordConfig: null,\n runDFPProtectedAuth: false,\n rbacPolicy: null,\n siweRequiredForCryptoWallets: false,\n vertical: null,\n});\n\nexport class BootstrapDataManager implements IBootstrapData {\n private readonly _bootstrapDataPromise: Promise<BootstrapData>;\n\n constructor(\n private _publicToken: string,\n private _networkClient: INetworkClient,\n private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n ) {\n // TODO: Push the async version of this into @stytch/core\n // for RN to use, have getSync throw a NotImplementedError\n // and inherit it to create a sync one here?\n this._bootstrapDataPromise = this._networkClient\n .fetchSDK<RawBootstrapData>({\n url: `/projects/bootstrap/${this._publicToken}`,\n method: 'GET',\n })\n .then(BootstrapDataManager.mapBootstrapData)\n .then((data) => {\n this._dataLayer.setItem(BOOTSTRAP_CACHE_KEY, JSON.stringify(data));\n return data;\n })\n .catch((error: unknown) => {\n logger.error(error);\n return DEFAULT_BOOTSTRAP();\n });\n }\n\n static mapBootstrapData(response: RawBootstrapData): BootstrapData {\n const passwordConfig =\n response.password_config !== null\n ? {\n ludsComplexity: response.password_config.luds_complexity,\n ludsMinimumCount: response.password_config.luds_minimum_count,\n }\n : null;\n\n return {\n projectName: response.project_name,\n displayWatermark: !response.disable_sdk_watermark,\n captchaSettings: response.captcha_settings,\n cnameDomain: response.cname_domain,\n emailDomains: response.email_domains,\n\n pkceRequiredForEmailMagicLinks: response.pkce_required_for_email_magic_links,\n pkceRequiredForPasswordResets: response.pkce_required_for_password_resets,\n pkceRequiredForOAuth: response.pkce_required_for_oauth,\n pkceRequiredForSso: response.pkce_required_for_sso,\n slugPattern: response.slug_pattern,\n createOrganizationEnabled: response.create_organization_enabled,\n passwordConfig,\n runDFPProtectedAuth: response.dfp_protected_auth_enabled ?? false,\n dfpProtectedAuthMode: response.dfp_protected_auth_mode,\n rbacPolicy: response.rbac_policy ?? null,\n siweRequiredForCryptoWallets: response.siwe_required_for_crypto_wallets,\n vertical: response.vertical,\n };\n }\n\n getSync(): BootstrapData {\n const cached = this._dataLayer.getItem(BOOTSTRAP_CACHE_KEY);\n if (cached === null) {\n return DEFAULT_BOOTSTRAP();\n }\n try {\n return JSON.parse(cached) as BootstrapData;\n } catch {\n return DEFAULT_BOOTSTRAP();\n }\n }\n\n getAsync(): Promise<BootstrapData> {\n return this._bootstrapDataPromise;\n }\n}\n","import { BootstrapData, loadESModule } from '@stytch/core';\n\nconst loadRecaptchaClient = (siteKey: string) =>\n loadESModule(`https://www.google.com/recaptcha/enterprise.js?render=${siteKey}`, () => window.grecaptcha.enterprise);\n\ntype CaptchaState =\n | { configured: true; captchaClient: ReCaptchaV2.ReCaptcha; siteKey: string }\n | { configured: false; captchaClient: undefined; siteKey: undefined };\n\nexport class CaptchaProvider {\n private state: Promise<CaptchaState>;\n constructor(private bootstrapPromise: Promise<BootstrapData>) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.captchaSettings.enabled) {\n return { configured: false };\n }\n return {\n configured: true,\n captchaClient: await loadRecaptchaClient(bootstrapData.captchaSettings.siteKey),\n siteKey: bootstrapData.captchaSettings.siteKey,\n };\n });\n }\n\n executeRecaptcha = async () => {\n const { captchaClient, configured, siteKey } = await this.state;\n if (!configured) {\n return undefined;\n }\n await new Promise<void>((resolve) => captchaClient.ready(resolve));\n return captchaClient.execute(siteKey, {\n action: 'LOGIN',\n });\n };\n}\n","import { IframeHostClient, RPCManifest } from '@stytch/core';\n\nexport class ClientsideServicesProvider implements RPCManifest {\n private _frameClient: IframeHostClient | undefined;\n constructor(private iframeURL: string) {}\n\n /**\n * The frameClient is lazily initialized - we don't want to force users\n * that don't use any of its features to still download the bundle!\n * @private\n */\n private get frameClient(): IframeHostClient {\n this._frameClient = this._frameClient ?? new IframeHostClient(this.iframeURL);\n return this._frameClient;\n }\n\n private call<T, U>(handlerName: string, req: T): Promise<U> {\n return this.frameClient.call<U>(handlerName, [req]);\n }\n\n oneTapStart: RPCManifest['oneTapStart'] = (req) => this.call('oneTapStart', req);\n oneTapSubmit: RPCManifest['oneTapSubmit'] = (req) => this.call('oneTapSubmit', req);\n parsedPhoneNumber: RPCManifest['parsedPhoneNumber'] = (req) => this.call('parsedPhoneNumber', req);\n getExamplePhoneNumber: RPCManifest['getExamplePhoneNumber'] = (req) => this.call('getExamplePhoneNumber', req);\n}\n","import {\n AdditionalTelemetryData,\n createAppSessionId,\n createEventId,\n createPersistentId,\n DEFAULT_INTERVAL_DURATION_MS,\n DEFAULT_MAX_BATCH_SIZE,\n EventLogger,\n INetworkClient,\n isTestPublicToken,\n RetriableSDKRequestInfo,\n SDKRequestInfo,\n SDKTelemetry,\n} from '@stytch/core';\nimport { ResponseCommon } from '@stytch/core/public';\n\nimport { baseFetchSDK, baseSubmitFormSDK, retriableFetchSDK } from '@stytch/core';\nimport { version as PACKAGE_VERSION } from '../package.json';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport class NetworkClient implements INetworkClient {\n private eventLogger: EventLogger;\n private readonly baseURL: string;\n\n constructor(\n private _publicToken: string,\n private _subscriptionDataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n _liveAPIURL: string,\n _testAPIURL: string,\n private additionalTelemetryDataFn: () => AdditionalTelemetryData,\n ) {\n this.baseURL = _liveAPIURL;\n if (isTestPublicToken(_publicToken)) {\n this.baseURL = _testAPIURL;\n }\n this.eventLogger = new EventLogger({\n maxBatchSize: DEFAULT_MAX_BATCH_SIZE,\n intervalDurationMs: DEFAULT_INTERVAL_DURATION_MS,\n logEventURL: this.buildSDKUrl('/events'),\n });\n }\n\n // @deprecated Use the new sessions.updateSession() method instead\n updateSessionToken = () => {\n return null;\n };\n\n logEvent({\n name,\n details,\n error = {},\n }: {\n name: string;\n details: Record<string, unknown>;\n error?: { error_code?: string; error_description?: string; http_status_code?: string };\n }): void {\n this.eventLogger.logEvent(this.createTelemetryBlob(), {\n public_token: this._publicToken,\n event_name: name,\n details: details,\n\n // Error fields\n error_code: error.error_code,\n error_description: error.error_description,\n http_status_code: error.http_status_code,\n });\n }\n\n createTelemetryBlob(): SDKTelemetry {\n return {\n event_id: createEventId(),\n // TODO: These should be persisted somewhere, not generated per request\n app_session_id: createAppSessionId(),\n persistent_id: createPersistentId(),\n\n client_sent_at: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\n // Logged in data\n // This gets passed into the constructor from StytchClient or StytchB2BClient\n // We pass in the user & session id when the Consumer SDK is being used and member & session id\n // when the B2B SDK is being used.\n\n // Why don't we generate this from the session_token in the auth header?\n // - We don't want to tie analytics ingest to session validation. There's no need to put\n // that kind of pressure on API, and ingest could be moved to somewhere that doesn't\n // have the ability to validate tokens\n // - For bulk event batches, we want to keep track of whether or not a user was logged\n // in at each event. If we have 10 events, the user logs in at event 5, then they'll have\n // a token when they log the batch, but we want to know that they were not logged in for the\n // first 4 events\n ...this.additionalTelemetryDataFn(),\n\n // Versioning\n app: {\n identifier: window.location.hostname,\n },\n sdk: {\n // TODO: Pull these from package.json when there is a package\n // eslint-disable-next-line lingui/no-unlocalized-strings\n identifier: 'Stytch.js Javascript SDK',\n version: PACKAGE_VERSION,\n },\n };\n }\n\n async fetchSDK<T extends ResponseCommon>({ url, body, method }: SDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async submitFormSDK({ url, body, method }: SDKRequestInfo): Promise<void> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseSubmitFormSDK({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async retriableFetchSDK<T extends ResponseCommon>({\n url,\n body,\n method,\n retryCallback,\n }: RetriableSDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return retriableFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n retryCallback,\n });\n }\n\n buildSDKUrl(url: string): string {\n // eslint-disable-next-line lingui/no-unlocalized-strings\n return `${this.baseURL}/sdk/v1${url}`;\n }\n}\n","// Inspired by https://developers.google.com/privacy-sandbox/3pcd/fedcm-developer-guide#sign-into-rp\nexport const navigatorSupportsFedCM = typeof window !== 'undefined' && 'IdentityCredential' in window;\n","import { OneTapPositions } from '@stytch/core/public';\nimport { navigatorSupportsFedCM } from './navigatorSupportsFedCM';\n\nexport const getConfiguredEmbeddedMode = (position: OneTapPositions | undefined) => {\n if (position === OneTapPositions.forceLegacyEmbedded) {\n return 'force';\n }\n\n if (\n position === OneTapPositions.embeddedOnly ||\n position === OneTapPositions.embedded ||\n position === OneTapPositions.floatingOrEmbedded\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getShouldRenderEmbeddedOneTap = (position: OneTapPositions | undefined) => {\n // Attempt embedded positioning if some embedded mode has been requested, and\n // either:\n // - the browser does not support FedCM (in which case embedded positioning\n // could work), or\n // - the developer has specified legacy embedded positioning (in which case\n // embedded positioning may not be honored)\n\n const embeddedMode = getConfiguredEmbeddedMode(position);\n return embeddedMode === 'force' || (embeddedMode && !navigatorSupportsFedCM);\n};\n\nexport const getShouldRenderFloatingOneTap = (position: OneTapPositions | undefined) => {\n // Use floating positioning if we aren't using embedded positioning and the\n // developer hasn't specifically requested not to use floating positioning\n return position !== OneTapPositions.embeddedOnly && !getShouldRenderEmbeddedOneTap(position);\n};\n\nexport const getRenderedOneTapMode = (position: OneTapPositions | undefined) => {\n const embeddedMode = getConfiguredEmbeddedMode(position);\n\n if (embeddedMode === 'force' || (embeddedMode && !navigatorSupportsFedCM)) {\n return 'embedded';\n }\n\n if (position !== OneTapPositions.embeddedOnly) {\n return 'floating';\n }\n\n return false;\n};\n","import type { accounts, CredentialResponse, IdConfiguration, PromptMomentNotification } from 'google-one-tap';\nimport { GOOGLE_ONE_TAP_HOST } from '@stytch/core';\nimport { OneTapStyleConfig } from '@stytch/core/public';\nimport { getConfiguredEmbeddedMode, getShouldRenderEmbeddedOneTap } from './positionModes';\n\ntype OneTapNotShownReason =\n | ReturnType<PromptMomentNotification['getNotDisplayedReason']>\n | ReturnType<PromptMomentNotification['getSkippedReason']>;\n\nexport type OneTapRenderResult = { success: true } | { success: false; reason: OneTapNotShownReason };\n\n/**\n * Wrapper around Google One Tap JS client that combines initialize() and prompt()\n * into one async render() call\n *\n * @see https://developers.google.com/identity/gsi/web/guides/display-google-one-tap#javascript\n */\nexport class GoogleOneTapClient {\n constructor(\n private _googleClient: accounts['id'],\n private _clientId: string,\n ) {}\n\n cancel(): void {\n this._googleClient.cancel();\n }\n\n async render({\n callback,\n onOneTapCancelled,\n style,\n cancelOnTapOutside = true,\n }: {\n callback: (response: CredentialResponse) => void;\n onOneTapCancelled?: (showError?: boolean) => void;\n style: OneTapStyleConfig;\n cancelOnTapOutside?: boolean;\n }): Promise<OneTapRenderResult> {\n const embeddedMode = getConfiguredEmbeddedMode(style.position);\n const shouldRenderEmbeddedOneTap = getShouldRenderEmbeddedOneTap(style.position);\n\n const config: IdConfiguration = {\n client_id: this._clientId,\n callback: callback,\n auto_select: false,\n context: 'use',\n itp_support: true,\n use_fedcm_for_prompt: embeddedMode !== 'force',\n cancel_on_tap_outside: cancelOnTapOutside,\n };\n if (shouldRenderEmbeddedOneTap) {\n config.prompt_parent_id = 'google-parent-prompt';\n config.cancel_on_tap_outside = false;\n }\n this._googleClient.initialize(config);\n\n return new Promise((resolve) => {\n this._googleClient.prompt((notification: PromptMomentNotification) => {\n if (notification.isSkippedMoment()) {\n // After FedCM is mandatory, `getSkippedReason` will no longer be\n // supported, so access it defensively.\n const reason = notification.getSkippedReason?.() ?? 'unknown_reason';\n\n if (reason === 'user_cancel') {\n onOneTapCancelled?.();\n }\n return resolve({\n success: false,\n reason,\n });\n }\n\n // At some point after FedCM is mandatory, `isNotDisplayed` and\n // `getNotDisplayedReason` (and display moments in general) will not be\n // supported. If we can tell they're not available and we're trying to\n // show an embedded one tap UI, we should treat it as a failure, because\n // we won't expect an embedded UI to work (by virtue of FedCM being\n // mandatory) and won't expect any other notifications.\n if ((!notification.isNotDisplayed && shouldRenderEmbeddedOneTap) || notification.isNotDisplayed?.()) {\n return resolve({\n success: false,\n reason: notification.getNotDisplayedReason?.() ?? 'unknown_reason',\n });\n }\n\n if (!notification.isDismissedMoment()) {\n this.styleFrame(shouldRenderEmbeddedOneTap);\n return resolve({ success: true });\n }\n });\n });\n }\n\n styleFrame(shouldRenderEmbeddedOneTap: boolean) {\n if (!shouldRenderEmbeddedOneTap) {\n return;\n }\n Array.from(document.getElementsByTagName('iframe')).forEach((frame) => {\n if (frame.src.includes(GOOGLE_ONE_TAP_HOST)) {\n frame.style.width = '100%';\n }\n });\n }\n}\n","import { GOOGLE_ONE_TAP_SCRIPT_URL, OneTapStartResponse, loadESModule, RPCManifest } from '@stytch/core';\nimport { StytchAPIError } from '@stytch/core/public';\nimport type { CredentialResponse } from 'google-one-tap';\nimport { GoogleOneTapClient } from './GoogleOneTapClient';\n\nexport const loadGoogleOneTapClient = (): Promise<google.accounts['id']> =>\n loadESModule(GOOGLE_ONE_TAP_SCRIPT_URL, () => window.google.accounts.id);\n\ntype OneTapNotLoadedReason =\n // These come from the API directly - err.error_type\n | 'oauth_config_not_found'\n | 'no_login_redirect_urls_set'\n | 'no_signup_redirect_urls_set'\n // If we have an unhandled error :$\n | string;\n\ntype OneTapLoadResult =\n | { success: true; client: GoogleOneTapClient }\n | { success: false; reason: OneTapNotLoadedReason };\n\n/**\n * Handles loading One Tap config from Stytch API and initializing {@link GoogleOneTapClient}\n */\nexport class OneTapProvider {\n private googleConfig?: Promise<OneTapStartResponse>;\n\n constructor(\n private _publicToken: string,\n private clientsideServices: RPCManifest,\n ) {}\n\n async createOneTapClient(): Promise<OneTapLoadResult> {\n let googleClientId: string;\n try {\n ({ googleClientId } = await this.fetchGoogleStart());\n } catch (e) {\n const err = StytchAPIError.from(e);\n return { success: false, reason: err.error_type };\n }\n\n if (googleClientId === '') {\n return { success: false, reason: 'oauth_config_not_found' };\n }\n const client = new GoogleOneTapClient(await loadGoogleOneTapClient(), googleClientId);\n return { success: true, client };\n }\n\n createOnSuccessHandler =\n ({\n loginRedirectUrl,\n signupRedirectUrl,\n onSuccess,\n }: {\n loginRedirectUrl?: string;\n signupRedirectUrl?: string;\n onSuccess: (redirect_url: string) => void;\n }) =>\n async (response: CredentialResponse) => {\n const { credential } = response;\n const { redirect_url } = await this.submitGoogleOneTapToken({\n credential,\n loginRedirectUrl,\n signupRedirectUrl,\n });\n onSuccess(redirect_url);\n };\n\n private fetchGoogleStart() {\n if (this.googleConfig) {\n return this.googleConfig;\n }\n this.googleConfig = this.clientsideServices.oneTapStart({\n publicToken: this._publicToken,\n });\n return this.googleConfig;\n }\n\n private async submitGoogleOneTapToken({\n credential,\n loginRedirectUrl,\n signupRedirectUrl,\n }: {\n credential: string;\n loginRedirectUrl?: string;\n signupRedirectUrl?: string;\n }) {\n const { oauthCallbackId } = await this.fetchGoogleStart();\n\n return this.clientsideServices.oneTapSubmit({\n publicToken: this._publicToken,\n idToken: credential,\n loginRedirectURL: loginRedirectUrl,\n oauthCallbackID: oauthCallbackId,\n signupRedirectURL: signupRedirectUrl,\n });\n }\n\n redirectOnSuccess = (redirect_url: string) => {\n window.location.href = redirect_url;\n };\n\n /**\n * Google One Tap will show a banner on the bottom of the screen on certain mobile devices\n * This logic is controlled via some sniffing of the useragent string on startup\n * These specific strings were extracted from the One Tap minified source code\n * See the linked PR for details and screenshots\n */\n static willGoogleOneTapShowEmbedded(ua = navigator.userAgent): boolean {\n const uaContains = (userAgent: string, searchString: string) => userAgent.indexOf(searchString) !== -1;\n\n const isTabletUA =\n uaContains(ua, 'iPad') || (uaContains(ua, 'Android') && !uaContains(ua, 'Mobile')) || uaContains(ua, 'Silk');\n\n const isMobileUA =\n uaContains(ua, 'iPod') || uaContains(ua, 'iPhone') || uaContains(ua, 'Android') || uaContains(ua, 'IEMobile');\n\n return !isTabletUA && isMobileUA;\n }\n}\n","import { ISyncPKCEManager, ProofkeyPair } from '@stytch/core';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\nimport { logger } from '@stytch/core';\n\nconst PKCE_VERIFIER_STORAGE_KEY = 'PKCE_VERIFIER' as const;\n\nfunction toHex(n: number): string {\n let str = n.toString(16);\n if (str.length === 1) {\n str = '0' + str;\n }\n return str;\n}\n\nfunction base64URLEncode(buf: ArrayBuffer) {\n // Convert the ArrayBuffer to string using Uint8 array.\n // btoa takes chars from 0-255 and base64 encodes.\n // Then convert the base64 encoded to base64url encoded.\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.call(null, ...new Uint8Array(buf)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nexport class PKCEManager implements ISyncPKCEManager {\n constructor(\n private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n private namespace: string,\n ) {}\n\n private key() {\n return `${PKCE_VERIFIER_STORAGE_KEY}:${this.namespace}` as const;\n }\n\n async startPKCETransaction(): Promise<ProofkeyPair> {\n const keyPair = await PKCEManager.createProofkeyPair();\n this._dataLayer.setItem(this.key(), JSON.stringify(keyPair));\n return keyPair;\n }\n\n getPKPair(): ProofkeyPair | undefined {\n const serialized = this._dataLayer.getItem(this.key());\n if (serialized === null) {\n return undefined;\n }\n try {\n return JSON.parse(serialized) as ProofkeyPair;\n } catch {\n logger.warn('Found malformed Proof Key pair in localstorage.');\n return undefined;\n }\n }\n\n clearPKPair(): void {\n return this._dataLayer.removeItem(this.key());\n }\n\n static async createProofkeyPair(): Promise<ProofkeyPair> {\n const bytes = new Uint32Array(16);\n window.crypto.getRandomValues(bytes);\n const codeVerifier = Array.from(bytes).map(toHex).join('');\n\n const digest = await window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));\n\n return {\n code_challenge: base64URLEncode(digest),\n code_verifier: codeVerifier,\n };\n }\n}\n","/*! js-cookie v3.0.1 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport default api;\n","import {\n B2BState,\n ConsumerState,\n Member,\n Organization,\n SessionTokens,\n SessionTokensUpdate,\n StytchClientOptions,\n StytchProjectConfigurationInput,\n AuthenticateResponse,\n B2BAuthenticateResponse,\n B2BAuthenticateResponseWithMFA,\n B2BDiscoveryAuthenticateResponse,\n UnsubscribeFunction,\n User,\n} from '@stytch/core/public';\nimport {\n AllowedOpaqueTokens,\n ExtractOpaqueTokens,\n IB2BSubscriptionService,\n logger,\n IConsumerSubscriptionService,\n IfOpaqueTokens,\n ISubscriptionService,\n CommonAuthenticateOptions,\n OpaqueTokensNeverConfig,\n SessionUpdateOptions,\n InternalSessionUpdateOptions,\n} from '@stytch/core';\nimport Cookies from 'js-cookie';\nimport { createDeepEqual } from '@stytch/js-utils';\nimport { hasMultipleCookies, isLocalhost } from '../src/utils';\nimport {\n getKeyBoundStorage,\n getPersistentStorageKey,\n IKeyBoundStorage,\n safeLocalStorage,\n safeSessionStorage,\n StorageKey,\n} from './utils/storage';\n\ntype SubscriberFunction<T> = (value: T | null) => void;\ntype Subscribers<T> = Record<string, SubscriberFunction<T>>;\n\nconst STYTCH_SESSION_COOKIE = 'stytch_session';\nconst STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';\nconst STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE = 'stytch_intermediate_session_token';\nconst SEEN_DOMAINS_KEY = 'seen_domains';\n\nexport class SubscriptionDataLayer<T extends ConsumerState | B2BState> {\n publicToken: string;\n state: T | null;\n private readonly _opaqueTokenCookieName: string | null = null;\n private readonly _jwtCookieName: string | null = null;\n private readonly _cookiePath: string | null = null;\n private readonly _domain: string | null = null;\n private readonly _cookieAvailableToSubdomains: boolean = false;\n private readonly _istCookieName: string | null = null;\n\n subscriptions: Subscribers<T & SessionUpdateOptions>;\n\n private readonly _localStorage: IKeyBoundStorage;\n readonly browserSessionStorage: IKeyBoundStorage;\n\n constructor(publicToken: string, options?: StytchClientOptions) {\n this.publicToken = publicToken;\n this.state = null;\n this.subscriptions = {};\n\n // Initialize storage utilities\n this._localStorage = getKeyBoundStorage(safeLocalStorage, publicToken);\n this.browserSessionStorage = getKeyBoundStorage(safeSessionStorage, publicToken);\n\n if (options?.cookieOptions) {\n this._opaqueTokenCookieName = options.cookieOptions.opaqueTokenCookieName || null;\n this._jwtCookieName = options.cookieOptions.jwtCookieName || null;\n this._cookiePath = options.cookieOptions.path || null;\n this._domain = options.cookieOptions.domain || null;\n this._cookieAvailableToSubdomains = options.cookieOptions.availableToSubdomains || false;\n this._istCookieName = options.cookieOptions.istCookieName || null;\n }\n\n const localStorageState = this._localStorage.getItem('');\n\n if (!localStorageState) {\n return;\n }\n let parsedState: unknown;\n try {\n parsedState = JSON.parse(localStorageState);\n } catch {\n // Overwrite the bad data with nulls\n this.syncToLocalStorage();\n return;\n }\n // TODO: Validate the data looks decent & matches Session/User format\n this.state = parsedState as T;\n }\n\n protected get opaqueTokenCookieName(): string {\n return this._opaqueTokenCookieName ?? STYTCH_SESSION_COOKIE;\n }\n\n protected get jwtCookieName(): string {\n return this._jwtCookieName ?? STYTCH_SESSION_JWT_COOKIE;\n }\n\n protected get istCookieName(): string {\n return this._istCookieName ?? STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE;\n }\n\n readSessionCookie() {\n return {\n session_token: Cookies.get(this.opaqueTokenCookieName),\n session_jwt: Cookies.get(this.jwtCookieName),\n };\n }\n\n readIntermediateSessionTokenCookie() {\n return Cookies.get(this.istCookieName);\n }\n\n writeSessionCookie(stateDiff: StateWithReadableTokensLoggedIn<T>) {\n const { state, session_token, session_jwt } = stateDiff;\n\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (cookieOpts.domain) {\n this.addSeenDomain(cookieOpts.domain);\n }\n\n Cookies.set(this.opaqueTokenCookieName, session_token, cookieOpts);\n Cookies.set(this.jwtCookieName, session_jwt, cookieOpts);\n\n /**\n * If a developer flips the boolean value of availableToSubdomains at any point,\n * there will be two cookies set which will could cause the user to log out since\n * the js-cookie API always returns the first cookie set. Thus, we will clear the\n * cookie that doesn't relate to the current cookie options.\n */\n\n const alternateCookieOptions = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: !this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (alternateCookieOptions.domain) {\n this.addSeenDomain(alternateCookieOptions.domain);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n Cookies.remove(this.jwtCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n Cookies.remove(this.opaqueTokenCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n logger.warn(\n 'Could not remove extraneous JWT cookie. This might happen if the cookie has been set using multiple `path` settings, and may produce unwanted behavior.',\n );\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n logger.warn('Could not remove extraneous opaque token cookie.');\n }\n }\n\n writeIntermediateSessionTokenCookie(IST: string) {\n // ISTs are valid for 10 minutes\n const expiresAtTime = new Date(Date.now() + 10 * 60000);\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: expiresAtTime.toString(),\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n Cookies.set(this.istCookieName, IST, cookieOpts);\n }\n\n removeSessionCookie() {\n this.removeCookies([this.opaqueTokenCookieName, this.jwtCookieName]);\n }\n\n removeISTCookie() {\n this.removeCookies([this.istCookieName]);\n }\n\n removeCookies(cookiesToRemove: string[]) {\n /**\n * Spray and Pray approach:\n * In order to delete a cookie, both the path and domain must match exactly\n * We don't always know how the cookie was set - we can use the path & info that the SDK was created with\n * but if the SDK settings have changed (e.g. a dev is developing) then things might get strange.\n * Note: it is _impossible_ to reliably delete a cookie if you don't know what path it was set at - thank,; internet\n * Our best effort approach is to just list off the likely combinations\n *\n * As of 2025-07-14, we track all domains that have been used to set cookies and try to delete\n * cookies from all of them to handle cases where domains change (e.g. something.com -> web.something.com)\n */\n\n // Get all previously seen domains\n const trackedDomains = this.getSeenDomains();\n // Include the current domain and null (no domain) in our attempts\n const allDomains = [this._domain, null, ...trackedDomains];\n // Remove duplicates\n const uniqueDomains = [...new Set(allDomains)];\n\n [true, false].forEach((availableToSubdomains) => {\n [this._cookiePath, null].forEach((path) => {\n uniqueDomains.forEach((domain) => {\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: new Date(0).toString(),\n availableToSubdomains,\n path,\n domain,\n });\n cookiesToRemove.forEach((cookieName) => {\n Cookies.remove(cookieName, cookieOpts);\n });\n });\n });\n });\n }\n\n syncToLocalStorage(): void {\n this._localStorage.setItem('', JSON.stringify(this.state));\n }\n\n getItem(key: StorageKey): string | null {\n return this._localStorage.getItem(key);\n }\n\n setItem(key: StorageKey, value: string): void {\n this._localStorage.setItem(key, value);\n }\n\n removeItem(key: StorageKey): void {\n this._localStorage.removeItem(key);\n }\n\n /**\n * Get all previously seen domains from local storage\n */\n private getSeenDomains(): string[] {\n const storedDomains = this.getItem(SEEN_DOMAINS_KEY);\n\n if (!storedDomains) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(storedDomains);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n /**\n * Add a domain to the seen domains list\n */\n private addSeenDomain(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n const storedDomains = this.getSeenDomains();\n if (!storedDomains.includes(domain)) {\n storedDomains.push(domain);\n this.setItem(SEEN_DOMAINS_KEY, JSON.stringify(storedDomains));\n }\n }\n\n static generateCookieOpts({\n path,\n domain,\n availableToSubdomains,\n expiresAt,\n }: {\n path: string | null;\n domain: string | null;\n availableToSubdomains: boolean;\n expiresAt: string;\n }): Cookies.CookieAttributes {\n const cookieOpts: Cookies.CookieAttributes = {\n expires: new Date(expiresAt),\n sameSite: 'lax',\n };\n\n if (path) {\n cookieOpts.path = path;\n }\n\n if (isLocalhost()) {\n // We do not require HTTPS for localhost / local development\n // TODO: Could investigate disabling HTTPS for test projects\n cookieOpts.secure = false;\n } else {\n if (availableToSubdomains) {\n // Domain must be expressly configured in order for the cookie to\n // be sent to subdomains\n // UNLESS it is localhost, in which case domain should not be set\n // cf. https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain\n cookieOpts.domain = domain || window.location.host;\n }\n cookieOpts.secure = true;\n }\n return cookieOpts;\n }\n}\n\nexport class ConsumerSubscriptionDataLayer extends SubscriptionDataLayer<ConsumerState> {}\nexport class B2BSubscriptionDataLayer extends SubscriptionDataLayer<B2BState> {}\n\n/**\n * We want multiple instances of the same Stytch SDK for the same project in the same page to\n * effectively share state - to do this, we create a single cache for the data layer.\n * In order to preserve the cache state across project hot module reloads, we bind it to\n * the global window object using a stytch-internal symbol.\n *\n * This also allows various StytchClients to communicate across package boundaries -\n * consider the following scenario:\n * - Next App splits out bundles per-page\n * - Next App uses Headless Client on all pages, and UI Client on one page\n * - UI client page includes its own copy of Headless Client (since UI depends on Headless CLient)\n * - B/C of code splitting & recombining, if someone navigates from a Headless page to a UI page\n * the there will actually be two copies of the HeadlessClient loaded,\n * one in the main bundle, and one included inside the UI Client code\n * - So using an in-memory global object will not suffice, we'll end up with two global objects in two diff packages\n */\ntype ConsumerDataLayerCache = Record<string, SubscriptionDataLayer<ConsumerState>>;\ntype B2BDataLayerCache = Record<string, SubscriptionDataLayer<B2BState>>;\n\nconst consumerDataLayerCacheSymbol = Symbol.for('__stytch_DataLayer');\nconst b2bDataLayerCacheSymbol = Symbol.for('__stytch_b2b_DataLayer');\n\nconst getConsumerDataLayerCache = (): ConsumerDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[consumerDataLayerCacheSymbol]) {\n wdw[consumerDataLayerCacheSymbol] = {};\n }\n return wdw[consumerDataLayerCacheSymbol];\n};\n\nconst getB2BDataLayerCache = (): B2BDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[b2bDataLayerCacheSymbol]) {\n wdw[b2bDataLayerCacheSymbol] = {};\n }\n return wdw[b2bDataLayerCacheSymbol];\n};\n\nexport const __clearConsumerDataLayerCache = () => {\n const dataLayerCache = getConsumerDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const __clearB2BDataLayerCache = () => {\n const dataLayerCache = getB2BDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const getConsumerDataLayer = (\n publicToken: string,\n options?: StytchClientOptions,\n): ConsumerSubscriptionDataLayer => {\n const dataLayerCache = getConsumerDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new ConsumerSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nexport const getB2BDataLayer = (publicToken: string, options?: StytchClientOptions): B2BSubscriptionDataLayer => {\n const dataLayerCache = getB2BDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new B2BSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nconst addSubscriber = <T>(collection: Subscribers<T>, subscriber: SubscriberFunction<T>): UnsubscribeFunction => {\n const uniqueId = Math.random().toString(36).slice(-10);\n collection[uniqueId] = subscriber;\n return () => delete collection[uniqueId];\n};\n\nconst notifySubscribers = <T>(collection: Subscribers<T>, value: T | null): void => {\n Object.values(collection).forEach((cb) => cb(value));\n};\n\ntype StateWithReadableTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: string;\n session_jwt: string;\n};\n\ntype StateIfOpaqueTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: true;\n session_jwt: true;\n};\n\ntype StateWithTokensLoggedIn<T> = StateWithReadableTokensLoggedIn<T> | StateIfOpaqueTokensLoggedIn<T>;\n\ntype StateWithTokensLoggedOut = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: null;\n};\n\ntype StateWithReadableIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: string;\n};\n\ntype StateWithOpaqueIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: true;\n};\n\ntype StateWithIntermediateSessionToken =\n | StateWithReadableIntermediateSessionToken\n | StateWithOpaqueIntermediateSessionToken;\n\ntype StateWithTokensDiff<T> = StateWithTokensLoggedIn<T> | StateWithTokensLoggedOut | StateWithIntermediateSessionToken;\n\nconst deepEqualData = createDeepEqual({\n KEYS_TO_EXCLUDE: ['last_accessed_at'],\n});\n\nexport class BaseSubscriptionService<T extends ConsumerState | B2BState, TOpaqueTokens extends AllowedOpaqueTokens>\n implements ISubscriptionService<T, TOpaqueTokens>\n{\n /**\n * Whether the state was retrieved from the cache and is awaiting a refresh\n */\n private fromCache = true;\n\n constructor(\n private _publicToken: string,\n private _datalayer: SubscriptionDataLayer<T>,\n { usingCustomApiEndpoint }: { usingCustomApiEndpoint: boolean },\n ) {\n window.addEventListener('storage', this._listen);\n\n // If a custom API endpoint is being used, the session may be being managed\n // by HttpOnly cookies, which we can't detect.\n if (!usingCustomApiEndpoint) {\n // If the session does not exist in localstorage (like if we are in an iframe)\n // then the cookie might still be set and we can retrieve the session via an API call\n const { session_token } = this._datalayer.readSessionCookie();\n if (!session_token) {\n this.destroySession();\n return;\n }\n }\n }\n\n // Listening for state changes across tabs\n private _listen = (e: StorageEvent) => {\n if (e.key !== getPersistentStorageKey(this._publicToken, '')) {\n return;\n }\n\n const parsedValue = e.newValue === null || e.newValue === 'null' ? null : (JSON.parse(e.newValue) as T);\n this.updateState(parsedValue, true);\n };\n\n getTokens(): IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null> {\n const { session_token, session_jwt } = this._datalayer.readSessionCookie();\n if (!(typeof session_token === 'string') || !(typeof session_jwt === 'string')) {\n return null as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n return { session_token, session_jwt } as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n\n getIntermediateSessionToken(): string | null {\n return this._datalayer.readIntermediateSessionTokenCookie() || null;\n }\n\n destroyState() {\n this.updateStateAndTokens({\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: null,\n });\n }\n\n destroySession() {\n this._datalayer.removeSessionCookie();\n this.updateState(null);\n }\n\n _updateStateAndTokensInternal(stateDiff: StateWithTokensDiff<T>, options: InternalSessionUpdateOptions) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = stateDiff.state === null ? null : ({ ...this._datalayer.state, ...stateDiff.state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n // NOTE: This means that our tab executes first before we signal the state change to other tabs\n // TODO: Should we avoid notifying subscribers in the same thread? Should we put\n // notifications in a setImmediate or setTimeout(..., 0)?\n // Should subscribers let us know if they are active/passive when they sign up?\n if (wasCached || !deepEqualData(oldStateValue, newStateValue)) {\n let notification: (T & SessionUpdateOptions) | null;\n if (newStateValue == null || options.fromCache) {\n notification = newStateValue;\n } else {\n notification = {\n ...newStateValue,\n sessionDurationMinutes: options.sessionDurationMinutes,\n };\n }\n\n notifySubscribers(this._datalayer.subscriptions, notification);\n }\n }\n\n updateStateAndTokens(\n stateDiff: StateWithTokensDiff<T>,\n options: InternalSessionUpdateOptions = { fromCache: false },\n ) {\n if (stateDiff.state) {\n if (typeof stateDiff.session_token === 'string') {\n this._datalayer.writeSessionCookie(stateDiff);\n } else {\n // The session token is opaque, so let's clear any residual session\n // cookies that may have been left over\n this._datalayer.removeSessionCookie();\n }\n this._datalayer.removeISTCookie();\n } else if (stateDiff.intermediate_session_token) {\n if (typeof stateDiff.intermediate_session_token === 'string') {\n this._datalayer.writeIntermediateSessionTokenCookie(stateDiff.intermediate_session_token);\n } else {\n // The intermediate session token is opaque, so let's clear any residual\n // intermediate session token cookies that may have been left over\n this._datalayer.removeISTCookie();\n }\n this._datalayer.removeSessionCookie();\n } else {\n this._datalayer.removeSessionCookie();\n this._datalayer.removeISTCookie();\n }\n\n this._updateStateAndTokensInternal(stateDiff, options);\n\n this._datalayer.syncToLocalStorage();\n }\n\n updateState(state: T | null, fromExternalSource = false) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = state === null ? null : ({ ...this._datalayer.state, ...state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n const hasStateChanged = !deepEqualData(oldStateValue, newStateValue);\n if (wasCached || hasStateChanged) {\n notifySubscribers(this._datalayer.subscriptions, newStateValue);\n\n // If there is no state change, or if this update was itself triggered by\n // a storage event, there is no need to sync to local storage since the\n // state is already in sync.\n if (hasStateChanged && !fromExternalSource) {\n // Delay notifying other tabs until after we have refreshed ourselves\n this._datalayer.syncToLocalStorage();\n }\n }\n }\n\n updateTokens(tokens: SessionTokensUpdate) {\n const { session_token, session_jwt } = tokens;\n const cookie = this._datalayer.readSessionCookie();\n const diff = {\n ...cookie,\n session_token,\n session_jwt,\n } as StateWithTokensDiff<T>;\n if (typeof session_token === 'string' || typeof session_jwt === 'string') {\n this._datalayer.writeSessionCookie(diff as StateWithReadableTokensLoggedIn<T>);\n this._datalayer.removeISTCookie();\n } else {\n this._datalayer.removeSessionCookie();\n }\n }\n\n subscribeToState(callback: SubscriberFunction<T & SessionUpdateOptions>): UnsubscribeFunction {\n return addSubscriber(this._datalayer.subscriptions, callback);\n }\n\n getState(): T | null {\n return this._datalayer.state;\n }\n\n destroy() {\n window.removeEventListener('storage', this._listen);\n }\n\n syncFromDeviceStorage() {\n return null;\n }\n\n getFromCache(): boolean {\n return this.fromCache;\n }\n\n setCacheRefreshed() {\n this.fromCache = false;\n }\n}\n\nexport class ConsumerSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<ConsumerState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IConsumerSubscriptionService<TProjectConfiguration>\n{\n updateUser = (user: User) => this.updateState({ user });\n getUser = () => this.getState()?.user ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IConsumerSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n const { session, user, session_jwt, session_token } = resp;\n\n if (session_token && session_jwt) {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_jwt,\n session_token,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_token: true,\n session_jwt: true,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Args extends [] | [options?: CommonAuthenticateOptions] | (string | CommonAuthenticateOptions)[],\n Ret extends AuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig> | null,\n >(\n authenticate: (...args: Args) => Promise<Ret>,\n ): ((...args: Args) => Promise<Ret>) =>\n async (...args) => {\n const resp = await authenticate(...args);\n if (resp != null) {\n const options = args.find((a): a is CommonAuthenticateOptions => a != null && !(typeof a === 'string'));\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n }\n return resp;\n };\n}\n\nexport class B2BSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<B2BState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IB2BSubscriptionService<TProjectConfiguration>\n{\n updateMember = (member: Member) => this.updateState({ member });\n getMember = () => this.getState()?.member ?? null;\n updateOrganization = (organization: Organization) => this.updateState({ organization });\n getOrganization = () => this.getState()?.organization ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IB2BSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n if ('member_session' in resp && resp.member_session) {\n const tokens =\n resp.session_token && resp.session_jwt\n ? { session_token: resp.session_token, session_jwt: resp.session_jwt }\n : ({ session_token: true, session_jwt: true } as const);\n\n this.updateStateAndTokens(\n {\n state: {\n session: resp.member_session,\n member: resp.member,\n organization: resp.organization,\n },\n ...tokens,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: resp.intermediate_session_token || true,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Options extends CommonAuthenticateOptions | undefined,\n Ret extends\n | B2BAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BAuthenticateResponseWithMFA<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BDiscoveryAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>,\n >(\n authenticate: (options: Options) => Promise<Ret>,\n ): ((options: Options) => Promise<Ret>) =>\n async (options) => {\n const resp = await authenticate(options);\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n return resp;\n };\n}\n","import {\n CLIENTSIDE_SERVICES_IFRAME_URL,\n InternalStytchClientOptions,\n getDFPBackendURL,\n getDFPCdnURL,\n getLiveApiURL,\n getTestApiURL,\n validateInDev,\n isTestPublicToken,\n} from '@stytch/core';\nimport { StytchClientOptions } from '@stytch/core/public';\n\nexport const buildFinalConfig = (clientName: string, opts: InternalStytchClientOptions = {}) => {\n const { cookieOptions, keepSessionAlive } = opts;\n\n validateInDev(clientName, opts, {\n keepSessionAlive: 'optionalBoolean',\n });\n\n if (cookieOptions) {\n validateInDev(`${clientName}.cookieOptions`, cookieOptions, {\n opaqueTokenCookieName: 'optionalString',\n jwtCookieName: 'optionalString',\n istCookieName: 'optionalString',\n path: 'optionalString',\n domain: 'optionalString',\n });\n }\n\n return {\n cookieOptions,\n keepSessionAlive,\n endpoints: {\n testAPIURL: getTestApiURL(opts),\n liveAPIURL: getLiveApiURL(opts),\n dfpBackendURL: getDFPBackendURL(opts),\n dfpCdnURL: getDFPCdnURL(opts),\n clientsideServicesIframeURL: opts?.endpoints?.clientsideServicesIframeURL ?? CLIENTSIDE_SERVICES_IFRAME_URL,\n },\n };\n};\n\n/**\n * rawOptions should be the original object passed into the client, not the output from buildFinalConfig\n */\nexport const hasCustomApiEndpoint = (token: string, rawOptions: StytchClientOptions = {}) => {\n // endpointOptions is deprecated, but we still need to account for it\n const { customBaseUrl, endpointOptions } = rawOptions;\n return isTestPublicToken(token)\n ? !!(customBaseUrl || endpointOptions?.testApiDomain)\n : !!(customBaseUrl || endpointOptions?.apiDomain);\n};\n","import type { SessionDurationOptions } from '@stytch/core/public';\n\nfunction isHandledTokenType<HandledTokenType extends string>(\n handledTypes: HandledTokenType[],\n tokenType: string,\n): tokenType is HandledTokenType {\n return handledTypes.includes(tokenType as HandledTokenType);\n}\n\nexport const clearStytchTokenParams = () => {\n const url = removeStytchTokenParams(window.location.toString());\n window.history.replaceState(null, document.title, url);\n};\n\nexport type ParseAuthenticateUrl<HandledTokenType extends string> = (\n href?: string,\n) =>\n | { handled: true; token: string; tokenType: HandledTokenType }\n | { handled: false; token: string; tokenType: string }\n | null;\n\nexport type AuthenticateByUrl<TokenType extends string> = (\n options: {\n /**\n * Clear token and stytch_token_type URL params after authenticate is called.\n * @default true if the href parameter is window.location.href (the default)\n **/\n clearParams?: boolean;\n } & SessionDurationOptions,\n\n /**\n * Allow overriding URL where the token and stytch_token_type params are extracted from.\n * You usually would not need to set this.\n * @default window.location.href\n */\n href?: string,\n) => Promise<\n | {\n handled: true;\n tokenType: TokenType;\n data: unknown;\n }\n | {\n handled: false;\n tokenType: string;\n token: string;\n }\n | null\n>;\n\n/**\n * Creates both parseAuthenticateUrl and authenticateByUrl from the set of handlers passed in to ensure\n * both functions agree on what is handled.\n */\nexport const createAuthUrlHandler = <HandledTokenType extends string = string>(\n handlers: Record<HandledTokenType, (token: string, options: SessionDurationOptions) => Promise<unknown>>,\n) => {\n const handledTokenTypes = Object.keys(handlers) as HandledTokenType[];\n\n const parseAuthenticateUrl: ParseAuthenticateUrl<HandledTokenType> = (href = window.location.href) => {\n const url = new URL(href);\n const tokenType = url.searchParams.get('stytch_token_type');\n const token = url.searchParams.get('token');\n if (!token || !tokenType) {\n return null;\n }\n\n if (isHandledTokenType(handledTokenTypes, tokenType)) {\n return {\n handled: true,\n token,\n tokenType,\n };\n }\n\n return {\n handled: false,\n token,\n tokenType,\n };\n };\n\n const authenticateByUrl: AuthenticateByUrl<HandledTokenType> = async (\n { clearParams, ...options },\n href = window.location.href,\n ) => {\n const shouldClearParams = clearParams ?? href === window.location.href;\n const parsed = parseAuthenticateUrl(href);\n if (parsed == null) return null;\n if (!parsed.handled) return parsed;\n\n const { token, tokenType } = parsed;\n const handler = handlers[tokenType as HandledTokenType];\n try {\n const data = await handler(token, options);\n return {\n handled: true,\n tokenType: tokenType as HandledTokenType,\n data,\n };\n } finally {\n if (shouldClearParams) {\n clearStytchTokenParams();\n }\n }\n };\n\n return {\n authenticateByUrl,\n parseAuthenticateUrl,\n };\n};\n\n// Exported for testing\nexport function removeStytchTokenParams(href: string) {\n const url = new URL(href);\n const params = url.searchParams;\n\n params.delete('token');\n params.delete('stytch_token_type');\n\n return url;\n}\n","/* eslint-disable lingui/no-unlocalized-strings -- user-facing strings in this file can be overridden using different APIs */\n\nimport { IDPConsentItem } from '@stytch/core/public';\nimport { RBACPolicyRaw } from '@stytch/core';\n\nconst OPENID_CONSENT_ITEM: IDPConsentItem = {\n text: 'Verify your identity',\n details: ['View information stored within your account'],\n};\n\n// Full Access didn't really make the cut\n// const FULL_ACCESS_CONSENT_ITEM: IDPConsentItem = {\n// text: 'Act on behalf of you',\n// details: [],\n// };\n\nconst PROFILE_CONSENT_ITEM: IDPConsentItem = {\n text: 'View your personal profile information',\n details: [],\n};\n\nconst OFFLINE_ACCESS_CONSENT_ITEM: IDPConsentItem = {\n text: \"Maintain access to your data even when you're not actively using the app\",\n details: [\n 'Access your data even when you are offline.',\n 'Synchronize data and process background tasks on your behalf.',\n ],\n};\n\nconst OPENID_SCOPE = 'openid';\nconst PROFILE_SCOPE = 'profile';\nconst EMAIL_SCOPE = 'email';\nconst PHONE_SCOPE = 'phone';\nconst FULL_ACCESS_SCOPE = 'full_access';\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nconst DEFAULT_SCOPES = new Set([\n OPENID_SCOPE,\n PROFILE_SCOPE,\n EMAIL_SCOPE,\n PHONE_SCOPE,\n FULL_ACCESS_SCOPE,\n OFFLINE_ACCESS_SCOPE,\n]);\n\n// Scope is an optional param in OAuth2.1\n// When no scope is present, this is what we default to\nconst FALLBACK_SCOPES = [OPENID_SCOPE, EMAIL_SCOPE, PROFILE_SCOPE];\n\nexport const containsCustomScopes = (scope: string): boolean => {\n // set.difference is not in ES2015\n return scope.split(' ').some((sc) => !DEFAULT_SCOPES.has(sc));\n};\n\nexport const createBuiltinScopeDescriptions = (scopes: string[]): IDPConsentItem[] => {\n const descriptions: IDPConsentItem[] = [];\n\n if (scopes.includes(OPENID_SCOPE)) {\n descriptions.push(OPENID_CONSENT_ITEM);\n }\n\n if (scopes.includes(EMAIL_SCOPE) || scopes.includes(PROFILE_SCOPE) || scopes.includes(PHONE_SCOPE)) {\n descriptions.push(\n createProfileScopeDescription({\n containsEmail: scopes.includes(EMAIL_SCOPE),\n containsPhoneNumber: scopes.includes(PHONE_SCOPE),\n containsProfile: scopes.includes(PROFILE_SCOPE),\n }),\n );\n }\n\n // if (scopes.has(FULL_ACCESS_SCOPE)) {\n // descriptions.push();\n // }\n\n if (scopes.includes(OFFLINE_ACCESS_SCOPE)) {\n descriptions.push(OFFLINE_ACCESS_CONSENT_ITEM);\n }\n\n return descriptions;\n};\n\nconst createProfileScopeDescription = ({\n containsProfile,\n containsEmail,\n containsPhoneNumber,\n}: {\n containsProfile: boolean;\n containsEmail: boolean;\n containsPhoneNumber: boolean;\n}): IDPConsentItem => {\n const details = [];\n if (containsProfile) {\n details.push('Your name, profile picture, and language preferences');\n }\n if (containsEmail) {\n details.push('Your email address');\n }\n if (containsPhoneNumber) {\n details.push('Your phone number');\n }\n\n return {\n text: PROFILE_CONSENT_ITEM.text,\n details: details,\n };\n};\n\nexport const createCustomScopeDescriptions = (scopes: string[], rbacPolicy: RBACPolicyRaw | null): string[] => {\n if (!rbacPolicy) return [];\n\n const descriptions: string[] = [];\n\n for (const scope of scopes) {\n if (DEFAULT_SCOPES.has(scope)) continue;\n const found = rbacPolicy.scopes.find((policyScope) => policyScope.scope === scope);\n if (found && found.description) {\n descriptions.push(found.description);\n } else {\n descriptions.push(`Use the ${scope} scope`);\n }\n }\n\n return descriptions;\n};\n\nexport const fallbackConsentManifestGenerator = ({\n scopes,\n clientName,\n rbacPolicy,\n}: {\n scopes: string[];\n clientName: string;\n rbacPolicy: RBACPolicyRaw | null;\n}) => {\n return [\n {\n header: `${clientName} is requesting to:`,\n items: createBuiltinScopeDescriptions(scopes).concat(createCustomScopeDescriptions(scopes, rbacPolicy)),\n },\n ];\n};\n\nexport type OAuthAuthorizeParams = {\n // Required.\n client_id: string;\n redirect_uri: string;\n // Required, but has default\n response_type: string;\n scopes: string[];\n // Optional.\n code_challenge?: string;\n state?: string;\n nonce?: string;\n prompt?: string;\n resources?: string[];\n};\n\nexport type OAuthLogoutParams = {\n // Required.\n client_id: string;\n post_logout_redirect_uri: string;\n // Optional.\n id_token_hint?: string;\n state?: string;\n};\n\nexport type IDPFlowParams =\n | { type: 'Authorize'; params: OAuthAuthorizeParams }\n | { type: 'Logout'; params: OAuthLogoutParams };\n\n/**\n * Parse the OAuth Authorize params from the URL search parameters to pass in to subsequent OAuthAuthorize calls.\n *\n * @param params - The URL search parameters to parse.\n * @returns The parsed OAuth Authorize parameters.\n */\nexport const parseOAuthAuthorizeParams = (\n params: URLSearchParams,\n): { error: string | null; result: OAuthAuthorizeParams } => {\n const authorizeParams: OAuthAuthorizeParams = {\n client_id: '',\n redirect_uri: '',\n // As of writing, ChatGPT isn't sending `response_type` when making calls to our\n // authorization endpoint, even though it's technically a required field in the spec.\n // We default it to 'code' here and server-side.\n // See: https://stytchio.slack.com/archives/C07U0MHAH7G/p1749075544763149.\n response_type: 'code',\n // Default to this initial set of scopes when the client does not provide this param\n scopes: [...FALLBACK_SCOPES],\n };\n\n const requiredFields = ['client_id', 'redirect_uri'] as const;\n for (const field of requiredFields) {\n const value = params.get(field);\n if (!value) {\n return {\n error: `Required parameter is missing: ${field}. Please reach out to the application developer.`,\n result: authorizeParams,\n };\n }\n authorizeParams[field] = value;\n }\n\n const optionalStringFields = ['response_type', 'scope', 'code_challenge', 'state', 'nonce', 'prompt'] as const;\n for (const field of optionalStringFields) {\n const value = params.get(field);\n if (value) {\n if (field === 'scope') {\n authorizeParams.scopes = value.split(' ').filter(Boolean);\n } else {\n authorizeParams[field] = value;\n }\n }\n }\n\n if (params.has('resource')) {\n authorizeParams.resources = params.getAll('resource');\n }\n\n return { error: null, result: authorizeParams };\n};\n\nexport const parseOAuthLogoutParams = (\n params: URLSearchParams,\n): { error: string | null; result: OAuthLogoutParams } => {\n const logoutParams: OAuthLogoutParams = {\n client_id: '',\n post_logout_redirect_uri: '',\n };\n\n const requiredFields = ['client_id', 'post_logout_redirect_uri'] as const;\n for (const field of requiredFields) {\n const value = params.get(field);\n if (!value) {\n return {\n error: `Required parameter is missing: ${field}. Please reach out to the application developer.`,\n result: logoutParams,\n };\n }\n logoutParams[field] = value;\n }\n\n logoutParams.id_token_hint = params.get('id_token_hint') || undefined;\n logoutParams.state = params.get('state') || undefined;\n\n return { error: null, result: logoutParams };\n};\n\n/**\n * Parse generic IDP parameters and determine if it is an Authorize or Logout request.\n */\nexport const parseIDPParams = (searchParams: string): { error: string | null; flow: IDPFlowParams } => {\n const params = new URLSearchParams(searchParams);\n\n // Check if `post_logout_redirect_uri` exists to determine if it's a Logout request.\n if (params.has('post_logout_redirect_uri')) {\n const logoutResult = parseOAuthLogoutParams(params);\n return { error: logoutResult.error, flow: { type: 'Logout', params: logoutResult.result } };\n }\n\n // Otherwise, assume it's an Authorize request.\n const authorizeResult = parseOAuthAuthorizeParams(params);\n return { error: authorizeResult.error, flow: { type: 'Authorize', params: authorizeResult.result! } };\n};\n"],"names":["TEST_API_URL","LIVE_API_URL","CLIENTSIDE_SERVICES_IFRAME_URL","STYTCH_DFP_BACKEND_URL","STYTCH_DFP_CDN_URL","GOOGLE_ONE_TAP_HOST","GOOGLE_ONE_TAP_SCRIPT_URL","DEFAULT_SESSION_DURATION_MINUTES","DEFAULT_OTP_EXPIRATION_MINUTES","MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING","RetriableErrorType","RetriableError","Error","type","constructor","retriableFetchSDK","method","finalURL","basicAuthHeader","xSDKClientHeader","xSDKParentHostHeader","body","retryCallback","req","baseFetchSDK","err","headers","Authorization","fetchOpts","JSON","stringify","credentials","resp","fetch","e","message","StytchAPIUnreachableError","status","respData","json","data","get","includes","respError","StytchAPISchemaError","StytchAPIError","text","baseSubmitFormSDK","bodyParams","finalBody","__Authorization","children","Object","entries","map","key","value","input","document","createElement","name","form","action","append","appendChild","submit","ModulePromiseCache","loadESModule","url","moduleFromGlobalScope","undefined","loadESModuleFromNetwork","Promise","resolve","reject","maybeScript","findScript","dataset","loaded","script","createScript","addEventListener","findScriptsInDom","querySelectorAll","scripts","setAttribute","head","getHttpsUrl","urlOrDomain","URL","hostname","STYTCH_BADGE","DEBUG","logger","debug","args","log","console","warn","error","getLiveApiURL","opts","domain","customBaseUrl","endpointOptions","apiDomain","httpsUrl","endpoints","liveAPIURL","getTestApiURL","testApiDomain","testAPIURL","trailer","checkPublicToken","publicToken","startsWith","checkNotSSR","window","checkB2BNotSSR","getDFPBackendURL","dfppaUrl","dfppaDomain","dfpBackendURL","getDFPCdnURL","dfpCdnUrl","dfpCdnDomain","isTestPublicToken","token","createEventId","uuidv4","createAppSessionId","createPersistentId","removeResponseCommon","request_id","status_code","rest","omitUser","__user","loadTelemetryJS","GetTelemetryID","DFPProtectedAuthProvider","state","bootstrapPromise","executeRecaptcha","isEnabled","then","enabled","getTelemetryID","getDFPTelemetryIDAndCaptcha","mode","dfp_telemetry_id","captcha_token","retryWithCaptchaAndDFP","RequiredCaptcha","bootstrapData","runDFPProtectedAuth","dfpProtectedAuthMode","DisabledDFPProtectedAuthProvider","ErrorMarshaller","inflate","ErrorClass","ErrorData","assign","setPrototypeOf","prototype","unmarshall","SDKAPIUnreachableError","StytchSDKSchemaError","StytchSDKAPIError","TypeError","SyntaxError","ReferenceError","RangeError","EvalError","URIError","DEFAULT_MAX_BATCH_SIZE","DEFAULT_INTERVAL_DURATION_MS","EventLogger","maxBatchSize","logEventURL","batch","setInterval","flush","bind","intervalDurationMs","logEvent","telemetry","event","push","length","batchToSubmit","DefaultDynamicConfig","pkceRequiredForEmailMagicLinks","HeadlessMagicLinksClient","email","authenticate","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","_passwordResetPKCEManager","loginOrCreate","options","code_challenge","getCodeChallenge","requestBody","send","isLoggedIn","getSession","endpoint","withUpdateSession","passwordResetPKPair","getPKPair","code_verifier","handlePKCEForAuthenticate","keyPair","startPKCETransaction","pkceManager","pkPair","fetchSDK","clearPKPair","siweRequiredForCryptoWallets","HeadlessCryptoWalletClient","_apiNetworkClient","session_duration_minutes","crypto_wallet_address","crypto_wallet_type","signature","authenticateStart","siwe_params","uri","location","origin","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","resetByEmail","resetByExistingPassword","resetBySession","password","existing_password","new_password","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_expiration_minutes","reset_password_template_id","locale","strengthCheck","WILDCARD_ACTION","RBACPolicy","rolesByID","resources","roles","forEach","role","role_id","fromJSON","mergeWithCustomRoles","customRoles","mergedRoles","callerIsAuthorized","memberRoles","resourceId","roleId","filter","v","flatMap","permissions","permission","resource_id","find","actions","allPermissionsForCaller","allPermsMap","resource","HeadlessB2BMagicLinksClient","discovery","invite","loginOrSignup","pkce_code_challenge","pkce_code_verifier","intermediate_session_token","getIntermediateSessionToken","HeadlessB2BPasswordsClient","organization_id","email_address","discovery_redirect_url","verify_email_template_id","password_reset_token","IframeHostClient","frame","iframeURL","createIframe","existingIframe","querySelector","src","style","position","width","height","border","once","call","channel","MessageChannel","port1","onmessage","close","success","payload","contentWindow","postMessage","port2","SearchDataManager","searchUser","searchMember","shouldTryRefresh","session","SessionManagerRegistry","hasWarned","registry","Map","register","sessionManager","otherManager","cancelBackgroundRefresh","set","unregister","delete","SessionManager","REFRESH_INTERVAL_MS","timeout","lastAuthenticationSessionDuration","_publicToken","_headlessSessionClient","_options","_onDataChange","sessionDurationMinutes","scheduleBackgroundRefresh","_reauthenticateWithBackoff","count","keepSessionAlive","isUnrecoverableError","done","setTimeout","timeoutForAttempt","subscribeToState","performBackgroundRefresh","catch","destroySession","clearTimeout","Math","min","jitter","floor","random","delayMS","UNRECOVERABLE_ERROR_TYPES","error_type","StateChangeClient","emptyState","onStateChange","callback","VERTICAL_B2B","VERTICAL_CONSUMER","BOOTSTRAP_CACHE_KEY","DEFAULT_BOOTSTRAP","displayWatermark","projectName","cnameDomain","emailDomains","captchaSettings","pkceRequiredForOAuth","pkceRequiredForSso","slugPattern","createOrganizationEnabled","passwordConfig","rbacPolicy","vertical","BootstrapDataManager","_bootstrapDataPromise","_dataLayer","mapBootstrapData","setItem","response","password_config","ludsComplexity","luds_complexity","ludsMinimumCount","luds_minimum_count","project_name","disable_sdk_watermark","captcha_settings","cname_domain","email_domains","pkce_required_for_email_magic_links","pkce_required_for_password_resets","pkce_required_for_oauth","pkce_required_for_sso","slug_pattern","create_organization_enabled","dfp_protected_auth_enabled","dfp_protected_auth_mode","rbac_policy","siwe_required_for_crypto_wallets","getSync","cached","getItem","parse","getAsync","loadRecaptchaClient","siteKey","grecaptcha","enterprise","CaptchaProvider","captchaClient","configured","ready","execute","ClientsideServicesProvider","_frameClient","oneTapStart","oneTapSubmit","parsedPhoneNumber","getExamplePhoneNumber","frameClient","handlerName","NetworkClient","eventLogger","baseURL","_subscriptionDataLayer","_liveAPIURL","_testAPIURL","additionalTelemetryDataFn","updateSessionToken","buildSDKUrl","details","createTelemetryBlob","public_token","event_name","error_code","error_description","http_status_code","event_id","app_session_id","persistent_id","client_sent_at","Date","toISOString","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","app","identifier","sdk","version","PACKAGE_VERSION","sessionToken","readSessionCookie","session_token","btoa","submitFormSDK","navigatorSupportsFedCM","getConfiguredEmbeddedMode","OneTapPositions","forceLegacyEmbedded","embeddedOnly","embedded","floatingOrEmbedded","getShouldRenderEmbeddedOneTap","embeddedMode","getShouldRenderFloatingOneTap","getRenderedOneTapMode","GoogleOneTapClient","_clientId","_googleClient","cancel","render","onOneTapCancelled","cancelOnTapOutside","shouldRenderEmbeddedOneTap","config","client_id","auto_select","context","itp_support","use_fedcm_for_prompt","cancel_on_tap_outside","prompt_parent_id","initialize","prompt","notification","isSkippedMoment","reason","getSkippedReason","isNotDisplayed","getNotDisplayedReason","isDismissedMoment","styleFrame","Array","from","getElementsByTagName","loadGoogleOneTapClient","google","accounts","id","OneTapProvider","googleConfig","clientsideServices","createOnSuccessHandler","loginRedirectUrl","signupRedirectUrl","onSuccess","credential","redirect_url","submitGoogleOneTapToken","redirectOnSuccess","href","createOneTapClient","googleClientId","fetchGoogleStart","client","oauthCallbackId","idToken","loginRedirectURL","oauthCallbackID","signupRedirectURL","willGoogleOneTapShowEmbedded","ua","navigator","userAgent","uaContains","searchString","indexOf","isTabletUA","isMobileUA","PKCE_VERIFIER_STORAGE_KEY","toHex","n","str","toString","base64URLEncode","buf","String","fromCharCode","Uint8Array","replace","PKCEManager","namespace","createProofkeyPair","serialized","removeItem","bytes","Uint32Array","crypto","getRandomValues","codeVerifier","join","digest","subtle","TextEncoder","encode","STYTCH_SESSION_COOKIE","STYTCH_SESSION_JWT_COOKIE","STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE","SEEN_DOMAINS_KEY","SubscriptionDataLayer","_opaqueTokenCookieName","_jwtCookieName","_cookiePath","_domain","_cookieAvailableToSubdomains","_istCookieName","subscriptions","_localStorage","browserSessionStorage","getKeyBoundStorage","safeLocalStorage","safeSessionStorage","cookieOptions","opaqueTokenCookieName","jwtCookieName","path","availableToSubdomains","istCookieName","localStorageState","parsedState","syncToLocalStorage","Cookies","session_jwt","readIntermediateSessionTokenCookie","writeSessionCookie","stateDiff","cookieOpts","generateCookieOpts","expiresAt","expires_at","addSeenDomain","alternateCookieOptions","hasMultipleCookies","remove","writeIntermediateSessionTokenCookie","IST","expiresAtTime","now","removeSessionCookie","removeCookies","removeISTCookie","cookiesToRemove","trackedDomains","getSeenDomains","allDomains","uniqueDomains","Set","cookieName","storedDomains","parsed","isArray","expires","sameSite","isLocalhost","secure","host","ConsumerSubscriptionDataLayer","B2BSubscriptionDataLayer","consumerDataLayerCacheSymbol","Symbol","for","b2bDataLayerCacheSymbol","getConsumerDataLayerCache","wdw","getB2BDataLayerCache","getConsumerDataLayer","dataLayerCache","getB2BDataLayer","addSubscriber","collection","subscriber","uniqueId","slice","notifySubscribers","values","cb","deepEqualData","createDeepEqual","KEYS_TO_EXCLUDE","BaseSubscriptionService","fromCache","_datalayer","usingCustomApiEndpoint","_listen","getPersistentStorageKey","parsedValue","newValue","updateState","getTokens","destroyState","updateStateAndTokens","_updateStateAndTokensInternal","oldStateValue","newStateValue","wasCached","getFromCache","setCacheRefreshed","fromExternalSource","hasStateChanged","updateTokens","tokens","cookie","diff","getState","destroy","removeEventListener","syncFromDeviceStorage","ConsumerSubscriptionService","updateUser","user","getUser","updateSession","a","B2BSubscriptionService","updateMember","member","getMember","updateOrganization","organization","getOrganization","member_session","buildFinalConfig","clientName","dfpCdnURL","clientsideServicesIframeURL","hasCustomApiEndpoint","rawOptions","isHandledTokenType","handledTypes","tokenType","clearStytchTokenParams","removeStytchTokenParams","history","replaceState","title","createAuthUrlHandler","handlers","handledTokenTypes","keys","parseAuthenticateUrl","searchParams","handled","authenticateByUrl","clearParams","shouldClearParams","handler","params","OPENID_CONSENT_ITEM","PROFILE_CONSENT_ITEM","OFFLINE_ACCESS_CONSENT_ITEM","OPENID_SCOPE","PROFILE_SCOPE","EMAIL_SCOPE","PHONE_SCOPE","FULL_ACCESS_SCOPE","OFFLINE_ACCESS_SCOPE","DEFAULT_SCOPES","FALLBACK_SCOPES","containsCustomScopes","scope","split","some","sc","has","createBuiltinScopeDescriptions","scopes","descriptions","createProfileScopeDescription","containsEmail","containsPhoneNumber","containsProfile","createCustomScopeDescriptions","found","policyScope","description","fallbackConsentManifestGenerator","header","items","concat","parseOAuthAuthorizeParams","authorizeParams","redirect_uri","response_type","requiredFields","field","result","optionalStringFields","Boolean","getAll","parseOAuthLogoutParams","logoutParams","post_logout_redirect_uri","id_token_hint","parseIDPParams","URLSearchParams","logoutResult","flow","authorizeResult"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,38]}