@unidy.io/sdk 1.0.1 → 1.1.0

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 (493) hide show
  1. package/dist/cjs/app-globals-DSKjcXX_.js +10 -0
  2. package/dist/cjs/app-globals-DSKjcXX_.js.map +1 -0
  3. package/dist/cjs/{auth-COn3PdbX.js → auth-BVKZHhXz.js} +11 -14
  4. package/dist/cjs/{auth-COn3PdbX.js.map → auth-BVKZHhXz.js.map} +1 -1
  5. package/dist/cjs/{auth-store-BT2pDmTN.js → auth-store-DC9EVec8.js} +4 -4
  6. package/dist/cjs/{auth-store-BT2pDmTN.js.map → auth-store-DC9EVec8.js.map} +1 -1
  7. package/dist/cjs/{flash-store-Bz-eFpp2.js → flash-store-BuIBuQDx.js} +3 -3
  8. package/dist/cjs/{flash-store-Bz-eFpp2.js.map → flash-store-BuIBuQDx.js.map} +1 -1
  9. package/dist/cjs/{i18n-DNuyTvmJ.js → i18n-Xy1So-ba.js} +580 -26
  10. package/dist/cjs/i18n-Xy1So-ba.js.map +1 -0
  11. package/dist/cjs/index-B_N5xKgH.js +12025 -0
  12. package/dist/cjs/index-B_N5xKgH.js.map +1 -0
  13. package/dist/cjs/{index-JpRzPaSm.js → index-DLz3FT7T.js} +3 -3
  14. package/dist/cjs/{index-JpRzPaSm.js.map → index-DLz3FT7T.js.map} +1 -1
  15. package/dist/cjs/{index-CtJ5meJ7.js → index-DiUlebpf.js} +18 -17
  16. package/dist/cjs/index-DiUlebpf.js.map +1 -0
  17. package/dist/cjs/index.cjs.js +10 -11
  18. package/dist/cjs/index.cjs.js.map +1 -1
  19. package/dist/cjs/loader.cjs.js +3 -4
  20. package/dist/cjs/loader.cjs.js.map +1 -1
  21. package/dist/cjs/{newsletter-helpers-BINJr8bg.js → newsletter-helpers-DtXuIac8.js} +9 -8
  22. package/dist/cjs/{newsletter-helpers-BINJr8bg.js.map → newsletter-helpers-DtXuIac8.js.map} +1 -1
  23. package/dist/cjs/{newsletter-store-D_RRzlpH.js → newsletter-store-dhtu8ywO.js} +3 -3
  24. package/dist/cjs/{newsletter-store-D_RRzlpH.js.map → newsletter-store-dhtu8ywO.js.map} +1 -1
  25. package/dist/cjs/{pagination-store-TtGIma9Z.js → pagination-store-BEiW3MQd.js} +3 -3
  26. package/dist/cjs/{pagination-store-TtGIma9Z.js.map → pagination-store-BEiW3MQd.js.map} +1 -1
  27. package/dist/cjs/{submit-button-logic-rhAjEO33.js → profile-helpers-DrcTgN5n.js} +4 -4
  28. package/dist/cjs/profile-helpers-DrcTgN5n.js.map +1 -0
  29. package/dist/cjs/{profile-store-JiqaDLcK.js → profile-store-P_BcYkef.js} +3 -3
  30. package/dist/cjs/{profile-store-JiqaDLcK.js.map → profile-store-P_BcYkef.js.map} +1 -1
  31. package/dist/cjs/sdk.cjs.js +3 -4
  32. package/dist/cjs/sdk.cjs.js.map +1 -1
  33. package/dist/cjs/u-conditional-render.cjs.entry.js +11 -12
  34. package/dist/cjs/u-conditional-render.entry.cjs.js.map +1 -1
  35. package/dist/cjs/u-config.cjs.entry.js +11 -12
  36. package/dist/cjs/u-config.entry.cjs.js.map +1 -1
  37. package/dist/cjs/u-email-field.cjs.entry.js +9 -8
  38. package/dist/cjs/u-email-field.entry.cjs.js.map +1 -1
  39. package/dist/cjs/u-error-message.cjs.entry.js +6 -6
  40. package/dist/cjs/u-field.u-raw-field.entry.cjs.js.map +1 -1
  41. package/dist/cjs/u-field_2.cjs.entry.js +13 -11
  42. package/dist/cjs/u-flash-message.cjs.entry.js +3 -3
  43. package/dist/cjs/u-full-profile.cjs.entry.js +6 -6
  44. package/dist/cjs/u-full-profile.entry.cjs.js.map +1 -1
  45. package/dist/cjs/u-logout-button.cjs.entry.js +9 -10
  46. package/dist/cjs/u-logout-button.entry.cjs.js.map +1 -1
  47. package/dist/cjs/u-magic-code-field.cjs.entry.js +11 -12
  48. package/dist/cjs/u-magic-code-field.entry.cjs.js.map +1 -1
  49. package/dist/cjs/u-missing-field.cjs.entry.js +4 -4
  50. package/dist/cjs/u-missing-fields-submit-button.cjs.entry.js +10 -11
  51. package/dist/cjs/u-missing-fields-submit-button.entry.cjs.js.map +1 -1
  52. package/dist/cjs/u-newsletter-checkbox.cjs.entry.js +11 -12
  53. package/dist/cjs/u-newsletter-checkbox.entry.cjs.js.map +1 -1
  54. package/dist/cjs/u-newsletter-logout-button.cjs.entry.js +11 -12
  55. package/dist/cjs/u-newsletter-logout-button.entry.cjs.js.map +1 -1
  56. package/dist/cjs/u-newsletter-preference-checkbox.cjs.entry.js +11 -12
  57. package/dist/cjs/u-newsletter-preference-checkbox.entry.cjs.js.map +1 -1
  58. package/dist/cjs/u-newsletter-resend-doi-button.cjs.entry.js +11 -12
  59. package/dist/cjs/u-newsletter-resend-doi-button.entry.cjs.js.map +1 -1
  60. package/dist/cjs/u-newsletter-root.cjs.entry.js +20 -14
  61. package/dist/cjs/u-newsletter-root.entry.cjs.js.map +1 -1
  62. package/dist/cjs/u-newsletter-toggle-subscription-button.cjs.entry.js +11 -12
  63. package/dist/cjs/u-newsletter-toggle-subscription-button.entry.cjs.js.map +1 -1
  64. package/dist/cjs/u-pagination-button.cjs.entry.js +1 -1
  65. package/dist/cjs/u-pagination-button.entry.cjs.js.map +1 -1
  66. package/dist/cjs/u-pagination-page.cjs.entry.js +1 -1
  67. package/dist/cjs/u-passkey.cjs.entry.js +9 -10
  68. package/dist/cjs/u-passkey.entry.cjs.js.map +1 -1
  69. package/dist/cjs/u-password-field.cjs.entry.js +5 -5
  70. package/dist/cjs/u-profile.u-submit-button.entry.cjs.js.map +1 -1
  71. package/dist/cjs/u-profile_2.cjs.entry.js +39 -59
  72. package/dist/cjs/u-registration-button.cjs.entry.js +5 -5
  73. package/dist/cjs/u-reset-password-button.cjs.entry.js +9 -10
  74. package/dist/cjs/u-reset-password-button.entry.cjs.js.map +1 -1
  75. package/dist/cjs/u-send-magic-code-button.cjs.entry.js +9 -10
  76. package/dist/cjs/u-send-magic-code-button.entry.cjs.js.map +1 -1
  77. package/dist/cjs/u-signed-in.cjs.entry.js +4 -4
  78. package/dist/cjs/u-signin-root.cjs.entry.js +4 -4
  79. package/dist/cjs/u-signin-root.entry.cjs.js.map +1 -1
  80. package/dist/cjs/u-signin-step.cjs.entry.js +9 -10
  81. package/dist/cjs/u-signin-step.entry.cjs.js.map +1 -1
  82. package/dist/cjs/u-signin-strategy.cjs.entry.js +4 -4
  83. package/dist/cjs/u-social-login-button.cjs.entry.js +8 -9
  84. package/dist/cjs/u-social-login-button.entry.cjs.js.map +1 -1
  85. package/dist/cjs/u-spinner.cjs.entry.js +3 -3
  86. package/dist/cjs/u-spinner.entry.cjs.js.map +1 -1
  87. package/dist/cjs/u-ticketable-list.cjs.entry.js +9 -10
  88. package/dist/cjs/u-ticketable-list.entry.cjs.js.map +1 -1
  89. package/dist/cjs/{unidy-store-C1O0g41c.js → unidy-store-7AbWnZ6g.js} +3 -3
  90. package/dist/cjs/{unidy-store-C1O0g41c.js.map → unidy-store-7AbWnZ6g.js.map} +1 -1
  91. package/dist/collection/api/client.js +4 -2
  92. package/dist/collection/api/client.js.map +1 -1
  93. package/dist/collection/auth/api/auth.js +1 -1
  94. package/dist/collection/auth/api/auth.js.map +1 -1
  95. package/dist/collection/auth/components/magic-code-field/magic-code-field.css +1 -1
  96. package/dist/collection/auth/components/magic-code-field/magic-code-field.js +1 -1
  97. package/dist/collection/auth/components/magic-code-field/magic-code-field.js.map +1 -1
  98. package/dist/collection/auth/components/missing-fields-submit-button/missing-fields-submit-button.js +1 -1
  99. package/dist/collection/auth/components/missing-fields-submit-button/missing-fields-submit-button.js.map +1 -1
  100. package/dist/collection/auth/components/signin-root/signin-root.js.map +1 -1
  101. package/dist/collection/auth/components/social-logins/social-login-button.js +1 -1
  102. package/dist/collection/auth/components/social-logins/social-login-button.js.map +1 -1
  103. package/dist/collection/auth/components/submit-button/auth-submit-button.js +2 -5
  104. package/dist/collection/auth/components/submit-button/auth-submit-button.js.map +1 -1
  105. package/dist/collection/auth/passkey-auth.js +1 -3
  106. package/dist/collection/auth/passkey-auth.js.map +1 -1
  107. package/dist/collection/globalScript.js +1 -0
  108. package/dist/collection/globalScript.js.map +1 -1
  109. package/dist/collection/i18n.js +10 -4
  110. package/dist/collection/i18n.js.map +1 -1
  111. package/dist/collection/locales/fr.json +131 -0
  112. package/dist/collection/locales/it.json +131 -0
  113. package/dist/collection/locales/nl_be.json +131 -0
  114. package/dist/collection/locales/ro.json +131 -0
  115. package/dist/collection/logger.js +25 -55
  116. package/dist/collection/logger.js.map +1 -1
  117. package/dist/collection/newsletter/api/newsletters.js +1 -1
  118. package/dist/collection/newsletter/api/newsletters.js.map +1 -1
  119. package/dist/collection/newsletter/components/newsletter-root/newsletter-root.js +25 -9
  120. package/dist/collection/newsletter/components/newsletter-root/newsletter-root.js.map +1 -1
  121. package/dist/collection/newsletter/components/submit-button/newsletter-submit-button.js +6 -6
  122. package/dist/collection/newsletter/components/submit-button/newsletter-submit-button.js.map +1 -1
  123. package/dist/collection/profile/components/field/field.css +1 -1
  124. package/dist/collection/profile/components/field/field.js +7 -5
  125. package/dist/collection/profile/components/field/field.js.map +1 -1
  126. package/dist/collection/profile/components/full-profile/full-profile.css +1 -1
  127. package/dist/collection/profile/components/profile/profile.js +1 -1
  128. package/dist/collection/profile/components/profile/profile.js.map +1 -1
  129. package/dist/collection/profile/components/raw-input-fields/MultiSelect.js.map +1 -1
  130. package/dist/collection/profile/components/submit-button/profile-submit-button.js +2 -7
  131. package/dist/collection/profile/components/submit-button/profile-submit-button.js.map +1 -1
  132. package/dist/collection/{shared/components/u-fields-submit-button-logic/submit-button-logic.js → profile/profile-helpers.js} +3 -3
  133. package/dist/collection/profile/profile-helpers.js.map +1 -0
  134. package/dist/collection/sdk.css +2 -2
  135. package/dist/collection/shared/components/config/config.js +1 -1
  136. package/dist/collection/shared/components/config/config.js.map +1 -1
  137. package/dist/collection/shared/components/email-field/email-field.js +31 -5
  138. package/dist/collection/shared/components/email-field/email-field.js.map +1 -1
  139. package/dist/collection/shared/components/spinner/spinner.css +1 -1
  140. package/dist/collection/shared/components/spinner/spinner.js +1 -1
  141. package/dist/collection/shared/components/spinner/spinner.js.map +1 -1
  142. package/dist/collection/shared/components/submit-button/context.js +2 -3
  143. package/dist/collection/shared/components/submit-button/context.js.map +1 -1
  144. package/dist/collection/shared/components/submit-button/submit-button.js +14 -19
  145. package/dist/collection/shared/components/submit-button/submit-button.js.map +1 -1
  146. package/dist/collection/ticketable/components/pagination/pagination-button.js.map +1 -1
  147. package/dist/collection/ticketable/components/ticketable-list/ticketable-list.js +2 -2
  148. package/dist/collection/ticketable/components/ticketable-list/ticketable-list.js.map +1 -1
  149. package/dist/components/auth.js +0 -2
  150. package/dist/components/auth.js.map +1 -1
  151. package/dist/components/field.js +8 -6
  152. package/dist/components/field.js.map +1 -1
  153. package/dist/components/i18n.js +576 -22
  154. package/dist/components/i18n.js.map +1 -1
  155. package/dist/components/index.js +1 -0
  156. package/dist/components/index.js.map +1 -1
  157. package/dist/components/index2.js +6 -4
  158. package/dist/components/index2.js.map +1 -1
  159. package/dist/components/logger.js +25 -55
  160. package/dist/components/logger.js.map +1 -1
  161. package/dist/components/newsletter-helpers.js +1 -1
  162. package/dist/components/{submit-button-logic.js → profile-helpers.js} +2 -2
  163. package/dist/components/profile-helpers.js.map +1 -0
  164. package/dist/components/profile.js +1 -1
  165. package/dist/components/profile.js.map +1 -1
  166. package/dist/components/raw-field.js.map +1 -1
  167. package/dist/components/spinner.js +2 -2
  168. package/dist/components/spinner.js.map +1 -1
  169. package/dist/components/submit-button.js +26 -45
  170. package/dist/components/submit-button.js.map +1 -1
  171. package/dist/components/u-config.js +1 -1
  172. package/dist/components/u-config.js.map +1 -1
  173. package/dist/components/u-email-field.js +7 -5
  174. package/dist/components/u-email-field.js.map +1 -1
  175. package/dist/components/u-full-profile.js +1 -1
  176. package/dist/components/u-full-profile.js.map +1 -1
  177. package/dist/components/u-magic-code-field.js +2 -2
  178. package/dist/components/u-magic-code-field.js.map +1 -1
  179. package/dist/components/u-missing-fields-submit-button.js +1 -1
  180. package/dist/components/u-missing-fields-submit-button.js.map +1 -1
  181. package/dist/components/u-newsletter-root.js +14 -7
  182. package/dist/components/u-newsletter-root.js.map +1 -1
  183. package/dist/components/u-newsletter-toggle-subscription-button.js +1 -1
  184. package/dist/components/u-pagination-button.js.map +1 -1
  185. package/dist/components/u-signin-root.js.map +1 -1
  186. package/dist/components/u-social-login-button.js +1 -1
  187. package/dist/components/u-social-login-button.js.map +1 -1
  188. package/dist/components/u-ticketable-list.js +2 -2
  189. package/dist/components/u-ticketable-list.js.map +1 -1
  190. package/dist/esm/app-globals-CPU9ZcqZ.js +8 -0
  191. package/dist/esm/app-globals-CPU9ZcqZ.js.map +1 -0
  192. package/dist/esm/{auth-C6B1Fl8C.js → auth-DLKPv5Zm.js} +9 -12
  193. package/dist/esm/{auth-C6B1Fl8C.js.map → auth-DLKPv5Zm.js.map} +1 -1
  194. package/dist/esm/{auth-store-BXzAv0RK.js → auth-store-BMqUdTpC.js} +4 -4
  195. package/dist/esm/{auth-store-BXzAv0RK.js.map → auth-store-BMqUdTpC.js.map} +1 -1
  196. package/dist/esm/{flash-store-CF5vw4w-.js → flash-store-CEvWSG0c.js} +3 -3
  197. package/dist/esm/{flash-store-CF5vw4w-.js.map → flash-store-CEvWSG0c.js.map} +1 -1
  198. package/dist/esm/{i18n-CPEM4Hc_.js → i18n-BR-AGAnn.js} +580 -26
  199. package/dist/esm/i18n-BR-AGAnn.js.map +1 -0
  200. package/dist/esm/{index-CJnDmBjL.js → index-Bjp1XO-f.js} +3 -3
  201. package/dist/esm/{index-CJnDmBjL.js.map → index-Bjp1XO-f.js.map} +1 -1
  202. package/dist/esm/index-Ci3aTmzp.js +12007 -0
  203. package/dist/esm/index-Ci3aTmzp.js.map +1 -0
  204. package/dist/esm/{index-CmoCWXkx.js → index-DKaIwo59.js} +12 -11
  205. package/dist/esm/index-DKaIwo59.js.map +1 -0
  206. package/dist/esm/index.js +10 -11
  207. package/dist/esm/index.js.map +1 -1
  208. package/dist/esm/loader.js +4 -5
  209. package/dist/esm/loader.js.map +1 -1
  210. package/dist/esm/{newsletter-helpers-D9OpR1Yd.js → newsletter-helpers-VixG_zoB.js} +9 -9
  211. package/dist/esm/{newsletter-helpers-D9OpR1Yd.js.map → newsletter-helpers-VixG_zoB.js.map} +1 -1
  212. package/dist/esm/{newsletter-store-Bx1ysKBb.js → newsletter-store-BYmuLQg8.js} +3 -3
  213. package/dist/esm/{newsletter-store-Bx1ysKBb.js.map → newsletter-store-BYmuLQg8.js.map} +1 -1
  214. package/dist/esm/{pagination-store-B-ivWcjb.js → pagination-store-DzdJOp-n.js} +3 -3
  215. package/dist/esm/{pagination-store-B-ivWcjb.js.map → pagination-store-DzdJOp-n.js.map} +1 -1
  216. package/dist/esm/{submit-button-logic-CtMezaoG.js → profile-helpers-7onubaoR.js} +4 -4
  217. package/dist/esm/profile-helpers-7onubaoR.js.map +1 -0
  218. package/dist/esm/{profile-store-By-nqzr9.js → profile-store-RmZB2PTc.js} +3 -3
  219. package/dist/esm/{profile-store-By-nqzr9.js.map → profile-store-RmZB2PTc.js.map} +1 -1
  220. package/dist/esm/sdk.js +4 -5
  221. package/dist/esm/sdk.js.map +1 -1
  222. package/dist/esm/u-conditional-render.entry.js +11 -12
  223. package/dist/esm/u-conditional-render.entry.js.map +1 -1
  224. package/dist/esm/u-config.entry.js +10 -11
  225. package/dist/esm/u-config.entry.js.map +1 -1
  226. package/dist/esm/u-email-field.entry.js +9 -8
  227. package/dist/esm/u-email-field.entry.js.map +1 -1
  228. package/dist/esm/u-error-message.entry.js +6 -6
  229. package/dist/esm/u-field.u-raw-field.entry.js.map +1 -1
  230. package/dist/esm/u-field_2.entry.js +13 -11
  231. package/dist/esm/u-flash-message.entry.js +3 -3
  232. package/dist/esm/u-full-profile.entry.js +6 -6
  233. package/dist/esm/u-full-profile.entry.js.map +1 -1
  234. package/dist/esm/u-logout-button.entry.js +9 -10
  235. package/dist/esm/u-logout-button.entry.js.map +1 -1
  236. package/dist/esm/u-magic-code-field.entry.js +11 -12
  237. package/dist/esm/u-magic-code-field.entry.js.map +1 -1
  238. package/dist/esm/u-missing-field.entry.js +4 -4
  239. package/dist/esm/u-missing-fields-submit-button.entry.js +8 -9
  240. package/dist/esm/u-missing-fields-submit-button.entry.js.map +1 -1
  241. package/dist/esm/u-newsletter-checkbox.entry.js +11 -12
  242. package/dist/esm/u-newsletter-checkbox.entry.js.map +1 -1
  243. package/dist/esm/u-newsletter-logout-button.entry.js +11 -12
  244. package/dist/esm/u-newsletter-logout-button.entry.js.map +1 -1
  245. package/dist/esm/u-newsletter-preference-checkbox.entry.js +11 -12
  246. package/dist/esm/u-newsletter-preference-checkbox.entry.js.map +1 -1
  247. package/dist/esm/u-newsletter-resend-doi-button.entry.js +11 -12
  248. package/dist/esm/u-newsletter-resend-doi-button.entry.js.map +1 -1
  249. package/dist/esm/u-newsletter-root.entry.js +20 -14
  250. package/dist/esm/u-newsletter-root.entry.js.map +1 -1
  251. package/dist/esm/u-newsletter-toggle-subscription-button.entry.js +11 -12
  252. package/dist/esm/u-newsletter-toggle-subscription-button.entry.js.map +1 -1
  253. package/dist/esm/u-pagination-button.entry.js +1 -1
  254. package/dist/esm/u-pagination-button.entry.js.map +1 -1
  255. package/dist/esm/u-pagination-page.entry.js +1 -1
  256. package/dist/esm/u-passkey.entry.js +9 -10
  257. package/dist/esm/u-passkey.entry.js.map +1 -1
  258. package/dist/esm/u-password-field.entry.js +5 -5
  259. package/dist/esm/u-profile.u-submit-button.entry.js.map +1 -1
  260. package/dist/esm/u-profile_2.entry.js +36 -56
  261. package/dist/esm/u-registration-button.entry.js +5 -5
  262. package/dist/esm/u-reset-password-button.entry.js +9 -10
  263. package/dist/esm/u-reset-password-button.entry.js.map +1 -1
  264. package/dist/esm/u-send-magic-code-button.entry.js +9 -10
  265. package/dist/esm/u-send-magic-code-button.entry.js.map +1 -1
  266. package/dist/esm/u-signed-in.entry.js +4 -4
  267. package/dist/esm/u-signin-root.entry.js +4 -4
  268. package/dist/esm/u-signin-root.entry.js.map +1 -1
  269. package/dist/esm/u-signin-step.entry.js +9 -10
  270. package/dist/esm/u-signin-step.entry.js.map +1 -1
  271. package/dist/esm/u-signin-strategy.entry.js +4 -4
  272. package/dist/esm/u-social-login-button.entry.js +7 -8
  273. package/dist/esm/u-social-login-button.entry.js.map +1 -1
  274. package/dist/esm/u-spinner.entry.js +3 -3
  275. package/dist/esm/u-spinner.entry.js.map +1 -1
  276. package/dist/esm/u-ticketable-list.entry.js +9 -10
  277. package/dist/esm/u-ticketable-list.entry.js.map +1 -1
  278. package/dist/esm/{unidy-store-C2nKKukb.js → unidy-store-BldTAtO0.js} +3 -3
  279. package/dist/esm/{unidy-store-C2nKKukb.js.map → unidy-store-BldTAtO0.js.map} +1 -1
  280. package/dist/sdk/index.esm.js +1 -1
  281. package/dist/sdk/index.esm.js.map +1 -1
  282. package/dist/sdk/loader.esm.js.map +1 -1
  283. package/dist/sdk/locales/fr.json +131 -0
  284. package/dist/sdk/locales/it.json +131 -0
  285. package/dist/sdk/locales/nl_be.json +131 -0
  286. package/dist/sdk/locales/ro.json +131 -0
  287. package/dist/sdk/p-0b47e1be.entry.js +2 -0
  288. package/dist/sdk/p-0b47e1be.entry.js.map +1 -0
  289. package/dist/sdk/p-20240b02.entry.js +2 -0
  290. package/dist/sdk/p-20240b02.entry.js.map +1 -0
  291. package/dist/sdk/{p-8a472938.entry.js → p-2da4497a.entry.js} +2 -2
  292. package/dist/sdk/{p-b0307804.entry.js → p-36433853.entry.js} +2 -2
  293. package/dist/sdk/p-36433853.entry.js.map +1 -0
  294. package/dist/sdk/p-431ec460.entry.js +2 -0
  295. package/dist/sdk/p-431ec460.entry.js.map +1 -0
  296. package/dist/sdk/{p-08ddbde8.entry.js → p-5da49d00.entry.js} +2 -2
  297. package/dist/sdk/p-67096601.entry.js +2 -0
  298. package/dist/sdk/p-67096601.entry.js.map +1 -0
  299. package/dist/sdk/{p-63ff8516.entry.js → p-6893d167.entry.js} +2 -2
  300. package/dist/sdk/p-7068661a.entry.js +2 -0
  301. package/dist/sdk/p-7068661a.entry.js.map +1 -0
  302. package/dist/sdk/p-72dc8aa9.entry.js +2 -0
  303. package/dist/sdk/p-72dc8aa9.entry.js.map +1 -0
  304. package/dist/sdk/{p-c2098f5e.entry.js → p-73c2ec89.entry.js} +2 -2
  305. package/dist/sdk/p-745742f1.entry.js +2 -0
  306. package/dist/sdk/p-7a7c0db2.entry.js +2 -0
  307. package/dist/sdk/p-7a7c0db2.entry.js.map +1 -0
  308. package/dist/sdk/{p-2ed0b79c.entry.js → p-7d6dc110.entry.js} +2 -2
  309. package/dist/sdk/{p-2ed0b79c.entry.js.map → p-7d6dc110.entry.js.map} +1 -1
  310. package/dist/sdk/{p-5d859a51.entry.js → p-8d787494.entry.js} +2 -2
  311. package/dist/sdk/p-94dde7e5.entry.js +2 -0
  312. package/dist/sdk/p-94dde7e5.entry.js.map +1 -0
  313. package/dist/sdk/p-97d8ae02.entry.js +2 -0
  314. package/dist/sdk/p-97d8ae02.entry.js.map +1 -0
  315. package/dist/sdk/p-9c396daf.entry.js +2 -0
  316. package/dist/sdk/p-9c396daf.entry.js.map +1 -0
  317. package/dist/sdk/p-9da4dd6d.entry.js +2 -0
  318. package/dist/sdk/p-9da4dd6d.entry.js.map +1 -0
  319. package/dist/sdk/{p-ClhmT9TC.js → p-BZ1kW_eK.js} +2 -2
  320. package/dist/sdk/{p-ClhmT9TC.js.map → p-BZ1kW_eK.js.map} +1 -1
  321. package/dist/sdk/p-BlOjABPD.js +2 -0
  322. package/dist/sdk/{p-DBjPNcZQ.js.map → p-BlOjABPD.js.map} +1 -1
  323. package/dist/sdk/{p-BvjIpzI-.js → p-C0feI0p8.js} +2 -2
  324. package/dist/sdk/{p-BvjIpzI-.js.map → p-C0feI0p8.js.map} +1 -1
  325. package/dist/sdk/{p-BGi6Sl8y.js → p-CDtLILSR.js} +2 -2
  326. package/dist/sdk/{p-BGi6Sl8y.js.map → p-CDtLILSR.js.map} +1 -1
  327. package/dist/sdk/p-CFiZLMAA.js +2 -0
  328. package/dist/sdk/p-CFiZLMAA.js.map +1 -0
  329. package/dist/sdk/p-CR1oWC4S.js +2 -0
  330. package/dist/sdk/p-CR1oWC4S.js.map +1 -0
  331. package/dist/sdk/p-Ce8zGAi1.js +2 -0
  332. package/dist/sdk/{p-BeGO8MZ-.js.map → p-Ce8zGAi1.js.map} +1 -1
  333. package/dist/sdk/p-Ci3aTmzp.js +3 -0
  334. package/dist/sdk/p-Ci3aTmzp.js.map +1 -0
  335. package/dist/sdk/p-D4B6Zkq_.js +2 -0
  336. package/dist/sdk/p-D4B6Zkq_.js.map +1 -0
  337. package/dist/sdk/p-D8RGdjD3.js +2 -0
  338. package/dist/sdk/{p-CPMAxeLD.js.map → p-D8RGdjD3.js.map} +1 -1
  339. package/dist/sdk/p-DGqadgLO.js +2 -0
  340. package/dist/sdk/{p-D6-66bay.js.map → p-DGqadgLO.js.map} +1 -1
  341. package/dist/sdk/{p-DNP3fccV.js → p-DSwwVdp1.js} +2 -2
  342. package/dist/sdk/{p-DNP3fccV.js.map → p-DSwwVdp1.js.map} +1 -1
  343. package/dist/sdk/{p-BLUKsznD.js → p-DYtgart8.js} +2 -2
  344. package/dist/sdk/{p-BLUKsznD.js.map → p-DYtgart8.js.map} +1 -1
  345. package/dist/sdk/p-add92871.entry.js +2 -0
  346. package/dist/sdk/p-add92871.entry.js.map +1 -0
  347. package/dist/sdk/{p-2ddce950.entry.js → p-bb5ae222.entry.js} +2 -2
  348. package/dist/sdk/{p-73dc1a32.entry.js → p-bbbec3d4.entry.js} +2 -2
  349. package/dist/sdk/p-c2b6c674.entry.js +2 -0
  350. package/dist/sdk/p-c2b6c674.entry.js.map +1 -0
  351. package/dist/sdk/p-c2fba7c8.entry.js +2 -0
  352. package/dist/sdk/{p-C-vcnxdk.js → p-cOfRiRUO.js} +2 -2
  353. package/dist/sdk/{p-C-vcnxdk.js.map → p-cOfRiRUO.js.map} +1 -1
  354. package/dist/sdk/p-cba5d81e.entry.js +2 -0
  355. package/dist/sdk/p-cba5d81e.entry.js.map +1 -0
  356. package/dist/sdk/p-cd516902.entry.js +2 -0
  357. package/dist/sdk/p-cd516902.entry.js.map +1 -0
  358. package/dist/sdk/p-d2c6179a.entry.js +2 -0
  359. package/dist/sdk/p-d2c6179a.entry.js.map +1 -0
  360. package/dist/sdk/{p-2f8f53ed.entry.js → p-dcd4e8f0.entry.js} +2 -2
  361. package/dist/sdk/p-de931f46.entry.js +2 -0
  362. package/dist/sdk/p-de931f46.entry.js.map +1 -0
  363. package/dist/sdk/p-e0ba330c.entry.js +2 -0
  364. package/dist/sdk/p-e0ba330c.entry.js.map +1 -0
  365. package/dist/sdk/p-e363a33c.entry.js +2 -0
  366. package/dist/sdk/p-e363a33c.entry.js.map +1 -0
  367. package/dist/sdk/p-fc51c88d.entry.js +2 -0
  368. package/dist/sdk/p-fc51c88d.entry.js.map +1 -0
  369. package/dist/sdk/sdk.css +2 -2
  370. package/dist/sdk/sdk.esm.js +1 -1
  371. package/dist/sdk/sdk.esm.js.map +1 -1
  372. package/dist/sdk/u-conditional-render.entry.esm.js.map +1 -1
  373. package/dist/sdk/u-config.entry.esm.js.map +1 -1
  374. package/dist/sdk/u-email-field.entry.esm.js.map +1 -1
  375. package/dist/sdk/u-field.u-raw-field.entry.esm.js.map +1 -1
  376. package/dist/sdk/u-full-profile.entry.esm.js.map +1 -1
  377. package/dist/sdk/u-logout-button.entry.esm.js.map +1 -1
  378. package/dist/sdk/u-magic-code-field.entry.esm.js.map +1 -1
  379. package/dist/sdk/u-missing-fields-submit-button.entry.esm.js.map +1 -1
  380. package/dist/sdk/u-newsletter-checkbox.entry.esm.js.map +1 -1
  381. package/dist/sdk/u-newsletter-logout-button.entry.esm.js.map +1 -1
  382. package/dist/sdk/u-newsletter-preference-checkbox.entry.esm.js.map +1 -1
  383. package/dist/sdk/u-newsletter-resend-doi-button.entry.esm.js.map +1 -1
  384. package/dist/sdk/u-newsletter-root.entry.esm.js.map +1 -1
  385. package/dist/sdk/u-newsletter-toggle-subscription-button.entry.esm.js.map +1 -1
  386. package/dist/sdk/u-pagination-button.entry.esm.js.map +1 -1
  387. package/dist/sdk/u-passkey.entry.esm.js.map +1 -1
  388. package/dist/sdk/u-profile.u-submit-button.entry.esm.js.map +1 -1
  389. package/dist/sdk/u-reset-password-button.entry.esm.js.map +1 -1
  390. package/dist/sdk/u-send-magic-code-button.entry.esm.js.map +1 -1
  391. package/dist/sdk/u-signin-root.entry.esm.js.map +1 -1
  392. package/dist/sdk/u-signin-step.entry.esm.js.map +1 -1
  393. package/dist/sdk/u-social-login-button.entry.esm.js.map +1 -1
  394. package/dist/sdk/u-spinner.entry.esm.js.map +1 -1
  395. package/dist/sdk/u-ticketable-list.entry.esm.js.map +1 -1
  396. package/dist/types/auth/components/submit-button/auth-submit-button.d.ts +1 -6
  397. package/dist/types/components.d.ts +7 -3
  398. package/dist/types/newsletter/components/newsletter-root/newsletter-root.d.ts +3 -2
  399. package/dist/types/newsletter/components/submit-button/newsletter-submit-button.d.ts +2 -6
  400. package/dist/types/profile/components/submit-button/profile-submit-button.d.ts +0 -3
  401. package/dist/types/{shared/components/u-fields-submit-button-logic/submit-button-logic.d.ts → profile/profile-helpers.d.ts} +1 -1
  402. package/dist/types/shared/components/email-field/email-field.d.ts +2 -0
  403. package/dist/types/shared/components/submit-button/context.d.ts +5 -6
  404. package/dist/types/shared/components/submit-button/submit-button.d.ts +2 -1
  405. package/package.json +9 -5
  406. package/readme.md +2 -1
  407. package/dist/cjs/app-globals-CBeI09cT.js +0 -5867
  408. package/dist/cjs/app-globals-CBeI09cT.js.map +0 -1
  409. package/dist/cjs/exports-BTNx1-cN.js +0 -4174
  410. package/dist/cjs/exports-BTNx1-cN.js.map +0 -1
  411. package/dist/cjs/i18n-DNuyTvmJ.js.map +0 -1
  412. package/dist/cjs/index-BSf3Eyrg.js +0 -2094
  413. package/dist/cjs/index-BSf3Eyrg.js.map +0 -1
  414. package/dist/cjs/index-CtJ5meJ7.js.map +0 -1
  415. package/dist/cjs/submit-button-logic-rhAjEO33.js.map +0 -1
  416. package/dist/collection/shared/components/u-fields-submit-button-logic/submit-button-logic.js.map +0 -1
  417. package/dist/components/submit-button-logic.js.map +0 -1
  418. package/dist/esm/app-globals-DAqFb8zM.js +0 -5865
  419. package/dist/esm/app-globals-DAqFb8zM.js.map +0 -1
  420. package/dist/esm/exports-D7pzDSGS.js +0 -4106
  421. package/dist/esm/exports-D7pzDSGS.js.map +0 -1
  422. package/dist/esm/i18n-CPEM4Hc_.js.map +0 -1
  423. package/dist/esm/index-BF13Y4es.js +0 -2078
  424. package/dist/esm/index-BF13Y4es.js.map +0 -1
  425. package/dist/esm/index-CmoCWXkx.js.map +0 -1
  426. package/dist/esm/submit-button-logic-CtMezaoG.js.map +0 -1
  427. package/dist/sdk/p-0ac36431.entry.js +0 -2
  428. package/dist/sdk/p-0bb59d95.entry.js +0 -2
  429. package/dist/sdk/p-1888fa34.entry.js +0 -2
  430. package/dist/sdk/p-1888fa34.entry.js.map +0 -1
  431. package/dist/sdk/p-206eaf1a.entry.js +0 -2
  432. package/dist/sdk/p-206eaf1a.entry.js.map +0 -1
  433. package/dist/sdk/p-219c8df7.entry.js +0 -2
  434. package/dist/sdk/p-219c8df7.entry.js.map +0 -1
  435. package/dist/sdk/p-266ceb9b.entry.js +0 -2
  436. package/dist/sdk/p-266ceb9b.entry.js.map +0 -1
  437. package/dist/sdk/p-2c01382e.entry.js +0 -2
  438. package/dist/sdk/p-2c01382e.entry.js.map +0 -1
  439. package/dist/sdk/p-3ec7dfe3.entry.js +0 -2
  440. package/dist/sdk/p-3ec7dfe3.entry.js.map +0 -1
  441. package/dist/sdk/p-40d9f876.entry.js +0 -2
  442. package/dist/sdk/p-40d9f876.entry.js.map +0 -1
  443. package/dist/sdk/p-4dbb57c3.entry.js +0 -2
  444. package/dist/sdk/p-4dbb57c3.entry.js.map +0 -1
  445. package/dist/sdk/p-4df06d55.entry.js +0 -2
  446. package/dist/sdk/p-4df06d55.entry.js.map +0 -1
  447. package/dist/sdk/p-65ab8315.entry.js +0 -2
  448. package/dist/sdk/p-65ab8315.entry.js.map +0 -1
  449. package/dist/sdk/p-88d2b9d6.entry.js +0 -2
  450. package/dist/sdk/p-88d2b9d6.entry.js.map +0 -1
  451. package/dist/sdk/p-8969d1ab.entry.js +0 -2
  452. package/dist/sdk/p-8969d1ab.entry.js.map +0 -1
  453. package/dist/sdk/p-8970a077.entry.js +0 -2
  454. package/dist/sdk/p-8970a077.entry.js.map +0 -1
  455. package/dist/sdk/p-9a5530ad.entry.js +0 -2
  456. package/dist/sdk/p-9a5530ad.entry.js.map +0 -1
  457. package/dist/sdk/p-BF13Y4es.js +0 -3
  458. package/dist/sdk/p-BF13Y4es.js.map +0 -1
  459. package/dist/sdk/p-BeGO8MZ-.js +0 -2
  460. package/dist/sdk/p-BsVyUZ6I.js +0 -2
  461. package/dist/sdk/p-BsVyUZ6I.js.map +0 -1
  462. package/dist/sdk/p-CPMAxeLD.js +0 -2
  463. package/dist/sdk/p-D6-66bay.js +0 -2
  464. package/dist/sdk/p-D7pzDSGS.js +0 -2
  465. package/dist/sdk/p-D7pzDSGS.js.map +0 -1
  466. package/dist/sdk/p-DBjPNcZQ.js +0 -2
  467. package/dist/sdk/p-KnO0pPVa.js +0 -2
  468. package/dist/sdk/p-KnO0pPVa.js.map +0 -1
  469. package/dist/sdk/p-PfzIdrPb.js +0 -2
  470. package/dist/sdk/p-PfzIdrPb.js.map +0 -1
  471. package/dist/sdk/p-b0307804.entry.js.map +0 -1
  472. package/dist/sdk/p-b5012f17.entry.js +0 -2
  473. package/dist/sdk/p-b5012f17.entry.js.map +0 -1
  474. package/dist/sdk/p-b733cd98.entry.js +0 -2
  475. package/dist/sdk/p-b733cd98.entry.js.map +0 -1
  476. package/dist/sdk/p-c723d85a.entry.js +0 -2
  477. package/dist/sdk/p-c723d85a.entry.js.map +0 -1
  478. package/dist/sdk/p-cabead0d.entry.js +0 -2
  479. package/dist/sdk/p-cabead0d.entry.js.map +0 -1
  480. package/dist/sdk/p-dab61f77.entry.js +0 -2
  481. package/dist/sdk/p-dab61f77.entry.js.map +0 -1
  482. package/dist/sdk/p-f38f9c60.entry.js +0 -2
  483. package/dist/sdk/p-f38f9c60.entry.js.map +0 -1
  484. /package/dist/sdk/{p-8a472938.entry.js.map → p-2da4497a.entry.js.map} +0 -0
  485. /package/dist/sdk/{p-08ddbde8.entry.js.map → p-5da49d00.entry.js.map} +0 -0
  486. /package/dist/sdk/{p-63ff8516.entry.js.map → p-6893d167.entry.js.map} +0 -0
  487. /package/dist/sdk/{p-c2098f5e.entry.js.map → p-73c2ec89.entry.js.map} +0 -0
  488. /package/dist/sdk/{p-0bb59d95.entry.js.map → p-745742f1.entry.js.map} +0 -0
  489. /package/dist/sdk/{p-5d859a51.entry.js.map → p-8d787494.entry.js.map} +0 -0
  490. /package/dist/sdk/{p-2ddce950.entry.js.map → p-bb5ae222.entry.js.map} +0 -0
  491. /package/dist/sdk/{p-73dc1a32.entry.js.map → p-bbbec3d4.entry.js.map} +0 -0
  492. /package/dist/sdk/{p-0ac36431.entry.js.map → p-c2fba7c8.entry.js.map} +0 -0
  493. /package/dist/sdk/{p-2f8f53ed.entry.js.map → p-dcd4e8f0.entry.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-JpRzPaSm.js');
3
+ var index = require('./index-DLz3FT7T.js');
4
4
 
5
5
  const initialState = {
6
6
  mode: "production",
@@ -36,6 +36,6 @@ function waitForConfig() {
36
36
  exports.onChange = onChange;
37
37
  exports.unidyState = unidyState;
38
38
  exports.waitForConfig = waitForConfig;
39
- //# sourceMappingURL=unidy-store-C1O0g41c.js.map
39
+ //# sourceMappingURL=unidy-store-7AbWnZ6g.js.map
40
40
 
41
- //# sourceMappingURL=unidy-store-C1O0g41c.js.map
41
+ //# sourceMappingURL=unidy-store-7AbWnZ6g.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unidy-store-C1O0g41c.js","sources":["src/shared/store/unidy-store.ts"],"sourcesContent":["import { createStore } from \"@stencil/store\";\n\nexport interface UnidyState {\n mode: \"production\" | \"development\";\n apiKey: string;\n baseUrl: string;\n locale: string;\n\n isConfigured: boolean;\n backendConnected: boolean;\n}\n\nconst initialState: UnidyState = {\n mode: \"production\",\n apiKey: \"\",\n baseUrl: \"\",\n locale: \"en\",\n\n isConfigured: false,\n backendConnected: true,\n};\n\nconst store = createStore<UnidyState>(initialState);\n\nexport const unidyState = store.state;\nexport const reset = store.reset;\nexport const onChange: <K extends keyof UnidyState>(prop: K, cb: (value: UnidyState[K]) => void) => () => void = store.onChange;\n\nconst CONFIG_TIMEOUT_MS = 1000;\n\nexport function waitForConfig(): Promise<void> {\n if (unidyState.isConfigured) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n unsubscribe();\n reject(new Error(`Unidy SDK: <u-config> not found or not loaded within ${CONFIG_TIMEOUT_MS}ms`));\n }, CONFIG_TIMEOUT_MS);\n\n const unsubscribe = onChange(\"isConfigured\", (value) => {\n if (value) {\n clearTimeout(timeout);\n unsubscribe();\n resolve();\n }\n });\n });\n}\n"],"names":["createStore"],"mappings":";;;;AAYA,MAAM,YAAY,GAAe;AAC/B,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,MAAM,EAAE,IAAI;AAEZ,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,gBAAgB,EAAE,IAAI;CACvB;AAED,MAAM,KAAK,GAAGA,iBAAW,CAAa,YAAY,CAAC;AAEtC,MAAA,UAAU,GAAG,KAAK,CAAC;AAEnB,MAAA,QAAQ,GAA4F,KAAK,CAAC;AAEvH,MAAM,iBAAiB,GAAG,IAAI;SAEd,aAAa,GAAA;AAC3B,IAAA,IAAI,UAAU,CAAC,YAAY,EAAE;AAC3B,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;;IAG1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,YAAA,WAAW,EAAE;YACb,MAAM,CAAC,IAAI,KAAK,CAAC,wDAAwD,iBAAiB,CAAA,EAAA,CAAI,CAAC,CAAC;SACjG,EAAE,iBAAiB,CAAC;QAErB,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,KAAI;YACrD,IAAI,KAAK,EAAE;gBACT,YAAY,CAAC,OAAO,CAAC;AACrB,gBAAA,WAAW,EAAE;AACb,gBAAA,OAAO,EAAE;;AAEb,SAAC,CAAC;AACJ,KAAC,CAAC;AACJ;;;;;;"}
1
+ {"version":3,"file":"unidy-store-7AbWnZ6g.js","sources":["src/shared/store/unidy-store.ts"],"sourcesContent":["import { createStore } from \"@stencil/store\";\n\nexport interface UnidyState {\n mode: \"production\" | \"development\";\n apiKey: string;\n baseUrl: string;\n locale: string;\n\n isConfigured: boolean;\n backendConnected: boolean;\n}\n\nconst initialState: UnidyState = {\n mode: \"production\",\n apiKey: \"\",\n baseUrl: \"\",\n locale: \"en\",\n\n isConfigured: false,\n backendConnected: true,\n};\n\nconst store = createStore<UnidyState>(initialState);\n\nexport const unidyState = store.state;\nexport const reset = store.reset;\nexport const onChange: <K extends keyof UnidyState>(prop: K, cb: (value: UnidyState[K]) => void) => () => void = store.onChange;\n\nconst CONFIG_TIMEOUT_MS = 1000;\n\nexport function waitForConfig(): Promise<void> {\n if (unidyState.isConfigured) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n unsubscribe();\n reject(new Error(`Unidy SDK: <u-config> not found or not loaded within ${CONFIG_TIMEOUT_MS}ms`));\n }, CONFIG_TIMEOUT_MS);\n\n const unsubscribe = onChange(\"isConfigured\", (value) => {\n if (value) {\n clearTimeout(timeout);\n unsubscribe();\n resolve();\n }\n });\n });\n}\n"],"names":["createStore"],"mappings":";;;;AAYA,MAAM,YAAY,GAAe;AAC/B,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,MAAM,EAAE,IAAI;AAEZ,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,gBAAgB,EAAE,IAAI;CACvB;AAED,MAAM,KAAK,GAAGA,iBAAW,CAAa,YAAY,CAAC;AAEtC,MAAA,UAAU,GAAG,KAAK,CAAC;AAEnB,MAAA,QAAQ,GAA4F,KAAK,CAAC;AAEvH,MAAM,iBAAiB,GAAG,IAAI;SAEd,aAAa,GAAA;AAC3B,IAAA,IAAI,UAAU,CAAC,YAAY,EAAE;AAC3B,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;;IAG1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC9B,YAAA,WAAW,EAAE;YACb,MAAM,CAAC,IAAI,KAAK,CAAC,wDAAwD,iBAAiB,CAAA,EAAA,CAAI,CAAC,CAAC;SACjG,EAAE,iBAAiB,CAAC;QAErB,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,KAAI;YACrD,IAAI,KAAK,EAAE;gBACT,YAAY,CAAC,OAAO,CAAC;AACrB,gBAAA,WAAW,EAAE;AACb,gBAAA,OAAO,EAAE;;AAEb,SAAC,CAAC;AACJ,KAAC,CAAC;AACJ;;;;;;"}
@@ -40,7 +40,9 @@ export class ApiClient {
40
40
  mergeHeaders(base, extra) {
41
41
  const out = new Headers(base);
42
42
  if (extra) {
43
- new Headers(extra).forEach((v, k) => out.set(k, v));
43
+ new Headers(extra).forEach((v, k) => {
44
+ out.set(k, v);
45
+ });
44
46
  }
45
47
  return out;
46
48
  }
@@ -58,7 +60,7 @@ export class ApiClient {
58
60
  try {
59
61
  data = await res.json();
60
62
  }
61
- catch (e) {
63
+ catch {
62
64
  data = undefined;
63
65
  }
64
66
  this.setConnectionStatus(true);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { t } from \"../i18n\";\nimport type * as z from \"zod\";\nimport { createLogger } from \"../logger\";\n\nexport interface ApiResponse<T> {\n data?: T;\n success: boolean;\n status: number;\n headers: Headers;\n error?: Error | string;\n connectionError?: boolean; // when backend is unreachable (network error, connection refused, etc.)\n}\n\nexport type ApiConfig = {\n baseUrl: string;\n apiKey: string;\n onConnectionChange?: (isConnected: boolean) => void;\n};\n\nexport class ApiClient {\n private static readonly CONNECTION_ERROR_MESSAGES = [\n \"Failed to fetch\",\n \"NetworkError\",\n \"ERR_CONNECTION_REFUSED\",\n \"ERR_NETWORK\",\n \"ERR_INTERNET_DISCONNECTED\",\n ];\n\n private onConnectionChange?: (isConnected: boolean) => void;\n private logger = createLogger(\"ApiClient\");\n\n constructor(\n public baseUrl: string,\n public api_key: string,\n onConnectionChange?: (isConnected: boolean) => void,\n ) {\n this.api_key = api_key;\n this.onConnectionChange = onConnectionChange;\n }\n\n private isConnectionError(error: unknown): boolean {\n if (error instanceof Error) {\n return ApiClient.CONNECTION_ERROR_MESSAGES.some((msg) => error.message.includes(msg));\n }\n\n return false;\n }\n\n private setConnectionStatus(isConnected: boolean) {\n if (this.onConnectionChange) {\n this.onConnectionChange(isConnected);\n }\n }\n\n private baseHeaders(): Headers {\n const h = new Headers();\n h.set(\"Content-Type\", \"application/json\");\n h.set(\"Accept\", \"application/json\");\n h.set(\"Authorization\", `Bearer ${this.api_key}`);\n return h;\n }\n\n private mergeHeaders(base: Headers, extra?: HeadersInit): Headers {\n const out = new Headers(base);\n if (extra) {\n new Headers(extra).forEach((v, k) => out.set(k, v));\n }\n return out;\n }\n\n private async request<T>(method: string, endpoint: string, body?: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n let res: Response | null = null;\n try {\n res = await fetch(`${this.baseUrl}${endpoint}`, {\n method,\n mode: \"cors\",\n credentials: \"include\",\n headers: this.mergeHeaders(this.baseHeaders(), headers),\n body: JSON.stringify(body) || undefined,\n });\n\n let data: T | undefined;\n try {\n data = await res.json();\n } catch (e) {\n data = undefined;\n }\n\n this.setConnectionStatus(true);\n\n const response: ApiResponse<T> = {\n data,\n status: res.status,\n headers: res.headers,\n success: res.ok,\n connectionError: false,\n };\n\n return response;\n } catch (error) {\n const connectionFailed = this.isConnectionError(error);\n\n if (connectionFailed) {\n this.setConnectionStatus(false);\n\n Sentry.captureException(error, {\n tags: { error_type: \"connection_error\" },\n extra: { endpoint, method },\n });\n }\n\n const response: ApiResponse<T> = {\n status: res ? res.status : connectionFailed ? 0 : 500,\n error: error instanceof Error ? error.message : String(error),\n headers: res ? res.headers : new Headers(),\n success: false,\n data: undefined,\n connectionError: connectionFailed,\n };\n\n return response;\n }\n }\n\n async get<T>(endpoint: string, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"GET\", endpoint, undefined, headers);\n }\n\n async post<T>(endpoint: string, body: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"POST\", endpoint, body, headers);\n }\n\n async patch<T>(endpoint: string, body: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"PATCH\", endpoint, body, headers);\n }\n\n async delete<T>(endpoint: string, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"DELETE\", endpoint, undefined, headers);\n }\n\n getWithSchema<TReturn, TArgs extends object, TParams = undefined>(\n returnSchema: z.ZodSchema<TReturn>,\n urlBuilder: (args: TArgs) => string,\n paramSchema?: z.ZodSchema<TParams>,\n ): TParams extends undefined\n ? (args: TArgs) => Promise<ApiResponse<TReturn>>\n : (args: TArgs, params?: TParams) => Promise<ApiResponse<TReturn>> {\n const fn = async (args: TArgs, params?: TParams) => {\n // Build URL\n const baseUrl = urlBuilder(args);\n\n // Validate and parse params with Zod if provided\n let queryString = \"\";\n if (paramSchema && params) {\n const validatedParams = paramSchema.parse(params);\n queryString = `?${new URLSearchParams(validatedParams as Record<string, string>).toString()}`;\n }\n\n const fullUrl = `${baseUrl}${queryString}`;\n const response = await this.get<unknown>(fullUrl);\n\n if (!response.success || !response.data) {\n return response as ApiResponse<TReturn>;\n }\n\n const parsed = returnSchema.safeParse(response.data);\n\n if (!parsed.success) {\n this.logger.error(\"Invalid response format\", parsed.error);\n return {\n ...response,\n success: false,\n error: t(\"errors.invalid_response_format\", {\n defaultValue: \"Invalid response format\",\n }),\n data: undefined,\n };\n }\n\n return {\n ...response,\n data: parsed.data,\n };\n };\n // biome-ignore lint/suspicious/noExplicitAny: fn can literally be any function\n return fn as any;\n }\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAiBzC,MAAM,OAAO,SAAS;IAaX;IACA;IAbD,MAAM,CAAU,yBAAyB,GAAG;QAClD,iBAAiB;QACjB,cAAc;QACd,wBAAwB;QACxB,aAAa;QACb,2BAA2B;KAC5B,CAAC;IAEM,kBAAkB,CAAkC;IACpD,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAE3C,YACS,OAAe,EACf,OAAe,EACtB,kBAAmD;QAF5C,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAQ;QAGtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAEO,iBAAiB,CAAC,KAAc;QACtC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,mBAAmB,CAAC,WAAoB;QAC9C,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACpC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,YAAY,CAAC,IAAa,EAAE,KAAmB;QACrD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,QAAgB,EAAE,IAAa,EAAE,OAAqB;QAC7F,IAAI,GAAG,GAAoB,IAAI,CAAC;QAChC,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;gBAC9C,MAAM;gBACN,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,SAAS;gBACtB,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC;gBACvD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS;aACxC,CAAC,CAAC;YAEH,IAAI,IAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,QAAQ,GAAmB;gBAC/B,IAAI;gBACJ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,EAAE;gBACf,eAAe,EAAE,KAAK;aACvB,CAAC;YAEF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAEhC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;oBAC7B,IAAI,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE;oBACxC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAmB;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBACrD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE;gBAC1C,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,SAAS;gBACf,eAAe,EAAE,gBAAgB;aAClC,CAAC;YAEF,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,QAAgB,EAAE,OAAqB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,QAAgB,EAAE,IAAY,EAAE,OAAqB;QACjE,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,KAAK,CAAI,QAAgB,EAAE,IAAY,EAAE,OAAqB;QAClE,OAAO,IAAI,CAAC,OAAO,CAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,QAAgB,EAAE,OAAqB;QACrD,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,aAAa,CACX,YAAkC,EAClC,UAAmC,EACnC,WAAkC;QAIlC,MAAM,EAAE,GAAG,KAAK,EAAE,IAAW,EAAE,MAAgB,EAAE,EAAE;YACjD,YAAY;YACZ,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAEjC,iDAAiD;YACjD,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClD,WAAW,GAAG,IAAI,IAAI,eAAe,CAAC,eAAyC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;YAChG,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,OAAO,GAAG,WAAW,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAU,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,QAAgC,CAAC;YAC1C,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3D,OAAO;oBACL,GAAG,QAAQ;oBACX,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,CAAC,CAAC,gCAAgC,EAAE;wBACzC,YAAY,EAAE,yBAAyB;qBACxC,CAAC;oBACF,IAAI,EAAE,SAAS;iBAChB,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,GAAG,QAAQ;gBACX,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC,CAAC;QACF,+EAA+E;QAC/E,OAAO,EAAS,CAAC;IACnB,CAAC","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { t } from \"../i18n\";\nimport type * as z from \"zod\";\nimport { createLogger } from \"../logger\";\n\nexport interface ApiResponse<T> {\n data?: T;\n success: boolean;\n status: number;\n headers: Headers;\n error?: Error | string;\n connectionError?: boolean; // when backend is unreachable (network error, connection refused, etc.)\n}\n\nexport type ApiConfig = {\n baseUrl: string;\n apiKey: string;\n onConnectionChange?: (isConnected: boolean) => void;\n};\n\nexport class ApiClient {\n private static readonly CONNECTION_ERROR_MESSAGES = [\n \"Failed to fetch\",\n \"NetworkError\",\n \"ERR_CONNECTION_REFUSED\",\n \"ERR_NETWORK\",\n \"ERR_INTERNET_DISCONNECTED\",\n ];\n\n private onConnectionChange?: (isConnected: boolean) => void;\n private logger = createLogger(\"ApiClient\");\n\n constructor(\n public baseUrl: string,\n public api_key: string,\n onConnectionChange?: (isConnected: boolean) => void,\n ) {\n this.api_key = api_key;\n this.onConnectionChange = onConnectionChange;\n }\n\n private isConnectionError(error: unknown): boolean {\n if (error instanceof Error) {\n return ApiClient.CONNECTION_ERROR_MESSAGES.some((msg) => error.message.includes(msg));\n }\n\n return false;\n }\n\n private setConnectionStatus(isConnected: boolean) {\n if (this.onConnectionChange) {\n this.onConnectionChange(isConnected);\n }\n }\n\n private baseHeaders(): Headers {\n const h = new Headers();\n h.set(\"Content-Type\", \"application/json\");\n h.set(\"Accept\", \"application/json\");\n h.set(\"Authorization\", `Bearer ${this.api_key}`);\n return h;\n }\n\n private mergeHeaders(base: Headers, extra?: HeadersInit): Headers {\n const out = new Headers(base);\n if (extra) {\n new Headers(extra).forEach((v, k) => {\n out.set(k, v);\n });\n }\n return out;\n }\n\n private async request<T>(method: string, endpoint: string, body?: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n let res: Response | null = null;\n try {\n res = await fetch(`${this.baseUrl}${endpoint}`, {\n method,\n mode: \"cors\",\n credentials: \"include\",\n headers: this.mergeHeaders(this.baseHeaders(), headers),\n body: JSON.stringify(body) || undefined,\n });\n\n let data: T | undefined;\n try {\n data = await res.json();\n } catch {\n data = undefined;\n }\n\n this.setConnectionStatus(true);\n\n const response: ApiResponse<T> = {\n data,\n status: res.status,\n headers: res.headers,\n success: res.ok,\n connectionError: false,\n };\n\n return response;\n } catch (error) {\n const connectionFailed = this.isConnectionError(error);\n\n if (connectionFailed) {\n this.setConnectionStatus(false);\n\n Sentry.captureException(error, {\n tags: { error_type: \"connection_error\" },\n extra: { endpoint, method },\n });\n }\n\n const response: ApiResponse<T> = {\n status: res ? res.status : connectionFailed ? 0 : 500,\n error: error instanceof Error ? error.message : String(error),\n headers: res ? res.headers : new Headers(),\n success: false,\n data: undefined,\n connectionError: connectionFailed,\n };\n\n return response;\n }\n }\n\n async get<T>(endpoint: string, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"GET\", endpoint, undefined, headers);\n }\n\n async post<T>(endpoint: string, body: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"POST\", endpoint, body, headers);\n }\n\n async patch<T>(endpoint: string, body: object, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"PATCH\", endpoint, body, headers);\n }\n\n async delete<T>(endpoint: string, headers?: HeadersInit): Promise<ApiResponse<T>> {\n return this.request<T>(\"DELETE\", endpoint, undefined, headers);\n }\n\n getWithSchema<TReturn, TArgs extends object, TParams = undefined>(\n returnSchema: z.ZodSchema<TReturn>,\n urlBuilder: (args: TArgs) => string,\n paramSchema?: z.ZodSchema<TParams>,\n ): TParams extends undefined\n ? (args: TArgs) => Promise<ApiResponse<TReturn>>\n : (args: TArgs, params?: TParams) => Promise<ApiResponse<TReturn>> {\n const fn = async (args: TArgs, params?: TParams) => {\n // Build URL\n const baseUrl = urlBuilder(args);\n\n // Validate and parse params with Zod if provided\n let queryString = \"\";\n if (paramSchema && params) {\n const validatedParams = paramSchema.parse(params);\n queryString = `?${new URLSearchParams(validatedParams as Record<string, string>).toString()}`;\n }\n\n const fullUrl = `${baseUrl}${queryString}`;\n const response = await this.get<unknown>(fullUrl);\n\n if (!response.success || !response.data) {\n return response as ApiResponse<TReturn>;\n }\n\n const parsed = returnSchema.safeParse(response.data);\n\n if (!parsed.success) {\n this.logger.error(\"Invalid response format\", parsed.error);\n return {\n ...response,\n success: false,\n error: t(\"errors.invalid_response_format\", {\n defaultValue: \"Invalid response format\",\n }),\n data: undefined,\n };\n }\n\n return {\n ...response,\n data: parsed.data,\n };\n };\n // biome-ignore lint/suspicious/noExplicitAny: fn can literally be any function\n return fn as any;\n }\n}\n"]}
@@ -123,7 +123,7 @@ export class AuthService {
123
123
  return [null, TokenResponseSchema.parse(response.data)];
124
124
  });
125
125
  }
126
- // biome-ignore lint/suspicious/noExplicitAny: <explanation>
126
+ // biome-ignore lint/suspicious/noExplicitAny: user fields are dynamic
127
127
  async updateMissingFields(signInId, user) {
128
128
  const response = await this.client.patch(`/api/sdk/v1/sign_ins/${signInId}/update_required_fields`, {
129
129
  user,
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/api/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport * as z from \"zod\";\n\nimport { type ApiClient, type SchemaValidationError, SchemaValidationErrorSchema } from \"../../api\";\nimport { UserProfileSchema } from \"../../profile\";\nimport { unidyState } from \"../../shared/store/unidy-store\";\n\nconst LoginOptionsSchema = z.object({\n magic_link: z.boolean(),\n password: z.boolean(),\n social_logins: z.array(z.string()),\n passkey: z.boolean(),\n});\n\nconst CreateSignInResponseSchema = z.object({\n sid: z.string(),\n status: z.enum([\"pending_verification\", \"authenticated\", \"completed\"]),\n email: z.string(),\n expired: z.boolean(),\n login_options: LoginOptionsSchema,\n});\n\nconst ErrorSchema = z.object({\n error_identifier: z.string(),\n});\n\nconst SendMagicCodeResponseSchema = z.object({\n enable_resend_after: z.number(),\n sid: z.string().optional(),\n});\n\nconst SendMagicCodeErrorSchema = z.object({\n error_identifier: z.string(),\n enable_resend_after: z.number(),\n});\n\nconst TokenResponseSchema = z.object({\n jwt: z.string(),\n sid: z.string().optional(),\n});\n\nconst RequiredFieldsResponseSchema = z.object({\n error_identifier: z.literal(\"missing_required_fields\"),\n fields: UserProfileSchema.omit({ custom_attributes: true }).partial().extend({\n custom_attributes: UserProfileSchema.shape.custom_attributes?.optional(),\n }),\n sid: z.string().optional(),\n});\n\nconst InvalidPasswordResponseSchema = z.object({\n error_details: z.object({\n password: z.array(z.string()),\n }),\n});\n\nexport type ErrorResponse = z.infer<typeof ErrorSchema>;\nexport type LoginOptions = z.infer<typeof LoginOptionsSchema>;\nexport type CreateSignInResponse = z.infer<typeof CreateSignInResponseSchema>;\nexport type TokenResponse = z.infer<typeof TokenResponseSchema>;\nexport type SendMagicCodeResponse = z.infer<typeof SendMagicCodeResponseSchema>;\nexport type RequiredFieldsResponse = z.infer<typeof RequiredFieldsResponseSchema>;\nexport type SendMagicCodeError = z.infer<typeof SendMagicCodeErrorSchema>;\n\ntype CommonErrors = [\"connection_failed\", null] | [\"schema_validation_error\", SchemaValidationError];\n\nexport type CreateSignInResult =\n | CommonErrors\n | [\"account_not_found\", ErrorResponse]\n | [null, CreateSignInResponse]\n | AuthenticateWithPasswordResult\n | SendMagicCodeResult;\n\nexport type AuthenticateResultShared =\n | CommonErrors\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"sign_in_expired\", ErrorResponse]\n | [\"account_locked\", ErrorResponse]\n | [\"missing_required_fields\", RequiredFieldsResponse]\n | [null, TokenResponse];\n\nexport type SendMagicCodeResult =\n | CommonErrors\n | [\"magic_code_recently_created\", SendMagicCodeError]\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"sign_in_expired\", ErrorResponse]\n | [\"account_locked\", ErrorResponse]\n | [null, SendMagicCodeResponse];\n\nexport type AuthenticateWithPasswordResult = [\"invalid_password\", ErrorResponse] | AuthenticateResultShared;\n\nexport type AuthenticateWithMagicCodeResult =\n | [\"not_valid\", ErrorResponse]\n | [\"used\", ErrorResponse]\n | [\"expired\", ErrorResponse]\n | AuthenticateResultShared;\n\nexport type RefreshTokenResult =\n | CommonErrors\n | [\"invalid_refresh_token\", ErrorResponse]\n | [\"refresh_token_revoked\", ErrorResponse]\n | [\"sign_in_not_found\", ErrorResponse]\n | [null, TokenResponse];\n\nexport type SendResetPasswordEmailResult =\n | CommonErrors\n | [\"password_not_set\", ErrorResponse]\n | [\"reset_password_already_sent\", ErrorResponse]\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"invalid_return_to\", ErrorResponse]\n | [\"return_to_required\", ErrorResponse]\n | [null, null];\n\nexport type InvalidPasswordResponse = z.infer<typeof InvalidPasswordResponseSchema>;\n\nexport type ResetPasswordResult =\n | CommonErrors\n | [\"reset_token_missing\", ErrorResponse]\n | [\"invalid_reset_token\", ErrorResponse]\n | [\"reset_token_expired\", ErrorResponse]\n | [\"invalid_password\", InvalidPasswordResponse]\n | [null, null];\n\nexport type ValidateResetPasswordTokenResult =\n | CommonErrors\n | [\"reset_token_missing\", ErrorResponse]\n | [\"invalid_reset_token\", ErrorResponse]\n | [\"reset_token_expired\", ErrorResponse]\n | [null, null];\n\nexport type SignOutResult =\n | CommonErrors\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"missing_id_token\", ErrorResponse]\n | [\"invalid_id_token\", ErrorResponse]\n | [null, null];\n\nconst PasskeyOptionsResponseSchema = z.object({\n challenge: z.string(),\n timeout: z.number(),\n rpId: z.string(),\n userVerification: z.string(),\n allowCredentials: z.array(z.any()),\n});\n\nconst PasskeyCredentialSchema = z.object({\n id: z.string(),\n rawId: z.string(),\n response: z.object({\n authenticatorData: z.string(),\n clientDataJSON: z.string(),\n signature: z.string(),\n }),\n type: z.string(),\n});\n\nexport type PasskeyOptionsResponse = z.infer<typeof PasskeyOptionsResponseSchema>;\nexport type PasskeyCredential = z.infer<typeof PasskeyCredentialSchema>;\n\nexport type GetPasskeyOptionsResult = CommonErrors | [\"bad_request\", ErrorResponse] | [null, PasskeyOptionsResponse];\n\nexport type AuthenticateWithPasskeyResult =\n | CommonErrors\n | [\"invalid_passkey\", ErrorResponse]\n | [\"verification_failed\", ErrorResponse]\n | [\"authentication_failed\", ErrorResponse]\n | [\"bad_request\", ErrorResponse]\n | [null, TokenResponse];\n\nexport class AuthService {\n private client: ApiClient;\n\n constructor(client: ApiClient) {\n this.client = client;\n }\n\n async createSignIn(email: string, password?: string, sendMagicCode?: boolean): Promise<CreateSignInResult> {\n const response = await this.client.post<CreateSignInResponse>(\"/api/sdk/v1/sign_ins\", { email, password, sendMagicCode });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n const error_response = ErrorSchema.parse(response.data);\n return [\n error_response.error_identifier as\n | \"account_not_found\"\n | \"sign_in_not_found\"\n | \"sign_in_expired\"\n | \"account_locked\"\n | \"invalid_password\",\n error_response,\n ];\n }\n\n if (password) {\n return [null, TokenResponseSchema.parse(response.data)];\n }\n\n if (sendMagicCode) {\n return [null, SendMagicCodeResponseSchema.parse(response.data)];\n }\n\n return [null, CreateSignInResponseSchema.parse(response.data)];\n });\n }\n\n async sendMagicCode(signInId: string): Promise<SendMagicCodeResult> {\n const response = await this.client.post<SendMagicCodeResponse>(`/api/sdk/v1/sign_ins/${signInId}/send_magic_code`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n try {\n const error_response = SendMagicCodeErrorSchema.parse(response.data);\n return [\"magic_code_recently_created\", error_response];\n } catch {\n const error_response = ErrorSchema.parse(response.data);\n return [error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\", error_response];\n }\n }\n\n return [null, SendMagicCodeResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithPassword(signInId: string, password: string): Promise<AuthenticateWithPasswordResult> {\n const response = await this.client.post<{ password: string }>(`/api/sdk/v1/sign_ins/${signInId}/authenticate`, {\n password,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\" | \"invalid_password\",\n error_response,\n ];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n async updateMissingFields(signInId: string, user: Record<string, any>): Promise<AuthenticateResultShared> {\n const response = await this.client.patch<unknown>(`/api/sdk/v1/sign_ins/${signInId}/update_required_fields`, {\n user,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\", error_response];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithMagicCode(signInId: string, code: string): Promise<AuthenticateWithMagicCodeResult> {\n const response = await this.client.post<{ code: string }>(`/api/sdk/v1/sign_ins/${signInId}/authenticate`, {\n code,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\" | \"not_valid\" | \"used\" | \"expired\",\n error_response,\n ];\n }\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async refreshToken(signInId: string): Promise<RefreshTokenResult> {\n const response = await this.client.post<Record<string, never>>(`/api/sdk/v1/sign_ins/${signInId}/refresh_token`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"invalid_refresh_token\" | \"refresh_token_revoked\" | \"sign_in_not_found\", error_response];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async sendResetPasswordEmail(signInId: string, returnTo: string): Promise<SendResetPasswordEmailResult> {\n const response = await this.client.post<null>(`/api/sdk/v1/sign_ins/${signInId}/password_reset/send`, { return_to: returnTo });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as\n | \"password_not_set\"\n | \"reset_password_already_sent\"\n | \"sign_in_not_found\"\n | \"invalid_return_to\"\n | \"return_to_required\",\n error_response,\n ];\n }\n\n return [null, null];\n });\n }\n\n async resetPassword(signInId: string, token: string, password: string, passwordConfirmation: string): Promise<ResetPasswordResult> {\n const response = await this.client.patch<null>(`/api/sdk/v1/sign_ins/${signInId}/password_reset`, {\n token,\n password,\n password_confirmation: passwordConfirmation,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"reset_token_missing\" | \"invalid_reset_token\" | \"reset_token_expired\" | \"invalid_password\",\n response.data,\n ];\n }\n\n return [null, null];\n });\n }\n\n async validateResetPasswordToken(signInId: string, token: string): Promise<ValidateResetPasswordTokenResult> {\n const response = await this.client.get<{ valid: boolean }>(\n `/api/sdk/v1/sign_ins/${signInId}/password_reset?token=${encodeURIComponent(token)}`,\n );\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [error_response.error_identifier as \"reset_token_missing\" | \"invalid_reset_token\" | \"reset_token_expired\", error_response];\n }\n\n return [null, null];\n });\n }\n\n async signOut(signInId: string): Promise<SignOutResult> {\n const response = await this.client.post<null>(`/api/sdk/v1/sign_ins/${signInId}/sign_out`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"sign_in_not_found\" | \"missing_id_token\" | \"invalid_id_token\", error_response];\n }\n\n return [null, null];\n });\n }\n\n async getPasskeyOptions(sid?: string): Promise<GetPasskeyOptionsResult> {\n const endpoint = sid ? `/api/sdk/v1/passkeys/new?sid=${encodeURIComponent(sid)}` : \"/api/sdk/v1/passkeys/new\";\n const response = await this.client.get<PasskeyOptionsResponse>(endpoint);\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [\"bad_request\", error_response];\n }\n\n return [null, PasskeyOptionsResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithPasskey(credential: PasskeyCredential): Promise<AuthenticateWithPasskeyResult> {\n const response = await this.client.post<{ publicKeyCredential: PasskeyCredential }>(\"/api/sdk/v1/passkeys\", {\n publicKeyCredential: credential,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [\n error_response.error_identifier as \"invalid_passkey\" | \"verification_failed\" | \"authentication_failed\" | \"bad_request\",\n error_response,\n ];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n private handleResponse<T>(\n // biome-ignore lint/suspicious/noExplicitAny: generic handler for all responses\n response: any,\n handler: () => T,\n ): T | [\"connection_failed\", null] | [\"schema_validation_error\", SchemaValidationError] {\n if (response.connectionError) {\n unidyState.backendConnected = false;\n\n return [\"connection_failed\", null];\n }\n\n try {\n return handler();\n } catch (error) {\n Sentry.captureException(error);\n return [\"schema_validation_error\", SchemaValidationErrorSchema.parse(response.data)];\n }\n }\n}\n"]}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/api/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport * as z from \"zod\";\n\nimport { type ApiClient, type SchemaValidationError, SchemaValidationErrorSchema } from \"../../api\";\nimport { UserProfileSchema } from \"../../profile\";\nimport { unidyState } from \"../../shared/store/unidy-store\";\n\nconst LoginOptionsSchema = z.object({\n magic_link: z.boolean(),\n password: z.boolean(),\n social_logins: z.array(z.string()),\n passkey: z.boolean(),\n});\n\nconst CreateSignInResponseSchema = z.object({\n sid: z.string(),\n status: z.enum([\"pending_verification\", \"authenticated\", \"completed\"]),\n email: z.string(),\n expired: z.boolean(),\n login_options: LoginOptionsSchema,\n});\n\nconst ErrorSchema = z.object({\n error_identifier: z.string(),\n});\n\nconst SendMagicCodeResponseSchema = z.object({\n enable_resend_after: z.number(),\n sid: z.string().optional(),\n});\n\nconst SendMagicCodeErrorSchema = z.object({\n error_identifier: z.string(),\n enable_resend_after: z.number(),\n});\n\nconst TokenResponseSchema = z.object({\n jwt: z.string(),\n sid: z.string().optional(),\n});\n\nconst RequiredFieldsResponseSchema = z.object({\n error_identifier: z.literal(\"missing_required_fields\"),\n fields: UserProfileSchema.omit({ custom_attributes: true }).partial().extend({\n custom_attributes: UserProfileSchema.shape.custom_attributes?.optional(),\n }),\n sid: z.string().optional(),\n});\n\nconst InvalidPasswordResponseSchema = z.object({\n error_details: z.object({\n password: z.array(z.string()),\n }),\n});\n\nexport type ErrorResponse = z.infer<typeof ErrorSchema>;\nexport type LoginOptions = z.infer<typeof LoginOptionsSchema>;\nexport type CreateSignInResponse = z.infer<typeof CreateSignInResponseSchema>;\nexport type TokenResponse = z.infer<typeof TokenResponseSchema>;\nexport type SendMagicCodeResponse = z.infer<typeof SendMagicCodeResponseSchema>;\nexport type RequiredFieldsResponse = z.infer<typeof RequiredFieldsResponseSchema>;\nexport type SendMagicCodeError = z.infer<typeof SendMagicCodeErrorSchema>;\n\ntype CommonErrors = [\"connection_failed\", null] | [\"schema_validation_error\", SchemaValidationError];\n\nexport type CreateSignInResult =\n | CommonErrors\n | [\"account_not_found\", ErrorResponse]\n | [null, CreateSignInResponse]\n | AuthenticateWithPasswordResult\n | SendMagicCodeResult;\n\nexport type AuthenticateResultShared =\n | CommonErrors\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"sign_in_expired\", ErrorResponse]\n | [\"account_locked\", ErrorResponse]\n | [\"missing_required_fields\", RequiredFieldsResponse]\n | [null, TokenResponse];\n\nexport type SendMagicCodeResult =\n | CommonErrors\n | [\"magic_code_recently_created\", SendMagicCodeError]\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"sign_in_expired\", ErrorResponse]\n | [\"account_locked\", ErrorResponse]\n | [null, SendMagicCodeResponse];\n\nexport type AuthenticateWithPasswordResult = [\"invalid_password\", ErrorResponse] | AuthenticateResultShared;\n\nexport type AuthenticateWithMagicCodeResult =\n | [\"not_valid\", ErrorResponse]\n | [\"used\", ErrorResponse]\n | [\"expired\", ErrorResponse]\n | AuthenticateResultShared;\n\nexport type RefreshTokenResult =\n | CommonErrors\n | [\"invalid_refresh_token\", ErrorResponse]\n | [\"refresh_token_revoked\", ErrorResponse]\n | [\"sign_in_not_found\", ErrorResponse]\n | [null, TokenResponse];\n\nexport type SendResetPasswordEmailResult =\n | CommonErrors\n | [\"password_not_set\", ErrorResponse]\n | [\"reset_password_already_sent\", ErrorResponse]\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"invalid_return_to\", ErrorResponse]\n | [\"return_to_required\", ErrorResponse]\n | [null, null];\n\nexport type InvalidPasswordResponse = z.infer<typeof InvalidPasswordResponseSchema>;\n\nexport type ResetPasswordResult =\n | CommonErrors\n | [\"reset_token_missing\", ErrorResponse]\n | [\"invalid_reset_token\", ErrorResponse]\n | [\"reset_token_expired\", ErrorResponse]\n | [\"invalid_password\", InvalidPasswordResponse]\n | [null, null];\n\nexport type ValidateResetPasswordTokenResult =\n | CommonErrors\n | [\"reset_token_missing\", ErrorResponse]\n | [\"invalid_reset_token\", ErrorResponse]\n | [\"reset_token_expired\", ErrorResponse]\n | [null, null];\n\nexport type SignOutResult =\n | CommonErrors\n | [\"sign_in_not_found\", ErrorResponse]\n | [\"missing_id_token\", ErrorResponse]\n | [\"invalid_id_token\", ErrorResponse]\n | [null, null];\n\nconst PasskeyOptionsResponseSchema = z.object({\n challenge: z.string(),\n timeout: z.number(),\n rpId: z.string(),\n userVerification: z.string(),\n allowCredentials: z.array(z.any()),\n});\n\nconst PasskeyCredentialSchema = z.object({\n id: z.string(),\n rawId: z.string(),\n response: z.object({\n authenticatorData: z.string(),\n clientDataJSON: z.string(),\n signature: z.string(),\n }),\n type: z.string(),\n});\n\nexport type PasskeyOptionsResponse = z.infer<typeof PasskeyOptionsResponseSchema>;\nexport type PasskeyCredential = z.infer<typeof PasskeyCredentialSchema>;\n\nexport type GetPasskeyOptionsResult = CommonErrors | [\"bad_request\", ErrorResponse] | [null, PasskeyOptionsResponse];\n\nexport type AuthenticateWithPasskeyResult =\n | CommonErrors\n | [\"invalid_passkey\", ErrorResponse]\n | [\"verification_failed\", ErrorResponse]\n | [\"authentication_failed\", ErrorResponse]\n | [\"bad_request\", ErrorResponse]\n | [null, TokenResponse];\n\nexport class AuthService {\n private client: ApiClient;\n\n constructor(client: ApiClient) {\n this.client = client;\n }\n\n async createSignIn(email: string, password?: string, sendMagicCode?: boolean): Promise<CreateSignInResult> {\n const response = await this.client.post<CreateSignInResponse>(\"/api/sdk/v1/sign_ins\", { email, password, sendMagicCode });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n const error_response = ErrorSchema.parse(response.data);\n return [\n error_response.error_identifier as\n | \"account_not_found\"\n | \"sign_in_not_found\"\n | \"sign_in_expired\"\n | \"account_locked\"\n | \"invalid_password\",\n error_response,\n ];\n }\n\n if (password) {\n return [null, TokenResponseSchema.parse(response.data)];\n }\n\n if (sendMagicCode) {\n return [null, SendMagicCodeResponseSchema.parse(response.data)];\n }\n\n return [null, CreateSignInResponseSchema.parse(response.data)];\n });\n }\n\n async sendMagicCode(signInId: string): Promise<SendMagicCodeResult> {\n const response = await this.client.post<SendMagicCodeResponse>(`/api/sdk/v1/sign_ins/${signInId}/send_magic_code`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n try {\n const error_response = SendMagicCodeErrorSchema.parse(response.data);\n return [\"magic_code_recently_created\", error_response];\n } catch {\n const error_response = ErrorSchema.parse(response.data);\n return [error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\", error_response];\n }\n }\n\n return [null, SendMagicCodeResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithPassword(signInId: string, password: string): Promise<AuthenticateWithPasswordResult> {\n const response = await this.client.post<{ password: string }>(`/api/sdk/v1/sign_ins/${signInId}/authenticate`, {\n password,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\" | \"invalid_password\",\n error_response,\n ];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: user fields are dynamic\n async updateMissingFields(signInId: string, user: Record<string, any>): Promise<AuthenticateResultShared> {\n const response = await this.client.patch<unknown>(`/api/sdk/v1/sign_ins/${signInId}/update_required_fields`, {\n user,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\", error_response];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithMagicCode(signInId: string, code: string): Promise<AuthenticateWithMagicCodeResult> {\n const response = await this.client.post<{ code: string }>(`/api/sdk/v1/sign_ins/${signInId}/authenticate`, {\n code,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const missing_fields_check = RequiredFieldsResponseSchema.safeParse(response.data);\n\n if (missing_fields_check.success) {\n return [\"missing_required_fields\", missing_fields_check.data];\n }\n\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"sign_in_not_found\" | \"sign_in_expired\" | \"account_locked\" | \"not_valid\" | \"used\" | \"expired\",\n error_response,\n ];\n }\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async refreshToken(signInId: string): Promise<RefreshTokenResult> {\n const response = await this.client.post<Record<string, never>>(`/api/sdk/v1/sign_ins/${signInId}/refresh_token`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"invalid_refresh_token\" | \"refresh_token_revoked\" | \"sign_in_not_found\", error_response];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n async sendResetPasswordEmail(signInId: string, returnTo: string): Promise<SendResetPasswordEmailResult> {\n const response = await this.client.post<null>(`/api/sdk/v1/sign_ins/${signInId}/password_reset/send`, { return_to: returnTo });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as\n | \"password_not_set\"\n | \"reset_password_already_sent\"\n | \"sign_in_not_found\"\n | \"invalid_return_to\"\n | \"return_to_required\",\n error_response,\n ];\n }\n\n return [null, null];\n });\n }\n\n async resetPassword(signInId: string, token: string, password: string, passwordConfirmation: string): Promise<ResetPasswordResult> {\n const response = await this.client.patch<null>(`/api/sdk/v1/sign_ins/${signInId}/password_reset`, {\n token,\n password,\n password_confirmation: passwordConfirmation,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [\n error_response.error_identifier as \"reset_token_missing\" | \"invalid_reset_token\" | \"reset_token_expired\" | \"invalid_password\",\n response.data,\n ];\n }\n\n return [null, null];\n });\n }\n\n async validateResetPasswordToken(signInId: string, token: string): Promise<ValidateResetPasswordTokenResult> {\n const response = await this.client.get<{ valid: boolean }>(\n `/api/sdk/v1/sign_ins/${signInId}/password_reset?token=${encodeURIComponent(token)}`,\n );\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [error_response.error_identifier as \"reset_token_missing\" | \"invalid_reset_token\" | \"reset_token_expired\", error_response];\n }\n\n return [null, null];\n });\n }\n\n async signOut(signInId: string): Promise<SignOutResult> {\n const response = await this.client.post<null>(`/api/sdk/v1/sign_ins/${signInId}/sign_out`, {});\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n\n return [error_response.error_identifier as \"sign_in_not_found\" | \"missing_id_token\" | \"invalid_id_token\", error_response];\n }\n\n return [null, null];\n });\n }\n\n async getPasskeyOptions(sid?: string): Promise<GetPasskeyOptionsResult> {\n const endpoint = sid ? `/api/sdk/v1/passkeys/new?sid=${encodeURIComponent(sid)}` : \"/api/sdk/v1/passkeys/new\";\n const response = await this.client.get<PasskeyOptionsResponse>(endpoint);\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [\"bad_request\", error_response];\n }\n\n return [null, PasskeyOptionsResponseSchema.parse(response.data)];\n });\n }\n\n async authenticateWithPasskey(credential: PasskeyCredential): Promise<AuthenticateWithPasskeyResult> {\n const response = await this.client.post<{ publicKeyCredential: PasskeyCredential }>(\"/api/sdk/v1/passkeys\", {\n publicKeyCredential: credential,\n });\n\n return this.handleResponse(response, () => {\n if (!response.success) {\n const error_response = ErrorSchema.parse(response.data);\n return [\n error_response.error_identifier as \"invalid_passkey\" | \"verification_failed\" | \"authentication_failed\" | \"bad_request\",\n error_response,\n ];\n }\n\n return [null, TokenResponseSchema.parse(response.data)];\n });\n }\n\n private handleResponse<T>(\n // biome-ignore lint/suspicious/noExplicitAny: generic handler for all responses\n response: any,\n handler: () => T,\n ): T | [\"connection_failed\", null] | [\"schema_validation_error\", SchemaValidationError] {\n if (response.connectionError) {\n unidyState.backendConnected = false;\n\n return [\"connection_failed\", null];\n }\n\n try {\n return handler();\n } catch (error) {\n Sentry.captureException(error);\n return [\"schema_validation_error\", SchemaValidationErrorSchema.parse(response.data)];\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-style:solid;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--u-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--u-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--u-color-slate-200:oklch(92.9% .013 255.508);--u-spacing:.25rem;--u-text-lg:1.125rem;--u-text-lg--line-height:1.55556;--u-radius-lg:.5rem;--u-default-transition-duration:.15s;--u-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--u-default-font-family:var(--u-font-sans);--u-default-mono-font-family:var(--u-font-mono);--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{font-family:var(--u-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--u-default-font-feature-settings,normal);font-variation-settings:var(--u-default-font-variation-settings,normal);-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--u-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--u-default-mono-font-feature-settings,normal);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--u-default-mono-font-variation-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.u\:flex{display:flex}.u\:h-\[50px\]{height:50px}.u\:w-\[50px\]{width:50px}.u\:w-full{width:100%}.u\:justify-center{justify-content:center}.u\:gap-0\.5{gap:calc(var(--u-spacing)*.5)}.u\:rounded-lg{border-radius:var(--u-radius-lg)}.u\:border-2{border-style:var(--tw-border-style);border-width:2px}.u\:border-solid{--tw-border-style:solid;border-style:solid}.u\:border-slate-200{border-color:var(--u-color-slate-200)}.u\:text-center{text-align:center}.u\:text-lg{font-size:var(--u-text-lg);line-height:var(--tw-leading,var(--u-text-lg--line-height))}.u\:transition-colors{transition-duration:var(--tw-duration,var(--u-default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--u-default-transition-timing-function))}.u\:duration-200{--tw-duration:.2s;transition-duration:.2s}.u\:outline-none{--tw-outline-style:none;outline-style:none}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false} /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;@layer utilities{}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
1
+ /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-style:solid;--tw-duration:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:host,:root{--u-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--u-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--u-color-slate-200:oklch(92.9% .013 255.508);--u-spacing:.25rem;--u-text-lg:1.125rem;--u-text-lg--line-height:1.55556;--u-radius-lg:.5rem;--u-default-transition-duration:.15s;--u-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--u-default-font-family:var(--u-font-sans);--u-default-mono-font-family:var(--u-font-mono);--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,::backdrop,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{font-family:var(--u-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--u-default-font-feature-settings,normal);font-variation-settings:var(--u-default-font-variation-settings,normal);-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--u-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--u-default-mono-font-feature-settings,normal);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--u-default-mono-font-variation-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex;padding-block:0}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.u\:flex{display:flex}.u\:h-\[50px\]{height:50px}.u\:w-\[50px\]{width:50px}.u\:w-full{width:100%}.u\:justify-center{justify-content:center}.u\:gap-0\.5{gap:calc(var(--u-spacing)*.5)}.u\:rounded-lg{border-radius:var(--u-radius-lg)}.u\:border-2{border-style:var(--tw-border-style);border-width:2px}.u\:border-solid{--tw-border-style:solid;border-style:solid}.u\:border-slate-200{border-color:var(--u-color-slate-200)}.u\:text-center{text-align:center}.u\:text-lg{font-size:var(--u-text-lg);line-height:var(--tw-leading,var(--u-text-lg--line-height))}.u\:transition-colors{transition-duration:var(--tw-duration,var(--u-default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--u-default-transition-timing-function))}.u\:duration-200{--tw-duration:.2s;transition-duration:.2s}.u\:outline-none{--tw-outline-style:none;outline-style:none}.fixed{position:fixed}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false} /*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components;@layer utilities{}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -62,7 +62,7 @@ export class MagicCodeField {
62
62
  return null;
63
63
  }
64
64
  return (h("div", { class: `u:flex u:gap-0.5 u:w-full u:justify-center ${this.componentClassName}` }, this.codeDigits.map((digit, index) => (h("input", {
65
- // biome-ignore lint/suspicious/noArrayIndexKey:
65
+ // biome-ignore lint/suspicious/noArrayIndexKey: digits are fixed position inputs
66
66
  key: index, ref: (el) => {
67
67
  if (el)
68
68
  this.inputRefs[index] = el;
@@ -1 +1 @@
1
- {"version":3,"file":"magic-code-field.js","sourceRoot":"","sources":["../../../../src/auth/components/magic-code-field/magic-code-field.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOlC,MAAM,OAAO,cAAc;IACU,kBAAkB,GAAG,EAAE,CAAC;IAElD,UAAU,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzC,SAAS,GAAuB,EAAE,CAAC;IAEnC,WAAW,GAAG,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC;QAE9B,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,SAAS,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEM,aAAa,GAAG,CAAC,KAAoB,EAAE,KAAa,EAAE,EAAE;QAC9D,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEM,WAAW,GAAG,CAAC,KAAqB,EAAE,EAAE;QAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,UAAU;aACtB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;aACtB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,KAAK,CAAC,EAAE,CAAC,CAAC;QAEb,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QAEzB,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEM,oBAAoB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;QACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,YAAY,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,MAAM;QACJ,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,WAAK,KAAK,EAAE,8CAA8C,IAAI,CAAC,kBAAkB,EAAE,IAChF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACrC;YACE,gDAAgD;YAChD,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;gBACV,IAAI,EAAE;oBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACrC,CAAC,EACD,EAAE,EAAE,eAAe,KAAK,GAAG,CAAC,EAAE,EAC9B,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,SAAS,EACnB,SAAS,EAAC,GAAG,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,SAAS,CAAC,OAAO,EAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAClD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,EACtD,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,gBACvC,SAAS,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAC7D,KAAK,EAAC,2JAA2J,EACjK,IAAI,EAAC,aAAa,GAClB,CACH,CAAC,CACE,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, State } from \"@stencil/core\";\nimport { authState } from \"../../store/auth-store\";\nimport { Auth } from \"../../auth\";\n\n@Component({\n tag: \"u-magic-code-field\",\n styleUrl: \"magic-code-field.css\",\n shadow: false,\n})\nexport class MagicCodeField {\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n @State() codeDigits: string[] = [\"\", \"\", \"\", \"\"];\n\n private inputRefs: HTMLInputElement[] = [];\n\n private handleInput = (event: Event, index: number) => {\n const target = event.target as HTMLInputElement;\n const value = target.value.replace(/[^0-9]/g, \"\");\n const sanitizedDigit = value.slice(-1);\n target.value = sanitizedDigit;\n\n const newDigits = [...this.codeDigits];\n newDigits[index] = sanitizedDigit;\n this.codeDigits = newDigits;\n\n const fullCode = newDigits.join(\"\");\n\n if (value && index < 3) {\n const nextInput = this.inputRefs[index + 1];\n if (nextInput) {\n nextInput.focus();\n }\n }\n\n if (fullCode.length === 4) {\n this.authenticateWithCode(fullCode);\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent, index: number) => {\n if (event.key === \"Backspace\" && !this.codeDigits[index] && index > 0) {\n const prevInput = this.inputRefs[index - 1];\n if (prevInput) {\n prevInput.focus();\n }\n }\n };\n\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n const pastedData = event.clipboardData?.getData(\"text\") || \"\";\n const digits = pastedData\n .replace(/[^0-9]/g, \"\")\n .slice(0, 4)\n .split(\"\");\n\n while (digits.length < 4) {\n digits.push(\"\");\n }\n\n this.codeDigits = digits;\n\n const firstEmptyIndex = digits.findIndex((digit) => !digit);\n const targetIndex = firstEmptyIndex !== -1 ? firstEmptyIndex : 3;\n if (this.inputRefs[targetIndex]) {\n this.inputRefs[targetIndex].focus();\n }\n\n const fullCode = digits.join(\"\");\n if (fullCode.length === 4) {\n this.authenticateWithCode(fullCode);\n }\n };\n\n private authenticateWithCode = async (code: string) => {\n const authInstance = await Auth.getInstance();\n\n await authInstance.helpers.authenticateWithMagicCode(code);\n };\n render() {\n if (authState.step !== \"magic-code\") {\n return null;\n }\n\n return (\n <div class={`u:flex u:gap-0.5 u:w-full u:justify-center ${this.componentClassName}`}>\n {this.codeDigits.map((digit, index) => (\n <input\n // biome-ignore lint/suspicious/noArrayIndexKey:\n key={index}\n ref={(el) => {\n if (el) this.inputRefs[index] = el;\n }}\n id={`digit-input-${index + 1}`}\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n value={digit}\n disabled={authState.loading}\n onInput={(event) => this.handleInput(event, index)}\n onKeyDown={(event) => this.handleKeyDown(event, index)}\n onPaste={index === 0 ? this.handlePaste : undefined}\n aria-label={`Digit ${index + 1} of ${this.codeDigits.length}`}\n class=\"u:w-[50px] u:h-[50px] u:text-center u:text-lg u:border-2 u:border-solid u:border-slate-200 u:rounded-lg u:outline-none u:transition-colors u:duration-200\"\n part=\"digit-input\"\n />\n ))}\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"magic-code-field.js","sourceRoot":"","sources":["../../../../src/auth/components/magic-code-field/magic-code-field.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State } from \"@stencil/core\";\nimport { authState } from \"../../store/auth-store\";\nimport { Auth } from \"../../auth\";\n\n@Component({\n tag: \"u-magic-code-field\",\n styleUrl: \"magic-code-field.css\",\n shadow: false,\n})\nexport class MagicCodeField {\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n @State() codeDigits: string[] = [\"\", \"\", \"\", \"\"];\n\n private inputRefs: HTMLInputElement[] = [];\n\n private handleInput = (event: Event, index: number) => {\n const target = event.target as HTMLInputElement;\n const value = target.value.replace(/[^0-9]/g, \"\");\n const sanitizedDigit = value.slice(-1);\n target.value = sanitizedDigit;\n\n const newDigits = [...this.codeDigits];\n newDigits[index] = sanitizedDigit;\n this.codeDigits = newDigits;\n\n const fullCode = newDigits.join(\"\");\n\n if (value && index < 3) {\n const nextInput = this.inputRefs[index + 1];\n if (nextInput) {\n nextInput.focus();\n }\n }\n\n if (fullCode.length === 4) {\n this.authenticateWithCode(fullCode);\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent, index: number) => {\n if (event.key === \"Backspace\" && !this.codeDigits[index] && index > 0) {\n const prevInput = this.inputRefs[index - 1];\n if (prevInput) {\n prevInput.focus();\n }\n }\n };\n\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n const pastedData = event.clipboardData?.getData(\"text\") || \"\";\n const digits = pastedData\n .replace(/[^0-9]/g, \"\")\n .slice(0, 4)\n .split(\"\");\n\n while (digits.length < 4) {\n digits.push(\"\");\n }\n\n this.codeDigits = digits;\n\n const firstEmptyIndex = digits.findIndex((digit) => !digit);\n const targetIndex = firstEmptyIndex !== -1 ? firstEmptyIndex : 3;\n if (this.inputRefs[targetIndex]) {\n this.inputRefs[targetIndex].focus();\n }\n\n const fullCode = digits.join(\"\");\n if (fullCode.length === 4) {\n this.authenticateWithCode(fullCode);\n }\n };\n\n private authenticateWithCode = async (code: string) => {\n const authInstance = await Auth.getInstance();\n\n await authInstance.helpers.authenticateWithMagicCode(code);\n };\n render() {\n if (authState.step !== \"magic-code\") {\n return null;\n }\n\n return (\n <div class={`u:flex u:gap-0.5 u:w-full u:justify-center ${this.componentClassName}`}>\n {this.codeDigits.map((digit, index) => (\n <input\n // biome-ignore lint/suspicious/noArrayIndexKey: digits are fixed position inputs\n key={index}\n ref={(el) => {\n if (el) this.inputRefs[index] = el;\n }}\n id={`digit-input-${index + 1}`}\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n value={digit}\n disabled={authState.loading}\n onInput={(event) => this.handleInput(event, index)}\n onKeyDown={(event) => this.handleKeyDown(event, index)}\n onPaste={index === 0 ? this.handlePaste : undefined}\n aria-label={`Digit ${index + 1} of ${this.codeDigits.length}`}\n class=\"u:w-[50px] u:h-[50px] u:text-center u:text-lg u:border-2 u:border-solid u:border-slate-200 u:rounded-lg u:outline-none u:transition-colors u:duration-200\"\n part=\"digit-input\"\n />\n ))}\n </div>\n );\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { h } from "@stencil/core";
2
2
  import { getUnidyClient } from "../../../api";
3
3
  import { state as profileState } from "../../../profile/store/profile-store";
4
4
  import { authState, authStore } from "../../store/auth-store";
5
- import { validateRequiredFieldsUnchanged, buildPayload } from "../../../shared/components/u-fields-submit-button-logic/submit-button-logic";
5
+ import { validateRequiredFieldsUnchanged, buildPayload } from "../../../profile/profile-helpers";
6
6
  import { hasSlotContent } from "../../../shared/component-utils";
7
7
  import { t } from "../../../i18n";
8
8
  export class MissingFieldsSubmitButton {
@@ -1 +1 @@
1
- {"version":3,"file":"missing-fields-submit-button.js","sourceRoot":"","sources":["../../../../src/auth/components/missing-fields-submit-button/missing-fields-submit-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,YAAY,EAAE,MAAM,6EAA6E,CAAC;AAE5I,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAMlC,MAAM,OAAO,yBAAyB;IACzB,EAAE,CAAe;IAEpB,KAAK,CAAC,QAAQ;QACpB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAE5B,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,EAAE,GAAG,YAAY,CAAC;QAE9D,IAAI,CAAC,+BAA+B,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,SAAS,CAAC,GAAa,CAAC;QAEpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAEnG,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,QAAyB,CAAC;QAC1C,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAExB,kFAAkF;QAClF,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM;QACJ,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAErD,OAAO,CACL;YACE,cACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAC9B,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,KAAK,KAAK,eACzG,QAAQ,IAEjB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAa,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACzF,CACL,CACP,CAAC;IACJ,CAAC;;;;CACF","sourcesContent":["import { Component, Element, h } from \"@stencil/core\";\nimport { getUnidyClient } from \"../../../api\";\nimport { state as profileState } from \"../../../profile/store/profile-store\";\nimport { authState, authStore } from \"../../store/auth-store\";\nimport { validateRequiredFieldsUnchanged, buildPayload } from \"../../../shared/components/u-fields-submit-button-logic/submit-button-logic\";\nimport type { TokenResponse } from \"../../api/auth\";\nimport { hasSlotContent } from \"../../../shared/component-utils\";\nimport { t } from \"../../../i18n\";\n\n@Component({\n tag: \"u-missing-fields-submit-button\",\n shadow: true,\n})\nexport class MissingFieldsSubmitButton {\n @Element() el!: HTMLElement;\n\n private async onSubmit() {\n profileState.loading = true;\n\n const { configuration, ...stateWithoutConfig } = profileState;\n\n if (!validateRequiredFieldsUnchanged(stateWithoutConfig.data)) {\n profileState.loading = false;\n return;\n }\n\n const updatedProfileData = buildPayload(stateWithoutConfig.data);\n const sid = authState.sid as string;\n\n const [error, response] = await getUnidyClient().auth.updateMissingFields(sid, updatedProfileData);\n\n if (error) {\n profileState.loading = false;\n return;\n }\n\n const { jwt } = response as TokenResponse;\n profileState.loading = false;\n authStore.setToken(jwt);\n\n // Emit authEvent to allow modal-based logins to close after successful submission\n this.el.dispatchEvent(new CustomEvent(\"authEvent\", { detail: { jwt }, bubbles: true, composed: true }));\n }\n\n render() {\n if (authState.step !== \"missing-fields\") return null;\n\n return (\n <div>\n <button\n type=\"button\"\n onClick={() => this.onSubmit()}\n part=\"button\"\n disabled={(profileState.errors && Object.keys(profileState.errors).length > 0) || profileState.phoneValid === false}\n aria-live=\"polite\"\n >\n {profileState.loading ? <u-spinner /> : hasSlotContent(this.el) ? <slot /> : t(\"buttons.submit\")}\n </button>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"missing-fields-submit-button.js","sourceRoot":"","sources":["../../../../src/auth/components/missing-fields-submit-button/missing-fields-submit-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAMlC,MAAM,OAAO,yBAAyB;IACzB,EAAE,CAAe;IAEpB,KAAK,CAAC,QAAQ;QACpB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;QAE5B,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,EAAE,GAAG,YAAY,CAAC;QAE9D,IAAI,CAAC,+BAA+B,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,SAAS,CAAC,GAAa,CAAC;QAEpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAEnG,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,QAAyB,CAAC;QAC1C,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAExB,kFAAkF;QAClF,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM;QACJ,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAErD,OAAO,CACL;YACE,cACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAC9B,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,KAAK,KAAK,eACzG,QAAQ,IAEjB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAa,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CACzF,CACL,CACP,CAAC;IACJ,CAAC;;;;CACF","sourcesContent":["import { Component, Element, h } from \"@stencil/core\";\nimport { getUnidyClient } from \"../../../api\";\nimport { state as profileState } from \"../../../profile/store/profile-store\";\nimport { authState, authStore } from \"../../store/auth-store\";\nimport { validateRequiredFieldsUnchanged, buildPayload } from \"../../../profile/profile-helpers\";\nimport type { TokenResponse } from \"../../api/auth\";\nimport { hasSlotContent } from \"../../../shared/component-utils\";\nimport { t } from \"../../../i18n\";\n\n@Component({\n tag: \"u-missing-fields-submit-button\",\n shadow: true,\n})\nexport class MissingFieldsSubmitButton {\n @Element() el!: HTMLElement;\n\n private async onSubmit() {\n profileState.loading = true;\n\n const { configuration, ...stateWithoutConfig } = profileState;\n\n if (!validateRequiredFieldsUnchanged(stateWithoutConfig.data)) {\n profileState.loading = false;\n return;\n }\n\n const updatedProfileData = buildPayload(stateWithoutConfig.data);\n const sid = authState.sid as string;\n\n const [error, response] = await getUnidyClient().auth.updateMissingFields(sid, updatedProfileData);\n\n if (error) {\n profileState.loading = false;\n return;\n }\n\n const { jwt } = response as TokenResponse;\n profileState.loading = false;\n authStore.setToken(jwt);\n\n // Emit authEvent to allow modal-based logins to close after successful submission\n this.el.dispatchEvent(new CustomEvent(\"authEvent\", { detail: { jwt }, bubbles: true, composed: true }));\n }\n\n render() {\n if (authState.step !== \"missing-fields\") return null;\n\n return (\n <div>\n <button\n type=\"button\"\n onClick={() => this.onSubmit()}\n part=\"button\"\n disabled={(profileState.errors && Object.keys(profileState.errors).length > 0) || profileState.phoneValid === false}\n aria-live=\"polite\"\n >\n {profileState.loading ? <u-spinner /> : hasSlotContent(this.el) ? <slot /> : t(\"buttons.submit\")}\n </button>\n </div>\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"signin-root.js","sourceRoot":"","sources":["../../../../src/auth/components/signin-root/signin-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAqB,OAAO,EAAC,MAAM,eAAe,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMnD,MAAM,OAAO,UAAU;IACV,EAAE,CAAe;IAEO,kBAAkB,GAAG,EAAE,CAAC;IAElD,SAAS,CAA+B;IACxC,UAAU,CAAmC;IAEtD,gBAAgB;QACd,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAA4B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC;YAC1F,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAuB;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,EAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB;YAClC,eAAQ,CACH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {Component, Host, h, Prop, Event, type EventEmitter, Element} from \"@stencil/core\";\nimport type { TokenResponse } from \"../../api/auth\";\nimport { authStore } from \"../../store/auth-store\";\n\n@Component({\n tag: \"u-signin-root\",\n shadow: true,\n})\nexport class SigninRoot {\n @Element() el!: HTMLElement;\n\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n @Event() authEvent!: EventEmitter<TokenResponse>;\n @Event() errorEvent!: EventEmitter<{ error: string }>;\n\n componentDidLoad() {\n authStore.setRootComponentRef(this);\n const signInSteps = this.el.querySelectorAll(\"u-signin-step\").values();\n if ([...signInSteps].some((step: HTMLUSigninStepElement) => step.name === \"single-login\")) {\n authStore.setInitialStep(\"single-login\");\n } else {\n authStore.setInitialStep(\"email\");\n }\n }\n\n onAuth(response: TokenResponse) {\n this.authEvent.emit(response);\n }\n\n onError(error: string) {\n this.errorEvent.emit({ error: error });\n }\n\n render() {\n if (authStore.state.authenticated) {\n return null;\n }\n\n return (\n <Host class={this.componentClassName}>\n <slot />\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"signin-root.js","sourceRoot":"","sources":["../../../../src/auth/components/signin-root/signin-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAqB,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5F,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMnD,MAAM,OAAO,UAAU;IACV,EAAE,CAAe;IAEO,kBAAkB,GAAG,EAAE,CAAC;IAElD,SAAS,CAA+B;IACxC,UAAU,CAAmC;IAEtD,gBAAgB;QACd,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAA4B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC;YAC1F,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAuB;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,IAAI,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,EAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB;YAClC,eAAQ,CACH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, Prop, Event, type EventEmitter, Element } from \"@stencil/core\";\nimport type { TokenResponse } from \"../../api/auth\";\nimport { authStore } from \"../../store/auth-store\";\n\n@Component({\n tag: \"u-signin-root\",\n shadow: true,\n})\nexport class SigninRoot {\n @Element() el!: HTMLElement;\n\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n @Event() authEvent!: EventEmitter<TokenResponse>;\n @Event() errorEvent!: EventEmitter<{ error: string }>;\n\n componentDidLoad() {\n authStore.setRootComponentRef(this);\n const signInSteps = this.el.querySelectorAll(\"u-signin-step\").values();\n if ([...signInSteps].some((step: HTMLUSigninStepElement) => step.name === \"single-login\")) {\n authStore.setInitialStep(\"single-login\");\n } else {\n authStore.setInitialStep(\"email\");\n }\n }\n\n onAuth(response: TokenResponse) {\n this.authEvent.emit(response);\n }\n\n onError(error: string) {\n this.errorEvent.emit({ error: error });\n }\n\n render() {\n if (authStore.state.authenticated) {\n return null;\n }\n\n return (\n <Host class={this.componentClassName}>\n <slot />\n </Host>\n );\n }\n}\n"]}
@@ -32,7 +32,7 @@ export class SocialLoginButton extends UnidyComponent {
32
32
  }
33
33
  }
34
34
  get isUnsupportedProvider() {
35
- return !Object.prototype.hasOwnProperty.call(ICON_MAP, this.provider) && this.provider !== "unidy";
35
+ return !Object.hasOwn(ICON_MAP, this.provider) && this.provider !== "unidy";
36
36
  }
37
37
  get isProviderEnabled() {
38
38
  if (authState.step !== "verification") {
@@ -1 +1 @@
1
- {"version":3,"file":"social-login-button.js","sourceRoot":"","sources":["../../../../src/auth/components/social-logins/social-login-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { Component, h, Prop } from \"@stencil/core\";\nimport { t } from \"../../../i18n\";\nimport { unidyState } from \"../../../shared/store/unidy-store\";\nimport { authState } from \"../../store/auth-store\";\nimport { GoogleLogo } from \"./logos/google\";\nimport { LinkedInLogo } from \"./logos/linkedin\";\nimport { AppleLogo } from \"./logos/apple\";\nimport { FacebookLogo } from \"./logos/facebook\";\nimport { DiscordLogo } from \"./logos/discord\";\nimport { UnidyComponent } from \"../../../logger\";\n\nconst SHARED_ICON_CLASSNAME = \"u:w-5 u:h-5 u:block\";\n\nconst ICON_MAP = {\n google: <GoogleLogo className={SHARED_ICON_CLASSNAME} />,\n linkedin: <LinkedInLogo className={SHARED_ICON_CLASSNAME} />,\n apple: <AppleLogo className={`${SHARED_ICON_CLASSNAME} u:fill-current`} />,\n discord: <DiscordLogo className={`${SHARED_ICON_CLASSNAME} u:fill-current`} />,\n facebook: <FacebookLogo className=\"u:w-6 u:h-6 u:block\" />,\n} as const;\n\ntype SocialLoginProvider = keyof typeof ICON_MAP | \"unidy\";\n\n@Component({\n tag: \"u-social-login-button\",\n styleUrl: \"social-login-button.css\",\n shadow: true,\n})\nexport class SocialLoginButton extends UnidyComponent {\n @Prop() provider: SocialLoginProvider = \"google\";\n @Prop() redirectUri: string = window.location.href;\n @Prop() iconOnly = false;\n @Prop() theme: \"light\" | \"dark\" = \"light\";\n\n componentWillLoad() {\n if (this.isUnsupportedProvider) {\n Sentry.captureException(`[u-social-login-button] Unsupported provider \"${this.provider}\".`);\n return;\n }\n }\n\n private get isUnsupportedProvider(): boolean {\n return !Object.prototype.hasOwnProperty.call(ICON_MAP, this.provider) && this.provider !== \"unidy\";\n }\n\n private get isProviderEnabled(): boolean {\n if (authState.step !== \"verification\") {\n return true; // TODO: for now we show all providers on the email step since we don't have registration flow in place yet\n }\n\n if (!authState.availableLoginOptions?.social_logins) {\n return false;\n }\n\n return authState.availableLoginOptions.social_logins.some((enabled) => enabled.startsWith(this.provider) || enabled === this.provider);\n }\n\n private getAuthUrl(): string {\n const baseUrl = unidyState.baseUrl;\n const redirectUri = this.redirectUri ? encodeURIComponent(this.redirectUri) : baseUrl;\n\n return `${baseUrl}/api/sdk/v1/sign_ins/auth/omniauth/${this.provider}?sdk_redirect_uri=${redirectUri}`;\n }\n\n private onClick = async () => {\n if (!unidyState.baseUrl) {\n this.logger.error(\"baseUrl is not set. Make sure <u-config> is rendered with a valid base-url.\");\n return;\n }\n\n window.location.href = this.getAuthUrl();\n };\n\n private renderIcon() {\n if (this.isUnsupportedProvider || this.provider === \"unidy\") {\n return null;\n }\n\n return ICON_MAP[this.provider];\n }\n\n private getButtonClasses(): string {\n const baseClasses = \"u:w-full u:h-10 u:border u:border-solid u:rounded-md u:text-base u:font-medium\";\n const cursorClass = this.isUnsupportedProvider ? \"u:cursor-not-allowed\" : \"u:cursor-pointer\";\n const themeClasses =\n this.theme === \"dark\"\n ? \"u:bg-[#131314] u:text-white u:border-gray-600 u:hover:bg-[#1f1f20]\"\n : \"u:bg-white u:text-[#1f1f1f] u:border-gray-300 u:hover:bg-gray-100\";\n\n return `${baseClasses} ${cursorClass} ${themeClasses}`;\n }\n\n render() {\n if (!this.isProviderEnabled) {\n return null;\n }\n\n const providerName = this.provider.charAt(0).toUpperCase() + this.provider.slice(1);\n const text = t(\"auth.socialLogin.button_text\", {\n defaultValue: \"Continue with {{provider}}\",\n provider: providerName,\n });\n\n // TODO: allow users to customize already used providers with custom text and icon\n return (\n <button type=\"button\" class={this.getButtonClasses()} onClick={this.onClick} part=\"social-login-button\">\n <div class=\"u:flex u:items-center u:justify-center\" part=\"social-login-button-content\">\n <slot name=\"icon\">\n <span aria-hidden=\"true\">{this.renderIcon()}</span>\n </slot>\n\n {this.iconOnly ? (\n // Render the hidden text for accessibility.\n <span class=\"u:sr-only\">{text}</span>\n ) : (\n <span class={!this.isUnsupportedProvider ? \"u:ml-4\" : \"\"} part=\"social-login-button-text\">\n {text}\n </span>\n )}\n </div>\n </button>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"social-login-button.js","sourceRoot":"","sources":["../../../../src/auth/components/social-logins/social-login-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAEpD,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE,EAAC,UAAU,IAAC,SAAS,EAAE,qBAAqB,GAAI;IACxD,QAAQ,EAAE,EAAC,YAAY,IAAC,SAAS,EAAE,qBAAqB,GAAI;IAC5D,KAAK,EAAE,EAAC,SAAS,IAAC,SAAS,EAAE,GAAG,qBAAqB,iBAAiB,GAAI;IAC1E,OAAO,EAAE,EAAC,WAAW,IAAC,SAAS,EAAE,GAAG,qBAAqB,iBAAiB,GAAI;IAC9E,QAAQ,EAAE,EAAC,YAAY,IAAC,SAAS,EAAC,qBAAqB,GAAG;CAClD,CAAC;AASX,MAAM,OAAO,iBAAkB,SAAQ,cAAc;;;;IAC3C,QAAQ,GAAwB,QAAQ,CAAC;IACzC,WAAW,GAAW,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3C,QAAQ,GAAG,KAAK,CAAC;IACjB,KAAK,GAAqB,OAAO,CAAC;IAE1C,iBAAiB;QACf,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,CAAC,gBAAgB,CAAC,iDAAiD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAY,qBAAqB;QAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC9E,CAAC;IAED,IAAY,iBAAiB;QAC3B,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC,2GAA2G;QAC1H,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,aAAa,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzI,CAAC;IAEO,UAAU;QAChB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAEtF,OAAO,GAAG,OAAO,sCAAsC,IAAI,CAAC,QAAQ,qBAAqB,WAAW,EAAE,CAAC;IACzG,CAAC;IAEO,OAAO,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEM,UAAU;QAChB,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEO,gBAAgB;QACtB,MAAM,WAAW,GAAG,gFAAgF,CAAC;QACrG,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAC7F,MAAM,YAAY,GAChB,IAAI,CAAC,KAAK,KAAK,MAAM;YACnB,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,mEAAmE,CAAC;QAE1E,OAAO,GAAG,WAAW,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;IACzD,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,CAAC,CAAC,8BAA8B,EAAE;YAC7C,YAAY,EAAE,4BAA4B;YAC1C,QAAQ,EAAE,YAAY;SACvB,CAAC,CAAC;QAEH,kFAAkF;QAClF,OAAO,CACL,cAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAC,qBAAqB;YACrG,WAAK,KAAK,EAAC,wCAAwC,EAAC,IAAI,EAAC,6BAA6B;gBACpF,YAAM,IAAI,EAAC,MAAM;oBACf,2BAAkB,MAAM,IAAE,IAAI,CAAC,UAAU,EAAE,CAAQ,CAC9C;gBAEN,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACf,4CAA4C;gBAC5C,YAAM,KAAK,EAAC,WAAW,IAAE,IAAI,CAAQ,CACtC,CAAC,CAAC,CAAC,CACF,YAAM,KAAK,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAC,0BAA0B,IACtF,IAAI,CACA,CACR,CACG,CACC,CACV,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { Component, h, Prop } from \"@stencil/core\";\nimport { t } from \"../../../i18n\";\nimport { unidyState } from \"../../../shared/store/unidy-store\";\nimport { authState } from \"../../store/auth-store\";\nimport { GoogleLogo } from \"./logos/google\";\nimport { LinkedInLogo } from \"./logos/linkedin\";\nimport { AppleLogo } from \"./logos/apple\";\nimport { FacebookLogo } from \"./logos/facebook\";\nimport { DiscordLogo } from \"./logos/discord\";\nimport { UnidyComponent } from \"../../../logger\";\n\nconst SHARED_ICON_CLASSNAME = \"u:w-5 u:h-5 u:block\";\n\nconst ICON_MAP = {\n google: <GoogleLogo className={SHARED_ICON_CLASSNAME} />,\n linkedin: <LinkedInLogo className={SHARED_ICON_CLASSNAME} />,\n apple: <AppleLogo className={`${SHARED_ICON_CLASSNAME} u:fill-current`} />,\n discord: <DiscordLogo className={`${SHARED_ICON_CLASSNAME} u:fill-current`} />,\n facebook: <FacebookLogo className=\"u:w-6 u:h-6 u:block\" />,\n} as const;\n\ntype SocialLoginProvider = keyof typeof ICON_MAP | \"unidy\";\n\n@Component({\n tag: \"u-social-login-button\",\n styleUrl: \"social-login-button.css\",\n shadow: true,\n})\nexport class SocialLoginButton extends UnidyComponent {\n @Prop() provider: SocialLoginProvider = \"google\";\n @Prop() redirectUri: string = window.location.href;\n @Prop() iconOnly = false;\n @Prop() theme: \"light\" | \"dark\" = \"light\";\n\n componentWillLoad() {\n if (this.isUnsupportedProvider) {\n Sentry.captureException(`[u-social-login-button] Unsupported provider \"${this.provider}\".`);\n return;\n }\n }\n\n private get isUnsupportedProvider(): boolean {\n return !Object.hasOwn(ICON_MAP, this.provider) && this.provider !== \"unidy\";\n }\n\n private get isProviderEnabled(): boolean {\n if (authState.step !== \"verification\") {\n return true; // TODO: for now we show all providers on the email step since we don't have registration flow in place yet\n }\n\n if (!authState.availableLoginOptions?.social_logins) {\n return false;\n }\n\n return authState.availableLoginOptions.social_logins.some((enabled) => enabled.startsWith(this.provider) || enabled === this.provider);\n }\n\n private getAuthUrl(): string {\n const baseUrl = unidyState.baseUrl;\n const redirectUri = this.redirectUri ? encodeURIComponent(this.redirectUri) : baseUrl;\n\n return `${baseUrl}/api/sdk/v1/sign_ins/auth/omniauth/${this.provider}?sdk_redirect_uri=${redirectUri}`;\n }\n\n private onClick = async () => {\n if (!unidyState.baseUrl) {\n this.logger.error(\"baseUrl is not set. Make sure <u-config> is rendered with a valid base-url.\");\n return;\n }\n\n window.location.href = this.getAuthUrl();\n };\n\n private renderIcon() {\n if (this.isUnsupportedProvider || this.provider === \"unidy\") {\n return null;\n }\n\n return ICON_MAP[this.provider];\n }\n\n private getButtonClasses(): string {\n const baseClasses = \"u:w-full u:h-10 u:border u:border-solid u:rounded-md u:text-base u:font-medium\";\n const cursorClass = this.isUnsupportedProvider ? \"u:cursor-not-allowed\" : \"u:cursor-pointer\";\n const themeClasses =\n this.theme === \"dark\"\n ? \"u:bg-[#131314] u:text-white u:border-gray-600 u:hover:bg-[#1f1f20]\"\n : \"u:bg-white u:text-[#1f1f1f] u:border-gray-300 u:hover:bg-gray-100\";\n\n return `${baseClasses} ${cursorClass} ${themeClasses}`;\n }\n\n render() {\n if (!this.isProviderEnabled) {\n return null;\n }\n\n const providerName = this.provider.charAt(0).toUpperCase() + this.provider.slice(1);\n const text = t(\"auth.socialLogin.button_text\", {\n defaultValue: \"Continue with {{provider}}\",\n provider: providerName,\n });\n\n // TODO: allow users to customize already used providers with custom text and icon\n return (\n <button type=\"button\" class={this.getButtonClasses()} onClick={this.onClick} part=\"social-login-button\">\n <div class=\"u:flex u:items-center u:justify-center\" part=\"social-login-button-content\">\n <slot name=\"icon\">\n <span aria-hidden=\"true\">{this.renderIcon()}</span>\n </slot>\n\n {this.iconOnly ? (\n // Render the hidden text for accessibility.\n <span class=\"u:sr-only\">{text}</span>\n ) : (\n <span class={!this.isUnsupportedProvider ? \"u:ml-4\" : \"\"} part=\"social-login-button-text\">\n {text}\n </span>\n )}\n </div>\n </button>\n );\n }\n}\n"]}
@@ -1,11 +1,8 @@
1
+ import { t } from "../../../i18n";
1
2
  import { authState } from "../../store/auth-store";
2
3
  import { getParentSigninStep } from "../helpers";
3
- import { t } from "../../../i18n";
4
- export const AuthSubmitButton = (_props, children) => {
5
- return children;
6
- };
7
4
  export const authContext = {
8
- handleClick: async (event, el) => {
5
+ handleClick: async (event, el, _forProp) => {
9
6
  event.preventDefault();
10
7
  await getParentSigninStep(el)?.submit();
11
8
  },
@@ -1 +1 @@
1
- {"version":3,"file":"auth-submit-button.js","sourceRoot":"","sources":["../../../../src/auth/components/submit-button/auth-submit-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AASlC,MAAM,CAAC,MAAM,gBAAgB,GAA+C,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;IAC/F,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,WAAW,EAAE,KAAK,EAAE,KAAiB,EAAE,EAAe,EAAE,EAAE;QACxD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,OAAuB,EAAE,QAAkB;QACpD,IAAI,QAAQ,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACtD,OAAO,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC,QAAQ,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YACvE,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAC;QAC/F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;QACP,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,OAAuB,EAAE,IAAa;QAClD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtB,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,OAAO;gBACV,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,cAAc;gBACjB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,OAAO,CAAC,CAAC,2BAA2B,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,gBAAgB;gBACnB,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;oBAChC,OAAO,CAAC,CAAC,oCAAoC,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC7B;gBACE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,YAAY,CAAC,OAAuB;QAClC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,OAAO,KAAK,OAAO,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,OAAO,KAAK,UAAU,IAAI,SAAS,CAAC,aAAa,KAAK,MAAM,CAAC;QACtE,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACxC,OAAO,OAAO,KAAK,eAAe,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC","sourcesContent":["import type { FunctionalComponent } from \"@stencil/core\";\nimport { authState } from \"../../store/auth-store\";\nimport { getParentSigninStep } from \"../helpers\";\nimport { t } from \"../../../i18n\";\nimport type { SubmitButtonContext } from \"../../../shared/components/submit-button/context\";\n\nexport type AuthButtonFor = \"email\" | \"password\" | \"resetPassword\";\n\nexport interface AuthSubmitButtonProps {\n for?: AuthButtonFor;\n}\n\nexport const AuthSubmitButton: FunctionalComponent<AuthSubmitButtonProps> = (_props, children) => {\n return children;\n};\n\nexport const authContext: SubmitButtonContext = {\n handleClick: async (event: MouseEvent, el: HTMLElement) => {\n event.preventDefault();\n await getParentSigninStep(el)?.submit();\n },\n\n isDisabled(forProp?: AuthButtonFor, disabled?: boolean): boolean {\n if (disabled || authState.loading) return true;\n\n if (authState.step === \"email\" && forProp === \"email\") {\n return authState.email === \"\";\n }\n\n if (authState.step === \"verification\" && forProp === \"password\") {\n return authState.password === \"\";\n }\n\n if (authState.step === \"reset-password\" && forProp === \"resetPassword\") {\n return !authState.resetPassword.newPassword || !authState.resetPassword.passwordConfirmation;\n }\n\n return false;\n },\n\n isLoading(): boolean {\n return authState.loading;\n },\n\n getButtonText(forProp?: AuthButtonFor, text?: string): string {\n if (text) return text;\n\n switch (authState.step) {\n case \"email\":\n return t(\"buttons.continue\");\n case \"verification\":\n if (forProp === \"password\") {\n return t(\"auth.password.button_text\", { defaultValue: \"Sign In with Password\" });\n }\n return t(\"buttons.submit\");\n case \"reset-password\":\n if (forProp === \"resetPassword\") {\n return t(\"auth.resetPassword.button_text_set\", { defaultValue: \"Set Password\" });\n }\n return t(\"buttons.submit\");\n default:\n return t(\"buttons.submit\");\n }\n },\n\n shouldRender(forProp?: AuthButtonFor): boolean {\n if (!authState.availableLoginOptions?.password && forProp === \"password\") {\n return false;\n }\n\n if (authState.step === \"email\") {\n return forProp === \"email\";\n }\n\n if (authState.step === \"verification\") {\n return forProp === \"password\" && authState.magicCodeStep !== \"sent\";\n }\n\n if (authState.step === \"reset-password\") {\n return forProp === \"resetPassword\";\n }\n\n return false;\n },\n};\n"]}
1
+ {"version":3,"file":"auth-submit-button.js","sourceRoot":"","sources":["../../../../src/auth/components/submit-button/auth-submit-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,CAAC,MAAM,WAAW,GAAuC;IAC7D,WAAW,EAAE,KAAK,EAAE,KAAiB,EAAE,EAAe,EAAE,QAAwB,EAAE,EAAE;QAClF,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,OAAuB,EAAE,QAAkB;QACpD,IAAI,QAAQ,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACtD,OAAO,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC,QAAQ,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YACvE,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAC;QAC/F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;QACP,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,OAAuB,EAAE,IAAa;QAClD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEtB,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,OAAO;gBACV,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,cAAc;gBACjB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,OAAO,CAAC,CAAC,2BAA2B,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,gBAAgB;gBACnB,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;oBAChC,OAAO,CAAC,CAAC,oCAAoC,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAC7B;gBACE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,YAAY,CAAC,OAAuB;QAClC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,OAAO,KAAK,OAAO,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACtC,OAAO,OAAO,KAAK,UAAU,IAAI,SAAS,CAAC,aAAa,KAAK,MAAM,CAAC;QACtE,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACxC,OAAO,OAAO,KAAK,eAAe,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC","sourcesContent":["import { t } from \"../../../i18n\";\nimport type { SubmitButtonContext } from \"../../../shared/components/submit-button/context\";\nimport { authState } from \"../../store/auth-store\";\nimport { getParentSigninStep } from \"../helpers\";\n\nexport type AuthButtonFor = \"email\" | \"password\" | \"resetPassword\";\n\nexport const authContext: SubmitButtonContext<AuthButtonFor> = {\n handleClick: async (event: MouseEvent, el: HTMLElement, _forProp?: AuthButtonFor) => {\n event.preventDefault();\n await getParentSigninStep(el)?.submit();\n },\n\n isDisabled(forProp?: AuthButtonFor, disabled?: boolean): boolean {\n if (disabled || authState.loading) return true;\n\n if (authState.step === \"email\" && forProp === \"email\") {\n return authState.email === \"\";\n }\n\n if (authState.step === \"verification\" && forProp === \"password\") {\n return authState.password === \"\";\n }\n\n if (authState.step === \"reset-password\" && forProp === \"resetPassword\") {\n return !authState.resetPassword.newPassword || !authState.resetPassword.passwordConfirmation;\n }\n\n return false;\n },\n\n isLoading(): boolean {\n return authState.loading;\n },\n\n getButtonText(forProp?: AuthButtonFor, text?: string): string {\n if (text) return text;\n\n switch (authState.step) {\n case \"email\":\n return t(\"buttons.continue\");\n case \"verification\":\n if (forProp === \"password\") {\n return t(\"auth.password.button_text\", { defaultValue: \"Sign In with Password\" });\n }\n return t(\"buttons.submit\");\n case \"reset-password\":\n if (forProp === \"resetPassword\") {\n return t(\"auth.resetPassword.button_text_set\", { defaultValue: \"Set Password\" });\n }\n return t(\"buttons.submit\");\n default:\n return t(\"buttons.submit\");\n }\n },\n\n shouldRender(forProp?: AuthButtonFor): boolean {\n if (!authState.availableLoginOptions?.password && forProp === \"password\") {\n return false;\n }\n\n if (authState.step === \"email\") {\n return forProp === \"email\";\n }\n\n if (authState.step === \"verification\") {\n return forProp === \"password\" && authState.magicCodeStep !== \"sent\";\n }\n\n if (authState.step === \"reset-password\") {\n return forProp === \"resetPassword\";\n }\n\n return false;\n },\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { authStore, authState } from "./store/auth-store";
2
1
  import { jwtDecode } from "jwt-decode";
3
2
  import { createLogger } from "../logger";
3
+ import { authState, authStore } from "./store/auth-store";
4
4
  const logger = createLogger("PasskeyAuth");
5
5
  const PASSKEY_ERRORS = {
6
6
  NotSupportedError: "passkey_not_supported",
@@ -39,9 +39,7 @@ function formatCredentialForServer(credential) {
39
39
  };
40
40
  }
41
41
  function extractAndSetSignInId(tokenResponse) {
42
- // @ts-ignore - sid may exist on response
43
42
  if (tokenResponse.sid) {
44
- // @ts-ignore
45
43
  authStore.setSignInId(tokenResponse.sid);
46
44
  return;
47
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"passkey-auth.js","sourceRoot":"","sources":["../../src/auth/passkey-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import { authStore, authState } from \"./store/auth-store\";\nimport type { PasskeyOptionsResponse, TokenResponse, UnidyClient } from \"../api\";\nimport { jwtDecode } from \"jwt-decode\";\nimport type { TokenPayload } from \"./auth\";\nimport { createLogger } from \"../logger\";\n\nconst logger = createLogger(\"PasskeyAuth\");\n\nconst PASSKEY_ERRORS: Record<string, string> = {\n NotSupportedError: \"passkey_not_supported\",\n NotAllowedError: \"passkey_cancelled\",\n SecurityError: \"passkey_security_error\",\n InvalidStateError: \"passkey_invalid_state\",\n};\n\nfunction decodeBase64Url(base64url: string): Uint8Array {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = base64 + \"=\".repeat((4 - (base64.length % 4)) % 4);\n return Uint8Array.from(atob(padded), (c) => c.charCodeAt(0));\n}\n\nfunction buildPublicKeyOptions(options: PasskeyOptionsResponse): PublicKeyCredentialRequestOptions {\n return {\n challenge: Uint8Array.from(atob(options.challenge), (c) => c.charCodeAt(0)),\n timeout: options.timeout || 60000,\n rpId: options.rpId,\n userVerification: (options.userVerification as UserVerificationRequirement) || \"required\",\n allowCredentials: options.allowCredentials?.map((cred) => ({\n ...cred,\n id: decodeBase64Url(cred.id),\n })),\n };\n}\n\nfunction formatCredentialForServer(credential: PublicKeyCredential) {\n const response = credential.response as AuthenticatorAssertionResponse;\n return {\n id: credential.id,\n rawId: btoa(String.fromCharCode(...new Uint8Array(credential.rawId))),\n response: {\n authenticatorData: btoa(String.fromCharCode(...new Uint8Array(response.authenticatorData))),\n clientDataJSON: btoa(String.fromCharCode(...new Uint8Array(response.clientDataJSON))),\n signature: btoa(String.fromCharCode(...new Uint8Array(response.signature))),\n },\n type: credential.type,\n };\n}\n\nfunction extractAndSetSignInId(tokenResponse: TokenResponse) {\n // @ts-ignore - sid may exist on response\n if (tokenResponse.sid) {\n // @ts-ignore\n authStore.setSignInId(tokenResponse.sid);\n return;\n }\n\n // Fallback: extract sid from JWT token payload\n try {\n const decoded = jwtDecode<TokenPayload>(tokenResponse.jwt);\n if (decoded.sid) {\n authStore.setSignInId(decoded.sid);\n }\n } catch {\n // Failed to decode JWT token to extract sid, continue without it\n }\n}\n\nfunction handlePasskeyError(error: unknown) {\n logger.error(\"Passkey error:\", error);\n\n let errorMessage = \"passkey_error\";\n if (error instanceof DOMException) {\n errorMessage = PASSKEY_ERRORS[error.name] || \"passkey_error\";\n }\n\n authStore.setGlobalError(\"auth\", errorMessage);\n authStore.setLoading(false);\n}\n\nexport async function authenticateWithPasskey(client: UnidyClient, onSuccess: (response: TokenResponse) => void) {\n authStore.setLoading(true);\n authStore.clearErrors();\n\n if (!window.PublicKeyCredential) {\n authStore.setGlobalError(\"auth\", \"passkey_not_supported\");\n authStore.setLoading(false);\n return;\n }\n\n try {\n const [optionsError, options] = await client.auth.getPasskeyOptions(authState.sid || undefined);\n\n if (optionsError || !options) {\n authStore.setGlobalError(\"auth\", optionsError || \"bad_request\");\n authStore.setLoading(false);\n return;\n }\n\n const publicKeyOptions = buildPublicKeyOptions(options as PasskeyOptionsResponse);\n\n const credential = (await navigator.credentials.get({\n publicKey: publicKeyOptions,\n })) as PublicKeyCredential | null;\n\n if (!credential) {\n authStore.setGlobalError(\"auth\", \"passkey_cancelled\");\n authStore.setLoading(false);\n return;\n }\n\n const formattedCredential = formatCredentialForServer(credential);\n\n const [verifyError, tkResponse] = await client.auth.authenticateWithPasskey(formattedCredential);\n\n const tokenResponse = tkResponse as TokenResponse;\n if (verifyError || !tokenResponse) {\n authStore.setGlobalError(\"auth\", verifyError || \"authentication_failed\");\n authStore.setLoading(false);\n return;\n }\n\n authStore.setToken(tokenResponse.jwt);\n extractAndSetSignInId(tokenResponse);\n onSuccess(tokenResponse);\n } catch (error) {\n handlePasskeyError(error);\n }\n}\n"]}
1
+ {"version":3,"file":"passkey-auth.js","sourceRoot":"","sources":["../../src/auth/passkey-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import { jwtDecode } from \"jwt-decode\";\nimport type { PasskeyOptionsResponse, TokenResponse, UnidyClient } from \"../api\";\nimport { createLogger } from \"../logger\";\nimport type { TokenPayload } from \"./auth\";\nimport { authState, authStore } from \"./store/auth-store\";\n\nconst logger = createLogger(\"PasskeyAuth\");\n\nconst PASSKEY_ERRORS: Record<string, string> = {\n NotSupportedError: \"passkey_not_supported\",\n NotAllowedError: \"passkey_cancelled\",\n SecurityError: \"passkey_security_error\",\n InvalidStateError: \"passkey_invalid_state\",\n};\n\nfunction decodeBase64Url(base64url: string): Uint8Array {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = base64 + \"=\".repeat((4 - (base64.length % 4)) % 4);\n return Uint8Array.from(atob(padded), (c) => c.charCodeAt(0));\n}\n\nfunction buildPublicKeyOptions(options: PasskeyOptionsResponse): PublicKeyCredentialRequestOptions {\n return {\n challenge: Uint8Array.from(atob(options.challenge), (c) => c.charCodeAt(0)),\n timeout: options.timeout || 60000,\n rpId: options.rpId,\n userVerification: (options.userVerification as UserVerificationRequirement) || \"required\",\n allowCredentials: options.allowCredentials?.map((cred) => ({\n ...cred,\n id: decodeBase64Url(cred.id),\n })),\n };\n}\n\nfunction formatCredentialForServer(credential: PublicKeyCredential) {\n const response = credential.response as AuthenticatorAssertionResponse;\n return {\n id: credential.id,\n rawId: btoa(String.fromCharCode(...new Uint8Array(credential.rawId))),\n response: {\n authenticatorData: btoa(String.fromCharCode(...new Uint8Array(response.authenticatorData))),\n clientDataJSON: btoa(String.fromCharCode(...new Uint8Array(response.clientDataJSON))),\n signature: btoa(String.fromCharCode(...new Uint8Array(response.signature))),\n },\n type: credential.type,\n };\n}\n\nfunction extractAndSetSignInId(tokenResponse: TokenResponse) {\n if (tokenResponse.sid) {\n authStore.setSignInId(tokenResponse.sid);\n return;\n }\n\n // Fallback: extract sid from JWT token payload\n try {\n const decoded = jwtDecode<TokenPayload>(tokenResponse.jwt);\n if (decoded.sid) {\n authStore.setSignInId(decoded.sid);\n }\n } catch {\n // Failed to decode JWT token to extract sid, continue without it\n }\n}\n\nfunction handlePasskeyError(error: unknown) {\n logger.error(\"Passkey error:\", error);\n\n let errorMessage = \"passkey_error\";\n if (error instanceof DOMException) {\n errorMessage = PASSKEY_ERRORS[error.name] || \"passkey_error\";\n }\n\n authStore.setGlobalError(\"auth\", errorMessage);\n authStore.setLoading(false);\n}\n\nexport async function authenticateWithPasskey(client: UnidyClient, onSuccess: (response: TokenResponse) => void) {\n authStore.setLoading(true);\n authStore.clearErrors();\n\n if (!window.PublicKeyCredential) {\n authStore.setGlobalError(\"auth\", \"passkey_not_supported\");\n authStore.setLoading(false);\n return;\n }\n\n try {\n const [optionsError, options] = await client.auth.getPasskeyOptions(authState.sid || undefined);\n\n if (optionsError || !options) {\n authStore.setGlobalError(\"auth\", optionsError || \"bad_request\");\n authStore.setLoading(false);\n return;\n }\n\n const publicKeyOptions = buildPublicKeyOptions(options as PasskeyOptionsResponse);\n\n const credential = (await navigator.credentials.get({\n publicKey: publicKeyOptions,\n })) as PublicKeyCredential | null;\n\n if (!credential) {\n authStore.setGlobalError(\"auth\", \"passkey_cancelled\");\n authStore.setLoading(false);\n return;\n }\n\n const formattedCredential = formatCredentialForServer(credential);\n\n const [verifyError, tkResponse] = await client.auth.authenticateWithPasskey(formattedCredential);\n\n const tokenResponse = tkResponse as TokenResponse;\n if (verifyError || !tokenResponse) {\n authStore.setGlobalError(\"auth\", verifyError || \"authentication_failed\");\n authStore.setLoading(false);\n return;\n }\n\n authStore.setToken(tokenResponse.jwt);\n extractAndSetSignInId(tokenResponse);\n onSuccess(tokenResponse);\n } catch (error) {\n handlePasskeyError(error);\n }\n}\n"]}
@@ -3,6 +3,7 @@ import * as Sentry from "@sentry/browser";
3
3
  import { createLogger } from "./logger";
4
4
  const logger = createLogger("globalScript");
5
5
  export default function () {
6
+ // or export default async function()
6
7
  logger.info("Logger initialized. You can set the log level in the browser console, e.g., setLogLevel('debug').");
7
8
  if (!Build.isDev) {
8
9
  logger.info("Initializing Sentry...");
@@ -1 +1 @@
1
- {"version":3,"file":"globalScript.js","sourceRoot":"","sources":["../src/globalScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAE5C,MAAM,CAAC,OAAO;IACZ,MAAM,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;IACjH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,iGAAiG;YACtG,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;YACjC,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import { Build } from \"@stencil/core\";\nimport * as Sentry from \"@sentry/browser\";\nimport { createLogger } from \"./logger\";\n\nconst logger = createLogger(\"globalScript\");\n\nexport default function() { // or export default async function()\n logger.info(\"Logger initialized. You can set the log level in the browser console, e.g., setLogLevel('debug').\");\n if (!Build.isDev) {\n logger.info(\"Initializing Sentry...\");\n Sentry.init({\n dsn: \"https://d4cc4e5f6d985e61c56330dd27d104d6@o4507882295132160.ingest.de.sentry.io/4510443854037072\",\n environment: process.env.NODE_ENV,\n sendDefaultPii: true,\n tracesSampleRate: 0.005,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"globalScript.js","sourceRoot":"","sources":["../src/globalScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAE5C,MAAM,CAAC,OAAO;IACZ,qCAAqC;IACrC,MAAM,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;IACjH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,iGAAiG;YACtG,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;YACjC,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import { Build } from \"@stencil/core\";\nimport * as Sentry from \"@sentry/browser\";\nimport { createLogger } from \"./logger\";\n\nconst logger = createLogger(\"globalScript\");\n\nexport default function () {\n // or export default async function()\n logger.info(\"Logger initialized. You can set the log level in the browser console, e.g., setLogLevel('debug').\");\n if (!Build.isDev) {\n logger.info(\"Initializing Sentry...\");\n Sentry.init({\n dsn: \"https://d4cc4e5f6d985e61c56330dd27d104d6@o4507882295132160.ingest.de.sentry.io/4510443854037072\",\n environment: process.env.NODE_ENV,\n sendDefaultPii: true,\n tracesSampleRate: 0.005,\n });\n }\n}\n"]}