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

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 (695) hide show
  1. package/CHANGELOG.md +12 -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/compat.cjs +3645 -0
  11. package/dist/cjs/compat.cjs.map +1 -0
  12. package/dist/cjs/{idpHelpers-eUP8j58U.js → idpHelpers-Bj_7pbfW.js} +7 -191
  13. package/dist/cjs/idpHelpers-Bj_7pbfW.js.map +1 -0
  14. package/dist/cjs/{index-DfiRrtK8.js → index-Ni_dyEsz.js} +3 -3
  15. package/dist/cjs/{index-DfiRrtK8.js.map → index-Ni_dyEsz.js.map} +1 -1
  16. package/dist/cjs/index.cjs +220 -198
  17. package/dist/cjs/index.cjs.map +1 -1
  18. package/dist/cjs/index.headless.cjs +32 -32
  19. package/dist/cjs/index.headless.cjs.map +1 -1
  20. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js → passwordManagerDisableAutofillProps-DV31RTL_.js} +2 -2
  21. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js.map → passwordManagerDisableAutofillProps-DV31RTL_.js.map} +1 -1
  22. package/dist/cjs/{shadcn-Bbv2Hk3P.js → shadcn-B8TEzQMT.js} +99 -81
  23. package/dist/cjs/shadcn-B8TEzQMT.js.map +1 -0
  24. package/dist/cjs-dev/{StytchSSRProxy-D0B5PuT0.js → StytchSSRProxy-CxXsyme4.js} +186 -1
  25. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +1 -0
  26. package/dist/cjs-dev/adminPortal/index.cjs +102 -26
  27. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  28. package/dist/cjs-dev/b2b/index.cjs +180 -141
  29. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  30. package/dist/cjs-dev/b2b/index.headless.cjs +29 -28
  31. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  32. package/dist/cjs-dev/compat.cjs +3693 -0
  33. package/dist/cjs-dev/compat.cjs.map +1 -0
  34. package/dist/cjs-dev/{idpHelpers-DOOVv6dT.js → idpHelpers-BVMUYvt1.js} +22 -230
  35. package/dist/cjs-dev/idpHelpers-BVMUYvt1.js.map +1 -0
  36. package/dist/cjs-dev/{index-paeFcHjf.js → index-DdK3Jt4u.js} +3 -3
  37. package/dist/cjs-dev/{index-paeFcHjf.js.map → index-DdK3Jt4u.js.map} +1 -1
  38. package/dist/cjs-dev/index.cjs +225 -202
  39. package/dist/cjs-dev/index.cjs.map +1 -1
  40. package/dist/cjs-dev/index.headless.cjs +38 -37
  41. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  42. package/dist/cjs-dev/logger-CvOATP4R.js +28 -0
  43. package/dist/cjs-dev/logger-CvOATP4R.js.map +1 -0
  44. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js → passwordManagerDisableAutofillProps-D70WyvIu.js} +2 -2
  45. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js.map → passwordManagerDisableAutofillProps-D70WyvIu.js.map} +1 -1
  46. package/dist/cjs-dev/{shadcn-CdbmlhdF.js → shadcn-C9ClUju1.js} +103 -84
  47. package/dist/cjs-dev/shadcn-C9ClUju1.js.map +1 -0
  48. package/dist/esm/_virtual/index.mjs +4 -4
  49. package/dist/esm/_virtual/index3.mjs +3 -5
  50. package/dist/esm/_virtual/index3.mjs.map +1 -1
  51. package/dist/esm/_virtual/index4.mjs +5 -3
  52. package/dist/esm/_virtual/index4.mjs.map +1 -1
  53. package/dist/esm/_virtual/index6.mjs +2 -2
  54. package/dist/esm/_virtual/index7.mjs +2 -2
  55. package/dist/esm/adminPortal/index.mjs +4 -1
  56. package/dist/esm/adminPortal/index.mjs.map +1 -1
  57. package/dist/esm/b2b/index.mjs.map +1 -1
  58. package/dist/esm/compat.mjs +3 -0
  59. package/dist/esm/compat.mjs.map +1 -0
  60. package/dist/esm/node_modules/chroma-js/index.mjs +85 -0
  61. package/dist/esm/node_modules/chroma-js/index.mjs.map +1 -0
  62. package/dist/esm/node_modules/chroma-js/src/Color.mjs +53 -0
  63. package/dist/esm/node_modules/chroma-js/src/Color.mjs.map +1 -0
  64. package/dist/esm/node_modules/chroma-js/src/chroma.mjs +11 -0
  65. package/dist/esm/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  66. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  67. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  68. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  69. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  70. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs +92 -0
  71. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  72. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  73. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  74. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  75. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  76. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  77. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  78. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  79. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  80. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs +16 -0
  81. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  82. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  83. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  84. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  85. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  86. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  87. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  88. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  89. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  90. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  91. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  92. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  93. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  94. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  95. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  96. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  97. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  98. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  99. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  100. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  101. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  102. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  103. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  104. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  105. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  106. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  107. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  108. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  109. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  110. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  111. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  112. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  113. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  114. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  115. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  116. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  117. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  118. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  119. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  120. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  121. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  122. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  123. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  124. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  125. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  126. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  127. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  128. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  129. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  130. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  131. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  132. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  133. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  134. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  135. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  136. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  137. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  138. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  139. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  140. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  141. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  142. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  143. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  144. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  145. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  146. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  147. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  148. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  149. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  150. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  151. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  152. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  153. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  154. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  155. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  156. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  157. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  158. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  159. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  160. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  161. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  162. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  163. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  164. package/dist/esm/node_modules/chroma-js/src/io/input.mjs +7 -0
  165. package/dist/esm/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  166. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  167. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  168. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  169. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  170. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  171. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  172. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  173. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  174. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  175. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  176. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  177. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  178. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  179. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  180. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  181. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  182. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  183. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  184. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  185. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  186. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  187. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  188. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  189. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  190. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  191. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  192. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  193. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  194. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  195. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  196. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  197. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  198. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  199. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  200. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  201. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  202. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  203. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  204. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  205. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  206. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  207. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  208. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  209. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  210. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  211. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  212. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  213. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  214. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  215. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  216. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  217. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  218. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  219. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  220. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs +14 -0
  221. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  222. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  223. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  224. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  225. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  226. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  227. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  228. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  229. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  230. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs +44 -0
  231. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  232. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  233. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  234. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  235. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  236. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  237. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  238. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  239. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  240. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  241. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  242. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  243. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  244. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  245. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  246. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs +24 -0
  247. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  248. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs +11 -0
  249. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  250. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  251. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  252. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  253. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  254. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  255. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  256. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs +21 -0
  257. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  258. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  259. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  260. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  261. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  262. package/dist/esm/node_modules/chroma-js/src/version.mjs +5 -0
  263. package/dist/esm/node_modules/chroma-js/src/version.mjs.map +1 -0
  264. package/dist/esm/node_modules/lodash.merge/index.mjs +1 -1
  265. package/dist/esm/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  266. package/dist/esm/packages/core/src/rpc/FrameClient.mjs +1 -0
  267. package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  268. package/dist/esm/packages/web/messages/b2b/en.json.mjs +10 -3
  269. package/dist/esm/packages/web/messages/b2b/en.json.mjs.map +1 -1
  270. package/dist/esm/packages/web/messages/en.json.mjs +10 -3
  271. package/dist/esm/packages/web/messages/en.json.mjs.map +1 -1
  272. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  273. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  274. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  275. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  276. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  277. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  278. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  279. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  280. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  281. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  282. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  283. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  284. package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  285. package/dist/esm/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  286. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  287. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  288. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  289. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  290. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  291. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  292. package/dist/esm/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  293. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  294. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  295. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  296. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  297. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  298. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  299. package/dist/esm/packages/web/src/ui/b2b/utils.mjs +8 -1
  300. package/dist/esm/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  301. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  302. package/dist/esm/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  303. package/dist/esm/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  304. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  305. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  306. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  307. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  308. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +11 -70
  309. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  310. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +81 -0
  311. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  312. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  313. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  314. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs +117 -0
  315. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  316. package/dist/esm/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  317. package/dist/esm/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  318. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  319. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  320. package/dist/esm/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  321. package/dist/esm/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  322. package/dist/esm/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  323. package/dist/esm/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  324. package/dist/esm/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  325. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  326. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  327. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  328. package/dist/esm/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  329. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  330. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  331. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  332. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  333. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  334. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  335. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  336. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  337. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  338. package/dist/esm/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  339. package/dist/esm/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  340. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  341. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  342. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  343. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  344. package/dist/esm/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  345. package/dist/esm/packages/web/src/ui/components/organisms/OneTapError.mjs +1 -1
  346. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  347. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  348. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  349. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  350. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  351. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  352. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  353. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  354. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  355. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  356. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  357. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  358. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  359. package/dist/esm-dev/_virtual/index.mjs +4 -4
  360. package/dist/esm-dev/_virtual/index3.mjs +4 -4
  361. package/dist/esm-dev/_virtual/index6.mjs +2 -2
  362. package/dist/esm-dev/_virtual/index7.mjs +2 -2
  363. package/dist/esm-dev/adminPortal/index.mjs +4 -1
  364. package/dist/esm-dev/adminPortal/index.mjs.map +1 -1
  365. package/dist/esm-dev/b2b/index.mjs.map +1 -1
  366. package/dist/esm-dev/compat.mjs +3 -0
  367. package/dist/esm-dev/compat.mjs.map +1 -0
  368. package/dist/esm-dev/node_modules/chroma-js/index.mjs +85 -0
  369. package/dist/esm-dev/node_modules/chroma-js/index.mjs.map +1 -0
  370. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs +53 -0
  371. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs.map +1 -0
  372. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs +11 -0
  373. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  374. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  375. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  376. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  377. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  378. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs +92 -0
  379. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  380. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  381. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  382. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  383. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  384. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  385. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  386. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  387. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  388. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs +16 -0
  389. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  390. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  391. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  392. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  393. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  394. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  395. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  396. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  397. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  398. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  399. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  400. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  401. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  402. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  403. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  404. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  405. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  406. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  407. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  408. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  409. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  410. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  411. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  412. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  413. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  414. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  415. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  416. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  417. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  418. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  419. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  420. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  421. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  422. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  423. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  424. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  425. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  426. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  427. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  428. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  429. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  430. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  431. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  432. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  433. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  434. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  435. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  436. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  437. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  438. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  439. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  440. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  441. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  442. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  443. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  444. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  445. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  446. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  447. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  448. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  449. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  450. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  451. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  452. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  453. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  454. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  455. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  456. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  457. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  458. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  459. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  460. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  461. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  462. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  463. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  464. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  465. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  466. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  467. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  468. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  469. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  470. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  471. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  472. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs +7 -0
  473. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  474. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  475. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  476. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  477. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  478. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  479. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  480. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  481. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  482. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  483. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  484. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  485. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  486. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  487. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  488. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  489. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  490. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  491. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  492. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  493. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  494. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  495. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  496. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  497. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  498. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  499. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  500. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  501. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  502. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  503. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  504. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  505. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  506. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  507. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  508. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  509. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  510. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  511. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  512. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  513. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  514. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  515. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  516. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  517. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  518. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  519. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  520. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  521. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  522. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  523. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  524. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  525. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  526. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  527. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  528. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs +14 -0
  529. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  530. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  531. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  532. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  533. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  534. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  535. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  536. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  537. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  538. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs +44 -0
  539. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  540. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  541. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  542. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  543. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  544. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  545. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  546. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  547. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  548. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  549. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  550. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  551. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  552. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  553. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  554. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs +24 -0
  555. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  556. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs +11 -0
  557. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  558. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  559. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  560. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  561. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  562. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  563. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  564. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs +21 -0
  565. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  566. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  567. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  568. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  569. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  570. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs +5 -0
  571. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs.map +1 -0
  572. package/dist/esm-dev/node_modules/lodash.merge/index.mjs +1 -1
  573. package/dist/esm-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  574. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs +1 -0
  575. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  576. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs +10 -3
  577. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs.map +1 -1
  578. package/dist/esm-dev/packages/web/messages/en.json.mjs +10 -3
  579. package/dist/esm-dev/packages/web/messages/en.json.mjs.map +1 -1
  580. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  581. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  582. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  583. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  584. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  585. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  586. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  587. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  588. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  589. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  590. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  591. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  592. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  593. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  594. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  595. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  596. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  597. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  598. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  599. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  600. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  601. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  602. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  603. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  604. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  605. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  606. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  607. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs +8 -1
  608. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  609. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  610. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  611. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  612. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  613. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  614. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  615. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  616. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +11 -70
  617. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  618. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +81 -0
  619. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  620. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  621. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  622. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs +165 -0
  623. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  624. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  625. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  626. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  627. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  628. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  629. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  630. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  631. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  632. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  633. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  634. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  635. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  636. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  637. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  638. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  639. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  640. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  641. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  642. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  643. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  644. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  645. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  646. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  647. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  648. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  649. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  650. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  651. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  652. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  653. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  654. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  655. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  656. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  657. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  658. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  659. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  660. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  661. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  662. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  663. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  664. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  665. package/dist/types/PresentationConfig-Bqzf8zr3.d.ts +168 -0
  666. package/dist/types/{StytchB2BClient-Dq-ITB7Q.d.ts → StytchB2BClient-CsY7ZNKh.d.ts} +2 -1
  667. package/dist/types/{StytchClient-BV0sT3Ox.d.ts → StytchClient-DZRM_fM4.d.ts} +2 -2
  668. package/dist/types/adminPortal/index.d.ts +7 -4
  669. package/dist/types/b2b/index.d.ts +14 -11
  670. package/dist/types/b2b/index.headless.d.ts +5 -4
  671. package/dist/types/compat.d.ts +46 -0
  672. package/dist/types/createAuthUrlHandler-BZoD2LDF.d.ts +2406 -0
  673. package/dist/types/idpHelpers-CD5sSDzA.d.ts +36 -0
  674. package/dist/types/index.d.ts +11 -8
  675. package/dist/types/index.headless.d.ts +5 -4
  676. package/dist/types/{shadcn-CFz8Asq0.d.ts → shadcn-4-5byj93.d.ts} +9 -171
  677. package/dist/types/{createAuthUrlHandler-Ck5TyB9J.d.ts → ui-DXrQ-gA8.d.ts} +41 -1543
  678. package/messages/b2b/en.po +6 -3
  679. package/messages/en.po +6 -3
  680. package/package.json +1 -1
  681. package/dist/cjs/StytchSSRProxy-CUOvjF03.js.map +0 -1
  682. package/dist/cjs/idpHelpers-eUP8j58U.js.map +0 -1
  683. package/dist/cjs/shadcn-Bbv2Hk3P.js.map +0 -1
  684. package/dist/cjs-dev/StytchSSRProxy-D0B5PuT0.js.map +0 -1
  685. package/dist/cjs-dev/idpHelpers-DOOVv6dT.js.map +0 -1
  686. package/dist/cjs-dev/shadcn-CdbmlhdF.js.map +0 -1
  687. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  688. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  689. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  690. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  691. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  692. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  693. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  694. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  695. package/dist/types/idpHelpers-hBhPCtAC.d.ts +0 -936
@@ -3,11 +3,19 @@ import { useGlobalReducer } from '../GlobalContextProvider.mjs';
3
3
  import { AppScreens } from '../types/AppScreens.mjs';
4
4
  import { EmailConfirmationView } from '../../components/organisms/EmailConfirmationView.mjs';
5
5
  import { useEmailDomain } from './useEmailDomain.mjs';
6
+ import { useCountdown } from '../../components/atoms/Countdown.mjs';
7
+ import { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup.mjs';
8
+ import { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend.mjs';
9
+ import { AuthFlowType } from '../../../../../core/src/public/b2b/ui.mjs';
6
10
 
7
11
  const EmailConfirmation = ()=>{
8
12
  const [state, dispatch] = useGlobalReducer();
9
13
  const emailDomain = useEmailDomain();
10
- const reset = ()=>{
14
+ const countdown = useCountdown();
15
+ const { trigger: sendLoginOrSignupEml, isMutating: isSendingLoginOrSignupEml } = useEmlLoginOrSignup();
16
+ const { trigger: sendDiscoveryEml, isMutating: isSendingDiscoveryEml } = useEmlDiscoverySend();
17
+ const email = state.formState.emailState.userSuppliedEmail;
18
+ const goBack = ()=>{
11
19
  dispatch({
12
20
  type: 'set_user_supplied_email',
13
21
  email: ''
@@ -17,10 +25,26 @@ const EmailConfirmation = ()=>{
17
25
  screen: AppScreens.Main
18
26
  });
19
27
  };
28
+ const resend = async ()=>{
29
+ if (state.flowState.type === AuthFlowType.Discovery) {
30
+ await sendDiscoveryEml({
31
+ email
32
+ });
33
+ } else if (state.flowState.type === AuthFlowType.Organization && state.flowState.organization) {
34
+ await sendLoginOrSignupEml({
35
+ email,
36
+ organization_id: state.flowState.organization.organization_id
37
+ });
38
+ }
39
+ };
40
+ const isSubmitting = isSendingLoginOrSignupEml || isSendingDiscoveryEml;
20
41
  return /*#__PURE__*/ React__default.createElement(EmailConfirmationView, {
21
42
  emailDomain: emailDomain,
22
- reset: reset,
23
- email: state.formState.emailState.userSuppliedEmail
43
+ email: email,
44
+ goBack: goBack,
45
+ resend: resend,
46
+ countdown: countdown,
47
+ isSubmitting: isSubmitting
24
48
  });
25
49
  };
26
50
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailConfirmation.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailConfirmation.tsx"],"sourcesContent":["import React from 'react';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { EmailConfirmationView } from '../../components/organisms/EmailConfirmationView';\nimport { useEmailDomain } from './useEmailDomain';\n\nexport const EmailConfirmation = () => {\n const [state, dispatch] = useGlobalReducer();\n const emailDomain = useEmailDomain();\n\n const reset = () => {\n dispatch({ type: 'set_user_supplied_email', email: '' });\n dispatch({ type: 'transition', screen: AppScreens.Main });\n };\n\n return (\n <EmailConfirmationView\n emailDomain={emailDomain}\n reset={reset}\n email={state.formState.emailState.userSuppliedEmail}\n />\n );\n};\n"],"names":["EmailConfirmation","state","dispatch","useGlobalReducer","emailDomain","useEmailDomain","reset","type","email","screen","AppScreens","Main","React","EmailConfirmationView","formState","emailState","userSuppliedEmail"],"mappings":";;;;;;MAMaA,iBAAAA,GAAoB,IAAA;IAC/B,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAAA,GAAcC,cAAAA,EAAAA;AAEpB,IAAA,MAAMC,KAAAA,GAAQ,IAAA;QACZJ,QAAAA,CAAS;YAAEK,IAAAA,EAAM,yBAAA;YAA2BC,KAAAA,EAAO;AAAG,SAAA,CAAA;QACtDN,QAAAA,CAAS;YAAEK,IAAAA,EAAM,YAAA;AAAcE,YAAAA,MAAAA,EAAQC,WAAWC;AAAK,SAAA,CAAA;AACzD,IAAA,CAAA;AAEA,IAAA,qBACEC,cAAA,CAAA,aAAA,CAACC,qBAAAA,EAAAA;QACCT,WAAAA,EAAaA,WAAAA;QACbE,KAAAA,EAAOA,KAAAA;AACPE,QAAAA,KAAAA,EAAOP,KAAAA,CAAMa,SAAS,CAACC,UAAU,CAACC;;AAGxC;;;;"}
1
+ {"version":3,"file":"EmailConfirmation.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailConfirmation.tsx"],"sourcesContent":["import React from 'react';\nimport { AuthFlowType } from '@stytch/core/public';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { EmailConfirmationView } from '../../components/organisms/EmailConfirmationView';\nimport { useEmailDomain } from './useEmailDomain';\nimport { useCountdown } from '../../components/atoms/Countdown';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\n\nexport const EmailConfirmation = () => {\n const [state, dispatch] = useGlobalReducer();\n const emailDomain = useEmailDomain();\n const countdown = useCountdown();\n\n const { trigger: sendLoginOrSignupEml, isMutating: isSendingLoginOrSignupEml } = useEmlLoginOrSignup();\n const { trigger: sendDiscoveryEml, isMutating: isSendingDiscoveryEml } = useEmlDiscoverySend();\n\n const email = state.formState.emailState.userSuppliedEmail;\n\n const goBack = () => {\n dispatch({ type: 'set_user_supplied_email', email: '' });\n dispatch({ type: 'transition', screen: AppScreens.Main });\n };\n\n const resend = async () => {\n if (state.flowState.type === AuthFlowType.Discovery) {\n await sendDiscoveryEml({ email });\n } else if (state.flowState.type === AuthFlowType.Organization && state.flowState.organization) {\n await sendLoginOrSignupEml({\n email,\n organization_id: state.flowState.organization.organization_id,\n });\n }\n };\n\n const isSubmitting = isSendingLoginOrSignupEml || isSendingDiscoveryEml;\n\n return (\n <EmailConfirmationView\n emailDomain={emailDomain}\n email={email}\n goBack={goBack}\n resend={resend}\n countdown={countdown}\n isSubmitting={isSubmitting}\n />\n );\n};\n"],"names":["EmailConfirmation","state","dispatch","useGlobalReducer","emailDomain","useEmailDomain","countdown","useCountdown","trigger","sendLoginOrSignupEml","isMutating","isSendingLoginOrSignupEml","useEmlLoginOrSignup","sendDiscoveryEml","isSendingDiscoveryEml","useEmlDiscoverySend","email","formState","emailState","userSuppliedEmail","goBack","type","screen","AppScreens","Main","resend","flowState","AuthFlowType","Discovery","Organization","organization","organization_id","isSubmitting","React","EmailConfirmationView"],"mappings":";;;;;;;;;;MAUaA,iBAAAA,GAAoB,IAAA;IAC/B,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAAA,GAAcC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,SAAAA,GAAYC,YAAAA,EAAAA;AAElB,IAAA,MAAM,EAAEC,OAAAA,EAASC,oBAAoB,EAAEC,UAAAA,EAAYC,yBAAyB,EAAE,GAAGC,mBAAAA,EAAAA;AACjF,IAAA,MAAM,EAAEJ,OAAAA,EAASK,gBAAgB,EAAEH,UAAAA,EAAYI,qBAAqB,EAAE,GAAGC,mBAAAA,EAAAA;AAEzE,IAAA,MAAMC,QAAQf,KAAAA,CAAMgB,SAAS,CAACC,UAAU,CAACC,iBAAiB;AAE1D,IAAA,MAAMC,MAAAA,GAAS,IAAA;QACblB,QAAAA,CAAS;YAAEmB,IAAAA,EAAM,yBAAA;YAA2BL,KAAAA,EAAO;AAAG,SAAA,CAAA;QACtDd,QAAAA,CAAS;YAAEmB,IAAAA,EAAM,YAAA;AAAcC,YAAAA,MAAAA,EAAQC,WAAWC;AAAK,SAAA,CAAA;AACzD,IAAA,CAAA;AAEA,IAAA,MAAMC,MAAAA,GAAS,UAAA;AACb,QAAA,IAAIxB,MAAMyB,SAAS,CAACL,IAAI,KAAKM,YAAAA,CAAaC,SAAS,EAAE;AACnD,YAAA,MAAMf,gBAAAA,CAAiB;AAAEG,gBAAAA;AAAM,aAAA,CAAA;AACjC,QAAA,CAAA,MAAO,IAAIf,KAAAA,CAAMyB,SAAS,CAACL,IAAI,KAAKM,YAAAA,CAAaE,YAAY,IAAI5B,KAAAA,CAAMyB,SAAS,CAACI,YAAY,EAAE;AAC7F,YAAA,MAAMrB,oBAAAA,CAAqB;AACzBO,gBAAAA,KAAAA;AACAe,gBAAAA,eAAAA,EAAiB9B,KAAAA,CAAMyB,SAAS,CAACI,YAAY,CAACC;AAChD,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,eAAerB,yBAAAA,IAA6BG,qBAAAA;AAElD,IAAA,qBACEmB,cAAA,CAAA,aAAA,CAACC,qBAAAA,EAAAA;QACC9B,WAAAA,EAAaA,WAAAA;QACbY,KAAAA,EAAOA,KAAAA;QACPI,MAAAA,EAAQA,MAAAA;QACRK,MAAAA,EAAQA,MAAAA;QACRnB,SAAAA,EAAWA,SAAAA;QACX0B,YAAAA,EAAcA;;AAGpB;;;;"}
@@ -22,6 +22,7 @@ const RecoveryCodeEntryScreen = ()=>{
22
22
  organization_id: organizationId,
23
23
  session_duration_minutes: sessionDurationMinutes
24
24
  }), {
25
+ throwOnError: false,
25
26
  onSuccess: ()=>{
26
27
  dispatch({
27
28
  type: 'recovery_code/authenticate_success'
@@ -74,6 +75,7 @@ const RecoveryCodeEntryScreen = ()=>{
74
75
  hideLabel: true,
75
76
  required: true,
76
77
  autoComplete: "off",
78
+ spellCheck: false,
77
79
  error: errorMessage
78
80
  }), /*#__PURE__*/ React__default.createElement(ButtonColumn, null, /*#__PURE__*/ React__default.createElement(Button, {
79
81
  variant: "primary",
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryCodeEntryScreen.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/RecoveryCodeEntryScreen.tsx"],"sourcesContent":["import React, { FormEvent, useState } from 'react';\nimport { RecoveryCodeRecoverResponse, StytchProjectConfigurationInput } from '@stytch/core/public';\nimport { useLingui } from '@lingui/react/macro';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport Typography from '../../components/atoms/Typography';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { StytchMutationKey, useMutate } from '../utils';\nimport Input from '../../components/molecules/Input';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport styles from './RecoveryCodeEntryScreen.module.css';\n\nexport const RecoveryCodeEntryScreen = () => {\n const stytchClient = useStytch();\n const {\n sessionOptions: { sessionDurationMinutes },\n } = useConfig();\n const { t } = useLingui();\n\n const [state, dispatch] = useGlobalReducer();\n\n // This screen should only be shown if primary info is available\n const { memberId, organizationId } = state.mfa.primaryInfo!;\n\n const {\n trigger: authenticate,\n isMutating: isSubmitting,\n error,\n } = useMutate<\n RecoveryCodeRecoverResponse<StytchProjectConfigurationInput>,\n unknown,\n StytchMutationKey,\n { recoveryCode: string; memberId: string; organizationId: string; sessionDurationMinutes: number }\n >(\n 'stytch.recoveryCodes.recover',\n (\n _: string,\n {\n arg: { recoveryCode, memberId, organizationId, sessionDurationMinutes },\n }: { arg: { recoveryCode: string; memberId: string; organizationId: string; sessionDurationMinutes: number } },\n ) =>\n stytchClient.recoveryCodes.recover({\n recovery_code: recoveryCode,\n member_id: memberId,\n organization_id: organizationId,\n session_duration_minutes: sessionDurationMinutes,\n }),\n {\n onSuccess: () => {\n dispatch({ type: 'recovery_code/authenticate_success' });\n },\n },\n );\n\n const [recoveryCode, setRecoveryCode] = useState('');\n const errorMessage = error\n ? t({ id: 'recoveryCodes.entry.error.invalidCode', message: 'Invalid backup code, please try again.' })\n : undefined;\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n authenticate({ recoveryCode, memberId, organizationId, sessionDurationMinutes });\n };\n\n return (\n <Column as=\"form\" gap={6} onSubmit={handleSubmit}>\n <Typography variant=\"header\">{t({ id: 'recoveryCodes.entry.title', message: 'Enter backup code' })}</Typography>\n <Typography variant=\"body\">\n {t({\n id: 'recoveryCodes.entry.content',\n message: 'Enter one of the backup codes you saved when setting up your authenticator app.',\n })}\n </Typography>\n\n <Input\n id=\"recovery-code\"\n className={styles.input}\n value={recoveryCode}\n onChange={(e) => {\n setRecoveryCode(e.target.value);\n }}\n placeholder={t({ id: 'formField.backupCode.placeholder', message: 'Enter backup code' })}\n label={t({ id: 'formField.backupCode.ariaLabel', message: 'Backup code' })}\n hideLabel\n required\n autoComplete=\"off\"\n error={errorMessage}\n />\n\n <ButtonColumn>\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\" disabled={!recoveryCode || isSubmitting}>\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n <Button variant=\"ghost\" onClick={() => dispatch({ type: 'navigate_back' })}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n </ButtonColumn>\n </Column>\n );\n};\n"],"names":["RecoveryCodeEntryScreen","stytchClient","useStytch","sessionOptions","sessionDurationMinutes","useConfig","useLingui","state","dispatch","useGlobalReducer","memberId","organizationId","mfa","primaryInfo","trigger","authenticate","isMutating","isSubmitting","error","useMutate","_","arg","recoveryCode","recoveryCodes","recover","recovery_code","member_id","organization_id","session_duration_minutes","onSuccess","type","setRecoveryCode","useState","errorMessage","undefined","handleSubmit","e","preventDefault","React","Column","as","gap","onSubmit","Typography","variant","Input","id","className","styles","input","value","onChange","target","placeholder","label","hideLabel","required","autoComplete","ButtonColumn","Button","loading","disabled","onClick"],"mappings":"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"}
1
+ {"version":3,"file":"RecoveryCodeEntryScreen.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/RecoveryCodeEntryScreen.tsx"],"sourcesContent":["import React, { FormEvent, useState } from 'react';\nimport { RecoveryCodeRecoverResponse, StytchProjectConfigurationInput } from '@stytch/core/public';\nimport { useLingui } from '@lingui/react/macro';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport Typography from '../../components/atoms/Typography';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { StytchMutationKey, useMutate } from '../utils';\nimport Input from '../../components/molecules/Input';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport styles from './RecoveryCodeEntryScreen.module.css';\n\nexport const RecoveryCodeEntryScreen = () => {\n const stytchClient = useStytch();\n const {\n sessionOptions: { sessionDurationMinutes },\n } = useConfig();\n const { t } = useLingui();\n\n const [state, dispatch] = useGlobalReducer();\n\n // This screen should only be shown if primary info is available\n const { memberId, organizationId } = state.mfa.primaryInfo!;\n\n const {\n trigger: authenticate,\n isMutating: isSubmitting,\n error,\n } = useMutate<\n RecoveryCodeRecoverResponse<StytchProjectConfigurationInput>,\n unknown,\n StytchMutationKey,\n { recoveryCode: string; memberId: string; organizationId: string; sessionDurationMinutes: number }\n >(\n 'stytch.recoveryCodes.recover',\n (\n _: string,\n {\n arg: { recoveryCode, memberId, organizationId, sessionDurationMinutes },\n }: { arg: { recoveryCode: string; memberId: string; organizationId: string; sessionDurationMinutes: number } },\n ) =>\n stytchClient.recoveryCodes.recover({\n recovery_code: recoveryCode,\n member_id: memberId,\n organization_id: organizationId,\n session_duration_minutes: sessionDurationMinutes,\n }),\n {\n throwOnError: false,\n onSuccess: () => {\n dispatch({ type: 'recovery_code/authenticate_success' });\n },\n },\n );\n\n const [recoveryCode, setRecoveryCode] = useState('');\n const errorMessage = error\n ? t({ id: 'recoveryCodes.entry.error.invalidCode', message: 'Invalid backup code, please try again.' })\n : undefined;\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n authenticate({ recoveryCode, memberId, organizationId, sessionDurationMinutes });\n };\n\n return (\n <Column as=\"form\" gap={6} onSubmit={handleSubmit}>\n <Typography variant=\"header\">{t({ id: 'recoveryCodes.entry.title', message: 'Enter backup code' })}</Typography>\n <Typography variant=\"body\">\n {t({\n id: 'recoveryCodes.entry.content',\n message: 'Enter one of the backup codes you saved when setting up your authenticator app.',\n })}\n </Typography>\n\n <Input\n id=\"recovery-code\"\n className={styles.input}\n value={recoveryCode}\n onChange={(e) => {\n setRecoveryCode(e.target.value);\n }}\n placeholder={t({ id: 'formField.backupCode.placeholder', message: 'Enter backup code' })}\n label={t({ id: 'formField.backupCode.ariaLabel', message: 'Backup code' })}\n hideLabel\n required\n autoComplete=\"off\"\n spellCheck={false}\n error={errorMessage}\n />\n\n <ButtonColumn>\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\" disabled={!recoveryCode || isSubmitting}>\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n <Button variant=\"ghost\" onClick={() => dispatch({ type: 'navigate_back' })}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n </ButtonColumn>\n </Column>\n );\n};\n"],"names":["RecoveryCodeEntryScreen","stytchClient","useStytch","sessionOptions","sessionDurationMinutes","useConfig","useLingui","state","dispatch","useGlobalReducer","memberId","organizationId","mfa","primaryInfo","trigger","authenticate","isMutating","isSubmitting","error","useMutate","_","arg","recoveryCode","recoveryCodes","recover","recovery_code","member_id","organization_id","session_duration_minutes","throwOnError","onSuccess","type","setRecoveryCode","useState","errorMessage","undefined","handleSubmit","e","preventDefault","React","Column","as","gap","onSubmit","Typography","variant","Input","id","className","styles","input","value","onChange","target","placeholder","label","hideLabel","required","autoComplete","spellCheck","ButtonColumn","Button","loading","disabled","onClick"],"mappings":"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"}
@@ -79,6 +79,8 @@ const SMSOTPEntryScreen = ()=>{
79
79
  memberId,
80
80
  organizationId,
81
81
  locale: smsOtpOptions?.locale
82
+ }).catch(()=>{
83
+ // error in the UI is handled through the error object so we just swallow it here when auto-sending
82
84
  });
83
85
  }
84
86
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"SMSOTPEntryScreen.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/SMSOTPEntryScreen.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from 'react';\nimport {\n B2BMFAProducts,\n B2BSMSAuthenticateResponse,\n B2BSMSSendResponse,\n StytchAPIError,\n StytchProjectConfigurationInput,\n} from '@stytch/core/public';\nimport Button from '../../components/atoms/Button';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Column from '../../components/atoms/Column';\nimport { LoadingScreen } from '../../components/molecules/Loading';\nimport { SentOTPEntry } from '../../components/organisms/SentOTPEntry';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { StytchMutationKey, useMutate } from '../utils';\nimport { formatNumber } from '../../../utils/handleParsePhoneNumber';\nimport { useLingui } from '@lingui/react/macro';\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport { AppScreens } from '../types/AppScreens';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport { errorToast } from '../../components/atoms/Toast';\nimport { useCountdown } from '../../components/atoms/Countdown';\nimport { ResendOTPButton } from '../../components/organisms/ResendOTPButton';\n\nexport const SMSOTPEntryScreen = () => {\n const stytchClient = useStytch();\n const {\n sessionOptions: { sessionDurationMinutes },\n smsOtpOptions,\n } = useConfig();\n const { t } = useLingui();\n\n const [state, dispatch] = useGlobalReducer();\n const {\n mfa: { isEnrolling, smsOtp, primaryInfo },\n } = state;\n\n const { codeExpiration, formattedDestination } = smsOtp;\n\n // This screen should only be shown if primary info is available\n const { enrolledMfaMethods, memberId, memberPhoneNumber, organizationId, organizationMfaOptionsSupported } =\n primaryInfo!;\n\n const resendCountdown = useCountdown();\n\n const {\n trigger: sendSms,\n isMutating: isSending,\n error: sendError,\n } = useMutate<\n B2BSMSSendResponse,\n unknown,\n StytchMutationKey,\n { memberId: string; organizationId: string; locale?: string }\n >(\n 'stytch.otps.sms.send',\n (\n _: string,\n {\n arg: { memberId, organizationId, locale },\n }: { arg: { memberId: string; organizationId: string; locale?: string } },\n ) => {\n dispatch({ type: 'sms_otp/send' });\n return stytchClient.otps.sms.send({ member_id: memberId, organization_id: organizationId, locale });\n },\n {\n onSuccess: (response) => {\n dispatch({ type: 'sms_otp/send_success', response });\n },\n onError: (error) => {\n const message = getTranslatedError(error as StytchAPIError, t);\n if (message) {\n errorToast({ message });\n }\n dispatch({ type: 'sms_otp/send_error', error: message });\n },\n // Throw on error to ensure promise is rejected\n throwOnError: true,\n },\n );\n\n const {\n trigger: authenticate,\n isMutating: isAuthenticating,\n error: authenticateError,\n } = useMutate<\n B2BSMSAuthenticateResponse<StytchProjectConfigurationInput>,\n unknown,\n StytchMutationKey,\n { otp: string; memberId: string; organizationId: string; sessionDurationMinutes: number }\n >(\n 'stytch.otps.sms.authenticate',\n (\n _: string,\n {\n arg: { otp, memberId, organizationId, sessionDurationMinutes },\n }: { arg: { otp: string; memberId: string; organizationId: string; sessionDurationMinutes: number } },\n ) =>\n stytchClient.otps.sms.authenticate({\n code: otp,\n member_id: memberId,\n organization_id: organizationId,\n session_duration_minutes: sessionDurationMinutes,\n }),\n {\n onSuccess: () => {\n dispatch({ type: 'sms_otp/authenticate_success' });\n },\n onError: () => {\n resendCountdown.clear();\n },\n },\n );\n\n const shouldCreate = codeExpiration === null && !isSending && !sendError;\n useEffect(() => {\n if (shouldCreate) {\n sendSms({ memberId, organizationId, locale: smsOtpOptions?.locale });\n }\n }, [memberId, organizationId, sendSms, shouldCreate, smsOtpOptions?.locale]);\n\n useEffect(() => {\n if (!formattedDestination && memberPhoneNumber) {\n const handleFormatNumber = async () => {\n const parsePhoneNumber = (phoneNumber: string) =>\n readB2BInternals(stytchClient).clientsideServices.parsedPhoneNumber({\n phoneNumber,\n });\n\n const national = await formatNumber({\n parsePhoneNumber,\n phoneNumber: memberPhoneNumber,\n });\n\n dispatch({\n type: 'sms_otp/format_destination',\n formattedPhoneNumber: national,\n });\n };\n\n handleFormatNumber();\n }\n }, [dispatch, formattedDestination, stytchClient, memberPhoneNumber]);\n\n const isTotpAvailable = useMemo(\n () =>\n !isEnrolling &&\n enrolledMfaMethods.includes(B2BMFAProducts.totp) &&\n (organizationMfaOptionsSupported.length === 0 || organizationMfaOptionsSupported.includes(B2BMFAProducts.totp)),\n [enrolledMfaMethods, isEnrolling, organizationMfaOptionsSupported],\n );\n const errorMessage = authenticateError\n ? t({ id: 'error.passcodeInvalid', message: 'Invalid passcode, please try again.' })\n : undefined;\n\n // The user can go back to change their phone number if either:\n // - we are in an enrollment flow\n // - they are not enrolled in any MFA methods at all\n // - they are not enrolled in any of the limited MFA methods supported by the organization\n const canGoBack = useMemo(\n () =>\n isEnrolling ||\n enrolledMfaMethods.length === 0 ||\n (organizationMfaOptionsSupported.length > 0 &&\n !enrolledMfaMethods.some((enrolledMethod) => organizationMfaOptionsSupported.includes(enrolledMethod))),\n [enrolledMfaMethods, isEnrolling, organizationMfaOptionsSupported],\n );\n\n const handleSubmit = (otp: string) => {\n authenticate({ otp, memberId, organizationId, sessionDurationMinutes });\n };\n\n const handleSwitchToTotp = () => {\n dispatch({ type: 'transition', history: 'push', screen: AppScreens.TOTPEntry });\n };\n\n const handleResendOTP = async () => {\n await sendSms({ memberId, organizationId, locale: smsOtpOptions?.locale });\n };\n\n const handleBack = () => {\n dispatch({ type: 'navigate_back' });\n };\n\n const resendButton = (\n <ResendOTPButton countdown={resendCountdown} isSubmitting={isAuthenticating} resendOTP={handleResendOTP} />\n );\n const switchToTotpButton = isTotpAvailable && (\n <Button variant=\"ghost\" onClick={handleSwitchToTotp}>\n {t({ id: 'mfa.methods.authenticatorApp', message: 'Use an authenticator app' })}\n </Button>\n );\n const backButton = canGoBack && (\n <Button variant=\"ghost\" onClick={handleBack}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n );\n\n return (\n <Column gap={6}>\n {codeExpiration !== null ? (\n <SentOTPEntry\n isSubmitting={isAuthenticating}\n onSubmit={handleSubmit}\n errorMessage={errorMessage}\n expiration={codeExpiration.getTime()}\n formattedDestination={formattedDestination ?? memberPhoneNumber ?? ''}\n />\n ) : (\n <LoadingScreen />\n )}\n\n {switchToTotpButton && backButton ? (\n <ButtonColumn\n top={resendButton}\n bottom={\n <>\n {switchToTotpButton}\n {backButton}\n </>\n }\n />\n ) : (\n <ButtonColumn>\n {resendButton}\n {switchToTotpButton}\n {backButton}\n </ButtonColumn>\n )}\n </Column>\n );\n};\n"],"names":["SMSOTPEntryScreen","stytchClient","useStytch","sessionOptions","sessionDurationMinutes","smsOtpOptions","useConfig","useLingui","state","dispatch","useGlobalReducer","mfa","isEnrolling","smsOtp","primaryInfo","codeExpiration","formattedDestination","enrolledMfaMethods","memberId","memberPhoneNumber","organizationId","organizationMfaOptionsSupported","resendCountdown","useCountdown","trigger","sendSms","isMutating","isSending","error","sendError","useMutate","_","arg","locale","type","otps","sms","send","member_id","organization_id","onSuccess","response","onError","message","getTranslatedError","errorToast","throwOnError","authenticate","isAuthenticating","authenticateError","otp","code","session_duration_minutes","clear","shouldCreate","useEffect","handleFormatNumber","parsePhoneNumber","phoneNumber","readB2BInternals","clientsideServices","parsedPhoneNumber","national","formatNumber","formattedPhoneNumber","isTotpAvailable","useMemo","includes","B2BMFAProducts","totp","length","errorMessage","undefined","canGoBack","some","enrolledMethod","handleSubmit","handleSwitchToTotp","history","screen","AppScreens","TOTPEntry","handleResendOTP","handleBack","resendButton","React","ResendOTPButton","countdown","isSubmitting","resendOTP","switchToTotpButton","Button","variant","onClick","backButton","Column","gap","SentOTPEntry","onSubmit","expiration","getTime","LoadingScreen","ButtonColumn","top","bottom"],"mappings":"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"}
1
+ {"version":3,"file":"SMSOTPEntryScreen.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/SMSOTPEntryScreen.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from 'react';\nimport {\n B2BMFAProducts,\n B2BSMSAuthenticateResponse,\n B2BSMSSendResponse,\n StytchAPIError,\n StytchProjectConfigurationInput,\n} from '@stytch/core/public';\nimport Button from '../../components/atoms/Button';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Column from '../../components/atoms/Column';\nimport { LoadingScreen } from '../../components/molecules/Loading';\nimport { SentOTPEntry } from '../../components/organisms/SentOTPEntry';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { StytchMutationKey, useMutate } from '../utils';\nimport { formatNumber } from '../../../utils/handleParsePhoneNumber';\nimport { useLingui } from '@lingui/react/macro';\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport { AppScreens } from '../types/AppScreens';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport { errorToast } from '../../components/atoms/Toast';\nimport { useCountdown } from '../../components/atoms/Countdown';\nimport { ResendOTPButton } from '../../components/organisms/ResendOTPButton';\n\nexport const SMSOTPEntryScreen = () => {\n const stytchClient = useStytch();\n const {\n sessionOptions: { sessionDurationMinutes },\n smsOtpOptions,\n } = useConfig();\n const { t } = useLingui();\n\n const [state, dispatch] = useGlobalReducer();\n const {\n mfa: { isEnrolling, smsOtp, primaryInfo },\n } = state;\n\n const { codeExpiration, formattedDestination } = smsOtp;\n\n // This screen should only be shown if primary info is available\n const { enrolledMfaMethods, memberId, memberPhoneNumber, organizationId, organizationMfaOptionsSupported } =\n primaryInfo!;\n\n const resendCountdown = useCountdown();\n\n const {\n trigger: sendSms,\n isMutating: isSending,\n error: sendError,\n } = useMutate<\n B2BSMSSendResponse,\n unknown,\n StytchMutationKey,\n { memberId: string; organizationId: string; locale?: string }\n >(\n 'stytch.otps.sms.send',\n (\n _: string,\n {\n arg: { memberId, organizationId, locale },\n }: { arg: { memberId: string; organizationId: string; locale?: string } },\n ) => {\n dispatch({ type: 'sms_otp/send' });\n return stytchClient.otps.sms.send({ member_id: memberId, organization_id: organizationId, locale });\n },\n {\n onSuccess: (response) => {\n dispatch({ type: 'sms_otp/send_success', response });\n },\n onError: (error) => {\n const message = getTranslatedError(error as StytchAPIError, t);\n if (message) {\n errorToast({ message });\n }\n dispatch({ type: 'sms_otp/send_error', error: message });\n },\n // Throw on error to ensure promise is rejected\n throwOnError: true,\n },\n );\n\n const {\n trigger: authenticate,\n isMutating: isAuthenticating,\n error: authenticateError,\n } = useMutate<\n B2BSMSAuthenticateResponse<StytchProjectConfigurationInput>,\n unknown,\n StytchMutationKey,\n { otp: string; memberId: string; organizationId: string; sessionDurationMinutes: number }\n >(\n 'stytch.otps.sms.authenticate',\n (\n _: string,\n {\n arg: { otp, memberId, organizationId, sessionDurationMinutes },\n }: { arg: { otp: string; memberId: string; organizationId: string; sessionDurationMinutes: number } },\n ) =>\n stytchClient.otps.sms.authenticate({\n code: otp,\n member_id: memberId,\n organization_id: organizationId,\n session_duration_minutes: sessionDurationMinutes,\n }),\n {\n onSuccess: () => {\n dispatch({ type: 'sms_otp/authenticate_success' });\n },\n onError: () => {\n resendCountdown.clear();\n },\n },\n );\n\n const shouldCreate = codeExpiration === null && !isSending && !sendError;\n useEffect(() => {\n if (shouldCreate) {\n sendSms({ memberId, organizationId, locale: smsOtpOptions?.locale }).catch(() => {\n // error in the UI is handled through the error object so we just swallow it here when auto-sending\n });\n }\n }, [memberId, organizationId, sendSms, shouldCreate, smsOtpOptions?.locale]);\n\n useEffect(() => {\n if (!formattedDestination && memberPhoneNumber) {\n const handleFormatNumber = async () => {\n const parsePhoneNumber = (phoneNumber: string) =>\n readB2BInternals(stytchClient).clientsideServices.parsedPhoneNumber({\n phoneNumber,\n });\n\n const national = await formatNumber({\n parsePhoneNumber,\n phoneNumber: memberPhoneNumber,\n });\n\n dispatch({\n type: 'sms_otp/format_destination',\n formattedPhoneNumber: national,\n });\n };\n\n handleFormatNumber();\n }\n }, [dispatch, formattedDestination, stytchClient, memberPhoneNumber]);\n\n const isTotpAvailable = useMemo(\n () =>\n !isEnrolling &&\n enrolledMfaMethods.includes(B2BMFAProducts.totp) &&\n (organizationMfaOptionsSupported.length === 0 || organizationMfaOptionsSupported.includes(B2BMFAProducts.totp)),\n [enrolledMfaMethods, isEnrolling, organizationMfaOptionsSupported],\n );\n const errorMessage = authenticateError\n ? t({ id: 'error.passcodeInvalid', message: 'Invalid passcode, please try again.' })\n : undefined;\n\n // The user can go back to change their phone number if either:\n // - we are in an enrollment flow\n // - they are not enrolled in any MFA methods at all\n // - they are not enrolled in any of the limited MFA methods supported by the organization\n const canGoBack = useMemo(\n () =>\n isEnrolling ||\n enrolledMfaMethods.length === 0 ||\n (organizationMfaOptionsSupported.length > 0 &&\n !enrolledMfaMethods.some((enrolledMethod) => organizationMfaOptionsSupported.includes(enrolledMethod))),\n [enrolledMfaMethods, isEnrolling, organizationMfaOptionsSupported],\n );\n\n const handleSubmit = (otp: string) => {\n authenticate({ otp, memberId, organizationId, sessionDurationMinutes });\n };\n\n const handleSwitchToTotp = () => {\n dispatch({ type: 'transition', history: 'push', screen: AppScreens.TOTPEntry });\n };\n\n const handleResendOTP = async () => {\n await sendSms({ memberId, organizationId, locale: smsOtpOptions?.locale });\n };\n\n const handleBack = () => {\n dispatch({ type: 'navigate_back' });\n };\n\n const resendButton = (\n <ResendOTPButton countdown={resendCountdown} isSubmitting={isAuthenticating} resendOTP={handleResendOTP} />\n );\n const switchToTotpButton = isTotpAvailable && (\n <Button variant=\"ghost\" onClick={handleSwitchToTotp}>\n {t({ id: 'mfa.methods.authenticatorApp', message: 'Use an authenticator app' })}\n </Button>\n );\n const backButton = canGoBack && (\n <Button variant=\"ghost\" onClick={handleBack}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n );\n\n return (\n <Column gap={6}>\n {codeExpiration !== null ? (\n <SentOTPEntry\n isSubmitting={isAuthenticating}\n onSubmit={handleSubmit}\n errorMessage={errorMessage}\n expiration={codeExpiration.getTime()}\n formattedDestination={formattedDestination ?? memberPhoneNumber ?? ''}\n />\n ) : (\n <LoadingScreen />\n )}\n\n {switchToTotpButton && backButton ? (\n <ButtonColumn\n top={resendButton}\n bottom={\n <>\n {switchToTotpButton}\n {backButton}\n </>\n }\n />\n ) : (\n <ButtonColumn>\n {resendButton}\n {switchToTotpButton}\n {backButton}\n </ButtonColumn>\n )}\n </Column>\n );\n};\n"],"names":["SMSOTPEntryScreen","stytchClient","useStytch","sessionOptions","sessionDurationMinutes","smsOtpOptions","useConfig","useLingui","state","dispatch","useGlobalReducer","mfa","isEnrolling","smsOtp","primaryInfo","codeExpiration","formattedDestination","enrolledMfaMethods","memberId","memberPhoneNumber","organizationId","organizationMfaOptionsSupported","resendCountdown","useCountdown","trigger","sendSms","isMutating","isSending","error","sendError","useMutate","_","arg","locale","type","otps","sms","send","member_id","organization_id","onSuccess","response","onError","message","getTranslatedError","errorToast","throwOnError","authenticate","isAuthenticating","authenticateError","otp","code","session_duration_minutes","clear","shouldCreate","useEffect","catch","handleFormatNumber","parsePhoneNumber","phoneNumber","readB2BInternals","clientsideServices","parsedPhoneNumber","national","formatNumber","formattedPhoneNumber","isTotpAvailable","useMemo","includes","B2BMFAProducts","totp","length","errorMessage","undefined","canGoBack","some","enrolledMethod","handleSubmit","handleSwitchToTotp","history","screen","AppScreens","TOTPEntry","handleResendOTP","handleBack","resendButton","React","ResendOTPButton","countdown","isSubmitting","resendOTP","switchToTotpButton","Button","variant","onClick","backButton","Column","gap","SentOTPEntry","onSubmit","expiration","getTime","LoadingScreen","ButtonColumn","top","bottom"],"mappings":"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"}
@@ -36,7 +36,7 @@ function getStytchEventByKey(key) {
36
36
  const useMutate = (key, fetcher, options = {})=>{
37
37
  const onEvent = useEventCallback();
38
38
  const onError = useErrorCallback();
39
- return index(key, fetcher, {
39
+ const result = index(key, fetcher, {
40
40
  throwOnError: false,
41
41
  ...options,
42
42
  onSuccess: (data, key, config)=>{
@@ -54,6 +54,13 @@ const useMutate = (key, fetcher, options = {})=>{
54
54
  options.onError?.(error, key, config);
55
55
  }
56
56
  });
57
+ // Hide the error while mutating. This helps avoid the errors continuing to show after the user has clicked submit
58
+ // and also ensures repeating errors causes <ErrorText> to re-render which is important for screenreaders to
59
+ // re-announce them
60
+ return result.isMutating ? {
61
+ ...result,
62
+ error: undefined
63
+ } : result;
57
64
  };
58
65
  /**
59
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../../../../../web/src/ui/b2b/utils.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport useSWRMutation, { MutationFetcher, SWRMutationConfiguration } from 'swr/mutation';\nimport { useConfig, useErrorCallback, useEventCallback, useGlobalReducer, useStytch } from './GlobalContextProvider';\nimport { ErrorType } from './types/ErrorType';\nimport { AppScreens } from './types/AppScreens';\nimport {\n AuthFlowType,\n B2BAuthenticateResponseWithMFA,\n B2BDiscoveryAuthenticateResponse,\n B2BMagicLinksDiscoveryAuthenticateResponse,\n StytchError,\n StytchEvent,\n StytchEventType,\n StytchAPIError,\n StytchProjectConfigurationInput,\n} from '@stytch/core/public';\nimport { StytchB2BExtendedLoginConfig } from '../../types';\nimport { readB2BInternals } from '../../utils/internal';\nimport { B2BOrganizationsGetBySlugResponse } from '@stytch/core/public';\nimport { StytchB2BClient } from '../../b2b/StytchB2BClient';\nimport { Action } from './reducer';\nimport type { ProductId, StytchB2BProduct } from './StytchB2BProduct';\n\ntype RecursiveDotNotation<T> = T extends object\n ? {\n [K in keyof T]: K extends string\n ? T[K] extends (...args: never[]) => unknown\n ? K\n : T[K] extends object\n ? `${K}.${RecursiveDotNotation<T[K]>}`\n : K\n : never;\n }[keyof T]\n : never;\n\ntype ValidStytchMutationKey = `stytch.${RecursiveDotNotation<StytchB2BClient>}`;\n\nconst KeyToStytchEventMap = {\n 'stytch.magicLinks.authenticate': StytchEventType.B2BMagicLinkAuthenticate,\n 'stytch.sso.authenticate': StytchEventType.B2BSSOAuthenticate,\n 'stytch.sso.discoverConnections': StytchEventType.B2BSSODiscoverConnections,\n 'stytch.magicLinks.discovery.authenticate': StytchEventType.B2BMagicLinkDiscoveryAuthenticate,\n 'stytch.discovery.organizations.create': StytchEventType.B2BDiscoveryOrganizationsCreate,\n 'stytch.discovery.intermediateSessions.exchange': StytchEventType.B2BDiscoveryIntermediateSessionExchange,\n 'stytch.magicLinks.email.loginOrSignup': StytchEventType.B2BMagicLinkEmailLoginOrSignup,\n 'stytch.magicLinks.email.discovery.send': StytchEventType.B2BMagicLinkEmailDiscoverySend,\n 'stytch.oauth.authenticate': StytchEventType.B2BOAuthAuthenticate,\n 'stytch.oauth.discovery.authenticate': StytchEventType.B2BOAuthDiscoveryAuthenticate,\n 'stytch.otps.sms.send': StytchEventType.B2BSMSOTPSend,\n 'stytch.otps.sms.authenticate': StytchEventType.B2BSMSOTPAuthenticate,\n 'stytch.totp.create': StytchEventType.B2BTOTPCreate,\n 'stytch.totp.authenticate': StytchEventType.B2BTOTPAuthenticate,\n 'stytch.recoveryCodes.recover': StytchEventType.B2BRecoveryCodesRecover,\n 'stytch.impersonation.authenticate': StytchEventType.B2BImpersonationAuthenticate,\n 'stytch.otps.email.authenticate': StytchEventType.B2BOTPsEmailAuthenticate,\n 'stytch.otps.email.discovery.authenticate': StytchEventType.B2BOTPsEmailDiscoveryAuthenticate,\n 'stytch.otps.email.discovery.send': StytchEventType.B2BOTPsEmailDiscoverySend,\n 'stytch.otps.email.loginOrSignup': StytchEventType.B2BOTPsEmailLoginOrSignup,\n 'stytch.organization.getBySlug': StytchEventType.B2BOrganizationsGetBySlug,\n} satisfies Partial<Record<ValidStytchMutationKey, StytchEventType>>;\n\ntype StytchExternalMutationKey = keyof typeof KeyToStytchEventMap;\n\ntype StytchInternalMutationKey = `internal.${string}`;\n\nexport type StytchMutationKey = StytchExternalMutationKey | StytchInternalMutationKey;\n\nexport function getStytchEventByKey(key: StytchMutationKey): StytchEventType | undefined {\n return KeyToStytchEventMap[key as StytchExternalMutationKey];\n}\n\nexport const useMutate = <TData, TError, TKey extends StytchMutationKey, TExtraArg = never>(\n key: TKey,\n fetcher: MutationFetcher<TData, TExtraArg, TKey>,\n options: SWRMutationConfiguration<TData, TError, TExtraArg, TKey> = {},\n) => {\n const onEvent = useEventCallback();\n const onError = useErrorCallback();\n\n return useSWRMutation<TData, TError, TKey, TExtraArg>(key, fetcher, {\n throwOnError: false,\n ...options,\n onSuccess: (data, key, config) => {\n const eventType = getStytchEventByKey(key as StytchMutationKey);\n if (eventType) {\n onEvent({ type: eventType, data } as StytchEvent<StytchProjectConfigurationInput>);\n }\n\n options.onSuccess?.(data, key, config);\n },\n onError: (error, key, config) => {\n onError(error as StytchError);\n\n options.onError?.(error, key, config);\n },\n });\n};\n\n/**\n *\n * This hook triggers a request to retrieve the organization from the slug.\n * The hook only triggers the request if the SDK is being used in an organization flow,\n * and a slug pattern is present. The hook returns an isSearching boolean that can be used\n * to display a loading state while the search is in progress.\n */\nexport const useExtractSlug = () => {\n const [state, dispatch] = useGlobalReducer();\n const [pattern, setPattern] = useState<string | null | undefined>();\n const config = useConfig();\n\n const stytchClient = useStytch();\n const slug = config.organizationSlug ?? extractFromPattern(pattern || null, window.location.href);\n\n const { trigger, isMutating: isSearching } = useMutate<\n B2BOrganizationsGetBySlugResponse,\n StytchAPIError,\n StytchExternalMutationKey,\n { slug: string }\n >(\n 'stytch.organization.getBySlug',\n (_: string, { arg: { slug } }: { arg: { slug: string } }) =>\n stytchClient.organization.getBySlug({ organization_slug: slug }),\n {\n onSuccess: ({ organization }) => {\n if (organization === null) {\n dispatch({\n type: 'set_error_message_and_transition',\n errorType: ErrorType.Organization,\n canGoBack: false,\n });\n } else {\n dispatch({\n type: 'set_organization',\n organization: {\n ...organization,\n },\n });\n }\n },\n },\n );\n\n useEffect(() => {\n readB2BInternals(stytchClient)\n .bootstrap.getAsync()\n .then(({ slugPattern }) => {\n setPattern(slugPattern);\n });\n }, [stytchClient]);\n\n useEffect(() => {\n if (\n slug !== null &&\n state.flowState.organization === null &&\n state.screen === AppScreens.Main &&\n state.flowState.type == AuthFlowType.Organization\n ) {\n trigger({ slug });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- SDK-1354\n }, [slug, state.flowState, state.screen]);\n\n // The org is pending identification if the slug pattern has not yet been\n // determined (i.e., `undefined`) or the organization request is in progress\n const resultPending = pattern === undefined || isSearching;\n\n return { slug, resultPending };\n};\n\nexport const useBootstrap = () => {\n const stytchClient = useStytch();\n const [bootstrap, setBootstrap] = useState(readB2BInternals(stytchClient).bootstrap.getSync());\n\n useEffect(() => {\n readB2BInternals(stytchClient)\n .bootstrap.getAsync()\n .then((data) => {\n setBootstrap(data);\n });\n }, [stytchClient]);\n\n return bootstrap;\n};\n\nexport const onAuthenticateSuccess = (\n data: B2BAuthenticateResponseWithMFA<StytchProjectConfigurationInput>,\n dispatch: React.Dispatch<Action>,\n config: StytchB2BExtendedLoginConfig,\n) => {\n dispatch({\n type: 'primary_authenticate_success',\n response: data,\n includedMfaMethods: config.mfaProductInclude,\n });\n};\n\nexport const onDiscoveryAuthenticateSuccess = (\n data: B2BDiscoveryAuthenticateResponse | B2BMagicLinksDiscoveryAuthenticateResponse,\n dispatch: React.Dispatch<Action>,\n) => {\n dispatch({\n type: 'set_discovery_state',\n email: data.email_address,\n discoveredOrganizations: data.discovered_organizations,\n });\n};\n\nexport const extractFromPattern = (pattern: string | null, href: string): string | null => {\n if (pattern === null) return null;\n\n const url = new URL(href);\n url.search = '';\n\n const currentUrl = url.toString().trim();\n const regexPattern = pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '(?:[^.]+)').replace('{{slug}}', '(.+)');\n\n const regex = new RegExp(regexPattern);\n const match = currentUrl.match(regex);\n\n if (match && match[1]) {\n return match?.[1];\n }\n\n return null;\n};\n\nexport function hasProduct(products: StytchB2BProduct[], product: ProductId) {\n return products.some((p) => p.id === product);\n}\n\nexport function useProductComponents<Type extends 'screens' | 'mainScreen' | 'ssoAndOAuthButtons'>(\n { products, organizationProducts }: { products: StytchB2BProduct[]; organizationProducts: StytchB2BProduct[] },\n screenType: Type,\n) {\n return useMemo(() => {\n const map = {} as Required<StytchB2BProduct[Type]>;\n for (const product of [...products, ...organizationProducts]) {\n if (product[screenType]) Object.assign(map, product[screenType]);\n }\n return map;\n }, [products, organizationProducts, screenType]);\n}\n"],"names":["KeyToStytchEventMap","StytchEventType","B2BMagicLinkAuthenticate","B2BSSOAuthenticate","B2BSSODiscoverConnections","B2BMagicLinkDiscoveryAuthenticate","B2BDiscoveryOrganizationsCreate","B2BDiscoveryIntermediateSessionExchange","B2BMagicLinkEmailLoginOrSignup","B2BMagicLinkEmailDiscoverySend","B2BOAuthAuthenticate","B2BOAuthDiscoveryAuthenticate","B2BSMSOTPSend","B2BSMSOTPAuthenticate","B2BTOTPCreate","B2BTOTPAuthenticate","B2BRecoveryCodesRecover","B2BImpersonationAuthenticate","B2BOTPsEmailAuthenticate","B2BOTPsEmailDiscoveryAuthenticate","B2BOTPsEmailDiscoverySend","B2BOTPsEmailLoginOrSignup","B2BOrganizationsGetBySlug","getStytchEventByKey","key","useMutate","fetcher","options","onEvent","useEventCallback","onError","useErrorCallback","useSWRMutation","throwOnError","onSuccess","data","config","eventType","type","error","useExtractSlug","state","dispatch","useGlobalReducer","pattern","setPattern","useState","useConfig","stytchClient","useStytch","slug","organizationSlug","extractFromPattern","window","location","href","trigger","isMutating","isSearching","_","arg","organization","getBySlug","organization_slug","errorType","ErrorType","Organization","canGoBack","useEffect","readB2BInternals","bootstrap","getAsync","then","slugPattern","flowState","screen","AppScreens","Main","AuthFlowType","resultPending","undefined","useBootstrap","setBootstrap","getSync","onAuthenticateSuccess","response","includedMfaMethods","mfaProductInclude","onDiscoveryAuthenticateSuccess","email","email_address","discoveredOrganizations","discovered_organizations","url","URL","search","currentUrl","toString","trim","regexPattern","replace","regex","RegExp","match","hasProduct","products","product","some","p","id","useProductComponents","organizationProducts","screenType","useMemo","map","Object","assign"],"mappings":";;;;;;;;;AAqCA,MAAMA,mBAAAA,GAAsB;AAC1B,IAAA,gCAAA,EAAkCC,gBAAgBC,wBAAwB;AAC1E,IAAA,yBAAA,EAA2BD,gBAAgBE,kBAAkB;AAC7D,IAAA,gCAAA,EAAkCF,gBAAgBG,yBAAyB;AAC3E,IAAA,0CAAA,EAA4CH,gBAAgBI,iCAAiC;AAC7F,IAAA,uCAAA,EAAyCJ,gBAAgBK,+BAA+B;AACxF,IAAA,gDAAA,EAAkDL,gBAAgBM,uCAAuC;AACzG,IAAA,uCAAA,EAAyCN,gBAAgBO,8BAA8B;AACvF,IAAA,wCAAA,EAA0CP,gBAAgBQ,8BAA8B;AACxF,IAAA,2BAAA,EAA6BR,gBAAgBS,oBAAoB;AACjE,IAAA,qCAAA,EAAuCT,gBAAgBU,6BAA6B;AACpF,IAAA,sBAAA,EAAwBV,gBAAgBW,aAAa;AACrD,IAAA,8BAAA,EAAgCX,gBAAgBY,qBAAqB;AACrE,IAAA,oBAAA,EAAsBZ,gBAAgBa,aAAa;AACnD,IAAA,0BAAA,EAA4Bb,gBAAgBc,mBAAmB;AAC/D,IAAA,8BAAA,EAAgCd,gBAAgBe,uBAAuB;AACvE,IAAA,mCAAA,EAAqCf,gBAAgBgB,4BAA4B;AACjF,IAAA,gCAAA,EAAkChB,gBAAgBiB,wBAAwB;AAC1E,IAAA,0CAAA,EAA4CjB,gBAAgBkB,iCAAiC;AAC7F,IAAA,kCAAA,EAAoClB,gBAAgBmB,yBAAyB;AAC7E,IAAA,iCAAA,EAAmCnB,gBAAgBoB,yBAAyB;AAC5E,IAAA,+BAAA,EAAiCpB,gBAAgBqB;AACnD,CAAA;AAQO,SAASC,oBAAoBC,GAAsB,EAAA;IACxD,OAAOxB,mBAAmB,CAACwB,GAAAA,CAAiC;AAC9D;MAEaC,SAAAA,GAAY,CACvBD,KACAE,OAAAA,EACAC,OAAAA,GAAoE,EAAE,GAAA;AAEtE,IAAA,MAAMC,OAAAA,GAAUC,gBAAAA,EAAAA;AAChB,IAAA,MAAMC,OAAAA,GAAUC,gBAAAA,EAAAA;IAEhB,OAAOC,KAAAA,CAA+CR,KAAKE,OAAAA,EAAS;QAClEO,YAAAA,EAAc,KAAA;AACd,QAAA,GAAGN,OAAO;QACVO,SAAAA,EAAW,CAACC,MAAMX,GAAAA,EAAKY,MAAAA,GAAAA;AACrB,YAAA,MAAMC,YAAYd,mBAAAA,CAAoBC,GAAAA,CAAAA;AACtC,YAAA,IAAIa,SAAAA,EAAW;gBACbT,OAAAA,CAAQ;oBAAEU,IAAAA,EAAMD,SAAAA;AAAWF,oBAAAA;AAAK,iBAAA,CAAA;AAClC,YAAA;YAEAR,OAAAA,CAAQO,SAAS,GAAGC,IAAAA,EAAMX,GAAAA,EAAKY,MAAAA,CAAAA;AACjC,QAAA,CAAA;QACAN,OAAAA,EAAS,CAACS,OAAOf,GAAAA,EAAKY,MAAAA,GAAAA;YACpBN,OAAAA,CAAQS,KAAAA,CAAAA;YAERZ,OAAAA,CAAQG,OAAO,GAAGS,KAAAA,EAAOf,GAAAA,EAAKY,MAAAA,CAAAA;AAChC,QAAA;AACF,KAAA,CAAA;AACF;AAEA;;;;;;UAOaI,cAAAA,GAAiB,IAAA;IAC5B,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;IAC1B,MAAM,CAACC,OAAAA,EAASC,UAAAA,CAAW,GAAGC,QAAAA,EAAAA;AAC9B,IAAA,MAAMV,MAAAA,GAASW,SAAAA,EAAAA;AAEf,IAAA,MAAMC,YAAAA,GAAeC,SAAAA,EAAAA;IACrB,MAAMC,IAAAA,GAAOd,MAAAA,CAAOe,gBAAgB,IAAIC,kBAAAA,CAAmBR,WAAW,IAAA,EAAMS,MAAAA,CAAOC,QAAQ,CAACC,IAAI,CAAA;IAEhG,MAAM,EAAEC,OAAO,EAAEC,UAAAA,EAAYC,WAAW,EAAE,GAAGjC,SAAAA,CAM3C,+BAAA,EACA,CAACkC,CAAAA,EAAW,EAAEC,GAAAA,EAAK,EAAEV,IAAI,EAAE,EAA6B,GACtDF,YAAAA,CAAaa,YAAY,CAACC,SAAS,CAAC;YAAEC,iBAAAA,EAAmBb;SAAK,CAAA,EAChE;QACEhB,SAAAA,EAAW,CAAC,EAAE2B,YAAY,EAAE,GAAA;AAC1B,YAAA,IAAIA,iBAAiB,IAAA,EAAM;gBACzBnB,QAAAA,CAAS;oBACPJ,IAAAA,EAAM,kCAAA;AACN0B,oBAAAA,SAAAA,EAAWC,UAAUC,YAAY;oBACjCC,SAAAA,EAAW;AACb,iBAAA,CAAA;YACF,CAAA,MAAO;gBACLzB,QAAAA,CAAS;oBACPJ,IAAAA,EAAM,kBAAA;oBACNuB,YAAAA,EAAc;AACZ,wBAAA,GAAGA;AACL;AACF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;AACF,KAAA,CAAA;IAGFO,SAAAA,CAAU,IAAA;QACRC,gBAAAA,CAAiBrB,YAAAA,CAAAA,CACdsB,SAAS,CAACC,QAAQ,EAAA,CAClBC,IAAI,CAAC,CAAC,EAAEC,WAAW,EAAE,GAAA;YACpB5B,UAAAA,CAAW4B,WAAAA,CAAAA;AACb,QAAA,CAAA,CAAA;IACJ,CAAA,EAAG;AAACzB,QAAAA;AAAa,KAAA,CAAA;IAEjBoB,SAAAA,CAAU,IAAA;QACR,IACElB,IAAAA,KAAS,QACTT,KAAAA,CAAMiC,SAAS,CAACb,YAAY,KAAK,QACjCpB,KAAAA,CAAMkC,MAAM,KAAKC,UAAAA,CAAWC,IAAI,IAChCpC,KAAAA,CAAMiC,SAAS,CAACpC,IAAI,IAAIwC,YAAAA,CAAaZ,YAAY,EACjD;YACAV,OAAAA,CAAQ;AAAEN,gBAAAA;AAAK,aAAA,CAAA;AACjB,QAAA;;IAEF,CAAA,EAAG;AAACA,QAAAA,IAAAA;AAAMT,QAAAA,KAAAA,CAAMiC,SAAS;AAAEjC,QAAAA,KAAAA,CAAMkC;AAAO,KAAA,CAAA;;;IAIxC,MAAMI,aAAAA,GAAgBnC,YAAYoC,SAAAA,IAAatB,WAAAA;IAE/C,OAAO;AAAER,QAAAA,IAAAA;AAAM6B,QAAAA;AAAc,KAAA;AAC/B;MAEaE,YAAAA,GAAe,IAAA;AAC1B,IAAA,MAAMjC,YAAAA,GAAeC,SAAAA,EAAAA;IACrB,MAAM,CAACqB,WAAWY,YAAAA,CAAa,GAAGpC,SAASuB,gBAAAA,CAAiBrB,YAAAA,CAAAA,CAAcsB,SAAS,CAACa,OAAO,EAAA,CAAA;IAE3Ff,SAAAA,CAAU,IAAA;AACRC,QAAAA,gBAAAA,CAAiBrB,cACdsB,SAAS,CAACC,QAAQ,EAAA,CAClBC,IAAI,CAAC,CAACrC,IAAAA,GAAAA;YACL+C,YAAAA,CAAa/C,IAAAA,CAAAA;AACf,QAAA,CAAA,CAAA;IACJ,CAAA,EAAG;AAACa,QAAAA;AAAa,KAAA,CAAA;IAEjB,OAAOsB,SAAAA;AACT;AAEO,MAAMc,qBAAAA,GAAwB,CACnCjD,IAAAA,EACAO,QAAAA,EACAN,MAAAA,GAAAA;IAEAM,QAAAA,CAAS;QACPJ,IAAAA,EAAM,8BAAA;QACN+C,QAAAA,EAAUlD,IAAAA;AACVmD,QAAAA,kBAAAA,EAAoBlD,OAAOmD;AAC7B,KAAA,CAAA;AACF;AAEO,MAAMC,8BAAAA,GAAiC,CAC5CrD,IAAAA,EACAO,QAAAA,GAAAA;IAEAA,QAAAA,CAAS;QACPJ,IAAAA,EAAM,qBAAA;AACNmD,QAAAA,KAAAA,EAAOtD,KAAKuD,aAAa;AACzBC,QAAAA,uBAAAA,EAAyBxD,KAAKyD;AAChC,KAAA,CAAA;AACF;AAEO,MAAMxC,kBAAAA,GAAqB,CAACR,OAAAA,EAAwBW,IAAAA,GAAAA;IACzD,IAAIX,OAAAA,KAAY,MAAM,OAAO,IAAA;IAE7B,MAAMiD,GAAAA,GAAM,IAAIC,GAAAA,CAAIvC,IAAAA,CAAAA;AACpBsC,IAAAA,GAAAA,CAAIE,MAAM,GAAG,EAAA;AAEb,IAAA,MAAMC,UAAAA,GAAaH,GAAAA,CAAII,QAAQ,EAAA,CAAGC,IAAI,EAAA;AACtC,IAAA,MAAMC,YAAAA,GAAevD,OAAAA,CAAQwD,OAAO,CAAC,KAAA,EAAO,KAAA,CAAA,CAAOA,OAAO,CAAC,KAAA,EAAO,WAAA,CAAA,CAAaA,OAAO,CAAC,UAAA,EAAY,MAAA,CAAA;IAEnG,MAAMC,KAAAA,GAAQ,IAAIC,MAAAA,CAAOH,YAAAA,CAAAA;IACzB,MAAMI,KAAAA,GAAQP,UAAAA,CAAWO,KAAK,CAACF,KAAAA,CAAAA;AAE/B,IAAA,IAAIE,KAAAA,IAASA,KAAK,CAAC,CAAA,CAAE,EAAE;QACrB,OAAOA,KAAAA,GAAQ,CAAA,CAAE;AACnB,IAAA;IAEA,OAAO,IAAA;AACT;AAEO,SAASC,UAAAA,CAAWC,QAA4B,EAAEC,OAAkB,EAAA;AACzE,IAAA,OAAOD,SAASE,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,EAAE,KAAKH,OAAAA,CAAAA;AACvC;AAEO,SAASI,qBACd,EAAEL,QAAQ,EAAEM,oBAAoB,EAA8E,EAC9GC,UAAgB,EAAA;AAEhB,IAAA,OAAOC,OAAAA,CAAQ,IAAA;AACb,QAAA,MAAMC,MAAM,EAAC;AACb,QAAA,KAAK,MAAMR,OAAAA,IAAW;AAAID,YAAAA,GAAAA,QAAAA;AAAaM,YAAAA,GAAAA;SAAqB,CAAE;YAC5D,IAAIL,OAAO,CAACM,UAAAA,CAAW,EAAEG,MAAAA,CAAOC,MAAM,CAACF,GAAAA,EAAKR,OAAO,CAACM,UAAAA,CAAW,CAAA;AACjE,QAAA;QACA,OAAOE,GAAAA;IACT,CAAA,EAAG;AAACT,QAAAA,QAAAA;AAAUM,QAAAA,oBAAAA;AAAsBC,QAAAA;AAAW,KAAA,CAAA;AACjD;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../../../../../web/src/ui/b2b/utils.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport useSWRMutation, { MutationFetcher, SWRMutationConfiguration } from 'swr/mutation';\nimport { useConfig, useErrorCallback, useEventCallback, useGlobalReducer, useStytch } from './GlobalContextProvider';\nimport { ErrorType } from './types/ErrorType';\nimport { AppScreens } from './types/AppScreens';\nimport {\n AuthFlowType,\n B2BAuthenticateResponseWithMFA,\n B2BDiscoveryAuthenticateResponse,\n B2BMagicLinksDiscoveryAuthenticateResponse,\n StytchError,\n StytchEvent,\n StytchEventType,\n StytchAPIError,\n StytchProjectConfigurationInput,\n} from '@stytch/core/public';\nimport { StytchB2BExtendedLoginConfig } from '../../types';\nimport { readB2BInternals } from '../../utils/internal';\nimport { B2BOrganizationsGetBySlugResponse } from '@stytch/core/public';\nimport { StytchB2BClient } from '../../b2b/StytchB2BClient';\nimport { Action } from './reducer';\nimport type { ProductId, StytchB2BProduct } from './StytchB2BProduct';\n\ntype RecursiveDotNotation<T> = T extends object\n ? {\n [K in keyof T]: K extends string\n ? T[K] extends (...args: never[]) => unknown\n ? K\n : T[K] extends object\n ? `${K}.${RecursiveDotNotation<T[K]>}`\n : K\n : never;\n }[keyof T]\n : never;\n\ntype ValidStytchMutationKey = `stytch.${RecursiveDotNotation<StytchB2BClient>}`;\n\nconst KeyToStytchEventMap = {\n 'stytch.magicLinks.authenticate': StytchEventType.B2BMagicLinkAuthenticate,\n 'stytch.sso.authenticate': StytchEventType.B2BSSOAuthenticate,\n 'stytch.sso.discoverConnections': StytchEventType.B2BSSODiscoverConnections,\n 'stytch.magicLinks.discovery.authenticate': StytchEventType.B2BMagicLinkDiscoveryAuthenticate,\n 'stytch.discovery.organizations.create': StytchEventType.B2BDiscoveryOrganizationsCreate,\n 'stytch.discovery.intermediateSessions.exchange': StytchEventType.B2BDiscoveryIntermediateSessionExchange,\n 'stytch.magicLinks.email.loginOrSignup': StytchEventType.B2BMagicLinkEmailLoginOrSignup,\n 'stytch.magicLinks.email.discovery.send': StytchEventType.B2BMagicLinkEmailDiscoverySend,\n 'stytch.oauth.authenticate': StytchEventType.B2BOAuthAuthenticate,\n 'stytch.oauth.discovery.authenticate': StytchEventType.B2BOAuthDiscoveryAuthenticate,\n 'stytch.otps.sms.send': StytchEventType.B2BSMSOTPSend,\n 'stytch.otps.sms.authenticate': StytchEventType.B2BSMSOTPAuthenticate,\n 'stytch.totp.create': StytchEventType.B2BTOTPCreate,\n 'stytch.totp.authenticate': StytchEventType.B2BTOTPAuthenticate,\n 'stytch.recoveryCodes.recover': StytchEventType.B2BRecoveryCodesRecover,\n 'stytch.impersonation.authenticate': StytchEventType.B2BImpersonationAuthenticate,\n 'stytch.otps.email.authenticate': StytchEventType.B2BOTPsEmailAuthenticate,\n 'stytch.otps.email.discovery.authenticate': StytchEventType.B2BOTPsEmailDiscoveryAuthenticate,\n 'stytch.otps.email.discovery.send': StytchEventType.B2BOTPsEmailDiscoverySend,\n 'stytch.otps.email.loginOrSignup': StytchEventType.B2BOTPsEmailLoginOrSignup,\n 'stytch.organization.getBySlug': StytchEventType.B2BOrganizationsGetBySlug,\n} satisfies Partial<Record<ValidStytchMutationKey, StytchEventType>>;\n\ntype StytchExternalMutationKey = keyof typeof KeyToStytchEventMap;\n\ntype StytchInternalMutationKey = `internal.${string}`;\n\nexport type StytchMutationKey = StytchExternalMutationKey | StytchInternalMutationKey;\n\nexport function getStytchEventByKey(key: StytchMutationKey): StytchEventType | undefined {\n return KeyToStytchEventMap[key as StytchExternalMutationKey];\n}\n\nexport const useMutate = <TData, TError, TKey extends StytchMutationKey, TExtraArg = never>(\n key: TKey,\n fetcher: MutationFetcher<TData, TExtraArg, TKey>,\n options: SWRMutationConfiguration<TData, TError, TExtraArg, TKey> = {},\n) => {\n const onEvent = useEventCallback();\n const onError = useErrorCallback();\n\n const result = useSWRMutation<TData, TError, TKey, TExtraArg>(key, fetcher, {\n throwOnError: false,\n ...options,\n onSuccess: (data, key, config) => {\n const eventType = getStytchEventByKey(key as StytchMutationKey);\n if (eventType) {\n onEvent({ type: eventType, data } as StytchEvent<StytchProjectConfigurationInput>);\n }\n\n options.onSuccess?.(data, key, config);\n },\n onError: (error, key, config) => {\n onError(error as StytchError);\n\n options.onError?.(error, key, config);\n },\n });\n\n // Hide the error while mutating. This helps avoid the errors continuing to show after the user has clicked submit\n // and also ensures repeating errors causes <ErrorText> to re-render which is important for screenreaders to\n // re-announce them\n return result.isMutating ? { ...result, error: undefined } : result;\n};\n\n/**\n *\n * This hook triggers a request to retrieve the organization from the slug.\n * The hook only triggers the request if the SDK is being used in an organization flow,\n * and a slug pattern is present. The hook returns an isSearching boolean that can be used\n * to display a loading state while the search is in progress.\n */\nexport const useExtractSlug = () => {\n const [state, dispatch] = useGlobalReducer();\n const [pattern, setPattern] = useState<string | null | undefined>();\n const config = useConfig();\n\n const stytchClient = useStytch();\n const slug = config.organizationSlug ?? extractFromPattern(pattern || null, window.location.href);\n\n const { trigger, isMutating: isSearching } = useMutate<\n B2BOrganizationsGetBySlugResponse,\n StytchAPIError,\n StytchExternalMutationKey,\n { slug: string }\n >(\n 'stytch.organization.getBySlug',\n (_: string, { arg: { slug } }: { arg: { slug: string } }) =>\n stytchClient.organization.getBySlug({ organization_slug: slug }),\n {\n onSuccess: ({ organization }) => {\n if (organization === null) {\n dispatch({\n type: 'set_error_message_and_transition',\n errorType: ErrorType.Organization,\n canGoBack: false,\n });\n } else {\n dispatch({\n type: 'set_organization',\n organization: {\n ...organization,\n },\n });\n }\n },\n },\n );\n\n useEffect(() => {\n readB2BInternals(stytchClient)\n .bootstrap.getAsync()\n .then(({ slugPattern }) => {\n setPattern(slugPattern);\n });\n }, [stytchClient]);\n\n useEffect(() => {\n if (\n slug !== null &&\n state.flowState.organization === null &&\n state.screen === AppScreens.Main &&\n state.flowState.type == AuthFlowType.Organization\n ) {\n trigger({ slug });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- SDK-1354\n }, [slug, state.flowState, state.screen]);\n\n // The org is pending identification if the slug pattern has not yet been\n // determined (i.e., `undefined`) or the organization request is in progress\n const resultPending = pattern === undefined || isSearching;\n\n return { slug, resultPending };\n};\n\nexport const useBootstrap = () => {\n const stytchClient = useStytch();\n const [bootstrap, setBootstrap] = useState(readB2BInternals(stytchClient).bootstrap.getSync());\n\n useEffect(() => {\n readB2BInternals(stytchClient)\n .bootstrap.getAsync()\n .then((data) => {\n setBootstrap(data);\n });\n }, [stytchClient]);\n\n return bootstrap;\n};\n\nexport const onAuthenticateSuccess = (\n data: B2BAuthenticateResponseWithMFA<StytchProjectConfigurationInput>,\n dispatch: React.Dispatch<Action>,\n config: StytchB2BExtendedLoginConfig,\n) => {\n dispatch({\n type: 'primary_authenticate_success',\n response: data,\n includedMfaMethods: config.mfaProductInclude,\n });\n};\n\nexport const onDiscoveryAuthenticateSuccess = (\n data: B2BDiscoveryAuthenticateResponse | B2BMagicLinksDiscoveryAuthenticateResponse,\n dispatch: React.Dispatch<Action>,\n) => {\n dispatch({\n type: 'set_discovery_state',\n email: data.email_address,\n discoveredOrganizations: data.discovered_organizations,\n });\n};\n\nexport const extractFromPattern = (pattern: string | null, href: string): string | null => {\n if (pattern === null) return null;\n\n const url = new URL(href);\n url.search = '';\n\n const currentUrl = url.toString().trim();\n const regexPattern = pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '(?:[^.]+)').replace('{{slug}}', '(.+)');\n\n const regex = new RegExp(regexPattern);\n const match = currentUrl.match(regex);\n\n if (match && match[1]) {\n return match?.[1];\n }\n\n return null;\n};\n\nexport function hasProduct(products: StytchB2BProduct[], product: ProductId) {\n return products.some((p) => p.id === product);\n}\n\nexport function useProductComponents<Type extends 'screens' | 'mainScreen' | 'ssoAndOAuthButtons'>(\n { products, organizationProducts }: { products: StytchB2BProduct[]; organizationProducts: StytchB2BProduct[] },\n screenType: Type,\n) {\n return useMemo(() => {\n const map = {} as Required<StytchB2BProduct[Type]>;\n for (const product of [...products, ...organizationProducts]) {\n if (product[screenType]) Object.assign(map, product[screenType]);\n }\n return map;\n }, [products, organizationProducts, screenType]);\n}\n"],"names":["KeyToStytchEventMap","StytchEventType","B2BMagicLinkAuthenticate","B2BSSOAuthenticate","B2BSSODiscoverConnections","B2BMagicLinkDiscoveryAuthenticate","B2BDiscoveryOrganizationsCreate","B2BDiscoveryIntermediateSessionExchange","B2BMagicLinkEmailLoginOrSignup","B2BMagicLinkEmailDiscoverySend","B2BOAuthAuthenticate","B2BOAuthDiscoveryAuthenticate","B2BSMSOTPSend","B2BSMSOTPAuthenticate","B2BTOTPCreate","B2BTOTPAuthenticate","B2BRecoveryCodesRecover","B2BImpersonationAuthenticate","B2BOTPsEmailAuthenticate","B2BOTPsEmailDiscoveryAuthenticate","B2BOTPsEmailDiscoverySend","B2BOTPsEmailLoginOrSignup","B2BOrganizationsGetBySlug","getStytchEventByKey","key","useMutate","fetcher","options","onEvent","useEventCallback","onError","useErrorCallback","result","useSWRMutation","throwOnError","onSuccess","data","config","eventType","type","error","isMutating","undefined","useExtractSlug","state","dispatch","useGlobalReducer","pattern","setPattern","useState","useConfig","stytchClient","useStytch","slug","organizationSlug","extractFromPattern","window","location","href","trigger","isSearching","_","arg","organization","getBySlug","organization_slug","errorType","ErrorType","Organization","canGoBack","useEffect","readB2BInternals","bootstrap","getAsync","then","slugPattern","flowState","screen","AppScreens","Main","AuthFlowType","resultPending","useBootstrap","setBootstrap","getSync","onAuthenticateSuccess","response","includedMfaMethods","mfaProductInclude","onDiscoveryAuthenticateSuccess","email","email_address","discoveredOrganizations","discovered_organizations","url","URL","search","currentUrl","toString","trim","regexPattern","replace","regex","RegExp","match","hasProduct","products","product","some","p","id","useProductComponents","organizationProducts","screenType","useMemo","map","Object","assign"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import React__default, { useState, useRef, useCallback, useEffect } from 'react';
2
- import classNames from '../../../../../../_virtual/index3.mjs';
2
+ import classNames from '../../../../../../_virtual/index.mjs';
3
3
  import { OAuthButton } from './OAuthButton.mjs';
4
4
  import { useConfig, useStytch } from '../GlobalContextProvider.mjs';
5
5
  import { readB2CInternals } from '../../../utils/internal.mjs';
@@ -1,5 +1,5 @@
1
1
  import React__default from 'react';
2
- import classNames from '../../../../../../../../_virtual/index3.mjs';
2
+ import classNames from '../../../../../../../../_virtual/index.mjs';
3
3
  import { useLingui } from '../../../../../../../../node_modules/@lingui/react/dist/index.mjs';
4
4
  import { useConfig } from '../../../GlobalContextProvider.mjs';
5
5
  import Typography from '../../../../components/atoms/Typography.mjs';
@@ -4,7 +4,7 @@ import Button from '../../../components/atoms/Button.mjs';
4
4
  import Typography from '../../../components/atoms/Typography.mjs';
5
5
  import Input from '../../../components/molecules/Input.mjs';
6
6
  import modules_20f268b7 from './EditableRow.module.css.mjs';
7
- import classNames from '../../../../../../../_virtual/index3.mjs';
7
+ import classNames from '../../../../../../../_virtual/index.mjs';
8
8
 
9
9
  const commonButtonProps = {
10
10
  block: false,
@@ -2,6 +2,8 @@ import React__default, { useState, useEffect } from 'react';
2
2
  import { useStytch, useGlobalReducer, useConfig, AppScreens } from '../../GlobalContextProvider.mjs';
3
3
  import { readB2CInternals } from '../../../../utils/internal.mjs';
4
4
  import { EmailConfirmationView } from '../../../components/organisms/EmailConfirmationView.mjs';
5
+ import { useCountdown } from '../../../components/atoms/Countdown.mjs';
6
+ import { usePasswordlessAuthenticate } from './usePasswordlessAuthenticate.mjs';
5
7
  import { EmailSentType } from '../../../../../../core/src/Events.mjs';
6
8
 
7
9
  /**
@@ -35,12 +37,14 @@ import { EmailSentType } from '../../../../../../core/src/Events.mjs';
35
37
  // we simply won't provide a hint!
36
38
  return null;
37
39
  };
38
- const EmailConfirmation = (props)=>{
40
+ const EmailConfirmation = ({ showGoBack = true })=>{
39
41
  const stytchClient = useStytch();
40
42
  const [state, dispatch] = useGlobalReducer();
41
43
  const emailDomain = useEmailDomain();
44
+ const countdown = useCountdown();
45
+ const { sendLink, isSubmitting } = usePasswordlessAuthenticate();
42
46
  const email = state.formState.magicLinkState.email !== '' ? state.formState.magicLinkState.email : state.formState.passwordState.email;
43
- const reset = ()=>{
47
+ const goBack = ()=>{
44
48
  dispatch({
45
49
  type: 'set_magic_link_email',
46
50
  email: ''
@@ -59,9 +63,11 @@ const EmailConfirmation = (props)=>{
59
63
  };
60
64
  return /*#__PURE__*/ React__default.createElement(EmailConfirmationView, {
61
65
  emailDomain: emailDomain,
62
- reset: reset,
63
66
  email: email,
64
- ...props
67
+ goBack: showGoBack ? goBack : undefined,
68
+ resend: sendLink,
69
+ countdown: countdown,
70
+ isSubmitting: isSubmitting
65
71
  });
66
72
  };
67
73
 
@@ -1 +1 @@
1
- {"version":3,"file":"EmailConfirmation.mjs","sources":["../../../../../../../../../../web/src/ui/b2c/screens/Secondary/EmailConfirmation.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { AppScreens, useConfig, useGlobalReducer, useStytch } from '../../GlobalContextProvider';\nimport { readB2CInternals } from '../../../../utils/internal';\nimport { EmailConfirmationView } from '../../../components/organisms/EmailConfirmationView';\nimport { EmailSentType } from '@stytch/core';\n\n/**\n * Resolves the best email domain to use as a hint for login\n */\nexport const useEmailDomain = () => {\n const stytch = useStytch();\n const config = useConfig();\n /**\n * Read the emailDomains out of sync storage, then read out of async storage\n * TODO - Should all bootstrap data live in the config somewhere?\n */\n const [emailDomains, setEmailDomains] = useState(() => {\n const { emailDomains } = readB2CInternals(stytch).bootstrap.getSync();\n return emailDomains;\n });\n\n useEffect(() => {\n readB2CInternals(stytch)\n .bootstrap.getAsync()\n .then(({ emailDomains }) => {\n setEmailDomains(emailDomains);\n });\n }, [stytch]);\n\n // If a domain is explicitly passed in, use it!\n if (config.emailMagicLinksOptions?.domainHint) {\n return config.emailMagicLinksOptions?.domainHint;\n }\n // If there can only be one logical choice, use it!\n if (emailDomains?.length === 1) {\n return emailDomains[0];\n }\n // If it isn't clear who sent the email\n // we simply won't provide a hint!\n return null;\n};\n\nexport const EmailConfirmation = (props: { showGoBack?: boolean }) => {\n const stytchClient = useStytch();\n const [state, dispatch] = useGlobalReducer();\n const emailDomain = useEmailDomain();\n\n const email =\n state.formState.magicLinkState.email !== ''\n ? state.formState.magicLinkState.email\n : state.formState.passwordState.email;\n\n const reset = () => {\n dispatch({ type: 'set_magic_link_email', email: '' });\n dispatch({ type: 'transition', screen: AppScreens.Main });\n readB2CInternals(stytchClient).networkClient.logEvent({\n name: 'email_try_again_clicked',\n details: { email: email, type: EmailSentType.LoginOrCreateEML },\n });\n };\n\n return <EmailConfirmationView emailDomain={emailDomain} reset={reset} email={email} {...props} />;\n};\n"],"names":["useEmailDomain","stytch","useStytch","config","useConfig","emailDomains","setEmailDomains","useState","readB2CInternals","bootstrap","getSync","useEffect","getAsync","then","emailMagicLinksOptions","domainHint","length","EmailConfirmation","props","stytchClient","state","dispatch","useGlobalReducer","emailDomain","email","formState","magicLinkState","passwordState","reset","type","screen","AppScreens","Main","networkClient","logEvent","name","details","EmailSentType","LoginOrCreateEML","React","EmailConfirmationView"],"mappings":";;;;;;AAMA;;UAGaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf;;;AAGC,MACD,MAAM,CAACC,YAAAA,EAAcC,eAAAA,CAAgB,GAAGC,QAAAA,CAAS,IAAA;QAC/C,MAAM,EAAEF,YAAY,EAAE,GAAGG,iBAAiBP,MAAAA,CAAAA,CAAQQ,SAAS,CAACC,OAAO,EAAA;QACnE,OAAOL,YAAAA;AACT,IAAA,CAAA,CAAA;IAEAM,SAAAA,CAAU,IAAA;QACRH,gBAAAA,CAAiBP,MAAAA,CAAAA,CACdQ,SAAS,CAACG,QAAQ,EAAA,CAClBC,IAAI,CAAC,CAAC,EAAER,YAAY,EAAE,GAAA;YACrBC,eAAAA,CAAgBD,YAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;IACJ,CAAA,EAAG;AAACJ,QAAAA;AAAO,KAAA,CAAA;;IAGX,IAAIE,MAAAA,CAAOW,sBAAsB,EAAEC,UAAAA,EAAY;QAC7C,OAAOZ,MAAAA,CAAOW,sBAAsB,EAAEC,UAAAA;AACxC,IAAA;;IAEA,IAAIV,YAAAA,EAAcW,WAAW,CAAA,EAAG;QAC9B,OAAOX,YAAY,CAAC,CAAA,CAAE;AACxB,IAAA;;;IAGA,OAAO,IAAA;AACT;AAEO,MAAMY,oBAAoB,CAACC,KAAAA,GAAAA;AAChC,IAAA,MAAMC,YAAAA,GAAejB,SAAAA,EAAAA;IACrB,MAAM,CAACkB,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAAA,GAAcvB,cAAAA,EAAAA;IAEpB,MAAMwB,KAAAA,GACJJ,MAAMK,SAAS,CAACC,cAAc,CAACF,KAAK,KAAK,EAAA,GACrCJ,KAAAA,CAAMK,SAAS,CAACC,cAAc,CAACF,KAAK,GACpCJ,MAAMK,SAAS,CAACE,aAAa,CAACH,KAAK;AAEzC,IAAA,MAAMI,KAAAA,GAAQ,IAAA;QACZP,QAAAA,CAAS;YAAEQ,IAAAA,EAAM,sBAAA;YAAwBL,KAAAA,EAAO;AAAG,SAAA,CAAA;QACnDH,QAAAA,CAAS;YAAEQ,IAAAA,EAAM,YAAA;AAAcC,YAAAA,MAAAA,EAAQC,WAAWC;AAAK,SAAA,CAAA;AACvDxB,QAAAA,gBAAAA,CAAiBW,YAAAA,CAAAA,CAAcc,aAAa,CAACC,QAAQ,CAAC;YACpDC,IAAAA,EAAM,yBAAA;YACNC,OAAAA,EAAS;gBAAEZ,KAAAA,EAAOA,KAAAA;AAAOK,gBAAAA,IAAAA,EAAMQ,cAAcC;AAAiB;AAChE,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBAAOC,cAAA,CAAA,aAAA,CAACC,qBAAAA,EAAAA;QAAsBjB,WAAAA,EAAaA,WAAAA;QAAaK,KAAAA,EAAOA,KAAAA;QAAOJ,KAAAA,EAAOA,KAAAA;AAAQ,QAAA,GAAGN;;AAC1F;;;;"}
1
+ {"version":3,"file":"EmailConfirmation.mjs","sources":["../../../../../../../../../../web/src/ui/b2c/screens/Secondary/EmailConfirmation.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { AppScreens, useConfig, useGlobalReducer, useStytch } from '../../GlobalContextProvider';\nimport { readB2CInternals } from '../../../../utils/internal';\nimport { EmailConfirmationView } from '../../../components/organisms/EmailConfirmationView';\nimport { EmailSentType } from '@stytch/core';\nimport { useCountdown } from '../../../components/atoms/Countdown';\n\nimport { usePasswordlessAuthenticate } from './usePasswordlessAuthenticate';\n\n/**\n * Resolves the best email domain to use as a hint for login\n */\nexport const useEmailDomain = () => {\n const stytch = useStytch();\n const config = useConfig();\n /**\n * Read the emailDomains out of sync storage, then read out of async storage\n * TODO - Should all bootstrap data live in the config somewhere?\n */\n const [emailDomains, setEmailDomains] = useState(() => {\n const { emailDomains } = readB2CInternals(stytch).bootstrap.getSync();\n return emailDomains;\n });\n\n useEffect(() => {\n readB2CInternals(stytch)\n .bootstrap.getAsync()\n .then(({ emailDomains }) => {\n setEmailDomains(emailDomains);\n });\n }, [stytch]);\n\n // If a domain is explicitly passed in, use it!\n if (config.emailMagicLinksOptions?.domainHint) {\n return config.emailMagicLinksOptions?.domainHint;\n }\n // If there can only be one logical choice, use it!\n if (emailDomains?.length === 1) {\n return emailDomains[0];\n }\n // If it isn't clear who sent the email\n // we simply won't provide a hint!\n return null;\n};\n\nexport const EmailConfirmation = ({ showGoBack = true }: { showGoBack?: boolean }) => {\n const stytchClient = useStytch();\n const [state, dispatch] = useGlobalReducer();\n const emailDomain = useEmailDomain();\n const countdown = useCountdown();\n const { sendLink, isSubmitting } = usePasswordlessAuthenticate();\n\n const email =\n state.formState.magicLinkState.email !== ''\n ? state.formState.magicLinkState.email\n : state.formState.passwordState.email;\n\n const goBack = () => {\n dispatch({ type: 'set_magic_link_email', email: '' });\n dispatch({ type: 'transition', screen: AppScreens.Main });\n readB2CInternals(stytchClient).networkClient.logEvent({\n name: 'email_try_again_clicked',\n details: { email: email, type: EmailSentType.LoginOrCreateEML },\n });\n };\n\n return (\n <EmailConfirmationView\n emailDomain={emailDomain}\n email={email}\n goBack={showGoBack ? goBack : undefined}\n resend={sendLink}\n countdown={countdown}\n isSubmitting={isSubmitting}\n />\n );\n};\n"],"names":["useEmailDomain","stytch","useStytch","config","useConfig","emailDomains","setEmailDomains","useState","readB2CInternals","bootstrap","getSync","useEffect","getAsync","then","emailMagicLinksOptions","domainHint","length","EmailConfirmation","showGoBack","stytchClient","state","dispatch","useGlobalReducer","emailDomain","countdown","useCountdown","sendLink","isSubmitting","usePasswordlessAuthenticate","email","formState","magicLinkState","passwordState","goBack","type","screen","AppScreens","Main","networkClient","logEvent","name","details","EmailSentType","LoginOrCreateEML","React","EmailConfirmationView","undefined","resend"],"mappings":";;;;;;;;AASA;;UAGaA,cAAAA,GAAiB,IAAA;AAC5B,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf,IAAA,MAAMC,MAAAA,GAASC,SAAAA,EAAAA;AACf;;;AAGC,MACD,MAAM,CAACC,YAAAA,EAAcC,eAAAA,CAAgB,GAAGC,QAAAA,CAAS,IAAA;QAC/C,MAAM,EAAEF,YAAY,EAAE,GAAGG,iBAAiBP,MAAAA,CAAAA,CAAQQ,SAAS,CAACC,OAAO,EAAA;QACnE,OAAOL,YAAAA;AACT,IAAA,CAAA,CAAA;IAEAM,SAAAA,CAAU,IAAA;QACRH,gBAAAA,CAAiBP,MAAAA,CAAAA,CACdQ,SAAS,CAACG,QAAQ,EAAA,CAClBC,IAAI,CAAC,CAAC,EAAER,YAAY,EAAE,GAAA;YACrBC,eAAAA,CAAgBD,YAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;IACJ,CAAA,EAAG;AAACJ,QAAAA;AAAO,KAAA,CAAA;;IAGX,IAAIE,MAAAA,CAAOW,sBAAsB,EAAEC,UAAAA,EAAY;QAC7C,OAAOZ,MAAAA,CAAOW,sBAAsB,EAAEC,UAAAA;AACxC,IAAA;;IAEA,IAAIV,YAAAA,EAAcW,WAAW,CAAA,EAAG;QAC9B,OAAOX,YAAY,CAAC,CAAA,CAAE;AACxB,IAAA;;;IAGA,OAAO,IAAA;AACT;MAEaY,iBAAAA,GAAoB,CAAC,EAAEC,UAAAA,GAAa,IAAI,EAA4B,GAAA;AAC/E,IAAA,MAAMC,YAAAA,GAAejB,SAAAA,EAAAA;IACrB,MAAM,CAACkB,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;AAC1B,IAAA,MAAMC,WAAAA,GAAcvB,cAAAA,EAAAA;AACpB,IAAA,MAAMwB,SAAAA,GAAYC,YAAAA,EAAAA;AAClB,IAAA,MAAM,EAAEC,QAAQ,EAAEC,YAAY,EAAE,GAAGC,2BAAAA,EAAAA;IAEnC,MAAMC,KAAAA,GACJT,MAAMU,SAAS,CAACC,cAAc,CAACF,KAAK,KAAK,EAAA,GACrCT,KAAAA,CAAMU,SAAS,CAACC,cAAc,CAACF,KAAK,GACpCT,MAAMU,SAAS,CAACE,aAAa,CAACH,KAAK;AAEzC,IAAA,MAAMI,MAAAA,GAAS,IAAA;QACbZ,QAAAA,CAAS;YAAEa,IAAAA,EAAM,sBAAA;YAAwBL,KAAAA,EAAO;AAAG,SAAA,CAAA;QACnDR,QAAAA,CAAS;YAAEa,IAAAA,EAAM,YAAA;AAAcC,YAAAA,MAAAA,EAAQC,WAAWC;AAAK,SAAA,CAAA;AACvD7B,QAAAA,gBAAAA,CAAiBW,YAAAA,CAAAA,CAAcmB,aAAa,CAACC,QAAQ,CAAC;YACpDC,IAAAA,EAAM,yBAAA;YACNC,OAAAA,EAAS;gBAAEZ,KAAAA,EAAOA,KAAAA;AAAOK,gBAAAA,IAAAA,EAAMQ,cAAcC;AAAiB;AAChE,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEC,cAAA,CAAA,aAAA,CAACC,qBAAAA,EAAAA;QACCtB,WAAAA,EAAaA,WAAAA;QACbM,KAAAA,EAAOA,KAAAA;AACPI,QAAAA,MAAAA,EAAQf,aAAae,MAAAA,GAASa,SAAAA;QAC9BC,MAAAA,EAAQrB,QAAAA;QACRF,SAAAA,EAAWA,SAAAA;QACXG,YAAAA,EAAcA;;AAGpB;;;;"}
@@ -8,8 +8,9 @@ import { PasswordNewUser } from '../Password/PasswordNewUser.mjs';
8
8
  import { PasswordAuthenticate } from '../Password/PasswordAuthenticate.mjs';
9
9
  import Typography from '../../../components/atoms/Typography.mjs';
10
10
  import TextColumn from '../../../components/molecules/TextColumn.mjs';
11
- import { PasswordlessAuthenticate, usePasswordlessAuthenticate } from './PasswordlessAuthenticate.mjs';
11
+ import { PasswordlessAuthenticate } from './PasswordlessAuthenticate.mjs';
12
12
  import { hasProduct } from '../../utils.mjs';
13
+ import { usePasswordlessAuthenticate } from './usePasswordlessAuthenticate.mjs';
13
14
  import { OTPMethods } from '../../../../../../core/src/public/ui.mjs';
14
15
 
15
16
  const PasswordCreateAuthenticate = ()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordCreateAuthenticate.mjs","sources":["../../../../../../../../../../web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.tsx"],"sourcesContent":["import React, { Dispatch } from 'react';\nimport { OTPMethods } from '@stytch/core/public';\nimport { useLingui } from '@lingui/react/macro';\n\nimport Column from '../../../components/atoms/Column';\nimport Button from '../../../components/atoms/Button';\nimport { useGlobalReducer, AppScreens, useConfig } from '../../GlobalContextProvider';\nimport Divider from '../../../components/molecules/Divider';\nimport { PasswordNewUser } from '../Password/PasswordNewUser';\nimport { PasswordAuthenticate } from '../Password/PasswordAuthenticate';\nimport Typography from '../../../components/atoms/Typography';\nimport TextColumn from '../../../components/molecules/TextColumn';\nimport { PasswordlessAuthenticate, usePasswordlessAuthenticate } from './PasswordlessAuthenticate';\nimport { Action } from '../../reducer';\nimport { hasProduct } from '../../utils';\n\nexport const PasswordCreateAuthenticate = () => {\n const { t } = useLingui();\n const { emailMagicLinksOptions, otpOptions, products } = useConfig();\n const [state, dispatch] = useGlobalReducer();\n\n const otpMethods = otpOptions?.methods ?? [];\n const hasEmailMagicLink = hasProduct(products, 'emailMagicLinks') && !!emailMagicLinksOptions;\n const hasOTPEmail = otpMethods.includes(OTPMethods.Email);\n const secondaryType = hasOTPEmail ? 'otp' : hasEmailMagicLink ? 'eml' : undefined;\n const userType = state.formState.passwordState.type;\n\n const secondaryAuth = useSecondaryAuthenticate(secondaryType, { dispatch });\n\n return (\n <Column gap={2}>\n {(() => {\n switch (userType) {\n case 'new':\n return (\n <Column gap={6}>\n {secondaryAuth ? (\n <TextColumn\n header={t({ id: 'password.createAccount.title', message: 'Create an account' })}\n body={t({\n id: 'createAccount.title',\n message: 'Choose how you would like to create your account.',\n })}\n />\n ) : (\n <TextColumn\n header={t({ id: 'password.setPassword.title', message: 'Set a password' })}\n body={t({\n id: 'password.createAccount.content',\n message: 'Finish creating your account by setting a password.',\n })}\n />\n )}\n\n {secondaryAuth && (\n <Button variant=\"primary\" onClick={secondaryAuth.handle} loading={secondaryAuth.isSubmitting}>\n {secondaryAuth.buttonText}\n </Button>\n )}\n\n {secondaryAuth && <Divider />}\n\n <PasswordNewUser />\n </Column>\n );\n\n case 'password':\n return (\n <Column gap={6}>\n <Typography variant=\"header\">{t({ id: 'password.login.title', message: 'Log in' })}</Typography>\n\n <PasswordAuthenticate />\n\n {secondaryAuth && <Divider />}\n\n {secondaryAuth && (\n <Button variant=\"outline\" onClick={secondaryAuth.handle} loading={secondaryAuth.isSubmitting}>\n {secondaryAuth.buttonText}\n </Button>\n )}\n </Column>\n );\n\n case 'passwordless':\n return <PasswordlessAuthenticate secondaryType={secondaryType} />;\n }\n })()}\n\n <Button variant=\"ghost\" onClick={() => dispatch({ type: 'transition', screen: AppScreens.Main })}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n </Column>\n );\n};\n\nfunction useSecondaryAuthenticate(\n secondaryType: 'eml' | 'otp' | undefined,\n {\n dispatch,\n }: {\n dispatch: Dispatch<Action>;\n },\n) {\n const { t } = useLingui();\n const { sendLink, sendCode, isSubmitting } = usePasswordlessAuthenticate();\n\n if (secondaryType == null) {\n return undefined;\n }\n\n const buttonText =\n secondaryType === 'eml'\n ? t({\n id: 'button.emailMagicLink',\n message: 'Email me a login link',\n })\n : t({\n id: 'button.emailOTP',\n message: 'Email me a login code',\n });\n\n const handle =\n secondaryType === 'eml'\n ? async () => {\n await sendLink();\n dispatch({ type: 'transition', screen: AppScreens.EmailConfirmation });\n }\n : async () => {\n await sendCode();\n dispatch({ type: 'transition', screen: AppScreens.OTPAuthenticate });\n };\n\n return {\n buttonText,\n handle,\n isSubmitting,\n };\n}\n"],"names":["PasswordCreateAuthenticate","useLingui","emailMagicLinksOptions","otpOptions","products","useConfig","state","dispatch","useGlobalReducer","otpMethods","methods","hasEmailMagicLink","hasProduct","hasOTPEmail","includes","OTPMethods","Email","secondaryType","undefined","userType","formState","passwordState","type","secondaryAuth","useSecondaryAuthenticate","React","Column","gap","TextColumn","header","body","Button","variant","onClick","handle","loading","isSubmitting","buttonText","Divider","PasswordNewUser","Typography","PasswordAuthenticate","PasswordlessAuthenticate","screen","AppScreens","Main","sendLink","sendCode","usePasswordlessAuthenticate","EmailConfirmation","OTPAuthenticate"],"mappings":"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"}
1
+ {"version":3,"file":"PasswordCreateAuthenticate.mjs","sources":["../../../../../../../../../../web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.tsx"],"sourcesContent":["import React, { Dispatch } from 'react';\nimport { OTPMethods } from '@stytch/core/public';\nimport { useLingui } from '@lingui/react/macro';\n\nimport Column from '../../../components/atoms/Column';\nimport Button from '../../../components/atoms/Button';\nimport { useGlobalReducer, AppScreens, useConfig } from '../../GlobalContextProvider';\nimport Divider from '../../../components/molecules/Divider';\nimport { PasswordNewUser } from '../Password/PasswordNewUser';\nimport { PasswordAuthenticate } from '../Password/PasswordAuthenticate';\nimport Typography from '../../../components/atoms/Typography';\nimport TextColumn from '../../../components/molecules/TextColumn';\nimport { PasswordlessAuthenticate } from './PasswordlessAuthenticate';\nimport { Action } from '../../reducer';\nimport { hasProduct } from '../../utils';\nimport { usePasswordlessAuthenticate } from './usePasswordlessAuthenticate';\n\nexport const PasswordCreateAuthenticate = () => {\n const { t } = useLingui();\n const { emailMagicLinksOptions, otpOptions, products } = useConfig();\n const [state, dispatch] = useGlobalReducer();\n\n const otpMethods = otpOptions?.methods ?? [];\n const hasEmailMagicLink = hasProduct(products, 'emailMagicLinks') && !!emailMagicLinksOptions;\n const hasOTPEmail = otpMethods.includes(OTPMethods.Email);\n const secondaryType = hasOTPEmail ? 'otp' : hasEmailMagicLink ? 'eml' : undefined;\n const userType = state.formState.passwordState.type;\n\n const secondaryAuth = useSecondaryAuthenticate(secondaryType, { dispatch });\n\n return (\n <Column gap={2}>\n {(() => {\n switch (userType) {\n case 'new':\n return (\n <Column gap={6}>\n {secondaryAuth ? (\n <TextColumn\n header={t({ id: 'password.createAccount.title', message: 'Create an account' })}\n body={t({\n id: 'createAccount.title',\n message: 'Choose how you would like to create your account.',\n })}\n />\n ) : (\n <TextColumn\n header={t({ id: 'password.setPassword.title', message: 'Set a password' })}\n body={t({\n id: 'password.createAccount.content',\n message: 'Finish creating your account by setting a password.',\n })}\n />\n )}\n\n {secondaryAuth && (\n <Button variant=\"primary\" onClick={secondaryAuth.handle} loading={secondaryAuth.isSubmitting}>\n {secondaryAuth.buttonText}\n </Button>\n )}\n\n {secondaryAuth && <Divider />}\n\n <PasswordNewUser />\n </Column>\n );\n\n case 'password':\n return (\n <Column gap={6}>\n <Typography variant=\"header\">{t({ id: 'password.login.title', message: 'Log in' })}</Typography>\n\n <PasswordAuthenticate />\n\n {secondaryAuth && <Divider />}\n\n {secondaryAuth && (\n <Button variant=\"outline\" onClick={secondaryAuth.handle} loading={secondaryAuth.isSubmitting}>\n {secondaryAuth.buttonText}\n </Button>\n )}\n </Column>\n );\n\n case 'passwordless':\n return <PasswordlessAuthenticate secondaryType={secondaryType} />;\n }\n })()}\n\n <Button variant=\"ghost\" onClick={() => dispatch({ type: 'transition', screen: AppScreens.Main })}>\n {t({ id: 'button.goBack', message: 'Go back' })}\n </Button>\n </Column>\n );\n};\n\nfunction useSecondaryAuthenticate(\n secondaryType: 'eml' | 'otp' | undefined,\n {\n dispatch,\n }: {\n dispatch: Dispatch<Action>;\n },\n) {\n const { t } = useLingui();\n const { sendLink, sendCode, isSubmitting } = usePasswordlessAuthenticate();\n\n if (secondaryType == null) {\n return undefined;\n }\n\n const buttonText =\n secondaryType === 'eml'\n ? t({\n id: 'button.emailMagicLink',\n message: 'Email me a login link',\n })\n : t({\n id: 'button.emailOTP',\n message: 'Email me a login code',\n });\n\n const handle =\n secondaryType === 'eml'\n ? async () => {\n await sendLink();\n dispatch({ type: 'transition', screen: AppScreens.EmailConfirmation });\n }\n : async () => {\n await sendCode();\n dispatch({ type: 'transition', screen: AppScreens.OTPAuthenticate });\n };\n\n return {\n buttonText,\n handle,\n isSubmitting,\n };\n}\n"],"names":["PasswordCreateAuthenticate","useLingui","emailMagicLinksOptions","otpOptions","products","useConfig","state","dispatch","useGlobalReducer","otpMethods","methods","hasEmailMagicLink","hasProduct","hasOTPEmail","includes","OTPMethods","Email","secondaryType","undefined","userType","formState","passwordState","type","secondaryAuth","useSecondaryAuthenticate","React","Column","gap","TextColumn","header","body","Button","variant","onClick","handle","loading","isSubmitting","buttonText","Divider","PasswordNewUser","Typography","PasswordAuthenticate","PasswordlessAuthenticate","screen","AppScreens","Main","sendLink","sendCode","usePasswordlessAuthenticate","EmailConfirmation","OTPAuthenticate"],"mappings":"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"}
@@ -2,7 +2,7 @@ import React__default, { useState } from 'react';
2
2
  import { EmailConfirmation } from './EmailConfirmation.mjs';
3
3
  import { OTPAuthenticate } from './OTPAuthenticate.mjs';
4
4
  import Divider from '../../../components/molecules/Divider.mjs';
5
- import { convertPasswordResetOptions, convertMagicLinkOptions } from '../../../../utils/index.mjs';
5
+ import { convertPasswordResetOptions } from '../../../../utils/index.mjs';
6
6
  import { useStytch, useConfig, useGlobalReducer, useEventCallback, useErrorCallback, AppScreens } from '../../GlobalContextProvider.mjs';
7
7
  import { useMountEffect } from '../../../hooks/useMountEffect.mjs';
8
8
  import Button from '../../../components/atoms/Button.mjs';
@@ -10,8 +10,8 @@ import ErrorText from '../../../components/molecules/ErrorText.mjs';
10
10
  import { getTranslatedError } from '../../../../utils/getTranslatedError.mjs';
11
11
  import { useLingui } from '../../../../../../../node_modules/@lingui/react/dist/index.mjs';
12
12
  import Column from '../../../components/atoms/Column.mjs';
13
- import { StytchEventType, OTPMethods } from '../../../../../../core/src/public/ui.mjs';
14
- import { DEFAULT_OTP_EXPIRATION_MINUTES } from '../../../../../../core/src/constants.mjs';
13
+ import { usePasswordlessAuthenticate } from './usePasswordlessAuthenticate.mjs';
14
+ import { StytchEventType } from '../../../../../../core/src/public/ui.mjs';
15
15
 
16
16
  const PasswordlessAuthenticate = ({ secondaryType })=>{
17
17
  const { i18n: $__i18n, _: $__ } = useLingui();
@@ -42,10 +42,14 @@ const PasswordlessAuthenticate = ({ secondaryType })=>{
42
42
  useMountEffect(()=>{
43
43
  switch(secondaryType){
44
44
  case 'eml':
45
- sendLink();
45
+ sendLink().catch(()=>{
46
+ // Swallow error to avoid unhandled promise errors, sendLink() will already show error toast
47
+ });
46
48
  return;
47
49
  case 'otp':
48
- sendCode();
50
+ sendCode().catch(()=>{
51
+ // Swallow error to avoid unhandled promise errors, sendLink() will already show error toast
52
+ });
49
53
  return;
50
54
  default:
51
55
  stytchClient.passwords.resetByEmailStart(convertPasswordResetOptions(email, passwordOptions)).then((data)=>{
@@ -68,8 +72,7 @@ const PasswordlessAuthenticate = ({ secondaryType })=>{
68
72
  }
69
73
  return /*#__PURE__*/ React__default.createElement(React__default.Fragment, null, secondaryType === 'eml' ? /*#__PURE__*/ React__default.createElement(EmailConfirmation, {
70
74
  showGoBack: false
71
- }) //
72
- : /*#__PURE__*/ React__default.createElement(OTPAuthenticate, {
75
+ }) : /*#__PURE__*/ React__default.createElement(OTPAuthenticate, {
73
76
  hideBackButton: true
74
77
  }), /*#__PURE__*/ React__default.createElement(Divider, null), /*#__PURE__*/ React__default.createElement(Column, {
75
78
  gap: 2
@@ -81,68 +84,6 @@ const PasswordlessAuthenticate = ({ secondaryType })=>{
81
84
  message: "Create a password instead"
82
85
  })), errorMessage && /*#__PURE__*/ React__default.createElement(ErrorText, null, errorMessage)));
83
86
  };
84
- function usePasswordlessAuthenticate() {
85
- const stytchClient = useStytch();
86
- const { emailMagicLinksOptions, otpOptions } = useConfig();
87
- const [state, dispatch] = useGlobalReducer();
88
- const onEvent = useEventCallback();
89
- const onError = useErrorCallback();
90
- const [isSubmitting, setIsSubmitting] = useState(false);
91
- const email = state.formState.passwordState.email;
92
- const sendLink = async ()=>{
93
- setIsSubmitting(true);
94
- try {
95
- const data = await stytchClient.magicLinks.email.loginOrCreate(email, convertMagicLinkOptions(emailMagicLinksOptions));
96
- onEvent({
97
- type: StytchEventType.MagicLinkLoginOrCreateEvent,
98
- data: {
99
- ...data,
100
- email
101
- }
102
- });
103
- dispatch({
104
- type: 'set_magic_link_email',
105
- email: email
106
- });
107
- } catch (e) {
108
- onError(e);
109
- throw e;
110
- } finally{
111
- setIsSubmitting(false);
112
- }
113
- };
114
- const sendCode = async ()=>{
115
- setIsSubmitting(true);
116
- try {
117
- const data = await stytchClient.otps.email.loginOrCreate(email, {
118
- expiration_minutes: otpOptions?.expirationMinutes ?? DEFAULT_OTP_EXPIRATION_MINUTES,
119
- locale: otpOptions?.locale
120
- });
121
- onEvent({
122
- type: StytchEventType.OTPsLoginOrCreateEvent,
123
- data
124
- });
125
- dispatch({
126
- type: 'update_otp_state',
127
- otpState: {
128
- type: OTPMethods.Email,
129
- methodId: data.method_id,
130
- otpDestination: email
131
- }
132
- });
133
- } catch (e) {
134
- onError(e);
135
- throw e;
136
- } finally{
137
- setIsSubmitting(false);
138
- }
139
- };
140
- return {
141
- sendLink,
142
- sendCode,
143
- isSubmitting
144
- };
145
- }
146
87
 
147
- export { PasswordlessAuthenticate, usePasswordlessAuthenticate };
88
+ export { PasswordlessAuthenticate };
148
89
  //# sourceMappingURL=PasswordlessAuthenticate.mjs.map