@reown/appkit-cdn 1.8.15-ea982070c1d274f5971447c430b6d77717082e78.0 → 1.8.15-viem-upgrade.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 (429) hide show
  1. package/package.json +10 -10
  2. package/dist/ConstantsUtil-BTJjr2qs.js +0 -24
  3. package/dist/ConstantsUtil-BTJjr2qs.js.map +0 -1
  4. package/dist/ExchangeController-CncqkHeT.js +0 -265
  5. package/dist/ExchangeController-CncqkHeT.js.map +0 -1
  6. package/dist/HelpersUtil-CwxnHyjS.js +0 -141
  7. package/dist/HelpersUtil-CwxnHyjS.js.map +0 -1
  8. package/dist/NavigationUtil-Ci15WS4K.js +0 -9
  9. package/dist/NavigationUtil-Ci15WS4K.js.map +0 -1
  10. package/dist/PhArrowCircleDown-B41iUlWV.js +0 -74
  11. package/dist/PhArrowCircleDown-B41iUlWV.js.map +0 -1
  12. package/dist/PhArrowClockwise-BY8u5n41.js +0 -74
  13. package/dist/PhArrowClockwise-BY8u5n41.js.map +0 -1
  14. package/dist/PhArrowDown-ClD8GZ65.js +0 -74
  15. package/dist/PhArrowDown-ClD8GZ65.js.map +0 -1
  16. package/dist/PhArrowLeft-B8MXUz60.js +0 -74
  17. package/dist/PhArrowLeft-B8MXUz60.js.map +0 -1
  18. package/dist/PhArrowRight-Cewa_Slb.js +0 -74
  19. package/dist/PhArrowRight-Cewa_Slb.js.map +0 -1
  20. package/dist/PhArrowSquareOut-whgWh-lD.js +0 -74
  21. package/dist/PhArrowSquareOut-whgWh-lD.js.map +0 -1
  22. package/dist/PhArrowUp-B1HXBxie.js +0 -74
  23. package/dist/PhArrowUp-B1HXBxie.js.map +0 -1
  24. package/dist/PhArrowUpRight-CfFYe4FP.js +0 -74
  25. package/dist/PhArrowUpRight-CfFYe4FP.js.map +0 -1
  26. package/dist/PhArrowsClockwise-gL1Gkrtx.js +0 -74
  27. package/dist/PhArrowsClockwise-gL1Gkrtx.js.map +0 -1
  28. package/dist/PhArrowsDownUp-BqUEdUQr.js +0 -74
  29. package/dist/PhArrowsDownUp-BqUEdUQr.js.map +0 -1
  30. package/dist/PhArrowsLeftRight-BlZU63eY.js +0 -74
  31. package/dist/PhArrowsLeftRight-BlZU63eY.js.map +0 -1
  32. package/dist/PhBank-gbg_jlI7.js +0 -74
  33. package/dist/PhBank-gbg_jlI7.js.map +0 -1
  34. package/dist/PhBrowser-CMlD-YJw.js +0 -74
  35. package/dist/PhBrowser-CMlD-YJw.js.map +0 -1
  36. package/dist/PhCaretDown-3agTO8Jp.js +0 -74
  37. package/dist/PhCaretDown-3agTO8Jp.js.map +0 -1
  38. package/dist/PhCaretLeft-_MTni7Z5.js +0 -74
  39. package/dist/PhCaretLeft-_MTni7Z5.js.map +0 -1
  40. package/dist/PhCaretRight-Ci9fAHPG.js +0 -74
  41. package/dist/PhCaretRight-Ci9fAHPG.js.map +0 -1
  42. package/dist/PhCaretUp-vFG4Fame.js +0 -74
  43. package/dist/PhCaretUp-vFG4Fame.js.map +0 -1
  44. package/dist/PhCheck-mChGK6K_.js +0 -74
  45. package/dist/PhCheck-mChGK6K_.js.map +0 -1
  46. package/dist/PhCircleHalf-DZ7-vfxf.js +0 -74
  47. package/dist/PhCircleHalf-DZ7-vfxf.js.map +0 -1
  48. package/dist/PhClock-Bc5XWXb6.js +0 -74
  49. package/dist/PhClock-Bc5XWXb6.js.map +0 -1
  50. package/dist/PhCompass-Cu2MB-55.js +0 -74
  51. package/dist/PhCompass-Cu2MB-55.js.map +0 -1
  52. package/dist/PhCopy-BGUjyTts.js +0 -74
  53. package/dist/PhCopy-BGUjyTts.js.map +0 -1
  54. package/dist/PhCreditCard-vxFWID4B.js +0 -74
  55. package/dist/PhCreditCard-vxFWID4B.js.map +0 -1
  56. package/dist/PhCurrencyDollar-BfOoDhJr.js +0 -74
  57. package/dist/PhCurrencyDollar-BfOoDhJr.js.map +0 -1
  58. package/dist/PhDesktop-Cq6jwzbS.js +0 -74
  59. package/dist/PhDesktop-Cq6jwzbS.js.map +0 -1
  60. package/dist/PhDeviceMobile-BCtTp6jj.js +0 -74
  61. package/dist/PhDeviceMobile-BCtTp6jj.js.map +0 -1
  62. package/dist/PhDotsThree-BGgD-WIO.js +0 -74
  63. package/dist/PhDotsThree-BGgD-WIO.js.map +0 -1
  64. package/dist/PhEnvelope-CQiV0-zG.js +0 -74
  65. package/dist/PhEnvelope-CQiV0-zG.js.map +0 -1
  66. package/dist/PhFunnelSimple-BHGtxTNf.js +0 -74
  67. package/dist/PhFunnelSimple-BHGtxTNf.js.map +0 -1
  68. package/dist/PhGlobe-Q8oVkf6X.js +0 -74
  69. package/dist/PhGlobe-Q8oVkf6X.js.map +0 -1
  70. package/dist/PhIdentificationCard-Cz9LzvVR.js +0 -74
  71. package/dist/PhIdentificationCard-Cz9LzvVR.js.map +0 -1
  72. package/dist/PhImage-CP5_qKk-.js +0 -74
  73. package/dist/PhImage-CP5_qKk-.js.map +0 -1
  74. package/dist/PhInfo-CTlE1X9Z.js +0 -74
  75. package/dist/PhInfo-CTlE1X9Z.js.map +0 -1
  76. package/dist/PhLightbulb-CcLpnAAb.js +0 -74
  77. package/dist/PhLightbulb-CcLpnAAb.js.map +0 -1
  78. package/dist/PhMagnifyingGlass-n58GUAck.js +0 -74
  79. package/dist/PhMagnifyingGlass-n58GUAck.js.map +0 -1
  80. package/dist/PhPaperPlaneRight-C0sf2XV8.js +0 -74
  81. package/dist/PhPaperPlaneRight-C0sf2XV8.js.map +0 -1
  82. package/dist/PhPlus-BJxvt7Uc.js +0 -74
  83. package/dist/PhPlus-BJxvt7Uc.js.map +0 -1
  84. package/dist/PhPower-BvktxO2-.js +0 -74
  85. package/dist/PhPower-BvktxO2-.js.map +0 -1
  86. package/dist/PhPuzzlePiece-CDDyUPYo.js +0 -74
  87. package/dist/PhPuzzlePiece-CDDyUPYo.js.map +0 -1
  88. package/dist/PhQrCode-BlGI8529.js +0 -74
  89. package/dist/PhQrCode-BlGI8529.js.map +0 -1
  90. package/dist/PhQuestion-DGZj6iDZ.js +0 -74
  91. package/dist/PhQuestion-DGZj6iDZ.js.map +0 -1
  92. package/dist/PhQuestionMark-CTmeI7MQ.js +0 -74
  93. package/dist/PhQuestionMark-CTmeI7MQ.js.map +0 -1
  94. package/dist/PhSealCheck-BSlqkxnH.js +0 -74
  95. package/dist/PhSealCheck-BSlqkxnH.js.map +0 -1
  96. package/dist/PhSignOut-CEXxlRk3.js +0 -74
  97. package/dist/PhSignOut-CEXxlRk3.js.map +0 -1
  98. package/dist/PhSpinner-Do1pY8fG.js +0 -74
  99. package/dist/PhSpinner-Do1pY8fG.js.map +0 -1
  100. package/dist/PhTrash-JNKavmpg.js +0 -74
  101. package/dist/PhTrash-JNKavmpg.js.map +0 -1
  102. package/dist/PhUser-BW7E-xYg.js +0 -74
  103. package/dist/PhUser-BW7E-xYg.js.map +0 -1
  104. package/dist/PhVault-mzxUgBYN.js +0 -74
  105. package/dist/PhVault-mzxUgBYN.js.map +0 -1
  106. package/dist/PhWallet-BR9JThKU.js +0 -74
  107. package/dist/PhWallet-BR9JThKU.js.map +0 -1
  108. package/dist/PhWarning-DxuQ70WM.js +0 -74
  109. package/dist/PhWarning-DxuQ70WM.js.map +0 -1
  110. package/dist/PhWarningCircle-DCI0JC1F.js +0 -74
  111. package/dist/PhWarningCircle-DCI0JC1F.js.map +0 -1
  112. package/dist/PhX-CWNXqpGn.js +0 -74
  113. package/dist/PhX-CWNXqpGn.js.map +0 -1
  114. package/dist/SwapController-DsYbP4IS.js +0 -684
  115. package/dist/SwapController-DsYbP4IS.js.map +0 -1
  116. package/dist/WebCryptoP256-Czt7ZkJ7.js +0 -3299
  117. package/dist/WebCryptoP256-Czt7ZkJ7.js.map +0 -1
  118. package/dist/add-UkulHTXi.js +0 -20
  119. package/dist/add-UkulHTXi.js.map +0 -1
  120. package/dist/all-wallets-DhJCVmL_.js +0 -11
  121. package/dist/all-wallets-DhJCVmL_.js.map +0 -1
  122. package/dist/app-store-Ern3I2La.js +0 -22
  123. package/dist/app-store-Ern3I2La.js.map +0 -1
  124. package/dist/appkit-ppmICUF1.js +0 -118106
  125. package/dist/appkit-ppmICUF1.js.map +0 -1
  126. package/dist/appkit.js +0 -11
  127. package/dist/appkit.js.map +0 -1
  128. package/dist/apple-_SZ-XSIx.js +0 -23
  129. package/dist/apple-_SZ-XSIx.js.map +0 -1
  130. package/dist/arrow-bottom-D7Qlu6xE.js +0 -13
  131. package/dist/arrow-bottom-D7Qlu6xE.js.map +0 -1
  132. package/dist/arrow-bottom-circle-Cel-TDaT.js +0 -16
  133. package/dist/arrow-bottom-circle-Cel-TDaT.js.map +0 -1
  134. package/dist/arrow-left-ByNxCvA_.js +0 -13
  135. package/dist/arrow-left-ByNxCvA_.js.map +0 -1
  136. package/dist/arrow-right-yep9R_ud.js +0 -13
  137. package/dist/arrow-right-yep9R_ud.js.map +0 -1
  138. package/dist/arrow-top-C1WlBAfk.js +0 -13
  139. package/dist/arrow-top-C1WlBAfk.js.map +0 -1
  140. package/dist/async-directive-C9EnweIr.js +0 -73
  141. package/dist/async-directive-C9EnweIr.js.map +0 -1
  142. package/dist/bank-Dm8zmIr0.js +0 -19
  143. package/dist/bank-Dm8zmIr0.js.map +0 -1
  144. package/dist/basic-UB459qAF.js +0 -4914
  145. package/dist/basic-UB459qAF.js.map +0 -1
  146. package/dist/browser-5XoTmr4n.js +0 -1991
  147. package/dist/browser-5XoTmr4n.js.map +0 -1
  148. package/dist/browser-LYv8PF5c.js +0 -19
  149. package/dist/browser-LYv8PF5c.js.map +0 -1
  150. package/dist/card-CEQLkIir.js +0 -19
  151. package/dist/card-CEQLkIir.js.map +0 -1
  152. package/dist/ccip-Dj8tRQd7.js +0 -164
  153. package/dist/ccip-Dj8tRQd7.js.map +0 -1
  154. package/dist/checkmark-DPFC_0yn.js +0 -16
  155. package/dist/checkmark-DPFC_0yn.js.map +0 -1
  156. package/dist/checkmark-bold-Hwfezlkn.js +0 -13
  157. package/dist/checkmark-bold-Hwfezlkn.js.map +0 -1
  158. package/dist/chevron-bottom-qsPvhQDo.js +0 -13
  159. package/dist/chevron-bottom-qsPvhQDo.js.map +0 -1
  160. package/dist/chevron-left-CA4SOr_F.js +0 -13
  161. package/dist/chevron-left-CA4SOr_F.js.map +0 -1
  162. package/dist/chevron-right-TeVZyORZ.js +0 -13
  163. package/dist/chevron-right-TeVZyORZ.js.map +0 -1
  164. package/dist/chevron-top-B7LCiM2n.js +0 -13
  165. package/dist/chevron-top-B7LCiM2n.js.map +0 -1
  166. package/dist/chrome-store-CU7w_5QC.js +0 -66
  167. package/dist/chrome-store-CU7w_5QC.js.map +0 -1
  168. package/dist/class-map-B814K2ej.js +0 -101
  169. package/dist/class-map-B814K2ej.js.map +0 -1
  170. package/dist/clock-DcbItfiJ.js +0 -13
  171. package/dist/clock-DcbItfiJ.js.map +0 -1
  172. package/dist/close-B22QsrS0.js +0 -13
  173. package/dist/close-B22QsrS0.js.map +0 -1
  174. package/dist/clsx.m-D57qXwfE.js +0 -21
  175. package/dist/clsx.m-D57qXwfE.js.map +0 -1
  176. package/dist/coinPlaceholder-BNrjpg6-.js +0 -13
  177. package/dist/coinPlaceholder-BNrjpg6-.js.map +0 -1
  178. package/dist/compass-C7GRFU39.js +0 -13
  179. package/dist/compass-C7GRFU39.js.map +0 -1
  180. package/dist/copy-BcrOhyLL.js +0 -20
  181. package/dist/copy-BcrOhyLL.js.map +0 -1
  182. package/dist/core-BI_Ap4BF.js +0 -16288
  183. package/dist/core-BI_Ap4BF.js.map +0 -1
  184. package/dist/cursor-AJkpyAWk.js +0 -8
  185. package/dist/cursor-AJkpyAWk.js.map +0 -1
  186. package/dist/cursor-transparent-C1dF4GFm.js +0 -17
  187. package/dist/cursor-transparent-C1dF4GFm.js.map +0 -1
  188. package/dist/data-capture-CqwQ1053.js +0 -549
  189. package/dist/data-capture-CqwQ1053.js.map +0 -1
  190. package/dist/desktop-C60oOo59.js +0 -14
  191. package/dist/desktop-C60oOo59.js.map +0 -1
  192. package/dist/disconnect-DqS517fE.js +0 -13
  193. package/dist/disconnect-DqS517fE.js.map +0 -1
  194. package/dist/discord-D1qNpgLJ.js +0 -22
  195. package/dist/discord-D1qNpgLJ.js.map +0 -1
  196. package/dist/email-UK97sxf8.js +0 -421
  197. package/dist/email-UK97sxf8.js.map +0 -1
  198. package/dist/embedded-wallet-f8ft4R2q.js +0 -952
  199. package/dist/embedded-wallet-f8ft4R2q.js.map +0 -1
  200. package/dist/etherscan-BWSY3GuJ.js +0 -11
  201. package/dist/etherscan-BWSY3GuJ.js.map +0 -1
  202. package/dist/exclamation-triangle-nypPoZ5T.js +0 -9
  203. package/dist/exclamation-triangle-nypPoZ5T.js.map +0 -1
  204. package/dist/extension-BuFHuaRl.js +0 -13
  205. package/dist/extension-BuFHuaRl.js.map +0 -1
  206. package/dist/external-link-L3QQJwck.js +0 -13
  207. package/dist/external-link-L3QQJwck.js.map +0 -1
  208. package/dist/facebook-BbbjiGyt.js +0 -31
  209. package/dist/facebook-BbbjiGyt.js.map +0 -1
  210. package/dist/farcaster-CDar3vjq.js +0 -17
  211. package/dist/farcaster-CDar3vjq.js.map +0 -1
  212. package/dist/features-Dne1ZyJy.js +0 -319
  213. package/dist/features-Dne1ZyJy.js.map +0 -1
  214. package/dist/filters-BprVfwTM.js +0 -13
  215. package/dist/filters-BprVfwTM.js.map +0 -1
  216. package/dist/github-BFRFSS65.js +0 -23
  217. package/dist/github-BFRFSS65.js.map +0 -1
  218. package/dist/google-DX3b-tuu.js +0 -23
  219. package/dist/google-DX3b-tuu.js.map +0 -1
  220. package/dist/hashTypedData-MEx8_Z-J.js +0 -262
  221. package/dist/hashTypedData-MEx8_Z-J.js.map +0 -1
  222. package/dist/help-circle-PtWG4XV9.js +0 -17
  223. package/dist/help-circle-PtWG4XV9.js.map +0 -1
  224. package/dist/id-BKzsrqpW.js +0 -17
  225. package/dist/id-BKzsrqpW.js.map +0 -1
  226. package/dist/if-defined-CyuCf775.js +0 -11
  227. package/dist/if-defined-CyuCf775.js.map +0 -1
  228. package/dist/image-2qjHFSqv.js +0 -9
  229. package/dist/image-2qjHFSqv.js.map +0 -1
  230. package/dist/index-57er67ch.js +0 -131
  231. package/dist/index-57er67ch.js.map +0 -1
  232. package/dist/index-B-MpJOWW.js +0 -3987
  233. package/dist/index-B-MpJOWW.js.map +0 -1
  234. package/dist/index-B2f4UbAK.js +0 -257
  235. package/dist/index-B2f4UbAK.js.map +0 -1
  236. package/dist/index-B4xD2s69.js +0 -62
  237. package/dist/index-B4xD2s69.js.map +0 -1
  238. package/dist/index-BF4uePO9.js +0 -126
  239. package/dist/index-BF4uePO9.js.map +0 -1
  240. package/dist/index-BG3007yu.js +0 -542
  241. package/dist/index-BG3007yu.js.map +0 -1
  242. package/dist/index-BPqsyCu1.js +0 -249
  243. package/dist/index-BPqsyCu1.js.map +0 -1
  244. package/dist/index-BTFeMb7h.js +0 -2277
  245. package/dist/index-BTFeMb7h.js.map +0 -1
  246. package/dist/index-B_z_MPZ-.js +0 -180
  247. package/dist/index-B_z_MPZ-.js.map +0 -1
  248. package/dist/index-Biw_bFmP.js +0 -70
  249. package/dist/index-Biw_bFmP.js.map +0 -1
  250. package/dist/index-BnY1urGu.js +0 -441
  251. package/dist/index-BnY1urGu.js.map +0 -1
  252. package/dist/index-C1OrBJOZ.js +0 -218
  253. package/dist/index-C1OrBJOZ.js.map +0 -1
  254. package/dist/index-CHvzOG0E.js +0 -1372
  255. package/dist/index-CHvzOG0E.js.map +0 -1
  256. package/dist/index-CKaIBA_q.js +0 -153
  257. package/dist/index-CKaIBA_q.js.map +0 -1
  258. package/dist/index-CLefivQ6.js +0 -124
  259. package/dist/index-CLefivQ6.js.map +0 -1
  260. package/dist/index-COvWUE72.js +0 -716
  261. package/dist/index-COvWUE72.js.map +0 -1
  262. package/dist/index-CRhk6ovx.js +0 -198
  263. package/dist/index-CRhk6ovx.js.map +0 -1
  264. package/dist/index-CfTNvhZC.js +0 -967
  265. package/dist/index-CfTNvhZC.js.map +0 -1
  266. package/dist/index-CjCwufpz.js +0 -120
  267. package/dist/index-CjCwufpz.js.map +0 -1
  268. package/dist/index-Ck3zz_LE.js +0 -984
  269. package/dist/index-Ck3zz_LE.js.map +0 -1
  270. package/dist/index-CqVDx2Ua.js +0 -9350
  271. package/dist/index-CqVDx2Ua.js.map +0 -1
  272. package/dist/index-CrF2nCtM.js +0 -211
  273. package/dist/index-CrF2nCtM.js.map +0 -1
  274. package/dist/index-Crnbnlbl.js +0 -8825
  275. package/dist/index-Crnbnlbl.js.map +0 -1
  276. package/dist/index-D7bwcPcO.js +0 -147
  277. package/dist/index-D7bwcPcO.js.map +0 -1
  278. package/dist/index-DAmhDlFG.js +0 -985
  279. package/dist/index-DAmhDlFG.js.map +0 -1
  280. package/dist/index-DF9XlWjQ.js +0 -456
  281. package/dist/index-DF9XlWjQ.js.map +0 -1
  282. package/dist/index-DGtLnlsD.js +0 -521
  283. package/dist/index-DGtLnlsD.js.map +0 -1
  284. package/dist/index-DIDlQZ9c.js +0 -1582
  285. package/dist/index-DIDlQZ9c.js.map +0 -1
  286. package/dist/index-DJe9wj3q.js +0 -136
  287. package/dist/index-DJe9wj3q.js.map +0 -1
  288. package/dist/index-DPlE9Qgr.js +0 -73
  289. package/dist/index-DPlE9Qgr.js.map +0 -1
  290. package/dist/index-DVXtgl7V.js +0 -7481
  291. package/dist/index-DVXtgl7V.js.map +0 -1
  292. package/dist/index-DWLAu0nH.js +0 -110
  293. package/dist/index-DWLAu0nH.js.map +0 -1
  294. package/dist/index-DXCwyaz_.js +0 -147
  295. package/dist/index-DXCwyaz_.js.map +0 -1
  296. package/dist/index-D_NteNrS.js +0 -198
  297. package/dist/index-D_NteNrS.js.map +0 -1
  298. package/dist/index-Dg65-p7m.js +0 -7258
  299. package/dist/index-Dg65-p7m.js.map +0 -1
  300. package/dist/index-Du7PdWv1.js +0 -181
  301. package/dist/index-Du7PdWv1.js.map +0 -1
  302. package/dist/index-HOjNYM_k.js +0 -92
  303. package/dist/index-HOjNYM_k.js.map +0 -1
  304. package/dist/index-MwW0rp8T.js +0 -286
  305. package/dist/index-MwW0rp8T.js.map +0 -1
  306. package/dist/index-OCzLDbWt.js +0 -18322
  307. package/dist/index-OCzLDbWt.js.map +0 -1
  308. package/dist/index-Sf3UCmHB.js +0 -611
  309. package/dist/index-Sf3UCmHB.js.map +0 -1
  310. package/dist/index-Zt_Jj4gf.js +0 -520
  311. package/dist/index-Zt_Jj4gf.js.map +0 -1
  312. package/dist/index-kb6zqfNt.js +0 -1178
  313. package/dist/index-kb6zqfNt.js.map +0 -1
  314. package/dist/index-rYPftA0P.js +0 -52
  315. package/dist/index-rYPftA0P.js.map +0 -1
  316. package/dist/index-tdPUUHj0.js +0 -281
  317. package/dist/index-tdPUUHj0.js.map +0 -1
  318. package/dist/index-wVp4UjVg.js +0 -182
  319. package/dist/index-wVp4UjVg.js.map +0 -1
  320. package/dist/index-ywRnp0Bi.js +0 -109
  321. package/dist/index-ywRnp0Bi.js.map +0 -1
  322. package/dist/index.es-BrfaQK0n.js +0 -8391
  323. package/dist/index.es-BrfaQK0n.js.map +0 -1
  324. package/dist/info-BhM-vMtG.js +0 -8
  325. package/dist/info-BhM-vMtG.js.map +0 -1
  326. package/dist/info-circle-DwGnsKMj.js +0 -17
  327. package/dist/info-circle-DwGnsKMj.js.map +0 -1
  328. package/dist/jsxRuntime.module-BW0yCO8A.js +0 -14
  329. package/dist/jsxRuntime.module-BW0yCO8A.js.map +0 -1
  330. package/dist/lightbulb-BvGmXMuo.js +0 -8
  331. package/dist/lightbulb-BvGmXMuo.js.map +0 -1
  332. package/dist/localBatchGatewayRequest-CLL1gABv.js +0 -103
  333. package/dist/localBatchGatewayRequest-CLL1gABv.js.map +0 -1
  334. package/dist/mail-Cl70v1Dx.js +0 -13
  335. package/dist/mail-Cl70v1Dx.js.map +0 -1
  336. package/dist/metamask-sdk-BzQ933Ju.js +0 -16699
  337. package/dist/metamask-sdk-BzQ933Ju.js.map +0 -1
  338. package/dist/mobile-BCINjy0Y.js +0 -14
  339. package/dist/mobile-BCINjy0Y.js.map +0 -1
  340. package/dist/more-Cozw6-SQ.js +0 -16
  341. package/dist/more-Cozw6-SQ.js.map +0 -1
  342. package/dist/native-Dc_5StoC.js +0 -17
  343. package/dist/native-Dc_5StoC.js.map +0 -1
  344. package/dist/network-placeholder-o2Dz_YnK.js +0 -19
  345. package/dist/network-placeholder-o2Dz_YnK.js.map +0 -1
  346. package/dist/nftPlaceholder-Bjf9SAC-.js +0 -13
  347. package/dist/nftPlaceholder-Bjf9SAC-.js.map +0 -1
  348. package/dist/off-BsVJ8v6H.js +0 -13
  349. package/dist/off-BsVJ8v6H.js.map +0 -1
  350. package/dist/onramp-C4DqYEmw.js +0 -979
  351. package/dist/onramp-C4DqYEmw.js.map +0 -1
  352. package/dist/parseAbiParameters-DfJcIE_w.js +0 -757
  353. package/dist/parseAbiParameters-DfJcIE_w.js.map +0 -1
  354. package/dist/parseSignature-MJforcG6.js +0 -4690
  355. package/dist/parseSignature-MJforcG6.js.map +0 -1
  356. package/dist/pay-with-exchange-DC29BzBo.js +0 -603
  357. package/dist/pay-with-exchange-DC29BzBo.js.map +0 -1
  358. package/dist/play-store-DIOK4cBW.js +0 -37
  359. package/dist/play-store-DIOK4cBW.js.map +0 -1
  360. package/dist/plus-Cxls3O6G.js +0 -18
  361. package/dist/plus-Cxls3O6G.js.map +0 -1
  362. package/dist/property-8UcTqffH.js +0 -623
  363. package/dist/property-8UcTqffH.js.map +0 -1
  364. package/dist/qr-code-Cp6lpAcY.js +0 -11
  365. package/dist/qr-code-Cp6lpAcY.js.map +0 -1
  366. package/dist/receive-BLI57snb.js +0 -262
  367. package/dist/receive-BLI57snb.js.map +0 -1
  368. package/dist/recycle-horizontal-AEJ_nbSP.js +0 -14
  369. package/dist/recycle-horizontal-AEJ_nbSP.js.map +0 -1
  370. package/dist/ref-BobNUvS_.js +0 -43
  371. package/dist/ref-BobNUvS_.js.map +0 -1
  372. package/dist/refresh-7roUeD2M.js +0 -13
  373. package/dist/refresh-7roUeD2M.js.map +0 -1
  374. package/dist/reown-logo-xggoIKX2.js +0 -17
  375. package/dist/reown-logo-xggoIKX2.js.map +0 -1
  376. package/dist/search-DgzcpMUb.js +0 -13
  377. package/dist/search-DgzcpMUb.js.map +0 -1
  378. package/dist/secp256k1-D_j0Z4BY.js +0 -2031
  379. package/dist/secp256k1-D_j0Z4BY.js.map +0 -1
  380. package/dist/send-D7M2-Upc.js +0 -20
  381. package/dist/send-D7M2-Upc.js.map +0 -1
  382. package/dist/send-TAzhXOOa.js +0 -1365
  383. package/dist/send-TAzhXOOa.js.map +0 -1
  384. package/dist/socials-BXTq602s.js +0 -796
  385. package/dist/socials-BXTq602s.js.map +0 -1
  386. package/dist/swapHorizontal-2gzDDUNF.js +0 -13
  387. package/dist/swapHorizontal-2gzDDUNF.js.map +0 -1
  388. package/dist/swapHorizontalBold-C1cHwAjU.js +0 -13
  389. package/dist/swapHorizontalBold-C1cHwAjU.js.map +0 -1
  390. package/dist/swapHorizontalMedium-BQno5vep.js +0 -21
  391. package/dist/swapHorizontalMedium-BQno5vep.js.map +0 -1
  392. package/dist/swapHorizontalRoundedBold-CYmZDeQ5.js +0 -13
  393. package/dist/swapHorizontalRoundedBold-CYmZDeQ5.js.map +0 -1
  394. package/dist/swapVertical-BhRPysBs.js +0 -13
  395. package/dist/swapVertical-BhRPysBs.js.map +0 -1
  396. package/dist/swaps-DQ-uUZvX.js +0 -2121
  397. package/dist/swaps-DQ-uUZvX.js.map +0 -1
  398. package/dist/telegram-B-YOyhte.js +0 -21
  399. package/dist/telegram-B-YOyhte.js.map +0 -1
  400. package/dist/three-dots-8mr70UzU.js +0 -10
  401. package/dist/three-dots-8mr70UzU.js.map +0 -1
  402. package/dist/transactions-C4p83vMQ.js +0 -38
  403. package/dist/transactions-C4p83vMQ.js.map +0 -1
  404. package/dist/twitch-C2ccExfT.js +0 -23
  405. package/dist/twitch-C2ccExfT.js.map +0 -1
  406. package/dist/twitterIcon-IkT5wPxq.js +0 -11
  407. package/dist/twitterIcon-IkT5wPxq.js.map +0 -1
  408. package/dist/vanilla-CgG5xMJO.js +0 -448
  409. package/dist/vanilla-CgG5xMJO.js.map +0 -1
  410. package/dist/verify-BfilAaob.js +0 -13
  411. package/dist/verify-BfilAaob.js.map +0 -1
  412. package/dist/verify-filled-COkWKgPo.js +0 -13
  413. package/dist/verify-filled-COkWKgPo.js.map +0 -1
  414. package/dist/w3m-modal-9MzgEqm3.js +0 -1725
  415. package/dist/w3m-modal-9MzgEqm3.js.map +0 -1
  416. package/dist/w3m-modal-DBQU256b.js +0 -2008
  417. package/dist/w3m-modal-DBQU256b.js.map +0 -1
  418. package/dist/wallet-9D5svrZj.js +0 -13
  419. package/dist/wallet-9D5svrZj.js.map +0 -1
  420. package/dist/wallet-placeholder-CfLGKG93.js +0 -19
  421. package/dist/wallet-placeholder-CfLGKG93.js.map +0 -1
  422. package/dist/wallet-standard-CkMoUaGA.js +0 -523
  423. package/dist/wallet-standard-CkMoUaGA.js.map +0 -1
  424. package/dist/walletconnect-MtAz2u7z.js +0 -39
  425. package/dist/walletconnect-MtAz2u7z.js.map +0 -1
  426. package/dist/warning-circle-Cf2AJecu.js +0 -17
  427. package/dist/warning-circle-Cf2AJecu.js.map +0 -1
  428. package/dist/x-B0KhGb39.js +0 -17
  429. package/dist/x-B0KhGb39.js.map +0 -1
@@ -1,3987 +0,0 @@
1
- import { c as createStore, p as persist, a as createJSONStorage } from "./vanilla-CgG5xMJO.js";
2
- import { B, _, h, y, T, c as createStore$1, s as set, d as del, g as get$1 } from "./index-BnY1urGu.js";
3
- import { u } from "./jsxRuntime.module-BW0yCO8A.js";
4
- import { c as clsx } from "./clsx.m-D57qXwfE.js";
5
- import { ci as EventEmitter, cj as defineChain, ck as createPublicClient, cl as http, cm as isAddress, cn as isHex, b3 as hashTypedData, b2 as hashMessage, bO as numberToHex, co as slice$1, bQ as keccak256, cp as toHex$2, c2 as hexToBigInt, cq as waitForCallsStatus, cr as stringToBytes, cs as hexToBytes, ct as trim, b1 as encodeFunctionData, cu as decodeFunctionData, bX as BaseError, cv as size, cw as parseSignature, cx as encodePacked, bP as encodeAbiParameters, cy as stringToHex, cz as hexToString, bU as getCode, bV as readContract, bN as pad, cA as decodeAbiParameters, cB as erc20Abi, cC as hexToNumber, cD as isAddressEqual } from "./appkit-ppmICUF1.js";
6
- import { c as createBundlerClient, s as slice, t as toHex, g as getSignPayload, a as sign$1, b as toHex$1, d as createKeyPair, f as fromHex, e as toSmartAccount, h as entryPoint06Address, i as entryPoint06Abi, j as getUserOperationHash } from "./WebCryptoP256-Czt7ZkJ7.js";
7
- const name = "@base-org/account";
8
- const version = "1.1.1";
9
- const pkg = {
10
- name,
11
- version
12
- };
13
- const CB_KEYS_URL = "https://keys.coinbase.com/connect";
14
- const CB_WALLET_RPC_URL = "https://rpc.wallet.coinbase.com";
15
- const PACKAGE_NAME = pkg.name;
16
- const PACKAGE_VERSION = pkg.version;
17
- const createChainSlice = () => {
18
- return {
19
- chains: []
20
- };
21
- };
22
- const createKeysSlice = () => {
23
- return {
24
- keys: {}
25
- };
26
- };
27
- const createAccountSlice = () => {
28
- return {
29
- account: {}
30
- };
31
- };
32
- const createSubAccountSlice = () => {
33
- return {
34
- subAccount: void 0
35
- };
36
- };
37
- const createSubAccountConfigSlice = () => {
38
- return {
39
- subAccountConfig: {}
40
- };
41
- };
42
- const createSpendPermissionsSlice = () => {
43
- return {
44
- spendPermissions: []
45
- };
46
- };
47
- const createConfigSlice = () => {
48
- return {
49
- config: {
50
- version: PACKAGE_VERSION
51
- }
52
- };
53
- };
54
- const sdkstore = createStore(persist((...args) => Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, createChainSlice(...args)), createKeysSlice(...args)), createAccountSlice(...args)), createSubAccountSlice(...args)), createSpendPermissionsSlice(...args)), createConfigSlice(...args)), createSubAccountConfigSlice(...args)), {
55
- name: "base-acc-sdk.store",
56
- storage: createJSONStorage(() => localStorage),
57
- partialize: (state) => {
58
- return {
59
- chains: state.chains,
60
- keys: state.keys,
61
- account: state.account,
62
- subAccount: state.subAccount,
63
- spendPermissions: state.spendPermissions,
64
- config: state.config
65
- };
66
- }
67
- }));
68
- const subAccountsConfig = {
69
- get: () => sdkstore.getState().subAccountConfig,
70
- set: (subAccountConfig) => {
71
- sdkstore.setState((state) => ({
72
- subAccountConfig: Object.assign(Object.assign({}, state.subAccountConfig), subAccountConfig)
73
- }));
74
- },
75
- clear: () => {
76
- sdkstore.setState({
77
- subAccountConfig: {}
78
- });
79
- }
80
- };
81
- const subAccounts = {
82
- get: () => sdkstore.getState().subAccount,
83
- set: (subAccount) => {
84
- sdkstore.setState((state) => ({
85
- subAccount: state.subAccount ? Object.assign(Object.assign({}, state.subAccount), subAccount) : Object.assign({ address: subAccount.address }, subAccount)
86
- }));
87
- },
88
- clear: () => {
89
- sdkstore.setState({
90
- subAccount: void 0
91
- });
92
- }
93
- };
94
- const spendPermissions = {
95
- get: () => sdkstore.getState().spendPermissions,
96
- set: (spendPermissions2) => {
97
- sdkstore.setState({ spendPermissions: spendPermissions2 });
98
- },
99
- clear: () => {
100
- sdkstore.setState({
101
- spendPermissions: []
102
- });
103
- }
104
- };
105
- const account = {
106
- get: () => sdkstore.getState().account,
107
- set: (account2) => {
108
- sdkstore.setState((state) => ({
109
- account: Object.assign(Object.assign({}, state.account), account2)
110
- }));
111
- },
112
- clear: () => {
113
- sdkstore.setState({
114
- account: {}
115
- });
116
- }
117
- };
118
- const chains = {
119
- get: () => sdkstore.getState().chains,
120
- set: (chains2) => {
121
- sdkstore.setState({ chains: chains2 });
122
- },
123
- clear: () => {
124
- sdkstore.setState({
125
- chains: []
126
- });
127
- }
128
- };
129
- const keys = {
130
- get: (key) => sdkstore.getState().keys[key],
131
- set: (key, value) => {
132
- sdkstore.setState((state) => ({ keys: Object.assign(Object.assign({}, state.keys), { [key]: value }) }));
133
- },
134
- clear: () => {
135
- sdkstore.setState({
136
- keys: {}
137
- });
138
- }
139
- };
140
- const config = {
141
- get: () => sdkstore.getState().config,
142
- set: (config2) => {
143
- sdkstore.setState((state) => ({ config: Object.assign(Object.assign({}, state.config), config2) }));
144
- }
145
- };
146
- const actions = {
147
- subAccounts,
148
- subAccountsConfig,
149
- spendPermissions,
150
- account,
151
- chains,
152
- keys,
153
- config
154
- };
155
- const store = Object.assign(Object.assign({}, sdkstore), actions);
156
- const TELEMETRY_SCRIPT_CONTENT = `!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ClientAnalytics=t():e.ClientAnalytics=t()}(this,(function(){return(()=>{var e={792:e=>{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n<e.length;n++)t.push(255&e.charCodeAt(n));return t},bytesToString:function(e){for(var t=[],n=0;n<e.length;n++)t.push(String.fromCharCode(e[n]));return t.join("")}}};e.exports=t},562:e=>{var t,n;t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n={rotl:function(e,t){return e<<t|e>>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t<e.length;t++)e[t]=n.endian(e[t]);return e},randomBytes:function(e){for(var t=[];e>0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n<e.length;n++,r+=8)t[r>>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n<e.length;n++)t.push((e[n]>>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n<e.length;n+=2)t.push(parseInt(e.substr(n,2),16));return t},bytesToBase64:function(e){for(var n=[],r=0;r<e.length;r+=3)for(var i=e[r]<<16|e[r+1]<<8|e[r+2],a=0;a<4;a++)8*r+6*a<=8*e.length?n.push(t.charAt(i>>>6*(3-a)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\\/]/gi,"");for(var n=[],r=0,i=0;r<e.length;i=++r%4)0!=i&&n.push((t.indexOf(e.charAt(r-1))&Math.pow(2,-2*i+8)-1)<<2*i|t.indexOf(e.charAt(r))>>>6-2*i);return n}},e.exports=n},335:e=>{function t(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},762:(e,t,n)=>{var r,i,a,o,s;r=n(562),i=n(792).utf8,a=n(335),o=n(792).bin,(s=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?o.stringToBytes(e):i.stringToBytes(e):a(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var n=r.bytesToWords(e),c=8*e.length,u=1732584193,l=-271733879,d=-1732584194,p=271733878,m=0;m<n.length;m++)n[m]=16711935&(n[m]<<8|n[m]>>>24)|4278255360&(n[m]<<24|n[m]>>>8);n[c>>>5]|=128<<c%32,n[14+(c+64>>>9<<4)]=c;var f=s._ff,v=s._gg,g=s._hh,b=s._ii;for(m=0;m<n.length;m+=16){var h=u,w=l,y=d,T=p;u=f(u,l,d,p,n[m+0],7,-680876936),p=f(p,u,l,d,n[m+1],12,-389564586),d=f(d,p,u,l,n[m+2],17,606105819),l=f(l,d,p,u,n[m+3],22,-1044525330),u=f(u,l,d,p,n[m+4],7,-176418897),p=f(p,u,l,d,n[m+5],12,1200080426),d=f(d,p,u,l,n[m+6],17,-1473231341),l=f(l,d,p,u,n[m+7],22,-45705983),u=f(u,l,d,p,n[m+8],7,1770035416),p=f(p,u,l,d,n[m+9],12,-1958414417),d=f(d,p,u,l,n[m+10],17,-42063),l=f(l,d,p,u,n[m+11],22,-1990404162),u=f(u,l,d,p,n[m+12],7,1804603682),p=f(p,u,l,d,n[m+13],12,-40341101),d=f(d,p,u,l,n[m+14],17,-1502002290),u=v(u,l=f(l,d,p,u,n[m+15],22,1236535329),d,p,n[m+1],5,-165796510),p=v(p,u,l,d,n[m+6],9,-1069501632),d=v(d,p,u,l,n[m+11],14,643717713),l=v(l,d,p,u,n[m+0],20,-373897302),u=v(u,l,d,p,n[m+5],5,-701558691),p=v(p,u,l,d,n[m+10],9,38016083),d=v(d,p,u,l,n[m+15],14,-660478335),l=v(l,d,p,u,n[m+4],20,-405537848),u=v(u,l,d,p,n[m+9],5,568446438),p=v(p,u,l,d,n[m+14],9,-1019803690),d=v(d,p,u,l,n[m+3],14,-187363961),l=v(l,d,p,u,n[m+8],20,1163531501),u=v(u,l,d,p,n[m+13],5,-1444681467),p=v(p,u,l,d,n[m+2],9,-51403784),d=v(d,p,u,l,n[m+7],14,1735328473),u=g(u,l=v(l,d,p,u,n[m+12],20,-1926607734),d,p,n[m+5],4,-378558),p=g(p,u,l,d,n[m+8],11,-2022574463),d=g(d,p,u,l,n[m+11],16,1839030562),l=g(l,d,p,u,n[m+14],23,-35309556),u=g(u,l,d,p,n[m+1],4,-1530992060),p=g(p,u,l,d,n[m+4],11,1272893353),d=g(d,p,u,l,n[m+7],16,-155497632),l=g(l,d,p,u,n[m+10],23,-1094730640),u=g(u,l,d,p,n[m+13],4,681279174),p=g(p,u,l,d,n[m+0],11,-358537222),d=g(d,p,u,l,n[m+3],16,-722521979),l=g(l,d,p,u,n[m+6],23,76029189),u=g(u,l,d,p,n[m+9],4,-640364487),p=g(p,u,l,d,n[m+12],11,-421815835),d=g(d,p,u,l,n[m+15],16,530742520),u=b(u,l=g(l,d,p,u,n[m+2],23,-995338651),d,p,n[m+0],6,-198630844),p=b(p,u,l,d,n[m+7],10,1126891415),d=b(d,p,u,l,n[m+14],15,-1416354905),l=b(l,d,p,u,n[m+5],21,-57434055),u=b(u,l,d,p,n[m+12],6,1700485571),p=b(p,u,l,d,n[m+3],10,-1894986606),d=b(d,p,u,l,n[m+10],15,-1051523),l=b(l,d,p,u,n[m+1],21,-2054922799),u=b(u,l,d,p,n[m+8],6,1873313359),p=b(p,u,l,d,n[m+15],10,-30611744),d=b(d,p,u,l,n[m+6],15,-1560198380),l=b(l,d,p,u,n[m+13],21,1309151649),u=b(u,l,d,p,n[m+4],6,-145523070),p=b(p,u,l,d,n[m+11],10,-1120210379),d=b(d,p,u,l,n[m+2],15,718787259),l=b(l,d,p,u,n[m+9],21,-343485551),u=u+h>>>0,l=l+w>>>0,d=d+y>>>0,p=p+T>>>0}return r.endian([u,l,d,p])})._ff=function(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+(i>>>0)+o;return(s<<a|s>>>32-a)+t},s._gg=function(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+(i>>>0)+o;return(s<<a|s>>>32-a)+t},s._hh=function(e,t,n,r,i,a,o){var s=e+(t^n^r)+(i>>>0)+o;return(s<<a|s>>>32-a)+t},s._ii=function(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+(i>>>0)+o;return(s<<a|s>>>32-a)+t},s._blocksize=16,s._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var n=r.wordsToBytes(s(e,t));return t&&t.asBytes?n:t&&t.asString?o.bytesToString(n):r.bytesToHex(n)}},2:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Perfume:()=>ze,incrementUjNavigation:()=>Le,markStep:()=>Re,markStepOnce:()=>qe});var r,i,a={isResourceTiming:!1,isElementTiming:!1,maxTime:3e4,reportOptions:{},enableNavigationTracking:!0},o=window,s=o.console,c=o.navigator,u=o.performance,l=function(){return c.deviceMemory},d=function(){return c.hardwareConcurrency},p="mark.",m=function(){return u&&!!u.getEntriesByType&&!!u.now&&!!u.mark},f="4g",v=!1,g={},b={value:0},h={value:{beacon:0,css:0,fetch:0,img:0,other:0,script:0,total:0,xmlhttprequest:0}},w={value:0},y={value:0},T={},k={isHidden:!1,didChange:!1},_=function(){k.isHidden=!1,document.hidden&&(k.isHidden=document.hidden,k.didChange=!0)},S=function(e,t){try{var n=new PerformanceObserver((function(e){t(e.getEntries())}));return n.observe({type:e,buffered:!0}),n}catch(e){s.warn("Perfume.js:",e)}return null},E=function(){return!!(d()&&d()<=4)||!!(l()&&l()<=4)},x=function(e,t){switch(e){case"slow-2g":case"2g":case"3g":return!0;default:return E()||t}},O=function(e){return parseFloat(e.toFixed(4))},j=function(e){return"number"!=typeof e?null:O(e/Math.pow(1024,2))},N=function(e,t,n,r,i){var s,u=function(){a.analyticsTracker&&(k.isHidden&&!["CLS","INP"].includes(e)||a.analyticsTracker({attribution:r,metricName:e,data:t,navigatorInformation:c?{deviceMemory:l()||0,hardwareConcurrency:d()||0,serviceWorkerStatus:"serviceWorker"in c?c.serviceWorker.controller?"controlled":"supported":"unsupported",isLowEndDevice:E(),isLowEndExperience:x(f,v)}:{},rating:n,navigationType:i}))};["CLS","INP"].includes(e)?u():(s=u,"requestIdleCallback"in o?o.requestIdleCallback(s,{timeout:3e3}):s())},I=function(e){e.forEach((function(e){if(!("self"!==e.name||e.startTime<b.value)){var t=e.duration-50;t>0&&(w.value+=t,y.value+=t)}}))};!function(e){e.instant="instant",e.quick="quick",e.moderate="moderate",e.slow="slow",e.unavoidable="unavoidable"}(r||(r={}));var P,M,B,C,D,A=((i={})[r.instant]={vitalsThresholds:[100,200],maxOutlierThreshold:1e4},i[r.quick]={vitalsThresholds:[200,500],maxOutlierThreshold:1e4},i[r.moderate]={vitalsThresholds:[500,1e3],maxOutlierThreshold:1e4},i[r.slow]={vitalsThresholds:[1e3,2e3],maxOutlierThreshold:1e4},i[r.unavoidable]={vitalsThresholds:[2e3,5e3],maxOutlierThreshold:2e4},i),L={RT:[100,200],TBT:[200,600],NTBT:[200,600]},U=function(e,t){return L[e]?t<=L[e][0]?"good":t<=L[e][1]?"needsImprovement":"poor":null},R=function(e,t,n){Object.keys(t).forEach((function(e){"number"==typeof t[e]&&(t[e]=O(t[e]))})),N(e,t,null,n||{})},q=function(e){var t=e.attribution,n=e.name,r=e.rating,i=e.value,o=e.navigationType;"FCP"===n&&(b.value=i),["FCP","LCP"].includes(n)&&!T[0]&&(T[0]=S("longtask",I)),"FID"===n&&setTimeout((function(){k.didChange||(q({attribution:t,name:"TBT",rating:U("TBT",w.value),value:w.value,navigationType:o}),R("dataConsumption",h.value))}),1e4);var s=O(i);s<=a.maxTime&&s>=0&&N(n,s,r,t,o)},F=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},z=function(e){if("loading"===document.readyState)return"loading";var t=F();if(t){if(e<t.domInteractive)return"loading";if(0===t.domContentLoadedEventStart||e<t.domContentLoadedEventStart)return"dom-interactive";if(0===t.domComplete||e<t.domComplete)return"dom-content-loaded"}return"complete"},K=function(e){var t=e.nodeName;return 1===e.nodeType?t.toLowerCase():t.toUpperCase().replace(/^#/,"")},$=function(e,t){var n="";try{for(;e&&9!==e.nodeType;){var r=e,i=r.id?"#"+r.id:K(r)+(r.className&&r.className.length?"."+r.className.replace(/\\s+/g,"."):"");if(n.length+i.length>(t||100)-1)return n||i;if(n=n?i+">"+n:i,r.id)break;e=r.parentNode}}catch(e){}return n},Q=-1,W=function(){return Q},H=function(e){addEventListener("pageshow",(function(t){t.persisted&&(Q=t.timeStamp,e(t))}),!0)},V=function(){var e=F();return e&&e.activationStart||0},J=function(e,t){var n=F(),r="navigate";return W()>=0?r="back-forward-cache":n&&(r=document.prerendering||V()>0?"prerender":document.wasDiscarded?"restore":n.type.replace(/_/g,"-")),{name:e,value:void 0===t?-1:t,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},X=function(e,t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){t(e.getEntries())}))}));return r.observe(Object.assign({type:e,buffered:!0},n||{})),r}}catch(e){}},G=function(e,t){var n=function n(r){"pagehide"!==r.type&&"hidden"!==document.visibilityState||(e(r),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},Z=function(e,t,n,r){var i,a;return function(o){t.value>=0&&(o||r)&&((a=t.value-(i||0))||void 0===i)&&(i=t.value,t.delta=a,t.rating=function(e,t){return e>t[1]?"poor":e>t[0]?"needs-improvement":"good"}(t.value,n),e(t))}},Y=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},ee=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},te=-1,ne=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},re=function(e){"hidden"===document.visibilityState&&te>-1&&(te="visibilitychange"===e.type?e.timeStamp:0,ae())},ie=function(){addEventListener("visibilitychange",re,!0),addEventListener("prerenderingchange",re,!0)},ae=function(){removeEventListener("visibilitychange",re,!0),removeEventListener("prerenderingchange",re,!0)},oe=function(){return te<0&&(te=ne(),ie(),H((function(){setTimeout((function(){te=ne(),ie()}),0)}))),{get firstHiddenTime(){return te}}},se=function(e,t){t=t||{},ee((function(){var n,r=[1800,3e3],i=oe(),a=J("FCP"),o=X("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(o.disconnect(),e.startTime<i.firstHiddenTime&&(a.value=Math.max(e.startTime-V(),0),a.entries.push(e),n(!0)))}))}));o&&(n=Z(e,a,r,t.reportAllChanges),H((function(i){a=J("FCP"),n=Z(e,a,r,t.reportAllChanges),Y((function(){a.value=performance.now()-i.timeStamp,n(!0)}))})))}))},ce={passive:!0,capture:!0},ue=new Date,le=function(e,t){P||(P=t,M=e,B=new Date,me(removeEventListener),de())},de=function(){if(M>=0&&M<B-ue){var e={entryType:"first-input",name:P.type,target:P.target,cancelable:P.cancelable,startTime:P.timeStamp,processingStart:P.timeStamp+M};C.forEach((function(t){t(e)})),C=[]}},pe=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){le(e,t),i()},r=function(){i()},i=function(){removeEventListener("pointerup",n,ce),removeEventListener("pointercancel",r,ce)};addEventListener("pointerup",n,ce),addEventListener("pointercancel",r,ce)}(t,e):le(t,e)}},me=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,pe,ce)}))},fe=0,ve=1/0,ge=0,be=function(e){e.forEach((function(e){e.interactionId&&(ve=Math.min(ve,e.interactionId),ge=Math.max(ge,e.interactionId),fe=ge?(ge-ve)/7+1:0)}))},he=function(){return D?fe:performance.interactionCount||0},we=0,ye=function(){return he()-we},Te=[],ke={},_e=function(e){var t=Te[Te.length-1],n=ke[e.interactionId];if(n||Te.length<10||e.duration>t.latency){if(n)n.entries.push(e),n.latency=Math.max(n.latency,e.duration);else{var r={id:e.interactionId,latency:e.duration,entries:[e]};ke[r.id]=r,Te.push(r)}Te.sort((function(e,t){return t.latency-e.latency})),Te.splice(10).forEach((function(e){delete ke[e.id]}))}},Se={},Ee=function e(t){document.prerendering?ee((function(){return e(t)})):"complete"!==document.readyState?addEventListener("load",(function(){return e(t)}),!0):setTimeout(t,0)},xe=function(e,t){t=t||{};var n=[800,1800],r=J("TTFB"),i=Z(e,r,n,t.reportAllChanges);Ee((function(){var a=F();if(a){var o=a.responseStart;if(o<=0||o>performance.now())return;r.value=Math.max(o-V(),0),r.entries=[a],i(!0),H((function(){r=J("TTFB",0),(i=Z(e,r,n,t.reportAllChanges))(!0)}))}}))},Oe=function(e){e.forEach((function(e){e.identifier&&q({attribution:{identifier:e.identifier},name:"ET",rating:null,value:e.startTime})}))},je=function(e){e.forEach((function(e){if(a.isResourceTiming&&R("resourceTiming",e),e.decodedBodySize&&e.initiatorType){var t=e.decodedBodySize/1e3;h.value[e.initiatorType]+=t,h.value.total+=t}}))},Ne=function(){!function(e,t){xe((function(e){!function(e){if(e.entries.length){var t=e.entries[0],n=t.activationStart||0,r=Math.max(t.domainLookupStart-n,0),i=Math.max(t.connectStart-n,0),a=Math.max(t.requestStart-n,0);e.attribution={waitingTime:r,dnsTime:i-r,connectionTime:a-i,requestTime:e.value-a,navigationEntry:t}}else e.attribution={waitingTime:0,dnsTime:0,connectionTime:0,requestTime:0}}(e),function(e){e.value>0&&q(e)}(e)}),t)}(0,a.reportOptions.ttfb),function(e,t){!function(e,t){t=t||{},ee((function(){var e,n=[.1,.25],r=J("CLS"),i=-1,a=0,o=[],s=function(e){i>-1&&function(e){!function(e){if(e.entries.length){var t=e.entries.reduce((function(e,t){return e&&e.value>t.value?e:t}));if(t&&t.sources&&t.sources.length){var n=(r=t.sources).find((function(e){return e.node&&1===e.node.nodeType}))||r[0];if(n)return void(e.attribution={largestShiftTarget:$(n.node),largestShiftTime:t.startTime,largestShiftValue:t.value,largestShiftSource:n,largestShiftEntry:t,loadState:z(t.startTime)})}}var r;e.attribution={}}(e),function(e){q(e)}(e)}(e)},c=function(t){t.forEach((function(t){if(!t.hadRecentInput){var n=o[0],i=o[o.length-1];a&&t.startTime-i.startTime<1e3&&t.startTime-n.startTime<5e3?(a+=t.value,o.push(t)):(a=t.value,o=[t]),a>r.value&&(r.value=a,r.entries=o,e())}}))},u=X("layout-shift",c);u&&(e=Z(s,r,n,t.reportAllChanges),se((function(t){i=t.value,r.value<0&&(r.value=0,e())})),G((function(){c(u.takeRecords()),e(!0)})),H((function(){a=0,i=-1,r=J("CLS",0),e=Z(s,r,n,t.reportAllChanges),Y((function(){return e()}))})))}))}(0,t)}(0,a.reportOptions.cls),function(e,t){se((function(e){!function(e){if(e.entries.length){var t=F(),n=e.entries[e.entries.length-1];if(t){var r=t.activationStart||0,i=Math.max(0,t.responseStart-r);return void(e.attribution={timeToFirstByte:i,firstByteToFCP:e.value-i,loadState:z(e.entries[0].startTime),navigationEntry:t,fcpEntry:n})}}e.attribution={timeToFirstByte:0,firstByteToFCP:e.value,loadState:z(W())}}(e),function(e){q(e)}(e)}),t)}(0,a.reportOptions.fcp),function(e,t){!function(e,t){t=t||{},ee((function(){var n,r=[100,300],i=oe(),a=J("FID"),o=function(e){e.startTime<i.firstHiddenTime&&(a.value=e.processingStart-e.startTime,a.entries.push(e),n(!0))},s=function(e){e.forEach(o)},c=X("first-input",s);n=Z(e,a,r,t.reportAllChanges),c&&G((function(){s(c.takeRecords()),c.disconnect()}),!0),c&&H((function(){var i;a=J("FID"),n=Z(e,a,r,t.reportAllChanges),C=[],M=-1,P=null,me(addEventListener),i=o,C.push(i),de()}))}))}((function(e){!function(e){var t=e.entries[0];e.attribution={eventTarget:$(t.target),eventType:t.name,eventTime:t.startTime,eventEntry:t,loadState:z(t.startTime)}}(e),function(e){q(e)}(e)}),t)}(0,a.reportOptions.fid),function(e,t){!function(e,t){t=t||{},ee((function(){var n,r=[2500,4e3],i=oe(),a=J("LCP"),o=function(e){var t=e[e.length-1];if(t){var r=Math.max(t.startTime-V(),0);r<i.firstHiddenTime&&(a.value=r,a.entries=[t],n())}},s=X("largest-contentful-paint",o);if(s){n=Z(e,a,r,t.reportAllChanges);var c=function(){Se[a.id]||(o(s.takeRecords()),s.disconnect(),Se[a.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,c,{once:!0,capture:!0})})),G(c,!0),H((function(i){a=J("LCP"),n=Z(e,a,r,t.reportAllChanges),Y((function(){a.value=performance.now()-i.timeStamp,Se[a.id]=!0,n(!0)}))}))}}))}((function(e){!function(e){if(e.entries.length){var t=F();if(t){var n=t.activationStart||0,r=e.entries[e.entries.length-1],i=r.url&&performance.getEntriesByType("resource").filter((function(e){return e.name===r.url}))[0],a=Math.max(0,t.responseStart-n),o=Math.max(a,i?(i.requestStart||i.startTime)-n:0),s=Math.max(o,i?i.responseEnd-n:0),c=Math.max(s,r?r.startTime-n:0),u={element:$(r.element),timeToFirstByte:a,resourceLoadDelay:o-a,resourceLoadTime:s-o,elementRenderDelay:c-s,navigationEntry:t,lcpEntry:r};return r.url&&(u.url=r.url),i&&(u.lcpResourceEntry=i),void(e.attribution=u)}}e.attribution={timeToFirstByte:0,resourceLoadDelay:0,resourceLoadTime:0,elementRenderDelay:e.value}}(e),function(e){q(e)}(e)}),t)}(0,a.reportOptions.lcp),function(e,t){!function(e,t){t=t||{},ee((function(){var n=[200,500];"interactionCount"in performance||D||(D=X("event",be,{type:"event",buffered:!0,durationThreshold:0}));var r,i=J("INP"),a=function(e){e.forEach((function(e){e.interactionId&&_e(e),"first-input"===e.entryType&&!Te.some((function(t){return t.entries.some((function(t){return e.duration===t.duration&&e.startTime===t.startTime}))}))&&_e(e)}));var t,n=(t=Math.min(Te.length-1,Math.floor(ye()/50)),Te[t]);n&&n.latency!==i.value&&(i.value=n.latency,i.entries=n.entries,r())},o=X("event",a,{durationThreshold:t.durationThreshold||40});r=Z(e,i,n,t.reportAllChanges),o&&(o.observe({type:"first-input",buffered:!0}),G((function(){a(o.takeRecords()),i.value<0&&ye()>0&&(i.value=0,i.entries=[]),r(!0)})),H((function(){Te=[],we=he(),i=J("INP"),r=Z(e,i,n,t.reportAllChanges)})))}))}((function(t){!function(e){if(e.entries.length){var t=e.entries.sort((function(e,t){return t.duration-e.duration||t.processingEnd-t.processingStart-(e.processingEnd-e.processingStart)}))[0];e.attribution={eventTarget:$(t.target),eventType:t.name,eventTime:t.startTime,eventEntry:t,loadState:z(t.startTime)}}else e.attribution={}}(t),e(t)}),t)}((function(e){return q(e)}),a.reportOptions.inp),a.isResourceTiming&&S("resource",je),a.isElementTiming&&S("element",Oe)},Ie=function(e){var t="usageDetails"in e?e.usageDetails:{};R("storageEstimate",{quota:j(e.quota),usage:j(e.usage),caches:j(t.caches),indexedDB:j(t.indexedDB),serviceWorker:j(t.serviceWorkerRegistrations)})},Pe={finalMarkToStepsMap:{},startMarkToStepsMap:{},active:{},navigationSteps:{}},Me=function(e){delete Pe.active[e]},Be=function(){return Pe.navigationSteps},Ce=function(e){var t;return null!==(t=Be()[e])&&void 0!==t?t:{}},De=function(e,t,n){var r="step."+e,i=u.getEntriesByName(p+t).length>0;if(u.getEntriesByName(p+n).length>0&&a.steps){var o=A[a.steps[e].threshold],s=o.maxOutlierThreshold,c=o.vitalsThresholds;if(i){var l=u.measure(r,p+t,p+n),d=l.duration;if(d<=s){var m=function(e,t){return e<=t[0]?"good":e<=t[1]?"needsImprovement":"poor"}(d,c);d>=0&&(N("userJourneyStep",d,m,{stepName:e},void 0),u.measure("step.".concat(e,"_vitals_").concat(m),{start:l.startTime+l.duration,end:l.startTime+l.duration,detail:{type:"stepVital",duration:d}}))}}}},Ae=function(){var e=Be(),t=Pe.startMarkToStepsMap,n=Object.keys(e).length;if(0===n)return{};var r={},i=n-1,a=Ce(i);if(Object.keys(a).forEach((function(e){var n,i=null!==(n=t[e])&&void 0!==n?n:[];Object.keys(i).forEach((function(e){r[e]=!0}))})),n>1){var o=Ce(i-1);Object.keys(o).forEach((function(e){var n,i=null!==(n=t[e])&&void 0!==n?n:[];Object.keys(i).forEach((function(e){r[e]=!0}))}))}return r},Le=function(){var e,t=Object.keys(Pe.navigationSteps).length;Pe.navigationSteps[t]={};var n=Ae();null===(e=a.onMarkStep)||void 0===e||e.call(a,"",Object.keys(n))},Ue=function(e){var t,n,r,i,o,s,c;if(Pe.finalMarkToStepsMap[e]){!function(e){var t=Pe.navigationSteps,n=Pe.finalMarkToStepsMap,r=Object.keys(t).length;if(0!==r){var i=r-1,a=Ce(i);if(a&&n[e]){var o=n[e];o&&Object.keys(o).forEach((function(e){if(a[e]){var n=Ce(i)||{};n[e]=!1,t[i]=n}if(r>1){var o=i-1,s=Ce(o);s[e]&&(s[e]=!1,t[o]=s)}}))}}}(e);var u=Pe.finalMarkToStepsMap[e];Object.keys(u).forEach((function(t){var n=u[t];n.forEach(Me),Promise.all(n.map((function(n){return function(e,t,n,r){return new(n||(n=Promise))((function(e,t){function i(e){try{o(r.next(e))}catch(e){t(e)}}function a(e){try{o(r.throw(e))}catch(e){t(e)}}function o(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n((function(e){e(r)}))).then(i,a)}o((r=r.apply(undefined,[])).next())}))}(0,0,void 0,(function(){return function(e,t){var n,r,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}}(this,(function(r){switch(r.label){case 0:return[4,De(n,t,e)];case 1:return r.sent(),[2]}}))}))}))).catch((function(){}))}))}else r=e,i=Pe.navigationSteps,o=Object.keys(i).length,(c=Ce(s=(o>0?o:1)-1)||[])[r]=!0,i[s]=c,function(e){var t,n=null!==(t=Pe.startMarkToStepsMap[e])&&void 0!==t?t:[];Object.keys(n).forEach((function(e){Pe.active[e]||(Pe.active[e]=!0)}))}(e);if(a.enableNavigationTracking){var l=Ae();null===(t=a.onMarkStep)||void 0===t||t.call(a,e,Object.keys(l))}else null===(n=a.onMarkStep)||void 0===n||n.call(a,e,Object.keys(Pe.active))},Re=function(e){u.mark(p+e),Ue(e)},qe=function(e){0===u.getEntriesByName(p+e).length&&(u.mark(p+e),Ue(e))},Fe=0,ze=function(){function e(e){if(void 0===e&&(e={}),this.v="9.0.0-rc.3",a.analyticsTracker=e.analyticsTracker,a.isResourceTiming=!!e.resourceTiming,a.isElementTiming=!!e.elementTiming,a.maxTime=e.maxMeasureTime||a.maxTime,a.reportOptions=e.reportOptions||a.reportOptions,a.steps=e.steps,a.onMarkStep=e.onMarkStep,a.enableNavigationTracking=e.enableNavigationTracking,m()){"PerformanceObserver"in o&&Ne(),void 0!==document.hidden&&document.addEventListener("visibilitychange",_);var t=function(){if(!m())return{};var e=u.getEntriesByType("navigation")[0];if(!e)return{};var t=e.responseStart,n=e.responseEnd;return{fetchTime:n-e.fetchStart,workerTime:e.workerStart>0?n-e.workerStart:0,totalTime:n-e.requestStart,downloadTime:n-t,timeToFirstByte:t-e.requestStart,headerSize:e.transferSize-e.encodedBodySize||0,dnsLookupTime:e.domainLookupEnd-e.domainLookupStart,redirectTime:e.redirectEnd-e.redirectStart}}();R("navigationTiming",t),t.redirectTime&&q({attribution:{},name:"RT",rating:U("RT",t.redirectTime),value:t.redirectTime}),R("networkInformation",function(){if("connection"in c){var e=c.connection;return"object"!=typeof e?{}:(f=e.effectiveType,v=!!e.saveData,{downlink:e.downlink,effectiveType:e.effectiveType,rtt:e.rtt,saveData:!!e.saveData})}return{}}()),c&&c.storage&&"function"==typeof c.storage.estimate&&c.storage.estimate().then(Ie),a.steps&&a.steps&&(Pe.startMarkToStepsMap={},Pe.finalMarkToStepsMap={},Pe.active={},Pe.navigationSteps={},Object.entries(a.steps).forEach((function(e){var t,n,r=e[0],i=e[1].marks,a=i[0],o=i[1],s=null!==(n=Pe.startMarkToStepsMap[a])&&void 0!==n?n:{};if(s[r]=!0,Pe.startMarkToStepsMap[a]=s,Pe.finalMarkToStepsMap[o]){var c=Pe.finalMarkToStepsMap[o][a]||[];c.push(r),Pe.finalMarkToStepsMap[o][a]=c}else Pe.finalMarkToStepsMap[o]=((t={})[a]=[r],t)})))}}return e.prototype.start=function(e){m()&&!g[e]&&(g[e]=!0,u.mark("mark_".concat(e,"_start")))},e.prototype.end=function(e,t,n){if(void 0===t&&(t={}),void 0===n&&(n=!0),m()&&g[e]){u.mark("mark_".concat(e,"_end")),delete g[e];var r=function(e){u.measure(e,"mark_".concat(e,"_start"),"mark_".concat(e,"_end"));var t=u.getEntriesByName(e).pop();return t&&"measure"===t.entryType?t.duration:-1}(e);n&&R(e,O(r),t)}},e.prototype.endPaint=function(e,t){var n=this;setTimeout((function(){n.end(e,t)}))},e.prototype.clear=function(e){delete g[e],u.clearMarks&&(u.clearMarks("mark_".concat(e,"_start")),u.clearMarks("mark_".concat(e,"_end")))},e.prototype.markNTBT=function(){var e=this;this.start("ntbt"),y.value=0,clearTimeout(Fe),Fe=setTimeout((function(){e.end("ntbt",{},!1),q({attribution:{},name:"NTBT",rating:U("NTBT",y.value),value:y.value}),y.value=0}),2e3)},e}()},426:(e,t)=>{"use strict";Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.iterator;var n={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},r=Object.assign,i={};function a(e,t,r){this.props=e,this.context=t,this.refs=i,this.updater=r||n}function o(){}function s(e,t,r){this.props=e,this.context=t,this.refs=i,this.updater=r||n}a.prototype.isReactComponent={},a.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},a.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},o.prototype=a.prototype;var c=s.prototype=new o;c.constructor=s,r(c,a.prototype),c.isPureReactComponent=!0;Array.isArray,Object.prototype.hasOwnProperty;var u={current:null};t.useCallback=function(e,t){return u.current.useCallback(e,t)},t.useEffect=function(e,t){return u.current.useEffect(e,t)},t.useRef=function(e){return u.current.useRef(e)}},784:(e,t,n)=>{"use strict";e.exports=n(426)},353:function(e,t,n){var r;!function(i,a){"use strict";var o="function",s="undefined",c="object",u="string",l="major",d="model",p="name",m="type",f="vendor",v="version",g="architecture",b="console",h="mobile",w="tablet",y="smarttv",T="wearable",k="embedded",_="Amazon",S="Apple",E="ASUS",x="BlackBerry",O="Browser",j="Chrome",N="Firefox",I="Google",P="Huawei",M="LG",B="Microsoft",C="Motorola",D="Opera",A="Samsung",L="Sharp",U="Sony",R="Xiaomi",q="Zebra",F="Facebook",z="Chromium OS",K="Mac OS",$=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].toUpperCase()]=e[n];return t},Q=function(e,t){return typeof e===u&&-1!==W(t).indexOf(W(e))},W=function(e){return e.toLowerCase()},H=function(e,t){if(typeof e===u)return e=e.replace(/^\\s\\s*/,""),typeof t===s?e:e.substring(0,350)},V=function(e,t){for(var n,r,i,s,u,l,d=0;d<t.length&&!u;){var p=t[d],m=t[d+1];for(n=r=0;n<p.length&&!u&&p[n];)if(u=p[n++].exec(e))for(i=0;i<m.length;i++)l=u[++r],typeof(s=m[i])===c&&s.length>0?2===s.length?typeof s[1]==o?this[s[0]]=s[1].call(this,l):this[s[0]]=s[1]:3===s.length?typeof s[1]!==o||s[1].exec&&s[1].test?this[s[0]]=l?l.replace(s[1],s[2]):a:this[s[0]]=l?s[1].call(this,l,s[2]):a:4===s.length&&(this[s[0]]=l?s[3].call(this,l.replace(s[1],s[2])):a):this[s]=l||a;d+=2}},J=function(e,t){for(var n in t)if(typeof t[n]===c&&t[n].length>0){for(var r=0;r<t[n].length;r++)if(Q(t[n][r],e))return"?"===n?a:n}else if(Q(t[n],e))return"?"===n?a:n;return e},X={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},G={browser:[[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i],[v,[p,"Chrome"]],[/edg(?:e|ios|a)?\\/([\\w\\.]+)/i],[v,[p,"Edge"]],[/(opera mini)\\/([-\\w\\.]+)/i,/(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,/(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i],[p,v],[/opios[\\/ ]+([\\w\\.]+)/i],[v,[p,D+" Mini"]],[/\\bopr\\/([\\w\\.]+)/i],[v,[p,D]],[/(kindle)\\/([\\w\\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i,/(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i,/(?:ms|\\()(ie) ([\\w\\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,/(heytap|ovi)browser\\/([\\d\\.]+)/i,/(weibo)__([\\d\\.]+)/i],[p,v],[/(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i],[v,[p,"UC"+O]],[/microm.+\\bqbcore\\/([\\w\\.]+)/i,/\\bqbcore\\/([\\w\\.]+).+microm/i],[v,[p,"WeChat(Win) Desktop"]],[/micromessenger\\/([\\w\\.]+)/i],[v,[p,"WeChat"]],[/konqueror\\/([\\w\\.]+)/i],[v,[p,"Konqueror"]],[/trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i],[v,[p,"IE"]],[/ya(?:search)?browser\\/([\\w\\.]+)/i],[v,[p,"Yandex"]],[/(avast|avg)\\/([\\w\\.]+)/i],[[p,/(.+)/,"$1 Secure "+O],v],[/\\bfocus\\/([\\w\\.]+)/i],[v,[p,N+" Focus"]],[/\\bopt\\/([\\w\\.]+)/i],[v,[p,D+" Touch"]],[/coc_coc\\w+\\/([\\w\\.]+)/i],[v,[p,"Coc Coc"]],[/dolfin\\/([\\w\\.]+)/i],[v,[p,"Dolphin"]],[/coast\\/([\\w\\.]+)/i],[v,[p,D+" Coast"]],[/miuibrowser\\/([\\w\\.]+)/i],[v,[p,"MIUI "+O]],[/fxios\\/([-\\w\\.]+)/i],[v,[p,N]],[/\\bqihu|(qi?ho?o?|360)browser/i],[[p,"360 "+O]],[/(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i],[[p,/(.+)/,"$1 "+O],v],[/(comodo_dragon)\\/([\\w\\.]+)/i],[[p,/_/g," "],v],[/(electron)\\/([\\w\\.]+) safari/i,/(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i],[p,v],[/(metasr)[\\/ ]?([\\w\\.]+)/i,/(lbbrowser)/i,/\\[(linkedin)app\\]/i],[p],[/((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i],[[p,F],v],[/(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,/(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,/safari (line)\\/([\\w\\.]+)/i,/\\b(line)\\/([\\w\\.]+)\\/iab/i,/(chromium|instagram)[\\/ ]([-\\w\\.]+)/i],[p,v],[/\\bgsa\\/([\\w\\.]+) .*safari\\//i],[v,[p,"GSA"]],[/musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i],[v,[p,"TikTok"]],[/headlesschrome(?:\\/([\\w\\.]+)| )/i],[v,[p,j+" Headless"]],[/ wv\\).+(chrome)\\/([\\w\\.]+)/i],[[p,j+" WebView"],v],[/droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i],[v,[p,"Android "+O]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i],[p,v],[/version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i],[v,[p,"Mobile Safari"]],[/version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i],[v,p],[/webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i],[p,[v,J,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\\/([\\w\\.]+)/i],[p,v],[/(navigator|netscape\\d?)\\/([-\\w\\.]+)/i],[[p,"Netscape"],v],[/mobile vr; rv:([\\w\\.]+)\\).+firefox/i],[v,[p,N+" Reality"]],[/ekiohf.+(flow)\\/([\\w\\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,/(firefox)\\/([\\w\\.]+)/i,/(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,/(links) \\(([\\w\\.]+)/i,/panasonic;(viera)/i],[p,v],[/(cobalt)\\/([\\w\\.]+)/i],[p,[v,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i],[[g,"amd64"]],[/(ia32(?=;))/i],[[g,W]],[/((?:i[346]|x)86)[;\\)]/i],[[g,"ia32"]],[/\\b(aarch64|arm(v?8e?l?|_?64))\\b/i],[[g,"arm64"]],[/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i],[[g,"armhf"]],[/windows (ce|mobile); ppc;/i],[[g,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i],[[g,/ower/,"",W]],[/(sun4\\w)[;\\)]/i],[[g,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i],[[g,W]]],device:[[/\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i],[d,[f,A],[m,w]],[/\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,/samsung[- ]([-\\w]+)/i,/sec-(sgh\\w+)/i],[d,[f,A],[m,h]],[/(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i],[d,[f,S],[m,h]],[/\\((ipad);[-\\w\\),; ]+apple/i,/applecoremedia\\/[\\w\\.]+ \\((ipad)/i,/\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i],[d,[f,S],[m,w]],[/(macintosh);/i],[d,[f,S]],[/\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i],[d,[f,L],[m,h]],[/\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i],[d,[f,P],[m,w]],[/(?:huawei|honor)([-\\w ]+)[;\\)]/i,/\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i],[d,[f,P],[m,h]],[/\\b(poco[\\w ]+)(?: bui|\\))/i,/\\b; (\\w+) build\\/hm\\1/i,/\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,/\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,/\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i],[[d,/_/g," "],[f,R],[m,h]],[/\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i],[[d,/_/g," "],[f,R],[m,w]],[/; (\\w+) bui.+ oppo/i,/\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i],[d,[f,"OPPO"],[m,h]],[/vivo (\\w+)(?: bui|\\))/i,/\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i],[d,[f,"Vivo"],[m,h]],[/\\b(rmx[12]\\d{3})(?: bui|;|\\))/i],[d,[f,"Realme"],[m,h]],[/\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,/\\bmot(?:orola)?[- ](\\w*)/i,/((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i],[d,[f,C],[m,h]],[/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],[d,[f,C],[m,w]],[/((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i],[d,[f,M],[m,w]],[/(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,/\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,/\\blg-?([\\d\\w]+) bui/i],[d,[f,M],[m,h]],[/(ideatab[-\\w ]+)/i,/lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i],[d,[f,"Lenovo"],[m,w]],[/(?:maemo|nokia).*(n900|lumia \\d+)/i,/nokia[-_ ]?([-\\w\\.]*)/i],[[d,/_/g," "],[f,"Nokia"],[m,h]],[/(pixel c)\\b/i],[d,[f,I],[m,w]],[/droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i],[d,[f,I],[m,h]],[/droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i],[d,[f,U],[m,h]],[/sony tablet [ps]/i,/\\b(?:sony)?sgp\\w+(?: bui|\\))/i],[[d,"Xperia Tablet"],[f,U],[m,w]],[/ (kb2005|in20[12]5|be20[12][59])\\b/i,/(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i],[d,[f,"OnePlus"],[m,h]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,/(kf[a-z]+)( bui|\\)).+silk\\//i],[d,[f,_],[m,w]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i],[[d,/(.+)/g,"Fire Phone $1"],[f,_],[m,h]],[/(playbook);[-\\w\\),; ]+(rim)/i],[d,f,[m,w]],[/\\b((?:bb[a-f]|st[hv])100-\\d)/i,/\\(bb10; (\\w+)/i],[d,[f,x],[m,h]],[/(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i],[d,[f,E],[m,w]],[/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],[d,[f,E],[m,h]],[/(nexus 9)/i],[d,[f,"HTC"],[m,w]],[/(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,/(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i],[f,[d,/_/g," "],[m,h]],[/droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i],[d,[f,"Acer"],[m,w]],[/droid.+; (m[1-5] note) bui/i,/\\bmz-([-\\w]{2,})/i],[d,[f,"Meizu"],[m,h]],[/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,/(hp) ([\\w ]+\\w)/i,/(asus)-?(\\w+)/i,/(microsoft); (lumia[\\w ]+)/i,/(lenovo)[-_ ]?([-\\w]+)/i,/(jolla)/i,/(oppo) ?([\\w ]+) bui/i],[f,d,[m,h]],[/(kobo)\\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\\/([\\w\\.]+)/i,/(nook)[\\w ]+build\\/(\\w+)/i,/(dell) (strea[kpr\\d ]*[\\dko])/i,/(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,/(trinity)[- ]*(t\\d{3}) bui/i,/(gigaset)[- ]+(q\\w{1,9}) bui/i,/(vodafone) ([\\w ]+)(?:\\)| bui)/i],[f,d,[m,w]],[/(surface duo)/i],[d,[f,B],[m,w]],[/droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i],[d,[f,"Fairphone"],[m,h]],[/(u304aa)/i],[d,[f,"AT&T"],[m,h]],[/\\bsie-(\\w*)/i],[d,[f,"Siemens"],[m,h]],[/\\b(rct\\w+) b/i],[d,[f,"RCA"],[m,w]],[/\\b(venue[\\d ]{2,7}) b/i],[d,[f,"Dell"],[m,w]],[/\\b(q(?:mv|ta)\\w+) b/i],[d,[f,"Verizon"],[m,w]],[/\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i],[d,[f,"Barnes & Noble"],[m,w]],[/\\b(tm\\d{3}\\w+) b/i],[d,[f,"NuVision"],[m,w]],[/\\b(k88) b/i],[d,[f,"ZTE"],[m,w]],[/\\b(nx\\d{3}j) b/i],[d,[f,"ZTE"],[m,h]],[/\\b(gen\\d{3}) b.+49h/i],[d,[f,"Swiss"],[m,h]],[/\\b(zur\\d{3}) b/i],[d,[f,"Swiss"],[m,w]],[/\\b((zeki)?tb.*\\b) b/i],[d,[f,"Zeki"],[m,w]],[/\\b([yr]\\d{2}) b/i,/\\b(dragon[- ]+touch |dt)(\\w{5}) b/i],[[f,"Dragon Touch"],d,[m,w]],[/\\b(ns-?\\w{0,9}) b/i],[d,[f,"Insignia"],[m,w]],[/\\b((nxa|next)-?\\w{0,9}) b/i],[d,[f,"NextBook"],[m,w]],[/\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[f,"Voice"],d,[m,h]],[/\\b(lvtel\\-)?(v1[12]) b/i],[[f,"LvTel"],d,[m,h]],[/\\b(ph-1) /i],[d,[f,"Essential"],[m,h]],[/\\b(v(100md|700na|7011|917g).*\\b) b/i],[d,[f,"Envizen"],[m,w]],[/\\b(trio[-\\w\\. ]+) b/i],[d,[f,"MachSpeed"],[m,w]],[/\\btu_(1491) b/i],[d,[f,"Rotor"],[m,w]],[/(shield[\\w ]+) b/i],[d,[f,"Nvidia"],[m,w]],[/(sprint) (\\w+)/i],[f,d,[m,h]],[/(kin\\.[onetw]{3})/i],[[d,/\\./g," "],[f,B],[m,h]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i],[d,[f,q],[m,w]],[/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],[d,[f,q],[m,h]],[/smart-tv.+(samsung)/i],[f,[m,y]],[/hbbtv.+maple;(\\d+)/i],[[d,/^/,"SmartTV"],[f,A],[m,y]],[/(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i],[[f,M],[m,y]],[/(apple) ?tv/i],[f,[d,S+" TV"],[m,y]],[/crkey/i],[[d,j+"cast"],[f,I],[m,y]],[/droid.+aft(\\w)( bui|\\))/i],[d,[f,_],[m,y]],[/\\(dtv[\\);].+(aquos)/i,/(aquos-tv[\\w ]+)\\)/i],[d,[f,L],[m,y]],[/(bravia[\\w ]+)( bui|\\))/i],[d,[f,U],[m,y]],[/(mitv-\\w{5}) bui/i],[d,[f,R],[m,y]],[/Hbbtv.*(technisat) (.*);/i],[f,d,[m,y]],[/\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,/hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i],[[f,H],[d,H],[m,y]],[/\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i],[[m,y]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[f,d,[m,b]],[/droid.+; (shield) bui/i],[d,[f,"Nvidia"],[m,b]],[/(playstation [345portablevi]+)/i],[d,[f,U],[m,b]],[/\\b(xbox(?: one)?(?!; xbox))[\\); ]/i],[d,[f,B],[m,b]],[/((pebble))app/i],[f,d,[m,T]],[/(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i],[d,[f,S],[m,T]],[/droid.+; (glass) \\d/i],[d,[f,I],[m,T]],[/droid.+; (wt63?0{2,3})\\)/i],[d,[f,q],[m,T]],[/(quest( 2| pro)?)/i],[d,[f,F],[m,T]],[/(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i],[f,[m,k]],[/(aeobc)\\b/i],[d,[f,_],[m,k]],[/droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i],[d,[m,h]],[/droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i],[d,[m,w]],[/\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i],[[m,w]],[/(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i],[[m,h]],[/(android[-\\w\\. ]{0,9});.+buil/i],[d,[f,"Generic"]]],engine:[[/windows.+ edge\\/([\\w\\.]+)/i],[v,[p,"EdgeHTML"]],[/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i],[v,[p,"Blink"]],[/(presto)\\/([\\w\\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i,/ekioh(flow)\\/([\\w\\.]+)/i,/(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,/(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,/\\b(libweb)/i],[p,v],[/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i],[v,p]],os:[[/microsoft (windows) (vista|xp)/i],[p,v],[/(windows) nt 6\\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i,/(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i],[p,[v,J,X]],[/(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],[[p,"Windows"],[v,J,X]],[/ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,/ios;fbsv\\/([\\d\\.]+)/i,/cfnetwork\\/.+darwin/i],[[v,/_/g,"."],[p,"iOS"]],[/(mac os x) ?([\\w\\. ]*)/i,/(macintosh|mac_powerpc\\b)(?!.+haiku)/i],[[p,K],[v,/_/g,"."]],[/droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i],[v,p],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,/(blackberry)\\w*\\/([\\w\\.]*)/i,/(tizen|kaios)[\\/ ]([\\w\\.]+)/i,/\\((series40);/i],[p,v],[/\\(bb(10);/i],[v,[p,x]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i],[v,[p,"Symbian"]],[/mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i],[v,[p,N+" OS"]],[/web0s;.+rt(tv)/i,/\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i],[v,[p,"webOS"]],[/watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i],[v,[p,"watchOS"]],[/crkey\\/([\\d\\.]+)/i],[v,[p,j+"cast"]],[/(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i],[[p,z],v],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\\/(\\d+\\.[\\w\\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\\);]+)/i,/\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,/(mint)[\\/\\(\\) ]?(\\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,/(hurd|linux) ?([\\w\\.]*)/i,/(gnu) ?([\\w\\.]*)/i,/\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i,/(haiku) (\\w+)/i],[p,v],[/(sunos) ?([\\w\\.\\d]*)/i],[[p,"Solaris"],v],[/((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,/(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,/\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\\w\\.]*)/i],[p,v]]},Z=function(e,t){if(typeof e===c&&(t=e,e=a),!(this instanceof Z))return new Z(e,t).getResult();var n=typeof i!==s&&i.navigator?i.navigator:a,r=e||(n&&n.userAgent?n.userAgent:""),b=n&&n.userAgentData?n.userAgentData:a,y=t?function(e,t){var n={};for(var r in e)t[r]&&t[r].length%2==0?n[r]=t[r].concat(e[r]):n[r]=e[r];return n}(G,t):G,T=n&&n.userAgent==r;return this.getBrowser=function(){var e,t={};return t[p]=a,t[v]=a,V.call(t,r,y.browser),t[l]=typeof(e=t[v])===u?e.replace(/[^\\d\\.]/g,"").split(".")[0]:a,T&&n&&n.brave&&typeof n.brave.isBrave==o&&(t[p]="Brave"),t},this.getCPU=function(){var e={};return e[g]=a,V.call(e,r,y.cpu),e},this.getDevice=function(){var e={};return e[f]=a,e[d]=a,e[m]=a,V.call(e,r,y.device),T&&!e[m]&&b&&b.mobile&&(e[m]=h),T&&"Macintosh"==e[d]&&n&&typeof n.standalone!==s&&n.maxTouchPoints&&n.maxTouchPoints>2&&(e[d]="iPad",e[m]=w),e},this.getEngine=function(){var e={};return e[p]=a,e[v]=a,V.call(e,r,y.engine),e},this.getOS=function(){var e={};return e[p]=a,e[v]=a,V.call(e,r,y.os),T&&!e[p]&&b&&"Unknown"!=b.platform&&(e[p]=b.platform.replace(/chrome os/i,z).replace(/macos/i,K)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return r},this.setUA=function(e){return r=typeof e===u&&e.length>350?H(e,350):e,this},this.setUA(r),this};Z.VERSION="1.0.35",Z.BROWSER=$([p,v,l]),Z.CPU=$([g]),Z.DEVICE=$([d,f,m,b,h,y,w,T,k]),Z.ENGINE=Z.OS=$([p,v]),typeof t!==s?(e.exports&&(t=e.exports=Z),t.UAParser=Z):n.amdO?(r=function(){return Z}.call(t,n,t,e))===a||(e.exports=r):typeof i!==s&&(i.UAParser=Z);var Y=typeof i!==s&&(i.jQuery||i.Zepto);if(Y&&!Y.ua){var ee=new Z;Y.ua=ee.getResult(),Y.ua.get=function(){return ee.getUA()},Y.ua.set=function(e){ee.setUA(e);var t=ee.getResult();for(var n in t)Y.ua[n]=t[n]}}}("object"==typeof window?window:this)}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.amdO={},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{ActionType:()=>f,AmplitudePlatformName:()=>g,AnalyticsEventImportance:()=>l,AnalyticsQueries:()=>e,AuthStatus:()=>b,ComponentType:()=>m,IThresholdTier:()=>Jt,MetricType:()=>d,PlatformName:()=>v,SessionActions:()=>h,SessionAutomatedEvents:()=>w,SessionRank:()=>y,SubjectType:()=>p,UserTypeCommerce:()=>c,UserTypeInsto:()=>i,UserTypeRetail:()=>t,UserTypeRetailBusinessBanking:()=>s,UserTypeRetailEmployeeInternal:()=>a,UserTypeRetailEmployeePersonal:()=>o,UserTypeWallet:()=>u,automatedEvents:()=>xn,automatedMappingConfig:()=>In,clearMarkEntry:()=>Vn,clearPerformanceMarkEntries:()=>Xn,config:()=>A,createEventConfig:()=>On,createNewSpan:()=>Ln,createNewTrace:()=>Un,device:()=>W,endPerfMark:()=>Jn,exposeExperiment:()=>wn,flushQueue:()=>or,generateUUID:()=>V,getAnalyticsHeaders:()=>sr,getReferrerData:()=>le,getTracingHeaders:()=>An,getTracingId:()=>Dn,getUrlHostname:()=>pe,getUrlParams:()=>me,getUrlPathname:()=>fe,getUserContext:()=>ar,identify:()=>Tn,identifyFlow:()=>xe,identity:()=>H,identityFlow:()=>Se,incrementUjNavigation:()=>an,init:()=>yn,initNextJsTrackPageview:()=>_n,initTrackPageview:()=>kn,isEventKeyFormatValid:()=>we,isSessionEnded:()=>pt,location:()=>re,logEvent:()=>$t,logMetric:()=>Ht,logPageView:()=>on,logTrace:()=>Rn,markNTBT:()=>tn,markStep:()=>nn,markStepOnce:()=>rn,onVisibilityChange:()=>ln,optIn:()=>En,optOut:()=>Sn,perfMark:()=>Wn,persistentData:()=>oe,postMessage:()=>K,recordSessionDuration:()=>pn,removeFromIdentifyFlow:()=>Ee,savePersistentData:()=>st,sendScheduledEvents:()=>Bt,setBreadcrumbs:()=>ie,setConfig:()=>U,setLocation:()=>ae,setPagePath:()=>ve,setPageview:()=>Kt,setPersistentData:()=>se,setSessionStart:()=>dt,setTime:()=>Ue,startPerfMark:()=>Hn,timeStone:()=>Le,useEventLogger:()=>Yn,useLogEventOnMount:()=>tr,usePerformanceMarks:()=>rr});let e=function(e){return e.fbclid="fbclid",e.gclid="gclid",e.msclkid="msclkid",e.ptclid="ptclid",e.ttclid="ttclid",e.utm_source="utm_source",e.utm_medium="utm_medium",e.utm_campaign="utm_campaign",e.utm_term="utm_term",e.utm_content="utm_content",e}({});const t=0,i=1,a=2,o=3,s=4,c=5,u=6;let l=function(e){return e.low="low",e.high="high",e}({}),d=function(e){return e.count="count",e.rate="rate",e.gauge="gauge",e.distribution="distribution",e.histogram="histogram",e}({}),p=function(e){return e.commerce_merchant="commerce_merchant",e.device="device",e.edp_fingerprint_id="edp_fingerprint_id",e.nft_user="nft_user",e.user="user",e.wallet_user="wallet_user",e.uuid="user_uuid",e}({}),m=function(e){return e.unknown="unknown",e.banner="banner",e.button="button",e.card="card",e.chart="chart",e.content_script="content_script",e.dropdown="dropdown",e.link="link",e.page="page",e.modal="modal",e.table="table",e.search_bar="search_bar",e.service_worker="service_worker",e.text="text",e.text_input="text_input",e.tray="tray",e.checkbox="checkbox",e.icon="icon",e}({}),f=function(e){return e.unknown="unknown",e.blur="blur",e.click="click",e.change="change",e.dismiss="dismiss",e.focus="focus",e.hover="hover",e.select="select",e.measurement="measurement",e.move="move",e.process="process",e.render="render",e.scroll="scroll",e.view="view",e.search="search",e.keyPress="keyPress",e}({}),v=function(e){return e.unknown="unknown",e.web="web",e.android="android",e.ios="ios",e.mobile_web="mobile_web",e.tablet_web="tablet_web",e.server="server",e.windows="windows",e.macos="macos",e.extension="extension",e}({}),g=function(e){return e.web="Web",e.ios="iOS",e.android="Android",e}({}),b=function(e){return e[e.notLoggedIn=0]="notLoggedIn",e[e.loggedIn=1]="loggedIn",e}({}),h=function(e){return e.ac="ac",e.af="af",e.ah="ah",e.al="al",e.am="am",e.ar="ar",e.as="as",e}({}),w=function(e){return e.pv="pv",e}({}),y=function(e){return e.xs="xs",e.s="s",e.m="m",e.l="l",e.xl="xl",e.xxl="xxl",e}({});const T="https://analytics-service-dev.cbhq.net",k=3e5,_=5e3,S="analytics-db",E="experiment-exposure-db",x="Analytics SDK:",O=Object.values(e),j="pageview",N="session_duration",I={navigationTiming:{eventName:"perf_navigation_timing"},redirectTime:{eventName:"perf_redirect_time"},RT:{eventName:"perf_redirect_time"},TTFB:{eventName:"perf_time_to_first_byte"},networkInformation:{eventName:"perf_network_information"},storageEstimate:{eventName:"perf_storage_estimate"},FCP:{eventName:"perf_first_contentful_paint"},FID:{eventName:"perf_first_input_delay"},LCP:{eventName:"perf_largest_contentful_paint"},CLS:{eventName:"perf_cumulative_layout_shift"},TBT:{eventName:"perf_total_blocking_time"},NTBT:{eventName:"perf_navigation_total_blocking_time"},INP:{eventName:"perf_interact_to_next_paint"},ET:{eventName:"perf_element_timing"},userJourneyStep:{eventName:"perf_user_journey_step"}},P="1",M="web";function B(){return B=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},B.apply(this,arguments)}const C=/^(https?:\\/\\/)/;function D(e){return{eventsEndpoint:e+"/amp",metricsEndPoint:e+"/metrics",exposureEndpoint:e+"/track-exposures",tracesEndpoint:e+"/traces"}}const A=B({authCookie:"logged_in",amplitudeApiKey:"",batchEventsPeriod:_,batchEventsThreshold:30,batchMetricsPeriod:_,batchMetricsThreshold:30,batchTracesPeriod:_,batchTracesThreshold:30,headers:{},interactionManager:null,isAlwaysAuthed:!1,isProd:!1,isInternalApplication:!1,onError:(e,t)=>{console.error(x,e,t)},platform:v.unknown,projectName:"",ricTimeoutScheduleEvent:1e3,ricTimeoutSetDevice:500,showDebugLogging:!1,trackUserId:!1,version:null,apiEndpoint:T},D(T),{steps:{}}),L=[].reduce(((e,t)=>n=>e(t(n))),(e=>{if(!e.isProd)return e.isInternalApplication?(e.apiEndpoint="https://analytics-service-internal-dev.cbhq.net",B({},e,D(e.apiEndpoint))):e;const t=(e=>e.apiEndpoint?C.test(e.apiEndpoint)?e.apiEndpoint:\`https://\${e.apiEndpoint}\`:e.isInternalApplication?"https://analytics-service-internal.cbhq.net":"https://as.coinbase.com")(e);return B({},e,{apiEndpoint:t},D(t))})),U=e=>{const{batchEventsThreshold:t,batchMetricsThreshold:n,batchTracesThreshold:r}=e,i=[t,n,r];for(const e of i)if((e||0)>30){console.warn("You are setting the threshhold for the batch limit to be greater than 30. This may cause request overload.");break}Object.assign(A,L(e))},R=[v.web,v.mobile_web,v.tablet_web];function q(){return"android"===A.platform}function F(){return"ios"===A.platform}function z(){return R.includes(A.platform)}function K(e){if(z()&&navigator&&"serviceWorker"in navigator&&navigator.serviceWorker.controller)try{navigator.serviceWorker.controller.postMessage(e)}catch(e){e instanceof Error&&A.onError(e)}}var $=n(353),Q=n.n($);const W={amplitudeOSName:null,amplitudeOSVersion:null,amplitudeDeviceModel:null,amplitudePlatform:null,browserName:null,browserMajor:null,osName:null,userAgent:null,width:null,height:null},H={countryCode:null,deviceId:null,device_os:null,isOptOut:!1,languageCode:null,locale:null,jwt:null,session_lcc_id:null,userAgent:null,userId:null},V=e=>e?(e^16*Math.random()>>e/4).toString(16):"10000000-1000-4000-8000-100000000000".replace(/[018]/g,V),J=()=>A.isAlwaysAuthed||!!H.userId,X=()=>{const e={};return H.countryCode&&(e.country_code=H.countryCode),e},G=()=>{const{platform:e}=A;if(e===v.web)switch(!0){case window.matchMedia("(max-width: 560px)").matches:return v.mobile_web;case window.matchMedia("(max-width: 1024px, min-width: 561px)").matches:return v.tablet_web}return e},Z=()=>{var e,t,n,r,i;z()?("requestIdleCallback"in window?window.requestIdleCallback(ne,{timeout:A.ricTimeoutSetDevice}):ne(),W.amplitudePlatform=g.web,W.userAgent=(null==(e=window)||null==(e=e.navigator)?void 0:e.userAgent)||null,ee({height:null!=(t=null==(n=window)?void 0:n.innerHeight)?t:null,width:null!=(r=null==(i=window)?void 0:i.innerWidth)?r:null})):F()?(W.amplitudePlatform=g.ios,W.userAgent=H.userAgent,W.userAgent&&ne()):q()&&(W.userAgent=H.userAgent,W.amplitudePlatform=g.android,W.userAgent&&ne())},Y=e=>{Object.assign(H,e),z()&&K({identity:{isAuthed:!!H.userId,locale:H.locale||null}})},ee=e=>{W.height=e.height,W.width=e.width},te=()=>{U({platform:G()}),z()&&K({config:{platform:A.platform}})},ne=()=>{var e;performance.mark&&performance.mark("ua_parser_start");const t=new(Q())(null!=(e=W.userAgent)?e:"").getResult();W.browserName=t.browser.name||null,W.browserMajor=t.browser.major||null,W.osName=t.os.name||null,W.amplitudeOSName=W.browserName,W.amplitudeOSVersion=W.browserMajor,W.amplitudeDeviceModel=W.osName,K({device:{browserName:W.browserName,osName:W.osName}}),performance.mark&&(performance.mark("ua_parser_end"),performance.measure("ua_parser","ua_parser_start","ua_parser_end"))},re={breadcrumbs:[],initialUAAData:{},pageKey:"",pageKeyRegex:{},pagePath:"",prevPageKey:"",prevPagePath:""};function ie(e){Object.assign(re,{breadcrumbs:e})}function ae(e){Object.assign(re,e)}const oe={eventId:0,sequenceNumber:0,sessionId:0,lastEventTime:0,sessionStart:0,sessionUUID:null,userId:null,ac:0,af:0,ah:0,al:0,am:0,ar:0,as:0,pv:0};function se(e){Object.assign(oe,e)}function ce(){var e,t;return null!=(e=null==(t=document)?void 0:t.referrer)?e:""}function ue(){return ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ue.apply(this,arguments)}const le=()=>{const e=ce();if(!e)return{};const t=new URL(e);return t.hostname===pe()?{}:{referrer:e,referring_domain:t.hostname}},de=()=>{const e=new URLSearchParams(me()),t={};return O.forEach((n=>{e.has(n)&&(t[n]=(e.get(n)||"").toLowerCase())})),t},pe=()=>{var e;return(null==(e=window)||null==(e=e.location)?void 0:e.hostname)||""},me=()=>{var e;return(null==(e=window)||null==(e=e.location)?void 0:e.search)||""},fe=()=>{var e;return(null==(e=window)||null==(e=e.location)?void 0:e.pathname)||""},ve=()=>{const e=A.overrideWindowLocation?re.pagePath:fe()+me();e&&e!==re.pagePath&&(e!==re.pagePath&&ge(),re.pagePath=e,re.pageKeyRegex&&Object.keys(re.pageKeyRegex).some((e=>{if(re.pageKeyRegex[e].test(re.pagePath))return re.pageKey=e,!0})))},ge=()=>{if(z()){const e=ce();if(!re.prevPagePath&&e){const t=new URL(e);if(t.hostname===pe())return void(re.prevPagePath=t.pathname)}}re.prevPagePath=re.pagePath,re.prevPageKey=re.pageKey},be=e=>{z()&&Object.assign(e,z()?(Object.keys(re.initialUAAData).length>0||(new URLSearchParams(me()),re.initialUAAData=ue({},(()=>{const e={};return O.forEach((t=>{oe[t]&&(e[t]=oe[t])})),e})(),de(),le())),re.initialUAAData):re.initialUAAData)},he=/^[a-zd]+(_[a-zd]+)*$/;function we(e){return he.test(e)}function ye(){return ye=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ye.apply(this,arguments)}const Te=["action","component_type","component_name","context","logging_id"],ke=["num_non_hardware_accounts","ujs"],_e="ujs_",Se={};function Ee(e){e.forEach((e=>{ke.includes(e)&&delete Se[e]}))}function xe(e){var t;const n=Object.entries(e).reduce(((e,t)=>{const[n,r]=t;return!Te.includes(n)&&ke.includes(n)?we(n)?ye({},e,{[n]:r}):(A.onError(new Error("IdentityFlow property names must have snake case format"),{[n]:r}),e):e}),{});null!=(t=n.ujs)&&t.length&&(n.ujs=n.ujs.map((e=>\`\${_e}\${e}\`))),Object.assign(Se,n)}function Oe(){return A.platform!==v.unknown||(A.onError(new Error("SDK platform not initialized")),!1)}const je={eventsQueue:[],eventsScheduled:!1,metricsQueue:[],metricsScheduled:!1,tracesQueue:[],tracesScheduled:!1};function Ne(e){Object.assign(je,e)}const Ie={ac:0,af:0,ah:0,al:0,am:0,ar:0,as:0,pv:0,sqs:0},Pe={ac:20,af:5,ah:1,al:1,am:0,ar:10,as:20},Me={pv:25},Be={xs:0,s:1,m:1,l:2,xl:2,xxl:2},Ce=e=>e<15?y.xs:e<60?y.s:e<240?y.m:e<960?y.l:e<3840?y.xl:y.xxl,De=e=>{Object.assign(Ie,e)};function Ae(){return(new Date).getTime()}const Le={timeStart:Ae(),timeOnPagePath:0,timeOnPageKey:0,prevTimeOnPagePath:0,prevTimeOnPageKey:0,sessionDuration:0,sessionEnd:0,sessionStart:0,prevSessionDuration:0};function Ue(e){Object.assign(Le,e)}const Re=(e,t)=>t.some((t=>e instanceof t));let qe,Fe;const ze=new WeakMap,Ke=new WeakMap,$e=new WeakMap,Qe=new WeakMap,We=new WeakMap;let He={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return Ke.get(e);if("objectStoreNames"===t)return e.objectStoreNames||$e.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return Je(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function Ve(e){return"function"==typeof e?(t=e)!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(Fe||(Fe=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(Xe(this),e),Je(ze.get(this))}:function(...e){return Je(t.apply(Xe(this),e))}:function(e,...n){const r=t.call(Xe(this),e,...n);return $e.set(r,e.sort?e.sort():[e]),Je(r)}:(e instanceof IDBTransaction&&function(e){if(Ke.has(e))return;const t=new Promise(((t,n)=>{const r=()=>{e.removeEventListener("complete",i),e.removeEventListener("error",a),e.removeEventListener("abort",a)},i=()=>{t(),r()},a=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",i),e.addEventListener("error",a),e.addEventListener("abort",a)}));Ke.set(e,t)}(e),Re(e,qe||(qe=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(e,He):e);var t}function Je(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,n)=>{const r=()=>{e.removeEventListener("success",i),e.removeEventListener("error",a)},i=()=>{t(Je(e.result)),r()},a=()=>{n(e.error),r()};e.addEventListener("success",i),e.addEventListener("error",a)}));return t.then((t=>{t instanceof IDBCursor&&ze.set(t,e)})).catch((()=>{})),We.set(t,e),t}(e);if(Qe.has(e))return Qe.get(e);const t=Ve(e);return t!==e&&(Qe.set(e,t),We.set(t,e)),t}const Xe=e=>We.get(e),Ge=["get","getKey","getAll","getAllKeys","count"],Ze=["put","add","delete","clear"],Ye=new Map;function et(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(Ye.get(t))return Ye.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,i=Ze.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!i&&!Ge.includes(n))return;const a=async function(e,...t){const a=this.transaction(e,i?"readwrite":"readonly");let o=a.store;return r&&(o=o.index(t.shift())),(await Promise.all([o[n](...t),i&&a.done]))[0]};return Ye.set(t,a),a}var tt;tt=He,He={...tt,get:(e,t,n)=>et(e,t)||tt.get(e,t,n),has:(e,t)=>!!et(e,t)||tt.has(e,t)};const nt={isReady:!1,idbKeyval:null};function rt(e){Object.assign(nt,e)}const it={},at=async e=>{if(!nt.idbKeyval)return Promise.resolve(null);try{return await nt.idbKeyval.get(e)}catch(e){return A.onError(new Error("IndexedDB:Get:InternalError")),Promise.resolve(null)}},ot=async(e,t)=>{if(nt.idbKeyval)try{await nt.idbKeyval.set(e,t)}catch(e){A.onError(new Error("IndexedDB:Set:InternalError"))}},st=()=>{"server"!==A.platform&&(se({sessionStart:Le.sessionStart,ac:Ie.ac,af:Ie.af,ah:Ie.ah,al:Ie.al,am:Ie.am,ar:Ie.ar,as:Ie.as,pv:Ie.pv}),H.userId&&se({userId:H.userId}),ot(S,oe))},ct="rgb(5,177,105)",ut=e=>{const{metricName:t,data:n}=e,r=e.importance||l.low;if(!A.showDebugLogging||!console)return;const i=\`%c \${x}\`,a=\`color:\${ct};font-size:11px;\`,o=\`Importance: \${r}\`;console.group(i,a,t,o),n.forEach((e=>{e.event_type?console.log(e.event_type,e):console.log(e)})),console.groupEnd()},lt=e=>{const{metricName:t,data:n}=e,r=e.importance||l.low;if(!A.showDebugLogging||!console)return;const i=\`color:\${ct};font-size:11px;\`,a=\`%c \${x}\`,o=\`Importance: \${r}\`;console.log(a,i,t,n,o)},dt=()=>{const e=Ae();oe.sessionId&&oe.lastEventTime&&oe.sessionUUID&&!pt(e)||(oe.sessionId=e,oe.sessionUUID=V(),Ue({sessionStart:e}),lt({metricName:"Started new session:",data:{persistentData:oe,timeStone:Le}})),oe.lastEventTime=e},pt=e=>e-oe.lastEventTime>18e5;function mt(){return mt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mt.apply(this,arguments)}const ft=e=>{var t;(e=>{switch(e.action){case f.click:Ie.ac+=1;break;case f.focus:Ie.af+=1;break;case f.hover:Ie.ah+=1;break;case f.move:Ie.am+=1;break;case f.scroll:Ie.al+=1;break;case f.search:Ie.ar+=1;break;case f.select:Ie.as+=1}})(t=e),t.event_type!==j?t.event_type===N&&((e=>{if(!e.session_rank)return;const t=e.session_rank;Object.values(h).forEach((e=>{Ie.sqs+=Ie[e]*Pe[e]})),Object.values(w).forEach((e=>{Ie.sqs+=Ie[e]*Me[e]})),Ie.sqs*=Be[t]})(t),Object.assign(t,Ie),De({ac:0,af:0,ah:0,al:0,am:0,ar:0,as:0,pv:0,sqs:0})):Ie.pv+=1;const n=e.event_type;delete e.event_type;const r=e.deviceId?e.deviceId:null,i=e.timestamp;return delete e.timestamp,se({eventId:oe.eventId+1}),se({sequenceNumber:oe.sequenceNumber+1}),dt(),st(),{device_id:H.deviceId||r||null,user_id:H.userId,timestamp:i,event_id:oe.eventId,session_id:oe.sessionId||-1,event_type:n,version_name:A.version||null,platform:W.amplitudePlatform,os_name:W.amplitudeOSName,os_version:W.amplitudeOSVersion,device_model:W.amplitudeDeviceModel,language:H.languageCode,event_properties:mt({},e,{session_uuid:oe.sessionUUID,height:W.height,width:W.width}),user_properties:X(),uuid:V(),library:{name:"@cbhq/client-analytics",version:"10.6.0"},sequence_number:oe.sequenceNumber,user_agent:W.userAgent||H.userAgent}},vt=e=>e.map((e=>ft(e)));function gt(){return gt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gt.apply(this,arguments)}const bt=e=>e.map((e=>(e=>{const t=e.tags||{},n=gt({authed:J()?"true":"false",platform:A.platform},t,{project_name:A.projectName,version_name:A.version||null});return{metric_name:e.metricName,page_path:e.pagePath||null,value:e.value,tags:n,type:e.metricType}})(e))),ht=e=>0!==je.metricsQueue.length&&(je.metricsQueue.length>=A.batchMetricsThreshold||(je.metricsScheduled||(je.metricsScheduled=!0,setTimeout((()=>{je.metricsScheduled=!1,e(bt(je.metricsQueue)),je.metricsQueue=[]}),A.batchMetricsPeriod)),!1)),wt=e=>0!==je.tracesQueue.length&&(je.tracesQueue.length>=A.batchTracesThreshold||(je.tracesScheduled||(je.tracesScheduled=!0,setTimeout((()=>{je.tracesScheduled=!1,e(je.tracesQueue),je.tracesQueue=[]}),A.batchTracesPeriod)),!1)),yt=e=>{var t;z()&&null!=(t=window)&&t.requestIdleCallback?window.requestIdleCallback(e,{timeout:A.ricTimeoutScheduleEvent}):(q()||F())&&A.interactionManager?A.interactionManager.runAfterInteractions(e):e()};function Tt(){return Tt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Tt.apply(this,arguments)}const kt="application/x-www-form-urlencoded; charset=UTF-8",_t=e=>{const{data:t,importance:n,isJSON:r,onError:i,url:a}=e,o=r?"application/json":kt,s=n||l.low,c=r?JSON.stringify(t):new URLSearchParams(t).toString();function u(){const e=new XMLHttpRequest;e.open("POST",a,!0),Object.keys(A.headers||{}).forEach((t=>{e.setRequestHeader(t,A.headers[t])})),e.setRequestHeader("Content-Type",kt),H.jwt&&e.setRequestHeader("authorization",\`Bearer \${H.jwt}\`),e.send(c)}if(!z()||r||!("sendBeacon"in navigator)||s!==l.low||A.headers&&0!==Object.keys(A.headers).length)if(z()&&!r)u();else{const e=Tt({},A.headers,{"Content-Type":o});H.jwt&&(e.Authorization=\`Bearer \${H.jwt}\`),fetch(a,{method:"POST",mode:"no-cors",headers:e,body:c}).catch((e=>{i(e,{context:"AnalyticsSDKApiError"})}))}else{const e=new Blob([c],{type:kt});try{navigator.sendBeacon.bind(navigator)(a,e)||u()}catch(e){console.error(e),u()}}};var St=n(762),Et=n.n(St);const xt=(e,t,n)=>{const r=e||"";return Et()("2"+r+t+n)};function Ot(){return Ot=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ot.apply(this,arguments)}class jt extends Error{constructor(e){super(e),this.name="CircularJsonReference",this.message=e,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}class Nt extends jt{constructor(...e){super(...e),this.name="DomReferenceInAnalyticsEvent"}}function It(){return It=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},It.apply(this,arguments)}const Pt=(e,t=l.low)=>{var n;e&&je.eventsQueue.push(e),nt.isReady&&(!A.trackUserId||H.userId?(t===l.high||(n=Mt,0!==je.eventsQueue.length&&(je.eventsQueue.length>=A.batchEventsThreshold||(je.eventsScheduled||(je.eventsScheduled=!0,setTimeout((()=>{je.eventsScheduled=!1,n(vt(je.eventsQueue)),je.eventsQueue=[]}),A.batchEventsPeriod)),0))))&&Bt():je.eventsQueue.length>10&&(A.trackUserId=!1,A.onError(new Error("userId not set in Logged-in"))))},Mt=(e,t=l.low)=>{if(H.isOptOut||0===e.length)return;let n;try{n=JSON.stringify(e)}catch(t){const r=e.map((e=>e.event_type)).join(", "),[i,a]=(e=>{try{const n=[];for(const r of e){const e=Ot({},r);r.event_properties&&(e.event_properties=Ot({},e.event_properties,{currentTarget:null,target:null,relatedTarget:null,_dispatchInstances:null,_targetInst:null,view:(t=r.event_properties.view,["string","number","boolean"].includes(typeof t)?r.event_properties.view:null)})),n.push(e)}return[!0,JSON.stringify(n)]}catch(e){return[!1,""]}var t})(e);if(!i)return void A.onError(new jt(t instanceof Error?t.message:"unknown"),{listEventType:r});n=a,A.onError(new Nt("Found DOM element reference"),{listEventType:r,stringifiedEventData:n})}const r=Ae().toString(),i=It({},{e:n,v:"2",upload_time:r},{client:A.amplitudeApiKey,checksum:xt(A.amplitudeApiKey,n,r)});_t({url:A.eventsEndpoint,data:i,importance:t,onError:A.onError}),ut({metricName:"Batch Events",data:e,importance:t})},Bt=()=>{Mt(vt(je.eventsQueue)),Ne({eventsQueue:[]})};function Ct(){return Ct=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ct.apply(this,arguments)}const Dt=Object.values(f),At=Object.values(m),Lt=e=>Dt.includes(e)?e:f.unknown,Ut=e=>At.includes(e)?e:m.unknown,Rt=(e,t,n)=>{const r={auth:J()?b.loggedIn:b.notLoggedIn,action:Lt(e),component_type:Ut(t),logging_id:n,platform:A.platform,project_name:A.projectName};return"number"==typeof H.userTypeEnum&&(r.user_type_enum=H.userTypeEnum),r},qt=e=>{const t=Ae();if(!e)return A.onError(new Error("missing logData")),Ct({},Rt(f.unknown,m.unknown),{locale:H.locale,session_lcc_id:H.session_lcc_id,timestamp:t,time_start:Le.timeStart});const n=Ct({},e,Rt(e.action,e.componentType,e.loggingId),{locale:H.locale,session_lcc_id:H.session_lcc_id,timestamp:t,time_start:Le.timeStart});return delete n.componentType,delete n.loggingId,n},Ft={blacklistRegex:[],isEnabled:!1};function zt(){return{page_key:re.pageKey,page_path:re.pagePath,prev_page_key:re.prevPageKey,prev_page_path:re.prevPagePath}}function Kt(e){Object.assign(Ft,e)}function $t(e,t,n=l.low){if(H.isOptOut)return;if(!Oe())return;const r=qt(t);!function(e){Ft.isEnabled&&(ve(),Object.assign(e,zt()))}(r),be(r),function(e){Object.keys(Se).length>0&&Object.assign(e,Se)}(r),r.has_double_fired=!1,r.event_type=e,n===l.high?Pt(r,n):yt((()=>{Pt(r)}))}function Qt(e,t=!1){t?_t({url:A.metricsEndPoint,data:{metrics:e},isJSON:!0,onError:A.onError}):yt((()=>{_t({url:A.metricsEndPoint,data:{metrics:e},isJSON:!0,onError:A.onError})})),ut({metricName:"Batch Metrics",data:e})}function Wt(){return Wt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Wt.apply(this,arguments)}function Ht(e){if(!Oe())return;v.server!==A.platform&&!e.pagePath&&re.pagePath&&(e.pagePath=re.pagePath);const t=Object.keys(Se).length?Wt({},e.tags,Se):e.tags;t&&Object.assign(e,{tags:t}),je.metricsQueue.push(e),ht(Qt)&&(Qt(bt(je.metricsQueue)),je.metricsQueue=[])}function Vt(){return Vt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Vt.apply(this,arguments)}let Jt=function(e){return e.instant="instant",e.quick="quick",e.moderate="moderate",e.slow="slow",e.unavoidable="unavoidable",e}({});function Xt(e){return e.toLowerCase()}let Gt={};const Zt=(e,t)=>{null!=A&&A.onMarkStep&&A.onMarkStep(e,t),xe({ujs:t})};let Yt;const en={Perfume:()=>{},markStep:e=>{},markStepOnce:e=>{},incrementUjNavigation:()=>{}},tn=()=>{z()&&Yt&&Yt.markNTBT&&Yt.markNTBT()},nn=e=>{z()&&Yt&&en.markStep&&en.markStep(e)},rn=e=>{z()&&Yt&&en.markStepOnce&&en.markStepOnce(e)},an=()=>{z()&&Yt&&en.incrementUjNavigation&&en.incrementUjNavigation()};function on(e={callMarkNTBT:!0}){"unknown"!==A.platform&&(Ft.blacklistRegex.some((e=>e.test(fe())))||($t(j,{action:f.render,componentType:m.page}),e.callMarkNTBT&&tn()))}let sn=!1,cn=!1;const un=e=>{sn=!e.persisted},ln=(e,t="hidden",n=!1)=>{cn||(addEventListener("pagehide",un),addEventListener("beforeunload",(()=>{})),cn=!0),addEventListener("visibilitychange",(({timeStamp:n})=>{document.visibilityState===t&&e({timeStamp:n,isUnloading:sn})}),{capture:!0,once:n})},dn=36e3;function pn(){const e=pt(Ae());if(e&&(O.forEach((e=>{oe[e]&&delete oe[e]})),st()),!oe.lastEventTime||!Le.sessionStart||!e)return;const t=Math.round((oe.lastEventTime-Le.sessionStart)/1e3);if(t<1||t>dn)return;const n=Ce(t);$t(N,{action:f.measurement,componentType:m.page,session_duration:t,session_end:oe.lastEventTime,session_start:Le.sessionStart,session_rank:n})}function mn(){return mn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mn.apply(this,arguments)}const fn=[],vn=[],gn=()=>{const e=fn.shift();e&&e()},bn=()=>{const e=vn.shift();e&&e()};let hn={};function wn(e){const t=function(e){return{test_name:e.testName,group_name:e.group,subject_id:e.subjectId,exposed_at:Ae(),subject_type:e.subjectType,platform:A.platform}}(e);hn[e.testName]=hn[e.testName]||0,hn[e.testName]+k>Ae()?lt({metricName:\`Event: exposeExperiment \${e.testName} not sent\`,data:t}):(hn[e.testName]=Ae(),ot(E,hn),lt({metricName:\`Event: exposeExperiment \${e.testName} sent\`,data:t}),_t({url:A.exposureEndpoint,data:[t],onError:(t,n)=>{hn[e.testName]=0,ot(E,hn),A.onError(t,n)},isJSON:!0,importance:l.high}))}const yn=e=>{var t,r,i;U(e),z()&&(H.languageCode=(null==(t=navigator)?void 0:t.languages[0])||(null==(r=navigator)?void 0:r.language)||""),te(),(()=>{var e;if(z()&&null!=(e=window)&&e.indexedDB){const e=function(e,t,{blocked:n,upgrade:r,blocking:i,terminated:a}={}){const o=indexedDB.open(e,t),s=Je(o);return r&&o.addEventListener("upgradeneeded",(e=>{r(Je(o.result),e.oldVersion,e.newVersion,Je(o.transaction),e)})),n&&o.addEventListener("blocked",(e=>n(e.oldVersion,e.newVersion,e))),s.then((e=>{a&&e.addEventListener("close",(()=>a())),i&&e.addEventListener("versionchange",(e=>i(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),s}("keyval-store",1,{upgrade(e){e.createObjectStore("keyval")}});rt({idbKeyval:{get:async t=>(await e).get("keyval",t),set:async(t,n)=>(await e).put("keyval",n,t),delete:async t=>(await e).delete("keyval",t),keys:async()=>(await e).getAllKeys("keyval")}})}else rt({idbKeyval:{get:async e=>new Promise((t=>{t(it[e])})),set:async(e,t)=>new Promise((n=>{it[e]=t,n(e)})),delete:async e=>new Promise((()=>{delete it[e]})),keys:async()=>new Promise((e=>{e(Object.keys(it))}))}})})(),lt({metricName:"Initialized Analytics:",data:{deviceId:H.deviceId}}),fn.push((()=>{Pt()})),(async()=>{const e=await at(S);rt({isReady:!0}),gn(),e&&(bn(),se({eventId:e.eventId||oe.eventId,sequenceNumber:e.sequenceNumber||oe.sequenceNumber,sessionId:e.sessionId||oe.sessionId,lastEventTime:e.lastEventTime||oe.lastEventTime,sessionUUID:e.sessionUUID||oe.sessionUUID}),function(e){se(mn({},function(e){const t={};return O.forEach((n=>{e[n]&&(t[n]=e[n])})),t}(e),de()))}(e),Ue({sessionStart:e.sessionStart||oe.sessionStart}),De({ac:e.ac||Ie.ac,af:e.af||Ie.af,ah:e.ah||Ie.ah,al:e.al||Ie.al,am:e.am||Ie.am,ar:e.ar||Ie.ar,as:e.as||Ie.as,pv:e.pv||Ie.pv}),A.trackUserId&&Y({userId:e.userId||H.userId}),pn(),lt({metricName:"Initialized Analytics IndexedDB:",data:e}))})(),async function(){at(E).then((e=>{hn=null!=e?e:{}})).catch((e=>{e instanceof Error&&A.onError(e)}))}(),Z(),z()&&(ln((()=>{se({lastEventTime:Ae()}),st(),Bt()}),"hidden"),ln((()=>{pn()}),"visible")),z()&&(i=()=>{var e,t,n,r;te(),ee({width:null!=(e=null==(t=window)?void 0:t.innerWidth)?e:null,height:null!=(n=null==(r=window)?void 0:r.innerHeight)?n:null})},addEventListener("resize",(()=>{requestAnimationFrame((()=>{i()}))}))),(()=>{if(z())try{const e=n(2);en.markStep=e.markStep,en.markStepOnce=e.markStepOnce,en.incrementUjNavigation=e.incrementUjNavigation,Yt=new e.Perfume({analyticsTracker:e=>{const{data:t,attribution:n,metricName:r,navigatorInformation:i,rating:a}=e,o=I[r],s=(null==n?void 0:n.category)||null;if(!o&&!s)return;const c=(null==i?void 0:i.deviceMemory)||0,u=(null==i?void 0:i.hardwareConcurrency)||0,l=(null==i?void 0:i.isLowEndDevice)||!1,p=(null==i?void 0:i.isLowEndExperience)||!1,v=(null==i?void 0:i.serviceWorkerStatus)||"unsupported",g=Vt({deviceMemory:c,hardwareConcurrency:u,isLowEndDevice:l,isLowEndExperience:p,serviceWorkerStatus:v},Gt),b={is_low_end_device:l,is_low_end_experience:p,page_key:re.pageKey||"",save_data:t.saveData||!1,service_worker:v,is_perf_metric:!0};if("navigationTiming"===r)t&&"number"==typeof t.redirectTime&&Ht({metricName:I.redirectTime.eventName,metricType:d.histogram,tags:b,value:t.redirectTime||0});else if("TTFB"===r)$t(o.eventName,Vt({action:f.measurement,componentType:m.page,duration:t||null,vitalsScore:a||null},g)),Ht({metricName:I.TTFB.eventName,metricType:d.histogram,tags:Vt({},b),value:t}),a&&Ht({metricName:\`perf_web_vitals_ttfb_\${a}\`,metricType:d.count,tags:b,value:1});else if("networkInformation"===r)null!=t&&t.effectiveType&&(Gt=t,$t(o.eventName,{action:f.measurement,componentType:m.page,networkInformationDownlink:t.downlink,networkInformationEffectiveType:t.effectiveType,networkInformationRtt:t.rtt,networkInformationSaveData:t.saveData,navigatorDeviceMemory:c,navigatorHardwareConcurrency:u}));else if("storageEstimate"===r)$t(o.eventName,Vt({action:f.measurement,componentType:m.page},t,g)),Ht({metricName:"perf_storage_estimate_caches",metricType:d.histogram,tags:b,value:t.caches}),Ht({metricName:"perf_storage_estimate_indexed_db",metricType:d.histogram,tags:b,value:t.indexedDB});else if("CLS"===r)$t(o.eventName,Vt({action:f.measurement,componentType:m.page,score:100*t||null,vitalsScore:a||null},g)),a&&Ht({metricName:\`perf_web_vitals_cls_\${a}\`,metricType:d.count,tags:b,value:1});else if("FID"===r){const e=(null==n?void 0:n.performanceEntry)||null,r=parseInt((null==e?void 0:e.processingStart)||"");$t(o.eventName,Vt({action:f.measurement,componentType:m.page,duration:t||null,processingStart:null!=e&&e.processingStart?r:null,startTime:null!=e&&e.startTime?parseInt(e.startTime):null,vitalsScore:a||null},g)),a&&Ht({metricName:\`perf_web_vitals_fidVitals_\${a}\`,metricType:d.count,tags:b,value:1})}else"userJourneyStep"===r?($t("perf_user_journey_step",Vt({action:f.measurement,componentType:m.page,duration:t||null,rating:null!=a?a:null,step_name:(null==n?void 0:n.stepName)||""},g)),Ht({metricName:\`user_journey_step.\${A.projectName}.\${A.platform}.\${(null==n?void 0:n.stepName)||""}_vitals_\${a}\`,metricType:d.count,tags:b,value:1}),Ht({metricName:\`user_journey_step.\${A.projectName}.\${A.platform}.\${(null==n?void 0:n.stepName)||""}\`,metricType:d.distribution,tags:b,value:t||null})):I[r]&&t&&($t(o.eventName,Vt({action:f.measurement,componentType:m.page,duration:t||null,vitalsScore:a||null},g)),a&&(Ht({metricName:\`perf_web_vitals_\${Xt(r)}_\${a}\`,metricType:d.count,tags:b,value:1}),"LCP"===r&&Ht({metricName:\`perf_web_vitals_\${Xt(r)}\`,metricType:d.distribution,tags:b,value:t})))},maxMeasureTime:3e4,steps:A.steps,onMarkStep:Zt})}catch(e){e instanceof Error&&A.onError(e)}})()},Tn=e=>{Y(e),e.userAgent&&Z(),lt({metricName:"Identify:",data:{countryCode:H.countryCode,deviceId:H.deviceId,userId:H.userId}})},kn=({blacklistRegex:e,pageKeyRegex:t,browserHistory:n})=>{Kt({blacklistRegex:e||[],isEnabled:!0}),ae({pageKeyRegex:t}),on({callMarkNTBT:!1}),n.listen((()=>{on()}))},_n=({blacklistRegex:e,pageKeyRegex:t,nextJsRouter:n})=>{Kt({blacklistRegex:e||[],isEnabled:!0}),ae({pageKeyRegex:t}),on({callMarkNTBT:!1}),n.events.on("routeChangeComplete",(()=>{on()}))},Sn=()=>{Y({isOptOut:!0}),ot(S,{})},En=()=>{Y({isOptOut:!1})},xn={Button:{label:"cb_button",uuid:"e921a074-40e6-4371-8700-134d5cd633e6",componentType:m.button}};function On(e,t,n){return{componentName:e,actions:t,data:n}}function jn(){return jn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},jn.apply(this,arguments)}function Nn(e,t,n){const{componentName:r,data:i}=n;$t(e.label,jn({componentType:e.componentType,action:t,loggingId:e.uuid,component_name:r},i))}const In={actionMapping:{onPress:f.click,onHover:f.hover},handlers:{Button:{[f.click]:e=>Nn(xn.Button,f.click,e),[f.hover]:e=>Nn(xn.Button,f.hover,e)}}};function Pn(e,t=!1){t?_t({url:A.tracesEndpoint,data:{traces:e},isJSON:!0,onError:A.onError}):yt((()=>{_t({url:A.tracesEndpoint,data:{traces:e},isJSON:!0,onError:A.onError})})),ut({metricName:"Batch Traces",data:e})}function Mn(){return Mn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mn.apply(this,arguments)}const Bn=1e6;function Cn(e){return e*Bn}function Dn(e=function(){var e;return null==(e=window)?void 0:e.crypto}()){const t=new Uint32Array(2);return null==e||e.getRandomValues(t),((BigInt(t[0])<<BigInt(32))+BigInt(t[1])).toString()}function An(e,t){return{"x-datadog-origin":"rum","x-datadog-parent-id":t,"x-datadog-sampling-priority":"1","x-datadog-trace-id":e}}function Ln(e){var t;const{name:n,traceId:r,spanId:i,start:a,duration:o,resource:s,meta:c}=e;return{duration:o?Cn(o):0,name:n,resource:s,service:A.projectName,span_id:null!=i?i:Dn(),start:a?Cn(a):0,trace_id:null!=r?r:Dn(),parent_id:P,type:M,meta:Mn({platform:A.platform},re.pageKey?{page_key:re.pageKey}:{},null!=(t=Se.ujs)&&t.length?{last_ujs:Se.ujs[Se.ujs.length-1]}:{},null!=c?c:{})}}function Un(e){return[Ln(e)]}function Rn(e,t){Oe()&&function(e){return e.length>0}(e)&&(t&&function(e,t){e.forEach((e=>function(e,t){const n=Mn({},e.meta,t.meta),r={start:t.start?Cn(t.start):e.start,duration:t.duration?Cn(t.duration):e.duration};Object.assign(e,t,Mn({meta:n},r))}(e,t)))}(e,t),je.tracesQueue.push(e),wt(Pn)&&(Pn(je.tracesQueue),je.tracesQueue=[]))}function qn(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}function Fn(){return Fn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Fn.apply(this,arguments)}function zn(){return void 0!==typeof window&&"performance"in window&&"mark"in performance&&"getEntriesByName"in performance}function Kn(e,t){return\`perf_\${e}\${null!=t&&t.label?\`_\${t.label}\`:""}\`}function $n(e,t,n){return\`\${Kn(e,n)}__\${t}\`}let Qn={};function Wn(e,t,n){if(!zn())return;const r=$n(e,t,n);if(performance.mark(r),"end"===t){const t=Kn(e,n);!function(e,t,n){try{performance.measure(e,t,n)}catch(e){A.onError(e)}}(t,$n(e,"start",n),r);const i=performance.getEntriesByName(t).pop();i&&Ht(Fn({metricName:e,metricType:d.distribution,value:i.duration},null!=n&&n.tags?{tags:n.tags}:{}))}}function Hn(e,t){if(!zn())return;const n=$n(e,"start",t);Qn[n]||(Wn(e,"start",t),Qn[n]=!0)}function Vn(e,t){const n=$n(e,"start",t),r=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(Qn,[n].map(qn));Qn=r}function Jn(e,t){if(!zn())return;const n=$n(e,"start",t);Qn[n]&&(Wn(e,"end",t),Vn(e,t))}function Xn(){zn()&&(performance.clearMarks(),Qn={})}var Gn=n(784);function Zn(){return Zn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zn.apply(this,arguments)}function Yn(e,t,n=l.low){const r=(0,Gn.useRef)(t);return(0,Gn.useEffect)((()=>{r.current=t}),[t]),(0,Gn.useCallback)((t=>{$t(e,Zn({},r.current,t),n)}),[e,n])}function er(){return er=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},er.apply(this,arguments)}function tr(e,t,n=l.low){(0,Gn.useEffect)((()=>{const r=er({},t,{action:f.render});$t(e,r,n)}),[])}function nr(){return nr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},nr.apply(this,arguments)}const rr=function(e,t){return{markStartPerf:(0,Gn.useCallback)((()=>Hn(e,t)),[e,t]),markEndPerf:(0,Gn.useCallback)((n=>Jn(e,nr({},t,n))),[e,t])}};function ir(){return ir=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ir.apply(this,arguments)}function ar(){return Object.entries(ir({},Se,zt(),{sessionUUID:oe.sessionUUID,userId:oe.userId})).reduce(((e,t)=>{return null!=(n=t[1])&&""!==n?ir({},e,{[t[0]]:t[1]}):e;var n}),{})}async function or(){return new Promise((e=>{Mt(vt(je.eventsQueue)),Qt(bt(je.metricsQueue),!0),Pn(je.tracesQueue,!0),Ne({eventsQueue:[],metricsQueue:[],tracesQueue:[]}),e()}))}function sr(){return{"X-CB-Device-ID":H.deviceId||"unknown","X-CB-Is-Logged-In":H.userId?"true":"false","X-CB-Pagekey":re.pageKey||"unknown","X-CB-UJS":(e=Se.ujs,void 0===e||0===e.length?"":e.join(",")),"X-CB-Platform":A.platform||"unknown","X-CB-Project-Name":A.projectName||"unknown","X-CB-Session-UUID":oe.sessionUUID||"unknown","X-CB-Version-Name":A.version?String(A.version):"unknown"};var e}})(),r})()}));`;
157
- const loadTelemetryScript = () => {
158
- return new Promise((resolve, reject) => {
159
- if (window.ClientAnalytics) {
160
- return resolve();
161
- }
162
- try {
163
- const script = document.createElement("script");
164
- script.textContent = TELEMETRY_SCRIPT_CONTENT;
165
- script.type = "text/javascript";
166
- document.head.appendChild(script);
167
- initCCA();
168
- document.head.removeChild(script);
169
- resolve();
170
- } catch (_a) {
171
- console.error("Failed to execute inlined telemetry script");
172
- reject();
173
- }
174
- });
175
- };
176
- const initCCA = () => {
177
- var _a, _b, _c;
178
- if (typeof window !== "undefined") {
179
- const deviceId = (_c = (_a = store.config.get().deviceId) !== null && _a !== void 0 ? _a : (_b = window.crypto) === null || _b === void 0 ? void 0 : _b.randomUUID()) !== null && _c !== void 0 ? _c : "";
180
- if (window.ClientAnalytics) {
181
- const { init, identify, PlatformName } = window.ClientAnalytics;
182
- init({
183
- isProd: true,
184
- amplitudeApiKey: "c66737ad47ec354ced777935b0af822e",
185
- platform: PlatformName.web,
186
- projectName: "base_account_sdk",
187
- showDebugLogging: false,
188
- version: "1.0.0",
189
- apiEndpoint: "https://cca-lite.coinbase.com"
190
- });
191
- identify({ deviceId });
192
- store.config.set({ deviceId });
193
- }
194
- }
195
- };
196
- const factoryAddress = "0xba5ed110efdba3d005bfc882d75358acbbb85842";
197
- const spendPermissionManagerAddress = "0xf85210B21cC50302F477BA56686d2019dC9b67Ad";
198
- const abi = [
199
- { inputs: [], stateMutability: "nonpayable", type: "constructor" },
200
- {
201
- inputs: [{ name: "owner", type: "bytes" }],
202
- name: "AlreadyOwner",
203
- type: "error"
204
- },
205
- { inputs: [], name: "Initialized", type: "error" },
206
- {
207
- inputs: [{ name: "owner", type: "bytes" }],
208
- name: "InvalidEthereumAddressOwner",
209
- type: "error"
210
- },
211
- {
212
- inputs: [{ name: "key", type: "uint256" }],
213
- name: "InvalidNonceKey",
214
- type: "error"
215
- },
216
- {
217
- inputs: [{ name: "owner", type: "bytes" }],
218
- name: "InvalidOwnerBytesLength",
219
- type: "error"
220
- },
221
- { inputs: [], name: "LastOwner", type: "error" },
222
- {
223
- inputs: [{ name: "index", type: "uint256" }],
224
- name: "NoOwnerAtIndex",
225
- type: "error"
226
- },
227
- {
228
- inputs: [{ name: "ownersRemaining", type: "uint256" }],
229
- name: "NotLastOwner",
230
- type: "error"
231
- },
232
- {
233
- inputs: [{ name: "selector", type: "bytes4" }],
234
- name: "SelectorNotAllowed",
235
- type: "error"
236
- },
237
- { inputs: [], name: "Unauthorized", type: "error" },
238
- { inputs: [], name: "UnauthorizedCallContext", type: "error" },
239
- { inputs: [], name: "UpgradeFailed", type: "error" },
240
- {
241
- inputs: [
242
- { name: "index", type: "uint256" },
243
- { name: "expectedOwner", type: "bytes" },
244
- { name: "actualOwner", type: "bytes" }
245
- ],
246
- name: "WrongOwnerAtIndex",
247
- type: "error"
248
- },
249
- {
250
- anonymous: false,
251
- inputs: [
252
- {
253
- indexed: true,
254
- name: "index",
255
- type: "uint256"
256
- },
257
- { indexed: false, name: "owner", type: "bytes" }
258
- ],
259
- name: "AddOwner",
260
- type: "event"
261
- },
262
- {
263
- anonymous: false,
264
- inputs: [
265
- {
266
- indexed: true,
267
- name: "index",
268
- type: "uint256"
269
- },
270
- { indexed: false, name: "owner", type: "bytes" }
271
- ],
272
- name: "RemoveOwner",
273
- type: "event"
274
- },
275
- {
276
- anonymous: false,
277
- inputs: [
278
- {
279
- indexed: true,
280
- name: "implementation",
281
- type: "address"
282
- }
283
- ],
284
- name: "Upgraded",
285
- type: "event"
286
- },
287
- { stateMutability: "payable", type: "fallback" },
288
- {
289
- inputs: [],
290
- name: "REPLAYABLE_NONCE_KEY",
291
- outputs: [{ name: "", type: "uint256" }],
292
- stateMutability: "view",
293
- type: "function"
294
- },
295
- {
296
- inputs: [{ name: "owner", type: "address" }],
297
- name: "addOwnerAddress",
298
- outputs: [],
299
- stateMutability: "nonpayable",
300
- type: "function"
301
- },
302
- {
303
- inputs: [
304
- { name: "x", type: "bytes32" },
305
- { name: "y", type: "bytes32" }
306
- ],
307
- name: "addOwnerPublicKey",
308
- outputs: [],
309
- stateMutability: "nonpayable",
310
- type: "function"
311
- },
312
- {
313
- inputs: [{ name: "functionSelector", type: "bytes4" }],
314
- name: "canSkipChainIdValidation",
315
- outputs: [{ name: "", type: "bool" }],
316
- stateMutability: "pure",
317
- type: "function"
318
- },
319
- {
320
- inputs: [],
321
- name: "domainSeparator",
322
- outputs: [{ name: "", type: "bytes32" }],
323
- stateMutability: "view",
324
- type: "function"
325
- },
326
- {
327
- inputs: [],
328
- name: "eip712Domain",
329
- outputs: [
330
- { name: "fields", type: "bytes1" },
331
- { name: "name", type: "string" },
332
- { name: "version", type: "string" },
333
- { name: "chainId", type: "uint256" },
334
- { name: "verifyingContract", type: "address" },
335
- { name: "salt", type: "bytes32" },
336
- { name: "extensions", type: "uint256[]" }
337
- ],
338
- stateMutability: "view",
339
- type: "function"
340
- },
341
- {
342
- inputs: [],
343
- name: "entryPoint",
344
- outputs: [{ name: "", type: "address" }],
345
- stateMutability: "view",
346
- type: "function"
347
- },
348
- {
349
- inputs: [
350
- { name: "target", type: "address" },
351
- { name: "value", type: "uint256" },
352
- { name: "data", type: "bytes" }
353
- ],
354
- name: "execute",
355
- outputs: [],
356
- stateMutability: "payable",
357
- type: "function"
358
- },
359
- {
360
- inputs: [
361
- {
362
- components: [
363
- { name: "target", type: "address" },
364
- { name: "value", type: "uint256" },
365
- { name: "data", type: "bytes" }
366
- ],
367
- name: "calls",
368
- type: "tuple[]"
369
- }
370
- ],
371
- name: "executeBatch",
372
- outputs: [],
373
- stateMutability: "payable",
374
- type: "function"
375
- },
376
- {
377
- inputs: [{ name: "calls", type: "bytes[]" }],
378
- name: "executeWithoutChainIdValidation",
379
- outputs: [],
380
- stateMutability: "payable",
381
- type: "function"
382
- },
383
- {
384
- inputs: [
385
- {
386
- components: [
387
- { name: "sender", type: "address" },
388
- { name: "nonce", type: "uint256" },
389
- { name: "initCode", type: "bytes" },
390
- { name: "callData", type: "bytes" },
391
- { name: "callGasLimit", type: "uint256" },
392
- {
393
- name: "verificationGasLimit",
394
- type: "uint256"
395
- },
396
- {
397
- name: "preVerificationGas",
398
- type: "uint256"
399
- },
400
- { name: "maxFeePerGas", type: "uint256" },
401
- {
402
- name: "maxPriorityFeePerGas",
403
- type: "uint256"
404
- },
405
- { name: "paymasterAndData", type: "bytes" },
406
- { name: "signature", type: "bytes" }
407
- ],
408
- name: "userOp",
409
- type: "tuple"
410
- }
411
- ],
412
- name: "getUserOpHashWithoutChainId",
413
- outputs: [{ name: "", type: "bytes32" }],
414
- stateMutability: "view",
415
- type: "function"
416
- },
417
- {
418
- inputs: [],
419
- name: "implementation",
420
- outputs: [{ name: "$", type: "address" }],
421
- stateMutability: "view",
422
- type: "function"
423
- },
424
- {
425
- inputs: [{ name: "owners", type: "bytes[]" }],
426
- name: "initialize",
427
- outputs: [],
428
- stateMutability: "payable",
429
- type: "function"
430
- },
431
- {
432
- inputs: [{ name: "account", type: "address" }],
433
- name: "isOwnerAddress",
434
- outputs: [{ name: "", type: "bool" }],
435
- stateMutability: "view",
436
- type: "function"
437
- },
438
- {
439
- inputs: [{ name: "account", type: "bytes" }],
440
- name: "isOwnerBytes",
441
- outputs: [{ name: "", type: "bool" }],
442
- stateMutability: "view",
443
- type: "function"
444
- },
445
- {
446
- inputs: [
447
- { name: "x", type: "bytes32" },
448
- { name: "y", type: "bytes32" }
449
- ],
450
- name: "isOwnerPublicKey",
451
- outputs: [{ name: "", type: "bool" }],
452
- stateMutability: "view",
453
- type: "function"
454
- },
455
- {
456
- inputs: [
457
- { name: "hash", type: "bytes32" },
458
- { name: "signature", type: "bytes" }
459
- ],
460
- name: "isValidSignature",
461
- outputs: [{ name: "result", type: "bytes4" }],
462
- stateMutability: "view",
463
- type: "function"
464
- },
465
- {
466
- inputs: [],
467
- name: "nextOwnerIndex",
468
- outputs: [{ name: "", type: "uint256" }],
469
- stateMutability: "view",
470
- type: "function"
471
- },
472
- {
473
- inputs: [{ name: "index", type: "uint256" }],
474
- name: "ownerAtIndex",
475
- outputs: [{ name: "", type: "bytes" }],
476
- stateMutability: "view",
477
- type: "function"
478
- },
479
- {
480
- inputs: [],
481
- name: "ownerCount",
482
- outputs: [{ name: "", type: "uint256" }],
483
- stateMutability: "view",
484
- type: "function"
485
- },
486
- {
487
- inputs: [],
488
- name: "proxiableUUID",
489
- outputs: [{ name: "", type: "bytes32" }],
490
- stateMutability: "view",
491
- type: "function"
492
- },
493
- {
494
- inputs: [
495
- { name: "index", type: "uint256" },
496
- { name: "owner", type: "bytes" }
497
- ],
498
- name: "removeLastOwner",
499
- outputs: [],
500
- stateMutability: "nonpayable",
501
- type: "function"
502
- },
503
- {
504
- inputs: [
505
- { name: "index", type: "uint256" },
506
- { name: "owner", type: "bytes" }
507
- ],
508
- name: "removeOwnerAtIndex",
509
- outputs: [],
510
- stateMutability: "nonpayable",
511
- type: "function"
512
- },
513
- {
514
- inputs: [],
515
- name: "removedOwnersCount",
516
- outputs: [{ name: "", type: "uint256" }],
517
- stateMutability: "view",
518
- type: "function"
519
- },
520
- {
521
- inputs: [{ name: "hash", type: "bytes32" }],
522
- name: "replaySafeHash",
523
- outputs: [{ name: "", type: "bytes32" }],
524
- stateMutability: "view",
525
- type: "function"
526
- },
527
- {
528
- inputs: [
529
- { name: "newImplementation", type: "address" },
530
- { name: "data", type: "bytes" }
531
- ],
532
- name: "upgradeToAndCall",
533
- outputs: [],
534
- stateMutability: "payable",
535
- type: "function"
536
- },
537
- {
538
- inputs: [
539
- {
540
- components: [
541
- { name: "sender", type: "address" },
542
- { name: "nonce", type: "uint256" },
543
- { name: "initCode", type: "bytes" },
544
- { name: "callData", type: "bytes" },
545
- { name: "callGasLimit", type: "uint256" },
546
- {
547
- name: "verificationGasLimit",
548
- type: "uint256"
549
- },
550
- {
551
- name: "preVerificationGas",
552
- type: "uint256"
553
- },
554
- { name: "maxFeePerGas", type: "uint256" },
555
- {
556
- name: "maxPriorityFeePerGas",
557
- type: "uint256"
558
- },
559
- { name: "paymasterAndData", type: "bytes" },
560
- { name: "signature", type: "bytes" }
561
- ],
562
- name: "userOp",
563
- type: "tuple"
564
- },
565
- { name: "userOpHash", type: "bytes32" },
566
- { name: "missingAccountFunds", type: "uint256" }
567
- ],
568
- name: "validateUserOp",
569
- outputs: [{ name: "validationData", type: "uint256" }],
570
- stateMutability: "nonpayable",
571
- type: "function"
572
- },
573
- { stateMutability: "payable", type: "receive" }
574
- ];
575
- const factoryAbi = [
576
- {
577
- inputs: [{ name: "implementation_", type: "address" }],
578
- stateMutability: "payable",
579
- type: "constructor"
580
- },
581
- { inputs: [], name: "OwnerRequired", type: "error" },
582
- {
583
- inputs: [
584
- { name: "owners", type: "bytes[]" },
585
- { name: "nonce", type: "uint256" }
586
- ],
587
- name: "createAccount",
588
- outputs: [
589
- {
590
- name: "account",
591
- type: "address"
592
- }
593
- ],
594
- stateMutability: "payable",
595
- type: "function"
596
- },
597
- {
598
- inputs: [
599
- { name: "owners", type: "bytes[]" },
600
- { name: "nonce", type: "uint256" }
601
- ],
602
- name: "getAddress",
603
- outputs: [{ name: "", type: "address" }],
604
- stateMutability: "view",
605
- type: "function"
606
- },
607
- {
608
- inputs: [],
609
- name: "implementation",
610
- outputs: [{ name: "", type: "address" }],
611
- stateMutability: "view",
612
- type: "function"
613
- },
614
- {
615
- inputs: [],
616
- name: "initCodeHash",
617
- outputs: [{ name: "", type: "bytes32" }],
618
- stateMutability: "view",
619
- type: "function"
620
- }
621
- ];
622
- const standardErrorCodes = {
623
- rpc: {
624
- invalidInput: -32e3,
625
- resourceNotFound: -32001,
626
- resourceUnavailable: -32002,
627
- transactionRejected: -32003,
628
- methodNotSupported: -32004,
629
- limitExceeded: -32005,
630
- parse: -32700,
631
- invalidRequest: -32600,
632
- methodNotFound: -32601,
633
- invalidParams: -32602,
634
- internal: -32603
635
- },
636
- provider: {
637
- userRejectedRequest: 4001,
638
- unauthorized: 4100,
639
- unsupportedMethod: 4200,
640
- disconnected: 4900,
641
- chainDisconnected: 4901,
642
- unsupportedChain: 4902
643
- }
644
- };
645
- const errorValues = {
646
- "-32700": {
647
- standard: "JSON RPC 2.0",
648
- message: "Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text."
649
- },
650
- "-32600": {
651
- standard: "JSON RPC 2.0",
652
- message: "The JSON sent is not a valid Request object."
653
- },
654
- "-32601": {
655
- standard: "JSON RPC 2.0",
656
- message: "The method does not exist / is not available."
657
- },
658
- "-32602": {
659
- standard: "JSON RPC 2.0",
660
- message: "Invalid method parameter(s)."
661
- },
662
- "-32603": {
663
- standard: "JSON RPC 2.0",
664
- message: "Internal JSON-RPC error."
665
- },
666
- "-32000": {
667
- standard: "EIP-1474",
668
- message: "Invalid input."
669
- },
670
- "-32001": {
671
- standard: "EIP-1474",
672
- message: "Resource not found."
673
- },
674
- "-32002": {
675
- standard: "EIP-1474",
676
- message: "Resource unavailable."
677
- },
678
- "-32003": {
679
- standard: "EIP-1474",
680
- message: "Transaction rejected."
681
- },
682
- "-32004": {
683
- standard: "EIP-1474",
684
- message: "Method not supported."
685
- },
686
- "-32005": {
687
- standard: "EIP-1474",
688
- message: "Request limit exceeded."
689
- },
690
- "4001": {
691
- standard: "EIP-1193",
692
- message: "User rejected the request."
693
- },
694
- "4100": {
695
- standard: "EIP-1193",
696
- message: "The requested account and/or method has not been authorized by the user."
697
- },
698
- "4200": {
699
- standard: "EIP-1193",
700
- message: "The requested method is not supported by this Ethereum provider."
701
- },
702
- "4900": {
703
- standard: "EIP-1193",
704
- message: "The provider is disconnected from all chains."
705
- },
706
- "4901": {
707
- standard: "EIP-1193",
708
- message: "The provider is disconnected from the specified chain."
709
- },
710
- "4902": {
711
- standard: "EIP-3085",
712
- message: "Unrecognized chain ID."
713
- }
714
- };
715
- const FALLBACK_MESSAGE = "Unspecified error message.";
716
- const JSON_RPC_SERVER_ERROR_MESSAGE = "Unspecified server error.";
717
- function getMessageFromCode(code, fallbackMessage = FALLBACK_MESSAGE) {
718
- if (code && Number.isInteger(code)) {
719
- const codeString = code.toString();
720
- if (hasKey(errorValues, codeString)) {
721
- return errorValues[codeString].message;
722
- }
723
- if (isJsonRpcServerError(code)) {
724
- return JSON_RPC_SERVER_ERROR_MESSAGE;
725
- }
726
- }
727
- return fallbackMessage;
728
- }
729
- function isValidCode(code) {
730
- if (!Number.isInteger(code)) {
731
- return false;
732
- }
733
- const codeString = code.toString();
734
- if (errorValues[codeString]) {
735
- return true;
736
- }
737
- if (isJsonRpcServerError(code)) {
738
- return true;
739
- }
740
- return false;
741
- }
742
- function serialize(error, { shouldIncludeStack = false } = {}) {
743
- const serialized = {};
744
- if (error && typeof error === "object" && !Array.isArray(error) && hasKey(error, "code") && isValidCode(error.code)) {
745
- const _error = error;
746
- serialized.code = _error.code;
747
- if (_error.message && typeof _error.message === "string") {
748
- serialized.message = _error.message;
749
- if (hasKey(_error, "data")) {
750
- serialized.data = _error.data;
751
- }
752
- } else {
753
- serialized.message = getMessageFromCode(serialized.code);
754
- serialized.data = { originalError: assignOriginalError(error) };
755
- }
756
- } else {
757
- serialized.code = standardErrorCodes.rpc.internal;
758
- serialized.message = hasStringProperty(error, "message") ? error.message : FALLBACK_MESSAGE;
759
- serialized.data = { originalError: assignOriginalError(error) };
760
- }
761
- if (shouldIncludeStack) {
762
- serialized.stack = hasStringProperty(error, "stack") ? error.stack : void 0;
763
- }
764
- return serialized;
765
- }
766
- function isJsonRpcServerError(code) {
767
- return code >= -32099 && code <= -32e3;
768
- }
769
- function assignOriginalError(error) {
770
- if (error && typeof error === "object" && !Array.isArray(error)) {
771
- return Object.assign({}, error);
772
- }
773
- return error;
774
- }
775
- function hasKey(obj, key) {
776
- return Object.prototype.hasOwnProperty.call(obj, key);
777
- }
778
- function hasStringProperty(obj, prop) {
779
- return typeof obj === "object" && obj !== null && prop in obj && typeof obj[prop] === "string";
780
- }
781
- const standardErrors = {
782
- rpc: {
783
- parse: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.parse, arg),
784
- invalidRequest: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.invalidRequest, arg),
785
- invalidParams: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.invalidParams, arg),
786
- methodNotFound: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.methodNotFound, arg),
787
- internal: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.internal, arg),
788
- server: (opts) => {
789
- if (!opts || typeof opts !== "object" || Array.isArray(opts)) {
790
- throw new Error("Ethereum RPC Server errors must provide single object argument.");
791
- }
792
- const { code } = opts;
793
- if (!Number.isInteger(code) || code > -32005 || code < -32099) {
794
- throw new Error('"code" must be an integer such that: -32099 <= code <= -32005');
795
- }
796
- return getEthJsonRpcError(code, opts);
797
- },
798
- invalidInput: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.invalidInput, arg),
799
- resourceNotFound: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.resourceNotFound, arg),
800
- resourceUnavailable: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.resourceUnavailable, arg),
801
- transactionRejected: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.transactionRejected, arg),
802
- methodNotSupported: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.methodNotSupported, arg),
803
- limitExceeded: (arg) => getEthJsonRpcError(standardErrorCodes.rpc.limitExceeded, arg)
804
- },
805
- provider: {
806
- userRejectedRequest: (arg) => {
807
- return getEthProviderError(standardErrorCodes.provider.userRejectedRequest, arg);
808
- },
809
- unauthorized: (arg) => {
810
- return getEthProviderError(standardErrorCodes.provider.unauthorized, arg);
811
- },
812
- unsupportedMethod: (arg) => {
813
- return getEthProviderError(standardErrorCodes.provider.unsupportedMethod, arg);
814
- },
815
- disconnected: (arg) => {
816
- return getEthProviderError(standardErrorCodes.provider.disconnected, arg);
817
- },
818
- chainDisconnected: (arg) => {
819
- return getEthProviderError(standardErrorCodes.provider.chainDisconnected, arg);
820
- },
821
- unsupportedChain: (arg) => {
822
- return getEthProviderError(standardErrorCodes.provider.unsupportedChain, arg);
823
- },
824
- custom: (opts) => {
825
- if (!opts || typeof opts !== "object" || Array.isArray(opts)) {
826
- throw new Error("Ethereum Provider custom errors must provide single object argument.");
827
- }
828
- const { code, message, data } = opts;
829
- if (!message || typeof message !== "string") {
830
- throw new Error('"message" must be a nonempty string');
831
- }
832
- return new EthereumProviderError(code, message, data);
833
- }
834
- }
835
- };
836
- function getEthJsonRpcError(code, arg) {
837
- const [message, data] = parseOpts(arg);
838
- return new EthereumRpcError(code, message || getMessageFromCode(code), data);
839
- }
840
- function getEthProviderError(code, arg) {
841
- const [message, data] = parseOpts(arg);
842
- return new EthereumProviderError(code, message || getMessageFromCode(code), data);
843
- }
844
- function parseOpts(arg) {
845
- if (arg) {
846
- if (typeof arg === "string") {
847
- return [arg];
848
- }
849
- if (typeof arg === "object" && !Array.isArray(arg)) {
850
- const { message, data } = arg;
851
- if (message && typeof message !== "string") {
852
- throw new Error("Must specify string message.");
853
- }
854
- return [message || void 0, data];
855
- }
856
- }
857
- return [];
858
- }
859
- class EthereumRpcError extends Error {
860
- constructor(code, message, data) {
861
- if (!Number.isInteger(code)) {
862
- throw new Error('"code" must be an integer.');
863
- }
864
- if (!message || typeof message !== "string") {
865
- throw new Error('"message" must be a nonempty string.');
866
- }
867
- super(message);
868
- this.code = code;
869
- if (data !== void 0) {
870
- this.data = data;
871
- }
872
- }
873
- }
874
- class EthereumProviderError extends EthereumRpcError {
875
- /**
876
- * Create an Ethereum Provider JSON-RPC error.
877
- * `code` must be an integer in the 1000 <= 4999 range.
878
- */
879
- constructor(code, message, data) {
880
- if (!isValidEthProviderCode(code)) {
881
- throw new Error('"code" must be an integer such that: 1000 <= code <= 4999');
882
- }
883
- super(code, message, data);
884
- }
885
- }
886
- function isValidEthProviderCode(code) {
887
- return Number.isInteger(code) && code >= 1e3 && code <= 4999;
888
- }
889
- function isActionableHttpRequestError(errorObject) {
890
- return typeof errorObject === "object" && errorObject !== null && "code" in errorObject && "data" in errorObject && errorObject.code === -32090 && typeof errorObject.data === "object" && errorObject.data !== null && "type" in errorObject.data && errorObject.data.type === "INSUFFICIENT_FUNDS";
891
- }
892
- function isViemError(error) {
893
- return typeof error === "object" && error !== null && "details" in error;
894
- }
895
- function viemHttpErrorToProviderError(error) {
896
- try {
897
- const details = JSON.parse(error.details);
898
- return new EthereumRpcError(details.code, details.message, details.data);
899
- } catch (_2) {
900
- return null;
901
- }
902
- }
903
- function assertPresence(value, error, message) {
904
- if (value === null || value === void 0) {
905
- throw error !== null && error !== void 0 ? error : standardErrors.rpc.invalidParams({
906
- message: "value must be present",
907
- data: value
908
- });
909
- }
910
- }
911
- function assertArrayPresence(value, message) {
912
- if (!Array.isArray(value)) {
913
- throw standardErrors.rpc.invalidParams({
914
- message: message !== null && message !== void 0 ? message : "value must be an array",
915
- data: value
916
- });
917
- }
918
- }
919
- const COOP_ERROR_MESSAGE = `Base Account SDK requires the Cross-Origin-Opener-Policy header to not be set to 'same-origin'. This is to ensure that the SDK can communicate with the Base Account app.
920
-
921
- Please see https://docs.base.org/smart-wallet/quickstart#cross-origin-opener-policy for more information.`;
922
- const createCoopChecker = () => {
923
- let crossOriginOpenerPolicy;
924
- return {
925
- getCrossOriginOpenerPolicy: () => {
926
- if (crossOriginOpenerPolicy === void 0) {
927
- return "undefined";
928
- }
929
- return crossOriginOpenerPolicy;
930
- },
931
- checkCrossOriginOpenerPolicy: async () => {
932
- if (typeof window === "undefined") {
933
- crossOriginOpenerPolicy = "non-browser-env";
934
- return;
935
- }
936
- try {
937
- const url = `${window.location.origin}${window.location.pathname}`;
938
- const response = await fetch(url, {
939
- method: "HEAD"
940
- });
941
- if (!response.ok) {
942
- throw new Error(`HTTP error! status: ${response.status}`);
943
- }
944
- const result = response.headers.get("Cross-Origin-Opener-Policy");
945
- crossOriginOpenerPolicy = result !== null && result !== void 0 ? result : "null";
946
- if (crossOriginOpenerPolicy === "same-origin") {
947
- console.error(COOP_ERROR_MESSAGE);
948
- }
949
- } catch (error) {
950
- console.error("Error checking Cross-Origin-Opener-Policy:", error.message);
951
- crossOriginOpenerPolicy = "error";
952
- }
953
- }
954
- };
955
- };
956
- const { checkCrossOriginOpenerPolicy, getCrossOriginOpenerPolicy } = createCoopChecker();
957
- function validatePreferences(preference) {
958
- if (!preference) {
959
- return;
960
- }
961
- if (preference.attribution) {
962
- if (preference.attribution.auto !== void 0 && preference.attribution.dataSuffix !== void 0) {
963
- throw new Error(`Attribution cannot contain both auto and dataSuffix properties`);
964
- }
965
- }
966
- if (preference.telemetry) {
967
- if (typeof preference.telemetry !== "boolean") {
968
- throw new Error(`Telemetry must be a boolean`);
969
- }
970
- }
971
- }
972
- function validateSubAccount(toAccount) {
973
- if (typeof toAccount !== "function") {
974
- throw new Error(`toAccount is not a function`);
975
- }
976
- }
977
- var ComponentType;
978
- (function(ComponentType2) {
979
- ComponentType2["unknown"] = "unknown";
980
- ComponentType2["banner"] = "banner";
981
- ComponentType2["button"] = "button";
982
- ComponentType2["card"] = "card";
983
- ComponentType2["chart"] = "chart";
984
- ComponentType2["content_script"] = "content_script";
985
- ComponentType2["dropdown"] = "dropdown";
986
- ComponentType2["link"] = "link";
987
- ComponentType2["page"] = "page";
988
- ComponentType2["modal"] = "modal";
989
- ComponentType2["table"] = "table";
990
- ComponentType2["search_bar"] = "search_bar";
991
- ComponentType2["service_worker"] = "service_worker";
992
- ComponentType2["text"] = "text";
993
- ComponentType2["text_input"] = "text_input";
994
- ComponentType2["tray"] = "tray";
995
- ComponentType2["checkbox"] = "checkbox";
996
- ComponentType2["icon"] = "icon";
997
- })(ComponentType || (ComponentType = {}));
998
- var ActionType;
999
- (function(ActionType2) {
1000
- ActionType2["unknown"] = "unknown";
1001
- ActionType2["blur"] = "blur";
1002
- ActionType2["click"] = "click";
1003
- ActionType2["change"] = "change";
1004
- ActionType2["dismiss"] = "dismiss";
1005
- ActionType2["focus"] = "focus";
1006
- ActionType2["hover"] = "hover";
1007
- ActionType2["select"] = "select";
1008
- ActionType2["measurement"] = "measurement";
1009
- ActionType2["move"] = "move";
1010
- ActionType2["process"] = "process";
1011
- ActionType2["render"] = "render";
1012
- ActionType2["scroll"] = "scroll";
1013
- ActionType2["view"] = "view";
1014
- ActionType2["search"] = "search";
1015
- ActionType2["keyPress"] = "keyPress";
1016
- ActionType2["error"] = "error";
1017
- })(ActionType || (ActionType = {}));
1018
- var AnalyticsEventImportance;
1019
- (function(AnalyticsEventImportance2) {
1020
- AnalyticsEventImportance2["low"] = "low";
1021
- AnalyticsEventImportance2["high"] = "high";
1022
- })(AnalyticsEventImportance || (AnalyticsEventImportance = {}));
1023
- function logEvent(name2, event, importance) {
1024
- var _a, _b, _c;
1025
- if (window.ClientAnalytics) {
1026
- (_a = window.ClientAnalytics) === null || _a === void 0 ? void 0 : _a.logEvent(name2, Object.assign(Object.assign({}, event), { sdkVersion: PACKAGE_VERSION, sdkName: PACKAGE_NAME, appName: (_c = (_b = store.config.get().metadata) === null || _b === void 0 ? void 0 : _b.appName) !== null && _c !== void 0 ? _c : "", appOrigin: window.location.origin }), importance);
1027
- }
1028
- }
1029
- const logPopupSetupStarted = () => {
1030
- logEvent("communicator.popup_setup.started", {
1031
- action: ActionType.unknown,
1032
- componentType: ComponentType.unknown
1033
- }, AnalyticsEventImportance.high);
1034
- };
1035
- const logPopupSetupCompleted = () => {
1036
- logEvent("communicator.popup_setup.completed", {
1037
- action: ActionType.unknown,
1038
- componentType: ComponentType.unknown
1039
- }, AnalyticsEventImportance.high);
1040
- };
1041
- const logPopupUnloadReceived = () => {
1042
- logEvent("communicator.popup_unload.received", {
1043
- action: ActionType.unknown,
1044
- componentType: ComponentType.unknown
1045
- }, AnalyticsEventImportance.high);
1046
- };
1047
- const logDialogShown = ({ dialogContext }) => {
1048
- logEvent(`dialog.${dialogContext}.shown`, {
1049
- action: ActionType.render,
1050
- componentType: ComponentType.modal,
1051
- dialogContext
1052
- }, AnalyticsEventImportance.high);
1053
- };
1054
- const logDialogDismissed = ({ dialogContext }) => {
1055
- logEvent(`dialog.${dialogContext}.dismissed`, {
1056
- action: ActionType.dismiss,
1057
- componentType: ComponentType.modal,
1058
- dialogContext
1059
- }, AnalyticsEventImportance.high);
1060
- };
1061
- const logDialogActionClicked = ({ dialogContext, dialogAction }) => {
1062
- logEvent(`dialog.${dialogContext}.action_clicked`, {
1063
- action: ActionType.click,
1064
- componentType: ComponentType.button,
1065
- dialogContext,
1066
- dialogAction
1067
- }, AnalyticsEventImportance.high);
1068
- };
1069
- const FONT_FACE_CSS = `
1070
- @font-face {
1071
- font-family: "BaseSans-Regular";
1072
- src: url("data:font/woff2;charset=utf-8;base64,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")
1073
- format("woff2");
1074
- font-weight: normal;
1075
- font-style: normal;
1076
- font-display: swap;
1077
- }
1078
- `;
1079
- const FONT_NAME = "BaseSans-Regular";
1080
- function injectFontStyle() {
1081
- const existing = document.head.querySelector(`style[base-sdk-font="${FONT_NAME}"]`);
1082
- if (existing)
1083
- return;
1084
- const style = document.createElement("style");
1085
- style.setAttribute("base-sdk-font", FONT_NAME);
1086
- style.textContent = FONT_FACE_CSS;
1087
- document.head.appendChild(style);
1088
- }
1089
- async function getDisplayableUsername(address) {
1090
- return truncateAddress(address);
1091
- }
1092
- function truncateAddress(address, length = 4) {
1093
- return `${address.slice(0, 2 + length)}...${address.slice(-length)}`;
1094
- }
1095
- const WHITE = "#FFF";
1096
- const BRAND_BLUE = "#0000FF";
1097
- const BaseLogo = ({ fill }) => {
1098
- const fillColor = fill === "blue" ? BRAND_BLUE : WHITE;
1099
- return u("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: u("path", { d: "M0 2.014C0 1.58105 0 1.36457 0.0815779 1.19805C0.159686 1.03861 0.288611 0.909686 0.448049 0.831578C0.61457 0.75 0.831047 0.75 1.264 0.75H14.736C15.169 0.75 15.3854 0.75 15.552 0.831578C15.7114 0.909686 15.8403 1.03861 15.9184 1.19805C16 1.36457 16 1.58105 16 2.014V15.486C16 15.919 16 16.1354 15.9184 16.302C15.8403 16.4614 15.7114 16.5903 15.552 16.6684C15.3854 16.75 15.169 16.75 14.736 16.75H1.264C0.831047 16.75 0.61457 16.75 0.448049 16.6684C0.288611 16.5903 0.159686 16.4614 0.0815779 16.302C0 16.1354 0 15.919 0 15.486V2.014Z", fill: fillColor }) });
1100
- };
1101
- const css = /* @__PURE__ */ (() => `.-base-acc-sdk-css-reset{-webkit-font-smoothing:antialiased;pointer-events:auto !important}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483647}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-container *{user-select:none;box-sizing:border-box}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;padding:20px}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-backdrop{align-items:flex-end;justify-content:stretch;padding:0}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog{position:relative;z-index:2147483648}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog{width:100%}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance{background:#fff;border-radius:12px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);width:380px;max-height:90vh;overflow:hidden;transform:scale(0.95);opacity:0;transition:all .2s ease-in-out}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance{touch-action:pan-y;user-select:none}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-hidden{transform:scale(0.9);opacity:0}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-hidden{transform:translateY(100%)}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance:not(.-base-acc-sdk-dialog-instance-hidden){transform:scale(1);opacity:1}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance:not(.-base-acc-sdk-dialog-instance-hidden){transform:translateY(0)}}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance{width:100%;max-width:100%;border-radius:20px 20px 0 0;box-shadow:0 -10px 25px rgba(0,0,0,.15);max-height:80vh;transform:translateY(0)}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-hidden{transform:translateY(100%);opacity:1}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance:not(.-base-acc-sdk-dialog-instance-hidden){transform:translateY(0);opacity:1}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 0 20px}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header{padding:16px 20px 12px 20px}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-icon-and-title{display:flex;align-items:center;gap:8px}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-icon-and-title-title{font-family:"BaseSans-Regular",sans-serif;font-size:14px;font-weight:400;color:#5b616e}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-cblogo{width:32px;height:32px}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;cursor:pointer;border-radius:6px;transition:background-color .2s}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-close:hover{background-color:#f5f7f8}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-close-icon{width:14px;height:14px}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-header-close-icon{display:none}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-content{padding:20px 20px 16px 20px;font-family:"BaseSans-Regular",sans-serif}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-content{padding:8px 20px 12px 20px}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-content-title{font-size:20px;font-weight:600;line-height:28px;color:#0a0b0d;margin-bottom:10px}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-content-message{font-size:16px;font-weight:400;line-height:24px;color:#5b616e;margin-bottom:0}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-actions{display:flex;padding:16px 20px 20px 20px;flex-direction:column}@media(max-width: 600px)and (orientation: portrait){.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-actions{padding:16px 20px calc(20px + env(safe-area-inset-bottom)) 20px;gap:6px}}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button{font-family:"BaseSans-Regular",sans-serif;font-size:16px;font-weight:500;line-height:24px;border:none;border-radius:12px;padding:16px 24px;cursor:pointer;transition:all .2s ease-in-out;width:100%;margin:4px 0}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button:disabled{opacity:.5;cursor:not-allowed}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-primary{background-color:#0a0b0d;color:#fff}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-primary:hover:not(:disabled){background-color:#1c1e20}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-primary:active:not(:disabled){background-color:#2a2d31}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-secondary{background-color:#eef0f3;color:#0a0b0d}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-secondary:hover:not(:disabled){background-color:#e1e4e8}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-instance-button-secondary:active:not(:disabled){background-color:#d4d8dd}.-base-acc-sdk-css-reset .-base-acc-sdk-dialog-handle-bar{position:absolute;top:-16px;left:50%;transform:translateX(-50%);width:64px;height:4px;background-color:#d1d5db;border-radius:2px;opacity:0;animation:handleBarFadeIn .2s ease-in-out .2s forwards}@keyframes handleBarFadeIn{from{opacity:0}to{opacity:1}}`)();
1102
- const closeIcon = `data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzIDFMMSAxM20wLTEyTDEzIDEzIiBzdHJva2U9IiM5Q0EzQUYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+`;
1103
- function isPhonePortrait() {
1104
- return window.innerWidth <= 600 && window.innerHeight > window.innerWidth;
1105
- }
1106
- const DialogHandleBar = () => {
1107
- const [showHandleBar, setShowHandleBar] = h(false);
1108
- y(() => {
1109
- const checkOrientation = () => {
1110
- setShowHandleBar(isPhonePortrait());
1111
- };
1112
- checkOrientation();
1113
- window.addEventListener("resize", checkOrientation);
1114
- window.addEventListener("orientationchange", checkOrientation);
1115
- return () => {
1116
- window.removeEventListener("resize", checkOrientation);
1117
- window.removeEventListener("orientationchange", checkOrientation);
1118
- };
1119
- }, []);
1120
- if (!showHandleBar) {
1121
- return null;
1122
- }
1123
- return u("div", { class: "-base-acc-sdk-dialog-handle-bar" });
1124
- };
1125
- class Dialog {
1126
- constructor() {
1127
- this.items = /* @__PURE__ */ new Map();
1128
- this.nextItemKey = 0;
1129
- this.root = null;
1130
- }
1131
- attach(el) {
1132
- this.root = document.createElement("div");
1133
- this.root.className = "-base-acc-sdk-dialog-root";
1134
- el.appendChild(this.root);
1135
- this.render();
1136
- }
1137
- presentItem(itemProps) {
1138
- const key = this.nextItemKey++;
1139
- this.items.set(key, itemProps);
1140
- this.render();
1141
- }
1142
- clear() {
1143
- this.items.clear();
1144
- if (this.root) {
1145
- B(null, this.root);
1146
- }
1147
- }
1148
- render() {
1149
- if (this.root) {
1150
- B(u("div", { children: u(DialogContainer, { children: Array.from(this.items.entries()).map(([key, itemProps]) => _(DialogInstance, Object.assign({}, itemProps, { key, handleClose: () => {
1151
- var _a;
1152
- this.clear();
1153
- (_a = itemProps.onClose) === null || _a === void 0 ? void 0 : _a.call(itemProps);
1154
- } }))) }) }), this.root);
1155
- }
1156
- }
1157
- }
1158
- const DialogContainer = (props) => {
1159
- const [dragY, setDragY] = h(0);
1160
- const [isDragging, setIsDragging] = h(false);
1161
- const [startY, setStartY] = h(0);
1162
- const handleTouchStart = (e) => {
1163
- if (!isPhonePortrait())
1164
- return;
1165
- const touch = e.touches[0];
1166
- setStartY(touch.clientY);
1167
- setIsDragging(true);
1168
- };
1169
- const handleTouchMove = (e) => {
1170
- if (!isDragging)
1171
- return;
1172
- const touch = e.touches[0];
1173
- const deltaY = touch.clientY - startY;
1174
- if (deltaY > 0) {
1175
- setDragY(deltaY);
1176
- e.preventDefault();
1177
- }
1178
- };
1179
- const handleTouchEnd = () => {
1180
- if (!isDragging)
1181
- return;
1182
- setIsDragging(false);
1183
- if (dragY > 100) {
1184
- const closeButton = document.querySelector(".-base-acc-sdk-dialog-instance-header-close");
1185
- if (closeButton) {
1186
- closeButton.click();
1187
- }
1188
- } else {
1189
- setDragY(0);
1190
- }
1191
- };
1192
- return u("div", { class: clsx("-base-acc-sdk-dialog-container"), children: [u("style", { children: css }), u("div", { class: "-base-acc-sdk-dialog-backdrop", onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, children: u("div", { class: "-base-acc-sdk-dialog", style: {
1193
- transform: `translateY(${dragY}px)`,
1194
- transition: isDragging ? "none" : "transform 0.2s ease-out"
1195
- }, children: [u(DialogHandleBar, {}), props.children] }) })] });
1196
- };
1197
- const DialogInstance = ({ title, message, actionItems, handleClose }) => {
1198
- const [hidden, setHidden] = h(true);
1199
- const [isLoadingUsername, setIsLoadingUsername] = h(true);
1200
- const [username, setUsername] = h(null);
1201
- y(() => {
1202
- const timer = window.setTimeout(() => {
1203
- setHidden(false);
1204
- }, 1);
1205
- return () => {
1206
- window.clearTimeout(timer);
1207
- };
1208
- }, []);
1209
- y(() => {
1210
- const fetchEnsName = async () => {
1211
- var _a;
1212
- const address = (_a = store.account.get().accounts) === null || _a === void 0 ? void 0 : _a[0];
1213
- if (address) {
1214
- const username2 = await getDisplayableUsername(address);
1215
- setUsername(username2);
1216
- }
1217
- setIsLoadingUsername(false);
1218
- };
1219
- fetchEnsName();
1220
- }, []);
1221
- const headerTitle = T(() => {
1222
- return username ? `Signed in as ${username}` : "Base Account";
1223
- }, [username]);
1224
- const shouldShowHeaderTitle = !isLoadingUsername;
1225
- return u("div", { class: clsx("-base-acc-sdk-dialog-instance", hidden && "-base-acc-sdk-dialog-instance-hidden"), children: [u("div", { class: "-base-acc-sdk-dialog-instance-header", children: [u("div", { class: "-base-acc-sdk-dialog-instance-header-icon-and-title", children: [u(BaseLogo, { fill: "blue" }), shouldShowHeaderTitle && u("div", { class: "-base-acc-sdk-dialog-instance-header-icon-and-title-title", children: headerTitle })] }), u("div", { class: "-base-acc-sdk-dialog-instance-header-close", onClick: handleClose, children: u("img", { src: closeIcon, class: "-base-acc-sdk-dialog-instance-header-close-icon" }) })] }), u("div", { class: "-base-acc-sdk-dialog-instance-content", children: [u("div", { class: "-base-acc-sdk-dialog-instance-content-title", children: title }), u("div", { class: "-base-acc-sdk-dialog-instance-content-message", children: message })] }), actionItems && actionItems.length > 0 && u("div", { class: "-base-acc-sdk-dialog-instance-actions", children: actionItems.map((action, i) => u("button", { class: clsx("-base-acc-sdk-dialog-instance-button", action.variant === "primary" && "-base-acc-sdk-dialog-instance-button-primary", action.variant === "secondary" && "-base-acc-sdk-dialog-instance-button-secondary"), onClick: action.onClick, children: action.text }, i)) })] });
1226
- };
1227
- let dialog = null;
1228
- function initDialog() {
1229
- if (!dialog) {
1230
- const root = document.createElement("div");
1231
- root.className = "-base-acc-sdk-css-reset";
1232
- document.body.appendChild(root);
1233
- dialog = new Dialog();
1234
- dialog.attach(root);
1235
- }
1236
- injectFontStyle();
1237
- return dialog;
1238
- }
1239
- const POPUP_WIDTH = 420;
1240
- const POPUP_HEIGHT = 700;
1241
- const POPUP_BLOCKED_TITLE = "{app} wants to continue in Base Account";
1242
- const POPUP_BLOCKED_MESSAGE = "This action requires your permission to open a new window.";
1243
- function openPopup(url) {
1244
- const left = (window.innerWidth - POPUP_WIDTH) / 2 + window.screenX;
1245
- const top = (window.innerHeight - POPUP_HEIGHT) / 2 + window.screenY;
1246
- appendAppInfoQueryParams(url);
1247
- function tryOpenPopup() {
1248
- const popupId = `wallet_${crypto.randomUUID()}`;
1249
- const popup2 = window.open(url, popupId, `width=${POPUP_WIDTH}, height=${POPUP_HEIGHT}, left=${left}, top=${top}`);
1250
- popup2 === null || popup2 === void 0 ? void 0 : popup2.focus();
1251
- if (!popup2) {
1252
- return null;
1253
- }
1254
- return popup2;
1255
- }
1256
- const popup = tryOpenPopup();
1257
- if (!popup) {
1258
- return openPopupWithDialog(tryOpenPopup);
1259
- }
1260
- return Promise.resolve(popup);
1261
- }
1262
- function closePopup(popup) {
1263
- if (popup && !popup.closed) {
1264
- popup.close();
1265
- }
1266
- }
1267
- function appendAppInfoQueryParams(url) {
1268
- const params = {
1269
- sdkName: PACKAGE_NAME,
1270
- sdkVersion: PACKAGE_VERSION,
1271
- origin: window.location.origin,
1272
- coop: getCrossOriginOpenerPolicy()
1273
- };
1274
- for (const [key, value] of Object.entries(params)) {
1275
- if (!url.searchParams.has(key)) {
1276
- url.searchParams.append(key, value.toString());
1277
- }
1278
- }
1279
- }
1280
- function openPopupWithDialog(tryOpenPopup) {
1281
- var _a, _b;
1282
- const dappName = (_b = (_a = store.config.get().metadata) === null || _a === void 0 ? void 0 : _a.appName) !== null && _b !== void 0 ? _b : "App";
1283
- const dialog2 = initDialog();
1284
- return new Promise((resolve, reject) => {
1285
- logDialogShown({ dialogContext: "popup_blocked" });
1286
- dialog2.presentItem({
1287
- title: POPUP_BLOCKED_TITLE.replace("{app}", dappName),
1288
- message: POPUP_BLOCKED_MESSAGE,
1289
- onClose: () => {
1290
- logDialogActionClicked({
1291
- dialogContext: "popup_blocked",
1292
- dialogAction: "cancel"
1293
- });
1294
- reject(standardErrors.rpc.internal("Popup window was blocked"));
1295
- },
1296
- actionItems: [
1297
- {
1298
- text: "Try again",
1299
- variant: "primary",
1300
- onClick: () => {
1301
- logDialogActionClicked({
1302
- dialogContext: "popup_blocked",
1303
- dialogAction: "confirm"
1304
- });
1305
- const popup = tryOpenPopup();
1306
- if (popup) {
1307
- resolve(popup);
1308
- } else {
1309
- reject(standardErrors.rpc.internal("Popup window was blocked"));
1310
- }
1311
- dialog2.clear();
1312
- }
1313
- },
1314
- {
1315
- text: "Cancel",
1316
- variant: "secondary",
1317
- onClick: () => {
1318
- logDialogActionClicked({
1319
- dialogContext: "popup_blocked",
1320
- dialogAction: "cancel"
1321
- });
1322
- reject(standardErrors.rpc.internal("Popup window was blocked"));
1323
- dialog2.clear();
1324
- }
1325
- }
1326
- ]
1327
- });
1328
- });
1329
- }
1330
- class Communicator {
1331
- constructor({ url = CB_KEYS_URL, metadata, preference }) {
1332
- this.popup = null;
1333
- this.listeners = /* @__PURE__ */ new Map();
1334
- this.postMessage = async (message) => {
1335
- const popup = await this.waitForPopupLoaded();
1336
- popup.postMessage(message, this.url.origin);
1337
- };
1338
- this.postRequestAndWaitForResponse = async (request) => {
1339
- const responsePromise = this.onMessage(({ requestId }) => requestId === request.id);
1340
- this.postMessage(request);
1341
- return await responsePromise;
1342
- };
1343
- this.onMessage = async (predicate) => {
1344
- return new Promise((resolve, reject) => {
1345
- const listener = (event) => {
1346
- if (event.origin !== this.url.origin)
1347
- return;
1348
- const message = event.data;
1349
- if (predicate(message)) {
1350
- resolve(message);
1351
- window.removeEventListener("message", listener);
1352
- this.listeners.delete(listener);
1353
- }
1354
- };
1355
- window.addEventListener("message", listener);
1356
- this.listeners.set(listener, { reject });
1357
- });
1358
- };
1359
- this.disconnect = () => {
1360
- closePopup(this.popup);
1361
- this.popup = null;
1362
- this.listeners.forEach(({ reject }, listener) => {
1363
- reject(standardErrors.provider.userRejectedRequest("Request rejected"));
1364
- window.removeEventListener("message", listener);
1365
- });
1366
- this.listeners.clear();
1367
- };
1368
- this.waitForPopupLoaded = async () => {
1369
- if (this.popup && !this.popup.closed) {
1370
- this.popup.focus();
1371
- return this.popup;
1372
- }
1373
- logPopupSetupStarted();
1374
- this.popup = await openPopup(this.url);
1375
- this.onMessage(({ event }) => event === "PopupUnload").then(() => {
1376
- this.disconnect();
1377
- logPopupUnloadReceived();
1378
- }).catch(() => {
1379
- });
1380
- return this.onMessage(({ event }) => event === "PopupLoaded").then((message) => {
1381
- this.postMessage({
1382
- requestId: message.id,
1383
- data: {
1384
- version: PACKAGE_VERSION,
1385
- sdkName: PACKAGE_NAME,
1386
- metadata: this.metadata,
1387
- preference: this.preference,
1388
- location: window.location.toString()
1389
- }
1390
- });
1391
- }).then(() => {
1392
- if (!this.popup)
1393
- throw standardErrors.rpc.internal();
1394
- logPopupSetupCompleted();
1395
- return this.popup;
1396
- });
1397
- };
1398
- this.url = new URL(url);
1399
- this.metadata = metadata;
1400
- this.preference = preference;
1401
- }
1402
- }
1403
- function serializeError(error) {
1404
- const serialized = serialize(getErrorObject(error), {
1405
- shouldIncludeStack: true
1406
- });
1407
- const docUrl = new URL("https://docs.cloud.coinbase.com/wallet-sdk/docs/errors");
1408
- docUrl.searchParams.set("version", PACKAGE_VERSION);
1409
- docUrl.searchParams.set("code", serialized.code.toString());
1410
- docUrl.searchParams.set("message", serialized.message);
1411
- return Object.assign(Object.assign({}, serialized), { docUrl: docUrl.href });
1412
- }
1413
- function isErrorResponse(response) {
1414
- return response.errorMessage !== void 0;
1415
- }
1416
- function getErrorObject(error) {
1417
- var _a;
1418
- if (typeof error === "string") {
1419
- return {
1420
- message: error,
1421
- code: standardErrorCodes.rpc.internal
1422
- };
1423
- }
1424
- if (isErrorResponse(error)) {
1425
- const message = error.errorMessage;
1426
- const code = (_a = error.errorCode) !== null && _a !== void 0 ? _a : message.match(/(denied|rejected)/i) ? standardErrorCodes.provider.userRejectedRequest : void 0;
1427
- return Object.assign(Object.assign({}, error), {
1428
- message,
1429
- code,
1430
- data: { method: error.method }
1431
- });
1432
- }
1433
- return error;
1434
- }
1435
- class ProviderEventEmitter extends EventEmitter {
1436
- }
1437
- const logRequestStarted$1 = ({ method, correlationId }) => {
1438
- logEvent("provider.request.started", {
1439
- action: ActionType.unknown,
1440
- componentType: ComponentType.unknown,
1441
- method,
1442
- signerType: "base-account",
1443
- correlationId
1444
- }, AnalyticsEventImportance.high);
1445
- };
1446
- const logRequestError$1 = ({ method, correlationId, errorMessage }) => {
1447
- logEvent("provider.request.error", {
1448
- action: ActionType.error,
1449
- componentType: ComponentType.unknown,
1450
- method,
1451
- signerType: "base-account",
1452
- correlationId,
1453
- errorMessage
1454
- }, AnalyticsEventImportance.high);
1455
- };
1456
- const logRequestResponded = ({ method, correlationId }) => {
1457
- logEvent("provider.request.responded", {
1458
- action: ActionType.unknown,
1459
- componentType: ComponentType.unknown,
1460
- method,
1461
- signerType: "base-account",
1462
- correlationId
1463
- }, AnalyticsEventImportance.high);
1464
- };
1465
- function OpaqueType() {
1466
- return (value) => value;
1467
- }
1468
- const HexString = OpaqueType();
1469
- function IntNumber(num) {
1470
- return Math.floor(num);
1471
- }
1472
- const INT_STRING_REGEX = /^[0-9]*$/;
1473
- const HEXADECIMAL_STRING_REGEX = /^[a-f0-9]*$/;
1474
- function uint8ArrayToHex(value) {
1475
- return [...value].map((b) => b.toString(16).padStart(2, "0")).join("");
1476
- }
1477
- function hexStringToUint8Array(hexString) {
1478
- return new Uint8Array(hexString.match(/.{1,2}/g).map((byte) => Number.parseInt(byte, 16)));
1479
- }
1480
- function hexStringFromNumber(num) {
1481
- return HexString(`0x${BigInt(num).toString(16)}`);
1482
- }
1483
- function has0xPrefix(str) {
1484
- return str.startsWith("0x") || str.startsWith("0X");
1485
- }
1486
- function strip0x(hex) {
1487
- if (has0xPrefix(hex)) {
1488
- return hex.slice(2);
1489
- }
1490
- return hex;
1491
- }
1492
- function isHexString(hex) {
1493
- if (typeof hex !== "string") {
1494
- return false;
1495
- }
1496
- const s = strip0x(hex).toLowerCase();
1497
- return HEXADECIMAL_STRING_REGEX.test(s);
1498
- }
1499
- function ensureHexString(hex, includePrefix = false) {
1500
- if (typeof hex === "string") {
1501
- const s = strip0x(hex).toLowerCase();
1502
- if (HEXADECIMAL_STRING_REGEX.test(s)) {
1503
- return HexString(includePrefix ? `0x${s}` : s);
1504
- }
1505
- }
1506
- throw standardErrors.rpc.invalidParams(`"${String(hex)}" is not a hexadecimal string`);
1507
- }
1508
- function ensureEvenLengthHexString(hex, includePrefix = false) {
1509
- let h2 = ensureHexString(hex, false);
1510
- if (h2.length % 2 === 1) {
1511
- h2 = HexString(`0${h2}`);
1512
- }
1513
- return includePrefix ? HexString(`0x${h2}`) : h2;
1514
- }
1515
- function ensureIntNumber(num) {
1516
- if (typeof num === "number" && Number.isInteger(num)) {
1517
- return IntNumber(num);
1518
- }
1519
- if (typeof num === "string") {
1520
- if (INT_STRING_REGEX.test(num)) {
1521
- return IntNumber(Number(num));
1522
- }
1523
- if (isHexString(num)) {
1524
- return IntNumber(Number(BigInt(ensureEvenLengthHexString(num, true))));
1525
- }
1526
- }
1527
- throw standardErrors.rpc.invalidParams(`Not an integer: ${String(num)}`);
1528
- }
1529
- const logHandshakeStarted = ({ method, correlationId }) => {
1530
- var _a;
1531
- logEvent("scw_signer.handshake.started", {
1532
- action: ActionType.unknown,
1533
- componentType: ComponentType.unknown,
1534
- method,
1535
- correlationId,
1536
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1537
- }, AnalyticsEventImportance.high);
1538
- };
1539
- const logHandshakeError = ({ method, correlationId, errorMessage }) => {
1540
- var _a;
1541
- logEvent("scw_signer.handshake.error", {
1542
- action: ActionType.error,
1543
- componentType: ComponentType.unknown,
1544
- method,
1545
- correlationId,
1546
- errorMessage,
1547
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1548
- }, AnalyticsEventImportance.high);
1549
- };
1550
- const logHandshakeCompleted = ({ method, correlationId }) => {
1551
- var _a;
1552
- logEvent("scw_signer.handshake.completed", {
1553
- action: ActionType.unknown,
1554
- componentType: ComponentType.unknown,
1555
- method,
1556
- correlationId,
1557
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1558
- }, AnalyticsEventImportance.high);
1559
- };
1560
- const logRequestStarted = ({ method, correlationId }) => {
1561
- var _a;
1562
- logEvent("scw_signer.request.started", {
1563
- action: ActionType.unknown,
1564
- componentType: ComponentType.unknown,
1565
- method,
1566
- correlationId,
1567
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1568
- }, AnalyticsEventImportance.high);
1569
- };
1570
- const logRequestError = ({ method, correlationId, errorMessage }) => {
1571
- var _a;
1572
- logEvent("scw_signer.request.error", {
1573
- action: ActionType.error,
1574
- componentType: ComponentType.unknown,
1575
- method,
1576
- correlationId,
1577
- errorMessage,
1578
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1579
- }, AnalyticsEventImportance.high);
1580
- };
1581
- const logRequestCompleted = ({ method, correlationId }) => {
1582
- var _a;
1583
- logEvent("scw_signer.request.completed", {
1584
- action: ActionType.unknown,
1585
- componentType: ComponentType.unknown,
1586
- method,
1587
- correlationId,
1588
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1589
- }, AnalyticsEventImportance.high);
1590
- };
1591
- const logSubAccountRequestStarted = ({ method, correlationId }) => {
1592
- var _a;
1593
- logEvent("scw_sub_account.request.started", {
1594
- action: ActionType.unknown,
1595
- componentType: ComponentType.unknown,
1596
- method,
1597
- correlationId,
1598
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1599
- }, AnalyticsEventImportance.high);
1600
- };
1601
- const logSubAccountRequestCompleted = ({ method, correlationId }) => {
1602
- var _a;
1603
- logEvent("scw_sub_account.request.completed", {
1604
- action: ActionType.unknown,
1605
- componentType: ComponentType.unknown,
1606
- method,
1607
- correlationId,
1608
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1609
- }, AnalyticsEventImportance.high);
1610
- };
1611
- const logSubAccountRequestError = ({ method, correlationId, errorMessage }) => {
1612
- var _a;
1613
- logEvent("scw_sub_account.request.error", {
1614
- action: ActionType.error,
1615
- componentType: ComponentType.unknown,
1616
- method,
1617
- correlationId,
1618
- errorMessage,
1619
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1620
- }, AnalyticsEventImportance.high);
1621
- };
1622
- const logAddOwnerStarted = ({ method, correlationId }) => {
1623
- var _a;
1624
- logEvent("scw_sub_account.add_owner.started", {
1625
- action: ActionType.unknown,
1626
- componentType: ComponentType.unknown,
1627
- method,
1628
- correlationId,
1629
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1630
- }, AnalyticsEventImportance.high);
1631
- };
1632
- const logAddOwnerCompleted = ({ method, correlationId }) => {
1633
- var _a;
1634
- logEvent("scw_sub_account.add_owner.completed", {
1635
- action: ActionType.unknown,
1636
- componentType: ComponentType.unknown,
1637
- method,
1638
- correlationId,
1639
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1640
- }, AnalyticsEventImportance.high);
1641
- };
1642
- const logAddOwnerError = ({ method, correlationId, errorMessage }) => {
1643
- var _a;
1644
- logEvent("scw_sub_account.add_owner.error", {
1645
- action: ActionType.error,
1646
- componentType: ComponentType.unknown,
1647
- method,
1648
- correlationId,
1649
- errorMessage,
1650
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1651
- }, AnalyticsEventImportance.high);
1652
- };
1653
- const logInsufficientBalanceErrorHandlingStarted = ({ method, correlationId }) => {
1654
- var _a;
1655
- logEvent("scw_sub_account.insufficient_balance.error_handling.started", {
1656
- action: ActionType.unknown,
1657
- componentType: ComponentType.unknown,
1658
- method,
1659
- correlationId,
1660
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1661
- }, AnalyticsEventImportance.high);
1662
- };
1663
- const logInsufficientBalanceErrorHandlingCompleted = ({ method, correlationId }) => {
1664
- var _a;
1665
- logEvent("scw_sub_account.insufficient_balance.error_handling.completed", {
1666
- action: ActionType.unknown,
1667
- componentType: ComponentType.unknown,
1668
- method,
1669
- correlationId,
1670
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1671
- }, AnalyticsEventImportance.high);
1672
- };
1673
- const logInsufficientBalanceErrorHandlingError = ({ method, correlationId, errorMessage }) => {
1674
- var _a;
1675
- logEvent("scw_sub_account.insufficient_balance.error_handling.error", {
1676
- action: ActionType.error,
1677
- componentType: ComponentType.unknown,
1678
- method,
1679
- correlationId,
1680
- errorMessage,
1681
- enableAutoSubAccounts: (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.enableAutoSubAccounts
1682
- }, AnalyticsEventImportance.high);
1683
- };
1684
- const parseErrorMessageFromAny = (errorOrAny) => {
1685
- return "message" in errorOrAny && typeof errorOrAny.message === "string" ? errorOrAny.message : "";
1686
- };
1687
- const ChainClients = createStore(() => ({}));
1688
- function createClients(chains2) {
1689
- chains2.forEach((c) => {
1690
- var _a, _b, _c, _d, _e, _f, _g, _h;
1691
- if (!c.rpcUrl) {
1692
- return;
1693
- }
1694
- const viemchain = defineChain({
1695
- id: c.id,
1696
- rpcUrls: {
1697
- default: {
1698
- http: [c.rpcUrl]
1699
- }
1700
- },
1701
- name: (_b = (_a = c.nativeCurrency) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "",
1702
- nativeCurrency: {
1703
- name: (_d = (_c = c.nativeCurrency) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : "",
1704
- symbol: (_f = (_e = c.nativeCurrency) === null || _e === void 0 ? void 0 : _e.symbol) !== null && _f !== void 0 ? _f : "",
1705
- decimals: (_h = (_g = c.nativeCurrency) === null || _g === void 0 ? void 0 : _g.decimal) !== null && _h !== void 0 ? _h : 18
1706
- }
1707
- });
1708
- const client = createPublicClient({
1709
- chain: viemchain,
1710
- transport: http(c.rpcUrl)
1711
- });
1712
- const bundlerClient = createBundlerClient({
1713
- client,
1714
- transport: http(c.rpcUrl)
1715
- });
1716
- ChainClients.setState({
1717
- [c.id]: {
1718
- client,
1719
- bundlerClient
1720
- }
1721
- });
1722
- });
1723
- }
1724
- function getClient(chainId) {
1725
- var _a;
1726
- return (_a = ChainClients.getState()[chainId]) === null || _a === void 0 ? void 0 : _a.client;
1727
- }
1728
- const correlationIdsStore = createStore(() => ({
1729
- correlationIds: /* @__PURE__ */ new Map()
1730
- }));
1731
- const correlationIds = {
1732
- get: (key) => {
1733
- const correlationId = correlationIdsStore.getState().correlationIds.get(key);
1734
- return correlationId;
1735
- },
1736
- set: (key, correlationId) => {
1737
- correlationIdsStore.setState((state) => {
1738
- const newMap = new Map(state.correlationIds);
1739
- newMap.set(key, correlationId);
1740
- return { correlationIds: newMap };
1741
- });
1742
- },
1743
- delete: (key) => {
1744
- correlationIdsStore.setState((state) => {
1745
- const newMap = new Map(state.correlationIds);
1746
- newMap.delete(key);
1747
- return { correlationIds: newMap };
1748
- });
1749
- },
1750
- clear: () => {
1751
- correlationIdsStore.setState({
1752
- correlationIds: /* @__PURE__ */ new Map()
1753
- });
1754
- }
1755
- };
1756
- function assertSubAccount(info) {
1757
- if (typeof info !== "object" || info === null) {
1758
- throw standardErrors.rpc.internal("sub account info is not an object");
1759
- }
1760
- if (!("address" in info)) {
1761
- throw standardErrors.rpc.internal("sub account is invalid");
1762
- }
1763
- if ("address" in info && typeof info.address === "string" && !isAddress(info.address)) {
1764
- throw standardErrors.rpc.internal("sub account address is invalid");
1765
- }
1766
- if ("factory" in info && typeof info.factory === "string" && !isAddress(info.factory)) {
1767
- throw standardErrors.rpc.internal("sub account factory address is invalid");
1768
- }
1769
- if ("factoryData" in info && typeof info.factoryData === "string" && !isHex(info.factoryData)) {
1770
- throw standardErrors.rpc.internal("sub account factory data is invalid");
1771
- }
1772
- }
1773
- async function generateKeyPair$1() {
1774
- return crypto.subtle.generateKey({
1775
- name: "ECDH",
1776
- namedCurve: "P-256"
1777
- }, true, ["deriveKey"]);
1778
- }
1779
- async function deriveSharedSecret(ownPrivateKey, peerPublicKey) {
1780
- return crypto.subtle.deriveKey({
1781
- name: "ECDH",
1782
- public: peerPublicKey
1783
- }, ownPrivateKey, {
1784
- name: "AES-GCM",
1785
- length: 256
1786
- }, false, ["encrypt", "decrypt"]);
1787
- }
1788
- async function encrypt(sharedSecret, plainText) {
1789
- const iv = crypto.getRandomValues(new Uint8Array(12));
1790
- const cipherText = await crypto.subtle.encrypt({
1791
- name: "AES-GCM",
1792
- iv
1793
- }, sharedSecret, new TextEncoder().encode(plainText));
1794
- return { iv, cipherText };
1795
- }
1796
- async function decrypt(sharedSecret, { iv, cipherText }) {
1797
- const plainText = await crypto.subtle.decrypt({
1798
- name: "AES-GCM",
1799
- iv
1800
- }, sharedSecret, cipherText);
1801
- return new TextDecoder().decode(plainText);
1802
- }
1803
- function getFormat(keyType) {
1804
- switch (keyType) {
1805
- case "public":
1806
- return "spki";
1807
- case "private":
1808
- return "pkcs8";
1809
- }
1810
- }
1811
- async function exportKeyToHexString(type, key) {
1812
- const format = getFormat(type);
1813
- const exported = await crypto.subtle.exportKey(format, key);
1814
- return uint8ArrayToHex(new Uint8Array(exported));
1815
- }
1816
- async function importKeyFromHexString(type, hexString) {
1817
- const format = getFormat(type);
1818
- const arrayBuffer = hexStringToUint8Array(hexString).buffer;
1819
- return await crypto.subtle.importKey(format, new Uint8Array(arrayBuffer), {
1820
- name: "ECDH",
1821
- namedCurve: "P-256"
1822
- }, true, type === "private" ? ["deriveKey"] : []);
1823
- }
1824
- async function encryptContent(content, sharedSecret) {
1825
- const serialized = JSON.stringify(content, (_2, value) => {
1826
- if (!(value instanceof Error))
1827
- return value;
1828
- const error = value;
1829
- return Object.assign(Object.assign({}, error.code ? { code: error.code } : {}), { message: error.message });
1830
- });
1831
- return encrypt(sharedSecret, serialized);
1832
- }
1833
- async function decryptContent(encryptedData, sharedSecret) {
1834
- return JSON.parse(await decrypt(sharedSecret, encryptedData));
1835
- }
1836
- async function fetchRPCRequest(request, rpcUrl) {
1837
- const requestBody = Object.assign(Object.assign({}, request), { jsonrpc: "2.0", id: crypto.randomUUID() });
1838
- const res = await window.fetch(rpcUrl, {
1839
- method: "POST",
1840
- body: JSON.stringify(requestBody),
1841
- mode: "cors",
1842
- headers: {
1843
- "Content-Type": "application/json",
1844
- "X-Cbw-Sdk-Version": PACKAGE_VERSION,
1845
- "X-Cbw-Sdk-Platform": PACKAGE_NAME
1846
- }
1847
- });
1848
- const { result, error } = await res.json();
1849
- if (error)
1850
- throw error;
1851
- return result;
1852
- }
1853
- function checkErrorForInvalidRequestArgs(args) {
1854
- if (!args || typeof args !== "object" || Array.isArray(args)) {
1855
- throw standardErrors.rpc.invalidParams({
1856
- message: "Expected a single, non-array, object argument.",
1857
- data: args
1858
- });
1859
- }
1860
- const { method, params } = args;
1861
- if (typeof method !== "string" || method.length === 0) {
1862
- throw standardErrors.rpc.invalidParams({
1863
- message: "'args.method' must be a non-empty string.",
1864
- data: args
1865
- });
1866
- }
1867
- if (params !== void 0 && !Array.isArray(params) && (typeof params !== "object" || params === null)) {
1868
- throw standardErrors.rpc.invalidParams({
1869
- message: "'args.params' must be an object or array if provided.",
1870
- data: args
1871
- });
1872
- }
1873
- switch (method) {
1874
- case "eth_sign":
1875
- case "eth_signTypedData_v2":
1876
- case "eth_subscribe":
1877
- case "eth_unsubscribe":
1878
- throw standardErrors.provider.unsupportedMethod();
1879
- }
1880
- }
1881
- function createStorage(scope, name2) {
1882
- const store2 = typeof indexedDB !== "undefined" ? createStore$1(scope, name2) : void 0;
1883
- return {
1884
- getItem: async (key) => {
1885
- const value = await get$1(key, store2);
1886
- if (!value) {
1887
- return null;
1888
- }
1889
- return value;
1890
- },
1891
- removeItem: async (key) => {
1892
- return del(key, store2);
1893
- },
1894
- setItem: async (key, value) => {
1895
- return set(key, value, store2);
1896
- }
1897
- };
1898
- }
1899
- const STORAGE_SCOPE = "base-acc-sdk";
1900
- const STORAGE_NAME = "keys";
1901
- const ACTIVE_ID_KEY = "activeId";
1902
- const storage = createStorage(STORAGE_SCOPE, STORAGE_NAME);
1903
- async function generateKeyPair() {
1904
- const keypair = await createKeyPair({ extractable: false });
1905
- const publicKey = slice(toHex(keypair.publicKey), 1);
1906
- await storage.setItem(publicKey, keypair);
1907
- await storage.setItem(ACTIVE_ID_KEY, publicKey);
1908
- return keypair;
1909
- }
1910
- async function getKeypair() {
1911
- const id = await storage.getItem(ACTIVE_ID_KEY);
1912
- if (!id) {
1913
- return null;
1914
- }
1915
- const keypair = await storage.getItem(id);
1916
- if (!keypair) {
1917
- return null;
1918
- }
1919
- return keypair;
1920
- }
1921
- async function getOrCreateKeypair() {
1922
- const keypair = await getKeypair();
1923
- if (!keypair) {
1924
- const kp = await generateKeyPair();
1925
- const pubKey = slice(toHex(kp.publicKey), 1);
1926
- await storage.setItem(pubKey, kp);
1927
- await storage.setItem(ACTIVE_ID_KEY, pubKey);
1928
- return kp;
1929
- }
1930
- return keypair;
1931
- }
1932
- async function getAccount() {
1933
- const keypair = await getOrCreateKeypair();
1934
- const publicKey = slice(toHex(keypair.publicKey), 1);
1935
- const sign2 = async (payload) => {
1936
- const { payload: message, metadata } = getSignPayload({
1937
- challenge: payload,
1938
- origin: "https://keys.coinbase.com",
1939
- userVerification: "preferred"
1940
- });
1941
- const signature = await sign$1({
1942
- payload: message,
1943
- privateKey: keypair.privateKey
1944
- });
1945
- return {
1946
- signature: toHex$1(signature),
1947
- raw: {},
1948
- // type changed in viem
1949
- webauthn: metadata
1950
- };
1951
- };
1952
- return {
1953
- id: publicKey,
1954
- publicKey,
1955
- async sign({ hash }) {
1956
- return sign2(hash);
1957
- },
1958
- async signMessage({ message }) {
1959
- return sign2(hashMessage(message));
1960
- },
1961
- async signTypedData(parameters) {
1962
- return sign2(hashTypedData(parameters));
1963
- },
1964
- type: "webAuthn"
1965
- };
1966
- }
1967
- async function getCryptoKeyAccount() {
1968
- const account2 = await getAccount();
1969
- return {
1970
- account: account2
1971
- };
1972
- }
1973
- const OWN_PRIVATE_KEY = {
1974
- storageKey: "ownPrivateKey",
1975
- keyType: "private"
1976
- };
1977
- const OWN_PUBLIC_KEY = {
1978
- storageKey: "ownPublicKey",
1979
- keyType: "public"
1980
- };
1981
- const PEER_PUBLIC_KEY = {
1982
- storageKey: "peerPublicKey",
1983
- keyType: "public"
1984
- };
1985
- class SCWKeyManager {
1986
- constructor() {
1987
- this.ownPrivateKey = null;
1988
- this.ownPublicKey = null;
1989
- this.peerPublicKey = null;
1990
- this.sharedSecret = null;
1991
- }
1992
- async getOwnPublicKey() {
1993
- await this.loadKeysIfNeeded();
1994
- return this.ownPublicKey;
1995
- }
1996
- // returns null if the shared secret is not yet derived
1997
- async getSharedSecret() {
1998
- await this.loadKeysIfNeeded();
1999
- return this.sharedSecret;
2000
- }
2001
- async setPeerPublicKey(key) {
2002
- this.sharedSecret = null;
2003
- this.peerPublicKey = key;
2004
- await this.storeKey(PEER_PUBLIC_KEY, key);
2005
- await this.loadKeysIfNeeded();
2006
- }
2007
- async clear() {
2008
- this.ownPrivateKey = null;
2009
- this.ownPublicKey = null;
2010
- this.peerPublicKey = null;
2011
- this.sharedSecret = null;
2012
- store.keys.clear();
2013
- }
2014
- async generateKeyPair() {
2015
- const newKeyPair = await generateKeyPair$1();
2016
- this.ownPrivateKey = newKeyPair.privateKey;
2017
- this.ownPublicKey = newKeyPair.publicKey;
2018
- await this.storeKey(OWN_PRIVATE_KEY, newKeyPair.privateKey);
2019
- await this.storeKey(OWN_PUBLIC_KEY, newKeyPair.publicKey);
2020
- }
2021
- async loadKeysIfNeeded() {
2022
- if (this.ownPrivateKey === null) {
2023
- this.ownPrivateKey = await this.loadKey(OWN_PRIVATE_KEY);
2024
- }
2025
- if (this.ownPublicKey === null) {
2026
- this.ownPublicKey = await this.loadKey(OWN_PUBLIC_KEY);
2027
- }
2028
- if (this.ownPrivateKey === null || this.ownPublicKey === null) {
2029
- await this.generateKeyPair();
2030
- }
2031
- if (this.peerPublicKey === null) {
2032
- this.peerPublicKey = await this.loadKey(PEER_PUBLIC_KEY);
2033
- }
2034
- if (this.sharedSecret === null) {
2035
- if (this.ownPrivateKey === null || this.peerPublicKey === null)
2036
- return;
2037
- this.sharedSecret = await deriveSharedSecret(this.ownPrivateKey, this.peerPublicKey);
2038
- }
2039
- }
2040
- // storage methods
2041
- async loadKey(item) {
2042
- const key = store.keys.get(item.storageKey);
2043
- if (!key)
2044
- return null;
2045
- return importKeyFromHexString(item.keyType, key);
2046
- }
2047
- async storeKey(item, key) {
2048
- const hexString = await exportKeyToHexString(item.keyType, key);
2049
- store.keys.set(item.storageKey, hexString);
2050
- }
2051
- }
2052
- function get(obj, path) {
2053
- if (typeof obj !== "object" || obj === null)
2054
- return void 0;
2055
- return path.split(/[.[\]]+/).filter(Boolean).reduce((value, key) => {
2056
- if (typeof value === "object" && value !== null) {
2057
- return value[key];
2058
- }
2059
- return void 0;
2060
- }, obj);
2061
- }
2062
- function getSenderFromRequest(request) {
2063
- var _a;
2064
- if (!Array.isArray(request.params)) {
2065
- return null;
2066
- }
2067
- switch (request.method) {
2068
- case "personal_sign":
2069
- return request.params[1];
2070
- case "eth_signTypedData_v4":
2071
- return request.params[0];
2072
- case "eth_signTransaction":
2073
- case "eth_sendTransaction":
2074
- case "wallet_sendCalls":
2075
- return (_a = request.params[0]) === null || _a === void 0 ? void 0 : _a.from;
2076
- default:
2077
- return null;
2078
- }
2079
- }
2080
- function addSenderToRequest(request, sender) {
2081
- if (!Array.isArray(request.params)) {
2082
- throw standardErrors.rpc.invalidParams();
2083
- }
2084
- const params = [...request.params];
2085
- switch (request.method) {
2086
- case "eth_signTransaction":
2087
- case "eth_sendTransaction":
2088
- case "wallet_sendCalls":
2089
- params[0].from = sender;
2090
- break;
2091
- case "eth_signTypedData_v4":
2092
- params[0] = sender;
2093
- break;
2094
- case "personal_sign":
2095
- params[1] = sender;
2096
- break;
2097
- }
2098
- return Object.assign(Object.assign({}, request), { params });
2099
- }
2100
- function assertParamsChainId(params) {
2101
- var _a;
2102
- if (!params || !Array.isArray(params) || !((_a = params[0]) === null || _a === void 0 ? void 0 : _a.chainId)) {
2103
- throw standardErrors.rpc.invalidParams();
2104
- }
2105
- if (typeof params[0].chainId !== "string" && typeof params[0].chainId !== "number") {
2106
- throw standardErrors.rpc.invalidParams();
2107
- }
2108
- }
2109
- function assertGetCapabilitiesParams(params) {
2110
- if (!params || !Array.isArray(params) || params.length !== 1 && params.length !== 2) {
2111
- throw standardErrors.rpc.invalidParams();
2112
- }
2113
- if (typeof params[0] !== "string" || !isAddress(params[0])) {
2114
- throw standardErrors.rpc.invalidParams();
2115
- }
2116
- if (params.length === 2) {
2117
- if (!Array.isArray(params[1])) {
2118
- throw standardErrors.rpc.invalidParams();
2119
- }
2120
- for (const param of params[1]) {
2121
- if (typeof param !== "string" || !param.startsWith("0x")) {
2122
- throw standardErrors.rpc.invalidParams();
2123
- }
2124
- }
2125
- }
2126
- }
2127
- function injectRequestCapabilities(request, capabilities) {
2128
- const modifiedRequest = Object.assign({}, request);
2129
- if (capabilities && request.method.startsWith("wallet_")) {
2130
- let requestCapabilities = get(modifiedRequest, "params.0.capabilities");
2131
- if (typeof requestCapabilities === "undefined") {
2132
- requestCapabilities = {};
2133
- }
2134
- if (typeof requestCapabilities !== "object") {
2135
- throw standardErrors.rpc.invalidParams();
2136
- }
2137
- requestCapabilities = Object.assign(Object.assign({}, capabilities), requestCapabilities);
2138
- if (modifiedRequest.params && Array.isArray(modifiedRequest.params)) {
2139
- modifiedRequest.params[0] = Object.assign(Object.assign({}, modifiedRequest.params[0]), { capabilities: requestCapabilities });
2140
- }
2141
- }
2142
- return modifiedRequest;
2143
- }
2144
- async function initSubAccountConfig() {
2145
- var _a;
2146
- const config2 = (_a = store.subAccountsConfig.get()) !== null && _a !== void 0 ? _a : {};
2147
- const capabilities = {};
2148
- if (config2.enableAutoSubAccounts) {
2149
- const { account: owner } = config2.toOwnerAccount ? await config2.toOwnerAccount() : await getCryptoKeyAccount();
2150
- if (!owner) {
2151
- throw standardErrors.provider.unauthorized("No owner account found");
2152
- }
2153
- capabilities.addSubAccount = {
2154
- account: {
2155
- type: "create",
2156
- keys: [
2157
- {
2158
- type: owner.address ? "address" : "webauthn-p256",
2159
- publicKey: owner.address || owner.publicKey
2160
- }
2161
- ]
2162
- }
2163
- };
2164
- }
2165
- store.subAccountsConfig.set({
2166
- capabilities
2167
- });
2168
- }
2169
- function assertFetchPermissionsRequest(request) {
2170
- if (request.method === "coinbase_fetchPermissions" && request.params === void 0) {
2171
- return;
2172
- }
2173
- if (request.method === "coinbase_fetchPermissions" && Array.isArray(request.params) && request.params.length === 1 && typeof request.params[0] === "object") {
2174
- if (typeof request.params[0].account !== "string" || !request.params[0].chainId.startsWith("0x")) {
2175
- throw standardErrors.rpc.invalidParams("FetchPermissions - Invalid params: params[0].account must be a hex string");
2176
- }
2177
- if (typeof request.params[0].chainId !== "string" || !request.params[0].chainId.startsWith("0x")) {
2178
- throw standardErrors.rpc.invalidParams("FetchPermissions - Invalid params: params[0].chainId must be a hex string");
2179
- }
2180
- if (typeof request.params[0].spender !== "string" || !request.params[0].spender.startsWith("0x")) {
2181
- throw standardErrors.rpc.invalidParams("FetchPermissions - Invalid params: params[0].spender must be a hex string");
2182
- }
2183
- return;
2184
- }
2185
- throw standardErrors.rpc.invalidParams();
2186
- }
2187
- function fillMissingParamsForFetchPermissions(request) {
2188
- var _a, _b, _c;
2189
- if (request.params !== void 0) {
2190
- return request;
2191
- }
2192
- const accountFromStore = (_a = store.getState().account.accounts) === null || _a === void 0 ? void 0 : _a[0];
2193
- const chainId = (_b = store.getState().account.chain) === null || _b === void 0 ? void 0 : _b.id;
2194
- const subAccountFromStore = (_c = store.getState().subAccount) === null || _c === void 0 ? void 0 : _c.address;
2195
- if (!accountFromStore || !subAccountFromStore || !chainId) {
2196
- throw standardErrors.rpc.invalidParams("FetchPermissions - one or more of account, sub account, or chain id is missing, connect to sub account via wallet_connect first");
2197
- }
2198
- return {
2199
- method: "coinbase_fetchPermissions",
2200
- params: [
2201
- {
2202
- account: accountFromStore,
2203
- chainId: numberToHex(chainId),
2204
- spender: subAccountFromStore
2205
- }
2206
- ]
2207
- };
2208
- }
2209
- function createSpendPermissionMessage({ spendPermission, chainId }) {
2210
- return {
2211
- domain: {
2212
- name: "Spend Permission Manager",
2213
- version: "1",
2214
- chainId,
2215
- verifyingContract: spendPermissionManagerAddress
2216
- },
2217
- types: {
2218
- SpendPermission: [
2219
- { name: "account", type: "address" },
2220
- { name: "spender", type: "address" },
2221
- { name: "token", type: "address" },
2222
- { name: "allowance", type: "uint160" },
2223
- { name: "period", type: "uint48" },
2224
- { name: "start", type: "uint48" },
2225
- { name: "end", type: "uint48" },
2226
- { name: "salt", type: "uint256" },
2227
- { name: "extraData", type: "bytes" }
2228
- ]
2229
- },
2230
- primaryType: "SpendPermission",
2231
- message: {
2232
- account: spendPermission.account,
2233
- spender: spendPermission.spender,
2234
- token: spendPermission.token,
2235
- allowance: spendPermission.allowance,
2236
- period: spendPermission.period,
2237
- start: spendPermission.start,
2238
- end: spendPermission.end,
2239
- salt: spendPermission.salt,
2240
- extraData: spendPermission.extraData
2241
- }
2242
- };
2243
- }
2244
- function createSpendPermissionBatchMessage({ spendPermissionBatch, chainId }) {
2245
- return {
2246
- domain: {
2247
- name: "Spend Permission Manager",
2248
- version: "1",
2249
- chainId,
2250
- verifyingContract: spendPermissionManagerAddress
2251
- },
2252
- types: {
2253
- SpendPermissionBatch: [
2254
- { name: "account", type: "address" },
2255
- { name: "period", type: "uint48" },
2256
- { name: "start", type: "uint48" },
2257
- { name: "end", type: "uint48" },
2258
- { name: "permissions", type: "PermissionDetails[]" }
2259
- ],
2260
- PermissionDetails: [
2261
- { name: "spender", type: "address" },
2262
- { name: "token", type: "address" },
2263
- { name: "allowance", type: "uint160" },
2264
- { name: "salt", type: "uint256" },
2265
- { name: "extraData", type: "bytes" }
2266
- ]
2267
- },
2268
- primaryType: "SpendPermissionBatch",
2269
- message: {
2270
- account: spendPermissionBatch.account,
2271
- period: spendPermissionBatch.period,
2272
- start: spendPermissionBatch.start,
2273
- end: spendPermissionBatch.end,
2274
- permissions: spendPermissionBatch.permissions.map((p) => ({
2275
- spender: p.spender,
2276
- token: p.token,
2277
- allowance: p.allowance,
2278
- salt: p.salt,
2279
- extraData: p.extraData
2280
- }))
2281
- }
2282
- };
2283
- }
2284
- async function waitForCallsTransactionHash({ client, id }) {
2285
- var _a;
2286
- const result = await waitForCallsStatus(client, {
2287
- id
2288
- });
2289
- if (result.status === "success") {
2290
- return (_a = result.receipts) === null || _a === void 0 ? void 0 : _a[0].transactionHash;
2291
- }
2292
- throw standardErrors.rpc.internal("failed to send transaction");
2293
- }
2294
- function createWalletSendCallsRequest({ calls, from, chainId, capabilities }) {
2295
- const paymasterUrls = config.get().paymasterUrls;
2296
- let request = {
2297
- method: "wallet_sendCalls",
2298
- params: [
2299
- {
2300
- version: "1.0",
2301
- calls,
2302
- chainId: numberToHex(chainId),
2303
- from,
2304
- atomicRequired: true,
2305
- capabilities
2306
- }
2307
- ]
2308
- };
2309
- if (paymasterUrls === null || paymasterUrls === void 0 ? void 0 : paymasterUrls[chainId]) {
2310
- request = injectRequestCapabilities(request, {
2311
- paymasterService: { url: paymasterUrls === null || paymasterUrls === void 0 ? void 0 : paymasterUrls[chainId] }
2312
- });
2313
- }
2314
- return request;
2315
- }
2316
- async function presentSubAccountFundingDialog() {
2317
- const dialog2 = initDialog();
2318
- const userChoice = await new Promise((resolve) => {
2319
- logDialogShown({ dialogContext: "sub_account_insufficient_balance" });
2320
- dialog2.presentItem({
2321
- title: "Insufficient spend permission",
2322
- message: "Your spend permission's remaining balance cannot cover this transaction. Please choose how to proceed:",
2323
- onClose: () => {
2324
- logDialogDismissed({ dialogContext: "sub_account_insufficient_balance" });
2325
- dialog2.clear();
2326
- },
2327
- actionItems: [
2328
- {
2329
- text: "Edit spend permission",
2330
- variant: "primary",
2331
- onClick: () => {
2332
- logDialogActionClicked({
2333
- dialogContext: "sub_account_insufficient_balance",
2334
- dialogAction: "create_permission"
2335
- });
2336
- dialog2.clear();
2337
- resolve("update_permission");
2338
- }
2339
- },
2340
- {
2341
- text: "Use primary account",
2342
- variant: "secondary",
2343
- onClick: () => {
2344
- logDialogActionClicked({
2345
- dialogContext: "sub_account_insufficient_balance",
2346
- dialogAction: "continue_in_popup"
2347
- });
2348
- dialog2.clear();
2349
- resolve("continue_popup");
2350
- }
2351
- }
2352
- ]
2353
- });
2354
- });
2355
- return userChoice;
2356
- }
2357
- function parseFundingOptions({ errorData, sourceAddress }) {
2358
- var _a;
2359
- const spendPermissionRequests = [];
2360
- for (const [token, { amount, sources }] of Object.entries((_a = errorData === null || errorData === void 0 ? void 0 : errorData.required) !== null && _a !== void 0 ? _a : {})) {
2361
- const sourcesWithSufficientBalance = sources.filter((source) => {
2362
- return hexToBigInt(source.balance) >= hexToBigInt(amount) && source.address.toLowerCase() === (sourceAddress === null || sourceAddress === void 0 ? void 0 : sourceAddress.toLowerCase());
2363
- });
2364
- if (sourcesWithSufficientBalance.length === 0) {
2365
- throw new Error("Source address has insufficient balance for a token");
2366
- }
2367
- spendPermissionRequests.push({
2368
- token,
2369
- requiredAmount: hexToBigInt(amount)
2370
- });
2371
- }
2372
- return spendPermissionRequests;
2373
- }
2374
- function isSendCallsParams(params) {
2375
- return typeof params === "object" && params !== null && "calls" in params;
2376
- }
2377
- function isEthSendTransactionParams(params) {
2378
- return Array.isArray(params) && params.length === 1 && typeof params[0] === "object" && params[0] !== null && "to" in params[0];
2379
- }
2380
- function compute16ByteHash(input) {
2381
- return slice$1(keccak256(toHex$2(input)), 0, 16);
2382
- }
2383
- function makeDataSuffix({ attribution, dappOrigin }) {
2384
- if (!attribution) {
2385
- return;
2386
- }
2387
- if ("auto" in attribution && attribution.auto && dappOrigin) {
2388
- return compute16ByteHash(dappOrigin);
2389
- }
2390
- if ("dataSuffix" in attribution) {
2391
- return attribution.dataSuffix;
2392
- }
2393
- return;
2394
- }
2395
- function requestHasCapability(request, capabilityName) {
2396
- var _a;
2397
- if (!Array.isArray(request === null || request === void 0 ? void 0 : request.params))
2398
- return false;
2399
- const capabilities = (_a = request.params[0]) === null || _a === void 0 ? void 0 : _a.capabilities;
2400
- if (!capabilities || typeof capabilities !== "object")
2401
- return false;
2402
- return capabilityName in capabilities;
2403
- }
2404
- function prependWithoutDuplicates(array, item) {
2405
- const filtered = array.filter((i) => i !== item);
2406
- return [item, ...filtered];
2407
- }
2408
- function appendWithoutDuplicates(array, item) {
2409
- const filtered = array.filter((i) => i !== item);
2410
- return [...filtered, item];
2411
- }
2412
- async function getCachedWalletConnectResponse() {
2413
- const spendPermissions2 = store.spendPermissions.get();
2414
- const subAccount = store.subAccounts.get();
2415
- const accounts = store.account.get().accounts;
2416
- if (!accounts) {
2417
- return null;
2418
- }
2419
- const walletConnectAccounts = accounts === null || accounts === void 0 ? void 0 : accounts.map((account2) => ({
2420
- address: account2,
2421
- capabilities: {
2422
- subAccounts: subAccount ? [subAccount] : void 0,
2423
- spendPermissions: spendPermissions2.length > 0 ? { permissions: spendPermissions2 } : void 0
2424
- }
2425
- }));
2426
- return {
2427
- accounts: walletConnectAccounts
2428
- };
2429
- }
2430
- function base64ToBase64Url(base64) {
2431
- return base64.replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
2432
- }
2433
- function arrayBufferToBase64Url(buffer) {
2434
- const base64String = btoa(String.fromCharCode(...new Uint8Array(buffer)));
2435
- return base64ToBase64Url(base64String);
2436
- }
2437
- function convertCredentialToJSON({ webauthn, signature, id }) {
2438
- const signatureRaw = fromHex(signature);
2439
- return {
2440
- id,
2441
- rawId: arrayBufferToBase64Url(stringToBytes(id)),
2442
- response: {
2443
- authenticatorData: arrayBufferToBase64Url(hexToBytes(webauthn.authenticatorData)),
2444
- clientDataJSON: arrayBufferToBase64Url(stringToBytes(webauthn.clientDataJSON)),
2445
- signature: arrayBufferToBase64Url(asn1EncodeSignature(signatureRaw.r, signatureRaw.s))
2446
- },
2447
- type: JSON.parse(webauthn.clientDataJSON).type
2448
- };
2449
- }
2450
- function asn1EncodeSignature(r, s) {
2451
- const rBytes = hexToBytes(trim(numberToHex(r)));
2452
- const sBytes = hexToBytes(trim(numberToHex(s)));
2453
- const rLength = rBytes.length;
2454
- const sLength = sBytes.length;
2455
- const totalLength = rLength + sLength + 4;
2456
- const signature = new Uint8Array(totalLength + 2);
2457
- signature[0] = 48;
2458
- signature[1] = totalLength;
2459
- signature[2] = 2;
2460
- signature[3] = rLength;
2461
- signature.set(rBytes, 4);
2462
- signature[rLength + 4] = 2;
2463
- signature[rLength + 5] = sLength;
2464
- signature.set(sBytes, rLength + 6);
2465
- return signature;
2466
- }
2467
- var __rest$1 = function(s, e) {
2468
- var t = {};
2469
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
2470
- t[p] = s[p];
2471
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
2472
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2473
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
2474
- t[p[i]] = s[p[i]];
2475
- }
2476
- return t;
2477
- };
2478
- async function createSmartAccount(parameters) {
2479
- const { owner, ownerIndex, address, client, factoryData } = parameters;
2480
- const entryPoint = {
2481
- abi: entryPoint06Abi,
2482
- address: entryPoint06Address,
2483
- version: "0.6"
2484
- };
2485
- const factory = {
2486
- abi: factoryAbi,
2487
- address: factoryAddress
2488
- };
2489
- return toSmartAccount({
2490
- client,
2491
- entryPoint,
2492
- extend: { abi, factory },
2493
- async decodeCalls(data) {
2494
- const result = decodeFunctionData({
2495
- abi,
2496
- data
2497
- });
2498
- if (result.functionName === "execute")
2499
- return [{ to: result.args[0], value: result.args[1], data: result.args[2] }];
2500
- if (result.functionName === "executeBatch")
2501
- return result.args[0].map((arg) => ({
2502
- to: arg.target,
2503
- value: arg.value,
2504
- data: arg.data
2505
- }));
2506
- throw new BaseError(`unable to decode calls for "${result.functionName}"`);
2507
- },
2508
- async encodeCalls(calls) {
2509
- var _a, _b;
2510
- if (calls.length === 1) {
2511
- return encodeFunctionData({
2512
- abi,
2513
- functionName: "execute",
2514
- args: [calls[0].to, (_a = calls[0].value) !== null && _a !== void 0 ? _a : BigInt(0), (_b = calls[0].data) !== null && _b !== void 0 ? _b : "0x"]
2515
- });
2516
- }
2517
- return encodeFunctionData({
2518
- abi,
2519
- functionName: "executeBatch",
2520
- args: [
2521
- calls.map((call) => {
2522
- var _a2, _b2;
2523
- return {
2524
- data: (_a2 = call.data) !== null && _a2 !== void 0 ? _a2 : "0x",
2525
- target: call.to,
2526
- value: (_b2 = call.value) !== null && _b2 !== void 0 ? _b2 : BigInt(0)
2527
- };
2528
- })
2529
- ]
2530
- });
2531
- },
2532
- async getAddress() {
2533
- return address;
2534
- },
2535
- async getFactoryArgs() {
2536
- if (factoryData)
2537
- return { factory: factory.address, factoryData };
2538
- return { factory: factory.address, factoryData };
2539
- },
2540
- async getStubSignature() {
2541
- if (owner.type === "webAuthn")
2542
- return "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001949fc7c88032b9fcb5f6efc7a7b8c63668eae9871b765e23123bb473ff57aa831a7c0d9276168ebcc29f2875a0239cffdf2a9cd1c2007c5c77c071db9264df1d000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a2273496a396e6164474850596759334b7156384f7a4a666c726275504b474f716d59576f4d57516869467773222c226f726967696e223a2268747470733a2f2f7369676e2e636f696e626173652e636f6d222c2263726f73734f726967696e223a66616c73657d00000000000000000000000000000000000000000000";
2543
- return wrapSignature({
2544
- ownerIndex,
2545
- signature: "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c"
2546
- });
2547
- },
2548
- async sign(parameters2) {
2549
- const address2 = await this.getAddress();
2550
- const hash = toReplaySafeHash({
2551
- address: address2,
2552
- chainId: client.chain.id,
2553
- hash: parameters2.hash
2554
- });
2555
- const signature = await sign({ hash, owner });
2556
- return wrapSignature({
2557
- ownerIndex,
2558
- signature
2559
- });
2560
- },
2561
- async signMessage(parameters2) {
2562
- const { message } = parameters2;
2563
- const address2 = await this.getAddress();
2564
- const hash = toReplaySafeHash({
2565
- address: address2,
2566
- chainId: client.chain.id,
2567
- hash: hashMessage(message)
2568
- });
2569
- const signature = await sign({ hash, owner });
2570
- return wrapSignature({
2571
- ownerIndex,
2572
- signature
2573
- });
2574
- },
2575
- async signTypedData(parameters2) {
2576
- const { domain, types, primaryType, message } = parameters2;
2577
- const address2 = await this.getAddress();
2578
- const hash = toReplaySafeHash({
2579
- address: address2,
2580
- chainId: client.chain.id,
2581
- hash: hashTypedData({
2582
- domain,
2583
- message,
2584
- primaryType,
2585
- types
2586
- })
2587
- });
2588
- const signature = await sign({ hash, owner });
2589
- return wrapSignature({
2590
- ownerIndex,
2591
- signature
2592
- });
2593
- },
2594
- async signUserOperation(parameters2) {
2595
- const { chainId = client.chain.id } = parameters2, userOperation = __rest$1(parameters2, ["chainId"]);
2596
- const address2 = await this.getAddress();
2597
- const hash = getUserOperationHash({
2598
- chainId,
2599
- entryPointAddress: entryPoint.address,
2600
- entryPointVersion: entryPoint.version,
2601
- userOperation: Object.assign(Object.assign({}, userOperation), { sender: address2 })
2602
- });
2603
- const signature = await sign({ hash, owner });
2604
- return wrapSignature({
2605
- ownerIndex,
2606
- signature
2607
- });
2608
- },
2609
- userOperation: {
2610
- async estimateGas(userOperation) {
2611
- var _a;
2612
- if (owner.type !== "webAuthn")
2613
- return;
2614
- return {
2615
- verificationGasLimit: BigInt(Math.max(Number((_a = userOperation.verificationGasLimit) !== null && _a !== void 0 ? _a : BigInt(0)), 8e5))
2616
- };
2617
- }
2618
- }
2619
- });
2620
- }
2621
- async function sign({ hash, owner }) {
2622
- if (owner.type === "webAuthn") {
2623
- const { signature, webauthn } = await owner.sign({
2624
- hash
2625
- });
2626
- return toWebAuthnSignature({ signature, webauthn });
2627
- }
2628
- if (owner.sign)
2629
- return owner.sign({ hash });
2630
- throw new BaseError("`owner` does not support raw sign.");
2631
- }
2632
- function toReplaySafeHash({ address, chainId, hash }) {
2633
- return hashTypedData({
2634
- domain: {
2635
- chainId,
2636
- name: "Coinbase Smart Wallet",
2637
- verifyingContract: address,
2638
- version: "1"
2639
- },
2640
- types: {
2641
- CoinbaseSmartWalletMessage: [
2642
- {
2643
- name: "hash",
2644
- type: "bytes32"
2645
- }
2646
- ]
2647
- },
2648
- primaryType: "CoinbaseSmartWalletMessage",
2649
- message: {
2650
- hash
2651
- }
2652
- });
2653
- }
2654
- function toWebAuthnSignature({ webauthn, signature }) {
2655
- const { r, s } = fromHex(signature);
2656
- return encodeAbiParameters([
2657
- {
2658
- components: [
2659
- {
2660
- name: "authenticatorData",
2661
- type: "bytes"
2662
- },
2663
- { name: "clientDataJSON", type: "bytes" },
2664
- { name: "challengeIndex", type: "uint256" },
2665
- { name: "typeIndex", type: "uint256" },
2666
- {
2667
- name: "r",
2668
- type: "uint256"
2669
- },
2670
- {
2671
- name: "s",
2672
- type: "uint256"
2673
- }
2674
- ],
2675
- type: "tuple"
2676
- }
2677
- ], [
2678
- {
2679
- authenticatorData: webauthn.authenticatorData,
2680
- clientDataJSON: stringToHex(webauthn.clientDataJSON),
2681
- challengeIndex: BigInt(webauthn.challengeIndex),
2682
- typeIndex: BigInt(webauthn.typeIndex),
2683
- r,
2684
- s
2685
- }
2686
- ]);
2687
- }
2688
- function wrapSignature(parameters) {
2689
- const { ownerIndex = 0 } = parameters;
2690
- const signatureData = (() => {
2691
- if (size(parameters.signature) !== 65)
2692
- return parameters.signature;
2693
- const signature = parseSignature(parameters.signature);
2694
- return encodePacked(["bytes32", "bytes32", "uint8"], [signature.r, signature.s, signature.yParity === 0 ? 27 : 28]);
2695
- })();
2696
- return encodeAbiParameters([
2697
- {
2698
- components: [
2699
- {
2700
- name: "ownerIndex",
2701
- type: "uint8"
2702
- },
2703
- {
2704
- name: "signatureData",
2705
- type: "bytes"
2706
- }
2707
- ],
2708
- type: "tuple"
2709
- }
2710
- ], [
2711
- {
2712
- ownerIndex,
2713
- signatureData
2714
- }
2715
- ]);
2716
- }
2717
- async function createSubAccountSigner({ address, client, factory, factoryData, owner, ownerIndex, parentAddress, attribution }) {
2718
- var _a;
2719
- const subAccount = {
2720
- address,
2721
- factory,
2722
- factoryData
2723
- };
2724
- const chainId = (_a = client.chain) === null || _a === void 0 ? void 0 : _a.id;
2725
- if (!chainId) {
2726
- throw standardErrors.rpc.internal("chainId not found");
2727
- }
2728
- const account2 = await createSmartAccount({
2729
- owner,
2730
- ownerIndex: ownerIndex !== null && ownerIndex !== void 0 ? ownerIndex : 1,
2731
- address,
2732
- client,
2733
- factoryData
2734
- });
2735
- const request = async (args) => {
2736
- var _a2, _b, _c, _d, _e, _f;
2737
- try {
2738
- switch (args.method) {
2739
- case "wallet_addSubAccount":
2740
- return subAccount;
2741
- case "eth_accounts":
2742
- return [subAccount.address];
2743
- case "eth_coinbase":
2744
- return subAccount.address;
2745
- case "net_version":
2746
- return chainId.toString();
2747
- case "eth_chainId":
2748
- return numberToHex(chainId);
2749
- case "eth_sendTransaction": {
2750
- assertArrayPresence(args.params);
2751
- const rawParams = args.params[0];
2752
- assertPresence(rawParams.to, standardErrors.rpc.invalidParams("to is required"));
2753
- const params = {
2754
- to: rawParams.to,
2755
- data: ensureHexString((_a2 = rawParams.data) !== null && _a2 !== void 0 ? _a2 : "0x", true),
2756
- value: ensureHexString((_b = rawParams.value) !== null && _b !== void 0 ? _b : "0x", true),
2757
- from: (_c = rawParams.from) !== null && _c !== void 0 ? _c : subAccount.address
2758
- };
2759
- const sendCallsRequest = createWalletSendCallsRequest({
2760
- calls: [params],
2761
- chainId,
2762
- from: params.from
2763
- });
2764
- const response = await request(sendCallsRequest);
2765
- return waitForCallsTransactionHash({
2766
- client,
2767
- id: response
2768
- });
2769
- }
2770
- case "wallet_sendCalls": {
2771
- assertArrayPresence(args.params);
2772
- const chainId2 = get(args.params[0], "chainId");
2773
- if (!chainId2) {
2774
- throw standardErrors.rpc.invalidParams("chainId is required");
2775
- }
2776
- if (!isHex(chainId2)) {
2777
- throw standardErrors.rpc.invalidParams("chainId must be a hex encoded integer");
2778
- }
2779
- if (!args.params[0]) {
2780
- throw standardErrors.rpc.invalidParams("params are required");
2781
- }
2782
- if (!("calls" in args.params[0])) {
2783
- throw standardErrors.rpc.invalidParams("calls are required");
2784
- }
2785
- let prepareCallsRequest = {
2786
- method: "wallet_prepareCalls",
2787
- params: [
2788
- {
2789
- version: "1.0",
2790
- calls: args.params[0].calls,
2791
- chainId: chainId2,
2792
- from: subAccount.address,
2793
- capabilities: "capabilities" in args.params[0] ? args.params[0].capabilities : {}
2794
- }
2795
- ]
2796
- };
2797
- if (parentAddress) {
2798
- prepareCallsRequest = injectRequestCapabilities(prepareCallsRequest, {
2799
- funding: [
2800
- {
2801
- type: "spendPermission",
2802
- data: {
2803
- autoApply: true,
2804
- sources: [parentAddress],
2805
- preference: "PREFER_DIRECT_BALANCE"
2806
- }
2807
- }
2808
- ]
2809
- });
2810
- }
2811
- let prepareCallsResponse = await request(prepareCallsRequest);
2812
- const signResponse = await ((_e = (_d = owner).sign) === null || _e === void 0 ? void 0 : _e.call(_d, {
2813
- // Hash returned from wallet_prepareCalls is double hex encoded
2814
- hash: hexToString(prepareCallsResponse.signatureRequest.hash)
2815
- }));
2816
- let signatureData;
2817
- if (!signResponse) {
2818
- throw standardErrors.rpc.internal("signature not found");
2819
- }
2820
- if (isHex(signResponse)) {
2821
- signatureData = {
2822
- type: "secp256k1",
2823
- data: {
2824
- address: owner.address,
2825
- signature: signResponse
2826
- }
2827
- };
2828
- } else {
2829
- signatureData = {
2830
- type: "webauthn",
2831
- data: {
2832
- signature: JSON.stringify(convertCredentialToJSON(Object.assign({ id: (_f = owner.id) !== null && _f !== void 0 ? _f : "1" }, signResponse))),
2833
- publicKey: owner.publicKey
2834
- }
2835
- };
2836
- }
2837
- const sendPreparedCallsResponse = await request({
2838
- method: "wallet_sendPreparedCalls",
2839
- params: [
2840
- {
2841
- version: "1.0",
2842
- type: prepareCallsResponse.type,
2843
- data: prepareCallsResponse.userOp,
2844
- chainId: prepareCallsResponse.chainId,
2845
- signature: signatureData
2846
- }
2847
- ]
2848
- });
2849
- return sendPreparedCallsResponse[0];
2850
- }
2851
- case "wallet_sendPreparedCalls": {
2852
- assertArrayPresence(args.params);
2853
- const chainId2 = get(args.params[0], "chainId");
2854
- if (!chainId2) {
2855
- throw standardErrors.rpc.invalidParams("chainId is required");
2856
- }
2857
- if (!isHex(chainId2)) {
2858
- throw standardErrors.rpc.invalidParams("chainId must be a hex encoded integer");
2859
- }
2860
- const sendPreparedCallsResponse = await client.request({
2861
- method: "wallet_sendPreparedCalls",
2862
- params: args.params
2863
- });
2864
- return sendPreparedCallsResponse;
2865
- }
2866
- case "wallet_prepareCalls": {
2867
- assertArrayPresence(args.params);
2868
- const chainId2 = get(args.params[0], "chainId");
2869
- if (!chainId2) {
2870
- throw standardErrors.rpc.invalidParams("chainId is required");
2871
- }
2872
- if (!isHex(chainId2)) {
2873
- throw standardErrors.rpc.invalidParams("chainId must be a hex encoded integer");
2874
- }
2875
- if (!args.params[0]) {
2876
- throw standardErrors.rpc.invalidParams("params are required");
2877
- }
2878
- if (!get(args.params[0], "calls")) {
2879
- throw standardErrors.rpc.invalidParams("calls are required");
2880
- }
2881
- const prepareCallsParams = args.params[0];
2882
- if (attribution && prepareCallsParams.capabilities && !("attribution" in prepareCallsParams.capabilities)) {
2883
- prepareCallsParams.capabilities.attribution = attribution;
2884
- }
2885
- const prepareCallsResponse = await client.request({
2886
- method: "wallet_prepareCalls",
2887
- params: [Object.assign(Object.assign({}, args.params[0]), { chainId: chainId2 })]
2888
- });
2889
- return prepareCallsResponse;
2890
- }
2891
- case "personal_sign": {
2892
- assertArrayPresence(args.params);
2893
- if (!isHex(args.params[0])) {
2894
- throw standardErrors.rpc.invalidParams("message must be a hex encoded string");
2895
- }
2896
- const message = hexToString(args.params[0]);
2897
- return account2.signMessage({ message });
2898
- }
2899
- case "eth_signTypedData_v4": {
2900
- assertArrayPresence(args.params);
2901
- const typedData = typeof args.params[1] === "string" ? JSON.parse(args.params[1]) : args.params[1];
2902
- return account2.signTypedData(typedData);
2903
- }
2904
- case "eth_signTypedData_v1":
2905
- case "eth_signTypedData_v3":
2906
- case "wallet_addEthereumChain":
2907
- case "wallet_switchEthereumChain":
2908
- default:
2909
- throw standardErrors.rpc.methodNotSupported();
2910
- }
2911
- } catch (error) {
2912
- if (isViemError(error)) {
2913
- const newError = viemHttpErrorToProviderError(error);
2914
- if (newError) {
2915
- throw newError;
2916
- }
2917
- }
2918
- throw error;
2919
- }
2920
- };
2921
- return { request };
2922
- }
2923
- async function findOwnerIndex({ address, client, publicKey, factory, factoryData }) {
2924
- const code = await getCode(client, {
2925
- address
2926
- });
2927
- if (!code && factory && factoryData) {
2928
- const initData = decodeFunctionData({
2929
- abi: factoryAbi,
2930
- data: factoryData
2931
- });
2932
- if (initData.functionName !== "createAccount") {
2933
- throw standardErrors.rpc.internal("unknown factory function");
2934
- }
2935
- const [owners] = initData.args;
2936
- return owners.findIndex((owner) => {
2937
- return owner.toLowerCase() === formatPublicKey(publicKey).toLowerCase();
2938
- });
2939
- }
2940
- const ownerCount = await readContract(client, {
2941
- address,
2942
- abi,
2943
- functionName: "ownerCount"
2944
- });
2945
- for (let i = Number(ownerCount) - 1; i >= 0; i--) {
2946
- const owner = await readContract(client, {
2947
- address,
2948
- abi,
2949
- functionName: "ownerAtIndex",
2950
- args: [BigInt(i)]
2951
- });
2952
- const formatted = formatPublicKey(publicKey);
2953
- if (owner.toLowerCase() === formatted.toLowerCase()) {
2954
- return i;
2955
- }
2956
- }
2957
- return -1;
2958
- }
2959
- function formatPublicKey(publicKey) {
2960
- if (isAddress(publicKey)) {
2961
- return pad(publicKey);
2962
- }
2963
- return publicKey;
2964
- }
2965
- async function presentAddOwnerDialog() {
2966
- var _a, _b;
2967
- const appName = (_b = (_a = store.config.get().metadata) === null || _a === void 0 ? void 0 : _a.appName) !== null && _b !== void 0 ? _b : "App";
2968
- const dialog2 = initDialog();
2969
- return new Promise((resolve) => {
2970
- logDialogShown({ dialogContext: "sub_account_add_owner" });
2971
- dialog2.presentItem({
2972
- title: `Re-authorize ${appName}`,
2973
- message: `${appName} has lost access to your account. Please sign at the next step to re-authorize ${appName}`,
2974
- onClose: () => {
2975
- logDialogDismissed({ dialogContext: "sub_account_add_owner" });
2976
- resolve("cancel");
2977
- },
2978
- actionItems: [
2979
- {
2980
- text: "Continue",
2981
- variant: "primary",
2982
- onClick: () => {
2983
- logDialogActionClicked({
2984
- dialogContext: "sub_account_add_owner",
2985
- dialogAction: "confirm"
2986
- });
2987
- dialog2.clear();
2988
- resolve("authenticate");
2989
- }
2990
- },
2991
- {
2992
- text: "Not now",
2993
- variant: "secondary",
2994
- onClick: () => {
2995
- logDialogActionClicked({
2996
- dialogContext: "sub_account_add_owner",
2997
- dialogAction: "cancel"
2998
- });
2999
- dialog2.clear();
3000
- resolve("cancel");
3001
- }
3002
- }
3003
- ]
3004
- });
3005
- });
3006
- }
3007
- async function handleAddSubAccountOwner({ ownerAccount, globalAccountRequest }) {
3008
- var _a, _b;
3009
- const account2 = store.account.get();
3010
- const subAccount = store.subAccounts.get();
3011
- const globalAccount = (_a = account2.accounts) === null || _a === void 0 ? void 0 : _a.find((account3) => account3.toLowerCase() !== (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address.toLowerCase()));
3012
- assertPresence(globalAccount, standardErrors.provider.unauthorized("no global account"));
3013
- assertPresence((_b = account2.chain) === null || _b === void 0 ? void 0 : _b.id, standardErrors.provider.unauthorized("no chain id"));
3014
- assertPresence(subAccount === null || subAccount === void 0 ? void 0 : subAccount.address, standardErrors.provider.unauthorized("no sub account"));
3015
- const calls = [];
3016
- if (ownerAccount.type === "local" && ownerAccount.address) {
3017
- calls.push({
3018
- to: subAccount.address,
3019
- data: encodeFunctionData({
3020
- abi,
3021
- functionName: "addOwnerAddress",
3022
- args: [ownerAccount.address]
3023
- }),
3024
- value: toHex$2(0)
3025
- });
3026
- }
3027
- if (ownerAccount.publicKey) {
3028
- const [x, y2] = decodeAbiParameters([{ type: "bytes32" }, { type: "bytes32" }], ownerAccount.publicKey);
3029
- calls.push({
3030
- to: subAccount.address,
3031
- data: encodeFunctionData({
3032
- abi,
3033
- functionName: "addOwnerPublicKey",
3034
- args: [x, y2]
3035
- }),
3036
- value: toHex$2(0)
3037
- });
3038
- }
3039
- const request = {
3040
- method: "wallet_sendCalls",
3041
- params: [
3042
- {
3043
- version: "1",
3044
- calls,
3045
- chainId: numberToHex(84532),
3046
- from: globalAccount
3047
- }
3048
- ]
3049
- };
3050
- const selection = await presentAddOwnerDialog();
3051
- if (selection === "cancel") {
3052
- throw standardErrors.provider.unauthorized("user cancelled");
3053
- }
3054
- const callsId = await globalAccountRequest(request);
3055
- const client = getClient(account2.chain.id);
3056
- assertPresence(client, standardErrors.rpc.internal(`client not found for chainId ${account2.chain.id}`));
3057
- const callsResult = await waitForCallsStatus(client, {
3058
- id: callsId
3059
- });
3060
- if (callsResult.status !== "success") {
3061
- throw standardErrors.rpc.internal("add owner call failed");
3062
- }
3063
- const ownerIndex = await findOwnerIndex({
3064
- address: subAccount.address,
3065
- publicKey: ownerAccount.type === "local" && ownerAccount.address ? ownerAccount.address : ownerAccount.publicKey,
3066
- client
3067
- });
3068
- if (ownerIndex === -1) {
3069
- throw standardErrors.rpc.internal("failed to find owner index");
3070
- }
3071
- return ownerIndex;
3072
- }
3073
- async function handleInsufficientBalanceError({ errorData, globalAccountAddress, subAccountAddress, client, request, subAccountRequest, globalAccountRequest }) {
3074
- var _a;
3075
- const chainId = (_a = client.chain) === null || _a === void 0 ? void 0 : _a.id;
3076
- assertPresence(chainId, standardErrors.rpc.internal(`invalid chainId`));
3077
- const spendPermissionRequests = parseFundingOptions({
3078
- errorData,
3079
- sourceAddress: globalAccountAddress
3080
- });
3081
- const userChoice = await presentSubAccountFundingDialog();
3082
- if (userChoice === "cancel") {
3083
- throw new Error("User cancelled funding");
3084
- }
3085
- let signatureRequest;
3086
- const defaultPeriod = 60 * 60 * 24;
3087
- const defaultMultiplier = 3;
3088
- if (userChoice === "update_permission") {
3089
- if (spendPermissionRequests.length === 1) {
3090
- const spendPermission = spendPermissionRequests[0];
3091
- const message = createSpendPermissionMessage({
3092
- spendPermission: {
3093
- token: spendPermission.token,
3094
- allowance: numberToHex(spendPermission.requiredAmount * BigInt(defaultMultiplier)),
3095
- period: defaultPeriod,
3096
- account: globalAccountAddress,
3097
- spender: subAccountAddress,
3098
- start: 0,
3099
- end: 281474976710655,
3100
- salt: numberToHex(BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))),
3101
- extraData: "0x"
3102
- },
3103
- chainId
3104
- });
3105
- signatureRequest = {
3106
- method: "eth_signTypedData_v4",
3107
- params: [globalAccountAddress, message]
3108
- };
3109
- } else {
3110
- const message = createSpendPermissionBatchMessage({
3111
- spendPermissionBatch: {
3112
- account: globalAccountAddress,
3113
- period: defaultPeriod,
3114
- start: 0,
3115
- end: 281474976710655,
3116
- permissions: spendPermissionRequests.map((spendPermission) => ({
3117
- token: spendPermission.token,
3118
- allowance: numberToHex(spendPermission.requiredAmount * BigInt(defaultMultiplier)),
3119
- period: defaultPeriod,
3120
- account: globalAccountAddress,
3121
- spender: subAccountAddress,
3122
- salt: "0x0",
3123
- extraData: "0x"
3124
- }))
3125
- },
3126
- chainId
3127
- });
3128
- signatureRequest = {
3129
- method: "eth_signTypedData_v4",
3130
- params: [globalAccountAddress, message]
3131
- };
3132
- }
3133
- try {
3134
- await globalAccountRequest(signatureRequest);
3135
- } catch (error) {
3136
- console.error(error);
3137
- throw new Error("User denied spend permission request");
3138
- }
3139
- return subAccountRequest(request);
3140
- }
3141
- const transferCalls = spendPermissionRequests.map((spendPermission) => {
3142
- const isNative = spendPermission.token.toLowerCase() === "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE".toLowerCase();
3143
- if (isNative) {
3144
- return {
3145
- to: subAccountAddress,
3146
- value: numberToHex(spendPermission.requiredAmount),
3147
- data: "0x"
3148
- };
3149
- }
3150
- return {
3151
- to: spendPermission.token,
3152
- value: "0x0",
3153
- data: encodeFunctionData({
3154
- abi: erc20Abi,
3155
- functionName: "transfer",
3156
- args: [subAccountAddress, spendPermission.requiredAmount]
3157
- })
3158
- };
3159
- });
3160
- let originalSendCallsParams;
3161
- if (request.method === "wallet_sendCalls" && isSendCallsParams(request.params)) {
3162
- originalSendCallsParams = request.params[0];
3163
- } else if (request.method === "eth_sendTransaction" && isEthSendTransactionParams(request.params)) {
3164
- const sendCallsRequest = createWalletSendCallsRequest({
3165
- calls: [request.params[0]],
3166
- chainId,
3167
- from: request.params[0].from
3168
- });
3169
- originalSendCallsParams = sendCallsRequest.params[0];
3170
- } else {
3171
- throw new Error("Could not get original call");
3172
- }
3173
- const subAccountCallData = encodeFunctionData({
3174
- abi,
3175
- functionName: "executeBatch",
3176
- args: [
3177
- originalSendCallsParams.calls.map((call) => {
3178
- var _a2, _b;
3179
- return {
3180
- target: call.to,
3181
- value: hexToBigInt((_a2 = call.value) !== null && _a2 !== void 0 ? _a2 : "0x0"),
3182
- data: (_b = call.data) !== null && _b !== void 0 ? _b : "0x"
3183
- };
3184
- })
3185
- ]
3186
- });
3187
- const calls = [
3188
- ...transferCalls,
3189
- { data: subAccountCallData, to: subAccountAddress, value: "0x0" }
3190
- ];
3191
- const result = await globalAccountRequest({
3192
- method: "wallet_sendCalls",
3193
- params: [Object.assign(Object.assign({}, originalSendCallsParams), { calls, from: globalAccountAddress })]
3194
- });
3195
- if (request.method === "eth_sendTransaction") {
3196
- return waitForCallsTransactionHash({
3197
- client,
3198
- id: result
3199
- });
3200
- }
3201
- return result;
3202
- }
3203
- class Signer {
3204
- constructor(params) {
3205
- var _a, _b, _c, _d;
3206
- this.communicator = params.communicator;
3207
- this.callback = params.callback;
3208
- this.keyManager = new SCWKeyManager();
3209
- const { account: account2, chains: chains2 } = store.getState();
3210
- this.accounts = (_a = account2.accounts) !== null && _a !== void 0 ? _a : [];
3211
- this.chain = (_b = account2.chain) !== null && _b !== void 0 ? _b : {
3212
- id: (_d = (_c = params.metadata.appChainIds) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : 1
3213
- };
3214
- if (chains2) {
3215
- createClients(chains2);
3216
- }
3217
- }
3218
- get isConnected() {
3219
- return this.accounts.length > 0;
3220
- }
3221
- async handshake(args) {
3222
- var _a, _b, _c;
3223
- const correlationId = correlationIds.get(args);
3224
- logHandshakeStarted({ method: args.method, correlationId });
3225
- try {
3226
- await ((_b = (_a = this.communicator).waitForPopupLoaded) === null || _b === void 0 ? void 0 : _b.call(_a));
3227
- const handshakeMessage = await this.createRequestMessage({
3228
- handshake: {
3229
- method: args.method,
3230
- params: (_c = args.params) !== null && _c !== void 0 ? _c : []
3231
- }
3232
- }, correlationId);
3233
- const response = await this.communicator.postRequestAndWaitForResponse(handshakeMessage);
3234
- if ("failure" in response.content) {
3235
- throw response.content.failure;
3236
- }
3237
- const peerPublicKey = await importKeyFromHexString("public", response.sender);
3238
- await this.keyManager.setPeerPublicKey(peerPublicKey);
3239
- const decrypted = await this.decryptResponseMessage(response);
3240
- this.handleResponse(args, decrypted);
3241
- logHandshakeCompleted({ method: args.method, correlationId });
3242
- } catch (error) {
3243
- logHandshakeError({
3244
- method: args.method,
3245
- correlationId,
3246
- errorMessage: parseErrorMessageFromAny(error)
3247
- });
3248
- throw error;
3249
- }
3250
- }
3251
- async request(request) {
3252
- const correlationId = correlationIds.get(request);
3253
- logRequestStarted({ method: request.method, correlationId });
3254
- try {
3255
- const result = await this._request(request);
3256
- logRequestCompleted({ method: request.method, correlationId });
3257
- return result;
3258
- } catch (error) {
3259
- logRequestError({
3260
- method: request.method,
3261
- correlationId,
3262
- errorMessage: parseErrorMessageFromAny(error)
3263
- });
3264
- throw error;
3265
- }
3266
- }
3267
- async _request(request) {
3268
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
3269
- if (this.accounts.length === 0) {
3270
- switch (request.method) {
3271
- case "wallet_switchEthereumChain": {
3272
- assertParamsChainId(request.params);
3273
- this.chain.id = Number(request.params[0].chainId);
3274
- return;
3275
- }
3276
- case "wallet_connect": {
3277
- await ((_b = (_a = this.communicator).waitForPopupLoaded) === null || _b === void 0 ? void 0 : _b.call(_a));
3278
- await initSubAccountConfig();
3279
- let capabilitiesToInject = {};
3280
- if (requestHasCapability(request, "addSubAccount")) {
3281
- capabilitiesToInject = (_d = (_c = store.subAccountsConfig.get()) === null || _c === void 0 ? void 0 : _c.capabilities) !== null && _d !== void 0 ? _d : {};
3282
- }
3283
- const modifiedRequest = injectRequestCapabilities(request, capabilitiesToInject);
3284
- return this.sendRequestToPopup(modifiedRequest);
3285
- }
3286
- case "wallet_sendCalls":
3287
- case "wallet_sign": {
3288
- return this.sendRequestToPopup(request);
3289
- }
3290
- default:
3291
- throw standardErrors.provider.unauthorized();
3292
- }
3293
- }
3294
- if (this.shouldRequestUseSubAccountSigner(request)) {
3295
- const correlationId = correlationIds.get(request);
3296
- logSubAccountRequestStarted({ method: request.method, correlationId });
3297
- try {
3298
- const result = await this.sendRequestToSubAccountSigner(request);
3299
- logSubAccountRequestCompleted({ method: request.method, correlationId });
3300
- return result;
3301
- } catch (error) {
3302
- logSubAccountRequestError({
3303
- method: request.method,
3304
- correlationId,
3305
- errorMessage: parseErrorMessageFromAny(error)
3306
- });
3307
- throw error;
3308
- }
3309
- }
3310
- switch (request.method) {
3311
- case "eth_requestAccounts":
3312
- case "eth_accounts": {
3313
- const subAccount = store.subAccounts.get();
3314
- const subAccountsConfig2 = store.subAccountsConfig.get();
3315
- if (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address) {
3316
- this.accounts = (subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.enableAutoSubAccounts) ? prependWithoutDuplicates(this.accounts, subAccount.address) : appendWithoutDuplicates(this.accounts, subAccount.address);
3317
- }
3318
- (_e = this.callback) === null || _e === void 0 ? void 0 : _e.call(this, "connect", { chainId: numberToHex(this.chain.id) });
3319
- return this.accounts;
3320
- }
3321
- case "eth_coinbase":
3322
- return this.accounts[0];
3323
- case "net_version":
3324
- return this.chain.id;
3325
- case "eth_chainId":
3326
- return numberToHex(this.chain.id);
3327
- case "wallet_getCapabilities":
3328
- return this.handleGetCapabilitiesRequest(request);
3329
- case "wallet_switchEthereumChain":
3330
- return this.handleSwitchChainRequest(request);
3331
- case "eth_ecRecover":
3332
- case "personal_sign":
3333
- case "wallet_sign":
3334
- case "personal_ecRecover":
3335
- case "eth_signTransaction":
3336
- case "eth_sendTransaction":
3337
- case "eth_signTypedData_v1":
3338
- case "eth_signTypedData_v3":
3339
- case "eth_signTypedData_v4":
3340
- case "eth_signTypedData":
3341
- case "wallet_addEthereumChain":
3342
- case "wallet_watchAsset":
3343
- case "wallet_sendCalls":
3344
- case "wallet_showCallsStatus":
3345
- case "wallet_grantPermissions":
3346
- return this.sendRequestToPopup(request);
3347
- case "wallet_connect": {
3348
- const cachedResponse = await getCachedWalletConnectResponse();
3349
- if (cachedResponse) {
3350
- return cachedResponse;
3351
- }
3352
- await ((_g = (_f = this.communicator).waitForPopupLoaded) === null || _g === void 0 ? void 0 : _g.call(_f));
3353
- await initSubAccountConfig();
3354
- const subAccountsConfig2 = store.subAccountsConfig.get();
3355
- const modifiedRequest = injectRequestCapabilities(request, (_h = subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.capabilities) !== null && _h !== void 0 ? _h : {});
3356
- const result = await this.sendRequestToPopup(modifiedRequest);
3357
- (_j = this.callback) === null || _j === void 0 ? void 0 : _j.call(this, "connect", { chainId: numberToHex(this.chain.id) });
3358
- return result;
3359
- }
3360
- // Sub Account Support
3361
- case "wallet_getSubAccounts": {
3362
- const subAccount = store.subAccounts.get();
3363
- if (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address) {
3364
- return {
3365
- subAccounts: [subAccount]
3366
- };
3367
- }
3368
- if (!this.chain.rpcUrl) {
3369
- throw standardErrors.rpc.internal("No RPC URL set for chain");
3370
- }
3371
- const response = await fetchRPCRequest(request, this.chain.rpcUrl);
3372
- assertArrayPresence(response.subAccounts, "subAccounts");
3373
- if (response.subAccounts.length > 0) {
3374
- assertSubAccount(response.subAccounts[0]);
3375
- const subAccount2 = response.subAccounts[0];
3376
- store.subAccounts.set({
3377
- address: subAccount2.address,
3378
- factory: subAccount2.factory,
3379
- factoryData: subAccount2.factoryData
3380
- });
3381
- }
3382
- return response;
3383
- }
3384
- case "wallet_addSubAccount":
3385
- return this.addSubAccount(request);
3386
- case "coinbase_fetchPermissions": {
3387
- assertFetchPermissionsRequest(request);
3388
- const completeRequest = fillMissingParamsForFetchPermissions(request);
3389
- const permissions = await fetchRPCRequest(completeRequest, CB_WALLET_RPC_URL);
3390
- const requestedChainId = hexToNumber((_k = completeRequest.params) === null || _k === void 0 ? void 0 : _k[0].chainId);
3391
- store.spendPermissions.set(permissions.permissions.map((permission) => Object.assign(Object.assign({}, permission), { chainId: requestedChainId })));
3392
- return permissions;
3393
- }
3394
- default:
3395
- if (!this.chain.rpcUrl) {
3396
- throw standardErrors.rpc.internal("No RPC URL set for chain");
3397
- }
3398
- return fetchRPCRequest(request, this.chain.rpcUrl);
3399
- }
3400
- }
3401
- async sendRequestToPopup(request) {
3402
- var _a, _b;
3403
- await ((_b = (_a = this.communicator).waitForPopupLoaded) === null || _b === void 0 ? void 0 : _b.call(_a));
3404
- const response = await this.sendEncryptedRequest(request);
3405
- const decrypted = await this.decryptResponseMessage(response);
3406
- return this.handleResponse(request, decrypted);
3407
- }
3408
- async handleResponse(request, decrypted) {
3409
- var _a, _b, _c, _d, _e;
3410
- const result = decrypted.result;
3411
- if ("error" in result)
3412
- throw result.error;
3413
- switch (request.method) {
3414
- case "eth_requestAccounts": {
3415
- const accounts = result.value;
3416
- this.accounts = accounts;
3417
- store.account.set({
3418
- accounts,
3419
- chain: this.chain
3420
- });
3421
- (_a = this.callback) === null || _a === void 0 ? void 0 : _a.call(this, "accountsChanged", accounts);
3422
- break;
3423
- }
3424
- case "wallet_connect": {
3425
- const response = result.value;
3426
- const accounts = response.accounts.map((account3) => account3.address);
3427
- this.accounts = accounts;
3428
- store.account.set({
3429
- accounts
3430
- });
3431
- const account2 = response.accounts.at(0);
3432
- const capabilities = account2 === null || account2 === void 0 ? void 0 : account2.capabilities;
3433
- if (capabilities === null || capabilities === void 0 ? void 0 : capabilities.subAccounts) {
3434
- const capabilityResponse = capabilities === null || capabilities === void 0 ? void 0 : capabilities.subAccounts;
3435
- assertArrayPresence(capabilityResponse, "subAccounts");
3436
- assertSubAccount(capabilityResponse[0]);
3437
- store.subAccounts.set({
3438
- address: capabilityResponse[0].address,
3439
- factory: capabilityResponse[0].factory,
3440
- factoryData: capabilityResponse[0].factoryData
3441
- });
3442
- }
3443
- let accounts_ = [this.accounts[0]];
3444
- const subAccount = store.subAccounts.get();
3445
- const subAccountsConfig2 = store.subAccountsConfig.get();
3446
- if (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address) {
3447
- this.accounts = (subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.enableAutoSubAccounts) ? prependWithoutDuplicates(this.accounts, subAccount.address) : appendWithoutDuplicates(this.accounts, subAccount.address);
3448
- }
3449
- const spendPermissions2 = (_c = (_b = response === null || response === void 0 ? void 0 : response.accounts) === null || _b === void 0 ? void 0 : _b[0].capabilities) === null || _c === void 0 ? void 0 : _c.spendPermissions;
3450
- if (spendPermissions2 && "permissions" in spendPermissions2) {
3451
- store.spendPermissions.set(spendPermissions2 === null || spendPermissions2 === void 0 ? void 0 : spendPermissions2.permissions);
3452
- }
3453
- (_d = this.callback) === null || _d === void 0 ? void 0 : _d.call(this, "accountsChanged", accounts_);
3454
- break;
3455
- }
3456
- case "wallet_addSubAccount": {
3457
- assertSubAccount(result.value);
3458
- const subAccount = result.value;
3459
- store.subAccounts.set(subAccount);
3460
- const subAccountsConfig2 = store.subAccountsConfig.get();
3461
- this.accounts = (subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.enableAutoSubAccounts) ? prependWithoutDuplicates(this.accounts, subAccount.address) : appendWithoutDuplicates(this.accounts, subAccount.address);
3462
- (_e = this.callback) === null || _e === void 0 ? void 0 : _e.call(this, "accountsChanged", this.accounts);
3463
- break;
3464
- }
3465
- }
3466
- return result.value;
3467
- }
3468
- async cleanup() {
3469
- var _a, _b;
3470
- const metadata = store.config.get().metadata;
3471
- await this.keyManager.clear();
3472
- store.account.clear();
3473
- store.subAccounts.clear();
3474
- store.spendPermissions.clear();
3475
- store.chains.clear();
3476
- this.accounts = [];
3477
- this.chain = {
3478
- id: (_b = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.appChainIds) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 1
3479
- };
3480
- }
3481
- /**
3482
- * @returns `null` if the request was successful.
3483
- * https://eips.ethereum.org/EIPS/eip-3326#wallet_switchethereumchain
3484
- */
3485
- async handleSwitchChainRequest(request) {
3486
- assertParamsChainId(request.params);
3487
- const chainId = ensureIntNumber(request.params[0].chainId);
3488
- const localResult = this.updateChain(chainId);
3489
- if (localResult)
3490
- return null;
3491
- const popupResult = await this.sendRequestToPopup(request);
3492
- if (popupResult === null) {
3493
- this.updateChain(chainId);
3494
- }
3495
- return popupResult;
3496
- }
3497
- async handleGetCapabilitiesRequest(request) {
3498
- assertGetCapabilitiesParams(request.params);
3499
- const requestedAccount = request.params[0];
3500
- const filterChainIds = request.params[1];
3501
- if (!this.accounts.some((account2) => isAddressEqual(account2, requestedAccount))) {
3502
- throw standardErrors.provider.unauthorized("no active account found when getting capabilities");
3503
- }
3504
- const capabilities = store.getState().account.capabilities;
3505
- if (!capabilities) {
3506
- return {};
3507
- }
3508
- if (!filterChainIds || filterChainIds.length === 0) {
3509
- return capabilities;
3510
- }
3511
- const filterChainNumbers = new Set(filterChainIds.map((chainId) => hexToNumber(chainId)));
3512
- const filteredCapabilities = Object.fromEntries(Object.entries(capabilities).filter(([capabilityKey]) => {
3513
- try {
3514
- const capabilityChainNumber = hexToNumber(capabilityKey);
3515
- return filterChainNumbers.has(capabilityChainNumber);
3516
- } catch (_a) {
3517
- return false;
3518
- }
3519
- }));
3520
- return filteredCapabilities;
3521
- }
3522
- async sendEncryptedRequest(request) {
3523
- const sharedSecret = await this.keyManager.getSharedSecret();
3524
- if (!sharedSecret) {
3525
- throw standardErrors.provider.unauthorized("No shared secret found when encrypting request");
3526
- }
3527
- const encrypted = await encryptContent({
3528
- action: request,
3529
- chainId: this.chain.id
3530
- }, sharedSecret);
3531
- const correlationId = correlationIds.get(request);
3532
- const message = await this.createRequestMessage({ encrypted }, correlationId);
3533
- return this.communicator.postRequestAndWaitForResponse(message);
3534
- }
3535
- async createRequestMessage(content, correlationId) {
3536
- const publicKey = await exportKeyToHexString("public", await this.keyManager.getOwnPublicKey());
3537
- return {
3538
- id: crypto.randomUUID(),
3539
- correlationId,
3540
- sender: publicKey,
3541
- content,
3542
- timestamp: /* @__PURE__ */ new Date()
3543
- };
3544
- }
3545
- async decryptResponseMessage(message) {
3546
- var _a, _b, _c;
3547
- const content = message.content;
3548
- if ("failure" in content) {
3549
- throw content.failure;
3550
- }
3551
- const sharedSecret = await this.keyManager.getSharedSecret();
3552
- if (!sharedSecret) {
3553
- throw standardErrors.provider.unauthorized("Invalid session: no shared secret found when decrypting response");
3554
- }
3555
- const response = await decryptContent(content.encrypted, sharedSecret);
3556
- const availableChains = (_a = response.data) === null || _a === void 0 ? void 0 : _a.chains;
3557
- if (availableChains) {
3558
- const nativeCurrencies = (_b = response.data) === null || _b === void 0 ? void 0 : _b.nativeCurrencies;
3559
- const chains2 = Object.entries(availableChains).map(([id, rpcUrl]) => {
3560
- const nativeCurrency = nativeCurrencies === null || nativeCurrencies === void 0 ? void 0 : nativeCurrencies[Number(id)];
3561
- return Object.assign({ id: Number(id), rpcUrl }, nativeCurrency ? { nativeCurrency } : {});
3562
- });
3563
- store.chains.set(chains2);
3564
- this.updateChain(this.chain.id, chains2);
3565
- createClients(chains2);
3566
- }
3567
- const walletCapabilities = (_c = response.data) === null || _c === void 0 ? void 0 : _c.capabilities;
3568
- if (walletCapabilities) {
3569
- store.account.set({
3570
- capabilities: walletCapabilities
3571
- });
3572
- }
3573
- return response;
3574
- }
3575
- updateChain(chainId, newAvailableChains) {
3576
- var _a;
3577
- const state = store.getState();
3578
- const chains2 = newAvailableChains !== null && newAvailableChains !== void 0 ? newAvailableChains : state.chains;
3579
- const chain = chains2 === null || chains2 === void 0 ? void 0 : chains2.find((chain2) => chain2.id === chainId);
3580
- if (!chain)
3581
- return false;
3582
- if (chain !== this.chain) {
3583
- this.chain = chain;
3584
- store.account.set({
3585
- chain
3586
- });
3587
- (_a = this.callback) === null || _a === void 0 ? void 0 : _a.call(this, "chainChanged", hexStringFromNumber(chain.id));
3588
- }
3589
- return true;
3590
- }
3591
- async addSubAccount(request) {
3592
- var _a, _b, _c, _d;
3593
- const state = store.getState();
3594
- const subAccount = state.subAccount;
3595
- const subAccountsConfig2 = store.subAccountsConfig.get();
3596
- if (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address) {
3597
- this.accounts = (subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.enableAutoSubAccounts) ? prependWithoutDuplicates(this.accounts, subAccount.address) : appendWithoutDuplicates(this.accounts, subAccount.address);
3598
- (_a = this.callback) === null || _a === void 0 ? void 0 : _a.call(this, "accountsChanged", this.accounts);
3599
- return subAccount;
3600
- }
3601
- await ((_c = (_b = this.communicator).waitForPopupLoaded) === null || _c === void 0 ? void 0 : _c.call(_b));
3602
- if (Array.isArray(request.params) && request.params.length > 0 && request.params[0].account && request.params[0].account.type === "create") {
3603
- let keys2;
3604
- if (request.params[0].account.keys && request.params[0].account.keys.length > 0) {
3605
- keys2 = request.params[0].account.keys;
3606
- } else {
3607
- const config2 = (_d = store.subAccountsConfig.get()) !== null && _d !== void 0 ? _d : {};
3608
- const { account: ownerAccount } = config2.toOwnerAccount ? await config2.toOwnerAccount() : await getCryptoKeyAccount();
3609
- if (!ownerAccount) {
3610
- throw standardErrors.provider.unauthorized("could not get subaccount owner account when adding sub account");
3611
- }
3612
- keys2 = [
3613
- {
3614
- type: ownerAccount.address ? "address" : "webauthn-p256",
3615
- publicKey: ownerAccount.address || ownerAccount.publicKey
3616
- }
3617
- ];
3618
- }
3619
- request.params[0].account.keys = keys2;
3620
- }
3621
- const response = await this.sendRequestToPopup(request);
3622
- assertSubAccount(response);
3623
- return response;
3624
- }
3625
- shouldRequestUseSubAccountSigner(request) {
3626
- const sender = getSenderFromRequest(request);
3627
- const subAccount = store.subAccounts.get();
3628
- if (sender) {
3629
- return sender.toLowerCase() === (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address.toLowerCase());
3630
- }
3631
- return false;
3632
- }
3633
- async sendRequestToSubAccountSigner(request) {
3634
- var _a;
3635
- const subAccount = store.subAccounts.get();
3636
- const subAccountsConfig2 = store.subAccountsConfig.get();
3637
- const config2 = store.config.get();
3638
- assertPresence(subAccount === null || subAccount === void 0 ? void 0 : subAccount.address, standardErrors.provider.unauthorized("no active sub account when sending request to sub account signer"));
3639
- const ownerAccount = (subAccountsConfig2 === null || subAccountsConfig2 === void 0 ? void 0 : subAccountsConfig2.toOwnerAccount) ? await subAccountsConfig2.toOwnerAccount() : await getCryptoKeyAccount();
3640
- assertPresence(ownerAccount === null || ownerAccount === void 0 ? void 0 : ownerAccount.account, standardErrors.provider.unauthorized("no active sub account owner when sending request to sub account signer"));
3641
- const sender = getSenderFromRequest(request);
3642
- if (sender === void 0) {
3643
- request = addSenderToRequest(request, subAccount.address);
3644
- }
3645
- const client = getClient(this.chain.id);
3646
- assertPresence(client, standardErrors.rpc.internal(`client not found for chainId ${this.chain.id} when sending request to sub account signer`));
3647
- const globalAccountAddress = this.accounts.find((account2) => account2.toLowerCase() !== subAccount.address.toLowerCase());
3648
- assertPresence(globalAccountAddress, standardErrors.provider.unauthorized("no global account found when sending request to sub account signer"));
3649
- const dataSuffix = makeDataSuffix({
3650
- attribution: (_a = config2.preference) === null || _a === void 0 ? void 0 : _a.attribution,
3651
- dappOrigin: window.location.origin
3652
- });
3653
- const publicKey = ownerAccount.account.type === "local" ? ownerAccount.account.address : ownerAccount.account.publicKey;
3654
- let ownerIndex = await findOwnerIndex({
3655
- address: subAccount.address,
3656
- factory: subAccount.factory,
3657
- factoryData: subAccount.factoryData,
3658
- publicKey,
3659
- client
3660
- });
3661
- if (ownerIndex === -1) {
3662
- const correlationId = correlationIds.get(request);
3663
- logAddOwnerStarted({ method: request.method, correlationId });
3664
- try {
3665
- ownerIndex = await handleAddSubAccountOwner({
3666
- ownerAccount: ownerAccount.account,
3667
- globalAccountRequest: this.sendRequestToPopup.bind(this)
3668
- });
3669
- logAddOwnerCompleted({ method: request.method, correlationId });
3670
- } catch (error) {
3671
- logAddOwnerError({
3672
- method: request.method,
3673
- correlationId,
3674
- errorMessage: parseErrorMessageFromAny(error)
3675
- });
3676
- return standardErrors.provider.unauthorized("failed to add sub account owner when sending request to sub account signer");
3677
- }
3678
- }
3679
- const { request: subAccountRequest } = await createSubAccountSigner({
3680
- address: subAccount.address,
3681
- owner: ownerAccount.account,
3682
- client,
3683
- factory: subAccount.factory,
3684
- factoryData: subAccount.factoryData,
3685
- parentAddress: globalAccountAddress,
3686
- attribution: dataSuffix ? { suffix: dataSuffix } : void 0,
3687
- ownerIndex
3688
- });
3689
- try {
3690
- const result = await subAccountRequest(request);
3691
- return result;
3692
- } catch (error) {
3693
- let errorObject;
3694
- if (isViemError(error)) {
3695
- errorObject = JSON.parse(error.details);
3696
- } else if (isActionableHttpRequestError(error)) {
3697
- errorObject = error;
3698
- } else {
3699
- throw error;
3700
- }
3701
- if (!(isActionableHttpRequestError(errorObject) && errorObject.data)) {
3702
- throw error;
3703
- }
3704
- if (!errorObject.data) {
3705
- throw error;
3706
- }
3707
- const correlationId = correlationIds.get(request);
3708
- logInsufficientBalanceErrorHandlingStarted({ method: request.method, correlationId });
3709
- try {
3710
- const result = await handleInsufficientBalanceError({
3711
- errorData: errorObject.data,
3712
- globalAccountAddress,
3713
- subAccountAddress: subAccount.address,
3714
- client,
3715
- request,
3716
- subAccountRequest,
3717
- globalAccountRequest: this.request.bind(this)
3718
- });
3719
- logInsufficientBalanceErrorHandlingCompleted({ method: request.method, correlationId });
3720
- return result;
3721
- } catch (handlingError) {
3722
- console.error(handlingError);
3723
- logInsufficientBalanceErrorHandlingError({
3724
- method: request.method,
3725
- correlationId,
3726
- errorMessage: parseErrorMessageFromAny(handlingError)
3727
- });
3728
- throw error;
3729
- }
3730
- }
3731
- }
3732
- }
3733
- var __rest = function(s, e) {
3734
- var t = {};
3735
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
3736
- t[p] = s[p];
3737
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
3738
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3739
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
3740
- t[p[i]] = s[p[i]];
3741
- }
3742
- return t;
3743
- };
3744
- class BaseAccountProvider extends ProviderEventEmitter {
3745
- constructor(_a) {
3746
- var { metadata } = _a, _b = _a.preference, { walletUrl } = _b, preference = __rest(_b, ["walletUrl"]);
3747
- super();
3748
- this.isBaseAccount = true;
3749
- this.communicator = new Communicator({
3750
- url: walletUrl,
3751
- metadata,
3752
- preference
3753
- });
3754
- this.signer = new Signer({
3755
- metadata,
3756
- communicator: this.communicator,
3757
- callback: this.emit.bind(this)
3758
- });
3759
- }
3760
- async request(args) {
3761
- const correlationId = crypto.randomUUID();
3762
- correlationIds.set(args, correlationId);
3763
- logRequestStarted$1({ method: args.method, correlationId });
3764
- try {
3765
- const result = await this._request(args);
3766
- logRequestResponded({
3767
- method: args.method,
3768
- correlationId
3769
- });
3770
- return result;
3771
- } catch (error) {
3772
- logRequestError$1({
3773
- method: args.method,
3774
- correlationId,
3775
- errorMessage: error instanceof Error ? error.message : ""
3776
- });
3777
- throw error;
3778
- } finally {
3779
- correlationIds.delete(args);
3780
- }
3781
- }
3782
- async _request(args) {
3783
- var _a, _b;
3784
- try {
3785
- checkErrorForInvalidRequestArgs(args);
3786
- if (!this.signer.isConnected) {
3787
- switch (args.method) {
3788
- case "eth_requestAccounts": {
3789
- await this.signer.handshake({ method: "handshake" });
3790
- await initSubAccountConfig();
3791
- await this.signer.request({
3792
- method: "wallet_connect",
3793
- params: [
3794
- {
3795
- version: "1",
3796
- capabilities: Object.assign({}, (_b = (_a = store.subAccountsConfig.get()) === null || _a === void 0 ? void 0 : _a.capabilities) !== null && _b !== void 0 ? _b : {})
3797
- }
3798
- ]
3799
- });
3800
- break;
3801
- }
3802
- case "wallet_connect": {
3803
- await this.signer.handshake({ method: "handshake" });
3804
- const result2 = await this.signer.request(args);
3805
- return result2;
3806
- }
3807
- case "wallet_sendCalls":
3808
- case "wallet_sign": {
3809
- try {
3810
- await this.signer.handshake({ method: "handshake" });
3811
- const result2 = await this.signer.request(args);
3812
- return result2;
3813
- } finally {
3814
- await this.signer.cleanup();
3815
- }
3816
- }
3817
- case "wallet_getCallsStatus": {
3818
- const result2 = await fetchRPCRequest(args, CB_WALLET_RPC_URL);
3819
- return result2;
3820
- }
3821
- case "eth_accounts": {
3822
- return [];
3823
- }
3824
- case "net_version": {
3825
- const result2 = 1;
3826
- return result2;
3827
- }
3828
- case "eth_chainId": {
3829
- const result2 = hexStringFromNumber(1);
3830
- return result2;
3831
- }
3832
- default: {
3833
- throw standardErrors.provider.unauthorized("Must call 'eth_requestAccounts' before other methods");
3834
- }
3835
- }
3836
- }
3837
- const result = await this.signer.request(args);
3838
- return result;
3839
- } catch (error) {
3840
- const { code } = error;
3841
- if (code === standardErrorCodes.provider.unauthorized) {
3842
- await this.disconnect();
3843
- }
3844
- return Promise.reject(serializeError(error));
3845
- }
3846
- }
3847
- async disconnect() {
3848
- await this.signer.cleanup();
3849
- correlationIds.clear();
3850
- this.emit("disconnect", standardErrors.provider.disconnected("User initiated disconnection"));
3851
- }
3852
- }
3853
- const TBA_PROVIDER_IDENTIFIER = "isCoinbaseBrowser";
3854
- function getInjectedProvider() {
3855
- var _a, _b;
3856
- const injectedProvider = (_a = window.ethereum) !== null && _a !== void 0 ? _a : (_b = window.top) === null || _b === void 0 ? void 0 : _b.ethereum;
3857
- if (injectedProvider === null || injectedProvider === void 0 ? void 0 : injectedProvider[TBA_PROVIDER_IDENTIFIER]) {
3858
- return injectedProvider;
3859
- }
3860
- return null;
3861
- }
3862
- function createBaseAccountSDK(params) {
3863
- var _a, _b, _c, _d;
3864
- const options = {
3865
- metadata: {
3866
- appName: params.appName || "App",
3867
- appLogoUrl: params.appLogoUrl || "",
3868
- appChainIds: params.appChainIds || []
3869
- },
3870
- preference: (_a = params.preference) !== null && _a !== void 0 ? _a : {},
3871
- paymasterUrls: params.paymasterUrls
3872
- };
3873
- if ((_b = params.subAccounts) === null || _b === void 0 ? void 0 : _b.toOwnerAccount) {
3874
- validateSubAccount(params.subAccounts.toOwnerAccount);
3875
- }
3876
- store.subAccountsConfig.set({
3877
- toOwnerAccount: (_c = params.subAccounts) === null || _c === void 0 ? void 0 : _c.toOwnerAccount,
3878
- // @ts-expect-error - enableSubAccounts is not officially supported yet
3879
- enableAutoSubAccounts: (_d = params.subAccounts) === null || _d === void 0 ? void 0 : _d.enableAutoSubAccounts
3880
- });
3881
- store.config.set(options);
3882
- void store.persist.rehydrate();
3883
- void checkCrossOriginOpenerPolicy();
3884
- validatePreferences(options.preference);
3885
- if (options.preference.telemetry !== false) {
3886
- void loadTelemetryScript();
3887
- }
3888
- let provider = null;
3889
- const sdk = {
3890
- getProvider: () => {
3891
- var _a2;
3892
- if (!provider) {
3893
- provider = (_a2 = getInjectedProvider()) !== null && _a2 !== void 0 ? _a2 : new BaseAccountProvider(options);
3894
- }
3895
- return provider;
3896
- },
3897
- subAccount: {
3898
- async create(accountParam) {
3899
- var _a2;
3900
- return await ((_a2 = sdk.getProvider()) === null || _a2 === void 0 ? void 0 : _a2.request({
3901
- method: "wallet_addSubAccount",
3902
- params: [
3903
- {
3904
- version: "1",
3905
- account: accountParam
3906
- }
3907
- ]
3908
- }));
3909
- },
3910
- async get() {
3911
- var _a2, _b2;
3912
- const subAccount = store.subAccounts.get();
3913
- if (subAccount === null || subAccount === void 0 ? void 0 : subAccount.address) {
3914
- return subAccount;
3915
- }
3916
- const response = await ((_a2 = sdk.getProvider()) === null || _a2 === void 0 ? void 0 : _a2.request({
3917
- method: "wallet_connect",
3918
- params: [
3919
- {
3920
- version: "1",
3921
- capabilities: {}
3922
- }
3923
- ]
3924
- }));
3925
- const subAccounts2 = (_b2 = response.accounts[0].capabilities) === null || _b2 === void 0 ? void 0 : _b2.subAccounts;
3926
- if (!Array.isArray(subAccounts2)) {
3927
- return null;
3928
- }
3929
- return subAccounts2[0];
3930
- },
3931
- addOwner: async ({ address, publicKey, chainId }) => {
3932
- var _a2, _b2;
3933
- const subAccount = store.subAccounts.get();
3934
- const account2 = store.account.get();
3935
- assertPresence(account2, new Error("account does not exist"));
3936
- assertPresence(subAccount === null || subAccount === void 0 ? void 0 : subAccount.address, new Error("subaccount does not exist"));
3937
- const calls = [];
3938
- if (publicKey) {
3939
- const [x, y2] = decodeAbiParameters([{ type: "bytes32" }, { type: "bytes32" }], publicKey);
3940
- calls.push({
3941
- to: subAccount.address,
3942
- data: encodeFunctionData({
3943
- abi,
3944
- functionName: "addOwnerPublicKey",
3945
- args: [x, y2]
3946
- }),
3947
- value: toHex$2(0)
3948
- });
3949
- }
3950
- if (address) {
3951
- calls.push({
3952
- to: subAccount.address,
3953
- data: encodeFunctionData({
3954
- abi,
3955
- functionName: "addOwnerAddress",
3956
- args: [address]
3957
- }),
3958
- value: toHex$2(0)
3959
- });
3960
- }
3961
- return await ((_a2 = sdk.getProvider()) === null || _a2 === void 0 ? void 0 : _a2.request({
3962
- method: "wallet_sendCalls",
3963
- params: [
3964
- {
3965
- calls,
3966
- chainId: toHex$2(chainId),
3967
- from: (_b2 = account2.accounts) === null || _b2 === void 0 ? void 0 : _b2[0],
3968
- version: "1"
3969
- }
3970
- ]
3971
- }));
3972
- },
3973
- setToOwnerAccount(toSubAccountOwner) {
3974
- validateSubAccount(toSubAccountOwner);
3975
- store.subAccountsConfig.set({
3976
- toOwnerAccount: toSubAccountOwner
3977
- });
3978
- }
3979
- }
3980
- };
3981
- return sdk;
3982
- }
3983
- export {
3984
- createBaseAccountSDK,
3985
- getCryptoKeyAccount
3986
- };
3987
- //# sourceMappingURL=index-B-MpJOWW.js.map