@tempoxyz/id 0.0.0-pr-293.sha-db2bcd0 → 0.0.0-pr-293.sha-e314a6e

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 (377) hide show
  1. package/dist/app/client/assets/Account-BYLpNFf3.css +1 -0
  2. package/dist/app/client/assets/Account-DKlYpUaF.js +1 -0
  3. package/dist/app/client/assets/Amount-ZdtluGf-.css +1 -0
  4. package/dist/app/client/assets/Amount-uCaXmEC1.js +1 -0
  5. package/dist/app/client/assets/{Approval-lMS61Hor.js → Approval-_VTK0bIA.js} +1 -1
  6. package/dist/app/client/assets/{Authentication-CNU_hdsE.js → Authentication-CcZraW4V.js} +1 -1
  7. package/dist/app/client/assets/Callout-Cpp2tekO.js +1 -0
  8. package/dist/app/client/assets/Callout-DBfEmP7q.css +1 -0
  9. package/dist/app/client/assets/{Chain-CgM0gkul.js → Chain-BaJbQHEq.js} +1 -1
  10. package/dist/app/client/assets/{Check-l6Xt-h8M.js → Check-T-Kf-w2J.js} +1 -1
  11. package/dist/app/client/assets/{ChevronRight-Dgx1CBfS.js → ChevronRight-Cb0izsfB.js} +1 -1
  12. package/dist/app/client/assets/{ChooseAccount-DKQvWYym.js → ChooseAccount-BbdtokuQ.js} +1 -1
  13. package/dist/app/client/assets/{Client-B3HiaUR7.js → Client-XdlKOIjT.js} +1 -1
  14. package/dist/app/client/assets/{Close-CHeDbDyp.js → Close-9qiwSZoT.js} +1 -1
  15. package/dist/app/client/assets/{Cloud-BnBzwFJQ.js → Cloud-yU0Kxv28.js} +1 -1
  16. package/dist/app/client/assets/CodeInput-BqRteSwD.css +1 -0
  17. package/dist/app/client/assets/CodeInput-C8ad0edh.js +1 -0
  18. package/dist/app/client/assets/Deposit-CclrAoXL.css +1 -0
  19. package/dist/app/client/assets/Deposit-b5yx-L71.js +1 -0
  20. package/dist/app/client/assets/DevTools-BYkmtuV5.css +1 -0
  21. package/dist/app/client/assets/DevTools-Cgd0Ogan.js +1 -0
  22. package/dist/app/client/assets/{DeviceApproval-DKQklicf.js → DeviceApproval-CGdmL9U5.js} +1 -1
  23. package/dist/app/client/assets/{Fingerprint-CVLZp0fE.js → Fingerprint-081gQp_i.js} +1 -1
  24. package/dist/app/client/assets/{Globe-RAkdkLVn.js → Globe-D4HEnXoi.js} +1 -1
  25. package/dist/app/client/assets/Grant-5a-n1gJH.css +1 -0
  26. package/dist/app/client/assets/Grant-C-7ibHJb.js +1 -0
  27. package/dist/app/client/assets/Hex-C9KeV7_9.css +1 -0
  28. package/dist/app/client/assets/Hex-COpLAksw.js +10 -0
  29. package/dist/app/client/assets/IconChip-Cr71cqFZ.js +1 -0
  30. package/dist/app/client/assets/IconChip-yqaQ2y_d.css +1 -0
  31. package/dist/app/client/assets/InputGroup-BMExR1w7.js +1 -0
  32. package/dist/app/client/assets/InputGroup-BlZvt9In.css +1 -0
  33. package/dist/app/client/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
  34. package/dist/app/client/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
  35. package/dist/app/client/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
  36. package/dist/app/client/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
  37. package/dist/app/client/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
  38. package/dist/app/client/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
  39. package/dist/app/client/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
  40. package/dist/app/client/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
  41. package/dist/app/client/assets/Loader-CVy-jQh9.js +1 -0
  42. package/dist/app/client/assets/{PopoverPopup-AaR182Lw.js → PopoverPopup-CQv00nl_.js} +1 -1
  43. package/dist/app/client/assets/Rows-CT3nC-Gp.js +1 -0
  44. package/dist/app/client/assets/Rows-DPGTUdA8.css +1 -0
  45. package/dist/app/client/assets/{Separator-C1NRk_mW.js → Separator-Doxz2kha.js} +1 -1
  46. package/dist/app/client/assets/SignIn-D2D3rbzT.js +1 -0
  47. package/dist/app/client/assets/SignIn-mlBTwUq4.css +1 -0
  48. package/dist/app/client/assets/Stack-D7Yt22Ed.css +1 -0
  49. package/dist/app/client/assets/Stack-qm24zmlV.js +1 -0
  50. package/dist/app/client/assets/ToolbarRootContext-Ctu7JTLk.js +1 -0
  51. package/dist/app/client/assets/Tooltip-arQraM0D.js +1 -0
  52. package/dist/app/client/assets/Tooltip-d3y9ESUJ.css +1 -0
  53. package/dist/app/client/assets/___-I98bns4o.css +1 -0
  54. package/dist/app/client/assets/___.flows-8Dmgeehd.js +5 -0
  55. package/dist/app/client/assets/{authorize-BQ1QbDZ8.js → authorize-DAtsqrNM.js} +1 -1
  56. package/dist/app/client/assets/{choose-account-Da0fLaYb.js → choose-account-DEFRgijo.js} +1 -1
  57. package/dist/app/client/assets/{deposit-CwKR_KjX.js → deposit--QiYWQfo.js} +1 -1
  58. package/dist/app/client/assets/{device-CCwq2oAs.js → device-Bq9xs5K6.js} +1 -1
  59. package/dist/app/client/assets/{error-Dj24A5n4.js → error-IQXxc1eM.js} +1 -1
  60. package/dist/app/client/assets/{getPseudoElementBounds-DH_jjqMh.js → getPseudoElementBounds-4olojy3W.js} +1 -1
  61. package/dist/app/client/assets/index-CyFheDuU.js +13 -0
  62. package/dist/app/client/assets/index-DSkPoKOK.css +1 -0
  63. package/dist/app/client/assets/{lazyRouteComponent-108fI1-o.js → lazyRouteComponent-Dz0rIGYN.js} +1 -1
  64. package/dist/app/client/assets/{login--cK4-SN_.js → login-B0BjHqjo.js} +1 -1
  65. package/dist/app/client/assets/pathUSD-BMh6ajrW.css +1 -0
  66. package/dist/app/client/assets/pathUSD-DuAfAKZZ.js +1 -0
  67. package/dist/app/client/assets/{removable-CZFK4Sbw.js → removable-CbJQgeuY.js} +1 -1
  68. package/dist/app/client/assets/{routes-BEKA6M9o.js → routes-BkBTe_Iu.js} +1 -1
  69. package/dist/app/client/assets/{suspense-ClIj0Mjn.js → suspense-Djz3yPi6.js} +1 -1
  70. package/dist/app/client/assets/useNavigate-B3GfD6JV.js +1 -0
  71. package/dist/app/client/assets/{useRegisterFieldControl-r_mKBm9D.js → useRegisterFieldControl-C8uwO_R4.js} +1 -1
  72. package/dist/app/client/assets/zyzz-DYC-X0_B.css +1 -0
  73. package/dist/app/client/assets/zyzz.config-DJRBo25J.js +2 -0
  74. package/dist/app/server/.vite/manifest.json +640 -608
  75. package/dist/app/server/assets/Account-BYLpNFf3.css +1 -0
  76. package/dist/app/server/assets/Account-g1_Uaj86.js +2 -0
  77. package/dist/app/server/assets/Account-g1_Uaj86.js.map +1 -0
  78. package/dist/app/server/assets/Amount-BXSuv2fx.js +2 -0
  79. package/dist/app/server/assets/Amount-BXSuv2fx.js.map +1 -0
  80. package/dist/app/server/assets/Amount-ZdtluGf-.css +1 -0
  81. package/dist/app/server/assets/{Approval-DhLkTvkI.js → Approval-DA8fDZIl.js} +2 -2
  82. package/dist/app/server/assets/{Approval-DhLkTvkI.js.map → Approval-DA8fDZIl.js.map} +1 -1
  83. package/dist/app/server/assets/{Authentication-Odm8-gfs.js → Authentication-BJgy8lyC.js} +2 -2
  84. package/dist/app/server/assets/{Authentication-Odm8-gfs.js.map → Authentication-BJgy8lyC.js.map} +1 -1
  85. package/dist/app/server/assets/{Authentication-DLWMd2mA.js → Authentication-CsSh3HGu.js} +2 -2
  86. package/dist/app/server/assets/{Authentication-DLWMd2mA.js.map → Authentication-CsSh3HGu.js.map} +1 -1
  87. package/dist/app/server/assets/Callout-DBfEmP7q.css +1 -0
  88. package/dist/app/server/assets/Callout-DlcQ5BUo.js +2 -0
  89. package/dist/app/server/assets/Callout-DlcQ5BUo.js.map +1 -0
  90. package/dist/app/server/assets/{Chain-CQgBRAXx.js → Chain-C9RGZDJm.js} +2 -2
  91. package/dist/app/server/assets/{Chain-CQgBRAXx.js.map → Chain-C9RGZDJm.js.map} +1 -1
  92. package/dist/app/server/assets/{Check-BwwQ6kDn.js → Check-CQIa-Y5d.js} +2 -2
  93. package/dist/app/server/assets/{Check-BwwQ6kDn.js.map → Check-CQIa-Y5d.js.map} +1 -1
  94. package/dist/app/server/assets/{ChevronRight-B_ft-uyS.js → ChevronRight-wzF9Mh2e.js} +2 -2
  95. package/dist/app/server/assets/{ChevronRight-B_ft-uyS.js.map → ChevronRight-wzF9Mh2e.js.map} +1 -1
  96. package/dist/app/server/assets/{ChooseAccount-FJJ2kRPk.js → ChooseAccount-De_YweJM.js} +2 -2
  97. package/dist/app/server/assets/{ChooseAccount-FJJ2kRPk.js.map → ChooseAccount-De_YweJM.js.map} +1 -1
  98. package/dist/app/server/assets/{Client-D3gnMDTr.js → Client-BAXSFa9e.js} +2 -2
  99. package/dist/app/server/assets/{Client-D3gnMDTr.js.map → Client-BAXSFa9e.js.map} +1 -1
  100. package/dist/app/server/assets/{ClientOnly-CbQVNHub.js → ClientOnly-B8k5xDwz.js} +2 -2
  101. package/dist/app/server/assets/{ClientOnly-CbQVNHub.js.map → ClientOnly-B8k5xDwz.js.map} +1 -1
  102. package/dist/app/server/assets/{Close-ChRMz-uR.js → Close-C74hwnOn.js} +2 -2
  103. package/dist/app/server/assets/{Close-ChRMz-uR.js.map → Close-C74hwnOn.js.map} +1 -1
  104. package/dist/app/server/assets/{Cloud-C3_mtq_Y.js → Cloud-CYXeneSe.js} +2 -2
  105. package/dist/app/server/assets/{Cloud-C3_mtq_Y.js.map → Cloud-CYXeneSe.js.map} +1 -1
  106. package/dist/app/server/assets/CodeInput-BqRteSwD.css +1 -0
  107. package/dist/app/server/assets/CodeInput-DdkMKOyq.js +2 -0
  108. package/dist/app/server/assets/CodeInput-DdkMKOyq.js.map +1 -0
  109. package/dist/app/server/assets/{Credential-D82PNwyx.js → Credential-DXcfPJEP.js} +2 -2
  110. package/dist/app/server/assets/{Credential-D82PNwyx.js.map → Credential-DXcfPJEP.js.map} +1 -1
  111. package/dist/app/server/assets/Deposit-CclrAoXL.css +1 -0
  112. package/dist/app/server/assets/Deposit-DOp5HCDX.js +2 -0
  113. package/dist/app/server/assets/Deposit-DOp5HCDX.js.map +1 -0
  114. package/dist/app/server/assets/DevTools-BYkmtuV5.css +1 -0
  115. package/dist/app/server/assets/DevTools-CxdPUN3V.js +2 -0
  116. package/dist/app/server/assets/DevTools-CxdPUN3V.js.map +1 -0
  117. package/dist/app/server/assets/{DeviceApproval-BhWgrv9l.js → DeviceApproval-o7T8XlX3.js} +2 -2
  118. package/dist/app/server/assets/{DeviceApproval-BhWgrv9l.js.map → DeviceApproval-o7T8XlX3.js.map} +1 -1
  119. package/dist/app/server/assets/{ExecutionError-DSSCSoHl.js → ExecutionError-DoRNvh3D.js} +2 -2
  120. package/dist/app/server/assets/{ExecutionError-DSSCSoHl.js.map → ExecutionError-DoRNvh3D.js.map} +1 -1
  121. package/dist/app/server/assets/{Faucet-Cv-nQMBR.js → Faucet-jp6zNWHE.js} +2 -2
  122. package/dist/app/server/assets/{Faucet-Cv-nQMBR.js.map → Faucet-jp6zNWHE.js.map} +1 -1
  123. package/dist/app/server/assets/{Fingerprint-B0Iay4Ws.js → Fingerprint-CAqjOS3T.js} +2 -2
  124. package/dist/app/server/assets/{Fingerprint-B0Iay4Ws.js.map → Fingerprint-CAqjOS3T.js.map} +1 -1
  125. package/dist/app/server/assets/{Globe-C6rnzTY0.js → Globe-BZ_5dGqa.js} +2 -2
  126. package/dist/app/server/assets/{Globe-C6rnzTY0.js.map → Globe-BZ_5dGqa.js.map} +1 -1
  127. package/dist/app/server/assets/Grant-5a-n1gJH.css +1 -0
  128. package/dist/app/{client/assets/Grant-DurkleN7.js → server/assets/Grant-BwOC2P94.js} +2 -1
  129. package/dist/app/server/assets/Grant-BwOC2P94.js.map +1 -0
  130. package/dist/app/server/assets/Hex-67thYs-f.js +11 -0
  131. package/dist/app/server/assets/Hex-67thYs-f.js.map +1 -0
  132. package/dist/app/server/assets/Hex-C9KeV7_9.css +1 -0
  133. package/dist/app/server/assets/IconChip-Cmufss8d.js +2 -0
  134. package/dist/app/server/assets/IconChip-Cmufss8d.js.map +1 -0
  135. package/dist/app/server/assets/IconChip-yqaQ2y_d.css +1 -0
  136. package/dist/app/server/assets/InputGroup-BlZvt9In.css +1 -0
  137. package/dist/app/server/assets/InputGroup-Bn2KM9pd.js +2 -0
  138. package/dist/app/server/assets/InputGroup-Bn2KM9pd.js.map +1 -0
  139. package/dist/app/server/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
  140. package/dist/app/server/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
  141. package/dist/app/server/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
  142. package/dist/app/server/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
  143. package/dist/app/server/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
  144. package/dist/app/server/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
  145. package/dist/app/server/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
  146. package/dist/app/server/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
  147. package/dist/app/server/assets/Loader-DvDbd8kj.js +2 -0
  148. package/dist/app/server/assets/{Loader-Ivf5dWFl.js.map → Loader-DvDbd8kj.js.map} +1 -1
  149. package/dist/app/server/assets/{Match-DusFDz9D.js → Match-C65vhhhD.js} +2 -2
  150. package/dist/app/server/assets/{Match-DusFDz9D.js.map → Match-C65vhhhD.js.map} +1 -1
  151. package/dist/app/server/assets/PopoverPopup-kuWGUSYM.js +2 -0
  152. package/dist/app/server/assets/{PopoverPopup-D98JOZVe.js.map → PopoverPopup-kuWGUSYM.js.map} +1 -1
  153. package/dist/app/server/assets/Rows-DPGTUdA8.css +1 -0
  154. package/dist/app/server/assets/Rows-eTPur_py.js +2 -0
  155. package/dist/app/server/assets/Rows-eTPur_py.js.map +1 -0
  156. package/dist/app/server/assets/{Separator-B6od-9JY.js → Separator-BPNenixO.js} +2 -2
  157. package/dist/app/server/assets/{Separator-B6od-9JY.js.map → Separator-BPNenixO.js.map} +1 -1
  158. package/dist/app/server/assets/SignIn-CVPZSR-8.js +2 -0
  159. package/dist/app/server/assets/SignIn-CVPZSR-8.js.map +1 -0
  160. package/dist/app/server/assets/SignIn-mlBTwUq4.css +1 -0
  161. package/dist/app/server/assets/Stack-D7Yt22Ed.css +1 -0
  162. package/dist/app/server/assets/Stack-DQMZBUUB.js +2 -0
  163. package/dist/app/server/assets/Stack-DQMZBUUB.js.map +1 -0
  164. package/dist/app/server/assets/ToolbarRootContext-5168W3t4.js +2 -0
  165. package/dist/app/server/assets/{ToolbarRootContext-BCmWBQ7n.js.map → ToolbarRootContext-5168W3t4.js.map} +1 -1
  166. package/dist/app/server/assets/Tooltip-DR3nssae.js +2 -0
  167. package/dist/app/server/assets/Tooltip-DR3nssae.js.map +1 -0
  168. package/dist/app/server/assets/Tooltip-d3y9ESUJ.css +1 -0
  169. package/dist/app/server/assets/___-I98bns4o.css +1 -0
  170. package/dist/app/server/assets/___.flows-D_J822MU.js +6 -0
  171. package/dist/app/server/assets/___.flows-D_J822MU.js.map +1 -0
  172. package/dist/app/server/assets/_tanstack-start-manifest_v-DQjMcFpU.js +1 -0
  173. package/dist/app/server/assets/{_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-Drf_Iqhc.js → _zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-EmCsnNUQ.js} +2 -2
  174. package/dist/app/server/assets/{_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-Drf_Iqhc.js.map → _zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-EmCsnNUQ.js.map} +1 -1
  175. package/dist/app/server/assets/{accessKey-CxNqjouy.js → accessKey-DlBe71R7.js} +4 -4
  176. package/dist/app/server/assets/{accessKey-CxNqjouy.js.map → accessKey-DlBe71R7.js.map} +1 -1
  177. package/dist/app/server/assets/{authorize-D_5EG0WN.js → authorize-C3nY01zc.js} +2 -2
  178. package/dist/app/server/assets/{authorize-D_5EG0WN.js.map → authorize-C3nY01zc.js.map} +1 -1
  179. package/dist/app/server/assets/{authorize-pZETCSux.js → authorize-C9tfZ34z.js} +2 -2
  180. package/dist/app/server/assets/{authorize-pZETCSux.js.map → authorize-C9tfZ34z.js.map} +1 -1
  181. package/dist/app/server/assets/{authorize-DXYo-K2n-08rIhXFT.js → authorize-DXYo-K2n-Bc8o9t1x.js} +2 -2
  182. package/dist/app/server/assets/{authorize-DXYo-K2n-08rIhXFT.js.map → authorize-DXYo-K2n-Bc8o9t1x.js.map} +1 -1
  183. package/dist/app/server/assets/{choose-account-BOPrs9l7.js → choose-account-DNfcLweT.js} +2 -2
  184. package/dist/app/server/assets/{choose-account-BOPrs9l7.js.map → choose-account-DNfcLweT.js.map} +1 -1
  185. package/dist/app/server/assets/{choose-account-MDW4jp29.js → choose-account-Lq0qFqBr.js} +2 -2
  186. package/dist/app/server/assets/{choose-account-MDW4jp29.js.map → choose-account-Lq0qFqBr.js.map} +1 -1
  187. package/dist/app/server/assets/{core-Dxqe4Tzf.js → core-Ci_AVqAl.js} +2 -2
  188. package/dist/app/server/assets/{core-Dxqe4Tzf.js.map → core-Ci_AVqAl.js.map} +1 -1
  189. package/dist/app/server/assets/default-u_dwuiYb-D3URkhAV.js +2 -0
  190. package/dist/app/server/assets/{default-u_dwuiYb-BZX-cEte.js.map → default-u_dwuiYb-D3URkhAV.js.map} +1 -1
  191. package/dist/app/server/assets/{deposit-AgLrOoA3.js → deposit-Ch8VqCtG.js} +2 -2
  192. package/dist/app/server/assets/{deposit-AgLrOoA3.js.map → deposit-Ch8VqCtG.js.map} +1 -1
  193. package/dist/app/server/assets/{deposit-Cjt69KmJ.js → deposit-xQrouL3f.js} +2 -2
  194. package/dist/app/server/assets/{deposit-Cjt69KmJ.js.map → deposit-xQrouL3f.js.map} +1 -1
  195. package/dist/app/server/assets/{device-TEgIth9V.js → device-BAsgIC7D.js} +2 -2
  196. package/dist/app/server/assets/{device-TEgIth9V.js.map → device-BAsgIC7D.js.map} +1 -1
  197. package/dist/app/server/assets/{device-DO_RH0Or.js → device-BV99aHMG.js} +2 -2
  198. package/dist/app/server/assets/{device-DO_RH0Or.js.map → device-BV99aHMG.js.map} +1 -1
  199. package/dist/app/server/assets/dist-BhIyCFP8.js +1 -0
  200. package/dist/app/server/assets/{dist-C9wLcfH8.js → dist-C-Rzwa6V.js} +2 -2
  201. package/dist/app/server/assets/{dist-C9wLcfH8.js.map → dist-C-Rzwa6V.js.map} +1 -1
  202. package/dist/app/server/assets/{dist-SBl0rlY-.js → dist-CJN10pUl.js} +2 -2
  203. package/dist/app/server/assets/{dist-SBl0rlY-.js.map → dist-CJN10pUl.js.map} +1 -1
  204. package/dist/app/server/assets/{effect-QlVUlMFu-aB2jdYth.js → effect-QlVUlMFu-svPBY1dH.js} +2 -2
  205. package/dist/app/server/assets/{effect-QlVUlMFu-aB2jdYth.js.map → effect-QlVUlMFu-svPBY1dH.js.map} +1 -1
  206. package/dist/app/server/assets/{error-BDVg4EUJ.js → error-CHeOE_lh.js} +2 -2
  207. package/dist/app/server/assets/{error-BDVg4EUJ.js.map → error-CHeOE_lh.js.map} +1 -1
  208. package/dist/app/server/assets/{error-Yg6jqry-.js → error-PecJkSHO.js} +2 -2
  209. package/dist/app/server/assets/{error-Yg6jqry-.js.map → error-PecJkSHO.js.map} +1 -1
  210. package/dist/app/server/assets/{factory-BPswjDEW.js → factory-Bs0vLkBr.js} +2 -2
  211. package/dist/app/server/assets/{factory-BPswjDEW.js.map → factory-Bs0vLkBr.js.map} +1 -1
  212. package/dist/app/server/assets/getPseudoElementBounds-DIn3v91B.js +2 -0
  213. package/dist/app/server/assets/{getPseudoElementBounds-BdqJhx6M.js.map → getPseudoElementBounds-DIn3v91B.js.map} +1 -1
  214. package/dist/app/server/assets/{index-CLddUTqr-Bavq3Qss.js → index-CLddUTqr-CmUyZRXY.js} +2 -2
  215. package/dist/app/server/assets/{index-CLddUTqr-Bavq3Qss.js.map → index-CLddUTqr-CmUyZRXY.js.map} +1 -1
  216. package/dist/app/server/assets/{index-DZEfthgZ--TkOBRwP.js → index-DZEfthgZ-Bkf7F_aP.js} +2 -2
  217. package/dist/app/server/assets/{index-DZEfthgZ--TkOBRwP.js.map → index-DZEfthgZ-Bkf7F_aP.js.map} +1 -1
  218. package/dist/app/server/assets/{kysely-adapter-BVql8na5.js → kysely-adapter-DhztbDJz.js} +1 -1
  219. package/dist/app/server/assets/{lazyRouteComponent-BXabRVTE.js → lazyRouteComponent-DOSE663E.js} +2 -2
  220. package/dist/app/server/assets/{lazyRouteComponent-BXabRVTE.js.map → lazyRouteComponent-DOSE663E.js.map} +1 -1
  221. package/dist/app/server/assets/{login-BR3Vh4Jw.js → login-6K4ND-gN.js} +2 -2
  222. package/dist/app/server/assets/{login-BR3Vh4Jw.js.map → login-6K4ND-gN.js.map} +1 -1
  223. package/dist/app/server/assets/{login-DtRzF4FQ.js → login-CGq85v-9.js} +2 -2
  224. package/dist/app/server/assets/{login-DtRzF4FQ.js.map → login-CGq85v-9.js.map} +1 -1
  225. package/dist/app/server/assets/{matchContext-Cuq8aYzA.js → matchContext-BHbopc_c.js} +2 -2
  226. package/dist/app/server/assets/{matchContext-Cuq8aYzA.js.map → matchContext-BHbopc_c.js.map} +1 -1
  227. package/dist/app/server/assets/{mutation-BseSOMT8.js → mutation-D0MCZKRo.js} +2 -2
  228. package/dist/app/server/assets/{mutation-BseSOMT8.js.map → mutation-D0MCZKRo.js.map} +1 -1
  229. package/dist/app/server/assets/pathUSD-BMh6ajrW.css +1 -0
  230. package/dist/app/server/assets/pathUSD-DqRWfB70.js +2 -0
  231. package/dist/app/server/assets/pathUSD-DqRWfB70.js.map +1 -0
  232. package/dist/app/server/assets/{query-lzX3sTGO.js → query-BfAOtP6H.js} +2 -2
  233. package/dist/app/server/assets/{query-lzX3sTGO.js.map → query-BfAOtP6H.js.map} +1 -1
  234. package/dist/app/server/assets/react-dom-BbDIEd_j.css +1 -0
  235. package/dist/app/server/assets/{react-dom-DtwtyQPy.js → react-dom-pSpaua7D.js} +1 -1
  236. package/dist/app/server/assets/{react-dom-DtwtyQPy.js.map → react-dom-pSpaua7D.js.map} +1 -1
  237. package/dist/app/server/assets/{removable-HVB1MGzn.js → removable-BIS_RRBc.js} +2 -2
  238. package/dist/app/server/assets/{removable-HVB1MGzn.js.map → removable-BIS_RRBc.js.map} +1 -1
  239. package/dist/app/server/assets/{resolveError-DSqzEjUE.js → resolveError-DPXmbkOB.js} +2 -2
  240. package/dist/app/server/assets/{resolveError-DSqzEjUE.js.map → resolveError-DPXmbkOB.js.map} +1 -1
  241. package/dist/app/server/assets/{router-uhTdTHZE.js → router-nrTsbXpb.js} +2 -2
  242. package/dist/app/server/assets/router-nrTsbXpb.js.map +1 -0
  243. package/dist/app/server/assets/routes-BgiIzrOt.css +1 -0
  244. package/dist/app/server/assets/{routes-CeDOMpI-.js → routes-ClVSwEtU.js} +2 -2
  245. package/dist/app/server/assets/{routes-CeDOMpI-.js.map → routes-ClVSwEtU.js.map} +1 -1
  246. package/dist/app/server/assets/routes-DM3C9lXZ.js +2 -0
  247. package/dist/app/server/assets/routes-DM3C9lXZ.js.map +1 -0
  248. package/dist/app/server/assets/{schemas-fV27l6kI.js → schemas-CFw4XgfH.js} +2 -2
  249. package/dist/app/server/assets/{schemas-fV27l6kI.js.map → schemas-CFw4XgfH.js.map} +1 -1
  250. package/dist/app/server/assets/{secp256k1-5tp4GQIt.js → secp256k1-BmATpikU.js} +2 -2
  251. package/dist/app/server/assets/{secp256k1-5tp4GQIt.js.map → secp256k1-BmATpikU.js.map} +1 -1
  252. package/dist/app/server/assets/{sury-CWZTCd75-BPXRo6iz.js → sury-CWZTCd75-B2_9nmQ-.js} +2 -2
  253. package/dist/app/server/assets/{sury-CWZTCd75-BPXRo6iz.js.map → sury-CWZTCd75-B2_9nmQ-.js.map} +1 -1
  254. package/dist/app/server/assets/{suspense-CVCU9Kbi.js → suspense-gv0MCXZ8.js} +2 -2
  255. package/dist/app/server/assets/{suspense-CVCU9Kbi.js.map → suspense-gv0MCXZ8.js.map} +1 -1
  256. package/dist/app/server/assets/{useNavigate-D9psnozp.js → useNavigate-gn6-bYOz.js} +2 -2
  257. package/dist/app/server/assets/{useNavigate-D9psnozp.js.map → useNavigate-gn6-bYOz.js.map} +1 -1
  258. package/dist/app/server/assets/useRegisterFieldControl-DMeVvRtG.js +2 -0
  259. package/dist/app/server/assets/{useRegisterFieldControl-UOdCWAKS.js.map → useRegisterFieldControl-DMeVvRtG.js.map} +1 -1
  260. package/dist/app/server/assets/{utils-Dst7Jy9U.js → utils-CJnLBS6t.js} +2 -2
  261. package/dist/app/server/assets/{utils-Dst7Jy9U.js.map → utils-CJnLBS6t.js.map} +1 -1
  262. package/dist/app/server/assets/{valibot--1zFm7rT-LDsJca69.js → valibot--1zFm7rT-DAm9l6Yd.js} +2 -2
  263. package/dist/app/server/assets/{valibot--1zFm7rT-LDsJca69.js.map → valibot--1zFm7rT-DAm9l6Yd.js.map} +1 -1
  264. package/dist/app/server/assets/{valibot-D_HTw1Gn-DY-tIZ72.js → valibot-D_HTw1Gn-B_uu9X0a.js} +2 -2
  265. package/dist/app/server/assets/{valibot-D_HTw1Gn-DY-tIZ72.js.map → valibot-D_HTw1Gn-B_uu9X0a.js.map} +1 -1
  266. package/dist/app/server/assets/{zod-Bwrt9trS-Cf4c1iF8.js → zod-Bwrt9trS-DDq3sdx6.js} +2 -2
  267. package/dist/app/server/assets/{zod-Bwrt9trS-Cf4c1iF8.js.map → zod-Bwrt9trS-DDq3sdx6.js.map} +1 -1
  268. package/dist/app/server/assets/{zod-DSgpEGAE-IkLVlUaZ.js → zod-DSgpEGAE-Dzlub58Z.js} +2 -2
  269. package/dist/app/server/assets/{zod-DSgpEGAE-IkLVlUaZ.js.map → zod-DSgpEGAE-Dzlub58Z.js.map} +1 -1
  270. package/dist/app/server/assets/zyzz-6R2K52xP.css +1 -0
  271. package/dist/app/server/assets/{zyzz.config-DYq-16_0.js → zyzz.config-CW977vYL.js} +3 -3
  272. package/dist/app/server/assets/zyzz.config-CW977vYL.js.map +1 -0
  273. package/dist/app/server/index.js +3 -3
  274. package/package.json +1 -1
  275. package/dist/app/client/assets/Account-DiXbQ7gq.css +0 -1
  276. package/dist/app/client/assets/Account-JXT-dSA8.js +0 -1
  277. package/dist/app/client/assets/Amount-C5uw89Ge.js +0 -1
  278. package/dist/app/client/assets/Amount-Ck6sPRDT.css +0 -1
  279. package/dist/app/client/assets/Callout-DE0CvxbE.css +0 -1
  280. package/dist/app/client/assets/Callout-D_dLrptL.js +0 -1
  281. package/dist/app/client/assets/CodeInput-CXbj-o_B.js +0 -1
  282. package/dist/app/client/assets/CodeInput-C_clyqA2.css +0 -1
  283. package/dist/app/client/assets/Deposit-CAkrtNYZ.css +0 -1
  284. package/dist/app/client/assets/Deposit-Cv7IQBO0.js +0 -1
  285. package/dist/app/client/assets/DevTools-CnWAfvO2.js +0 -1
  286. package/dist/app/client/assets/DevTools-DLG9O0YT.css +0 -1
  287. package/dist/app/client/assets/Grant-B6bmC4rh.css +0 -1
  288. package/dist/app/client/assets/Hex-BR5nHbFT.js +0 -10
  289. package/dist/app/client/assets/Hex-CriDfcNg.css +0 -1
  290. package/dist/app/client/assets/IconChip-BVqRSUpG.css +0 -1
  291. package/dist/app/client/assets/IconChip-ClKbN-8M.js +0 -1
  292. package/dist/app/client/assets/InputGroup-4QFqa-T2.css +0 -1
  293. package/dist/app/client/assets/InputGroup-CEI6gBId.js +0 -1
  294. package/dist/app/client/assets/Inter-Variable-DiVDrmQJ.woff2 +0 -0
  295. package/dist/app/client/assets/Loader-CtzJeMeX.js +0 -1
  296. package/dist/app/client/assets/Rows-DgpXomcK.js +0 -1
  297. package/dist/app/client/assets/Rows-oSTffNii.css +0 -1
  298. package/dist/app/client/assets/SignIn-CjGB1wk9.js +0 -1
  299. package/dist/app/client/assets/SignIn-Dz1G9XNf.css +0 -1
  300. package/dist/app/client/assets/Stack-90EFgtQe.js +0 -1
  301. package/dist/app/client/assets/Stack-CKvHhjzW.css +0 -1
  302. package/dist/app/client/assets/ToolbarRootContext-dnisUzmP.js +0 -1
  303. package/dist/app/client/assets/Tooltip-9TI_rDvs.css +0 -1
  304. package/dist/app/client/assets/Tooltip-C3H_9mgz.js +0 -1
  305. package/dist/app/client/assets/___-7yUISk6H.css +0 -1
  306. package/dist/app/client/assets/___.flows-DwoJPGMf.js +0 -5
  307. package/dist/app/client/assets/index-BXTO-7dr.css +0 -1
  308. package/dist/app/client/assets/index-CkKM7xlX.js +0 -13
  309. package/dist/app/client/assets/pathUSD-DY3ycgMd.js +0 -1
  310. package/dist/app/client/assets/pathUSD-Dn2NadYx.css +0 -1
  311. package/dist/app/client/assets/useNavigate-DsbQ8bTr.js +0 -1
  312. package/dist/app/client/assets/zyzz-MTPfhrAv.css +0 -1
  313. package/dist/app/client/assets/zyzz.config-ENEfJGzk.js +0 -2
  314. package/dist/app/server/assets/Account-BqjoGTzm.js +0 -2
  315. package/dist/app/server/assets/Account-BqjoGTzm.js.map +0 -1
  316. package/dist/app/server/assets/Account-DiXbQ7gq.css +0 -1
  317. package/dist/app/server/assets/Amount-Ck6sPRDT.css +0 -1
  318. package/dist/app/server/assets/Amount-CmypanEu.js +0 -2
  319. package/dist/app/server/assets/Amount-CmypanEu.js.map +0 -1
  320. package/dist/app/server/assets/Callout-DE0CvxbE.css +0 -1
  321. package/dist/app/server/assets/Callout-_eafmkya.js +0 -2
  322. package/dist/app/server/assets/Callout-_eafmkya.js.map +0 -1
  323. package/dist/app/server/assets/CodeInput-CRxIP0KX.js +0 -2
  324. package/dist/app/server/assets/CodeInput-CRxIP0KX.js.map +0 -1
  325. package/dist/app/server/assets/CodeInput-C_clyqA2.css +0 -1
  326. package/dist/app/server/assets/Deposit-CAkrtNYZ.css +0 -1
  327. package/dist/app/server/assets/Deposit-CiWidviP.js +0 -2
  328. package/dist/app/server/assets/Deposit-CiWidviP.js.map +0 -1
  329. package/dist/app/server/assets/DevTools-BJcNvNjx.js +0 -2
  330. package/dist/app/server/assets/DevTools-BJcNvNjx.js.map +0 -1
  331. package/dist/app/server/assets/DevTools-DLG9O0YT.css +0 -1
  332. package/dist/app/server/assets/Grant-B6bmC4rh.css +0 -1
  333. package/dist/app/server/assets/Grant-N8RQy7lZ.js +0 -2
  334. package/dist/app/server/assets/Grant-N8RQy7lZ.js.map +0 -1
  335. package/dist/app/server/assets/Hex-CriDfcNg.css +0 -1
  336. package/dist/app/server/assets/Hex-vNjxlXvk.js +0 -11
  337. package/dist/app/server/assets/Hex-vNjxlXvk.js.map +0 -1
  338. package/dist/app/server/assets/IconChip-BQdjH8i6.js +0 -2
  339. package/dist/app/server/assets/IconChip-BQdjH8i6.js.map +0 -1
  340. package/dist/app/server/assets/IconChip-BVqRSUpG.css +0 -1
  341. package/dist/app/server/assets/InputGroup-4QFqa-T2.css +0 -1
  342. package/dist/app/server/assets/InputGroup-BhUIBTgI.js +0 -2
  343. package/dist/app/server/assets/InputGroup-BhUIBTgI.js.map +0 -1
  344. package/dist/app/server/assets/Inter-Variable-DiVDrmQJ.woff2 +0 -0
  345. package/dist/app/server/assets/Loader-Ivf5dWFl.js +0 -2
  346. package/dist/app/server/assets/PopoverPopup-D98JOZVe.js +0 -2
  347. package/dist/app/server/assets/Rows-BuyZXkPa.js +0 -2
  348. package/dist/app/server/assets/Rows-BuyZXkPa.js.map +0 -1
  349. package/dist/app/server/assets/Rows-oSTffNii.css +0 -1
  350. package/dist/app/server/assets/SignIn-D7jl6zbw.js +0 -2
  351. package/dist/app/server/assets/SignIn-D7jl6zbw.js.map +0 -1
  352. package/dist/app/server/assets/SignIn-Dz1G9XNf.css +0 -1
  353. package/dist/app/server/assets/Stack-C3ecM7vx.js +0 -2
  354. package/dist/app/server/assets/Stack-C3ecM7vx.js.map +0 -1
  355. package/dist/app/server/assets/Stack-CKvHhjzW.css +0 -1
  356. package/dist/app/server/assets/ToolbarRootContext-BCmWBQ7n.js +0 -2
  357. package/dist/app/server/assets/Tooltip-9TI_rDvs.css +0 -1
  358. package/dist/app/server/assets/Tooltip-D3NLigmC.js +0 -2
  359. package/dist/app/server/assets/Tooltip-D3NLigmC.js.map +0 -1
  360. package/dist/app/server/assets/___-7yUISk6H.css +0 -1
  361. package/dist/app/server/assets/___.flows-DRvHKxBR.js +0 -6
  362. package/dist/app/server/assets/___.flows-DRvHKxBR.js.map +0 -1
  363. package/dist/app/server/assets/_tanstack-start-manifest_v-BIobT_5u.js +0 -1
  364. package/dist/app/server/assets/default-u_dwuiYb-BZX-cEte.js +0 -2
  365. package/dist/app/server/assets/dist-k0uWU-Rh.js +0 -1
  366. package/dist/app/server/assets/getPseudoElementBounds-BdqJhx6M.js +0 -2
  367. package/dist/app/server/assets/pathUSD-CVs71wGH.js +0 -2
  368. package/dist/app/server/assets/pathUSD-CVs71wGH.js.map +0 -1
  369. package/dist/app/server/assets/pathUSD-Dn2NadYx.css +0 -1
  370. package/dist/app/server/assets/react-dom-bupMaze0.css +0 -1
  371. package/dist/app/server/assets/router-uhTdTHZE.js.map +0 -1
  372. package/dist/app/server/assets/routes-ZveUsG66.js +0 -2
  373. package/dist/app/server/assets/routes-ZveUsG66.js.map +0 -1
  374. package/dist/app/server/assets/routes-dxKeFXjL.css +0 -1
  375. package/dist/app/server/assets/useRegisterFieldControl-UOdCWAKS.js +0 -2
  376. package/dist/app/server/assets/zyzz-DuvTIyXM.css +0 -1
  377. package/dist/app/server/assets/zyzz.config-DYq-16_0.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{s as e}from"./react-dom-DtwtyQPy.js";import{a as t,i as n,o as r,r as i}from"./Client-D3gnMDTr.js";import"./zyzz.config-DYq-16_0.js";import{n as a,t as o}from"./Authentication-DLWMd2mA.js";import{t as s}from"./authorize-pZETCSux.js";import{n as c,t as l}from"./Approval-DhLkTvkI.js";var u=e(),d=class extends Error{name=`Page.CeremonyError`};function f(e){let i=t(),s=a({async mutationFn(t){let n={accept:t.accept,...e.request?.key?.account?{account:e.request.key.account}:{},oauth_query:window.location.search.slice(1),session_id:e.request?.session??``},a=await r(i.v1.authorize.consent.$post({json:n}));if(!(`step`in a))return a;let s=await o({options:{publicKey:a.step.options.publicKey}}).catch(e=>{throw new d(`Passkey ceremony failed.`,{cause:e})}),c=await r(i.v1.authorize.consent.$post({json:{...n,passkey:{assertion:s}}}));if(`step`in c)throw Error(`The approval requested a second passkey step.`);return c},onError:e=>{n(e)===`session_required`&&window.location.reload()},onSuccess:e=>window.location.assign(e.redirect)}),f=s.isPending||s.isSuccess;return(0,u.jsx)(`main`,{className:h.page?`z_tempo_2d_id-V2chls0 z_tempo_2d_id-V2chls1 z_tempo_2d_id-V2chls2 z_tempo_2d_id-V2chls3 z_tempo_2d_id-V2chls4`:h.page().className,children:e.request?(0,u.jsx)(l,{account:e.request.account,app:e.request.app,approving:f&&s.variables.accept,denying:f&&!s.variables.accept,destination:e.request.destination,email:e.request.email,verified:e.request.verified,error:s.error&&n(s.error)!==`webauthn_required`?p(s.error):void 0,keyAuthorization:e.request.key,logo:e.request.logo,onApprove:()=>s.mutate({accept:!0}),onDeny:()=>s.mutate({accept:!1}),refusal:n(s.error)===`webauthn_required`?`passkey`:void 0}):(0,u.jsx)(c,{})})}function p(e){return n(e)===`webauthn_rejected`?`Your passkey did not sign the approval. Approve again, or deny the request.`:e instanceof d?m(e).includes(`NotAllowedError`)?`The passkey request was canceled. Approve again, or deny the request.`:`Your passkey did not sign the approval. Approve again, or deny the request.`:i(e)}function m(e){return e instanceof Error?[e.name,...m(e.cause)]:[]}var h;(function(e){e.page=1})(h||={});var g=()=>(0,u.jsx)(f,{...s.useLoaderData()});export{g as component};
2
- //# sourceMappingURL=authorize-D_5EG0WN.js.map
1
+ import{s as e}from"./react-dom-pSpaua7D.js";import{a as t,i as n,o as r,r as i}from"./Client-BAXSFa9e.js";import"./zyzz.config-CW977vYL.js";import{n as a,t as o}from"./Authentication-CsSh3HGu.js";import{t as s}from"./authorize-C9tfZ34z.js";import{n as c,t as l}from"./Approval-DA8fDZIl.js";var u=e(),d=class extends Error{name=`Page.CeremonyError`};function f(e){let i=t(),s=a({async mutationFn(t){let n={accept:t.accept,...e.request?.key?.account?{account:e.request.key.account}:{},oauth_query:window.location.search.slice(1),session_id:e.request?.session??``},a=await r(i.v1.authorize.consent.$post({json:n}));if(!(`step`in a))return a;let s=await o({options:{publicKey:a.step.options.publicKey}}).catch(e=>{throw new d(`Passkey ceremony failed.`,{cause:e})}),c=await r(i.v1.authorize.consent.$post({json:{...n,passkey:{assertion:s}}}));if(`step`in c)throw Error(`The approval requested a second passkey step.`);return c},onError:e=>{n(e)===`session_required`&&window.location.reload()},onSuccess:e=>window.location.assign(e.redirect)}),f=s.isPending||s.isSuccess;return(0,u.jsx)(`main`,{className:h.page?`z_tempo_2d_id-V2chls0 z_tempo_2d_id-V2chls1 z_tempo_2d_id-V2chls2 z_tempo_2d_id-V2chls3 z_tempo_2d_id-V2chls4`:h.page().className,children:e.request?(0,u.jsx)(l,{account:e.request.account,app:e.request.app,approving:f&&s.variables.accept,denying:f&&!s.variables.accept,destination:e.request.destination,email:e.request.email,verified:e.request.verified,error:s.error&&n(s.error)!==`webauthn_required`?p(s.error):void 0,keyAuthorization:e.request.key,logo:e.request.logo,onApprove:()=>s.mutate({accept:!0}),onDeny:()=>s.mutate({accept:!1}),refusal:n(s.error)===`webauthn_required`?`passkey`:void 0}):(0,u.jsx)(c,{})})}function p(e){return n(e)===`webauthn_rejected`?`Your passkey did not sign the approval. Approve again, or deny the request.`:e instanceof d?m(e).includes(`NotAllowedError`)?`The passkey request was canceled. Approve again, or deny the request.`:`Your passkey did not sign the approval. Approve again, or deny the request.`:i(e)}function m(e){return e instanceof Error?[e.name,...m(e.cause)]:[]}var h;(function(e){e.page=1})(h||={});var g=()=>(0,u.jsx)(f,{...s.useLoaderData()});export{g as component};
2
+ //# sourceMappingURL=authorize-C3nY01zc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorize-D_5EG0WN.js","names":["useMutation","parseResponse","Authentication","Client","Approval","InvalidRequest","style","CeremonyError","Error","name","Route","Page","props","client","use","consent","mutationFn","variables","json","accept","request","key","account","oauth_query","window","location","search","slice","session_id","session","decided","v1","authorize","$post","assertion","sign","options","publicKey","step","catch","error","cause","signed","passkey","onError","reason","reload","onSuccess","data","assign","redirect","isPending","isSuccess","styles","page","className","app","destination","email","verified","message","undefined","logo","mutate","names","includes","_styles","SplitComponent","useLoaderData","component","Client.use","Authentication.sign","Client.reason","Client.message","require_jsx_runtime","use","reason","parseResponse","message$1","useMutation","sign","Route","InvalidRequest","Approval","import_jsx_runtime","CeremonyError","Page","client","consent","json","variables","props","decided","assertion","error","signed","data","styles","message","names","SplitComponent"],"sources":["../../../routes/authorize.tsx?tsr-split=component"],"sourcesContent":["/** The approval page, where the signed-in user approves or denies an app's request. @module */\nimport { useMutation } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { parseResponse } from 'hono/client'\nimport { Authentication } from 'webauthx/client'\nimport * as Client from '../lib/Client.js'\nimport * as Loader from '../lib/Loader.js'\nimport { Approval, InvalidRequest } from '../screens/Approval.js'\nimport { style } from '../zyzz.config.js'\n\n/** Wraps a failure of the browser's passkey ceremony. */\nclass CeremonyError extends Error {\n override name = 'Page.CeremonyError'\n}\n\nexport const Route = createFileRoute('/authorize')({\n component: () => <Page {...Route.useLoaderData()} />,\n /**\n * Redirects an unsigned request to `/oauth2/authorize`, and a visitor without a session to\n * sign-in. Otherwise returns the request, or redirects a refused key to the app.\n */\n loader: async (match): Promise<Page.Props> => {\n const { searchStr } = match.location\n // Better Auth reads the query with `URLSearchParams`, so the page reads it the same way, and a\n // malformed escape cannot show one request and approve another.\n const query = new URLSearchParams(searchStr)\n if (!query.get('sig')) {\n const forwarded = new URLSearchParams(query)\n if (!forwarded.has('code_challenge_method'))\n forwarded.set('code_challenge_method', 'S256')\n if (!forwarded.has('response_type'))\n forwarded.set('response_type', 'code')\n Loader.redirect({\n document: true,\n href: `/oauth2/authorize?${forwarded}`,\n })\n }\n\n const client = Client.create()\n const result = await (async () => {\n try {\n return await parseResponse(\n client.v1.authorize.request.$get({\n query: { oauth_query: query.toString() },\n }),\n )\n } catch (error) {\n if (Client.reason(error) === 'session_required')\n Loader.redirect({ href: `/login${searchStr}` })\n throw error\n }\n })()\n if ('redirect' in result)\n Loader.redirect({ document: true, href: result.redirect })\n return { request: result.request }\n },\n // The loader reads the whole query, so a change to any parameter loads the page again.\n loaderDeps: (match) => ({ search: match.search }),\n})\n\n/** Renders the page. */\nfunction Page(props: Page.Props) {\n const client = Client.use()\n const consent = useMutation({\n async mutationFn(variables: { accept: boolean }) {\n const json = {\n accept: variables.accept,\n // Approval signs for the account that the page shows.\n ...(props.request?.key?.account\n ? { account: props.request.key.account }\n : {}),\n oauth_query: window.location.search.slice(1),\n session_id: props.request?.session ?? '',\n }\n const decided = await parseResponse(\n client.v1.authorize.consent.$post({ json }),\n )\n if (!('step' in decided)) return decided\n\n // The passkey signs the key authorization's digest, which the step's options carry.\n const assertion = await Authentication.sign({\n options: { publicKey: decided.step.options.publicKey },\n }).catch((error: unknown) => {\n throw new CeremonyError('Passkey ceremony failed.', { cause: error })\n })\n const signed = await parseResponse(\n client.v1.authorize.consent.$post({\n json: { ...json, passkey: { assertion } },\n }),\n )\n if ('step' in signed)\n throw new Error('The approval requested a second passkey step.')\n return signed\n },\n // Without a session, the page's loader sends the browser to sign-in, which continues the request.\n onError: (error) => {\n if (Client.reason(error) === 'session_required') window.location.reload()\n },\n onSuccess: (data) => window.location.assign(data.redirect),\n })\n // The decision holds both buttons until the browser leaves, after the request succeeds too.\n const decided = consent.isPending || consent.isSuccess\n\n return (\n <main {...styles.page()}>\n {props.request ? (\n <Approval\n account={props.request.account}\n app={props.request.app}\n approving={decided && consent.variables.accept}\n denying={decided && !consent.variables.accept}\n destination={props.request.destination}\n email={props.request.email}\n verified={props.request.verified}\n error={\n consent.error &&\n Client.reason(consent.error) !== 'webauthn_required'\n ? message(consent.error)\n : undefined\n }\n keyAuthorization={props.request.key}\n logo={props.request.logo}\n onApprove={() => consent.mutate({ accept: true })}\n onDeny={() => consent.mutate({ accept: false })}\n // The API's refusal names the other flows, and the screen states the step here instead.\n refusal={\n Client.reason(consent.error) === 'webauthn_required'\n ? 'passkey'\n : undefined\n }\n />\n ) : (\n <InvalidRequest />\n )}\n </main>\n )\n}\n\ndeclare namespace Page {\n type Props = {\n /** `null` for a forged or expired query or an unknown app. */\n request: {\n /** Absent unless the user holds several accounts in the app's realms. */\n account?: Approval.Account | undefined\n /** The app's display name. */\n app: string\n /** The host of the app's redirect URI, or the scheme of a native app. */\n destination: string\n /** The signed-in user's address. */\n email: string\n /** Absent without a key authorization. */\n key?: Approval.Key | undefined\n /** The app's logo as a `data:` URL, if any. */\n logo?: string | undefined\n /** The signed-in session's ID, which the decision names. */\n session: string\n /** Whether the app is registered, which marks its name as verified. */\n verified: boolean\n } | null\n }\n}\n\n/** Returns the message for `error`, such as for a canceled ceremony. */\nfunction message(error: unknown) {\n if (Client.reason(error) === 'webauthn_rejected')\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n if (!(error instanceof CeremonyError)) return Client.message(error)\n if (names(error).includes('NotAllowedError'))\n return 'The passkey request was canceled. Approve again, or deny the request.'\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n}\n\n/** Returns the names of `error` and its causes. */\nfunction names(error: unknown): readonly string[] {\n if (!(error instanceof Error)) return []\n return [error.name, ...names(error.cause)]\n}\n\nnamespace styles {\n export const page = style({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n minHeight: '100dvh !custom',\n paddingBlock: '64',\n paddingInline: '16',\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"authorize-C3nY01zc.js","names":["useMutation","parseResponse","Authentication","Client","Approval","InvalidRequest","style","CeremonyError","Error","name","Route","Page","props","client","use","consent","mutationFn","variables","json","accept","request","key","account","oauth_query","window","location","search","slice","session_id","session","decided","v1","authorize","$post","assertion","sign","options","publicKey","step","catch","error","cause","signed","passkey","onError","reason","reload","onSuccess","data","assign","redirect","isPending","isSuccess","styles","page","className","app","destination","email","verified","message","undefined","logo","mutate","names","includes","_styles","SplitComponent","useLoaderData","component","Client.use","Authentication.sign","Client.reason","Client.message","require_jsx_runtime","use","reason","parseResponse","message$1","useMutation","sign","Route","InvalidRequest","Approval","import_jsx_runtime","CeremonyError","Page","client","consent","json","variables","props","decided","assertion","error","signed","data","styles","message","names","SplitComponent"],"sources":["../../../routes/authorize.tsx?tsr-split=component"],"sourcesContent":["/** The approval page, where the signed-in user approves or denies an app's request. @module */\nimport { useMutation } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { parseResponse } from 'hono/client'\nimport { Authentication } from 'webauthx/client'\nimport * as Client from '../lib/Client.js'\nimport * as Loader from '../lib/Loader.js'\nimport { Approval, InvalidRequest } from '../screens/Approval.js'\nimport { style } from '../zyzz.config.js'\n\n/** Wraps a failure of the browser's passkey ceremony. */\nclass CeremonyError extends Error {\n override name = 'Page.CeremonyError'\n}\n\nexport const Route = createFileRoute('/authorize')({\n component: () => <Page {...Route.useLoaderData()} />,\n /**\n * Redirects an unsigned request to `/oauth2/authorize`, and a visitor without a session to\n * sign-in. Otherwise returns the request, or redirects a refused key to the app.\n */\n loader: async (match): Promise<Page.Props> => {\n const { searchStr } = match.location\n // Better Auth reads the query with `URLSearchParams`, so the page reads it the same way, and a\n // malformed escape cannot show one request and approve another.\n const query = new URLSearchParams(searchStr)\n if (!query.get('sig')) {\n const forwarded = new URLSearchParams(query)\n if (!forwarded.has('code_challenge_method'))\n forwarded.set('code_challenge_method', 'S256')\n if (!forwarded.has('response_type'))\n forwarded.set('response_type', 'code')\n Loader.redirect({\n document: true,\n href: `/oauth2/authorize?${forwarded}`,\n })\n }\n\n const client = Client.create()\n const result = await (async () => {\n try {\n return await parseResponse(\n client.v1.authorize.request.$get({\n query: { oauth_query: query.toString() },\n }),\n )\n } catch (error) {\n if (Client.reason(error) === 'session_required')\n Loader.redirect({ href: `/login${searchStr}` })\n throw error\n }\n })()\n if ('redirect' in result)\n Loader.redirect({ document: true, href: result.redirect })\n return { request: result.request }\n },\n // The loader reads the whole query, so a change to any parameter loads the page again.\n loaderDeps: (match) => ({ search: match.search }),\n})\n\n/** Renders the page. */\nfunction Page(props: Page.Props) {\n const client = Client.use()\n const consent = useMutation({\n async mutationFn(variables: { accept: boolean }) {\n const json = {\n accept: variables.accept,\n // Approval signs for the account that the page shows.\n ...(props.request?.key?.account\n ? { account: props.request.key.account }\n : {}),\n oauth_query: window.location.search.slice(1),\n session_id: props.request?.session ?? '',\n }\n const decided = await parseResponse(\n client.v1.authorize.consent.$post({ json }),\n )\n if (!('step' in decided)) return decided\n\n // The passkey signs the key authorization's digest, which the step's options carry.\n const assertion = await Authentication.sign({\n options: { publicKey: decided.step.options.publicKey },\n }).catch((error: unknown) => {\n throw new CeremonyError('Passkey ceremony failed.', { cause: error })\n })\n const signed = await parseResponse(\n client.v1.authorize.consent.$post({\n json: { ...json, passkey: { assertion } },\n }),\n )\n if ('step' in signed)\n throw new Error('The approval requested a second passkey step.')\n return signed\n },\n // Without a session, the page's loader sends the browser to sign-in, which continues the request.\n onError: (error) => {\n if (Client.reason(error) === 'session_required') window.location.reload()\n },\n onSuccess: (data) => window.location.assign(data.redirect),\n })\n // The decision holds both buttons until the browser leaves, after the request succeeds too.\n const decided = consent.isPending || consent.isSuccess\n\n return (\n <main {...styles.page()}>\n {props.request ? (\n <Approval\n account={props.request.account}\n app={props.request.app}\n approving={decided && consent.variables.accept}\n denying={decided && !consent.variables.accept}\n destination={props.request.destination}\n email={props.request.email}\n verified={props.request.verified}\n error={\n consent.error &&\n Client.reason(consent.error) !== 'webauthn_required'\n ? message(consent.error)\n : undefined\n }\n keyAuthorization={props.request.key}\n logo={props.request.logo}\n onApprove={() => consent.mutate({ accept: true })}\n onDeny={() => consent.mutate({ accept: false })}\n // The API's refusal names the other flows, and the screen states the step here instead.\n refusal={\n Client.reason(consent.error) === 'webauthn_required'\n ? 'passkey'\n : undefined\n }\n />\n ) : (\n <InvalidRequest />\n )}\n </main>\n )\n}\n\ndeclare namespace Page {\n type Props = {\n /** `null` for a forged or expired query or an unknown app. */\n request: {\n /** Absent unless the user holds several accounts in the app's realms. */\n account?: Approval.Account | undefined\n /** The app's display name. */\n app: string\n /** The host of the app's redirect URI, or the scheme of a native app. */\n destination: string\n /** The signed-in user's address. */\n email: string\n /** Absent without a key authorization. */\n key?: Approval.Key | undefined\n /** The app's logo as a `data:` URL, if any. */\n logo?: string | undefined\n /** The signed-in session's ID, which the decision names. */\n session: string\n /** Whether the app is registered, which marks its name as verified. */\n verified: boolean\n } | null\n }\n}\n\n/** Returns the message for `error`, such as for a canceled ceremony. */\nfunction message(error: unknown) {\n if (Client.reason(error) === 'webauthn_rejected')\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n if (!(error instanceof CeremonyError)) return Client.message(error)\n if (names(error).includes('NotAllowedError'))\n return 'The passkey request was canceled. Approve again, or deny the request.'\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n}\n\n/** Returns the names of `error` and its causes. */\nfunction names(error: unknown): readonly string[] {\n if (!(error instanceof Error)) return []\n return [error.name, ...names(error.cause)]\n}\n\nnamespace styles {\n export const page = style({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n minHeight: '100dvh !custom',\n paddingBlock: '64',\n paddingInline: '16',\n })\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./react-dom-DtwtyQPy.js";import{n as e,t}from"./lazyRouteComponent-BXabRVTE.js";import{i as n,n as r,o as i}from"./Client-D3gnMDTr.js";import"./zyzz.config-DYq-16_0.js";import{t as a}from"./Loader-Ivf5dWFl.js";var o=e(`/authorize`)({component:t(()=>import(`./authorize-D_5EG0WN.js`),`component`),loader:async e=>{let{searchStr:t}=e.location,o=new URLSearchParams(t);if(!o.get(`sig`)){let e=new URLSearchParams(o);e.has(`code_challenge_method`)||e.set(`code_challenge_method`,`S256`),e.has(`response_type`)||e.set(`response_type`,`code`),a({document:!0,href:`/oauth2/authorize?${e}`})}let s=r(),c=await(async()=>{try{return await i(s.v1.authorize.request.$get({query:{oauth_query:o.toString()}}))}catch(e){throw n(e)===`session_required`&&a({href:`/login${t}`}),e}})();return`redirect`in c&&a({document:!0,href:c.redirect}),{request:c.request}},loaderDeps:e=>({search:e.search})}),s;(function(e){e.page=1})(s||={});export{o as t};
2
- //# sourceMappingURL=authorize-pZETCSux.js.map
1
+ import"./react-dom-pSpaua7D.js";import{n as e,t}from"./lazyRouteComponent-DOSE663E.js";import{i as n,n as r,o as i}from"./Client-BAXSFa9e.js";import"./zyzz.config-CW977vYL.js";import{t as a}from"./Loader-DvDbd8kj.js";var o=e(`/authorize`)({component:t(()=>import(`./authorize-C3nY01zc.js`),`component`),loader:async e=>{let{searchStr:t}=e.location,o=new URLSearchParams(t);if(!o.get(`sig`)){let e=new URLSearchParams(o);e.has(`code_challenge_method`)||e.set(`code_challenge_method`,`S256`),e.has(`response_type`)||e.set(`response_type`,`code`),a({document:!0,href:`/oauth2/authorize?${e}`})}let s=r(),c=await(async()=>{try{return await i(s.v1.authorize.request.$get({query:{oauth_query:o.toString()}}))}catch(e){throw n(e)===`session_required`&&a({href:`/login${t}`}),e}})();return`redirect`in c&&a({document:!0,href:c.redirect}),{request:c.request}},loaderDeps:e=>({search:e.search})}),s;(function(e){e.page=1})(s||={});export{o as t};
2
+ //# sourceMappingURL=authorize-C9tfZ34z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorize-pZETCSux.js","names":["createFileRoute","parseResponse","Client","Loader","style","CeremonyError","Error","name","Route","component","lazyRouteComponent","$$splitComponentImporter","loader","match","Promise","Page","Props","searchStr","location","query","URLSearchParams","get","forwarded","has","set","redirect","document","href","client","create","result","v1","authorize","request","$get","oauth_query","toString","error","reason","loaderDeps","search","styles","page","ReturnType","Client.create","Client.reason","createFileRoute","reason","create","parseResponse","redirect","Route","lazyRouteComponent","match","query","searchStr","forwarded","client","result","error","styles"],"sources":["../../../routes/authorize.tsx"],"sourcesContent":["/** The approval page, where the signed-in user approves or denies an app's request. @module */\nimport { useMutation } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { parseResponse } from 'hono/client'\nimport { Authentication } from 'webauthx/client'\nimport * as Client from '../lib/Client.js'\nimport * as Loader from '../lib/Loader.js'\nimport { Approval, InvalidRequest } from '../screens/Approval.js'\nimport { style } from '../zyzz.config.js'\n\n/** Wraps a failure of the browser's passkey ceremony. */\nclass CeremonyError extends Error {\n override name = 'Page.CeremonyError'\n}\n\nexport const Route = createFileRoute('/authorize')({\n component: () => <Page {...Route.useLoaderData()} />,\n /**\n * Redirects an unsigned request to `/oauth2/authorize`, and a visitor without a session to\n * sign-in. Otherwise returns the request, or redirects a refused key to the app.\n */\n loader: async (match): Promise<Page.Props> => {\n const { searchStr } = match.location\n // Better Auth reads the query with `URLSearchParams`, so the page reads it the same way, and a\n // malformed escape cannot show one request and approve another.\n const query = new URLSearchParams(searchStr)\n if (!query.get('sig')) {\n const forwarded = new URLSearchParams(query)\n if (!forwarded.has('code_challenge_method'))\n forwarded.set('code_challenge_method', 'S256')\n if (!forwarded.has('response_type'))\n forwarded.set('response_type', 'code')\n Loader.redirect({\n document: true,\n href: `/oauth2/authorize?${forwarded}`,\n })\n }\n\n const client = Client.create()\n const result = await (async () => {\n try {\n return await parseResponse(\n client.v1.authorize.request.$get({\n query: { oauth_query: query.toString() },\n }),\n )\n } catch (error) {\n if (Client.reason(error) === 'session_required')\n Loader.redirect({ href: `/login${searchStr}` })\n throw error\n }\n })()\n if ('redirect' in result)\n Loader.redirect({ document: true, href: result.redirect })\n return { request: result.request }\n },\n // The loader reads the whole query, so a change to any parameter loads the page again.\n loaderDeps: (match) => ({ search: match.search }),\n})\n\n/** Renders the page. */\nfunction Page(props: Page.Props) {\n const client = Client.use()\n const consent = useMutation({\n async mutationFn(variables: { accept: boolean }) {\n const json = {\n accept: variables.accept,\n // Approval signs for the account that the page shows.\n ...(props.request?.key?.account\n ? { account: props.request.key.account }\n : {}),\n oauth_query: window.location.search.slice(1),\n session_id: props.request?.session ?? '',\n }\n const decided = await parseResponse(\n client.v1.authorize.consent.$post({ json }),\n )\n if (!('step' in decided)) return decided\n\n // The passkey signs the key authorization's digest, which the step's options carry.\n const assertion = await Authentication.sign({\n options: { publicKey: decided.step.options.publicKey },\n }).catch((error: unknown) => {\n throw new CeremonyError('Passkey ceremony failed.', { cause: error })\n })\n const signed = await parseResponse(\n client.v1.authorize.consent.$post({\n json: { ...json, passkey: { assertion } },\n }),\n )\n if ('step' in signed)\n throw new Error('The approval requested a second passkey step.')\n return signed\n },\n // Without a session, the page's loader sends the browser to sign-in, which continues the request.\n onError: (error) => {\n if (Client.reason(error) === 'session_required') window.location.reload()\n },\n onSuccess: (data) => window.location.assign(data.redirect),\n })\n // The decision holds both buttons until the browser leaves, after the request succeeds too.\n const decided = consent.isPending || consent.isSuccess\n\n return (\n <main {...styles.page()}>\n {props.request ? (\n <Approval\n account={props.request.account}\n app={props.request.app}\n approving={decided && consent.variables.accept}\n denying={decided && !consent.variables.accept}\n destination={props.request.destination}\n email={props.request.email}\n verified={props.request.verified}\n error={\n consent.error &&\n Client.reason(consent.error) !== 'webauthn_required'\n ? message(consent.error)\n : undefined\n }\n keyAuthorization={props.request.key}\n logo={props.request.logo}\n onApprove={() => consent.mutate({ accept: true })}\n onDeny={() => consent.mutate({ accept: false })}\n // The API's refusal names the other flows, and the screen states the step here instead.\n refusal={\n Client.reason(consent.error) === 'webauthn_required'\n ? 'passkey'\n : undefined\n }\n />\n ) : (\n <InvalidRequest />\n )}\n </main>\n )\n}\n\ndeclare namespace Page {\n type Props = {\n /** `null` for a forged or expired query or an unknown app. */\n request: {\n /** Absent unless the user holds several accounts in the app's realms. */\n account?: Approval.Account | undefined\n /** The app's display name. */\n app: string\n /** The host of the app's redirect URI, or the scheme of a native app. */\n destination: string\n /** The signed-in user's address. */\n email: string\n /** Absent without a key authorization. */\n key?: Approval.Key | undefined\n /** The app's logo as a `data:` URL, if any. */\n logo?: string | undefined\n /** The signed-in session's ID, which the decision names. */\n session: string\n /** Whether the app is registered, which marks its name as verified. */\n verified: boolean\n } | null\n }\n}\n\n/** Returns the message for `error`, such as for a canceled ceremony. */\nfunction message(error: unknown) {\n if (Client.reason(error) === 'webauthn_rejected')\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n if (!(error instanceof CeremonyError)) return Client.message(error)\n if (names(error).includes('NotAllowedError'))\n return 'The passkey request was canceled. Approve again, or deny the request.'\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n}\n\n/** Returns the names of `error` and its causes. */\nfunction names(error: unknown): readonly string[] {\n if (!(error instanceof Error)) return []\n return [error.name, ...names(error.cause)]\n}\n\nnamespace styles {\n export const page = style({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n minHeight: '100dvh !custom',\n paddingBlock: '64',\n paddingInline: '16',\n })\n}\n"],"mappings":"A,yNAeA,IAAaQ,EAAQR,EAAgB,YAAY,CAAC,CAAC,CACjDS,UAASC,M,kCAAA,WAAA,EAKTE,OAAQ,KAAOC,IAA+B,CAC5C,GAAM,CAAEI,aAAcJ,EAAMK,SAGtBC,EAAQ,IAAIC,gBAAgBH,CAAS,EAC3C,GAAI,CAACE,EAAME,IAAI,KAAK,EAAG,CACrB,IAAMC,EAAY,IAAIF,gBAAgBD,CAAK,EACtCG,EAAUC,IAAI,uBAAuB,GACxCD,EAAUE,IAAI,wBAAyB,MAAM,EAC1CF,EAAUC,IAAI,eAAe,GAChCD,EAAUE,IAAI,gBAAiB,MAAM,EACvCrB,EAAgB,CACduB,SAAU,GACVC,KAAM,qBAAqBL,GAC7B,CAAC,CACH,CAEA,IAAMM,EAAS1B,EAAc,EACvB4B,EAAS,MAAO,SAAY,CAChC,GAAI,CACF,OAAO,MAAM7B,EACX2B,EAAOG,GAAGC,UAAUC,QAAQC,KAAK,CAC/Bf,MAAO,CAAEgB,YAAahB,EAAMiB,SAAS,CAAE,CACzC,CAAC,CACH,CACF,OAASC,EAAO,CAGd,MAFInC,EAAcmC,CAAK,IAAM,oBAC3BlC,EAAgB,CAAEwB,KAAM,SAASV,GAAY,CAAC,EAC1CoB,CACR,CACF,EAAA,CAAG,EAGH,MAFI,aAAcP,GAChB3B,EAAgB,CAAEuB,SAAU,GAAMC,KAAMG,EAAOL,QAAS,CAAC,EACpD,CAAEQ,QAASH,EAAOG,OAAQ,CACnC,EAEAM,WAAa1B,IAAW,CAAE2B,OAAQ3B,EAAM2B,MAAO,EACjD,CAAC,EAwHSC,GAAV,SAAA,EAAA,CACeC,EAAAA,KAAO,CAQtB,EAAA,CAAA,AAAAkB,IAAA,CAAA,CAAA,E"}
1
+ {"version":3,"file":"authorize-C9tfZ34z.js","names":["createFileRoute","parseResponse","Client","Loader","style","CeremonyError","Error","name","Route","component","lazyRouteComponent","$$splitComponentImporter","loader","match","Promise","Page","Props","searchStr","location","query","URLSearchParams","get","forwarded","has","set","redirect","document","href","client","create","result","v1","authorize","request","$get","oauth_query","toString","error","reason","loaderDeps","search","styles","page","ReturnType","Client.create","Client.reason","createFileRoute","reason","create","parseResponse","redirect","Route","lazyRouteComponent","match","query","searchStr","forwarded","client","result","error","styles"],"sources":["../../../routes/authorize.tsx"],"sourcesContent":["/** The approval page, where the signed-in user approves or denies an app's request. @module */\nimport { useMutation } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport { parseResponse } from 'hono/client'\nimport { Authentication } from 'webauthx/client'\nimport * as Client from '../lib/Client.js'\nimport * as Loader from '../lib/Loader.js'\nimport { Approval, InvalidRequest } from '../screens/Approval.js'\nimport { style } from '../zyzz.config.js'\n\n/** Wraps a failure of the browser's passkey ceremony. */\nclass CeremonyError extends Error {\n override name = 'Page.CeremonyError'\n}\n\nexport const Route = createFileRoute('/authorize')({\n component: () => <Page {...Route.useLoaderData()} />,\n /**\n * Redirects an unsigned request to `/oauth2/authorize`, and a visitor without a session to\n * sign-in. Otherwise returns the request, or redirects a refused key to the app.\n */\n loader: async (match): Promise<Page.Props> => {\n const { searchStr } = match.location\n // Better Auth reads the query with `URLSearchParams`, so the page reads it the same way, and a\n // malformed escape cannot show one request and approve another.\n const query = new URLSearchParams(searchStr)\n if (!query.get('sig')) {\n const forwarded = new URLSearchParams(query)\n if (!forwarded.has('code_challenge_method'))\n forwarded.set('code_challenge_method', 'S256')\n if (!forwarded.has('response_type'))\n forwarded.set('response_type', 'code')\n Loader.redirect({\n document: true,\n href: `/oauth2/authorize?${forwarded}`,\n })\n }\n\n const client = Client.create()\n const result = await (async () => {\n try {\n return await parseResponse(\n client.v1.authorize.request.$get({\n query: { oauth_query: query.toString() },\n }),\n )\n } catch (error) {\n if (Client.reason(error) === 'session_required')\n Loader.redirect({ href: `/login${searchStr}` })\n throw error\n }\n })()\n if ('redirect' in result)\n Loader.redirect({ document: true, href: result.redirect })\n return { request: result.request }\n },\n // The loader reads the whole query, so a change to any parameter loads the page again.\n loaderDeps: (match) => ({ search: match.search }),\n})\n\n/** Renders the page. */\nfunction Page(props: Page.Props) {\n const client = Client.use()\n const consent = useMutation({\n async mutationFn(variables: { accept: boolean }) {\n const json = {\n accept: variables.accept,\n // Approval signs for the account that the page shows.\n ...(props.request?.key?.account\n ? { account: props.request.key.account }\n : {}),\n oauth_query: window.location.search.slice(1),\n session_id: props.request?.session ?? '',\n }\n const decided = await parseResponse(\n client.v1.authorize.consent.$post({ json }),\n )\n if (!('step' in decided)) return decided\n\n // The passkey signs the key authorization's digest, which the step's options carry.\n const assertion = await Authentication.sign({\n options: { publicKey: decided.step.options.publicKey },\n }).catch((error: unknown) => {\n throw new CeremonyError('Passkey ceremony failed.', { cause: error })\n })\n const signed = await parseResponse(\n client.v1.authorize.consent.$post({\n json: { ...json, passkey: { assertion } },\n }),\n )\n if ('step' in signed)\n throw new Error('The approval requested a second passkey step.')\n return signed\n },\n // Without a session, the page's loader sends the browser to sign-in, which continues the request.\n onError: (error) => {\n if (Client.reason(error) === 'session_required') window.location.reload()\n },\n onSuccess: (data) => window.location.assign(data.redirect),\n })\n // The decision holds both buttons until the browser leaves, after the request succeeds too.\n const decided = consent.isPending || consent.isSuccess\n\n return (\n <main {...styles.page()}>\n {props.request ? (\n <Approval\n account={props.request.account}\n app={props.request.app}\n approving={decided && consent.variables.accept}\n denying={decided && !consent.variables.accept}\n destination={props.request.destination}\n email={props.request.email}\n verified={props.request.verified}\n error={\n consent.error &&\n Client.reason(consent.error) !== 'webauthn_required'\n ? message(consent.error)\n : undefined\n }\n keyAuthorization={props.request.key}\n logo={props.request.logo}\n onApprove={() => consent.mutate({ accept: true })}\n onDeny={() => consent.mutate({ accept: false })}\n // The API's refusal names the other flows, and the screen states the step here instead.\n refusal={\n Client.reason(consent.error) === 'webauthn_required'\n ? 'passkey'\n : undefined\n }\n />\n ) : (\n <InvalidRequest />\n )}\n </main>\n )\n}\n\ndeclare namespace Page {\n type Props = {\n /** `null` for a forged or expired query or an unknown app. */\n request: {\n /** Absent unless the user holds several accounts in the app's realms. */\n account?: Approval.Account | undefined\n /** The app's display name. */\n app: string\n /** The host of the app's redirect URI, or the scheme of a native app. */\n destination: string\n /** The signed-in user's address. */\n email: string\n /** Absent without a key authorization. */\n key?: Approval.Key | undefined\n /** The app's logo as a `data:` URL, if any. */\n logo?: string | undefined\n /** The signed-in session's ID, which the decision names. */\n session: string\n /** Whether the app is registered, which marks its name as verified. */\n verified: boolean\n } | null\n }\n}\n\n/** Returns the message for `error`, such as for a canceled ceremony. */\nfunction message(error: unknown) {\n if (Client.reason(error) === 'webauthn_rejected')\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n if (!(error instanceof CeremonyError)) return Client.message(error)\n if (names(error).includes('NotAllowedError'))\n return 'The passkey request was canceled. Approve again, or deny the request.'\n return 'Your passkey did not sign the approval. Approve again, or deny the request.'\n}\n\n/** Returns the names of `error` and its causes. */\nfunction names(error: unknown): readonly string[] {\n if (!(error instanceof Error)) return []\n return [error.name, ...names(error.cause)]\n}\n\nnamespace styles {\n export const page = style({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n minHeight: '100dvh !custom',\n paddingBlock: '64',\n paddingInline: '16',\n })\n}\n"],"mappings":"A,yNAeA,IAAaQ,EAAQR,EAAgB,YAAY,CAAC,CAAC,CACjDS,UAASC,M,kCAAA,WAAA,EAKTE,OAAQ,KAAOC,IAA+B,CAC5C,GAAM,CAAEI,aAAcJ,EAAMK,SAGtBC,EAAQ,IAAIC,gBAAgBH,CAAS,EAC3C,GAAI,CAACE,EAAME,IAAI,KAAK,EAAG,CACrB,IAAMC,EAAY,IAAIF,gBAAgBD,CAAK,EACtCG,EAAUC,IAAI,uBAAuB,GACxCD,EAAUE,IAAI,wBAAyB,MAAM,EAC1CF,EAAUC,IAAI,eAAe,GAChCD,EAAUE,IAAI,gBAAiB,MAAM,EACvCrB,EAAgB,CACduB,SAAU,GACVC,KAAM,qBAAqBL,GAC7B,CAAC,CACH,CAEA,IAAMM,EAAS1B,EAAc,EACvB4B,EAAS,MAAO,SAAY,CAChC,GAAI,CACF,OAAO,MAAM7B,EACX2B,EAAOG,GAAGC,UAAUC,QAAQC,KAAK,CAC/Bf,MAAO,CAAEgB,YAAahB,EAAMiB,SAAS,CAAE,CACzC,CAAC,CACH,CACF,OAASC,EAAO,CAGd,MAFInC,EAAcmC,CAAK,IAAM,oBAC3BlC,EAAgB,CAAEwB,KAAM,SAASV,GAAY,CAAC,EAC1CoB,CACR,CACF,EAAA,CAAG,EAGH,MAFI,aAAcP,GAChB3B,EAAgB,CAAEuB,SAAU,GAAMC,KAAMG,EAAOL,QAAS,CAAC,EACpD,CAAEQ,QAASH,EAAOG,OAAQ,CACnC,EAEAM,WAAa1B,IAAW,CAAE2B,OAAQ3B,EAAM2B,MAAO,EACjD,CAAC,EAwHSC,GAAV,SAAA,EAAA,CACeC,EAAAA,KAAO,CAQtB,EAAA,CAAA,AAAAkB,IAAA,CAAA,CAAA,E"}