@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.
- package/package.json +10 -10
- package/dist/ConstantsUtil-BTJjr2qs.js +0 -24
- package/dist/ConstantsUtil-BTJjr2qs.js.map +0 -1
- package/dist/ExchangeController-CncqkHeT.js +0 -265
- package/dist/ExchangeController-CncqkHeT.js.map +0 -1
- package/dist/HelpersUtil-CwxnHyjS.js +0 -141
- package/dist/HelpersUtil-CwxnHyjS.js.map +0 -1
- package/dist/NavigationUtil-Ci15WS4K.js +0 -9
- package/dist/NavigationUtil-Ci15WS4K.js.map +0 -1
- package/dist/PhArrowCircleDown-B41iUlWV.js +0 -74
- package/dist/PhArrowCircleDown-B41iUlWV.js.map +0 -1
- package/dist/PhArrowClockwise-BY8u5n41.js +0 -74
- package/dist/PhArrowClockwise-BY8u5n41.js.map +0 -1
- package/dist/PhArrowDown-ClD8GZ65.js +0 -74
- package/dist/PhArrowDown-ClD8GZ65.js.map +0 -1
- package/dist/PhArrowLeft-B8MXUz60.js +0 -74
- package/dist/PhArrowLeft-B8MXUz60.js.map +0 -1
- package/dist/PhArrowRight-Cewa_Slb.js +0 -74
- package/dist/PhArrowRight-Cewa_Slb.js.map +0 -1
- package/dist/PhArrowSquareOut-whgWh-lD.js +0 -74
- package/dist/PhArrowSquareOut-whgWh-lD.js.map +0 -1
- package/dist/PhArrowUp-B1HXBxie.js +0 -74
- package/dist/PhArrowUp-B1HXBxie.js.map +0 -1
- package/dist/PhArrowUpRight-CfFYe4FP.js +0 -74
- package/dist/PhArrowUpRight-CfFYe4FP.js.map +0 -1
- package/dist/PhArrowsClockwise-gL1Gkrtx.js +0 -74
- package/dist/PhArrowsClockwise-gL1Gkrtx.js.map +0 -1
- package/dist/PhArrowsDownUp-BqUEdUQr.js +0 -74
- package/dist/PhArrowsDownUp-BqUEdUQr.js.map +0 -1
- package/dist/PhArrowsLeftRight-BlZU63eY.js +0 -74
- package/dist/PhArrowsLeftRight-BlZU63eY.js.map +0 -1
- package/dist/PhBank-gbg_jlI7.js +0 -74
- package/dist/PhBank-gbg_jlI7.js.map +0 -1
- package/dist/PhBrowser-CMlD-YJw.js +0 -74
- package/dist/PhBrowser-CMlD-YJw.js.map +0 -1
- package/dist/PhCaretDown-3agTO8Jp.js +0 -74
- package/dist/PhCaretDown-3agTO8Jp.js.map +0 -1
- package/dist/PhCaretLeft-_MTni7Z5.js +0 -74
- package/dist/PhCaretLeft-_MTni7Z5.js.map +0 -1
- package/dist/PhCaretRight-Ci9fAHPG.js +0 -74
- package/dist/PhCaretRight-Ci9fAHPG.js.map +0 -1
- package/dist/PhCaretUp-vFG4Fame.js +0 -74
- package/dist/PhCaretUp-vFG4Fame.js.map +0 -1
- package/dist/PhCheck-mChGK6K_.js +0 -74
- package/dist/PhCheck-mChGK6K_.js.map +0 -1
- package/dist/PhCircleHalf-DZ7-vfxf.js +0 -74
- package/dist/PhCircleHalf-DZ7-vfxf.js.map +0 -1
- package/dist/PhClock-Bc5XWXb6.js +0 -74
- package/dist/PhClock-Bc5XWXb6.js.map +0 -1
- package/dist/PhCompass-Cu2MB-55.js +0 -74
- package/dist/PhCompass-Cu2MB-55.js.map +0 -1
- package/dist/PhCopy-BGUjyTts.js +0 -74
- package/dist/PhCopy-BGUjyTts.js.map +0 -1
- package/dist/PhCreditCard-vxFWID4B.js +0 -74
- package/dist/PhCreditCard-vxFWID4B.js.map +0 -1
- package/dist/PhCurrencyDollar-BfOoDhJr.js +0 -74
- package/dist/PhCurrencyDollar-BfOoDhJr.js.map +0 -1
- package/dist/PhDesktop-Cq6jwzbS.js +0 -74
- package/dist/PhDesktop-Cq6jwzbS.js.map +0 -1
- package/dist/PhDeviceMobile-BCtTp6jj.js +0 -74
- package/dist/PhDeviceMobile-BCtTp6jj.js.map +0 -1
- package/dist/PhDotsThree-BGgD-WIO.js +0 -74
- package/dist/PhDotsThree-BGgD-WIO.js.map +0 -1
- package/dist/PhEnvelope-CQiV0-zG.js +0 -74
- package/dist/PhEnvelope-CQiV0-zG.js.map +0 -1
- package/dist/PhFunnelSimple-BHGtxTNf.js +0 -74
- package/dist/PhFunnelSimple-BHGtxTNf.js.map +0 -1
- package/dist/PhGlobe-Q8oVkf6X.js +0 -74
- package/dist/PhGlobe-Q8oVkf6X.js.map +0 -1
- package/dist/PhIdentificationCard-Cz9LzvVR.js +0 -74
- package/dist/PhIdentificationCard-Cz9LzvVR.js.map +0 -1
- package/dist/PhImage-CP5_qKk-.js +0 -74
- package/dist/PhImage-CP5_qKk-.js.map +0 -1
- package/dist/PhInfo-CTlE1X9Z.js +0 -74
- package/dist/PhInfo-CTlE1X9Z.js.map +0 -1
- package/dist/PhLightbulb-CcLpnAAb.js +0 -74
- package/dist/PhLightbulb-CcLpnAAb.js.map +0 -1
- package/dist/PhMagnifyingGlass-n58GUAck.js +0 -74
- package/dist/PhMagnifyingGlass-n58GUAck.js.map +0 -1
- package/dist/PhPaperPlaneRight-C0sf2XV8.js +0 -74
- package/dist/PhPaperPlaneRight-C0sf2XV8.js.map +0 -1
- package/dist/PhPlus-BJxvt7Uc.js +0 -74
- package/dist/PhPlus-BJxvt7Uc.js.map +0 -1
- package/dist/PhPower-BvktxO2-.js +0 -74
- package/dist/PhPower-BvktxO2-.js.map +0 -1
- package/dist/PhPuzzlePiece-CDDyUPYo.js +0 -74
- package/dist/PhPuzzlePiece-CDDyUPYo.js.map +0 -1
- package/dist/PhQrCode-BlGI8529.js +0 -74
- package/dist/PhQrCode-BlGI8529.js.map +0 -1
- package/dist/PhQuestion-DGZj6iDZ.js +0 -74
- package/dist/PhQuestion-DGZj6iDZ.js.map +0 -1
- package/dist/PhQuestionMark-CTmeI7MQ.js +0 -74
- package/dist/PhQuestionMark-CTmeI7MQ.js.map +0 -1
- package/dist/PhSealCheck-BSlqkxnH.js +0 -74
- package/dist/PhSealCheck-BSlqkxnH.js.map +0 -1
- package/dist/PhSignOut-CEXxlRk3.js +0 -74
- package/dist/PhSignOut-CEXxlRk3.js.map +0 -1
- package/dist/PhSpinner-Do1pY8fG.js +0 -74
- package/dist/PhSpinner-Do1pY8fG.js.map +0 -1
- package/dist/PhTrash-JNKavmpg.js +0 -74
- package/dist/PhTrash-JNKavmpg.js.map +0 -1
- package/dist/PhUser-BW7E-xYg.js +0 -74
- package/dist/PhUser-BW7E-xYg.js.map +0 -1
- package/dist/PhVault-mzxUgBYN.js +0 -74
- package/dist/PhVault-mzxUgBYN.js.map +0 -1
- package/dist/PhWallet-BR9JThKU.js +0 -74
- package/dist/PhWallet-BR9JThKU.js.map +0 -1
- package/dist/PhWarning-DxuQ70WM.js +0 -74
- package/dist/PhWarning-DxuQ70WM.js.map +0 -1
- package/dist/PhWarningCircle-DCI0JC1F.js +0 -74
- package/dist/PhWarningCircle-DCI0JC1F.js.map +0 -1
- package/dist/PhX-CWNXqpGn.js +0 -74
- package/dist/PhX-CWNXqpGn.js.map +0 -1
- package/dist/SwapController-DsYbP4IS.js +0 -684
- package/dist/SwapController-DsYbP4IS.js.map +0 -1
- package/dist/WebCryptoP256-Czt7ZkJ7.js +0 -3299
- package/dist/WebCryptoP256-Czt7ZkJ7.js.map +0 -1
- package/dist/add-UkulHTXi.js +0 -20
- package/dist/add-UkulHTXi.js.map +0 -1
- package/dist/all-wallets-DhJCVmL_.js +0 -11
- package/dist/all-wallets-DhJCVmL_.js.map +0 -1
- package/dist/app-store-Ern3I2La.js +0 -22
- package/dist/app-store-Ern3I2La.js.map +0 -1
- package/dist/appkit-ppmICUF1.js +0 -118106
- package/dist/appkit-ppmICUF1.js.map +0 -1
- package/dist/appkit.js +0 -11
- package/dist/appkit.js.map +0 -1
- package/dist/apple-_SZ-XSIx.js +0 -23
- package/dist/apple-_SZ-XSIx.js.map +0 -1
- package/dist/arrow-bottom-D7Qlu6xE.js +0 -13
- package/dist/arrow-bottom-D7Qlu6xE.js.map +0 -1
- package/dist/arrow-bottom-circle-Cel-TDaT.js +0 -16
- package/dist/arrow-bottom-circle-Cel-TDaT.js.map +0 -1
- package/dist/arrow-left-ByNxCvA_.js +0 -13
- package/dist/arrow-left-ByNxCvA_.js.map +0 -1
- package/dist/arrow-right-yep9R_ud.js +0 -13
- package/dist/arrow-right-yep9R_ud.js.map +0 -1
- package/dist/arrow-top-C1WlBAfk.js +0 -13
- package/dist/arrow-top-C1WlBAfk.js.map +0 -1
- package/dist/async-directive-C9EnweIr.js +0 -73
- package/dist/async-directive-C9EnweIr.js.map +0 -1
- package/dist/bank-Dm8zmIr0.js +0 -19
- package/dist/bank-Dm8zmIr0.js.map +0 -1
- package/dist/basic-UB459qAF.js +0 -4914
- package/dist/basic-UB459qAF.js.map +0 -1
- package/dist/browser-5XoTmr4n.js +0 -1991
- package/dist/browser-5XoTmr4n.js.map +0 -1
- package/dist/browser-LYv8PF5c.js +0 -19
- package/dist/browser-LYv8PF5c.js.map +0 -1
- package/dist/card-CEQLkIir.js +0 -19
- package/dist/card-CEQLkIir.js.map +0 -1
- package/dist/ccip-Dj8tRQd7.js +0 -164
- package/dist/ccip-Dj8tRQd7.js.map +0 -1
- package/dist/checkmark-DPFC_0yn.js +0 -16
- package/dist/checkmark-DPFC_0yn.js.map +0 -1
- package/dist/checkmark-bold-Hwfezlkn.js +0 -13
- package/dist/checkmark-bold-Hwfezlkn.js.map +0 -1
- package/dist/chevron-bottom-qsPvhQDo.js +0 -13
- package/dist/chevron-bottom-qsPvhQDo.js.map +0 -1
- package/dist/chevron-left-CA4SOr_F.js +0 -13
- package/dist/chevron-left-CA4SOr_F.js.map +0 -1
- package/dist/chevron-right-TeVZyORZ.js +0 -13
- package/dist/chevron-right-TeVZyORZ.js.map +0 -1
- package/dist/chevron-top-B7LCiM2n.js +0 -13
- package/dist/chevron-top-B7LCiM2n.js.map +0 -1
- package/dist/chrome-store-CU7w_5QC.js +0 -66
- package/dist/chrome-store-CU7w_5QC.js.map +0 -1
- package/dist/class-map-B814K2ej.js +0 -101
- package/dist/class-map-B814K2ej.js.map +0 -1
- package/dist/clock-DcbItfiJ.js +0 -13
- package/dist/clock-DcbItfiJ.js.map +0 -1
- package/dist/close-B22QsrS0.js +0 -13
- package/dist/close-B22QsrS0.js.map +0 -1
- package/dist/clsx.m-D57qXwfE.js +0 -21
- package/dist/clsx.m-D57qXwfE.js.map +0 -1
- package/dist/coinPlaceholder-BNrjpg6-.js +0 -13
- package/dist/coinPlaceholder-BNrjpg6-.js.map +0 -1
- package/dist/compass-C7GRFU39.js +0 -13
- package/dist/compass-C7GRFU39.js.map +0 -1
- package/dist/copy-BcrOhyLL.js +0 -20
- package/dist/copy-BcrOhyLL.js.map +0 -1
- package/dist/core-BI_Ap4BF.js +0 -16288
- package/dist/core-BI_Ap4BF.js.map +0 -1
- package/dist/cursor-AJkpyAWk.js +0 -8
- package/dist/cursor-AJkpyAWk.js.map +0 -1
- package/dist/cursor-transparent-C1dF4GFm.js +0 -17
- package/dist/cursor-transparent-C1dF4GFm.js.map +0 -1
- package/dist/data-capture-CqwQ1053.js +0 -549
- package/dist/data-capture-CqwQ1053.js.map +0 -1
- package/dist/desktop-C60oOo59.js +0 -14
- package/dist/desktop-C60oOo59.js.map +0 -1
- package/dist/disconnect-DqS517fE.js +0 -13
- package/dist/disconnect-DqS517fE.js.map +0 -1
- package/dist/discord-D1qNpgLJ.js +0 -22
- package/dist/discord-D1qNpgLJ.js.map +0 -1
- package/dist/email-UK97sxf8.js +0 -421
- package/dist/email-UK97sxf8.js.map +0 -1
- package/dist/embedded-wallet-f8ft4R2q.js +0 -952
- package/dist/embedded-wallet-f8ft4R2q.js.map +0 -1
- package/dist/etherscan-BWSY3GuJ.js +0 -11
- package/dist/etherscan-BWSY3GuJ.js.map +0 -1
- package/dist/exclamation-triangle-nypPoZ5T.js +0 -9
- package/dist/exclamation-triangle-nypPoZ5T.js.map +0 -1
- package/dist/extension-BuFHuaRl.js +0 -13
- package/dist/extension-BuFHuaRl.js.map +0 -1
- package/dist/external-link-L3QQJwck.js +0 -13
- package/dist/external-link-L3QQJwck.js.map +0 -1
- package/dist/facebook-BbbjiGyt.js +0 -31
- package/dist/facebook-BbbjiGyt.js.map +0 -1
- package/dist/farcaster-CDar3vjq.js +0 -17
- package/dist/farcaster-CDar3vjq.js.map +0 -1
- package/dist/features-Dne1ZyJy.js +0 -319
- package/dist/features-Dne1ZyJy.js.map +0 -1
- package/dist/filters-BprVfwTM.js +0 -13
- package/dist/filters-BprVfwTM.js.map +0 -1
- package/dist/github-BFRFSS65.js +0 -23
- package/dist/github-BFRFSS65.js.map +0 -1
- package/dist/google-DX3b-tuu.js +0 -23
- package/dist/google-DX3b-tuu.js.map +0 -1
- package/dist/hashTypedData-MEx8_Z-J.js +0 -262
- package/dist/hashTypedData-MEx8_Z-J.js.map +0 -1
- package/dist/help-circle-PtWG4XV9.js +0 -17
- package/dist/help-circle-PtWG4XV9.js.map +0 -1
- package/dist/id-BKzsrqpW.js +0 -17
- package/dist/id-BKzsrqpW.js.map +0 -1
- package/dist/if-defined-CyuCf775.js +0 -11
- package/dist/if-defined-CyuCf775.js.map +0 -1
- package/dist/image-2qjHFSqv.js +0 -9
- package/dist/image-2qjHFSqv.js.map +0 -1
- package/dist/index-57er67ch.js +0 -131
- package/dist/index-57er67ch.js.map +0 -1
- package/dist/index-B-MpJOWW.js +0 -3987
- package/dist/index-B-MpJOWW.js.map +0 -1
- package/dist/index-B2f4UbAK.js +0 -257
- package/dist/index-B2f4UbAK.js.map +0 -1
- package/dist/index-B4xD2s69.js +0 -62
- package/dist/index-B4xD2s69.js.map +0 -1
- package/dist/index-BF4uePO9.js +0 -126
- package/dist/index-BF4uePO9.js.map +0 -1
- package/dist/index-BG3007yu.js +0 -542
- package/dist/index-BG3007yu.js.map +0 -1
- package/dist/index-BPqsyCu1.js +0 -249
- package/dist/index-BPqsyCu1.js.map +0 -1
- package/dist/index-BTFeMb7h.js +0 -2277
- package/dist/index-BTFeMb7h.js.map +0 -1
- package/dist/index-B_z_MPZ-.js +0 -180
- package/dist/index-B_z_MPZ-.js.map +0 -1
- package/dist/index-Biw_bFmP.js +0 -70
- package/dist/index-Biw_bFmP.js.map +0 -1
- package/dist/index-BnY1urGu.js +0 -441
- package/dist/index-BnY1urGu.js.map +0 -1
- package/dist/index-C1OrBJOZ.js +0 -218
- package/dist/index-C1OrBJOZ.js.map +0 -1
- package/dist/index-CHvzOG0E.js +0 -1372
- package/dist/index-CHvzOG0E.js.map +0 -1
- package/dist/index-CKaIBA_q.js +0 -153
- package/dist/index-CKaIBA_q.js.map +0 -1
- package/dist/index-CLefivQ6.js +0 -124
- package/dist/index-CLefivQ6.js.map +0 -1
- package/dist/index-COvWUE72.js +0 -716
- package/dist/index-COvWUE72.js.map +0 -1
- package/dist/index-CRhk6ovx.js +0 -198
- package/dist/index-CRhk6ovx.js.map +0 -1
- package/dist/index-CfTNvhZC.js +0 -967
- package/dist/index-CfTNvhZC.js.map +0 -1
- package/dist/index-CjCwufpz.js +0 -120
- package/dist/index-CjCwufpz.js.map +0 -1
- package/dist/index-Ck3zz_LE.js +0 -984
- package/dist/index-Ck3zz_LE.js.map +0 -1
- package/dist/index-CqVDx2Ua.js +0 -9350
- package/dist/index-CqVDx2Ua.js.map +0 -1
- package/dist/index-CrF2nCtM.js +0 -211
- package/dist/index-CrF2nCtM.js.map +0 -1
- package/dist/index-Crnbnlbl.js +0 -8825
- package/dist/index-Crnbnlbl.js.map +0 -1
- package/dist/index-D7bwcPcO.js +0 -147
- package/dist/index-D7bwcPcO.js.map +0 -1
- package/dist/index-DAmhDlFG.js +0 -985
- package/dist/index-DAmhDlFG.js.map +0 -1
- package/dist/index-DF9XlWjQ.js +0 -456
- package/dist/index-DF9XlWjQ.js.map +0 -1
- package/dist/index-DGtLnlsD.js +0 -521
- package/dist/index-DGtLnlsD.js.map +0 -1
- package/dist/index-DIDlQZ9c.js +0 -1582
- package/dist/index-DIDlQZ9c.js.map +0 -1
- package/dist/index-DJe9wj3q.js +0 -136
- package/dist/index-DJe9wj3q.js.map +0 -1
- package/dist/index-DPlE9Qgr.js +0 -73
- package/dist/index-DPlE9Qgr.js.map +0 -1
- package/dist/index-DVXtgl7V.js +0 -7481
- package/dist/index-DVXtgl7V.js.map +0 -1
- package/dist/index-DWLAu0nH.js +0 -110
- package/dist/index-DWLAu0nH.js.map +0 -1
- package/dist/index-DXCwyaz_.js +0 -147
- package/dist/index-DXCwyaz_.js.map +0 -1
- package/dist/index-D_NteNrS.js +0 -198
- package/dist/index-D_NteNrS.js.map +0 -1
- package/dist/index-Dg65-p7m.js +0 -7258
- package/dist/index-Dg65-p7m.js.map +0 -1
- package/dist/index-Du7PdWv1.js +0 -181
- package/dist/index-Du7PdWv1.js.map +0 -1
- package/dist/index-HOjNYM_k.js +0 -92
- package/dist/index-HOjNYM_k.js.map +0 -1
- package/dist/index-MwW0rp8T.js +0 -286
- package/dist/index-MwW0rp8T.js.map +0 -1
- package/dist/index-OCzLDbWt.js +0 -18322
- package/dist/index-OCzLDbWt.js.map +0 -1
- package/dist/index-Sf3UCmHB.js +0 -611
- package/dist/index-Sf3UCmHB.js.map +0 -1
- package/dist/index-Zt_Jj4gf.js +0 -520
- package/dist/index-Zt_Jj4gf.js.map +0 -1
- package/dist/index-kb6zqfNt.js +0 -1178
- package/dist/index-kb6zqfNt.js.map +0 -1
- package/dist/index-rYPftA0P.js +0 -52
- package/dist/index-rYPftA0P.js.map +0 -1
- package/dist/index-tdPUUHj0.js +0 -281
- package/dist/index-tdPUUHj0.js.map +0 -1
- package/dist/index-wVp4UjVg.js +0 -182
- package/dist/index-wVp4UjVg.js.map +0 -1
- package/dist/index-ywRnp0Bi.js +0 -109
- package/dist/index-ywRnp0Bi.js.map +0 -1
- package/dist/index.es-BrfaQK0n.js +0 -8391
- package/dist/index.es-BrfaQK0n.js.map +0 -1
- package/dist/info-BhM-vMtG.js +0 -8
- package/dist/info-BhM-vMtG.js.map +0 -1
- package/dist/info-circle-DwGnsKMj.js +0 -17
- package/dist/info-circle-DwGnsKMj.js.map +0 -1
- package/dist/jsxRuntime.module-BW0yCO8A.js +0 -14
- package/dist/jsxRuntime.module-BW0yCO8A.js.map +0 -1
- package/dist/lightbulb-BvGmXMuo.js +0 -8
- package/dist/lightbulb-BvGmXMuo.js.map +0 -1
- package/dist/localBatchGatewayRequest-CLL1gABv.js +0 -103
- package/dist/localBatchGatewayRequest-CLL1gABv.js.map +0 -1
- package/dist/mail-Cl70v1Dx.js +0 -13
- package/dist/mail-Cl70v1Dx.js.map +0 -1
- package/dist/metamask-sdk-BzQ933Ju.js +0 -16699
- package/dist/metamask-sdk-BzQ933Ju.js.map +0 -1
- package/dist/mobile-BCINjy0Y.js +0 -14
- package/dist/mobile-BCINjy0Y.js.map +0 -1
- package/dist/more-Cozw6-SQ.js +0 -16
- package/dist/more-Cozw6-SQ.js.map +0 -1
- package/dist/native-Dc_5StoC.js +0 -17
- package/dist/native-Dc_5StoC.js.map +0 -1
- package/dist/network-placeholder-o2Dz_YnK.js +0 -19
- package/dist/network-placeholder-o2Dz_YnK.js.map +0 -1
- package/dist/nftPlaceholder-Bjf9SAC-.js +0 -13
- package/dist/nftPlaceholder-Bjf9SAC-.js.map +0 -1
- package/dist/off-BsVJ8v6H.js +0 -13
- package/dist/off-BsVJ8v6H.js.map +0 -1
- package/dist/onramp-C4DqYEmw.js +0 -979
- package/dist/onramp-C4DqYEmw.js.map +0 -1
- package/dist/parseAbiParameters-DfJcIE_w.js +0 -757
- package/dist/parseAbiParameters-DfJcIE_w.js.map +0 -1
- package/dist/parseSignature-MJforcG6.js +0 -4690
- package/dist/parseSignature-MJforcG6.js.map +0 -1
- package/dist/pay-with-exchange-DC29BzBo.js +0 -603
- package/dist/pay-with-exchange-DC29BzBo.js.map +0 -1
- package/dist/play-store-DIOK4cBW.js +0 -37
- package/dist/play-store-DIOK4cBW.js.map +0 -1
- package/dist/plus-Cxls3O6G.js +0 -18
- package/dist/plus-Cxls3O6G.js.map +0 -1
- package/dist/property-8UcTqffH.js +0 -623
- package/dist/property-8UcTqffH.js.map +0 -1
- package/dist/qr-code-Cp6lpAcY.js +0 -11
- package/dist/qr-code-Cp6lpAcY.js.map +0 -1
- package/dist/receive-BLI57snb.js +0 -262
- package/dist/receive-BLI57snb.js.map +0 -1
- package/dist/recycle-horizontal-AEJ_nbSP.js +0 -14
- package/dist/recycle-horizontal-AEJ_nbSP.js.map +0 -1
- package/dist/ref-BobNUvS_.js +0 -43
- package/dist/ref-BobNUvS_.js.map +0 -1
- package/dist/refresh-7roUeD2M.js +0 -13
- package/dist/refresh-7roUeD2M.js.map +0 -1
- package/dist/reown-logo-xggoIKX2.js +0 -17
- package/dist/reown-logo-xggoIKX2.js.map +0 -1
- package/dist/search-DgzcpMUb.js +0 -13
- package/dist/search-DgzcpMUb.js.map +0 -1
- package/dist/secp256k1-D_j0Z4BY.js +0 -2031
- package/dist/secp256k1-D_j0Z4BY.js.map +0 -1
- package/dist/send-D7M2-Upc.js +0 -20
- package/dist/send-D7M2-Upc.js.map +0 -1
- package/dist/send-TAzhXOOa.js +0 -1365
- package/dist/send-TAzhXOOa.js.map +0 -1
- package/dist/socials-BXTq602s.js +0 -796
- package/dist/socials-BXTq602s.js.map +0 -1
- package/dist/swapHorizontal-2gzDDUNF.js +0 -13
- package/dist/swapHorizontal-2gzDDUNF.js.map +0 -1
- package/dist/swapHorizontalBold-C1cHwAjU.js +0 -13
- package/dist/swapHorizontalBold-C1cHwAjU.js.map +0 -1
- package/dist/swapHorizontalMedium-BQno5vep.js +0 -21
- package/dist/swapHorizontalMedium-BQno5vep.js.map +0 -1
- package/dist/swapHorizontalRoundedBold-CYmZDeQ5.js +0 -13
- package/dist/swapHorizontalRoundedBold-CYmZDeQ5.js.map +0 -1
- package/dist/swapVertical-BhRPysBs.js +0 -13
- package/dist/swapVertical-BhRPysBs.js.map +0 -1
- package/dist/swaps-DQ-uUZvX.js +0 -2121
- package/dist/swaps-DQ-uUZvX.js.map +0 -1
- package/dist/telegram-B-YOyhte.js +0 -21
- package/dist/telegram-B-YOyhte.js.map +0 -1
- package/dist/three-dots-8mr70UzU.js +0 -10
- package/dist/three-dots-8mr70UzU.js.map +0 -1
- package/dist/transactions-C4p83vMQ.js +0 -38
- package/dist/transactions-C4p83vMQ.js.map +0 -1
- package/dist/twitch-C2ccExfT.js +0 -23
- package/dist/twitch-C2ccExfT.js.map +0 -1
- package/dist/twitterIcon-IkT5wPxq.js +0 -11
- package/dist/twitterIcon-IkT5wPxq.js.map +0 -1
- package/dist/vanilla-CgG5xMJO.js +0 -448
- package/dist/vanilla-CgG5xMJO.js.map +0 -1
- package/dist/verify-BfilAaob.js +0 -13
- package/dist/verify-BfilAaob.js.map +0 -1
- package/dist/verify-filled-COkWKgPo.js +0 -13
- package/dist/verify-filled-COkWKgPo.js.map +0 -1
- package/dist/w3m-modal-9MzgEqm3.js +0 -1725
- package/dist/w3m-modal-9MzgEqm3.js.map +0 -1
- package/dist/w3m-modal-DBQU256b.js +0 -2008
- package/dist/w3m-modal-DBQU256b.js.map +0 -1
- package/dist/wallet-9D5svrZj.js +0 -13
- package/dist/wallet-9D5svrZj.js.map +0 -1
- package/dist/wallet-placeholder-CfLGKG93.js +0 -19
- package/dist/wallet-placeholder-CfLGKG93.js.map +0 -1
- package/dist/wallet-standard-CkMoUaGA.js +0 -523
- package/dist/wallet-standard-CkMoUaGA.js.map +0 -1
- package/dist/walletconnect-MtAz2u7z.js +0 -39
- package/dist/walletconnect-MtAz2u7z.js.map +0 -1
- package/dist/warning-circle-Cf2AJecu.js +0 -17
- package/dist/warning-circle-Cf2AJecu.js.map +0 -1
- package/dist/x-B0KhGb39.js +0 -17
- package/dist/x-B0KhGb39.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-Crnbnlbl.js","sources":["../../../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/esm/nist.js","../../../node_modules/.pnpm/@noble+curves@1.9.1/node_modules/@noble/curves/esm/p256.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/op-stack/contracts.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/op-stack/formatters.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/op-stack/serializers.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/op-stack/chainConfig.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/anvil.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/arbitrum.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/arbitrumSepolia.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/base.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/baseSepolia.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/bsc.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/celo/fees.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/celo/utils.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/celo/formatters.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/celo/serializers.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/celo/chainConfig.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/celo.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/mainnet.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/optimism.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/optimismSepolia.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/polygon.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/chains/definitions/sepolia.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Chains.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/RpcResponse.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Provider.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/intersectionObserver.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/logger.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/userAgent.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/promise.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/utils.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Messenger.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Dialog.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/bytes.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Bytes.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/lru.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Caches.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Hash.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/PublicKey.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Address.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/entropy.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Secp256k1.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Solidity.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Signature.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/abiParameters.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/cursor.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/AbiParameters.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/TypedData.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/accounts/toAccount.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/abiItem.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/AbiItem.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/AbiFunction.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/P256.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Value.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Base64.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/internal/webauthn.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/WebAuthnP256.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/WebCryptoP256.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/call.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/Key.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/Account.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/AbiError.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/experimental/erc7821/errors.js","../../../node_modules/.pnpm/ox@0.9.6_typescript@5.9.2_zod@3.25.76/node_modules/ox/_esm/core/AbiError.js","../../../node_modules/.pnpm/viem@2.37.9_bufferutil@4.0.9_typescript@5.9.2_utf-8-validate@5.0.10_zod@3.25.76/node_modules/viem/_esm/experimental/erc7821/utils/getExecuteError.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/internal/relayActions.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Transport.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/RelayClient.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/permissions.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/schema/request.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/store.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/urlString.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/provider.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/mode.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/RpcRequest.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/permissionsRequest.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Siwe.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/siwe.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/PersonalMessage.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Rlp.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/core/Authorization.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/ContractActions.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/viem/RelayActions.js","../../../node_modules/.pnpm/ox@0.9.11_typescript@5.9.2_zod@4.1.12/node_modules/ox/_esm/erc8010/SignatureErc8010.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/erc8010.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/requiredFunds.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/tokens.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/modes/relay.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/internal/modes/dialog.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Storage.js","../../../node_modules/.pnpm/porto@0.2.19_@tanstack+react-query@5.75.5_react@19.2.1__@types+react@19.2.2_@wagmi+core@2.21._2w7vyhku53hphwaikva352cnk4/node_modules/porto/_dist/core/Porto.js"],"sourcesContent":["/**\n * Internal module for NIST P256, P384, P521 curves.\n * Do not use for now.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256, sha384, sha512 } from '@noble/hashes/sha2';\nimport { createCurve } from \"./_shortw_utils.js\";\nimport { createHasher } from \"./abstract/hash-to-curve.js\";\nimport { Field } from \"./abstract/modular.js\";\nimport { mapToCurveSimpleSWU } from \"./abstract/weierstrass.js\";\nconst Fp256 = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst p256_a = Fp256.create(BigInt('-3'));\nconst p256_b = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\n/**\n * secp256r1 curve, ECDSA and ECDH methods.\n * Field: `2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n`\n */\n// prettier-ignore\nexport const p256 = createCurve({\n a: p256_a,\n b: p256_b,\n Fp: Fp256,\n n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n h: BigInt(1),\n lowS: false\n}, sha256);\n/** Alias to p256. */\nexport const secp256r1 = p256;\nconst p256_mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fp256, {\n A: p256_a,\n B: p256_b,\n Z: Fp256.create(BigInt('-10')),\n}))();\n/** Hashing / encoding to p256 points / field. RFC 9380 methods. */\nexport const p256_hasher = /* @__PURE__ */ (() => createHasher(secp256r1.ProjectivePoint, (scalars) => p256_mapSWU(scalars[0]), {\n DST: 'P256_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n p: Fp256.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\n// Field over which we'll do calculations.\nconst Fp384 = Field(BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff'));\nconst p384_a = Fp384.create(BigInt('-3'));\n// prettier-ignore\nconst p384_b = BigInt('0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef');\n/**\n * secp384r1 curve, ECDSA and ECDH methods.\n * Field: `2n**384n - 2n**128n - 2n**96n + 2n**32n - 1n`.\n * */\n// prettier-ignore\nexport const p384 = createCurve({\n a: p384_a,\n b: p384_b,\n Fp: Fp384,\n n: BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973'),\n Gx: BigInt('0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7'),\n Gy: BigInt('0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f'),\n h: BigInt(1),\n lowS: false\n}, sha384);\n/** Alias to p384. */\nexport const secp384r1 = p384;\nconst p384_mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fp384, {\n A: p384_a,\n B: p384_b,\n Z: Fp384.create(BigInt('-12')),\n}))();\n/** Hashing / encoding to p384 points / field. RFC 9380 methods. */\nexport const p384_hasher = /* @__PURE__ */ (() => createHasher(secp384r1.ProjectivePoint, (scalars) => p384_mapSWU(scalars[0]), {\n DST: 'P384_XMD:SHA-384_SSWU_RO_',\n encodeDST: 'P384_XMD:SHA-384_SSWU_NU_',\n p: Fp384.ORDER,\n m: 1,\n k: 192,\n expand: 'xmd',\n hash: sha384,\n}))();\n// Field over which we'll do calculations.\nconst Fp521 = Field(BigInt('0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'));\nconst p521_a = Fp521.create(BigInt('-3'));\nconst p521_b = BigInt('0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00');\n/**\n * NIST secp521r1 aka p521 curve, ECDSA and ECDH methods.\n * Field: `2n**521n - 1n`.\n */\n// prettier-ignore\nexport const p521 = createCurve({\n a: p521_a,\n b: p521_b,\n Fp: Fp521,\n n: BigInt('0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409'),\n Gx: BigInt('0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66'),\n Gy: BigInt('0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650'),\n h: BigInt(1),\n lowS: false,\n allowedPrivateKeyLengths: [130, 131, 132] // P521 keys are variable-length. Normalize to 132b\n}, sha512);\n/** Alias to p521. */\nexport const secp521r1 = p521;\nconst p521_mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fp521, {\n A: p521_a,\n B: p521_b,\n Z: Fp521.create(BigInt('-4')),\n}))();\n/** Hashing / encoding to p521 points / field. RFC 9380 methods. */\nexport const p521_hasher = /* @__PURE__ */ (() => createHasher(secp521r1.ProjectivePoint, (scalars) => p521_mapSWU(scalars[0]), {\n DST: 'P521_XMD:SHA-512_SSWU_RO_',\n encodeDST: 'P521_XMD:SHA-512_SSWU_NU_',\n p: Fp521.ORDER,\n m: 1,\n k: 256,\n expand: 'xmd',\n hash: sha512,\n}))();\n//# sourceMappingURL=nist.js.map","/**\n * NIST secp256r1 aka p256.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {} from \"./abstract/hash-to-curve.js\";\nimport { p256_hasher, p256 as p256n } from \"./nist.js\";\nexport const p256 = p256n;\nexport const secp256r1 = p256n;\nexport const hashToCurve = /* @__PURE__ */ (() => p256_hasher.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => p256_hasher.encodeToCurve)();\n//# sourceMappingURL=p256.js.map","/**\n * Predeploy contracts for OP Stack.\n * @see https://github.com/ethereum-optimism/optimism/blob/develop/specs/predeploys.md\n */\nexport const contracts = {\n gasPriceOracle: { address: '0x420000000000000000000000000000000000000F' },\n l1Block: { address: '0x4200000000000000000000000000000000000015' },\n l2CrossDomainMessenger: {\n address: '0x4200000000000000000000000000000000000007',\n },\n l2Erc721Bridge: { address: '0x4200000000000000000000000000000000000014' },\n l2StandardBridge: { address: '0x4200000000000000000000000000000000000010' },\n l2ToL1MessagePasser: {\n address: '0x4200000000000000000000000000000000000016',\n },\n};\n//# sourceMappingURL=contracts.js.map","import { hexToBigInt } from '../utils/encoding/fromHex.js';\nimport { defineBlock } from '../utils/formatters/block.js';\nimport { defineTransaction, formatTransaction, } from '../utils/formatters/transaction.js';\nimport { defineTransactionReceipt } from '../utils/formatters/transactionReceipt.js';\nexport const formatters = {\n block: /*#__PURE__*/ defineBlock({\n format(args) {\n const transactions = args.transactions?.map((transaction) => {\n if (typeof transaction === 'string')\n return transaction;\n const formatted = formatTransaction(transaction);\n if (formatted.typeHex === '0x7e') {\n formatted.isSystemTx = transaction.isSystemTx;\n formatted.mint = transaction.mint\n ? hexToBigInt(transaction.mint)\n : undefined;\n formatted.sourceHash = transaction.sourceHash;\n formatted.type = 'deposit';\n }\n return formatted;\n });\n return {\n transactions,\n stateRoot: args.stateRoot,\n };\n },\n }),\n transaction: /*#__PURE__*/ defineTransaction({\n format(args) {\n const transaction = {};\n if (args.type === '0x7e') {\n transaction.isSystemTx = args.isSystemTx;\n transaction.mint = args.mint ? hexToBigInt(args.mint) : undefined;\n transaction.sourceHash = args.sourceHash;\n transaction.type = 'deposit';\n }\n return transaction;\n },\n }),\n transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({\n format(args) {\n return {\n l1GasPrice: args.l1GasPrice ? hexToBigInt(args.l1GasPrice) : null,\n l1GasUsed: args.l1GasUsed ? hexToBigInt(args.l1GasUsed) : null,\n l1Fee: args.l1Fee ? hexToBigInt(args.l1Fee) : null,\n l1FeeScalar: args.l1FeeScalar ? Number(args.l1FeeScalar) : null,\n };\n },\n }),\n};\n//# sourceMappingURL=formatters.js.map","import { InvalidAddressError } from '../errors/address.js';\nimport { isAddress } from '../utils/address/isAddress.js';\nimport { concatHex } from '../utils/data/concat.js';\nimport { toHex } from '../utils/encoding/toHex.js';\nimport { toRlp } from '../utils/encoding/toRlp.js';\nimport { serializeTransaction as serializeTransaction_, } from '../utils/transaction/serializeTransaction.js';\nexport function serializeTransaction(transaction, signature) {\n if (isDeposit(transaction))\n return serializeTransactionDeposit(transaction);\n return serializeTransaction_(transaction, signature);\n}\nexport const serializers = {\n transaction: serializeTransaction,\n};\nfunction serializeTransactionDeposit(transaction) {\n assertTransactionDeposit(transaction);\n const { sourceHash, data, from, gas, isSystemTx, mint, to, value } = transaction;\n const serializedTransaction = [\n sourceHash,\n from,\n to ?? '0x',\n mint ? toHex(mint) : '0x',\n value ? toHex(value) : '0x',\n gas ? toHex(gas) : '0x',\n isSystemTx ? '0x1' : '0x',\n data ?? '0x',\n ];\n return concatHex([\n '0x7e',\n toRlp(serializedTransaction),\n ]);\n}\nfunction isDeposit(transaction) {\n if (transaction.type === 'deposit')\n return true;\n if (typeof transaction.sourceHash !== 'undefined')\n return true;\n return false;\n}\nexport function assertTransactionDeposit(transaction) {\n const { from, to } = transaction;\n if (from && !isAddress(from))\n throw new InvalidAddressError({ address: from });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n}\n//# sourceMappingURL=serializers.js.map","import { contracts } from './contracts.js';\nimport { formatters } from './formatters.js';\nimport { serializers } from './serializers.js';\nexport const chainConfig = {\n blockTime: 2_000,\n contracts,\n formatters,\n serializers,\n};\n//# sourceMappingURL=chainConfig.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const anvil = /*#__PURE__*/ defineChain({\n id: 31_337,\n name: 'Anvil',\n nativeCurrency: {\n decimals: 18,\n name: 'Ether',\n symbol: 'ETH',\n },\n rpcUrls: {\n default: {\n http: ['http://127.0.0.1:8545'],\n webSocket: ['ws://127.0.0.1:8545'],\n },\n },\n});\n//# sourceMappingURL=anvil.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const arbitrum = /*#__PURE__*/ defineChain({\n id: 42_161,\n name: 'Arbitrum One',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockTime: 250,\n rpcUrls: {\n default: {\n http: ['https://arb1.arbitrum.io/rpc'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Arbiscan',\n url: 'https://arbiscan.io',\n apiUrl: 'https://api.arbiscan.io/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 7654707,\n },\n },\n});\n//# sourceMappingURL=arbitrum.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const arbitrumSepolia = /*#__PURE__*/ defineChain({\n id: 421_614,\n name: 'Arbitrum Sepolia',\n blockTime: 250,\n nativeCurrency: {\n name: 'Arbitrum Sepolia Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: ['https://sepolia-rollup.arbitrum.io/rpc'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Arbiscan',\n url: 'https://sepolia.arbiscan.io',\n apiUrl: 'https://api-sepolia.arbiscan.io/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 81930,\n },\n },\n testnet: true,\n});\n//# sourceMappingURL=arbitrumSepolia.js.map","import { chainConfig } from '../../op-stack/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nconst sourceId = 1; // mainnet\nexport const base = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 8453,\n name: 'Base',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://mainnet.base.org'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Basescan',\n url: 'https://basescan.org',\n apiUrl: 'https://api.basescan.org/api',\n },\n },\n contracts: {\n ...chainConfig.contracts,\n disputeGameFactory: {\n [sourceId]: {\n address: '0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e',\n },\n },\n l2OutputOracle: {\n [sourceId]: {\n address: '0x56315b90c40730925ec5485cf004d835058518A0',\n },\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 5022,\n },\n portal: {\n [sourceId]: {\n address: '0x49048044D57e1C92A77f79988d21Fa8fAF74E97e',\n blockCreated: 17482143,\n },\n },\n l1StandardBridge: {\n [sourceId]: {\n address: '0x3154Cf16ccdb4C6d922629664174b904d80F2C35',\n blockCreated: 17482143,\n },\n },\n },\n sourceId,\n});\nexport const basePreconf = /*#__PURE__*/ defineChain({\n ...base,\n experimental_preconfirmationTime: 200,\n rpcUrls: {\n default: {\n http: ['https://mainnet-preconf.base.org'],\n },\n },\n});\n//# sourceMappingURL=base.js.map","import { chainConfig } from '../../op-stack/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nconst sourceId = 11_155_111; // sepolia\nexport const baseSepolia = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 84532,\n network: 'base-sepolia',\n name: 'Base Sepolia',\n nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://sepolia.base.org'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Basescan',\n url: 'https://sepolia.basescan.org',\n apiUrl: 'https://api-sepolia.basescan.org/api',\n },\n },\n contracts: {\n ...chainConfig.contracts,\n disputeGameFactory: {\n [sourceId]: {\n address: '0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1',\n },\n },\n l2OutputOracle: {\n [sourceId]: {\n address: '0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254',\n },\n },\n portal: {\n [sourceId]: {\n address: '0x49f53e41452c74589e85ca1677426ba426459e85',\n blockCreated: 4446677,\n },\n },\n l1StandardBridge: {\n [sourceId]: {\n address: '0xfd0Bf71F60660E2f608ed56e1659C450eB113120',\n blockCreated: 4446677,\n },\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 1059647,\n },\n },\n testnet: true,\n sourceId,\n});\nexport const baseSepoliaPreconf = /*#__PURE__*/ defineChain({\n ...baseSepolia,\n experimental_preconfirmationTime: 200,\n rpcUrls: {\n default: {\n http: ['https://sepolia-preconf.base.org'],\n },\n },\n});\n//# sourceMappingURL=baseSepolia.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const bsc = /*#__PURE__*/ defineChain({\n id: 56,\n name: 'BNB Smart Chain',\n blockTime: 750,\n nativeCurrency: {\n decimals: 18,\n name: 'BNB',\n symbol: 'BNB',\n },\n rpcUrls: {\n default: { http: ['https://56.rpc.thirdweb.com'] },\n },\n blockExplorers: {\n default: {\n name: 'BscScan',\n url: 'https://bscscan.com',\n apiUrl: 'https://api.bscscan.com/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 15921452,\n },\n },\n});\n//# sourceMappingURL=bsc.js.map","export const fees = {\n /*\n * Estimates the fees per gas for a transaction.\n \n * If the transaction is to be paid in a token (feeCurrency is present) then the fees\n * are estimated in the value of the token. Otherwise falls back to the default\n * estimation by returning null.\n *\n * @param params fee estimation function parameters\n */\n estimateFeesPerGas: async (params) => {\n if (!params.request?.feeCurrency)\n return null;\n const [gasPrice, maxPriorityFeePerGas] = await Promise.all([\n estimateFeePerGasInFeeCurrency(params.client, params.request.feeCurrency),\n estimateMaxPriorityFeePerGasInFeeCurrency(params.client, params.request.feeCurrency),\n ]);\n // eth_gasPrice for cel2 returns baseFeePerGas + maxPriorityFeePerGas\n const maxFeePerGas = params.multiply(gasPrice - maxPriorityFeePerGas) + maxPriorityFeePerGas;\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n },\n};\n/*\n * Estimate the fee per gas in the value of the fee token\n\n *\n * @param client - Client to use\n * @param feeCurrency - Address of a whitelisted fee token\n * @returns The fee per gas in wei in the value of the fee token\n *\n */\nasync function estimateFeePerGasInFeeCurrency(client, feeCurrency) {\n const fee = await client.request({\n method: 'eth_gasPrice',\n params: [feeCurrency],\n });\n return BigInt(fee);\n}\n/*\n * Estimate the max priority fee per gas in the value of the fee token\n\n *\n * @param client - Client to use\n * @param feeCurrency - Address of a whitelisted fee token\n * @returns The fee per gas in wei in the value of the fee token\n *\n */\nasync function estimateMaxPriorityFeePerGasInFeeCurrency(client, feeCurrency) {\n const feesPerGas = await client.request({\n method: 'eth_maxPriorityFeePerGas',\n params: [feeCurrency],\n });\n return BigInt(feesPerGas);\n}\n//# sourceMappingURL=fees.js.map","import { trim } from '../utils/data/trim.js';\nexport function isEmpty(value) {\n return (value === 0 ||\n value === 0n ||\n value === undefined ||\n value === null ||\n value === '0' ||\n value === '' ||\n (typeof value === 'string' &&\n (trim(value).toLowerCase() === '0x' ||\n trim(value).toLowerCase() === '0x00')));\n}\nexport function isPresent(value) {\n return !isEmpty(value);\n}\n/** @internal */\nexport function isEIP1559(transaction) {\n return (typeof transaction.maxFeePerGas !== 'undefined' &&\n typeof transaction.maxPriorityFeePerGas !== 'undefined');\n}\nexport function isCIP64(transaction) {\n /*\n * Enable end user to force the tx to be considered as a CIP-64.\n *\n * The preliminary type will be determined as \"eip1559\" by src/utils/transaction/getTransactionType.ts\n * and so we need the logic below to check for the specific value instead of checking if just any\n * transaction type is provided. If that's anything else than \"cip64\" then we need to reevaluate the\n * type based on the transaction fields.\n *\n * Modify with caution and according to https://github.com/celo-org/celo-proposals/blob/master/CIPs/cip-0064.md\n */\n if (transaction.type === 'cip64') {\n return true;\n }\n return isEIP1559(transaction) && isPresent(transaction.feeCurrency);\n}\n//# sourceMappingURL=utils.js.map","import { hexToBigInt } from '../utils/encoding/fromHex.js';\nimport { defineBlock } from '../utils/formatters/block.js';\nimport { defineTransaction, formatTransaction, } from '../utils/formatters/transaction.js';\nimport { defineTransactionRequest } from '../utils/formatters/transactionRequest.js';\nimport { isCIP64 } from './utils.js';\nexport const formatters = {\n block: /*#__PURE__*/ defineBlock({\n format(args) {\n const transactions = args.transactions?.map((transaction) => {\n if (typeof transaction === 'string')\n return transaction;\n const formatted = formatTransaction(transaction);\n return {\n ...formatted,\n ...(transaction.gatewayFee\n ? {\n gatewayFee: hexToBigInt(transaction.gatewayFee),\n gatewayFeeRecipient: transaction.gatewayFeeRecipient,\n }\n : {}),\n feeCurrency: transaction.feeCurrency,\n };\n });\n return {\n transactions,\n };\n },\n }),\n transaction: /*#__PURE__*/ defineTransaction({\n format(args) {\n if (args.type === '0x7e')\n return {\n isSystemTx: args.isSystemTx,\n mint: args.mint ? hexToBigInt(args.mint) : undefined,\n sourceHash: args.sourceHash,\n type: 'deposit',\n };\n const transaction = { feeCurrency: args.feeCurrency };\n if (args.type === '0x7b')\n transaction.type = 'cip64';\n else {\n if (args.type === '0x7c')\n transaction.type = 'cip42';\n transaction.gatewayFee = args.gatewayFee\n ? hexToBigInt(args.gatewayFee)\n : null;\n transaction.gatewayFeeRecipient = args.gatewayFeeRecipient;\n }\n return transaction;\n },\n }),\n transactionRequest: /*#__PURE__*/ defineTransactionRequest({\n format(args) {\n const request = {};\n if (args.feeCurrency)\n request.feeCurrency = args.feeCurrency;\n if (isCIP64(args))\n request.type = '0x7b';\n return request;\n },\n }),\n};\n//# sourceMappingURL=formatters.js.map","import { maxUint256 } from '../constants/number.js';\nimport { InvalidAddressError } from '../errors/address.js';\nimport { BaseError } from '../errors/base.js';\nimport { InvalidChainIdError } from '../errors/chain.js';\nimport { FeeCapTooHighError, TipAboveFeeCapError } from '../errors/node.js';\nimport { serializeTransaction as serializeTransaction_op } from '../op-stack/serializers.js';\nimport { isAddress } from '../utils/address/isAddress.js';\nimport { concatHex } from '../utils/data/concat.js';\nimport { toHex } from '../utils/encoding/toHex.js';\nimport { toRlp } from '../utils/encoding/toRlp.js';\nimport { serializeAccessList } from '../utils/transaction/serializeAccessList.js';\nimport { toYParitySignatureArray } from '../utils/transaction/serializeTransaction.js';\nimport { isCIP64, isEmpty, isPresent } from './utils.js';\nexport function serializeTransaction(transaction, signature) {\n if (isCIP64(transaction))\n return serializeTransactionCIP64(transaction, signature);\n return serializeTransaction_op(transaction, signature);\n}\nexport const serializers = {\n transaction: serializeTransaction,\n};\nfunction serializeTransactionCIP64(transaction, signature) {\n assertTransactionCIP64(transaction);\n const { chainId, gas, nonce, to, value, maxFeePerGas, maxPriorityFeePerGas, accessList, feeCurrency, data, } = transaction;\n const serializedTransaction = [\n toHex(chainId),\n nonce ? toHex(nonce) : '0x',\n maxPriorityFeePerGas ? toHex(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? toHex(maxFeePerGas) : '0x',\n gas ? toHex(gas) : '0x',\n to ?? '0x',\n value ? toHex(value) : '0x',\n data ?? '0x',\n serializeAccessList(accessList),\n feeCurrency,\n ...toYParitySignatureArray(transaction, signature),\n ];\n return concatHex([\n '0x7b',\n toRlp(serializedTransaction),\n ]);\n}\n// maxFeePerGas must be less than maxUint256\nconst MAX_MAX_FEE_PER_GAS = maxUint256;\nexport function assertTransactionCIP42(transaction) {\n const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to, feeCurrency, gatewayFee, gatewayFeeRecipient, } = transaction;\n if (chainId <= 0)\n throw new InvalidChainIdError({ chainId });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (gasPrice)\n throw new BaseError('`gasPrice` is not a valid CIP-42 Transaction attribute.');\n if (isPresent(maxFeePerGas) && maxFeePerGas > MAX_MAX_FEE_PER_GAS)\n throw new FeeCapTooHighError({ maxFeePerGas });\n if (isPresent(maxPriorityFeePerGas) &&\n isPresent(maxFeePerGas) &&\n maxPriorityFeePerGas > maxFeePerGas)\n throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas });\n if ((isPresent(gatewayFee) && isEmpty(gatewayFeeRecipient)) ||\n (isPresent(gatewayFeeRecipient) && isEmpty(gatewayFee))) {\n throw new BaseError('`gatewayFee` and `gatewayFeeRecipient` must be provided together.');\n }\n if (isPresent(feeCurrency) && !isAddress(feeCurrency)) {\n throw new BaseError('`feeCurrency` MUST be a token address for CIP-42 transactions.');\n }\n if (isPresent(gatewayFeeRecipient) && !isAddress(gatewayFeeRecipient)) {\n throw new InvalidAddressError(gatewayFeeRecipient);\n }\n if (isEmpty(feeCurrency) && isEmpty(gatewayFeeRecipient)) {\n throw new BaseError('Either `feeCurrency` or `gatewayFeeRecipient` must be provided for CIP-42 transactions.');\n }\n}\nexport function assertTransactionCIP64(transaction) {\n const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to, feeCurrency, } = transaction;\n if (chainId <= 0)\n throw new InvalidChainIdError({ chainId });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (gasPrice)\n throw new BaseError('`gasPrice` is not a valid CIP-64 Transaction attribute.');\n if (isPresent(maxFeePerGas) && maxFeePerGas > MAX_MAX_FEE_PER_GAS)\n throw new FeeCapTooHighError({ maxFeePerGas });\n if (isPresent(maxPriorityFeePerGas) &&\n isPresent(maxFeePerGas) &&\n maxPriorityFeePerGas > maxFeePerGas)\n throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas });\n if (isPresent(feeCurrency) && !isAddress(feeCurrency)) {\n throw new BaseError('`feeCurrency` MUST be a token address for CIP-64 transactions.');\n }\n if (isEmpty(feeCurrency)) {\n throw new BaseError('`feeCurrency` must be provided for CIP-64 transactions.');\n }\n}\n//# sourceMappingURL=serializers.js.map","import { contracts } from '../op-stack/contracts.js';\nimport { fees } from './fees.js';\nimport { formatters } from './formatters.js';\nimport { serializers } from './serializers.js';\nexport const chainConfig = {\n blockTime: 1_000,\n contracts,\n formatters,\n serializers,\n fees,\n};\n//# sourceMappingURL=chainConfig.js.map","import { chainConfig } from '../../celo/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nexport const celo = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 42_220,\n name: 'Celo',\n nativeCurrency: {\n decimals: 18,\n name: 'CELO',\n symbol: 'CELO',\n },\n rpcUrls: {\n default: { http: ['https://forno.celo.org'] },\n },\n blockExplorers: {\n default: {\n name: 'Celo Explorer',\n url: 'https://celoscan.io',\n apiUrl: 'https://api.celoscan.io/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 13112599,\n },\n },\n testnet: false,\n});\n//# sourceMappingURL=celo.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const mainnet = /*#__PURE__*/ defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockTime: 12_000,\n rpcUrls: {\n default: {\n http: ['https://eth.merkle.io'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Etherscan',\n url: 'https://etherscan.io',\n apiUrl: 'https://api.etherscan.io/api',\n },\n },\n contracts: {\n ensUniversalResolver: {\n address: '0xeeeeeeee14d718c2b47d9923deab1335e144eeee',\n blockCreated: 23_085_558,\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 14_353_601,\n },\n },\n});\n//# sourceMappingURL=mainnet.js.map","import { chainConfig } from '../../op-stack/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nconst sourceId = 1; // mainnet\nexport const optimism = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 10,\n name: 'OP Mainnet',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://mainnet.optimism.io'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Optimism Explorer',\n url: 'https://optimistic.etherscan.io',\n apiUrl: 'https://api-optimistic.etherscan.io/api',\n },\n },\n contracts: {\n ...chainConfig.contracts,\n disputeGameFactory: {\n [sourceId]: {\n address: '0xe5965Ab5962eDc7477C8520243A95517CD252fA9',\n },\n },\n l2OutputOracle: {\n [sourceId]: {\n address: '0xdfe97868233d1aa22e815a266982f2cf17685a27',\n },\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 4286263,\n },\n portal: {\n [sourceId]: {\n address: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed',\n },\n },\n l1StandardBridge: {\n [sourceId]: {\n address: '0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1',\n },\n },\n },\n sourceId,\n});\n//# sourceMappingURL=optimism.js.map","import { chainConfig } from '../../op-stack/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nconst sourceId = 11_155_111; // sepolia\nexport const optimismSepolia = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 11155420,\n name: 'OP Sepolia',\n nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://sepolia.optimism.io'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Blockscout',\n url: 'https://optimism-sepolia.blockscout.com',\n apiUrl: 'https://optimism-sepolia.blockscout.com/api',\n },\n },\n contracts: {\n ...chainConfig.contracts,\n disputeGameFactory: {\n [sourceId]: {\n address: '0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1',\n },\n },\n l2OutputOracle: {\n [sourceId]: {\n address: '0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F',\n },\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 1620204,\n },\n portal: {\n [sourceId]: {\n address: '0x16Fc5058F25648194471939df75CF27A2fdC48BC',\n },\n },\n l1StandardBridge: {\n [sourceId]: {\n address: '0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1',\n },\n },\n },\n testnet: true,\n sourceId,\n});\n//# sourceMappingURL=optimismSepolia.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const polygon = /*#__PURE__*/ defineChain({\n id: 137,\n name: 'Polygon',\n nativeCurrency: { name: 'POL', symbol: 'POL', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://polygon-rpc.com'],\n },\n },\n blockExplorers: {\n default: {\n name: 'PolygonScan',\n url: 'https://polygonscan.com',\n apiUrl: 'https://api.polygonscan.com/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 25770160,\n },\n },\n});\n//# sourceMappingURL=polygon.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const sepolia = /*#__PURE__*/ defineChain({\n id: 11_155_111,\n name: 'Sepolia',\n nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://sepolia.drpc.org'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Etherscan',\n url: 'https://sepolia.etherscan.io',\n apiUrl: 'https://api-sepolia.etherscan.io/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 751532,\n },\n ensUniversalResolver: {\n address: '0xeeeeeeee14d718c2b47d9923deab1335e144eeee',\n blockCreated: 8_928_790,\n },\n },\n testnet: true,\n});\n//# sourceMappingURL=sepolia.js.map","import { defineChain } from 'viem';\nimport { anvil as viem_anvil } from 'viem/chains';\nimport * as chains from './internal/_generated/chains.js';\nexport * from './internal/_generated/chains.js';\nexport const all = [\n chains.base,\n ...Object.values(chains).filter((c) => c.id !== chains.base.id),\n];\nexport const anvil = viem_anvil;\n/** Additional Anvil environment, purposed for interop. */\nexport const anvil2 = /*#__PURE__*/ defineChain({\n ...anvil,\n id: 31_338,\n});\n/** Additional Anvil environment, purposed for interop. */\nexport const anvil3 = /*#__PURE__*/ defineChain({\n ...anvil,\n id: 31_339,\n});\n//# sourceMappingURL=Chains.js.map","// eslint-disable-next-line jsdoc/require-jsdoc\nexport function from(response, options = {}) {\n const { request } = options;\n return {\n ...response,\n id: response.id ?? request?.id,\n jsonrpc: response.jsonrpc ?? request.jsonrpc,\n };\n}\n/**\n * A type-safe interface to parse a JSON-RPC response object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#response_object), and extract the result.\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * // 1. Create a request store.\n * const store = RpcRequest.createStore()\n *\n * // 2. Get a request object.\n * const request = store.prepare({\n * method: 'eth_getBlockByNumber',\n * params: ['0x1', false],\n * })\n *\n * // 3. Send the JSON-RPC request via HTTP.\n * const block = await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(request),\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * method: 'POST',\n * })\n * .then((response) => response.json())\n * // 4. Parse the JSON-RPC response into a type-safe result. // [!code focus]\n * .then((response) => RpcResponse.parse(response, { request })) // [!code focus]\n *\n * block // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::tip\n *\n * If you don't need the return type, you can omit the options entirely.\n *\n * ```ts twoslash\n * // @noErrors\n * import { RpcResponse } from 'ox'\n *\n * const block = await fetch('https://1.rpc.thirdweb.com', {})\n * .then((response) => response.json())\n * .then((response) => RpcResponse.parse(response, { request })) // [!code --]\n * .then(RpcResponse.parse) // [!code ++]\n * ```\n * :::\n *\n * @example\n * ### Raw Mode\n *\n * If `raw` is `true`, the response will be returned as an object with `result` and `error` properties instead of returning the `result` directly and throwing errors.\n *\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * const store = RpcRequest.createStore()\n *\n * const request = store.prepare({\n * method: 'eth_blockNumber',\n * })\n *\n * const response = RpcResponse.parse({}, {\n * request,\n * raw: true, // [!code hl]\n * })\n *\n * response.result\n * // ^?\n *\n *\n * response.error\n * // ^?\n *\n *\n * ```\n *\n * @param response - Opaque JSON-RPC response object.\n * @param options - Parsing options.\n * @returns Typed JSON-RPC result, or response object (if `raw` is `true`).\n */\nexport function parse(response, options = {}) {\n const { raw = false } = options;\n const response_ = response;\n if (raw)\n return response;\n if (response_.error)\n throw parseError(response_.error);\n return response_.result;\n}\n/**\n * Parses an error into a RPC Error instance.\n *\n * @example\n * ```ts twoslash\n * import { RpcResponse } from 'ox'\n *\n * const error = RpcResponse.parseError({ code: -32000, message: 'unsupported method' })\n *\n * error\n * // ^?\n *\n * ```\n *\n * @param error - Error.\n * @returns RPC Error instance.\n */\nexport function parseError(error) {\n const error_ = error;\n if (error_ instanceof Error && !('code' in error_))\n return new InternalError({\n cause: error_,\n data: error_,\n message: error_.message,\n stack: error_.stack,\n });\n const { code } = error_;\n if (code === InternalError.code)\n return new InternalError(error_);\n if (code === InvalidInputError.code)\n return new InvalidInputError(error_);\n if (code === InvalidParamsError.code)\n return new InvalidParamsError(error_);\n if (code === InvalidRequestError.code)\n return new InvalidRequestError(error_);\n if (code === LimitExceededError.code)\n return new LimitExceededError(error_);\n if (code === MethodNotFoundError.code)\n return new MethodNotFoundError(error_);\n if (code === MethodNotSupportedError.code)\n return new MethodNotSupportedError(error_);\n if (code === ParseError.code)\n return new ParseError(error_);\n if (code === ResourceNotFoundError.code)\n return new ResourceNotFoundError(error_);\n if (code === ResourceUnavailableError.code)\n return new ResourceUnavailableError(error_);\n if (code === TransactionRejectedError.code)\n return new TransactionRejectedError(error_);\n if (code === VersionNotSupportedError.code)\n return new VersionNotSupportedError(error_);\n return new InternalError({\n cause: error_ instanceof Error ? error_ : undefined,\n data: error_,\n message: error_.message,\n stack: error_ instanceof Error ? error_.stack : undefined,\n });\n}\n/** Thrown when a JSON-RPC error has occurred. */\nexport class BaseError extends Error {\n constructor(errorObject) {\n const { cause, code, message, data, stack } = errorObject;\n super(message, { cause });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.BaseError'\n });\n Object.defineProperty(this, \"cause\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"stack\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"data\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.cause = cause;\n this.code = code;\n this.data = data;\n this.stack = stack ?? '';\n }\n}\n/** Thrown when the input to a JSON-RPC method is invalid. */\nexport class InvalidInputError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: InvalidInputError.code,\n data: parameters.data,\n message: parameters.message ?? 'Missing or invalid parameters.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32000\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.InvalidInputError'\n });\n }\n}\nObject.defineProperty(InvalidInputError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32000\n});\n/** Thrown when a JSON-RPC resource is not found. */\nexport class ResourceNotFoundError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: ResourceNotFoundError.code,\n data: parameters.data,\n message: parameters.message ?? 'Requested resource not found.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32001\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.ResourceNotFoundError'\n });\n }\n}\nObject.defineProperty(ResourceNotFoundError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32001\n});\n/** Thrown when a JSON-RPC resource is unavailable. */\nexport class ResourceUnavailableError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: ResourceUnavailableError.code,\n data: parameters.data,\n message: parameters.message ?? 'Requested resource not available.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32002\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.ResourceUnavailableError'\n });\n }\n}\nObject.defineProperty(ResourceUnavailableError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32002\n});\n/** Thrown when a JSON-RPC transaction is rejected. */\nexport class TransactionRejectedError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: TransactionRejectedError.code,\n data: parameters.data,\n message: parameters.message ?? 'Transaction creation failed.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32003\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.TransactionRejectedError'\n });\n }\n}\nObject.defineProperty(TransactionRejectedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32003\n});\n/** Thrown when a JSON-RPC method is not supported. */\nexport class MethodNotSupportedError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: MethodNotSupportedError.code,\n data: parameters.data,\n message: parameters.message ?? 'Method is not implemented.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32004\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.MethodNotSupportedError'\n });\n }\n}\nObject.defineProperty(MethodNotSupportedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32004\n});\n/** Thrown when a rate-limit is exceeded. */\nexport class LimitExceededError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: LimitExceededError.code,\n data: parameters.data,\n message: parameters.message ?? 'Rate limit exceeded.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32005\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.LimitExceededError'\n });\n }\n}\nObject.defineProperty(LimitExceededError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32005\n});\n/** Thrown when a JSON-RPC version is not supported. */\nexport class VersionNotSupportedError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: VersionNotSupportedError.code,\n data: parameters.data,\n message: parameters.message ?? 'JSON-RPC version not supported.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32006\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.VersionNotSupportedError'\n });\n }\n}\nObject.defineProperty(VersionNotSupportedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32006\n});\n/** Thrown when a JSON-RPC request is invalid. */\nexport class InvalidRequestError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: InvalidRequestError.code,\n data: parameters.data,\n message: parameters.message ?? 'Input is not a valid JSON-RPC request.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32600\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.InvalidRequestError'\n });\n }\n}\nObject.defineProperty(InvalidRequestError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32600\n});\n/** Thrown when a JSON-RPC method is not found. */\nexport class MethodNotFoundError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: MethodNotFoundError.code,\n data: parameters.data,\n message: parameters.message ?? 'Method does not exist.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32601\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.MethodNotFoundError'\n });\n }\n}\nObject.defineProperty(MethodNotFoundError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32601\n});\n/** Thrown when the parameters to a JSON-RPC method are invalid. */\nexport class InvalidParamsError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: InvalidParamsError.code,\n data: parameters.data,\n message: parameters.message ?? 'Invalid method parameters.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32602\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.InvalidParamsError'\n });\n }\n}\nObject.defineProperty(InvalidParamsError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32602\n});\n/** Thrown when an internal JSON-RPC error has occurred. */\nexport class InternalError extends BaseError {\n constructor(parameters = {}) {\n super({\n cause: parameters.cause,\n code: InternalError.code,\n data: parameters.data,\n message: parameters.message ?? 'Internal JSON-RPC error.',\n stack: parameters.stack,\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32603\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.InternalError'\n });\n }\n}\nObject.defineProperty(InternalError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32603\n});\n/** Thrown when a JSON-RPC response is invalid. */\nexport class ParseError extends BaseError {\n constructor(parameters = {}) {\n super({\n code: ParseError.code,\n data: parameters.data,\n message: parameters.message ?? 'Failed to parse JSON-RPC response.',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32700\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'RpcResponse.ParseError'\n });\n }\n}\nObject.defineProperty(ParseError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32700\n});\n//# sourceMappingURL=RpcResponse.js.map","import { EventEmitter } from 'eventemitter3';\nimport * as Errors from './Errors.js';\nimport * as RpcResponse from './RpcResponse.js';\nexport class ProviderRpcError extends Error {\n constructor(code, message) {\n super(message);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ProviderRpcError'\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"details\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.code = code;\n this.details = message;\n }\n}\n/** The user rejected the request. */\nexport class UserRejectedRequestError extends ProviderRpcError {\n constructor({ message = 'The user rejected the request.', } = {}) {\n super(4001, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4001\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UserRejectedRequestError'\n });\n }\n}\nObject.defineProperty(UserRejectedRequestError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4001\n});\n/** The requested method and/or account has not been authorized by the user. */\nexport class UnauthorizedError extends ProviderRpcError {\n constructor({ message = 'The requested method and/or account has not been authorized by the user.', } = {}) {\n super(4100, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4100\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UnauthorizedError'\n });\n }\n}\nObject.defineProperty(UnauthorizedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4100\n});\n/** The provider does not support the requested method. */\nexport class UnsupportedMethodError extends ProviderRpcError {\n constructor({ message = 'The provider does not support the requested method.', } = {}) {\n super(4200, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4200\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UnsupportedMethodError'\n });\n }\n}\nObject.defineProperty(UnsupportedMethodError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4200\n});\n/** The provider is disconnected from all chains. */\nexport class DisconnectedError extends ProviderRpcError {\n constructor({ message = 'The provider is disconnected from all chains.', } = {}) {\n super(4900, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4900\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.DisconnectedError'\n });\n }\n}\nObject.defineProperty(DisconnectedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4900\n});\n/** The provider is not connected to the requested chain. */\nexport class ChainDisconnectedError extends ProviderRpcError {\n constructor({ message = 'The provider is not connected to the requested chain.', } = {}) {\n super(4901, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4901\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.ChainDisconnectedError'\n });\n }\n}\nObject.defineProperty(ChainDisconnectedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4901\n});\n/** An error occurred when attempting to switch chain. */\nexport class SwitchChainError extends ProviderRpcError {\n constructor({ message = 'An error occurred when attempting to switch chain.', } = {}) {\n super(4902, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4902\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.SwitchChainError'\n });\n }\n}\nObject.defineProperty(SwitchChainError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4902\n});\n/** This Wallet does not support a capability that was not marked as optional. */\nexport class UnsupportedNonOptionalCapabilityError extends ProviderRpcError {\n constructor({ message = 'This Wallet does not support a capability that was not marked as optional.', } = {}) {\n super(5700, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5700\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UnsupportedNonOptionalCapabilityError'\n });\n }\n}\nObject.defineProperty(UnsupportedNonOptionalCapabilityError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5700\n});\n/** This Wallet does not support the requested chain ID. */\nexport class UnsupportedChainIdError extends ProviderRpcError {\n constructor({ message = 'This Wallet does not support the requested chain ID.', } = {}) {\n super(5710, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5710\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UnsupportedChainIdError'\n });\n }\n}\nObject.defineProperty(UnsupportedChainIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5710\n});\n/** There is already a bundle submitted with this ID. */\nexport class DuplicateIdError extends ProviderRpcError {\n constructor({ message = 'There is already a bundle submitted with this ID.', } = {}) {\n super(5720, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5720\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.DuplicateIdError'\n });\n }\n}\nObject.defineProperty(DuplicateIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5720\n});\n/** This bundle id is unknown / has not been submitted. */\nexport class UnknownBundleIdError extends ProviderRpcError {\n constructor({ message = 'This bundle id is unknown / has not been submitted.', } = {}) {\n super(5730, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5730\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.UnknownBundleIdError'\n });\n }\n}\nObject.defineProperty(UnknownBundleIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5730\n});\n/** The call bundle is too large for the Wallet to process. */\nexport class BundleTooLargeError extends ProviderRpcError {\n constructor({ message = 'The call bundle is too large for the Wallet to process.', } = {}) {\n super(5740, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5740\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.BundleTooLargeError'\n });\n }\n}\nObject.defineProperty(BundleTooLargeError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5740\n});\n/** The Wallet can support atomicity after an upgrade, but the user rejected the upgrade. */\nexport class AtomicReadyWalletRejectedUpgradeError extends ProviderRpcError {\n constructor({ message = 'The Wallet can support atomicity after an upgrade, but the user rejected the upgrade.', } = {}) {\n super(5750, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5750\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.AtomicReadyWalletRejectedUpgradeError'\n });\n }\n}\nObject.defineProperty(AtomicReadyWalletRejectedUpgradeError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5750\n});\n/** The wallet does not support atomic execution but the request requires it. */\nexport class AtomicityNotSupportedError extends ProviderRpcError {\n constructor({ message = 'The wallet does not support atomic execution but the request requires it.', } = {}) {\n super(5760, message);\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5760\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.AtomicityNotSupportedError'\n });\n }\n}\nObject.defineProperty(AtomicityNotSupportedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5760\n});\n/**\n * Creates an EIP-1193 flavored event emitter to be injected onto a Provider.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Provider, RpcRequest, RpcResponse } from 'ox' // [!code focus]\n *\n * // 1. Instantiate a Provider Emitter. // [!code focus]\n * const emitter = Provider.createEmitter() // [!code focus]\n *\n * const store = RpcRequest.createStore()\n *\n * const provider = Provider.from({\n * // 2. Pass the Emitter to the Provider. // [!code focus]\n * ...emitter, // [!code focus]\n * async request(args) {\n * return await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(store.prepare(args)),\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * })\n * .then((res) => res.json())\n * .then(RpcResponse.parse)\n * },\n * })\n *\n * // 3. Emit Provider Events. // [!code focus]\n * emitter.emit('accountsChanged', ['0x...']) // [!code focus]\n * ```\n *\n * @returns An event emitter.\n */\nexport function createEmitter() {\n const emitter = new EventEmitter();\n return {\n get eventNames() {\n return emitter.eventNames.bind(emitter);\n },\n get listenerCount() {\n return emitter.listenerCount.bind(emitter);\n },\n get listeners() {\n return emitter.listeners.bind(emitter);\n },\n addListener: emitter.addListener.bind(emitter),\n emit: emitter.emit.bind(emitter),\n off: emitter.off.bind(emitter),\n on: emitter.on.bind(emitter),\n once: emitter.once.bind(emitter),\n removeAllListeners: emitter.removeAllListeners.bind(emitter),\n removeListener: emitter.removeListener.bind(emitter),\n };\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function from(provider, options = {}) {\n const { includeEvents = true } = options;\n if (!provider)\n throw new IsUndefinedError();\n return {\n ...(includeEvents\n ? {\n on: provider.on?.bind(provider),\n removeListener: provider.removeListener?.bind(provider),\n }\n : {}),\n async request(args) {\n try {\n const result = await provider.request(args);\n if (result &&\n typeof result === 'object' &&\n 'jsonrpc' in result)\n return RpcResponse.parse(result);\n return result;\n }\n catch (error) {\n throw parseError(error);\n }\n },\n };\n}\n/**\n * Parses an error into a Provider error instance.\n *\n * @example\n * ```ts twoslash\n * import { Provider } from 'ox'\n *\n * const error = Provider.parseError({ code: 4200, message: 'foo' })\n *\n * error\n * // ^?\n *\n * ```\n *\n * @param error - The error object to parse.\n * @returns An error instance.\n */\nexport function parseError(error) {\n const error_ = RpcResponse.parseError(error);\n if (error_ instanceof RpcResponse.InternalError) {\n if (!error_.data)\n return error_;\n const { code } = error_.data;\n if (code === DisconnectedError.code)\n return new DisconnectedError(error_);\n if (code === ChainDisconnectedError.code)\n return new ChainDisconnectedError(error_);\n if (code === UserRejectedRequestError.code)\n return new UserRejectedRequestError(error_);\n if (code === UnauthorizedError.code)\n return new UnauthorizedError(error_);\n if (code === UnsupportedMethodError.code)\n return new UnsupportedMethodError(error_);\n if (code === SwitchChainError.code)\n return new SwitchChainError(error_);\n if (code === AtomicReadyWalletRejectedUpgradeError.code)\n return new AtomicReadyWalletRejectedUpgradeError(error_);\n if (code === AtomicityNotSupportedError.code)\n return new AtomicityNotSupportedError(error_);\n if (code === BundleTooLargeError.code)\n return new BundleTooLargeError(error_);\n if (code === UnknownBundleIdError.code)\n return new UnknownBundleIdError(error_);\n if (code === DuplicateIdError.code)\n return new DuplicateIdError(error_);\n if (code === UnsupportedChainIdError.code)\n return new UnsupportedChainIdError(error_);\n if (code === UnsupportedNonOptionalCapabilityError.code)\n return new UnsupportedNonOptionalCapabilityError(error_);\n }\n return error_;\n}\n/** Thrown when the provider is undefined. */\nexport class IsUndefinedError extends Errors.BaseError {\n constructor() {\n super('`provider` is undefined.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Provider.IsUndefinedError'\n });\n }\n}\n//# sourceMappingURL=Provider.js.map","export const supported = () => 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in IntersectionObserverEntry.prototype &&\n 'isVisible' in IntersectionObserverEntry.prototype;\n//# sourceMappingURL=intersectionObserver.js.map","export function create(options = {}) {\n const { prefix = '[Porto]' } = options;\n const memo = new Set();\n return {\n error: createLogFn(console.error, { prefix }),\n errorOnce: createLogFn(console.error, { memo, prefix }),\n log: createLogFn(console.log, { prefix }),\n logOnce: createLogFn(console.log, { memo, prefix }),\n warn: createLogFn(console.warn, { prefix }),\n warnOnce: createLogFn(console.warn, { memo, prefix }),\n };\n}\nexport const logger = create();\nfunction createLogFn(fn, options = {}) {\n const { memo, prefix } = options;\n return (...messages) => {\n const message = messages.join(' ');\n if (memo?.has(message))\n return;\n memo?.add(message);\n fn(`${prefix} ${message}`);\n };\n}\n//# sourceMappingURL=logger.js.map","export function isSafari() {\n const ua = navigator.userAgent.toLowerCase();\n return ua.includes('safari') && !ua.includes('chrome');\n}\nexport function isFirefox() {\n const ua = navigator.userAgent.toLowerCase();\n return ((ua.includes('firefox') || ua.includes('fxios')) &&\n !ua.includes('seamonkey'));\n}\nexport function isMobile() {\n if (window.navigator?.userAgentData?.mobile)\n return true;\n return (\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Browser_detection_using_the_user_agent#alternatives_to_ua_sniffing\n navigator.maxTouchPoints > 1 ||\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(navigator.userAgent) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(navigator.userAgent.slice(0, 4)));\n}\n//# sourceMappingURL=userAgent.js.map","/** @internal */\nexport function withResolvers() {\n let resolve = () => undefined;\n let reject = () => undefined;\n const promise = new Promise((resolve_, reject_) => {\n resolve = resolve_;\n reject = reject_;\n });\n return { promise, reject, resolve };\n}\n//# sourceMappingURL=promise.js.map","/**\n * Normalizes a value into a structured-clone compatible format.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/structuredClone\n */\nexport function normalizeValue(value) {\n if (Array.isArray(value))\n return value.map(normalizeValue);\n if (typeof value === 'function')\n return undefined;\n if (typeof value !== 'object' || value === null)\n return value;\n if (Object.getPrototypeOf(value) !== Object.prototype)\n try {\n return structuredClone(value);\n }\n catch {\n return undefined;\n }\n const normalized = {};\n for (const [k, v] of Object.entries(value))\n normalized[k] = normalizeValue(v);\n return normalized;\n}\n/**\n * Returns a new array containing only one copy of each element in the original\n * list transformed by a function.\n *\n * @param data - Array.\n * @param fn - Extracts a value to be used to compare elements.\n */\nexport function uniqBy(data, fn) {\n const result = [];\n const seen = new Set();\n for (const item of data) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return result;\n}\nexport function uuidv4() {\n if (typeof globalThis !== 'undefined' && 'crypto' in globalThis)\n return globalThis.crypto.randomUUID();\n return crypto.randomUUID();\n}\n//# sourceMappingURL=utils.js.map","import * as Json from 'ox/Json';\nimport * as promise from './internal/promise.js';\nimport * as Utils from './internal/utils.js';\n/**\n * Instantiates a messenger.\n *\n * @param messenger - Messenger.\n * @returns Instantiated messenger.\n */\nexport function from(messenger) {\n return messenger;\n}\n/**\n * Instantiates a messenger from a window instance.\n *\n * @param w - Window.\n * @param options - Options.\n * @returns Instantiated messenger.\n */\nexport function fromWindow(w, options = {}) {\n const { targetOrigin } = options;\n const listeners = new Map();\n return from({\n destroy() {\n for (const listener of listeners.values()) {\n w.removeEventListener('message', listener);\n }\n },\n on(topic, listener, id) {\n function handler(event) {\n if (event.data.topic !== topic)\n return;\n if (id && event.data.id !== id)\n return;\n if (targetOrigin && event.origin !== targetOrigin)\n return;\n listener(event.data.payload, event);\n }\n w.addEventListener('message', handler);\n listeners.set(topic, handler);\n return () => w.removeEventListener('message', handler);\n },\n async send(topic, payload, target) {\n const id = Utils.uuidv4();\n w.postMessage(Utils.normalizeValue({ id, payload, topic }), target ?? targetOrigin ?? '*');\n return { id, payload, topic };\n },\n async sendAsync(topic, payload, target) {\n const { id } = await this.send(topic, payload, target);\n return new Promise((resolve) => this.on(topic, resolve, id));\n },\n });\n}\n/**\n * Bridges two messengers for cross-window (e.g. parent to iframe) communication.\n *\n * @param parameters - Parameters.\n * @returns Instantiated messenger.\n */\nexport function bridge(parameters) {\n const { from: from_, to, waitForReady = false } = parameters;\n let pending = false;\n const ready = promise.withResolvers();\n from_.on('ready', ready.resolve);\n const messenger = from({\n destroy() {\n from_.destroy();\n to.destroy();\n if (pending)\n ready.reject();\n },\n on(topic, listener, id) {\n return from_.on(topic, listener, id);\n },\n async send(topic, payload) {\n pending = true;\n if (waitForReady)\n await ready.promise.finally(() => (pending = false));\n return to.send(topic, payload);\n },\n async sendAsync(topic, payload) {\n pending = true;\n if (waitForReady)\n await ready.promise.finally(() => (pending = false));\n return to.sendAsync(topic, payload);\n },\n });\n return {\n ...messenger,\n ready(options) {\n void messenger.send('ready', options);\n },\n waitForReady() {\n return ready.promise;\n },\n };\n}\nexport function noop() {\n return {\n destroy() { },\n on() {\n return () => { };\n },\n ready() { },\n send() {\n return Promise.resolve(undefined);\n },\n sendAsync() {\n return Promise.resolve(undefined);\n },\n waitForReady() {\n return Promise.resolve(undefined);\n },\n };\n}\n/**\n * Creates a CLI relay messenger that sends messages via fetch to a relay URL\n * and receives events via server-sent events.\n *\n * @param options - Options.\n * @returns Local relay messenger.\n */\nexport function cliRelay(options) {\n const { relayUrl } = options;\n let eventSource = null;\n const listenerSets = new Map();\n function connect() {\n if (!relayUrl || eventSource)\n return;\n eventSource = new EventSource(relayUrl);\n eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n if (!data.topic)\n return;\n if (!data.payload)\n return;\n const listeners = listenerSets.get(data.topic);\n if (!listeners)\n return;\n for (const listener of listeners)\n listener(data.payload, { data, origin: relayUrl });\n }\n catch (error) {\n console.error('Error parsing SSE message:', error);\n }\n };\n eventSource.onerror = (error) => {\n console.error('SSE connection error:', error);\n eventSource?.close();\n eventSource = null;\n // attempt to reconnect in 1s\n setTimeout(connect, 1000);\n };\n }\n connect();\n async function request(topic, payload) {\n const id = Utils.uuidv4();\n const data = { id, payload, topic };\n const response = await fetch(relayUrl, {\n body: Json.stringify(data),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n return { id, payload, response, topic };\n }\n return {\n destroy() {\n eventSource?.close();\n eventSource = null;\n listenerSets.clear();\n },\n on(topic, listener) {\n if (!listenerSets.has(topic))\n listenerSets.set(topic, new Set());\n listenerSets.get(topic).add(listener);\n return () => {\n const listeners = listenerSets.get(topic);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (listeners.size === 0)\n listenerSets.delete(topic);\n };\n },\n async ready(options) {\n await new Promise((resolve) => setTimeout(resolve, 32));\n void this.send('ready', options);\n },\n async send(topic, payload) {\n const { id } = await request(topic, payload);\n return { id, payload, topic };\n },\n async sendAsync(topic, payload) {\n const { response } = await request(topic, payload);\n if (!response.ok)\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json'))\n return await response.json();\n return undefined;\n },\n };\n}\n//# sourceMappingURL=Messenger.js.map","import * as Provider from 'ox/Provider';\nimport * as IO from './internal/intersectionObserver.js';\nimport { logger } from './internal/logger.js';\nimport * as UserAgent from './internal/userAgent.js';\nimport * as Messenger from './Messenger.js';\nexport const hostUrls = {\n local: 'http://localhost:5175/dialog/',\n prod: 'https://id.porto.sh/dialog',\n stg: 'https://stg.id.porto.sh/dialog',\n};\n/**\n * Instantiates a dialog.\n *\n * @param dialog - Dialog.\n * @returns Instantiated dialog.\n */\nexport function from(dialog) {\n return dialog;\n}\n/**\n * Instantiates an iframe dialog.\n *\n * @returns iframe dialog.\n */\nexport function iframe(options = {}) {\n const { skipProtocolCheck, skipUnsupported } = options;\n // Safari does not support WebAuthn credential creation in iframes.\n // Fall back to popup dialog.\n // Tracking: https://github.com/WebKit/standards-positions/issues/304\n const includesUnsupported = (requests) => !skipUnsupported &&\n UserAgent.isSafari() &&\n requests?.some((x) => ['wallet_connect', 'eth_requestAccounts'].includes(x.method));\n if (typeof window === 'undefined')\n return noop();\n return from({\n name: 'iframe',\n setup(parameters) {\n const { host, internal, theme, themeController } = parameters;\n const { store } = internal;\n const fallback = popup().setup(parameters);\n let open = false;\n const hostUrl = new URL(host);\n const root = document.createElement('dialog');\n root.dataset.porto = '';\n root.setAttribute('role', 'dialog');\n root.setAttribute('aria-closed', 'true');\n root.setAttribute('aria-label', 'Porto Wallet');\n root.setAttribute('hidden', 'until-found');\n Object.assign(root.style, {\n background: 'transparent',\n border: '0',\n outline: '0',\n padding: '0',\n position: 'fixed',\n });\n document.body.appendChild(root);\n const iframe = document.createElement('iframe');\n iframe.setAttribute('data-testid', 'porto');\n const iframeAllow = [\n `publickey-credentials-get ${hostUrl.origin}`,\n `publickey-credentials-create ${hostUrl.origin}`,\n ];\n if (!UserAgent.isFirefox())\n iframeAllow.push('clipboard-write');\n iframe.setAttribute('allow', iframeAllow.join('; '));\n iframe.setAttribute('tabindex', '0');\n iframe.setAttribute('sandbox', 'allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox');\n iframe.setAttribute('src', getDialogUrl(host));\n iframe.setAttribute('title', 'Porto');\n Object.assign(iframe.style, {\n backgroundColor: 'transparent',\n border: '0',\n colorScheme: 'light dark',\n height: '100%',\n left: '0',\n position: 'fixed',\n top: '0',\n width: '100%',\n });\n const style = document.createElement('style');\n style.innerHTML = `\n dialog[data-porto]::backdrop {\n background: transparent!important;\n }\n `;\n root.appendChild(style);\n root.appendChild(iframe);\n const messenger = Messenger.bridge({\n from: Messenger.fromWindow(window, { targetOrigin: hostUrl.origin }),\n to: Messenger.fromWindow(iframe.contentWindow, {\n targetOrigin: hostUrl.origin,\n }),\n waitForReady: true,\n });\n themeController?._setup(messenger, true);\n const drawerModeQuery = window.matchMedia('(max-width: 460px)');\n const onDrawerModeChange = () => {\n messenger.send('__internal', {\n type: 'resize',\n // 460 = drawer mode, 461 = floating mode\n width: drawerModeQuery.matches ? 460 : 461,\n });\n };\n drawerModeQuery.addEventListener('change', onDrawerModeChange);\n messenger.on('ready', (options) => {\n const chainIds = parameters.internal.store.getState().chainIds;\n // Derive the compatible chain IDs between the dialog and the application.\n let compatibleChainIds = chainIds.filter((id) => options.chainIds.includes(id));\n // If the consumer has no compatible chain IDs with the dialog,\n // fall back to the dialog's chain IDs.\n if (compatibleChainIds.length === 0)\n compatibleChainIds = options.chainIds;\n store.setState((x) => ({\n ...x,\n chainIds: compatibleChainIds,\n }));\n messenger.send('__internal', {\n chainIds: compatibleChainIds,\n mode: 'iframe',\n referrer: getReferrer(),\n theme,\n type: 'init',\n });\n onDrawerModeChange();\n });\n messenger.on('rpc-response', (response) => {\n if (includesUnsupported([response._request])) {\n // reload iframe to rehydrate storage state if an\n // unsupported request routed via another renderer.\n const src = iframe.src;\n iframe.src = src;\n }\n handleResponse(store, response);\n });\n messenger.on('__internal', (payload) => {\n if (payload.type === 'switch' && payload.mode === 'popup') {\n fallback.open();\n fallback.syncRequests(store.getState().requestQueue);\n }\n });\n let bodyStyle = null;\n // store the opening element to restore the focus\n let opener = null;\n const onBlur = () => handleBlur(store);\n const onEscape = (event) => {\n if (event.key === 'Escape')\n handleBlur(store);\n };\n // 1password extension adds `inert` attribute to `dialog` and inserts\n // itself (`<com-1password-notification />`) there rendering itself unusable:\n // watch for `inert` on `dialog` and remove it\n const inertObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'attributes')\n continue;\n const name = mutation.attributeName;\n if (!name)\n continue;\n if (name !== 'inert')\n continue;\n root.removeAttribute(name);\n }\n });\n inertObserver.observe(root, {\n attributeOldValue: true,\n attributes: true,\n });\n // dialog/page interactivity (no visibility change)\n let dialogActive = false;\n const activatePage = () => {\n if (!dialogActive)\n return;\n dialogActive = false;\n root.removeEventListener('click', onBlur);\n document.removeEventListener('keydown', onEscape);\n root.style.pointerEvents = 'none';\n opener?.focus();\n opener = null;\n Object.assign(document.body.style, bodyStyle ?? '');\n // firefox: explicitly restore/clear `overflow` directly\n document.body.style.overflow = bodyStyle?.overflow ?? '';\n };\n const activateDialog = () => {\n if (dialogActive)\n return;\n dialogActive = true;\n root.addEventListener('click', onBlur);\n document.addEventListener('keydown', onEscape);\n iframe.focus();\n root.style.pointerEvents = 'auto';\n bodyStyle = Object.assign({}, document.body.style);\n document.body.style.overflow = 'hidden';\n };\n // dialog visibility\n let visible = false;\n const showDialog = () => {\n if (visible)\n return;\n visible = true;\n if (document.activeElement instanceof HTMLElement)\n opener = document.activeElement;\n root.removeAttribute('hidden');\n root.removeAttribute('aria-closed');\n root.showModal();\n };\n const hideDialog = () => {\n if (!visible)\n return;\n visible = false;\n root.setAttribute('hidden', 'true');\n root.setAttribute('aria-closed', 'true');\n root.close();\n // 1password extension sometimes adds `inert` attribute to `dialog`\n // siblings and does not clean up remove when `dialog` closes\n // (after `<com-1password-notification />` closes)\n for (const sibling of root.parentNode\n ? Array.from(root.parentNode.children)\n : []) {\n if (sibling === root)\n continue;\n if (!sibling.hasAttribute('inert'))\n continue;\n sibling.removeAttribute('inert');\n }\n };\n return {\n close() {\n fallback.close();\n open = false;\n messenger.send('__internal', {\n mode: 'iframe',\n referrer: getReferrer(),\n type: 'init',\n });\n hideDialog();\n activatePage();\n },\n destroy() {\n fallback.close();\n open = false;\n activatePage();\n hideDialog();\n fallback.destroy();\n messenger.destroy();\n root.remove();\n inertObserver.disconnect();\n drawerModeQuery.removeEventListener('change', onDrawerModeChange);\n },\n open() {\n if (open)\n return;\n open = true;\n showDialog();\n activateDialog();\n messenger.send('__internal', {\n mode: 'iframe',\n referrer: getReferrer(),\n type: 'init',\n });\n },\n async secure() {\n const { trustedHosts } = await messenger.waitForReady();\n const secureProtocol = (() => {\n if (skipProtocolCheck)\n return true;\n const secure = window.location.protocol.startsWith('https');\n if (!secure)\n logger.warnOnce('Detected insecure protocol (HTTP).', `\\n\\nThe Porto iframe is not supported on HTTP origins (${window.location.origin})`, 'due to lack of WebAuthn support.', 'See https://porto.sh/sdk#secure-origins-https for more information.');\n return secure;\n })();\n const intersectionObserverSupported = IO.supported();\n const trustedHost = Boolean(trustedHosts?.includes(window.location.hostname));\n const secureFrame = Boolean(intersectionObserverSupported || trustedHost);\n if (!secureFrame)\n logger.warnOnce([\n `Warning: Browser does not support IntersectionObserver v2 or host \"${hostUrl.hostname}\" is not trusted by Porto.`,\n 'This may result in the dialog falling back to a popup.',\n '',\n `Add \"${hostUrl.hostname}\" to the trusted hosts list to enable iframe dialog: https://github.com/ithacaxyz/porto/edit/main/src/trusted-hosts.ts`,\n ].join('\\n'));\n return {\n frame: secureFrame,\n host: trustedHost,\n protocol: secureProtocol,\n };\n },\n async syncRequests(requests) {\n const { methodPolicies } = await messenger.waitForReady();\n const secure = await this.secure();\n const headless = requests?.every((request) => methodPolicies?.find((policy) => policy.method === request.request.method)?.modes?.headless === true);\n const unsupported = includesUnsupported(requests.map((x) => x.request));\n if (!headless && (unsupported || !secure.protocol || !secure.frame))\n fallback.syncRequests(requests);\n else {\n const requiresConfirm = requests.some((x) => requiresConfirmation(x.request, {\n methodPolicies,\n targetOrigin: hostUrl.origin,\n }));\n if (!open && requiresConfirm)\n this.open();\n messenger.send('rpc-requests', requests);\n }\n },\n };\n },\n supportsHeadless: true,\n });\n}\n/**\n * Instantiates a popup dialog.\n *\n * @returns Popup dialog.\n */\nexport function popup(options = {}) {\n if (typeof window === 'undefined')\n return noop();\n const { type = 'auto', size = defaultSize } = options;\n return from({\n name: 'popup',\n setup(parameters) {\n const { host, internal, themeController } = parameters;\n const { store } = internal;\n const hostUrl = new URL(host);\n let popup = null;\n const resolvedType = type === 'page' || (type === 'auto' && UserAgent.isMobile())\n ? 'page'\n : 'popup';\n function onBlur() {\n if (popup)\n handleBlur(store);\n }\n const offDetectClosed = (() => {\n const timer = setInterval(() => {\n if (popup?.closed)\n handleBlur(store);\n }, 100);\n return () => clearInterval(timer);\n })();\n let messenger;\n themeController?._setup(null, true);\n return {\n close() {\n if (!popup)\n return;\n popup.close();\n popup = null;\n },\n destroy() {\n this.close();\n window.removeEventListener('focus', onBlur);\n messenger?.destroy();\n offDetectClosed();\n },\n open() {\n if (resolvedType === 'popup') {\n const left = (window.innerWidth - size.width) / 2 + window.screenX;\n const top = window.screenY + 100;\n popup = window.open(getDialogUrl(host), '_blank', `width=${size.width},height=${size.height},left=${left},top=${top}`);\n }\n else {\n popup = window.open(getDialogUrl(host), '_blank');\n }\n if (!popup)\n throw new Error('Failed to open popup');\n messenger = Messenger.bridge({\n from: Messenger.fromWindow(window, {\n targetOrigin: hostUrl.origin,\n }),\n to: Messenger.fromWindow(popup, {\n targetOrigin: hostUrl.origin,\n }),\n waitForReady: true,\n });\n themeController?._setup(messenger, false);\n messenger.send('__internal', {\n mode: resolvedType === 'page' ? 'page' : 'popup',\n referrer: getReferrer(),\n theme: themeController?.getTheme() ?? parameters.theme,\n type: 'init',\n });\n messenger.on('rpc-response', (response) => handleResponse(store, response));\n window.removeEventListener('focus', onBlur);\n window.addEventListener('focus', onBlur);\n },\n async secure() {\n return {\n frame: true,\n host: true,\n protocol: true,\n };\n },\n async syncRequests(requests) {\n const requiresConfirm = requests.some((x) => requiresConfirmation(x.request));\n if (requiresConfirm) {\n if (!popup || popup.closed)\n this.open();\n popup?.focus();\n }\n messenger?.send('rpc-requests', requests);\n },\n };\n },\n supportsHeadless: false,\n });\n}\n/**\n * Instantiates a noop dialog.\n *\n * @returns Noop dialog.\n */\nexport function noop() {\n return from({\n name: 'noop',\n setup() {\n return {\n close() { },\n destroy() { },\n open() { },\n async secure() {\n return {\n frame: true,\n host: true,\n protocol: true,\n };\n },\n async syncRequests() { },\n };\n },\n supportsHeadless: true,\n });\n}\n/**\n * Instantiates an inline iframe dialog rendered on a provided `element`.\n *\n * @param options - Options.\n * @returns Inline iframe dialog.\n */\nexport function experimental_inline(options) {\n const { element } = options;\n if (typeof window === 'undefined')\n return noop();\n return from({\n name: 'inline',\n setup(parameters) {\n const { host, internal, theme, themeController } = parameters;\n const { store } = internal;\n let open = false;\n const hostUrl = new URL(host);\n const root = document.createElement('div');\n root.dataset.porto = '';\n root.style.height = '100%';\n element().appendChild(root);\n const iframe = document.createElement('iframe');\n iframe.setAttribute('allow', `publickey-credentials-get ${hostUrl.origin}; publickey-credentials-create ${hostUrl.origin}`);\n iframe.setAttribute('aria-label', 'Porto Wallet');\n iframe.setAttribute('tabindex', '0');\n iframe.setAttribute('sandbox', 'allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox');\n iframe.setAttribute('src', getDialogUrl(host));\n iframe.setAttribute('title', 'Porto');\n Object.assign(iframe.style, {\n border: '0',\n height: '100%',\n width: '100%',\n });\n root.appendChild(iframe);\n const messenger = Messenger.bridge({\n from: Messenger.fromWindow(window, { targetOrigin: hostUrl.origin }),\n to: Messenger.fromWindow(iframe.contentWindow, {\n targetOrigin: hostUrl.origin,\n }),\n waitForReady: true,\n });\n themeController?._setup(messenger, true);\n messenger.on('ready', () => {\n messenger.send('__internal', {\n mode: 'inline-iframe',\n referrer: getReferrer(),\n theme,\n type: 'init',\n });\n });\n messenger.on('rpc-response', (response) => handleResponse(store, response));\n return {\n close() { },\n destroy() {\n messenger.destroy();\n root.remove();\n },\n open() {\n if (open)\n return;\n open = true;\n messenger.send('__internal', {\n mode: 'iframe',\n referrer: getReferrer(),\n type: 'init',\n });\n },\n async secure() {\n return {\n frame: true,\n host: true,\n protocol: true,\n };\n },\n async syncRequests(requests) {\n messenger.send('rpc-requests', requests);\n },\n };\n },\n supportsHeadless: true,\n });\n}\n/**\n * A controller to update the dialog theme.\n */\nexport function createThemeController() {\n let lastTheme = null;\n let messenger = null;\n const controller = {\n _setup(messenger_, resetTheme = false) {\n if (resetTheme)\n lastTheme = null;\n messenger = messenger_;\n },\n getTheme() {\n return lastTheme;\n },\n setTheme(theme) {\n lastTheme = theme;\n messenger\n ?.send('__internal', {\n theme,\n type: 'set-theme',\n })\n .catch(() => { });\n },\n };\n return controller;\n}\nexport const defaultSize = { height: 282, width: 360 };\nexport function requiresConfirmation(request, options = {}) {\n const { methodPolicies, targetOrigin } = options;\n const policy = methodPolicies?.find((x) => x.method === request.method);\n if (!policy)\n return true;\n if (policy.modes?.headless) {\n if (typeof policy.modes.headless === 'object' &&\n policy.modes.headless.sameOrigin &&\n targetOrigin !== window.location.origin)\n return true;\n return false;\n }\n return true;\n}\nexport function getReferrer() {\n const icon = (() => {\n const dark = document.querySelector('link[rel=\"icon\"][media=\"(prefers-color-scheme: dark)\"]')?.href;\n const light = document.querySelector('link[rel=\"icon\"][media=\"(prefers-color-scheme: light)\"]')?.href ?? document.querySelector('link[rel=\"icon\"]')?.href;\n if (dark && light && dark !== light)\n return { dark, light };\n const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (isDark)\n return dark;\n return light;\n })();\n return {\n icon,\n title: document.title,\n };\n}\nexport function handleBlur(store) {\n store.setState((x) => ({\n ...x,\n requestQueue: x.requestQueue.map((x) => ({\n account: x.account,\n error: new Provider.UserRejectedRequestError(),\n request: x.request,\n status: 'error',\n })),\n }));\n}\nexport function handleResponse(store, response) {\n store.setState((x) => ({\n ...x,\n requestQueue: x.requestQueue.map((queued) => {\n if (queued.request.id !== response.id)\n return queued;\n if (response.error)\n return {\n account: queued.account,\n error: response.error,\n request: queued.request,\n status: 'error',\n };\n return {\n account: queued.account,\n request: queued.request,\n result: response.result,\n status: 'success',\n };\n }),\n }));\n}\nexport function getDialogUrl(host) {\n const url = new URL(host);\n const parentParams = new URLSearchParams(window.location.search);\n const prefix = 'porto.';\n for (const [key, value] of parentParams.entries()) {\n if (key.startsWith(prefix))\n url.searchParams.set(key.slice(prefix.length), value);\n }\n return url.toString();\n}\n//# sourceMappingURL=Dialog.js.map","import * as Bytes from '../Bytes.js';\n/** @internal */\nexport function assertSize(bytes, size_) {\n if (Bytes.size(bytes) > size_)\n throw new Bytes.SizeOverflowError({\n givenSize: Bytes.size(bytes),\n maxSize: size_,\n });\n}\n/** @internal */\nexport function assertStartOffset(value, start) {\n if (typeof start === 'number' && start > 0 && start > Bytes.size(value) - 1)\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: Bytes.size(value),\n });\n}\n/** @internal */\nexport function assertEndOffset(value, start, end) {\n if (typeof start === 'number' &&\n typeof end === 'number' &&\n Bytes.size(value) !== end - start) {\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: Bytes.size(value),\n });\n }\n}\n/** @internal */\nexport const charCodeMap = {\n zero: 48,\n nine: 57,\n A: 65,\n F: 70,\n a: 97,\n f: 102,\n};\n/** @internal */\nexport function charCodeToBase16(char) {\n if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n return char - charCodeMap.zero;\n if (char >= charCodeMap.A && char <= charCodeMap.F)\n return char - (charCodeMap.A - 10);\n if (char >= charCodeMap.a && char <= charCodeMap.f)\n return char - (charCodeMap.a - 10);\n return undefined;\n}\n/** @internal */\nexport function pad(bytes, options = {}) {\n const { dir, size = 32 } = options;\n if (size === 0)\n return bytes;\n if (bytes.length > size)\n throw new Bytes.SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'Bytes',\n });\n const paddedBytes = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right';\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1];\n }\n return paddedBytes;\n}\n/** @internal */\nexport function trim(value, options = {}) {\n const { dir = 'left' } = options;\n let data = value;\n let sliceLength = 0;\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n sliceLength++;\n else\n break;\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength);\n return data;\n}\n//# sourceMappingURL=bytes.js.map","import { equalBytes } from '@noble/curves/abstract/utils';\nimport * as Errors from './Errors.js';\nimport * as Hex from './Hex.js';\nimport * as internal from './internal/bytes.js';\nimport * as internal_hex from './internal/hex.js';\nimport * as Json from './Json.js';\nconst decoder = /*#__PURE__*/ new TextDecoder();\nconst encoder = /*#__PURE__*/ new TextEncoder();\n/**\n * Asserts if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.assert('abc')\n * // @error: Bytes.InvalidBytesTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid Bytes value.\n * // @error: Bytes values must be of type `Uint8Array`.\n * ```\n *\n * @param value - Value to assert.\n */\nexport function assert(value) {\n if (value instanceof Uint8Array)\n return;\n if (!value)\n throw new InvalidBytesTypeError(value);\n if (typeof value !== 'object')\n throw new InvalidBytesTypeError(value);\n if (!('BYTES_PER_ELEMENT' in value))\n throw new InvalidBytesTypeError(value);\n if (value.BYTES_PER_ELEMENT !== 1 || value.constructor.name !== 'Uint8Array')\n throw new InvalidBytesTypeError(value);\n}\n/**\n * Concatenates two or more {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.concat(\n * Bytes.from([1]),\n * Bytes.from([69]),\n * Bytes.from([420, 69]),\n * )\n * // @log: Uint8Array [ 1, 69, 420, 69 ]\n * ```\n *\n * @param values - Values to concatenate.\n * @returns Concatenated {@link ox#Bytes.Bytes}.\n */\nexport function concat(...values) {\n let length = 0;\n for (const arr of values) {\n length += arr.length;\n }\n const result = new Uint8Array(length);\n for (let i = 0, index = 0; i < values.length; i++) {\n const arr = values[i];\n result.set(arr, index);\n index += arr.length;\n }\n return result;\n}\n/**\n * Instantiates a {@link ox#Bytes.Bytes} value from a `Uint8Array`, a hex string, or an array of unsigned 8-bit integers.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Bytes.fromBoolean`\n *\n * - `Bytes.fromString`\n *\n * - `Bytes.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.from([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n *\n * const data = Bytes.from('0xdeadbeef')\n * // @log: Uint8Array([222, 173, 190, 239])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function from(value) {\n if (value instanceof Uint8Array)\n return value;\n if (typeof value === 'string')\n return fromHex(value);\n return fromArray(value);\n}\n/**\n * Converts an array of unsigned 8-bit integers into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromArray([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function fromArray(value) {\n return value instanceof Uint8Array ? value : new Uint8Array(value);\n}\n/**\n * Encodes a boolean value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true)\n * // @log: Uint8Array([1])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true, { size: 32 })\n * // @log: Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n * ```\n *\n * @param value - Boolean value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromBoolean(value, options = {}) {\n const { size } = options;\n const bytes = new Uint8Array(1);\n bytes[0] = Number(value);\n if (typeof size === 'number') {\n internal.assertSize(bytes, size);\n return padLeft(bytes, size);\n }\n return bytes;\n}\n/**\n * Encodes a {@link ox#Hex.Hex} value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Hex.Hex} value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromHex(value, options = {}) {\n const { size } = options;\n let hex = value;\n if (size) {\n internal_hex.assertSize(value, size);\n hex = Hex.padRight(value, size);\n }\n let hexString = hex.slice(2);\n if (hexString.length % 2)\n hexString = `0${hexString}`;\n const length = hexString.length / 2;\n const bytes = new Uint8Array(length);\n for (let index = 0, j = 0; index < length; index++) {\n const nibbleLeft = internal.charCodeToBase16(hexString.charCodeAt(j++));\n const nibbleRight = internal.charCodeToBase16(hexString.charCodeAt(j++));\n if (nibbleLeft === undefined || nibbleRight === undefined) {\n throw new Errors.BaseError(`Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`);\n }\n bytes[index] = (nibbleLeft << 4) | nibbleRight;\n }\n return bytes;\n}\n/**\n * Encodes a number value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420)\n * // @log: Uint8Array([1, 164])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420, { size: 4 })\n * // @log: Uint8Array([0, 0, 1, 164])\n * ```\n *\n * @param value - Number value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromNumber(value, options) {\n const hex = Hex.fromNumber(value, options);\n return fromHex(hex);\n}\n/**\n * Encodes a string into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - String to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromString(value, options = {}) {\n const { size } = options;\n const bytes = encoder.encode(value);\n if (typeof size === 'number') {\n internal.assertSize(bytes, size);\n return padRight(bytes, size);\n }\n return bytes;\n}\n/**\n * Checks if two {@link ox#Bytes.Bytes} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([1]))\n * // @log: true\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([2]))\n * // @log: false\n * ```\n *\n * @param bytesA - First {@link ox#Bytes.Bytes} value.\n * @param bytesB - Second {@link ox#Bytes.Bytes} value.\n * @returns `true` if the two values are equal, otherwise `false`.\n */\nexport function isEqual(bytesA, bytesB) {\n return equalBytes(bytesA, bytesB);\n}\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.from([1]), 4)\n * // @log: Uint8Array([0, 0, 0, 1])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padLeft(value, size) {\n return internal.pad(value, { dir: 'left', size });\n}\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padRight(Bytes.from([1]), 4)\n * // @log: Uint8Array([1, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padRight(value, size) {\n return internal.pad(value, { dir: 'right', size });\n}\n/**\n * Generates random {@link ox#Bytes.Bytes} of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.random(32)\n * // @log: Uint8Array([... x32])\n * ```\n *\n * @param length - Length of the random {@link ox#Bytes.Bytes} to generate.\n * @returns Random {@link ox#Bytes.Bytes} of the specified length.\n */\nexport function random(length) {\n return crypto.getRandomValues(new Uint8Array(length));\n}\n/**\n * Retrieves the size of a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.size(Bytes.from([1, 2, 3, 4]))\n * // @log: 4\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Size of the {@link ox#Bytes.Bytes} value.\n */\nexport function size(value) {\n return value.length;\n}\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(\n * Bytes.from([1, 2, 3, 4, 5, 6, 7, 8, 9]),\n * 1,\n * 4,\n * )\n * // @log: Uint8Array([2, 3, 4])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value.\n * @param start - Start offset.\n * @param end - End offset.\n * @param options - Slice options.\n * @returns Sliced {@link ox#Bytes.Bytes} value.\n */\nexport function slice(value, start, end, options = {}) {\n const { strict } = options;\n internal.assertStartOffset(value, start);\n const value_ = value.slice(start, end);\n if (strict)\n internal.assertEndOffset(value_, start, end);\n return value_;\n}\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a bigint.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBigInt(Bytes.from([1, 164]))\n * // @log: 420n\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded bigint.\n */\nexport function toBigInt(bytes, options = {}) {\n const { size } = options;\n if (typeof size !== 'undefined')\n internal.assertSize(bytes, size);\n const hex = Hex.fromBytes(bytes, options);\n return Hex.toBigInt(hex, options);\n}\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a boolean.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([1]))\n * // @log: true\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded boolean.\n */\nexport function toBoolean(bytes, options = {}) {\n const { size } = options;\n let bytes_ = bytes;\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size);\n bytes_ = trimLeft(bytes_);\n }\n if (bytes_.length > 1 || bytes_[0] > 1)\n throw new InvalidBytesBooleanError(bytes_);\n return Boolean(bytes_[0]);\n}\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toHex(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value, options = {}) {\n return Hex.fromBytes(value, options);\n}\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a number.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toNumber(Bytes.from([1, 164]))\n * // @log: 420\n * ```\n */\nexport function toNumber(bytes, options = {}) {\n const { size } = options;\n if (typeof size !== 'undefined')\n internal.assertSize(bytes, size);\n const hex = Hex.fromBytes(bytes, options);\n return Hex.toNumber(hex, options);\n}\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a string.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.toString(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: 'Hello world'\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded string.\n */\nexport function toString(bytes, options = {}) {\n const { size } = options;\n let bytes_ = bytes;\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size);\n bytes_ = trimRight(bytes_);\n }\n return decoder.decode(bytes_);\n}\n/**\n * Trims leading zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimLeft(Bytes.from([0, 0, 0, 0, 1, 2, 3]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimLeft(value) {\n return internal.trim(value, { dir: 'left' });\n}\n/**\n * Trims trailing zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimRight(Bytes.from([1, 2, 3, 0, 0, 0, 0]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimRight(value) {\n return internal.trim(value, { dir: 'right' });\n}\n/**\n * Checks if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.validate('0x')\n * // @log: false\n *\n * Bytes.validate(Bytes.from([1, 2, 3]))\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `true` if the value is {@link ox#Bytes.Bytes}, otherwise `false`.\n */\nexport function validate(value) {\n try {\n assert(value);\n return true;\n }\n catch {\n return false;\n }\n}\n/**\n * Thrown when the bytes value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([5]))\n * // @error: Bytes.InvalidBytesBooleanError: Bytes value `[5]` is not a valid boolean.\n * // @error: The bytes array must contain a single byte of either a `0` or `1` value.\n * ```\n */\nexport class InvalidBytesBooleanError extends Errors.BaseError {\n constructor(bytes) {\n super(`Bytes value \\`${bytes}\\` is not a valid boolean.`, {\n metaMessages: [\n 'The bytes array must contain a single byte of either a `0` or `1` value.',\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Bytes.InvalidBytesBooleanError'\n });\n }\n}\n/**\n * Thrown when a value cannot be converted to bytes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * Bytes.from('foo')\n * // @error: Bytes.InvalidBytesTypeError: Value `foo` of type `string` is an invalid Bytes value.\n * ```\n */\nexport class InvalidBytesTypeError extends Errors.BaseError {\n constructor(value) {\n super(`Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid Bytes value.`, {\n metaMessages: ['Bytes values must be of type `Bytes`.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Bytes.InvalidBytesTypeError'\n });\n }\n}\n/**\n * Thrown when a size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromString('Hello World!', { size: 8 })\n * // @error: Bytes.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n constructor({ givenSize, maxSize }) {\n super(`Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Bytes.SizeOverflowError'\n });\n }\n}\n/**\n * Thrown when a slice offset is out-of-bounds.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(Bytes.from([1, 2, 3]), 4)\n * // @error: Bytes.SliceOffsetOutOfBoundsError: Slice starting at offset `4` is out-of-bounds (size: `3`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n constructor({ offset, position, size, }) {\n super(`Slice ${position === 'start' ? 'starting' : 'ending'} at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Bytes.SliceOffsetOutOfBoundsError'\n });\n }\n}\n/**\n * Thrown when a the padding size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.fromString('Hello World!'), 8)\n * // @error: [Bytes.SizeExceedsPaddingSizeError: Bytes size (`12`) exceeds padding size (`8`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n constructor({ size, targetSize, type, }) {\n super(`${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Bytes.SizeExceedsPaddingSizeError'\n });\n }\n}\n//# sourceMappingURL=Bytes.js.map","/**\n * @internal\n *\n * Map with a LRU (Least recently used) policy.\n * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap extends Map {\n constructor(size) {\n super();\n Object.defineProperty(this, \"maxSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.maxSize = size;\n }\n get(key) {\n const value = super.get(key);\n if (super.has(key) && value !== undefined) {\n this.delete(key);\n super.set(key, value);\n }\n return value;\n }\n set(key, value) {\n super.set(key, value);\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = this.keys().next().value;\n if (firstKey)\n this.delete(firstKey);\n }\n return this;\n }\n}\n//# sourceMappingURL=lru.js.map","import { LruMap } from './internal/lru.js';\nconst caches = {\n checksum: /*#__PURE__*/ new LruMap(8192),\n};\nexport const checksum = caches.checksum;\n/**\n * Clears all global caches.\n *\n * @example\n * ```ts\n * import { Caches } from 'ox'\n * Caches.clear()\n * ```\n */\nexport function clear() {\n for (const cache of Object.values(caches))\n cache.clear();\n}\n//# sourceMappingURL=Caches.js.map","import { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160';\nimport { keccak_256 as noble_keccak256 } from '@noble/hashes/sha3';\nimport { sha256 as noble_sha256 } from '@noble/hashes/sha256';\nimport * as Bytes from './Bytes.js';\nimport * as Hex from './Hex.js';\n/**\n * Calculates the [Keccak256](https://en.wikipedia.org/wiki/SHA-3) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `keccak_256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef')\n * // @log: '0xd4fd4e189132273036449fc9e11198c739161b4c0116a9a2dccdfa1c492006f1'\n * ```\n *\n * @example\n * ### Calculate Hash of a String\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.keccak256(Hex.fromString('hello world'))\n * // @log: '0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Keccak256 hash.\n */\nexport function keccak256(value, options = {}) {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options;\n const bytes = noble_keccak256(Bytes.from(value));\n if (as === 'Bytes')\n return bytes;\n return Hex.fromBytes(bytes);\n}\n/**\n * Calculates the [Ripemd160](https://en.wikipedia.org/wiki/RIPEMD) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `ripemd160` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.ripemd160('0xdeadbeef')\n * // '0x226821c2f5423e11fe9af68bd285c249db2e4b5a'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Ripemd160 hash.\n */\nexport function ripemd160(value, options = {}) {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options;\n const bytes = noble_ripemd160(Bytes.from(value));\n if (as === 'Bytes')\n return bytes;\n return Hex.fromBytes(bytes);\n}\n/**\n * Calculates the [Sha256](https://en.wikipedia.org/wiki/SHA-256) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `sha256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.sha256('0xdeadbeef')\n * // '0x5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Sha256 hash.\n */\nexport function sha256(value, options = {}) {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options;\n const bytes = noble_sha256(Bytes.from(value));\n if (as === 'Bytes')\n return bytes;\n return Hex.fromBytes(bytes);\n}\n/**\n * Checks if a string is a valid hash value.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.validate('0x')\n * // @log: false\n *\n * Hash.validate('0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid hash.\n */\nexport function validate(value) {\n return Hex.validate(value) && Hex.size(value) === 32;\n}\n//# sourceMappingURL=Hash.js.map","import * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hex from './Hex.js';\nimport * as Json from './Json.js';\n/**\n * Asserts that a {@link ox#PublicKey.PublicKey} is valid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @error: PublicKey.InvalidError: Value \\`{\"y\":\"1\"}\\` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function assert(publicKey, options = {}) {\n const { compressed } = options;\n const { prefix, x, y } = publicKey;\n // Uncompressed\n if (compressed === false ||\n (typeof x === 'bigint' && typeof y === 'bigint')) {\n if (prefix !== 4)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidUncompressedPrefixError(),\n });\n return;\n }\n // Compressed\n if (compressed === true ||\n (typeof x === 'bigint' && typeof y === 'undefined')) {\n if (prefix !== 3 && prefix !== 2)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidCompressedPrefixError(),\n });\n return;\n }\n // Unknown/invalid\n throw new InvalidError({ publicKey });\n}\n/**\n * Compresses a {@link ox#PublicKey.PublicKey}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const compressed = PublicKey.compress(publicKey) // [!code focus]\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The public key to compress.\n * @returns The compressed public key.\n */\nexport function compress(publicKey) {\n const { x, y } = publicKey;\n return {\n prefix: y % 2n === 0n ? 2 : 3,\n x,\n };\n}\n/**\n * Instantiates a typed {@link ox#PublicKey.PublicKey} object from a {@link ox#PublicKey.PublicKey}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from('0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param value - The public key value to instantiate.\n * @returns The instantiated {@link ox#PublicKey.PublicKey}.\n */\nexport function from(value) {\n const publicKey = (() => {\n if (Hex.validate(value))\n return fromHex(value);\n if (Bytes.validate(value))\n return fromBytes(value);\n const { prefix, x, y } = value;\n if (typeof x === 'bigint' && typeof y === 'bigint')\n return { prefix: prefix ?? 0x04, x, y };\n return { prefix, x };\n })();\n assert(publicKey);\n return publicKey;\n}\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromBytes(publicKey) {\n return fromHex(Hex.fromBytes(publicKey));\n}\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### Deserializing a Compressed Public Key\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x038318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75')\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromHex(publicKey) {\n if (publicKey.length !== 132 &&\n publicKey.length !== 130 &&\n publicKey.length !== 68)\n throw new InvalidSerializedSizeError({ publicKey });\n if (publicKey.length === 130) {\n const x = BigInt(Hex.slice(publicKey, 0, 32));\n const y = BigInt(Hex.slice(publicKey, 32, 64));\n return {\n prefix: 4,\n x,\n y,\n };\n }\n if (publicKey.length === 132) {\n const prefix = Number(Hex.slice(publicKey, 0, 1));\n const x = BigInt(Hex.slice(publicKey, 1, 33));\n const y = BigInt(Hex.slice(publicKey, 33, 65));\n return {\n prefix,\n x,\n y,\n };\n }\n const prefix = Number(Hex.slice(publicKey, 0, 1));\n const x = BigInt(Hex.slice(publicKey, 1, 33));\n return {\n prefix,\n x,\n };\n}\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const bytes = PublicKey.toBytes(publicKey) // [!code focus]\n * // @log: Uint8Array [128, 3, 131, ...]\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toBytes(publicKey, options = {}) {\n return Bytes.fromHex(toHex(publicKey, options));\n}\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const hex = PublicKey.toHex(publicKey) // [!code focus]\n * // @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toHex(publicKey, options = {}) {\n assert(publicKey);\n const { prefix, x, y } = publicKey;\n const { includePrefix = true } = options;\n const publicKey_ = Hex.concat(includePrefix ? Hex.fromNumber(prefix, { size: 1 }) : '0x', Hex.fromNumber(x, { size: 32 }), \n // If the public key is not compressed, add the y coordinate.\n typeof y === 'bigint' ? Hex.fromNumber(y, { size: 32 }) : '0x');\n return publicKey_;\n}\n/**\n * Validates a {@link ox#PublicKey.PublicKey}. Returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const valid = PublicKey.validate({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @log: false\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function validate(publicKey, options = {}) {\n try {\n assert(publicKey, options);\n return true;\n }\n catch (_error) {\n return false;\n }\n}\n/**\n * Thrown when a public key is invalid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({ y: 1n })\n * // @error: PublicKey.InvalidError: Value `{\"y\":1n}` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n */\nexport class InvalidError extends Errors.BaseError {\n constructor({ publicKey }) {\n super(`Value \\`${Json.stringify(publicKey)}\\` is not a valid public key.`, {\n metaMessages: [\n 'Public key must contain:',\n '- an `x` and `prefix` value (compressed)',\n '- an `x`, `y`, and `prefix` value (uncompressed)',\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'PublicKey.InvalidError'\n });\n }\n}\n/** Thrown when a public key has an invalid prefix. */\nexport class InvalidPrefixError extends Errors.BaseError {\n constructor({ prefix, cause }) {\n super(`Prefix \"${prefix}\" is invalid.`, {\n cause,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'PublicKey.InvalidPrefixError'\n });\n }\n}\n/** Thrown when the public key has an invalid prefix for a compressed public key. */\nexport class InvalidCompressedPrefixError extends Errors.BaseError {\n constructor() {\n super('Prefix must be 2 or 3 for compressed public keys.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'PublicKey.InvalidCompressedPrefixError'\n });\n }\n}\n/** Thrown when the public key has an invalid prefix for an uncompressed public key. */\nexport class InvalidUncompressedPrefixError extends Errors.BaseError {\n constructor() {\n super('Prefix must be 4 for uncompressed public keys.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'PublicKey.InvalidUncompressedPrefixError'\n });\n }\n}\n/** Thrown when the public key has an invalid serialized size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n constructor({ publicKey }) {\n super(`Value \\`${publicKey}\\` is an invalid public key size.`, {\n metaMessages: [\n 'Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).',\n `Received ${Hex.size(Hex.from(publicKey))} bytes.`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'PublicKey.InvalidSerializedSizeError'\n });\n }\n}\n//# sourceMappingURL=PublicKey.js.map","import * as Bytes from './Bytes.js';\nimport * as Caches from './Caches.js';\nimport * as Errors from './Errors.js';\nimport * as Hash from './Hash.js';\nimport * as PublicKey from './PublicKey.js';\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/;\n/**\n * Asserts that the given value is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xdeadbeef')\n * // @error: InvalidAddressError: Address \"0xdeadbeef\" is invalid.\n * ```\n *\n * @param value - Value to assert if it is a valid address.\n * @param options - Assertion options.\n */\nexport function assert(value, options = {}) {\n const { strict = true } = options;\n if (!addressRegex.test(value))\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidInputError(),\n });\n if (strict) {\n if (value.toLowerCase() === value)\n return;\n if (checksum(value) !== value)\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidChecksumError(),\n });\n }\n}\n/**\n * Computes the checksum address for the given {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.checksum('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @param address - The address to compute the checksum for.\n * @returns The checksummed address.\n */\nexport function checksum(address) {\n if (Caches.checksum.has(address))\n return Caches.checksum.get(address);\n assert(address, { strict: false });\n const hexAddress = address.substring(2).toLowerCase();\n const hash = Hash.keccak256(Bytes.fromString(hexAddress), { as: 'Bytes' });\n const characters = hexAddress.split('');\n for (let i = 0; i < 40; i += 2) {\n if (hash[i >> 1] >> 4 >= 8 && characters[i]) {\n characters[i] = characters[i].toUpperCase();\n }\n if ((hash[i >> 1] & 0x0f) >= 8 && characters[i + 1]) {\n characters[i + 1] = characters[i + 1].toUpperCase();\n }\n }\n const result = `0x${characters.join('')}`;\n Caches.checksum.set(address, result);\n return result;\n}\n/**\n * Converts a stringified address to a typed (optionally checksummed) {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xa0cf798816d4b9b9866b5330eea46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e', {\n * checksum: true\n * })\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('hello')\n * // @error: InvalidAddressError: Address \"0xa\" is invalid.\n * ```\n *\n * @param address - An address string to convert to a typed Address.\n * @param options - Conversion options.\n * @returns The typed Address.\n */\nexport function from(address, options = {}) {\n const { checksum: checksumVal = false } = options;\n assert(address);\n if (checksumVal)\n return checksum(address);\n return address;\n}\n/**\n * Converts an ECDSA public key to an {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address, PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from(\n * '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',\n * )\n * const address = Address.fromPublicKey(publicKey)\n * // @log: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'\n * ```\n *\n * @param publicKey - The ECDSA public key to convert to an {@link ox#Address.Address}.\n * @param options - Conversion options.\n * @returns The {@link ox#Address.Address} corresponding to the public key.\n */\nexport function fromPublicKey(publicKey, options = {}) {\n const address = Hash.keccak256(`0x${PublicKey.toHex(publicKey).slice(4)}`).substring(26);\n return from(`0x${address}`, options);\n}\n/**\n * Checks if two {@link ox#Address.Address} are equal.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * )\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251f'\n * )\n * // @log: false\n * ```\n *\n * @param addressA - The first address to compare.\n * @param addressB - The second address to compare.\n * @returns Whether the addresses are equal.\n */\nexport function isEqual(addressA, addressB) {\n assert(addressA, { strict: false });\n assert(addressB, { strict: false });\n return addressA.toLowerCase() === addressB.toLowerCase();\n}\n/**\n * Checks if the given address is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param address - Value to check if it is a valid address.\n * @param options - Check options.\n * @returns Whether the address is a valid address.\n */\nexport function validate(address, options = {}) {\n const { strict = true } = options ?? {};\n try {\n assert(address, { strict });\n return true;\n }\n catch {\n return false;\n }\n}\n/**\n * Thrown when an address is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0x123')\n * // @error: Address.InvalidAddressError: Address `0x123` is invalid.\n * ```\n */\nexport class InvalidAddressError extends Errors.BaseError {\n constructor({ address, cause }) {\n super(`Address \"${address}\" is invalid.`, {\n cause,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Address.InvalidAddressError'\n });\n }\n}\n/** Thrown when an address is not a 20 byte (40 hexadecimal character) value. */\nexport class InvalidInputError extends Errors.BaseError {\n constructor() {\n super('Address is not a 20 byte (40 hexadecimal character) value.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Address.InvalidInputError'\n });\n }\n}\n/** Thrown when an address does not match its checksum counterpart. */\nexport class InvalidChecksumError extends Errors.BaseError {\n constructor() {\n super('Address does not match its checksum counterpart.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Address.InvalidChecksumError'\n });\n }\n}\n//# sourceMappingURL=Address.js.map","export let extraEntropy = false;\n/** @internal */\nexport function setExtraEntropy(entropy) {\n extraEntropy = entropy;\n}\n//# sourceMappingURL=entropy.js.map","import { secp256k1 } from '@noble/curves/secp256k1';\nimport * as Address from './Address.js';\nimport * as Bytes from './Bytes.js';\nimport * as Hex from './Hex.js';\nimport * as Entropy from './internal/entropy.js';\nimport * as PublicKey from './PublicKey.js';\n/** Re-export of noble/curves secp256k1 utilities. */\nexport const noble = secp256k1;\n/**\n * Creates a new secp256k1 ECDSA key pair consisting of a private key and its corresponding public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey, publicKey } = Secp256k1.createKeyPair()\n * ```\n *\n * @param options - The options to generate the key pair.\n * @returns The generated key pair containing both private and public keys.\n */\nexport function createKeyPair(options = {}) {\n const { as = 'Hex' } = options;\n const privateKey = randomPrivateKey({ as });\n const publicKey = getPublicKey({ privateKey });\n return {\n privateKey: privateKey,\n publicKey,\n };\n}\n/**\n * Computes the secp256k1 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const publicKey = Secp256k1.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(options) {\n const { privateKey } = options;\n const point = secp256k1.ProjectivePoint.fromPrivateKey(Hex.from(privateKey).slice(2));\n return PublicKey.from(point);\n}\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const { privateKey: privateKeyA } = Secp256k1.createKeyPair()\n * const { publicKey: publicKeyB } = Secp256k1.createKeyPair()\n *\n * const sharedSecret = Secp256k1.getSharedSecret({\n * privateKey: privateKeyA,\n * publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport function getSharedSecret(options) {\n const { as = 'Hex', privateKey, publicKey } = options;\n const point = secp256k1.ProjectivePoint.fromHex(PublicKey.toHex(publicKey).slice(2));\n const sharedPoint = point.multiply(secp256k1.utils.normPrivateKeyToScalar(Hex.from(privateKey).slice(2)));\n const sharedSecret = sharedPoint.toRawBytes(true); // compressed format\n if (as === 'Hex')\n return Hex.fromBytes(sharedSecret);\n return sharedSecret;\n}\n/**\n * Generates a random ECDSA private key on the secp256k1 curve.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = Secp256k1.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey(options = {}) {\n const { as = 'Hex' } = options;\n const bytes = secp256k1.utils.randomPrivateKey();\n if (as === 'Hex')\n return Hex.fromBytes(bytes);\n return bytes;\n}\n/**\n * Recovers the signing address from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const address = Secp256k1.recoverAddress({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered address.\n */\nexport function recoverAddress(options) {\n return Address.fromPublicKey(recoverPublicKey(options));\n}\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = Secp256k1.recoverPublicKey({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(options) {\n const { payload, signature } = options;\n const { r, s, yParity } = signature;\n const signature_ = new secp256k1.Signature(BigInt(r), BigInt(s)).addRecoveryBit(yParity);\n const point = signature_.recoverPublicKey(Hex.from(payload).substring(2));\n return PublicKey.from(point);\n}\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options) {\n const { extraEntropy = Entropy.extraEntropy, hash, payload, privateKey, } = options;\n const { r, s, recovery } = secp256k1.sign(Bytes.from(payload), Bytes.from(privateKey), {\n extraEntropy: typeof extraEntropy === 'boolean'\n ? extraEntropy\n : Hex.from(extraEntropy).slice(2),\n lowS: true,\n ...(hash ? { prehash: true } : {}),\n });\n return {\n r,\n s,\n yParity: recovery,\n };\n}\n/**\n * Verifies a payload was signed by the provided address.\n *\n * @example\n * ### Verify with Ethereum Address\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify with Public Key\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = '0x...'\n * const publicKey = Secp256k1.getPublicKey({ privateKey })\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * publicKey, // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided address.\n */\nexport function verify(options) {\n const { address, hash, payload, publicKey, signature } = options;\n if (address)\n return Address.isEqual(address, recoverAddress({ payload, signature }));\n return secp256k1.verify(signature, Bytes.from(payload), PublicKey.toBytes(publicKey), ...(hash ? [{ prehash: true, lowS: true }] : []));\n}\n//# sourceMappingURL=Secp256k1.js.map","export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/;\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/;\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex = /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/;\nexport const maxInt8 = 2n ** (8n - 1n) - 1n;\nexport const maxInt16 = 2n ** (16n - 1n) - 1n;\nexport const maxInt24 = 2n ** (24n - 1n) - 1n;\nexport const maxInt32 = 2n ** (32n - 1n) - 1n;\nexport const maxInt40 = 2n ** (40n - 1n) - 1n;\nexport const maxInt48 = 2n ** (48n - 1n) - 1n;\nexport const maxInt56 = 2n ** (56n - 1n) - 1n;\nexport const maxInt64 = 2n ** (64n - 1n) - 1n;\nexport const maxInt72 = 2n ** (72n - 1n) - 1n;\nexport const maxInt80 = 2n ** (80n - 1n) - 1n;\nexport const maxInt88 = 2n ** (88n - 1n) - 1n;\nexport const maxInt96 = 2n ** (96n - 1n) - 1n;\nexport const maxInt104 = 2n ** (104n - 1n) - 1n;\nexport const maxInt112 = 2n ** (112n - 1n) - 1n;\nexport const maxInt120 = 2n ** (120n - 1n) - 1n;\nexport const maxInt128 = 2n ** (128n - 1n) - 1n;\nexport const maxInt136 = 2n ** (136n - 1n) - 1n;\nexport const maxInt144 = 2n ** (144n - 1n) - 1n;\nexport const maxInt152 = 2n ** (152n - 1n) - 1n;\nexport const maxInt160 = 2n ** (160n - 1n) - 1n;\nexport const maxInt168 = 2n ** (168n - 1n) - 1n;\nexport const maxInt176 = 2n ** (176n - 1n) - 1n;\nexport const maxInt184 = 2n ** (184n - 1n) - 1n;\nexport const maxInt192 = 2n ** (192n - 1n) - 1n;\nexport const maxInt200 = 2n ** (200n - 1n) - 1n;\nexport const maxInt208 = 2n ** (208n - 1n) - 1n;\nexport const maxInt216 = 2n ** (216n - 1n) - 1n;\nexport const maxInt224 = 2n ** (224n - 1n) - 1n;\nexport const maxInt232 = 2n ** (232n - 1n) - 1n;\nexport const maxInt240 = 2n ** (240n - 1n) - 1n;\nexport const maxInt248 = 2n ** (248n - 1n) - 1n;\nexport const maxInt256 = 2n ** (256n - 1n) - 1n;\nexport const minInt8 = -(2n ** (8n - 1n));\nexport const minInt16 = -(2n ** (16n - 1n));\nexport const minInt24 = -(2n ** (24n - 1n));\nexport const minInt32 = -(2n ** (32n - 1n));\nexport const minInt40 = -(2n ** (40n - 1n));\nexport const minInt48 = -(2n ** (48n - 1n));\nexport const minInt56 = -(2n ** (56n - 1n));\nexport const minInt64 = -(2n ** (64n - 1n));\nexport const minInt72 = -(2n ** (72n - 1n));\nexport const minInt80 = -(2n ** (80n - 1n));\nexport const minInt88 = -(2n ** (88n - 1n));\nexport const minInt96 = -(2n ** (96n - 1n));\nexport const minInt104 = -(2n ** (104n - 1n));\nexport const minInt112 = -(2n ** (112n - 1n));\nexport const minInt120 = -(2n ** (120n - 1n));\nexport const minInt128 = -(2n ** (128n - 1n));\nexport const minInt136 = -(2n ** (136n - 1n));\nexport const minInt144 = -(2n ** (144n - 1n));\nexport const minInt152 = -(2n ** (152n - 1n));\nexport const minInt160 = -(2n ** (160n - 1n));\nexport const minInt168 = -(2n ** (168n - 1n));\nexport const minInt176 = -(2n ** (176n - 1n));\nexport const minInt184 = -(2n ** (184n - 1n));\nexport const minInt192 = -(2n ** (192n - 1n));\nexport const minInt200 = -(2n ** (200n - 1n));\nexport const minInt208 = -(2n ** (208n - 1n));\nexport const minInt216 = -(2n ** (216n - 1n));\nexport const minInt224 = -(2n ** (224n - 1n));\nexport const minInt232 = -(2n ** (232n - 1n));\nexport const minInt240 = -(2n ** (240n - 1n));\nexport const minInt248 = -(2n ** (248n - 1n));\nexport const minInt256 = -(2n ** (256n - 1n));\nexport const maxUint8 = 2n ** 8n - 1n;\nexport const maxUint16 = 2n ** 16n - 1n;\nexport const maxUint24 = 2n ** 24n - 1n;\nexport const maxUint32 = 2n ** 32n - 1n;\nexport const maxUint40 = 2n ** 40n - 1n;\nexport const maxUint48 = 2n ** 48n - 1n;\nexport const maxUint56 = 2n ** 56n - 1n;\nexport const maxUint64 = 2n ** 64n - 1n;\nexport const maxUint72 = 2n ** 72n - 1n;\nexport const maxUint80 = 2n ** 80n - 1n;\nexport const maxUint88 = 2n ** 88n - 1n;\nexport const maxUint96 = 2n ** 96n - 1n;\nexport const maxUint104 = 2n ** 104n - 1n;\nexport const maxUint112 = 2n ** 112n - 1n;\nexport const maxUint120 = 2n ** 120n - 1n;\nexport const maxUint128 = 2n ** 128n - 1n;\nexport const maxUint136 = 2n ** 136n - 1n;\nexport const maxUint144 = 2n ** 144n - 1n;\nexport const maxUint152 = 2n ** 152n - 1n;\nexport const maxUint160 = 2n ** 160n - 1n;\nexport const maxUint168 = 2n ** 168n - 1n;\nexport const maxUint176 = 2n ** 176n - 1n;\nexport const maxUint184 = 2n ** 184n - 1n;\nexport const maxUint192 = 2n ** 192n - 1n;\nexport const maxUint200 = 2n ** 200n - 1n;\nexport const maxUint208 = 2n ** 208n - 1n;\nexport const maxUint216 = 2n ** 216n - 1n;\nexport const maxUint224 = 2n ** 224n - 1n;\nexport const maxUint232 = 2n ** 232n - 1n;\nexport const maxUint240 = 2n ** 240n - 1n;\nexport const maxUint248 = 2n ** 248n - 1n;\nexport const maxUint256 = 2n ** 256n - 1n;\n//# sourceMappingURL=Solidity.js.map","import { secp256k1 } from '@noble/curves/secp256k1';\nimport * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hex from './Hex.js';\nimport * as Json from './Json.js';\nimport * as Solidity from './Solidity.js';\n/**\n * Asserts that a Signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.assert({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @error: InvalidSignatureRError:\n * // @error: Value `-549...n` is an invalid r value.\n * // @error: r must be a positive integer less than 2^256.\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function assert(signature, options = {}) {\n const { recovered } = options;\n if (typeof signature.r === 'undefined')\n throw new MissingPropertiesError({ signature });\n if (typeof signature.s === 'undefined')\n throw new MissingPropertiesError({ signature });\n if (recovered && typeof signature.yParity === 'undefined')\n throw new MissingPropertiesError({ signature });\n if (signature.r < 0n || signature.r > Solidity.maxUint256)\n throw new InvalidRError({ value: signature.r });\n if (signature.s < 0n || signature.s > Solidity.maxUint256)\n throw new InvalidSError({ value: signature.s });\n if (typeof signature.yParity === 'number' &&\n signature.yParity !== 0 &&\n signature.yParity !== 1)\n throw new InvalidYParityError({ value: signature.yParity });\n}\n/**\n * Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param signature - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromBytes(signature) {\n return fromHex(Hex.fromBytes(signature));\n}\n/**\n * Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param serialized - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromHex(signature) {\n if (signature.length !== 130 && signature.length !== 132)\n throw new InvalidSerializedSizeError({ signature });\n const r = BigInt(Hex.slice(signature, 0, 32));\n const s = BigInt(Hex.slice(signature, 32, 64));\n const yParity = (() => {\n const yParity = Number(`0x${signature.slice(130)}`);\n if (Number.isNaN(yParity))\n return undefined;\n try {\n return vToYParity(yParity);\n }\n catch {\n throw new InvalidYParityError({ value: yParity });\n }\n })();\n if (typeof yParity === 'undefined')\n return {\n r,\n s,\n };\n return {\n r,\n s,\n yParity,\n };\n}\n/**\n * Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.extract({\n * baz: 'barry',\n * foo: 'bar',\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * zebra: 'stripes',\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @param value - The arbitrary object to extract the signature from.\n * @returns The extracted {@link ox#Signature.Signature}.\n */\nexport function extract(value) {\n if (typeof value.r === 'undefined')\n return undefined;\n if (typeof value.s === 'undefined')\n return undefined;\n return from(value);\n}\n/**\n * Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @example\n * ### From Legacy\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * v: 27,\n * })\n * // @log: {\n * // @log: r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * // @log: s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * // @log: yParity: 0\n * // @log: }\n * ```\n *\n * @param signature - The signature value to instantiate.\n * @returns The instantiated {@link ox#Signature.Signature}.\n */\nexport function from(signature) {\n const signature_ = (() => {\n if (typeof signature === 'string')\n return fromHex(signature);\n if (signature instanceof Uint8Array)\n return fromBytes(signature);\n if (typeof signature.r === 'string')\n return fromRpc(signature);\n if (signature.v)\n return fromLegacy(signature);\n return {\n r: signature.r,\n s: signature.s,\n ...(typeof signature.yParity !== 'undefined'\n ? { yParity: signature.yParity }\n : {}),\n };\n })();\n assert(signature_);\n return signature_;\n}\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerBytes(signature) {\n return fromDerHex(Hex.fromBytes(signature));\n}\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerHex(signature) {\n const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2));\n return { r, s };\n}\n/**\n * Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })\n * // @log: { r: 1n, s: 2n, yParity: 1 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Legacy} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromLegacy(signature) {\n return {\n r: signature.r,\n s: signature.s,\n yParity: vToYParity(signature.v),\n };\n}\n/**\n * Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromRpc({\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Rpc} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromRpc(signature) {\n const yParity = (() => {\n const v = signature.v ? Number(signature.v) : undefined;\n let yParity = signature.yParity ? Number(signature.yParity) : undefined;\n if (typeof v === 'number' && typeof yParity !== 'number')\n yParity = vToYParity(v);\n if (typeof yParity !== 'number')\n throw new InvalidYParityError({ value: signature.yParity });\n return yParity;\n })();\n return {\n r: BigInt(signature.r),\n s: BigInt(signature.s),\n yParity,\n };\n}\n/**\n * Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])\n * // @log: {\n * // @log: r: 123n,\n * // @log: s: 456n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @param tuple - The {@link ox#Signature.Tuple} to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromTuple(tuple) {\n const [yParity, r, s] = tuple;\n return from({\n r: r === '0x' ? 0n : BigInt(r),\n s: s === '0x' ? 0n : BigInt(s),\n yParity: yParity === '0x' ? 0 : Number(yParity),\n });\n}\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toBytes({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: Uint8Array [102, 16, 10, ...]\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toBytes(signature) {\n return Bytes.fromHex(toHex(signature));\n}\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toHex({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toHex(signature) {\n assert(signature);\n const r = signature.r;\n const s = signature.s;\n const signature_ = Hex.concat(Hex.fromNumber(r, { size: 32 }), Hex.fromNumber(s, { size: 32 }), \n // If the signature is recovered, add the recovery byte to the signature.\n typeof signature.yParity === 'number'\n ? Hex.fromNumber(yParityToV(signature.yParity), { size: 1 })\n : '0x');\n return signature_;\n}\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerBytes(signature)\n * // @log: Uint8Array [132, 51, 23, ...]\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerBytes(signature) {\n const sig = new secp256k1.Signature(signature.r, signature.s);\n return sig.toDERRawBytes();\n}\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerHex(signature)\n * // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerHex(signature) {\n const sig = new secp256k1.Signature(signature.r, signature.s);\n return `0x${sig.toDERHex()}`;\n}\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })\n * // @log: { r: 1n, s: 2n, v: 28 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Legacy}.\n */\nexport function toLegacy(signature) {\n return {\n r: signature.r,\n s: signature.s,\n v: yParityToV(signature.yParity),\n };\n}\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toRpc({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Rpc}.\n */\nexport function toRpc(signature) {\n const { r, s, yParity } = signature;\n return {\n r: Hex.fromNumber(r, { size: 32 }),\n s: Hex.fromNumber(s, { size: 32 }),\n yParity: yParity === 0 ? '0x0' : '0x1',\n };\n}\n/**\n * Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signatureTuple = Signature.toTuple({\n * r: 123n,\n * s: 456n,\n * yParity: 1,\n * })\n * // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The {@link ox#Signature.Tuple}.\n */\nexport function toTuple(signature) {\n const { r, s, yParity } = signature;\n return [\n yParity ? '0x01' : '0x',\n r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r)),\n s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s)),\n ];\n}\n/**\n * Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const valid = Signature.validate({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: false\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function validate(signature, options = {}) {\n try {\n assert(signature, options);\n return true;\n }\n catch {\n return false;\n }\n}\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const yParity = Signature.vToYParity(28)\n * // @log: 1\n * ```\n *\n * @param v - The ECDSA `v` value to convert.\n * @returns The `yParity` value.\n */\nexport function vToYParity(v) {\n if (v === 0 || v === 27)\n return 0;\n if (v === 1 || v === 28)\n return 1;\n if (v >= 35)\n return v % 2 === 0 ? 1 : 0;\n throw new InvalidVError({ value: v });\n}\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const v = Signature.yParityToV(1)\n * // @log: 28\n * ```\n *\n * @param yParity - The ECDSA `yParity` value to convert.\n * @returns The `v` value.\n */\nexport function yParityToV(yParity) {\n if (yParity === 0)\n return 27;\n if (yParity === 1)\n return 28;\n throw new InvalidYParityError({ value: yParity });\n}\n/** Thrown when the serialized signature is of an invalid size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n constructor({ signature }) {\n super(`Value \\`${signature}\\` is an invalid signature size.`, {\n metaMessages: [\n 'Expected: 64 bytes or 65 bytes.',\n `Received ${Hex.size(Hex.from(signature))} bytes.`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.InvalidSerializedSizeError'\n });\n }\n}\n/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */\nexport class MissingPropertiesError extends Errors.BaseError {\n constructor({ signature }) {\n super(`Signature \\`${Json.stringify(signature)}\\` is missing either an \\`r\\`, \\`s\\`, or \\`yParity\\` property.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.MissingPropertiesError'\n });\n }\n}\n/** Thrown when the signature has an invalid `r` value. */\nexport class InvalidRError extends Errors.BaseError {\n constructor({ value }) {\n super(`Value \\`${value}\\` is an invalid r value. r must be a positive integer less than 2^256.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.InvalidRError'\n });\n }\n}\n/** Thrown when the signature has an invalid `s` value. */\nexport class InvalidSError extends Errors.BaseError {\n constructor({ value }) {\n super(`Value \\`${value}\\` is an invalid s value. s must be a positive integer less than 2^256.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.InvalidSError'\n });\n }\n}\n/** Thrown when the signature has an invalid `yParity` value. */\nexport class InvalidYParityError extends Errors.BaseError {\n constructor({ value }) {\n super(`Value \\`${value}\\` is an invalid y-parity value. Y-parity must be 0 or 1.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.InvalidYParityError'\n });\n }\n}\n/** Thrown when the signature has an invalid `v` value. */\nexport class InvalidVError extends Errors.BaseError {\n constructor({ value }) {\n super(`Value \\`${value}\\` is an invalid v value. v must be 27, 28 or >=35.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Signature.InvalidVError'\n });\n }\n}\n//# sourceMappingURL=Signature.js.map","import * as AbiParameters from '../AbiParameters.js';\nimport * as Address from '../Address.js';\nimport * as Bytes from '../Bytes.js';\nimport * as Errors from '../Errors.js';\nimport * as Hex from '../Hex.js';\nimport { integerRegex } from '../Solidity.js';\n/** @internal */\nexport function decodeParameter(cursor, param, options) {\n const { checksumAddress, staticPosition } = options;\n const arrayComponents = getArrayComponents(param.type);\n if (arrayComponents) {\n const [length, type] = arrayComponents;\n return decodeArray(cursor, { ...param, type }, { checksumAddress, length, staticPosition });\n }\n if (param.type === 'tuple')\n return decodeTuple(cursor, param, {\n checksumAddress,\n staticPosition,\n });\n if (param.type === 'address')\n return decodeAddress(cursor, { checksum: checksumAddress });\n if (param.type === 'bool')\n return decodeBool(cursor);\n if (param.type.startsWith('bytes'))\n return decodeBytes(cursor, param, { staticPosition });\n if (param.type.startsWith('uint') || param.type.startsWith('int'))\n return decodeNumber(cursor, param);\n if (param.type === 'string')\n return decodeString(cursor, { staticPosition });\n throw new AbiParameters.InvalidTypeError(param.type);\n}\nconst sizeOfLength = 32;\nconst sizeOfOffset = 32;\n/** @internal */\nexport function decodeAddress(cursor, options = {}) {\n const { checksum = false } = options;\n const value = cursor.readBytes(32);\n const wrap = (address) => checksum ? Address.checksum(address) : address;\n return [wrap(Hex.fromBytes(Bytes.slice(value, -20))), 32];\n}\n/** @internal */\nexport function decodeArray(cursor, param, options) {\n const { checksumAddress, length, staticPosition } = options;\n // If the length of the array is not known in advance (dynamic array),\n // this means we will need to wonder off to the pointer and decode.\n if (!length) {\n // Dealing with a dynamic type, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset));\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset;\n const startOfData = start + sizeOfLength;\n // Get the length of the array from the offset.\n cursor.setPosition(start);\n const length = Bytes.toNumber(cursor.readBytes(sizeOfLength));\n // Check if the array has any dynamic children.\n const dynamicChild = hasDynamicChild(param);\n let consumed = 0;\n const value = [];\n for (let i = 0; i < length; ++i) {\n // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n // Otherwise, elements will be the size of their encoding (consumed bytes).\n cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed));\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: startOfData,\n });\n consumed += consumed_;\n value.push(data);\n }\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return [value, 32];\n }\n // If the length of the array is known in advance,\n // and the length of an element deeply nested in the array is not known,\n // we need to decode the offset of the array data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset));\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset;\n const value = [];\n for (let i = 0; i < length; ++i) {\n // Move cursor along to the next slot (next offset pointer).\n cursor.setPosition(start + i * 32);\n const [data] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: start,\n });\n value.push(data);\n }\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return [value, 32];\n }\n // If the length of the array is known in advance and the array is deeply static,\n // then we can just decode each element in sequence.\n let consumed = 0;\n const value = [];\n for (let i = 0; i < length; ++i) {\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: staticPosition + consumed,\n });\n consumed += consumed_;\n value.push(data);\n }\n return [value, consumed];\n}\n/** @internal */\nexport function decodeBool(cursor) {\n return [Bytes.toBoolean(cursor.readBytes(32), { size: 32 }), 32];\n}\n/** @internal */\nexport function decodeBytes(cursor, param, { staticPosition }) {\n const [_, size] = param.type.split('bytes');\n if (!size) {\n // Dealing with dynamic types, so get the offset of the bytes data.\n const offset = Bytes.toNumber(cursor.readBytes(32));\n // Set position of the cursor to start of bytes data.\n cursor.setPosition(staticPosition + offset);\n const length = Bytes.toNumber(cursor.readBytes(32));\n // If there is no length, we have zero data.\n if (length === 0) {\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return ['0x', 32];\n }\n const data = cursor.readBytes(length);\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return [Hex.fromBytes(data), 32];\n }\n const value = Hex.fromBytes(cursor.readBytes(Number.parseInt(size, 10), 32));\n return [value, 32];\n}\n/** @internal */\nexport function decodeNumber(cursor, param) {\n const signed = param.type.startsWith('int');\n const size = Number.parseInt(param.type.split('int')[1] || '256', 10);\n const value = cursor.readBytes(32);\n return [\n size > 48\n ? Bytes.toBigInt(value, { signed })\n : Bytes.toNumber(value, { signed }),\n 32,\n ];\n}\n/** @internal */\nexport function decodeTuple(cursor, param, options) {\n const { checksumAddress, staticPosition } = options;\n // Tuples can have unnamed components (i.e. they are arrays), so we must\n // determine whether the tuple is named or unnamed. In the case of a named\n // tuple, the value will be an object where each property is the name of the\n // component. In the case of an unnamed tuple, the value will be an array.\n const hasUnnamedChild = param.components.length === 0 || param.components.some(({ name }) => !name);\n // Initialize the value to an object or an array, depending on whether the\n // tuple is named or unnamed.\n const value = hasUnnamedChild ? [] : {};\n let consumed = 0;\n // If the tuple has a dynamic child, we must first decode the offset to the\n // tuple data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the tuple data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset));\n // Start is the static position of referencing slot + offset.\n const start = staticPosition + offset;\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i];\n cursor.setPosition(start + consumed);\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition: start,\n });\n consumed += consumed_;\n value[hasUnnamedChild ? i : component?.name] = data;\n }\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return [value, 32];\n }\n // If the tuple has static children, we can just decode each component\n // in sequence.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i];\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition,\n });\n value[hasUnnamedChild ? i : component?.name] = data;\n consumed += consumed_;\n }\n return [value, consumed];\n}\n/** @internal */\nexport function decodeString(cursor, { staticPosition }) {\n // Get offset to start of string data.\n const offset = Bytes.toNumber(cursor.readBytes(32));\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset;\n cursor.setPosition(start);\n const length = Bytes.toNumber(cursor.readBytes(32));\n // If there is no length, we have zero data (empty string).\n if (length === 0) {\n cursor.setPosition(staticPosition + 32);\n return ['', 32];\n }\n const data = cursor.readBytes(length, 32);\n const value = Bytes.toString(Bytes.trimLeft(data));\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32);\n return [value, 32];\n}\n/** @internal */\nexport function prepareParameters({ checksumAddress, parameters, values, }) {\n const preparedParameters = [];\n for (let i = 0; i < parameters.length; i++) {\n preparedParameters.push(prepareParameter({\n checksumAddress,\n parameter: parameters[i],\n value: values[i],\n }));\n }\n return preparedParameters;\n}\n/** @internal */\nexport function prepareParameter({ checksumAddress = false, parameter: parameter_, value, }) {\n const parameter = parameter_;\n const arrayComponents = getArrayComponents(parameter.type);\n if (arrayComponents) {\n const [length, type] = arrayComponents;\n return encodeArray(value, {\n checksumAddress,\n length,\n parameter: {\n ...parameter,\n type,\n },\n });\n }\n if (parameter.type === 'tuple') {\n return encodeTuple(value, {\n checksumAddress,\n parameter: parameter,\n });\n }\n if (parameter.type === 'address') {\n return encodeAddress(value, {\n checksum: checksumAddress,\n });\n }\n if (parameter.type === 'bool') {\n return encodeBoolean(value);\n }\n if (parameter.type.startsWith('uint') || parameter.type.startsWith('int')) {\n const signed = parameter.type.startsWith('int');\n const [, , size = '256'] = integerRegex.exec(parameter.type) ?? [];\n return encodeNumber(value, {\n signed,\n size: Number(size),\n });\n }\n if (parameter.type.startsWith('bytes')) {\n return encodeBytes(value, { type: parameter.type });\n }\n if (parameter.type === 'string') {\n return encodeString(value);\n }\n throw new AbiParameters.InvalidTypeError(parameter.type);\n}\n/** @internal */\nexport function encode(preparedParameters) {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0;\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i];\n if (dynamic)\n staticSize += 32;\n else\n staticSize += Hex.size(encoded);\n }\n // 2. Split the parameters into static and dynamic parts.\n const staticParameters = [];\n const dynamicParameters = [];\n let dynamicSize = 0;\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i];\n if (dynamic) {\n staticParameters.push(Hex.fromNumber(staticSize + dynamicSize, { size: 32 }));\n dynamicParameters.push(encoded);\n dynamicSize += Hex.size(encoded);\n }\n else {\n staticParameters.push(encoded);\n }\n }\n // 3. Concatenate static and dynamic parts.\n return Hex.concat(...staticParameters, ...dynamicParameters);\n}\n/** @internal */\nexport function encodeAddress(value, options) {\n const { checksum = false } = options;\n Address.assert(value, { strict: checksum });\n return {\n dynamic: false,\n encoded: Hex.padLeft(value.toLowerCase()),\n };\n}\n/** @internal */\nexport function encodeArray(value, options) {\n const { checksumAddress, length, parameter } = options;\n const dynamic = length === null;\n if (!Array.isArray(value))\n throw new AbiParameters.InvalidArrayError(value);\n if (!dynamic && value.length !== length)\n throw new AbiParameters.ArrayLengthMismatchError({\n expectedLength: length,\n givenLength: value.length,\n type: `${parameter.type}[${length}]`,\n });\n let dynamicChild = false;\n const preparedParameters = [];\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter,\n value: value[i],\n });\n if (preparedParam.dynamic)\n dynamicChild = true;\n preparedParameters.push(preparedParam);\n }\n if (dynamic || dynamicChild) {\n const data = encode(preparedParameters);\n if (dynamic) {\n const length = Hex.fromNumber(preparedParameters.length, { size: 32 });\n return {\n dynamic: true,\n encoded: preparedParameters.length > 0 ? Hex.concat(length, data) : length,\n };\n }\n if (dynamicChild)\n return { dynamic: true, encoded: data };\n }\n return {\n dynamic: false,\n encoded: Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n };\n}\n/** @internal */\nexport function encodeBytes(value, { type }) {\n const [, parametersize] = type.split('bytes');\n const bytesSize = Hex.size(value);\n if (!parametersize) {\n let value_ = value;\n // If the size is not divisible by 32 bytes, pad the end\n // with empty bytes to the ceiling 32 bytes.\n if (bytesSize % 32 !== 0)\n value_ = Hex.padRight(value_, Math.ceil((value.length - 2) / 2 / 32) * 32);\n return {\n dynamic: true,\n encoded: Hex.concat(Hex.padLeft(Hex.fromNumber(bytesSize, { size: 32 })), value_),\n };\n }\n if (bytesSize !== Number.parseInt(parametersize, 10))\n throw new AbiParameters.BytesSizeMismatchError({\n expectedSize: Number.parseInt(parametersize, 10),\n value,\n });\n return { dynamic: false, encoded: Hex.padRight(value) };\n}\n/** @internal */\nexport function encodeBoolean(value) {\n if (typeof value !== 'boolean')\n throw new Errors.BaseError(`Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`);\n return { dynamic: false, encoded: Hex.padLeft(Hex.fromBoolean(value)) };\n}\n/** @internal */\nexport function encodeNumber(value, { signed, size }) {\n if (typeof size === 'number') {\n const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n;\n const min = signed ? -max - 1n : 0n;\n if (value > max || value < min)\n throw new Hex.IntegerOutOfRangeError({\n max: max.toString(),\n min: min.toString(),\n signed,\n size: size / 8,\n value: value.toString(),\n });\n }\n return {\n dynamic: false,\n encoded: Hex.fromNumber(value, {\n size: 32,\n signed,\n }),\n };\n}\n/** @internal */\nexport function encodeString(value) {\n const hexValue = Hex.fromString(value);\n const partsLength = Math.ceil(Hex.size(hexValue) / 32);\n const parts = [];\n for (let i = 0; i < partsLength; i++) {\n parts.push(Hex.padRight(Hex.slice(hexValue, i * 32, (i + 1) * 32)));\n }\n return {\n dynamic: true,\n encoded: Hex.concat(Hex.padRight(Hex.fromNumber(Hex.size(hexValue), { size: 32 })), ...parts),\n };\n}\n/** @internal */\nexport function encodeTuple(value, options) {\n const { checksumAddress, parameter } = options;\n let dynamic = false;\n const preparedParameters = [];\n for (let i = 0; i < parameter.components.length; i++) {\n const param_ = parameter.components[i];\n const index = Array.isArray(value) ? i : param_.name;\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter: param_,\n value: value[index],\n });\n preparedParameters.push(preparedParam);\n if (preparedParam.dynamic)\n dynamic = true;\n }\n return {\n dynamic,\n encoded: dynamic\n ? encode(preparedParameters)\n : Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n };\n}\n/** @internal */\nexport function getArrayComponents(type) {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/);\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2] ? Number(matches[2]) : null, matches[1]]\n : undefined;\n}\n/** @internal */\nexport function hasDynamicChild(param) {\n const { type } = param;\n if (type === 'string')\n return true;\n if (type === 'bytes')\n return true;\n if (type.endsWith('[]'))\n return true;\n if (type === 'tuple')\n return param.components?.some(hasDynamicChild);\n const arrayComponents = getArrayComponents(param.type);\n if (arrayComponents &&\n hasDynamicChild({\n ...param,\n type: arrayComponents[1],\n }))\n return true;\n return false;\n}\n//# sourceMappingURL=abiParameters.js.map","import * as Errors from '../Errors.js';\nconst staticCursor = {\n bytes: new Uint8Array(),\n dataView: new DataView(new ArrayBuffer(0)),\n position: 0,\n positionReadCount: new Map(),\n recursiveReadCount: 0,\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n assertReadLimit() {\n if (this.recursiveReadCount >= this.recursiveReadLimit)\n throw new RecursiveReadLimitExceededError({\n count: this.recursiveReadCount + 1,\n limit: this.recursiveReadLimit,\n });\n },\n assertPosition(position) {\n if (position < 0 || position > this.bytes.length - 1)\n throw new PositionOutOfBoundsError({\n length: this.bytes.length,\n position,\n });\n },\n decrementPosition(offset) {\n if (offset < 0)\n throw new NegativeOffsetError({ offset });\n const position = this.position - offset;\n this.assertPosition(position);\n this.position = position;\n },\n getReadCount(position) {\n return this.positionReadCount.get(position || this.position) || 0;\n },\n incrementPosition(offset) {\n if (offset < 0)\n throw new NegativeOffsetError({ offset });\n const position = this.position + offset;\n this.assertPosition(position);\n this.position = position;\n },\n inspectByte(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position);\n return this.bytes[position];\n },\n inspectBytes(length, position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + length - 1);\n return this.bytes.subarray(position, position + length);\n },\n inspectUint8(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position);\n return this.bytes[position];\n },\n inspectUint16(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 1);\n return this.dataView.getUint16(position);\n },\n inspectUint24(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 2);\n return ((this.dataView.getUint16(position) << 8) +\n this.dataView.getUint8(position + 2));\n },\n inspectUint32(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 3);\n return this.dataView.getUint32(position);\n },\n pushByte(byte) {\n this.assertPosition(this.position);\n this.bytes[this.position] = byte;\n this.position++;\n },\n pushBytes(bytes) {\n this.assertPosition(this.position + bytes.length - 1);\n this.bytes.set(bytes, this.position);\n this.position += bytes.length;\n },\n pushUint8(value) {\n this.assertPosition(this.position);\n this.bytes[this.position] = value;\n this.position++;\n },\n pushUint16(value) {\n this.assertPosition(this.position + 1);\n this.dataView.setUint16(this.position, value);\n this.position += 2;\n },\n pushUint24(value) {\n this.assertPosition(this.position + 2);\n this.dataView.setUint16(this.position, value >> 8);\n this.dataView.setUint8(this.position + 2, value & ~4294967040);\n this.position += 3;\n },\n pushUint32(value) {\n this.assertPosition(this.position + 3);\n this.dataView.setUint32(this.position, value);\n this.position += 4;\n },\n readByte() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectByte();\n this.position++;\n return value;\n },\n readBytes(length, size) {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectBytes(length);\n this.position += size ?? length;\n return value;\n },\n readUint8() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint8();\n this.position += 1;\n return value;\n },\n readUint16() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint16();\n this.position += 2;\n return value;\n },\n readUint24() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint24();\n this.position += 3;\n return value;\n },\n readUint32() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint32();\n this.position += 4;\n return value;\n },\n get remaining() {\n return this.bytes.length - this.position;\n },\n setPosition(position) {\n const oldPosition = this.position;\n this.assertPosition(position);\n this.position = position;\n return () => (this.position = oldPosition);\n },\n _touch() {\n if (this.recursiveReadLimit === Number.POSITIVE_INFINITY)\n return;\n const count = this.getReadCount();\n this.positionReadCount.set(this.position, count + 1);\n if (count > 0)\n this.recursiveReadCount++;\n },\n};\n/** @internal */\nexport function create(bytes, { recursiveReadLimit = 8_192 } = {}) {\n const cursor = Object.create(staticCursor);\n cursor.bytes = bytes;\n cursor.dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n cursor.positionReadCount = new Map();\n cursor.recursiveReadLimit = recursiveReadLimit;\n return cursor;\n}\n/** @internal */\nexport class NegativeOffsetError extends Errors.BaseError {\n constructor({ offset }) {\n super(`Offset \\`${offset}\\` cannot be negative.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Cursor.NegativeOffsetError'\n });\n }\n}\n/** @internal */\nexport class PositionOutOfBoundsError extends Errors.BaseError {\n constructor({ length, position }) {\n super(`Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Cursor.PositionOutOfBoundsError'\n });\n }\n}\n/** @internal */\nexport class RecursiveReadLimitExceededError extends Errors.BaseError {\n constructor({ count, limit }) {\n super(`Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Cursor.RecursiveReadLimitExceededError'\n });\n }\n}\n//# sourceMappingURL=cursor.js.map","import * as abitype from 'abitype';\nimport * as Address from './Address.js';\nimport * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hex from './Hex.js';\nimport * as internal from './internal/abiParameters.js';\nimport * as Cursor from './internal/cursor.js';\nimport * as Solidity from './Solidity.js';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(parameters, data, options = {}) {\n const { as = 'Array', checksumAddress = false } = options;\n const bytes = typeof data === 'string' ? Bytes.fromHex(data) : data;\n const cursor = Cursor.create(bytes);\n if (Bytes.size(bytes) === 0 && parameters.length > 0)\n throw new ZeroDataError();\n if (Bytes.size(bytes) && Bytes.size(bytes) < 32)\n throw new DataSizeTooSmallError({\n data: typeof data === 'string' ? data : Hex.fromBytes(data),\n parameters: parameters,\n size: Bytes.size(bytes),\n });\n let consumed = 0;\n const values = as === 'Array' ? [] : {};\n for (let i = 0; i < parameters.length; ++i) {\n const param = parameters[i];\n cursor.setPosition(consumed);\n const [data, consumed_] = internal.decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: 0,\n });\n consumed += consumed_;\n if (as === 'Array')\n values.push(data);\n else\n values[param.name ?? i] = data;\n }\n return values;\n}\n/**\n * Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * AbiParameters.from(['string', 'uint', 'bool']),\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * Specify **JSON ABI** Parameters as schema:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * [\n * { type: 'string', name: 'name' },\n * { type: 'uint', name: 'age' },\n * { type: 'bool', name: 'isOwner' },\n * ],\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @param parameters - The set of ABI parameters to encode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param values - The set of primitive values that correspond to the ABI types defined in `parameters`.\n * @returns ABI encoded data.\n */\nexport function encode(parameters, values, options) {\n const { checksumAddress = false } = options ?? {};\n if (parameters.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: parameters.length,\n givenLength: values.length,\n });\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParameters = internal.prepareParameters({\n checksumAddress,\n parameters: parameters,\n values: values,\n });\n const data = internal.encode(preparedParameters);\n if (data.length === 0)\n return '0x';\n return data;\n}\n/**\n * Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const encoded = AbiParameters.encodePacked(\n * ['address', 'string'],\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 'hello world'],\n * )\n * // @log: '0xd8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * ```\n *\n * @param types - Set of ABI types to pack encode.\n * @param values - The set of primitive values that correspond to the ABI types defined in `types`.\n * @returns The encoded packed data.\n */\nexport function encodePacked(types, values) {\n if (types.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: types.length,\n givenLength: values.length,\n });\n const data = [];\n for (let i = 0; i < types.length; i++) {\n const type = types[i];\n const value = values[i];\n data.push(encodePacked.encode(type, value));\n }\n return Hex.concat(...data);\n}\n(function (encodePacked) {\n // eslint-disable-next-line jsdoc/require-jsdoc\n function encode(type, value, isArray = false) {\n if (type === 'address') {\n const address = value;\n Address.assert(address);\n return Hex.padLeft(address.toLowerCase(), isArray ? 32 : 0);\n }\n if (type === 'string')\n return Hex.fromString(value);\n if (type === 'bytes')\n return value;\n if (type === 'bool')\n return Hex.padLeft(Hex.fromBoolean(value), isArray ? 32 : 1);\n const intMatch = type.match(Solidity.integerRegex);\n if (intMatch) {\n const [_type, baseType, bits = '256'] = intMatch;\n const size = Number.parseInt(bits, 10) / 8;\n return Hex.fromNumber(value, {\n size: isArray ? 32 : size,\n signed: baseType === 'int',\n });\n }\n const bytesMatch = type.match(Solidity.bytesRegex);\n if (bytesMatch) {\n const [_type, size] = bytesMatch;\n if (Number.parseInt(size, 10) !== (value.length - 2) / 2)\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size, 10),\n value: value,\n });\n return Hex.padRight(value, isArray ? 32 : 0);\n }\n const arrayMatch = type.match(Solidity.arrayRegex);\n if (arrayMatch && Array.isArray(value)) {\n const [_type, childType] = arrayMatch;\n const data = [];\n for (let i = 0; i < value.length; i++) {\n data.push(encode(childType, value[i], true));\n }\n if (data.length === 0)\n return '0x';\n return Hex.concat(...data);\n }\n throw new InvalidTypeError(type);\n }\n encodePacked.encode = encode;\n})(encodePacked || (encodePacked = {}));\n/**\n * Formats {@link ox#AbiParameters.AbiParameters} into **Human Readable ABI Parameters**.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const formatted = AbiParameters.format([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param parameters - The ABI Parameters to format.\n * @returns The formatted ABI Parameters .\n */\nexport function format(parameters) {\n return abitype.formatAbiParameters(parameters);\n}\n/**\n * Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed {@link ox#AbiParameters.AbiParameters}.\n *\n * @example\n * ### JSON Parameters\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable Parameters\n *\n * Human Readable ABI Parameters can be parsed into a typed {@link ox#AbiParameters.AbiParameters}:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from('address spender, uint256 amount')\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'Foo foo, address bar',\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param parameters - The ABI Parameters to parse.\n * @returns The typed ABI Parameters.\n */\nexport function from(parameters) {\n if (Array.isArray(parameters) && typeof parameters[0] === 'string')\n return abitype.parseAbiParameters(parameters);\n if (typeof parameters === 'string')\n return abitype.parseAbiParameters(parameters);\n return parameters;\n}\n/**\n * Throws when the data size is too small for the given parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x010f')\n * // ↑ ❌ 2 bytes\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass a valid data size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ✅ 32 bytes\n * ```\n */\nexport class DataSizeTooSmallError extends Errors.BaseError {\n constructor({ data, parameters, size, }) {\n super(`Data size of ${size} bytes is too small for given parameters.`, {\n metaMessages: [\n `Params: (${abitype.formatAbiParameters(parameters)})`,\n `Data: ${data} (${size} bytes)`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.DataSizeTooSmallError'\n });\n }\n}\n/**\n * Throws when zero data is provided, but data is expected.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x')\n * // ↑ ❌ zero data\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass valid data.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ✅ 32 bytes\n * ```\n */\nexport class ZeroDataError extends Errors.BaseError {\n constructor() {\n super('Cannot decode zero data (\"0x\") with ABI parameters.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.ZeroDataError'\n });\n }\n}\n/**\n * The length of the array value does not match the length specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('uint256[3]'), [[69n, 420n]])\n * // ↑ expected: 3 ↑ ❌ length: 2\n * // @error: AbiParameters.ArrayLengthMismatchError: ABI encoding array length mismatch\n * // @error: for type `uint256[3]`. Expected: `3`. Given: `2`.\n * ```\n *\n * ### Solution\n *\n * Pass an array of the correct length.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [[69n, 420n, 69n]])\n * // ↑ ✅ length: 3\n * ```\n */\nexport class ArrayLengthMismatchError extends Errors.BaseError {\n constructor({ expectedLength, givenLength, type, }) {\n super(`Array length mismatch for type \\`${type}\\`. Expected: \\`${expectedLength}\\`. Given: \\`${givenLength}\\`.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.ArrayLengthMismatchError'\n });\n }\n}\n/**\n * The size of the bytes value does not match the size specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('bytes8'), [['0xdeadbeefdeadbeefdeadbeef']])\n * // ↑ expected: 8 bytes ↑ ❌ size: 12 bytes\n * // @error: BytesSizeMismatchError: Size of bytes \"0xdeadbeefdeadbeefdeadbeef\"\n * // @error: (bytes12) does not match expected size (bytes8).\n * ```\n *\n * ### Solution\n *\n * Pass a bytes value of the correct size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['bytes8']), ['0xdeadbeefdeadbeef'])\n * // ↑ ✅ size: 8 bytes\n * ```\n */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n constructor({ expectedSize, value, }) {\n super(`Size of bytes \"${value}\" (bytes${Hex.size(value)}) does not match expected size (bytes${expectedSize}).`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.BytesSizeMismatchError'\n });\n }\n}\n/**\n * The length of the values to encode does not match the length of the ABI parameters.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['string', 'uint256']), ['hello'])\n * // @error: LengthMismatchError: ABI encoding params/values length mismatch.\n * // @error: Expected length (params): 2\n * // @error: Given length (values): 1\n * ```\n *\n * ### Solution\n *\n * Pass the correct number of values to encode.\n *\n * ### Solution\n *\n * Pass a [valid ABI type](https://docs.soliditylang.org/en/develop/abi-spec.html#types).\n */\nexport class LengthMismatchError extends Errors.BaseError {\n constructor({ expectedLength, givenLength, }) {\n super([\n 'ABI encoding parameters/values length mismatch.',\n `Expected length (parameters): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'));\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.LengthMismatchError'\n });\n }\n}\n/**\n * The value provided is not a valid array as specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [69])\n * ```\n *\n * ### Solution\n *\n * Pass an array value.\n */\nexport class InvalidArrayError extends Errors.BaseError {\n constructor(value) {\n super(`Value \\`${value}\\` is not a valid array.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.InvalidArrayError'\n });\n }\n}\n/**\n * Throws when the ABI parameter type is invalid.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'lol' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ❌ invalid type\n * // @error: AbiParameters.InvalidTypeError: Type `lol` is not a valid ABI Type.\n * ```\n */\nexport class InvalidTypeError extends Errors.BaseError {\n constructor(type) {\n super(`Type \\`${type}\\` is not a valid ABI Type.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiParameters.InvalidTypeError'\n });\n }\n}\n//# sourceMappingURL=AbiParameters.js.map","import * as AbiParameters from './AbiParameters.js';\nimport * as Address from './Address.js';\nimport * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hash from './Hash.js';\nimport * as Hex from './Hex.js';\nimport * as Json from './Json.js';\nimport * as Solidity from './Solidity.js';\n/**\n * Asserts that [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.assert({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * ```\n *\n * @param value - The Typed Data to validate.\n */\nexport function assert(value) {\n const { domain, message, primaryType, types } = value;\n const validateData = (struct, data) => {\n for (const param of struct) {\n const { name, type } = param;\n const value = data[name];\n const integerMatch = type.match(Solidity.integerRegex);\n if (integerMatch &&\n (typeof value === 'number' || typeof value === 'bigint')) {\n const [, base, size_] = integerMatch;\n // If number cannot be cast to a sized hex value, it is out of range\n // and will throw.\n Hex.fromNumber(value, {\n signed: base === 'int',\n size: Number.parseInt(size_ ?? '', 10) / 8,\n });\n }\n if (type === 'address' &&\n typeof value === 'string' &&\n !Address.validate(value))\n throw new Address.InvalidAddressError({\n address: value,\n cause: new Address.InvalidInputError(),\n });\n const bytesMatch = type.match(Solidity.bytesRegex);\n if (bytesMatch) {\n const [, size] = bytesMatch;\n if (size && Hex.size(value) !== Number.parseInt(size, 10))\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size, 10),\n givenSize: Hex.size(value),\n });\n }\n const struct = types[type];\n if (struct) {\n validateReference(type);\n validateData(struct, value);\n }\n }\n };\n // Validate domain types.\n if (types.EIP712Domain && domain) {\n if (typeof domain !== 'object')\n throw new InvalidDomainError({ domain });\n validateData(types.EIP712Domain, domain);\n }\n // Validate message types.\n if (primaryType !== 'EIP712Domain') {\n if (types[primaryType])\n validateData(types[primaryType], message);\n else\n throw new InvalidPrimaryTypeError({ primaryType, types });\n }\n}\n/**\n * Creates [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) [`domainSeparator`](https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator) for the provided domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.domainSeparator({\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * })\n * // @log: '0x9911ee4f58a7059a8f5385248040e6984d80e2c849500fe6a4d11c4fa98c2af3'\n * ```\n *\n * @param domain - The domain for which to create the domain separator.\n * @returns The domain separator.\n */\nexport function domainSeparator(domain) {\n return hashDomain({\n domain,\n });\n}\n/**\n * Encodes typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712): `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`.\n *\n * @example\n * ```ts twoslash\n * import { TypedData, Hash } from 'ox'\n *\n * const data = TypedData.encode({ // [!code focus:33]\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * types: {\n * Person: [\n * { name: 'name', type: 'string' },\n * { name: 'wallet', type: 'address' },\n * ],\n * Mail: [\n * { name: 'from', type: 'Person' },\n * { name: 'to', type: 'Person' },\n * { name: 'contents', type: 'string' },\n * ],\n * },\n * primaryType: 'Mail',\n * message: {\n * from: {\n * name: 'Cow',\n * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n * },\n * to: {\n * name: 'Bob',\n * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n * },\n * contents: 'Hello, Bob!',\n * },\n * })\n * // @log: '0x19012fdf3441fcaf4f30c7e16292b258a5d7054a4e2e00dbd7b7d2f467f2b8fb9413c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e'\n * // @log: (0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message))\n *\n * const hash = Hash.keccak256(data)\n * ```\n *\n * @param value - The Typed Data to encode.\n * @returns The encoded Typed Data.\n */\nexport function encode(value) {\n const { domain = {}, message, primaryType } = value;\n const types = {\n EIP712Domain: extractEip712DomainTypes(domain),\n ...value.types,\n };\n // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n // as we can't statically check this with TypeScript.\n assert({\n domain,\n message,\n primaryType,\n types,\n });\n // Typed Data Format: `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`\n const parts = ['0x19', '0x01'];\n if (domain)\n parts.push(hashDomain({\n domain,\n types,\n }));\n if (primaryType !== 'EIP712Domain')\n parts.push(hashStruct({\n data: message,\n primaryType,\n types,\n }));\n return Hex.concat(...parts);\n}\n/**\n * Encodes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for the provided primaryType.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.encodeType({\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * primaryType: 'Foo',\n * })\n * // @log: 'Foo(address address,string name,string foo)'\n * ```\n *\n * @param value - The Typed Data schema.\n * @returns The encoded type.\n */\nexport function encodeType(value) {\n const { primaryType, types } = value;\n let result = '';\n const unsortedDeps = findTypeDependencies({ primaryType, types });\n unsortedDeps.delete(primaryType);\n const deps = [primaryType, ...Array.from(unsortedDeps).sort()];\n for (const type of deps) {\n result += `${type}(${(types[type] ?? [])\n .map(({ name, type: t }) => `${t} ${name}`)\n .join(',')})`;\n }\n return result;\n}\n/**\n * Gets [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for EIP-721 domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.extractEip712DomainTypes({\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * })\n * // @log: [\n * // @log: { 'name': 'name', 'type': 'string' },\n * // @log: { 'name': 'version', 'type': 'string' },\n * // @log: { 'name': 'chainId', 'type': 'uint256' },\n * // @log: { 'name': 'verifyingContract', 'type': 'address' },\n * // @log: ]\n * ```\n *\n * @param domain - The EIP-712 domain.\n * @returns The EIP-712 domain schema.\n */\nexport function extractEip712DomainTypes(domain) {\n return [\n typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n domain?.version && { name: 'version', type: 'string' },\n (typeof domain?.chainId === 'number' ||\n typeof domain?.chainId === 'bigint') && {\n name: 'chainId',\n type: 'uint256',\n },\n domain?.verifyingContract && {\n name: 'verifyingContract',\n type: 'address',\n },\n domain?.salt && { name: 'salt', type: 'bytes32' },\n ].filter(Boolean);\n}\n/**\n * Gets the payload to use for signing typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712).\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, TypedData, Hash } from 'ox'\n *\n * const payload = TypedData.getSignPayload({ // [!code focus:99]\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * types: {\n * Person: [\n * { name: 'name', type: 'string' },\n * { name: 'wallet', type: 'address' },\n * ],\n * Mail: [\n * { name: 'from', type: 'Person' },\n * { name: 'to', type: 'Person' },\n * { name: 'contents', type: 'string' },\n * ],\n * },\n * primaryType: 'Mail',\n * message: {\n * from: {\n * name: 'Cow',\n * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n * },\n * to: {\n * name: 'Bob',\n * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n * },\n * contents: 'Hello, Bob!',\n * },\n * })\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param value - The typed data to get the sign payload for.\n * @returns The payload to use for signing.\n */\nexport function getSignPayload(value) {\n return Hash.keccak256(encode(value));\n}\n/**\n * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.hashDomain({\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * })\n * // @log: '0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1'\n * ```\n *\n * @param value - The Typed Data domain and types.\n * @returns The hashed domain.\n */\nexport function hashDomain(value) {\n const { domain, types } = value;\n return hashStruct({\n data: domain,\n primaryType: 'EIP712Domain',\n types: {\n ...types,\n EIP712Domain: types?.EIP712Domain || extractEip712DomainTypes(domain),\n },\n });\n}\n/**\n * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) struct.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.hashStruct({\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * primaryType: 'Foo',\n * data: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: '0x996fb3b6d48c50312d69abdd4c1b6fb02057c85aa86bb8d04c6f023326a168ce'\n * ```\n *\n * @param value - The Typed Data struct to hash.\n * @returns The hashed Typed Data struct.\n */\nexport function hashStruct(value) {\n const { data, primaryType, types } = value;\n const encoded = encodeData({\n data,\n primaryType,\n types,\n });\n return Hash.keccak256(encoded);\n}\n/**\n * Serializes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema into string.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.serialize({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: \"{\"domain\":{},\"message\":{\"address\":\"0xb9cab4f0e46f7f6b1024b5a7463734fa68e633f9\",\"name\":\"jxom\",\"foo\":\"0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9\"},\"primaryType\":\"Foo\",\"types\":{\"Foo\":[{\"name\":\"address\",\"type\":\"address\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"foo\",\"type\":\"string\"}]}}\"\n * ```\n *\n * @param value - The Typed Data schema to serialize.\n * @returns The serialized Typed Data schema. w\n */\nexport function serialize(value) {\n const { domain: domain_, message: message_, primaryType, types, } = value;\n const normalizeData = (struct, value) => {\n const data = { ...value };\n for (const param of struct) {\n const { name, type } = param;\n if (type === 'address')\n data[name] = data[name].toLowerCase();\n }\n return data;\n };\n const domain = (() => {\n if (!domain_)\n return {};\n const type = types.EIP712Domain ?? extractEip712DomainTypes(domain_);\n return normalizeData(type, domain_);\n })();\n const message = (() => {\n if (primaryType === 'EIP712Domain')\n return undefined;\n if (!types[primaryType])\n return {};\n return normalizeData(types[primaryType], message_);\n })();\n return Json.stringify({ domain, message, primaryType, types }, (_, value) => {\n if (typeof value === 'bigint')\n return value.toString();\n return value;\n });\n}\n/**\n * Checks if [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * const valid = TypedData.validate({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: true\n * ```\n *\n * @param value - The Typed Data to validate.\n */\nexport function validate(value) {\n try {\n assert(value);\n return true;\n }\n catch {\n return false;\n }\n}\n/** Thrown when the bytes size of a typed data value does not match the expected size. */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n constructor({ expectedSize, givenSize, }) {\n super(`Expected bytes${expectedSize}, got bytes${givenSize}.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'TypedData.BytesSizeMismatchError'\n });\n }\n}\n/** Thrown when the domain is invalid. */\nexport class InvalidDomainError extends Errors.BaseError {\n constructor({ domain }) {\n super(`Invalid domain \"${Json.stringify(domain)}\".`, {\n metaMessages: ['Must be a valid EIP-712 domain.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'TypedData.InvalidDomainError'\n });\n }\n}\n/** Thrown when the primary type of a typed data value is invalid. */\nexport class InvalidPrimaryTypeError extends Errors.BaseError {\n constructor({ primaryType, types, }) {\n super(`Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`, {\n metaMessages: ['Check that the primary type is a key in `types`.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'TypedData.InvalidPrimaryTypeError'\n });\n }\n}\n/** Thrown when the struct type is not a valid type. */\nexport class InvalidStructTypeError extends Errors.BaseError {\n constructor({ type }) {\n super(`Struct type \"${type}\" is invalid.`, {\n metaMessages: ['Struct type must not be a Solidity type.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'TypedData.InvalidStructTypeError'\n });\n }\n}\n/** @internal */\nexport function encodeData(value) {\n const { data, primaryType, types } = value;\n const encodedTypes = [{ type: 'bytes32' }];\n const encodedValues = [hashType({ primaryType, types })];\n for (const field of types[primaryType] ?? []) {\n const [type, value] = encodeField({\n types,\n name: field.name,\n type: field.type,\n value: data[field.name],\n });\n encodedTypes.push(type);\n encodedValues.push(value);\n }\n return AbiParameters.encode(encodedTypes, encodedValues);\n}\n/** @internal */\nexport function hashType(value) {\n const { primaryType, types } = value;\n const encodedHashType = Hex.fromString(encodeType({ primaryType, types }));\n return Hash.keccak256(encodedHashType);\n}\n/** @internal */\nexport function encodeField(properties) {\n let { types, name, type, value } = properties;\n if (types[type] !== undefined)\n return [\n { type: 'bytes32' },\n Hash.keccak256(encodeData({ data: value, primaryType: type, types })),\n ];\n if (type === 'bytes') {\n const prepend = value.length % 2 ? '0' : '';\n value = `0x${prepend + value.slice(2)}`;\n return [{ type: 'bytes32' }, Hash.keccak256(value, { as: 'Hex' })];\n }\n if (type === 'string')\n return [\n { type: 'bytes32' },\n Hash.keccak256(Bytes.fromString(value), { as: 'Hex' }),\n ];\n if (type.lastIndexOf(']') === type.length - 1) {\n const parsedType = type.slice(0, type.lastIndexOf('['));\n const typeValuePairs = value.map((item) => encodeField({\n name,\n type: parsedType,\n types,\n value: item,\n }));\n return [\n { type: 'bytes32' },\n Hash.keccak256(AbiParameters.encode(typeValuePairs.map(([t]) => t), typeValuePairs.map(([, v]) => v))),\n ];\n }\n return [{ type }, value];\n}\n/** @internal */\nexport function findTypeDependencies(value, results = new Set()) {\n const { primaryType: primaryType_, types } = value;\n const match = primaryType_.match(/^\\w*/u);\n const primaryType = match?.[0];\n if (results.has(primaryType) || types[primaryType] === undefined)\n return results;\n results.add(primaryType);\n for (const field of types[primaryType])\n findTypeDependencies({ primaryType: field.type, types }, results);\n return results;\n}\n/** @internal */\nfunction validateReference(type) {\n // Struct type must not be a Solidity type.\n if (type === 'address' ||\n type === 'bool' ||\n type === 'string' ||\n type.startsWith('bytes') ||\n type.startsWith('uint') ||\n type.startsWith('int'))\n throw new InvalidStructTypeError({ type });\n}\n//# sourceMappingURL=TypedData.js.map","// TODO(v3): Rename to `toLocalAccount` + add `source` property to define source (privateKey, mnemonic, hdKey, etc).\nimport { InvalidAddressError, } from '../errors/address.js';\nimport { isAddress, } from '../utils/address/isAddress.js';\n/**\n * @description Creates an Account from a custom signing implementation.\n *\n * @returns A Local Account.\n */\nexport function toAccount(source) {\n if (typeof source === 'string') {\n if (!isAddress(source, { strict: false }))\n throw new InvalidAddressError({ address: source });\n return {\n address: source,\n type: 'json-rpc',\n };\n }\n if (!isAddress(source.address, { strict: false }))\n throw new InvalidAddressError({ address: source.address });\n return {\n address: source.address,\n nonceManager: source.nonceManager,\n sign: source.sign,\n signAuthorization: source.signAuthorization,\n signMessage: source.signMessage,\n signTransaction: source.signTransaction,\n signTypedData: source.signTypedData,\n source: 'custom',\n type: 'local',\n };\n}\n//# sourceMappingURL=toAccount.js.map","import * as Address from '../Address.js';\nimport * as Errors from '../Errors.js';\n/** @internal */\nexport function normalizeSignature(signature) {\n let active = true;\n let current = '';\n let level = 0;\n let result = '';\n let valid = false;\n for (let i = 0; i < signature.length; i++) {\n const char = signature[i];\n // If the character is a separator, we want to reactivate.\n if (['(', ')', ','].includes(char))\n active = true;\n // If the character is a \"level\" token, we want to increment/decrement.\n if (char === '(')\n level++;\n if (char === ')')\n level--;\n // If we aren't active, we don't want to mutate the result.\n if (!active)\n continue;\n // If level === 0, we are at the definition level.\n if (level === 0) {\n if (char === ' ' && ['event', 'function', 'error', ''].includes(result))\n result = '';\n else {\n result += char;\n // If we are at the end of the definition, we must be finished.\n if (char === ')') {\n valid = true;\n break;\n }\n }\n continue;\n }\n // Ignore spaces\n if (char === ' ') {\n // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n current = '';\n active = false;\n }\n continue;\n }\n result += char;\n current += char;\n }\n if (!valid)\n throw new Errors.BaseError('Unable to normalize signature.');\n return result;\n}\n/** @internal */\nexport function isArgOfType(arg, abiParameter) {\n const argType = typeof arg;\n const abiParameterType = abiParameter.type;\n switch (abiParameterType) {\n case 'address':\n return Address.validate(arg, { strict: false });\n case 'bool':\n return argType === 'boolean';\n case 'function':\n return argType === 'string';\n case 'string':\n return argType === 'string';\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every((component, index) => {\n return isArgOfType(Object.values(arg)[index], component);\n });\n // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(abiParameterType))\n return argType === 'number' || argType === 'bigint';\n // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array;\n // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (Array.isArray(arg) &&\n arg.every((x) => isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n })));\n }\n return false;\n }\n }\n}\n/** @internal */\nexport function getAmbiguousTypes(sourceParameters, targetParameters, args) {\n for (const parameterIndex in sourceParameters) {\n const sourceParameter = sourceParameters[parameterIndex];\n const targetParameter = targetParameters[parameterIndex];\n if (sourceParameter.type === 'tuple' &&\n targetParameter.type === 'tuple' &&\n 'components' in sourceParameter &&\n 'components' in targetParameter)\n return getAmbiguousTypes(sourceParameter.components, targetParameter.components, args[parameterIndex]);\n const types = [sourceParameter.type, targetParameter.type];\n const ambiguous = (() => {\n if (types.includes('address') && types.includes('bytes20'))\n return true;\n if (types.includes('address') && types.includes('string'))\n return Address.validate(args[parameterIndex], {\n strict: false,\n });\n if (types.includes('address') && types.includes('bytes'))\n return Address.validate(args[parameterIndex], {\n strict: false,\n });\n return false;\n })();\n if (ambiguous)\n return types;\n }\n return;\n}\n//# sourceMappingURL=abiItem.js.map","import * as abitype from 'abitype';\nimport * as Errors from './Errors.js';\nimport * as Hash from './Hash.js';\nimport * as Hex from './Hex.js';\nimport * as internal from './internal/abiItem.js';\n/**\n * Formats an {@link ox#AbiItem.AbiItem} into a **Human Readable ABI Item**.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const formatted = AbiItem.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiItem - The ABI Item to format.\n * @returns The formatted ABI Item .\n */\nexport function format(abiItem) {\n return abitype.formatAbiItem(abiItem);\n}\n/**\n * Parses an arbitrary **JSON ABI Item** or **Human Readable ABI Item** into a typed {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiItem - The ABI Item to parse.\n * @returns The typed ABI Item.\n */\nexport function from(abiItem, options = {}) {\n const { prepare = true } = options;\n const item = (() => {\n if (Array.isArray(abiItem))\n return abitype.parseAbiItem(abiItem);\n if (typeof abiItem === 'string')\n return abitype.parseAbiItem(abiItem);\n return abiItem;\n })();\n return {\n ...item,\n ...(prepare ? { hash: getSignatureHash(item) } : {}),\n };\n}\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ABI Items can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiItem.fromAbi(abi, 'Transfer') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Items can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiItem.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Item from an `eth_call` RPC response,\n * a Transaction `input`, or from Event Log `topics`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi(abi, name, options) {\n const { args = [], prepare = true } = (options ??\n {});\n const isSelector = Hex.validate(name, { strict: false });\n const abiItems = abi.filter((abiItem) => {\n if (isSelector) {\n if (abiItem.type === 'function' || abiItem.type === 'error')\n return getSelector(abiItem) === Hex.slice(name, 0, 4);\n if (abiItem.type === 'event')\n return getSignatureHash(abiItem) === name;\n return false;\n }\n return 'name' in abiItem && abiItem.name === name;\n });\n if (abiItems.length === 0)\n throw new NotFoundError({ name: name });\n if (abiItems.length === 1)\n return {\n ...abiItems[0],\n ...(prepare ? { hash: getSignatureHash(abiItems[0]) } : {}),\n };\n let matchedAbiItem;\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem))\n continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0)\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n };\n continue;\n }\n if (!abiItem.inputs)\n continue;\n if (abiItem.inputs.length === 0)\n continue;\n if (abiItem.inputs.length !== args.length)\n continue;\n const matched = args.every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs[index];\n if (!abiParameter)\n return false;\n return internal.isArgOfType(arg, abiParameter);\n });\n if (matched) {\n // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n if (matchedAbiItem &&\n 'inputs' in matchedAbiItem &&\n matchedAbiItem.inputs) {\n const ambiguousTypes = internal.getAmbiguousTypes(abiItem.inputs, matchedAbiItem.inputs, args);\n if (ambiguousTypes)\n throw new AmbiguityError({\n abiItem,\n type: ambiguousTypes[0],\n }, {\n abiItem: matchedAbiItem,\n type: ambiguousTypes[1],\n });\n }\n matchedAbiItem = abiItem;\n }\n }\n const abiItem = (() => {\n if (matchedAbiItem)\n return matchedAbiItem;\n const [abiItem, ...overloads] = abiItems;\n return { ...abiItem, overloads };\n })();\n if (!abiItem)\n throw new NotFoundError({ name: name });\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n };\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSelector(...parameters) {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters;\n return fromAbi(abi, name);\n }\n return parameters[0];\n })();\n return Hex.slice(getSignatureHash(abiItem), 0, 4);\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignature(...parameters) {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters;\n return fromAbi(abi, name);\n }\n return parameters[0];\n })();\n const signature = (() => {\n if (typeof abiItem === 'string')\n return abiItem;\n return abitype.formatAbiItem(abiItem);\n })();\n return internal.normalizeSignature(signature);\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getSignatureHash(...parameters) {\n const abiItem = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name] = parameters;\n return fromAbi(abi, name);\n }\n return parameters[0];\n })();\n if (typeof abiItem !== 'string' && 'hash' in abiItem && abiItem.hash)\n return abiItem.hash;\n return Hash.keccak256(Hex.fromString(getSignature(abiItem)));\n}\n/**\n * Throws when ambiguous types are found on overloaded ABI items.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from(['function foo(address)', 'function foo(bytes20)'])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n *\n * ### Solution\n *\n * Remove one of the ambiguous types from the ABI.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function foo(bytes20)' // [!code --]\n * ])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n */\nexport class AmbiguityError extends Errors.BaseError {\n constructor(x, y) {\n super('Found ambiguous types in overloaded ABI Items.', {\n metaMessages: [\n // TODO: abitype to add support for signature-formatted ABI items.\n `\\`${x.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(x.abiItem))}\\`, and`,\n `\\`${y.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(y.abiItem))}\\``,\n '',\n 'These types encode differently and cannot be distinguished at runtime.',\n 'Remove one of the ambiguous items in the ABI.',\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiItem.AmbiguityError'\n });\n }\n}\n/**\n * Throws when an ABI item is not found in the ABI.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * // @error: AbiItem.NotFoundError: ABI function with name \"baz\" not found.\n * ```\n *\n * ### Solution\n *\n * Ensure the ABI item exists on the ABI.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)',\n * 'function baz(bool)' // [!code ++]\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * ```\n */\nexport class NotFoundError extends Errors.BaseError {\n constructor({ name, data, type = 'item', }) {\n const selector = (() => {\n if (name)\n return ` with name \"${name}\"`;\n if (data)\n return ` with data \"${data}\"`;\n return '';\n })();\n super(`ABI ${type}${selector} not found.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiItem.NotFoundError'\n });\n }\n}\n/**\n * Throws when the selector size is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0xaaa')\n * // @error: AbiItem.InvalidSelectorSizeError: Selector size is invalid. Expected 4 bytes. Received 2 bytes (\"0xaaa\").\n * ```\n *\n * ### Solution\n *\n * Ensure the selector size is 4 bytes.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0x7af82b1a')\n * ```\n */\nexport class InvalidSelectorSizeError extends Errors.BaseError {\n constructor({ data }) {\n super(`Selector size is invalid. Expected 4 bytes. Received ${Hex.size(data)} bytes (\"${data}\").`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiItem.InvalidSelectorSizeError'\n });\n }\n}\n//# sourceMappingURL=AbiItem.js.map","import * as abitype from 'abitype';\nimport * as AbiItem from './AbiItem.js';\nimport * as AbiParameters from './AbiParameters.js';\nimport * as Hex from './Hex.js';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeData(...parameters) {\n const [abiFunction, data] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data] = parameters;\n return [fromAbi(abi, name), data];\n }\n return parameters;\n })();\n const { overloads } = abiFunction;\n if (Hex.size(data) < 4)\n throw new AbiItem.InvalidSelectorSizeError({ data });\n if (abiFunction.inputs.length === 0)\n return undefined;\n const item = overloads\n ? fromAbi([abiFunction, ...overloads], data)\n : abiFunction;\n if (Hex.size(data) <= 4)\n return undefined;\n return AbiParameters.decode(item.inputs, Hex.slice(data, 4));\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decodeResult(...parameters) {\n const [abiFunction, data, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data, options] = parameters;\n return [fromAbi(abi, name), data, options];\n }\n return parameters;\n })();\n const values = AbiParameters.decode(abiFunction.outputs, data, options);\n if (values && Object.keys(values).length === 0)\n return undefined;\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values))\n return values[0];\n return Object.values(values)[0];\n }\n return values;\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeData(...parameters) {\n const [abiFunction, args = []] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, args] = parameters;\n return [fromAbi(abi, name, { args }), args];\n }\n const [abiFunction, args] = parameters;\n return [abiFunction, args];\n })();\n const { overloads } = abiFunction;\n const item = overloads\n ? fromAbi([abiFunction, ...overloads], abiFunction.name, {\n args,\n })\n : abiFunction;\n const selector = getSelector(item);\n const data = args.length > 0 ? AbiParameters.encode(item.inputs, args) : undefined;\n return data ? Hex.concat(selector, data) : selector;\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encodeResult(...parameters) {\n const [abiFunction, output, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, output, options] = parameters;\n return [fromAbi(abi, name), output, options];\n }\n return parameters;\n })();\n const { as = 'Array' } = options;\n const values = (() => {\n if (abiFunction.outputs.length === 1)\n return [output];\n if (Array.isArray(output))\n return output;\n if (as === 'Object')\n return Object.values(output);\n return [output];\n })();\n return AbiParameters.encode(abiFunction.outputs, values);\n}\n/**\n * Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const formatted = AbiFunction.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiFunction - The ABI Function to format.\n * @returns The formatted ABI Function.\n */\nexport function format(abiFunction) {\n return abitype.formatAbiItem(abiFunction);\n}\n/**\n * Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiFunction - The ABI Function to parse.\n * @returns Typed ABI Function.\n */\nexport function from(abiFunction, options = {}) {\n return AbiItem.from(abiFunction, options);\n}\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Functions can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or\n * from a Transaction `input`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi(abi, name, options) {\n const item = AbiItem.fromAbi(abi, name, options);\n if (item.type !== 'function')\n throw new AbiItem.NotFoundError({ name, type: 'function' });\n return item;\n}\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector({\n * inputs: [{ type: 'uint256' }],\n * name: 'ownerOf',\n * outputs: [],\n * stateMutability: 'view',\n * type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem) {\n return AbiItem.getSelector(abiItem);\n}\n//# sourceMappingURL=AbiFunction.js.map","import { secp256r1 } from '@noble/curves/p256';\nimport * as Bytes from './Bytes.js';\nimport * as Hex from './Hex.js';\nimport * as Entropy from './internal/entropy.js';\nimport * as PublicKey from './PublicKey.js';\n/** Re-export of noble/curves P256 utilities. */\nexport const noble = secp256r1;\n/**\n * Creates a new P256 ECDSA key pair consisting of a private key and its corresponding public key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const { privateKey, publicKey } = P256.createKeyPair()\n * ```\n *\n * @param options - The options to generate the key pair.\n * @returns The generated key pair containing both private and public keys.\n */\nexport function createKeyPair(options = {}) {\n const { as = 'Hex' } = options;\n const privateKey = randomPrivateKey({ as });\n const publicKey = getPublicKey({ privateKey });\n return {\n privateKey: privateKey,\n publicKey,\n };\n}\n/**\n * Computes the P256 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const publicKey = P256.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(options) {\n const { privateKey } = options;\n const point = secp256r1.ProjectivePoint.fromPrivateKey(typeof privateKey === 'string'\n ? privateKey.slice(2)\n : Hex.fromBytes(privateKey).slice(2));\n return PublicKey.from(point);\n}\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const { privateKey: privateKeyA } = P256.createKeyPair()\n * const { publicKey: publicKeyB } = P256.createKeyPair()\n *\n * const sharedSecret = P256.getSharedSecret({\n * privateKey: privateKeyA,\n * publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport function getSharedSecret(options) {\n const { as = 'Hex', privateKey, publicKey } = options;\n const point = secp256r1.ProjectivePoint.fromHex(PublicKey.toHex(publicKey).slice(2));\n const privateKeyHex = typeof privateKey === 'string'\n ? privateKey.slice(2)\n : Hex.fromBytes(privateKey).slice(2);\n const sharedPoint = point.multiply(secp256r1.utils.normPrivateKeyToScalar(privateKeyHex));\n const sharedSecret = sharedPoint.toRawBytes(true); // compressed format\n if (as === 'Hex')\n return Hex.fromBytes(sharedSecret);\n return sharedSecret;\n}\n/**\n * Generates a random P256 ECDSA private key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const privateKey = P256.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey(options = {}) {\n const { as = 'Hex' } = options;\n const bytes = secp256r1.utils.randomPrivateKey();\n if (as === 'Hex')\n return Hex.fromBytes(bytes);\n return bytes;\n}\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const signature = P256.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = P256.recoverPublicKey({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(options) {\n const { payload, signature } = options;\n const { r, s, yParity } = signature;\n const signature_ = new secp256r1.Signature(BigInt(r), BigInt(s)).addRecoveryBit(yParity);\n const payload_ = payload instanceof Uint8Array ? Hex.fromBytes(payload) : payload;\n const point = signature_.recoverPublicKey(payload_.substring(2));\n return PublicKey.from(point);\n}\n/**\n * Signs the payload with the provided private key and returns a P256 signature.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const signature = P256.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options) {\n const { extraEntropy = Entropy.extraEntropy, hash, payload, privateKey, } = options;\n const { r, s, recovery } = secp256r1.sign(payload instanceof Uint8Array ? payload : Bytes.fromHex(payload), privateKey instanceof Uint8Array ? privateKey : Bytes.fromHex(privateKey), {\n extraEntropy: typeof extraEntropy === 'boolean'\n ? extraEntropy\n : Hex.from(extraEntropy).slice(2),\n lowS: true,\n ...(hash ? { prehash: true } : {}),\n });\n return {\n r,\n s,\n yParity: recovery,\n };\n}\n/**\n * Verifies a payload was signed by the provided public key.\n *\n * @example\n *\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const { privateKey, publicKey } = P256.createKeyPair()\n * const signature = P256.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = P256.verify({ // [!code focus]\n * publicKey, // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided public key.\n */\nexport function verify(options) {\n const { hash, payload, publicKey, signature } = options;\n return secp256r1.verify(signature, payload instanceof Uint8Array ? payload : Bytes.fromHex(payload), PublicKey.toHex(publicKey).substring(2), ...(hash ? [{ prehash: true, lowS: true }] : []));\n}\n//# sourceMappingURL=P256.js.map","import * as Errors from './Errors.js';\n/** @see https://ethereum.github.io/yellowpaper/paper.pdf */\nexport const exponents = {\n wei: 0,\n gwei: 9,\n szabo: 12,\n finney: 15,\n ether: 18,\n};\n/**\n * Formats a `bigint` Value to its string representation (divided by the given exponent).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.format(420_000_000_000n, 9)\n * // @log: '420'\n * ```\n *\n * @param value - The `bigint` Value to format.\n * @param decimals - The exponent to divide the `bigint` Value by.\n * @returns The string representation of the Value.\n */\nexport function format(value, decimals = 0) {\n let display = value.toString();\n const negative = display.startsWith('-');\n if (negative)\n display = display.slice(1);\n display = display.padStart(decimals, '0');\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ];\n fraction = fraction.replace(/(0+)$/, '');\n return `${negative ? '-' : ''}${integer || '0'}${fraction ? `.${fraction}` : ''}`;\n}\n/**\n * Formats a `bigint` Value (default: wei) to a string representation of Ether.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.formatEther(1_000_000_000_000_000_000n)\n * // @log: '1'\n * ```\n *\n * @param wei - The Value to format.\n * @param unit - The unit to format the Value in. @default 'wei'.\n * @returns The Ether string representation of the Value.\n */\nexport function formatEther(wei, unit = 'wei') {\n return format(wei, exponents.ether - exponents[unit]);\n}\n/**\n * Formats a `bigint` Value (default: wei) to a string representation of Gwei.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.formatGwei(1_000_000_000n)\n * // @log: '1'\n * ```\n *\n * @param wei - The Value to format.\n * @param unit - The unit to format the Value in. @default 'wei'.\n * @returns The Gwei string representation of the Value.\n */\nexport function formatGwei(wei, unit = 'wei') {\n return format(wei, exponents.gwei - exponents[unit]);\n}\n/**\n * Parses a `string` representation of a Value to `bigint` (multiplied by the given exponent).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.from('420', 9)\n * // @log: 420000000000n\n * ```\n *\n * @param value - The string representation of the Value.\n * @param decimals - The exponent to multiply the Value by.\n * @returns The `bigint` representation of the Value.\n */\nexport function from(value, decimals = 0) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value });\n let [integer = '', fraction = '0'] = value.split('.');\n const negative = integer.startsWith('-');\n if (negative)\n integer = integer.slice(1);\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '');\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`;\n fraction = '';\n }\n else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ];\n const rounded = Math.round(Number(`${unit}.${right}`));\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0');\n else\n fraction = `${left}${rounded}`;\n if (fraction.length > decimals) {\n fraction = fraction.slice(1);\n integer = `${BigInt(integer) + 1n}`;\n }\n fraction = fraction.slice(0, decimals);\n }\n else {\n fraction = fraction.padEnd(decimals, '0');\n }\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`);\n}\n/**\n * Parses a string representation of Ether to a `bigint` Value (default: wei).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromEther('420')\n * // @log: 420000000000000000000n\n * ```\n *\n * @param ether - String representation of Ether.\n * @param unit - The unit to parse to. @default 'wei'.\n * @returns A `bigint` Value.\n */\nexport function fromEther(ether, unit = 'wei') {\n return from(ether, exponents.ether - exponents[unit]);\n}\n/**\n * Parses a string representation of Gwei to a `bigint` Value (default: wei).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromGwei('420')\n * // @log: 420000000000n\n * ```\n *\n * @param gwei - String representation of Gwei.\n * @param unit - The unit to parse to. @default 'wei'.\n * @returns A `bigint` Value.\n */\nexport function fromGwei(gwei, unit = 'wei') {\n return from(gwei, exponents.gwei - exponents[unit]);\n}\n/**\n * Thrown when a value is not a valid decimal number.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromEther('123.456.789')\n * // @error: Value.InvalidDecimalNumberError: Value `123.456.789` is not a valid decimal number.\n * ```\n */\nexport class InvalidDecimalNumberError extends Errors.BaseError {\n constructor({ value }) {\n super(`Value \\`${value}\\` is not a valid decimal number.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Value.InvalidDecimalNumberError'\n });\n }\n}\n//# sourceMappingURL=Value.js.map","import * as Bytes from './Bytes.js';\nimport * as Hex from './Hex.js';\nconst encoder = /*#__PURE__*/ new TextEncoder();\nconst decoder = /*#__PURE__*/ new TextDecoder();\nconst integerToCharacter = /*#__PURE__*/ Object.fromEntries(Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/').map((a, i) => [i, a.charCodeAt(0)]));\nconst characterToInteger = /*#__PURE__*/ {\n ...Object.fromEntries(Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/').map((a, i) => [a.charCodeAt(0), i])),\n ['='.charCodeAt(0)]: 0,\n ['-'.charCodeAt(0)]: 62,\n ['_'.charCodeAt(0)]: 63,\n};\n/**\n * Encodes a {@link ox#Bytes.Bytes} to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello world'))\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello world'), { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello wod'), { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The byte array to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromBytes(value, options = {}) {\n const { pad = true, url = false } = options;\n const encoded = new Uint8Array(Math.ceil(value.length / 3) * 4);\n for (let i = 0, j = 0; j < value.length; i += 4, j += 3) {\n const y = (value[j] << 16) + (value[j + 1] << 8) + (value[j + 2] | 0);\n encoded[i] = integerToCharacter[y >> 18];\n encoded[i + 1] = integerToCharacter[(y >> 12) & 0x3f];\n encoded[i + 2] = integerToCharacter[(y >> 6) & 0x3f];\n encoded[i + 3] = integerToCharacter[y & 0x3f];\n }\n const k = value.length % 3;\n const end = Math.floor(value.length / 3) * 4 + (k && k + 1);\n let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, end));\n if (pad && k === 1)\n base64 += '==';\n if (pad && k === 2)\n base64 += '=';\n if (url)\n base64 = base64.replaceAll('+', '-').replaceAll('/', '_');\n return base64;\n}\n/**\n * Encodes a {@link ox#Hex.Hex} to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello world'))\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello world'), { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello wod'), { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The hex value to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromHex(value, options = {}) {\n return fromBytes(Bytes.fromHex(value), options);\n}\n/**\n * Encodes a string to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello world')\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello world', { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello wod', { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The string to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromString(value, options = {}) {\n return fromBytes(Bytes.fromString(value), options);\n}\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.toBytes('aGVsbG8gd29ybGQ=')\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(value) {\n const base64 = value.replace(/=+$/, '');\n const size = base64.length;\n const decoded = new Uint8Array(size + 3);\n encoder.encodeInto(base64 + '===', decoded);\n for (let i = 0, j = 0; i < base64.length; i += 4, j += 3) {\n const x = (characterToInteger[decoded[i]] << 18) +\n (characterToInteger[decoded[i + 1]] << 12) +\n (characterToInteger[decoded[i + 2]] << 6) +\n characterToInteger[decoded[i + 3]];\n decoded[j] = x >> 16;\n decoded[j + 1] = (x >> 8) & 0xff;\n decoded[j + 2] = x & 0xff;\n }\n const decodedSize = (size >> 2) * 3 + (size % 4 && (size % 4) - 1);\n return new Uint8Array(decoded.buffer, 0, decodedSize);\n}\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.toHex('aGVsbG8gd29ybGQ=')\n * // @log: 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded {@link ox#Hex.Hex}.\n */\nexport function toHex(value) {\n return Hex.fromBytes(toBytes(value));\n}\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to a string.\n *\n * @example\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.toString('aGVsbG8gd29ybGQ=')\n * // @log: 'hello world'\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded string.\n */\nexport function toString(value) {\n return Bytes.toString(toBytes(value));\n}\n//# sourceMappingURL=Base64.js.map","import { p256 } from '@noble/curves/p256';\nimport * as Hex from '../Hex.js';\nimport * as PublicKey from '../PublicKey.js';\nimport { CredentialCreationFailedError } from '../WebAuthnP256.js';\n/**\n * Parses an ASN.1 signature into a r and s value.\n *\n * @internal\n */\nexport function parseAsn1Signature(bytes) {\n const r_start = bytes[4] === 0 ? 5 : 4;\n const r_end = r_start + 32;\n const s_start = bytes[r_end + 2] === 0 ? r_end + 3 : r_end + 2;\n const r = BigInt(Hex.fromBytes(bytes.slice(r_start, r_end)));\n const s = BigInt(Hex.fromBytes(bytes.slice(s_start)));\n return {\n r,\n s: s > p256.CURVE.n / 2n ? p256.CURVE.n - s : s,\n };\n}\n/**\n * Parses a public key into x and y coordinates from the public key\n * defined on the credential.\n *\n * @internal\n */\nexport async function parseCredentialPublicKey(response) {\n try {\n const publicKeyBuffer = response.getPublicKey();\n if (!publicKeyBuffer)\n throw new CredentialCreationFailedError();\n // Converting `publicKeyBuffer` throws when credential is created by 1Password Firefox Add-on\n const publicKeyBytes = new Uint8Array(publicKeyBuffer);\n const cryptoKey = await crypto.subtle.importKey('spki', new Uint8Array(publicKeyBytes), {\n name: 'ECDSA',\n namedCurve: 'P-256',\n hash: 'SHA-256',\n }, true, ['verify']);\n const publicKey = new Uint8Array(await crypto.subtle.exportKey('raw', cryptoKey));\n return PublicKey.from(publicKey);\n }\n catch (error) {\n // Fallback for 1Password Firefox Add-on restricts access to certain credential properties\n // so we need to use `attestationObject` to extract the public key.\n // https://github.com/passwordless-id/webauthn/issues/50#issuecomment-2072902094\n if (error.message !== 'Permission denied to access object')\n throw error;\n const data = new Uint8Array(response.attestationObject);\n const coordinateLength = 0x20;\n const cborPrefix = 0x58;\n const findStart = (key) => {\n const coordinate = new Uint8Array([key, cborPrefix, coordinateLength]);\n for (let i = 0; i < data.length - coordinate.length; i++)\n if (coordinate.every((byte, j) => data[i + j] === byte))\n return i + coordinate.length;\n throw new CredentialCreationFailedError();\n };\n const xStart = findStart(0x21);\n const yStart = findStart(0x22);\n return PublicKey.from(new Uint8Array([\n 0x04,\n ...data.slice(xStart, xStart + coordinateLength),\n ...data.slice(yStart, yStart + coordinateLength),\n ]));\n }\n}\n//# sourceMappingURL=webauthn.js.map","import * as Base64 from './Base64.js';\nimport * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hash from './Hash.js';\nimport * as Hex from './Hex.js';\nimport * as internal from './internal/webauthn.js';\nimport * as P256 from './P256.js';\nexport const createChallenge = Uint8Array.from([\n 105, 171, 180, 181, 160, 222, 75, 198, 42, 42, 32, 31, 141, 37, 186, 233,\n]);\n/**\n * Creates a new WebAuthn P256 Credential, which can be stored and later used for signing.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({ name: 'Example' }) // [!code focus]\n * // @log: {\n * // @log: id: 'oZ48...',\n * // @log: publicKey: { x: 51421...5123n, y: 12345...6789n },\n * // @log: raw: PublicKeyCredential {},\n * // @log: }\n *\n * const { metadata, signature } = await WebAuthnP256.sign({\n * credentialId: credential.id,\n * challenge: '0xdeadbeef',\n * })\n * ```\n *\n * @param options - Credential creation options.\n * @returns A WebAuthn P256 credential.\n */\nexport async function createCredential(options) {\n const { createFn = window.navigator.credentials.create.bind(window.navigator.credentials), ...rest } = options;\n const creationOptions = getCredentialCreationOptions(rest);\n try {\n const credential = (await createFn(creationOptions));\n if (!credential)\n throw new CredentialCreationFailedError();\n const response = credential.response;\n const publicKey = await internal.parseCredentialPublicKey(response);\n return {\n id: credential.id,\n publicKey,\n raw: credential,\n };\n }\n catch (error) {\n throw new CredentialCreationFailedError({\n cause: error,\n });\n }\n}\n/**\n * Gets the authenticator data which contains information about the\n * processing of an authenticator request (ie. from `WebAuthnP256.sign`).\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * autenticator data. In most cases you will not need this function.\n * `authenticatorData` is typically returned as part of the\n * {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const authenticatorData = WebAuthnP256.getAuthenticatorData({\n * rpId: 'example.com',\n * signCount: 420,\n * })\n * // @log: \"0xa379a6f6eeafb9a55e378c118034e2751e682fab9f2d30ab13d2125586ce194705000001a4\"\n * ```\n *\n * @param options - Options to construct the authenticator data.\n * @returns The authenticator data.\n */\nexport function getAuthenticatorData(options = {}) {\n const { flag = 5, rpId = window.location.hostname, signCount = 0 } = options;\n const rpIdHash = Hash.sha256(Hex.fromString(rpId));\n const flag_bytes = Hex.fromNumber(flag, { size: 1 });\n const signCount_bytes = Hex.fromNumber(signCount, { size: 4 });\n return Hex.concat(rpIdHash, flag_bytes, signCount_bytes);\n}\n/**\n * Constructs the Client Data in stringified JSON format which represents client data that\n * was passed to `credentials.get()` in {@link ox#WebAuthnP256.(sign:function)}.\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * client data. In most cases you will not need this function.\n * `clientDataJSON` is typically returned as part of the\n * {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const clientDataJSON = WebAuthnP256.getClientDataJSON({\n * challenge: '0xdeadbeef',\n * origin: 'https://example.com',\n * })\n * // @log: \"{\"type\":\"webauthn.get\",\"challenge\":\"3q2-7w\",\"origin\":\"https://example.com\",\"crossOrigin\":false}\"\n * ```\n *\n * @param options - Options to construct the client data.\n * @returns The client data.\n */\nexport function getClientDataJSON(options) {\n const { challenge, crossOrigin = false, extraClientData, origin = window.location.origin, } = options;\n return JSON.stringify({\n type: 'webauthn.get',\n challenge: Base64.fromHex(challenge, { url: true, pad: false }),\n origin,\n crossOrigin,\n ...extraClientData,\n });\n}\n/**\n * Returns the creation options for a P256 WebAuthn Credential to be used with\n * the Web Authentication API.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const options = WebAuthnP256.getCredentialCreationOptions({ name: 'Example' })\n *\n * const credential = await window.navigator.credentials.create(options)\n * ```\n *\n * @param options - Options.\n * @returns The credential creation options.\n */\nexport function getCredentialCreationOptions(options) {\n const { attestation = 'none', authenticatorSelection = {\n residentKey: 'preferred',\n requireResidentKey: false,\n userVerification: 'required',\n }, challenge = createChallenge, excludeCredentialIds, extensions, name: name_, rp = {\n id: window.location.hostname,\n name: window.document.title,\n }, user, } = options;\n const name = (user?.name ?? name_);\n return {\n publicKey: {\n attestation,\n authenticatorSelection,\n challenge,\n ...(excludeCredentialIds\n ? {\n excludeCredentials: excludeCredentialIds?.map((id) => ({\n id: Base64.toBytes(id),\n type: 'public-key',\n })),\n }\n : {}),\n pubKeyCredParams: [\n {\n type: 'public-key',\n alg: -7, // p256\n },\n ],\n ...(extensions && { extensions }),\n rp,\n user: {\n id: user?.id ?? Hash.keccak256(Bytes.fromString(name), { as: 'Bytes' }),\n name,\n displayName: user?.displayName ?? name,\n },\n },\n };\n}\n/**\n * Returns the request options to sign a challenge with the Web Authentication API.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const options = WebAuthnP256.getCredentialRequestOptions({\n * challenge: '0xdeadbeef',\n * })\n *\n * const credential = await window.navigator.credentials.get(options)\n * ```\n *\n * @param options - Options.\n * @returns The credential request options.\n */\nexport function getCredentialRequestOptions(options) {\n const { credentialId, challenge, extensions, rpId = window.location.hostname, userVerification = 'required', } = options;\n return {\n publicKey: {\n ...(credentialId\n ? {\n allowCredentials: Array.isArray(credentialId)\n ? credentialId.map((id) => ({\n id: Base64.toBytes(id),\n type: 'public-key',\n }))\n : [\n {\n id: Base64.toBytes(credentialId),\n type: 'public-key',\n },\n ],\n }\n : {}),\n challenge: Bytes.fromHex(challenge),\n ...(extensions && { extensions }),\n rpId,\n userVerification,\n },\n };\n}\n/**\n * Constructs the final digest that was signed and computed by the authenticator. This payload includes\n * the cryptographic `challenge`, as well as authenticator metadata (`authenticatorData` + `clientDataJSON`).\n * This value can be also used with raw P256 verification (such as {@link ox#P256.(verify:function)} or\n * {@link ox#WebCryptoP256.(verify:function)}).\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * signing payloads. In most cases you will not need this function and\n * instead use {@link ox#WebAuthnP256.(sign:function)}.\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256, WebCryptoP256 } from 'ox'\n *\n * const { metadata, payload } = WebAuthnP256.getSignPayload({ // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: metadata: {\n * // @log: authenticatorData: \"0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000\",\n * // @log: challengeIndex: 23,\n * // @log: clientDataJSON: \"{\"type\":\"webauthn.get\",\"challenge\":\"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8\",\"origin\":\"http://localhost:5173\",\"crossOrigin\":false}\",\n * // @log: typeIndex: 1,\n * // @log: userVerificationRequired: true,\n * // @log: },\n * // @log: payload: \"0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d9763050000000045086dcb06a5f234db625bcdc94e657f86b76b6fd3eb9c30543eabc1e577a4b0\",\n * // @log: }\n *\n * const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()\n *\n * const signature = await WebCryptoP256.sign({\n * payload,\n * privateKey,\n * })\n * ```\n *\n * @param options - Options to construct the signing payload.\n * @returns The signing payload.\n */\nexport function getSignPayload(options) {\n const { challenge, crossOrigin, extraClientData, flag, origin, rpId, signCount, userVerification = 'required', } = options;\n const authenticatorData = getAuthenticatorData({\n flag,\n rpId,\n signCount,\n });\n const clientDataJSON = getClientDataJSON({\n challenge,\n crossOrigin,\n extraClientData,\n origin,\n });\n const clientDataJSONHash = Hash.sha256(Hex.fromString(clientDataJSON));\n const challengeIndex = clientDataJSON.indexOf('\"challenge\"');\n const typeIndex = clientDataJSON.indexOf('\"type\"');\n const metadata = {\n authenticatorData,\n clientDataJSON,\n challengeIndex,\n typeIndex,\n userVerificationRequired: userVerification === 'required',\n };\n const payload = Hex.concat(authenticatorData, clientDataJSONHash);\n return { metadata, payload };\n}\n/**\n * Signs a challenge using a stored WebAuthn P256 Credential. If no Credential is provided,\n * a prompt will be displayed for the user to select an existing Credential\n * that was previously registered.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({\n * name: 'Example',\n * })\n *\n * const { metadata, signature } = await WebAuthnP256.sign({ // [!code focus]\n * credentialId: credential.id, // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: metadata: {\n * // @log: authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000',\n * // @log: clientDataJSON: '{\"type\":\"webauthn.get\",\"challenge\":\"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8\",\"origin\":\"http://localhost:5173\",\"crossOrigin\":false}',\n * // @log: challengeIndex: 23,\n * // @log: typeIndex: 1,\n * // @log: userVerificationRequired: true,\n * // @log: },\n * // @log: signature: { r: 51231...4215n, s: 12345...6789n },\n * // @log: }\n * ```\n *\n * @param options - Options.\n * @returns The signature.\n */\nexport async function sign(options) {\n const { getFn = window.navigator.credentials.get.bind(window.navigator.credentials), ...rest } = options;\n const requestOptions = getCredentialRequestOptions(rest);\n try {\n const credential = (await getFn(requestOptions));\n if (!credential)\n throw new CredentialRequestFailedError();\n const response = credential.response;\n const clientDataJSON = String.fromCharCode(...new Uint8Array(response.clientDataJSON));\n const challengeIndex = clientDataJSON.indexOf('\"challenge\"');\n const typeIndex = clientDataJSON.indexOf('\"type\"');\n const signature = internal.parseAsn1Signature(new Uint8Array(response.signature));\n return {\n metadata: {\n authenticatorData: Hex.fromBytes(new Uint8Array(response.authenticatorData)),\n clientDataJSON,\n challengeIndex,\n typeIndex,\n userVerificationRequired: requestOptions.publicKey.userVerification === 'required',\n },\n signature,\n raw: credential,\n };\n }\n catch (error) {\n throw new CredentialRequestFailedError({\n cause: error,\n });\n }\n}\n/**\n * Verifies a signature using the Credential's public key and the challenge which was signed.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({\n * name: 'Example',\n * })\n *\n * const { metadata, signature } = await WebAuthnP256.sign({\n * credentialId: credential.id,\n * challenge: '0xdeadbeef',\n * })\n *\n * const result = await WebAuthnP256.verify({ // [!code focus]\n * metadata, // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * publicKey: credential.publicKey, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: true\n * ```\n *\n * @param options - Options.\n * @returns Whether the signature is valid.\n */\nexport function verify(options) {\n const { challenge, hash = true, metadata, publicKey, signature } = options;\n const { authenticatorData, challengeIndex, clientDataJSON, typeIndex, userVerificationRequired, } = metadata;\n const authenticatorDataBytes = Bytes.fromHex(authenticatorData);\n // Check length of `authenticatorData`.\n if (authenticatorDataBytes.length < 37)\n return false;\n const flag = authenticatorDataBytes[32];\n // Verify that the UP bit of the flags in authData is set.\n if ((flag & 0x01) !== 0x01)\n return false;\n // If user verification was determined to be required, verify that\n // the UV bit of the flags in authData is set. Otherwise, ignore the\n // value of the UV flag.\n if (userVerificationRequired && (flag & 0x04) !== 0x04)\n return false;\n // If the BE bit of the flags in authData is not set, verify that\n // the BS bit is not set.\n if ((flag & 0x08) !== 0x08 && (flag & 0x10) === 0x10)\n return false;\n // Check that response is for an authentication assertion\n const type = '\"type\":\"webauthn.get\"';\n if (type !== clientDataJSON.slice(Number(typeIndex), type.length + 1))\n return false;\n // Check that hash is in the clientDataJSON.\n const match = clientDataJSON\n .slice(Number(challengeIndex))\n .match(/^\"challenge\":\"(.*?)\"/);\n if (!match)\n return false;\n // Validate the challenge in the clientDataJSON.\n const [_, challenge_extracted] = match;\n if (Hex.fromBytes(Base64.toBytes(challenge_extracted)) !== challenge)\n return false;\n const clientDataJSONHash = Hash.sha256(Bytes.fromString(clientDataJSON), {\n as: 'Bytes',\n });\n const payload = Bytes.concat(authenticatorDataBytes, clientDataJSONHash);\n return P256.verify({\n hash,\n payload,\n publicKey,\n signature,\n });\n}\n/** Thrown when a WebAuthn P256 credential creation fails. */\nexport class CredentialCreationFailedError extends Errors.BaseError {\n constructor({ cause } = {}) {\n super('Failed to create credential.', {\n cause,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'WebAuthnP256.CredentialCreationFailedError'\n });\n }\n}\n/** Thrown when a WebAuthn P256 credential request fails. */\nexport class CredentialRequestFailedError extends Errors.BaseError {\n constructor({ cause } = {}) {\n super('Failed to request credential.', {\n cause,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'WebAuthnP256.CredentialRequestFailedError'\n });\n }\n}\n//# sourceMappingURL=WebAuthnP256.js.map","import { p256 } from '@noble/curves/p256';\nimport * as Bytes from './Bytes.js';\nimport * as Hex from './Hex.js';\nimport * as PublicKey from './PublicKey.js';\n/**\n * Generates an ECDSA P256 key pair that includes:\n *\n * - a `privateKey` of type [`CryptoKey`](https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey)\n *\n * - a `publicKey` of type {@link ox#Hex.Hex} or {@link ox#Bytes.Bytes}\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()\n * // @log: {\n * // @log: privateKey: CryptoKey {},\n * // @log: publicKey: {\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: prefix: 4,\n * // @log: },\n * // @log: }\n * ```\n *\n * @param options - Options for creating the key pair.\n * @returns The key pair.\n */\nexport async function createKeyPair(options = {}) {\n const { extractable = false } = options;\n const keypair = await globalThis.crypto.subtle.generateKey({\n name: 'ECDSA',\n namedCurve: 'P-256',\n }, extractable, ['sign', 'verify']);\n const publicKey_raw = await globalThis.crypto.subtle.exportKey('raw', keypair.publicKey);\n const publicKey = PublicKey.from(new Uint8Array(publicKey_raw));\n return {\n privateKey: keypair.privateKey,\n publicKey,\n };\n}\n/**\n * Generates an ECDH P256 key pair for key agreement that includes:\n *\n * - a `privateKey` of type [`CryptoKey`](https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey)\n * - a `publicKey` of type {@link ox#PublicKey.PublicKey}\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { publicKey, privateKey } = await WebCryptoP256.createKeyPairECDH()\n * // @log: {\n * // @log: privateKey: CryptoKey {},\n * // @log: publicKey: {\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: prefix: 4,\n * // @log: },\n * // @log: }\n * ```\n *\n * @param options - Options for creating the key pair.\n * @returns The key pair.\n */\nexport async function createKeyPairECDH(options = {}) {\n const { extractable = false } = options;\n const keypair = await globalThis.crypto.subtle.generateKey({\n name: 'ECDH',\n namedCurve: 'P-256',\n }, extractable, ['deriveKey', 'deriveBits']);\n const publicKey_raw = await globalThis.crypto.subtle.exportKey('raw', keypair.publicKey);\n const publicKey = PublicKey.from(new Uint8Array(publicKey_raw));\n return {\n privateKey: keypair.privateKey,\n publicKey,\n };\n}\n/**\n * Computes a shared secret using ECDH (Elliptic Curve Diffie-Hellman) between a private key and a public key using Web Crypto APIs.\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { privateKey: privateKeyA } = await WebCryptoP256.createKeyPairECDH()\n * const { publicKey: publicKeyB } = await WebCryptoP256.createKeyPairECDH()\n *\n * const sharedSecret = await WebCryptoP256.getSharedSecret({\n * privateKey: privateKeyA,\n * publicKey: publicKeyB\n * })\n * ```\n *\n * @param options - The options to compute the shared secret.\n * @returns The computed shared secret.\n */\nexport async function getSharedSecret(options) {\n const { as = 'Hex', privateKey, publicKey } = options;\n if (privateKey.algorithm.name === 'ECDSA') {\n throw new Error('privateKey is not compatible with ECDH. please use `createKeyPairECDH` to create an ECDH key.');\n }\n const publicKeyCrypto = await globalThis.crypto.subtle.importKey('raw', PublicKey.toBytes(publicKey), { name: 'ECDH', namedCurve: 'P-256' }, false, []);\n const sharedSecretBuffer = await globalThis.crypto.subtle.deriveBits({\n name: 'ECDH',\n public: publicKeyCrypto,\n }, privateKey, 256);\n const sharedSecret = new Uint8Array(sharedSecretBuffer);\n if (as === 'Hex')\n return Hex.fromBytes(sharedSecret);\n return sharedSecret;\n}\n/**\n * Signs a payload with the provided `CryptoKey` private key and returns a P256 signature.\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { privateKey } = await WebCryptoP256.createKeyPair()\n *\n * const signature = await WebCryptoP256.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: r: 151231...4423n,\n * // @log: s: 516123...5512n,\n * // @log: }\n * ```\n *\n * @param options - Options for signing the payload.\n * @returns The P256 ECDSA {@link ox#Signature.Signature}.\n */\nexport async function sign(options) {\n const { payload, privateKey } = options;\n const signature = await globalThis.crypto.subtle.sign({\n name: 'ECDSA',\n hash: 'SHA-256',\n }, privateKey, Bytes.from(payload));\n const signature_bytes = Bytes.fromArray(new Uint8Array(signature));\n const r = Bytes.toBigInt(Bytes.slice(signature_bytes, 0, 32));\n let s = Bytes.toBigInt(Bytes.slice(signature_bytes, 32, 64));\n if (s > p256.CURVE.n / 2n)\n s = p256.CURVE.n - s;\n return { r, s };\n}\n/**\n * Verifies a payload was signed by the provided public key.\n *\n * @example\n *\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { privateKey, publicKey } = await WebCryptoP256.createKeyPair()\n * const signature = await WebCryptoP256.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = await WebCryptoP256.verify({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * publicKey, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: true\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided public key.\n */\nexport async function verify(options) {\n const { payload, signature } = options;\n const publicKey = await globalThis.crypto.subtle.importKey('raw', PublicKey.toBytes(options.publicKey), { name: 'ECDSA', namedCurve: 'P-256' }, true, ['verify']);\n return await globalThis.crypto.subtle.verify({\n name: 'ECDSA',\n hash: 'SHA-256',\n }, publicKey, Bytes.concat(Bytes.fromNumber(signature.r), Bytes.fromNumber(signature.s)), Bytes.from(payload));\n}\n//# sourceMappingURL=WebCryptoP256.js.map","import * as AbiFunction from 'ox/AbiFunction';\nimport * as Key from '../../viem/Key.js';\nimport * as IthacaAccount from './_generated/contracts/IthacaAccount.js';\n/** Stub address for self-execution. */\nexport const selfAddress = '0x2323232323232323232323232323232323232323';\n/**\n * Instantiates values to populate a call to authorize a key.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function authorize(parameters) {\n const { key } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'authorize'), [Key.serialize(key)]),\n to: selfAddress,\n };\n}\nexport const anyHash = '0x3232323232323232323232323232323232323232323232323232323232323232';\nexport const anyTarget = '0x3232323232323232323232323232323232323232';\nexport const anySelector = '0x32323232';\n/**\n * Instantiates values to populate a call to set the label of a delegated account.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function setCanExecute(parameters = {}) {\n const { enabled = true, key, selector = anySelector, to = anyTarget, } = parameters;\n const hash = key ? key.hash : anyHash;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'setCanExecute'), [hash, to, selector, enabled]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to set the label of a delegated account.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function setLabel(parameters) {\n const { label } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'setLabel'), [label]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to set the spend limit of a key.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function setSpendLimit(parameters) {\n const { key, period, limit } = parameters;\n const token = parameters.token ?? '0x0000000000000000000000000000000000000000';\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'setSpendLimit'), [key.hash, token, Key.toSerializedSpendPeriod[period], limit]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to set the signature checker approval of a key.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function setSignatureCheckerApproval(parameters) {\n const { address, key, enabled } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'setSignatureCheckerApproval'), [key.hash, address, enabled]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to remove the spend limit of a key.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function removeSpendLimit(parameters) {\n const { key, token, period } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'removeSpendLimit'), [key.hash, token, Key.toSerializedSpendPeriod[period]]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to revoke a key.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function revoke(parameters) {\n const { keyHash } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'revoke'), [keyHash]),\n to: selfAddress,\n };\n}\n/**\n * Instantiates values to populate a call to upgrade the proxy account.\n *\n * @param parameters - Parameters.\n * @returns Instantiated values.\n */\nexport function upgradeProxyAccount(parameters) {\n const { address, to = selfAddress } = parameters;\n return {\n data: AbiFunction.encodeData(AbiFunction.fromAbi(IthacaAccount.abi, 'upgradeProxyAccount'), [address]),\n to,\n };\n}\n//# sourceMappingURL=call.js.map","import * as AbiFunction from 'ox/AbiFunction';\nimport * as AbiParameters from 'ox/AbiParameters';\nimport * as Address from 'ox/Address';\nimport * as Bytes from 'ox/Bytes';\nimport * as Hash from 'ox/Hash';\nimport * as Hex from 'ox/Hex';\nimport * as Json from 'ox/Json';\nimport * as P256 from 'ox/P256';\nimport * as PublicKey from 'ox/PublicKey';\nimport * as Secp256k1 from 'ox/Secp256k1';\nimport * as Signature from 'ox/Signature';\nimport * as TypedData from 'ox/TypedData';\nimport * as Value from 'ox/Value';\nimport * as WebAuthnP256 from 'ox/WebAuthnP256';\nimport * as WebCryptoP256 from 'ox/WebCryptoP256';\nimport { zeroAddress } from 'viem';\nimport * as Call from '../core/internal/call.js';\n/** Relay key type to key type mapping. */\nexport const fromRelayKeyType = {\n p256: 'p256',\n secp256k1: 'secp256k1',\n webauthnp256: 'webauthn-p256',\n};\n/** Relay key role to key role mapping. */\nexport const fromRelayKeyRole = {\n admin: 'admin',\n normal: 'session',\n};\n/** Serialized (contract-compatible) key type to key type mapping. */\nexport const fromSerializedKeyType = {\n 0: 'p256',\n 1: 'webauthn-p256',\n 2: 'secp256k1',\n};\n/** Serialized (contract-compatible) spend period to period mapping. */\nexport const fromSerializedSpendPeriod = {\n 0: 'minute',\n 1: 'hour',\n 2: 'day',\n 3: 'week',\n 4: 'month',\n 5: 'year',\n};\n/** Key type to Relay key type mapping. */\nexport const toRelayKeyType = {\n address: 'secp256k1',\n p256: 'p256',\n secp256k1: 'secp256k1',\n 'webauthn-p256': 'webauthnp256',\n};\n/** Key role to Relay key role mapping. */\nexport const toRelayKeyRole = {\n admin: 'admin',\n session: 'normal',\n};\n/** Key type to serialized (contract-compatible) key type mapping. */\nexport const toSerializedKeyType = {\n address: 2,\n p256: 0,\n secp256k1: 2,\n 'webauthn-p256': 1,\n};\n/** Period to serialized (contract-compatible) spend period mapping. */\nexport const toSerializedSpendPeriod = {\n day: 2,\n hour: 1,\n minute: 0,\n month: 4,\n week: 3,\n year: 5,\n};\n/**\n * Creates a random P256 key.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.createP256()\n *\n * // Session Key\n * const key = Key.createP256({\n * expiry: 1714857600,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns P256 key.\n */\nexport function createP256(parameters = {}) {\n const privateKey = P256.randomPrivateKey();\n return fromP256({\n ...parameters,\n privateKey,\n });\n}\n/**\n * Creates a random Secp256k1 key.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.createSecp256k1()\n *\n * // Session Key\n * const key = Key.createSecp256k1({\n * expiry: 1714857600,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns Secp256k1 key.\n */\nexport function createSecp256k1(parameters = {}) {\n const privateKey = Secp256k1.randomPrivateKey();\n return fromSecp256k1({\n ...parameters,\n privateKey,\n });\n}\n/**\n * Creates a WebAuthnP256 key.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.createWebAuthnP256({\n * label: 'My Key',\n * userId: Bytes.from('0x0000000000000000000000000000000000000000'),\n * })\n *\n * // Session Key\n * const key = Key.createWebAuthnP256({\n * expiry: 1714857600,\n * label: 'My Key',\n * role: 'session',\n * userId: Bytes.from('0x0000000000000000000000000000000000000000'),\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns WebAuthnP256 key.\n */\nexport async function createWebAuthnP256(parameters) {\n const { createFn, label, rpId, userId } = parameters;\n const credential = await WebAuthnP256.createCredential({\n authenticatorSelection: {\n requireResidentKey: true,\n residentKey: 'required',\n userVerification: 'required',\n },\n createFn,\n extensions: {\n credProps: true,\n },\n rp: rpId\n ? {\n id: rpId,\n name: rpId,\n }\n : undefined,\n user: {\n displayName: label,\n id: new Uint8Array(userId ?? Bytes.fromString(label)),\n name: label,\n },\n });\n return fromWebAuthnP256({\n ...parameters,\n credential: {\n id: credential.id,\n publicKey: credential.publicKey,\n },\n id: userId\n ? Bytes.toHex(userId)\n : PublicKey.toHex(credential.publicKey, {\n includePrefix: false,\n }),\n });\n}\n/**\n * Creates a random WebAuthn-wrapped P256 key.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.createHeadlessWebAuthnP256()\n *\n * // Session Key\n * const key = Key.createHeadlessWebAuthnP256({\n * expiry: 1714857600,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns P256 key.\n */\nexport function createHeadlessWebAuthnP256(parameters = {}) {\n const privateKey = P256.randomPrivateKey();\n return fromHeadlessWebAuthnP256({\n ...parameters,\n privateKey,\n });\n}\n/**\n * Creates a random WebCryptoP256 key.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.createWebCryptoP256()\n *\n * // Session Key\n * const key = Key.createWebCryptoP256({\n * expiry: 1714857600,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns WebCryptoP256 key.\n */\nexport async function createWebCryptoP256(parameters = {}) {\n const keyPair = await WebCryptoP256.createKeyPair();\n return fromWebCryptoP256({\n ...parameters,\n keyPair,\n });\n}\n/**\n * Deserializes a key from its serialized format.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * const key = Key.deserialize({\n * expiry: 0,\n * isSuperAdmin: false,\n * keyType: 0,\n * publicKey: '0x04ec0effa5f2f378cbf7fd2fa7ca1e8dc51cf777c129fa1c00a0e9a9205f2e511ff3f20b34a4e0b50587d055c0e0fad33d32cf1147d3bb2538fbab0d15d8e65008',\n * })\n * ```\n *\n * @param serialized - Serialized key.\n * @returns Key.\n */\nexport function deserialize(serialized, options = {}) {\n const { chainId } = options;\n const publicKey = serialized.publicKey;\n const type = fromSerializedKeyType[serialized.keyType];\n return from({\n chainId,\n expiry: serialized.expiry,\n publicKey,\n role: serialized.isSuperAdmin ? 'admin' : 'session',\n type,\n });\n}\n/**\n * Instantiates a key from its parameters.\n *\n * @example\n * ```ts\n * import { P256 } from 'ox'\n * import * as Key from './key.js'\n *\n * const privateKey = P256.randomPrivateKey()\n * const publicKey = P256.getPublicKey({ privateKey })\n *\n * const key = Key.from({\n * expiry: 0,\n * publicKey,\n * async sign({ payload }) {\n * return P256.sign({ payload, privateKey })\n * },\n * type: 'p256',\n * })\n * ```\n *\n * @param key - Key.\n * @returns Key.\n */\nexport function from(key, options = {}) {\n const { chainId = key.chainId } = options;\n const { expiry = 0, id, prehash = false, role = 'admin', type } = key;\n const publicKey = (() => {\n const publicKey = key.publicKey;\n if (publicKey === '0x')\n return publicKey;\n if (type === 'secp256k1' || type === 'address') {\n const isAddress = Hex.size(publicKey) === 20 ||\n Hex.toBigInt(Hex.slice(publicKey, 0, 12)) === 0n;\n const address = isAddress\n ? Hex.slice(publicKey, -20)\n : Address.fromPublicKey(PublicKey.fromHex(publicKey));\n return address;\n }\n return publicKey;\n })();\n return {\n ...key,\n chainId,\n expiry,\n hash: hash({\n publicKey,\n type,\n }),\n id: (id ?? publicKey).toLowerCase(),\n prehash,\n publicKey: publicKey.toLowerCase(),\n role,\n type,\n };\n}\n/**\n * Instantiates a P256 key from its parameters.\n *\n * @example\n * ```ts\n * import { P256 } from 'ox'\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.fromP256({\n * privateKey: P256.randomPrivateKey(),\n * })\n *\n * // Session Key\n * const key = Key.fromP256({\n * expiry: 1714857600,\n * privateKey: P256.randomPrivateKey(),\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns P256 key.\n */\nexport function fromP256(parameters) {\n const { chainId, expiry, feeToken, permissions, privateKey, role } = parameters;\n const publicKey = PublicKey.toHex(P256.getPublicKey({ privateKey }), {\n includePrefix: false,\n });\n return from({\n chainId,\n expiry,\n feeToken,\n permissions,\n privateKey() {\n return privateKey;\n },\n publicKey,\n role,\n type: 'p256',\n });\n}\n/**\n * Converts a Relay-formatted key to a key.\n *\n * @example\n * TODO\n *\n * @param relayKey - Relay key.\n * @returns Key.\n */\nexport function fromRelay(relayKey, options) {\n const { chainId } = options;\n const { publicKey } = relayKey;\n const isAddress = Hex.size(publicKey) === 20 ||\n Hex.toBigInt(Hex.slice(publicKey, 0, 12)) === 0n;\n const permissions = {};\n for (const permission of relayKey.permissions) {\n if (permission.type === 'call') {\n permissions.calls ??= [];\n permissions.calls.push({\n signature: permission.selector,\n to: permission.to === Call.anyTarget ? undefined : permission.to,\n });\n }\n if (permission.type === 'spend') {\n permissions.spend ??= [];\n permissions.spend.push({\n limit: permission.limit,\n period: permission.period,\n token: permission.token,\n });\n }\n }\n return from({\n chainId,\n expiry: relayKey.expiry,\n permissions: permissions,\n publicKey: relayKey.publicKey,\n role: fromRelayKeyRole[relayKey.role],\n type: isAddress ? 'address' : fromRelayKeyType[relayKey.type],\n });\n}\n/**\n * Instantiates a Secp256k1 key from its parameters.\n *\n * @example\n * ```ts\n * import { Secp256k1 } from 'ox'\n * import * as Key from './key.js'\n *\n * // Admin Key\n * const key = Key.fromSecp256k1({\n * privateKey: Secp256k1.randomPrivateKey(),\n * })\n *\n * // Session Key\n * const key = Key.fromSecp256k1({\n * expiry: 1714857600,\n * privateKey: Secp256k1.randomPrivateKey(),\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns Secp256k1 key.\n */\nexport function fromSecp256k1(parameters) {\n const { privateKey, role } = parameters;\n const publicKey = (() => {\n if (parameters.publicKey)\n return parameters.publicKey;\n if (privateKey)\n return Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey }));\n return parameters.address.toLowerCase();\n })();\n return from({\n expiry: parameters.expiry ?? 0,\n feeToken: parameters.feeToken,\n permissions: parameters.permissions,\n privateKey: privateKey ? () => privateKey : undefined,\n publicKey,\n role,\n type: 'secp256k1',\n });\n}\n/**\n * Instantiates a WebAuthnP256 key from its parameters.\n *\n * @example\n * ```ts\n * import { WebAuthnP256 } from 'ox'\n * import * as Key from './key.js'\n *\n * const credential = await WebAuthnP256.createCredential({ name: 'My Key' })\n *\n * // Admin Key\n * const key = Key.fromWebAuthnP256({\n * credential,\n * })\n *\n * // Session Key\n * const key = Key.fromWebAuthnP256({\n * expiry: 1714857600,\n * credential,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns WebAuthnP256 key.\n */\nexport function fromWebAuthnP256(parameters) {\n const { credential, id, rpId } = parameters;\n const publicKey = PublicKey.toHex(credential.publicKey, {\n includePrefix: false,\n });\n return from({\n chainId: parameters.chainId,\n expiry: parameters.expiry ?? 0,\n feeToken: parameters.feeToken,\n id,\n permissions: parameters.permissions,\n privateKey: {\n credential,\n rpId,\n },\n publicKey,\n role: parameters.role,\n type: 'webauthn-p256',\n });\n}\n/**\n * Instantiates a WebAuthn-wrapped P256 key from its parameters.\n *\n * @example\n * ```ts\n * import { P256 } from 'ox'\n * import * as Key from './key.js'\n *\n * const privateKey = P256.randomPrivateKey()\n *\n * // Admin Key\n * const key = Key.fromHeadlessWebAuthnP256({\n * privateKey,\n * })\n *\n * // Session Key\n * const key = Key.fromHeadlessWebAuthnP256({\n * expiry: 1714857600,\n * privateKey,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns WebAuthn-wrapped P256 key.\n */\nexport function fromHeadlessWebAuthnP256(parameters) {\n const { privateKey } = parameters;\n const publicKey = PublicKey.toHex(P256.getPublicKey({ privateKey }), {\n includePrefix: false,\n });\n return from({\n chainId: parameters.chainId,\n expiry: parameters.expiry ?? 0,\n feeToken: parameters.feeToken,\n permissions: parameters.permissions,\n privateKey: {\n privateKey() {\n return privateKey;\n },\n },\n publicKey,\n role: parameters.role,\n type: 'webauthn-p256',\n });\n}\n/**\n * Instantiates a WebCryptoP256 key from its parameters.\n *\n * @example\n * ```ts\n * import { WebCryptoP256 } from 'ox'\n * import * as Key from './key.js'\n *\n * const keyPair = await WebCryptoP256.createKeyPair()\n *\n * // Admin Key\n * const key = Key.fromWebCryptoP256({\n * keyPair,\n * })\n *\n * // Session Key\n * const key = Key.fromWebCryptoP256({\n * expiry: 1714857600,\n * keyPair,\n * role: 'session',\n * })\n * ```\n *\n * @param parameters - Key parameters.\n * @returns WebCryptoP256 key.\n */\nexport function fromWebCryptoP256(parameters) {\n const { chainId, expiry, feeToken, keyPair, permissions, role } = parameters;\n const { privateKey } = keyPair;\n const publicKey = PublicKey.toHex(keyPair.publicKey, {\n includePrefix: false,\n });\n return from({\n chainId,\n expiry,\n feeToken,\n permissions,\n prehash: true,\n privateKey,\n publicKey,\n role,\n type: 'p256',\n });\n}\n/**\n * Hashes a key.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * const key = Key.createP256()\n *\n * const hash = Key.hash(key)\n * ```\n *\n * @param key - Key.\n * @returns Hashed key.\n */\nexport function hash(key) {\n const { type } = key;\n const publicKey = serializePublicKey(key.publicKey);\n return Hash.keccak256(AbiParameters.encode([{ type: 'uint8' }, { type: 'bytes32' }], [toSerializedKeyType[type], Hash.keccak256(publicKey)]));\n}\n/**\n * Serializes a public key.\n *\n * @param publicKey - Public key.\n * @returns Serialized public key.\n */\nexport function serializePublicKey(publicKey) {\n return Hex.size(publicKey) < 32 ? Hex.padLeft(publicKey, 32) : publicKey;\n}\n/**\n * Serializes a key to a contract-compatible format.\n *\n * @example\n * ```ts\n * import * as Key from './key.js'\n *\n * const key = Key.createP256()\n *\n * const serialized = Key.serialize(key)\n * ```\n *\n * @param key - Key.\n * @returns Serialized key.\n */\nexport function serialize(key) {\n const { expiry = 0, publicKey, role, type } = key;\n return {\n expiry,\n isSuperAdmin: role === 'admin',\n keyType: toSerializedKeyType[type],\n publicKey: serializePublicKey(publicKey),\n };\n}\nexport async function sign(key, parameters) {\n const { address, storage, webAuthn, wrap = true } = parameters;\n const { privateKey, publicKey, type: keyType } = key;\n if (!privateKey)\n throw new Error('Key does not have a private key to sign with.\\n\\nKey:\\n' +\n Json.stringify(key, null, 2));\n const payload = (() => {\n if (!address)\n return parameters.payload;\n return TypedData.getSignPayload({\n domain: { verifyingContract: address },\n message: {\n digest: parameters.payload,\n },\n primaryType: 'ERC1271Sign',\n types: {\n ERC1271Sign: [{ name: 'digest', type: 'bytes32' }],\n },\n });\n })();\n const [signature, prehash] = await (async () => {\n if (keyType === 'p256') {\n const { privateKey } = key;\n if (typeof privateKey === 'function')\n return [\n Signature.toHex(P256.sign({ payload, privateKey: privateKey() })),\n false,\n ];\n if (privateKey instanceof CryptoKey) {\n const signature = Signature.toHex(await WebCryptoP256.sign({ payload, privateKey }));\n return [signature, true];\n }\n }\n if (keyType === 'secp256k1') {\n return [\n Signature.toHex(Secp256k1.sign({ payload, privateKey: privateKey() })),\n false,\n ];\n }\n if (keyType === 'webauthn-p256') {\n if (privateKey.privateKey) {\n const { payload: wrapped, metadata } = WebAuthnP256.getSignPayload({\n challenge: payload,\n origin: 'https://ithaca.xyz',\n rpId: 'ithaca.xyz',\n });\n const { r, s } = P256.sign({\n hash: true,\n payload: wrapped,\n privateKey: privateKey.privateKey(),\n });\n const signature = serializeWebAuthnSignature({\n metadata,\n signature: { r, s },\n });\n return [signature, false];\n }\n const { credential, rpId } = privateKey;\n const cacheKey = `porto.webauthnVerified.${key.hash}`;\n const now = Date.now();\n const verificationTimeout = 10 * 60 * 1_000; // 10 minutes in milliseconds\n let requireVerification = true;\n if (storage) {\n const lastVerified = await storage.getItem(cacheKey);\n requireVerification =\n !lastVerified || now - lastVerified > verificationTimeout;\n }\n const { signature: { r, s }, raw, metadata, } = await WebAuthnP256.sign({\n challenge: payload,\n credentialId: credential.id,\n getFn: webAuthn?.getFn,\n rpId,\n userVerification: requireVerification ? 'required' : 'preferred',\n });\n const response = raw.response;\n if (!response?.userHandle)\n throw new Error('No user handle in response', {\n cause: { response },\n });\n const id = Bytes.toHex(new Uint8Array(response.userHandle));\n if (key.id && Address.validate(key.id) && !Address.isEqual(key.id, id))\n throw new Error(`supplied webauthn key \"${key.id}\" does not match signature webauthn key \"${id}\"`, { cause: { id, key } });\n if (requireVerification && storage)\n await storage.setItem(cacheKey, now);\n const signature = serializeWebAuthnSignature({\n metadata,\n signature: { r, s },\n });\n return [signature, false];\n }\n throw new Error(`Key type \"${keyType}\" is not supported.\\n\\nKey:\\n` +\n Json.stringify(key, null, 2));\n })();\n if (wrap)\n return wrapSignature(signature, {\n keyType,\n prehash,\n publicKey,\n });\n return signature;\n}\n/**\n * Converts a key to a Relay-compatible format.\n *\n * @example\n * TODO\n *\n * @param key - Key.\n * @returns Relay key.\n */\nexport function toRelay(key, options = {}) {\n const { expiry = 0, prehash = false, publicKey, role = 'admin', type } = key;\n const { feeTokens, orchestrator } = options;\n // biome-ignore lint/complexity/useFlatMap: i know\n const permissions = Object.entries(resolvePermissions(key, {\n feeTokens,\n }))\n // biome-ignore lint/suspicious/useIterableCallbackReturn: _\n .map(([key, v]) => {\n if (key === 'calls') {\n const calls = v;\n return calls.map(({ signature, to }) => {\n const selector = (() => {\n if (!signature)\n return Call.anySelector;\n if (Hex.validate(signature))\n return signature;\n return AbiFunction.getSelector(signature);\n })();\n return {\n selector,\n to: to ?? Call.anyTarget,\n type: 'call',\n };\n });\n }\n if (key === 'feeToken')\n return;\n if (key === 'spend') {\n const value = v;\n return value.map(({ limit, period, token }) => {\n return {\n limit,\n period,\n token,\n type: 'spend',\n };\n });\n }\n throw new Error(`Invalid permission type \"${key}\".`);\n })\n .flat()\n .filter(Boolean);\n if (key.role === 'session' && orchestrator)\n permissions.push({\n selector: Call.anySelector,\n to: orchestrator,\n type: 'call',\n });\n return {\n expiry,\n permissions: permissions ?? [],\n prehash,\n publicKey: serializePublicKey(publicKey),\n role: toRelayKeyRole[role],\n type: toRelayKeyType[type],\n };\n}\n/**\n * Resolves the permissions for the permissions request, and if needed, adds\n * the fee limit to the spend permissions.\n *\n * @param request - Permissions request.\n * @param options - Options.\n * @returns Resolved permissions.\n */\nexport function resolvePermissions(key, options) {\n const { permissions } = key;\n const calls = permissions?.calls ? [...permissions.calls] : [];\n const spend = permissions?.spend ? [...permissions.spend] : [];\n const feeTokens = options.feeTokens?.filter((token) => token.feeToken);\n if (feeTokens && feeTokens.length > 0) {\n const feeToken = getFeeToken(key, {\n feeTokens,\n });\n if (feeToken) {\n let index = -1;\n let minPeriod = toSerializedSpendPeriod.year;\n for (let i = 0; i < spend.length; i++) {\n const s = spend[i];\n if (s.token && Address.isEqual(feeToken.address, s.token)) {\n index = i;\n break;\n }\n if (!s.token && feeToken.address === zeroAddress) {\n index = i;\n break;\n }\n const period = toSerializedSpendPeriod[s.period];\n if (period < minPeriod)\n minPeriod = period;\n }\n // If there is a token assigned to a spend permission and the fee token\n // is the same, update the limit to account for the fee.\n if (index !== -1) {\n spend[index] = {\n ...spend[index],\n limit: spend[index].limit + feeToken.value,\n };\n // Assign this as the first spend permission, as it will be used\n // as the fee token for call bundles that use this key.\n spend.unshift(spend.splice(index, 1)[0]);\n }\n // Update the spend permissions to account for the fee token.\n // The fee token permission must be assigned as the first spend\n // permission as it will be used as the fee token for call bundles\n // that use this key.\n else if (typeof minPeriod === 'number')\n spend.unshift({\n limit: feeToken.value,\n period: fromSerializedSpendPeriod[minPeriod],\n token: feeToken.address,\n });\n }\n }\n return { ...permissions, calls, spend };\n}\n/**\n * Gets the fee limit (in units of the fee token) to be used for the\n * authorized permissions.\n *\n * @param request - The permissions request to get the fee limit for.\n * @param options - Options.\n * @returns Fee limit (in units of the fee token).\n */\nexport function getFeeToken(key, options) {\n const { feeTokens } = options;\n if (!key.feeToken)\n return undefined;\n const feeToken = feeTokens.find((token) => {\n if (key.feeToken.symbol === token.symbol)\n return true;\n if (!key.feeToken.symbol)\n return token.address === zeroAddress;\n if (key.feeToken.symbol === 'native')\n return token.address === zeroAddress;\n return false;\n });\n if (!feeToken)\n return undefined;\n const value = Value.from(key.feeToken.limit, feeToken.decimals);\n return {\n ...feeToken,\n value,\n };\n}\n///////////////////////////////////////////////////////////////////////////\n// Internal\n///////////////////////////////////////////////////////////////////////////\nexport function serializeWebAuthnSignature(options) {\n const { metadata, signature } = options;\n return AbiParameters.encode(AbiParameters.from([\n 'struct WebAuthnAuth { bytes authenticatorData; string clientDataJSON; uint256 challengeIndex; uint256 typeIndex; bytes32 r; bytes32 s; }',\n 'WebAuthnAuth auth',\n ]), [\n {\n authenticatorData: metadata.authenticatorData,\n challengeIndex: BigInt(metadata.challengeIndex),\n clientDataJSON: metadata.clientDataJSON,\n r: Hex.fromNumber(signature.r, { size: 32 }),\n s: Hex.fromNumber(signature.s, { size: 32 }),\n typeIndex: BigInt(metadata.typeIndex),\n },\n ]);\n}\nexport function wrapSignature(signature, options) {\n const { keyType: type, prehash = false, publicKey } = options;\n const keyHash = hash({ publicKey, type });\n return AbiParameters.encodePacked(['bytes', 'bytes32', 'bool'], [signature, keyHash, prehash]);\n}\n//# sourceMappingURL=Key.js.map","import * as Address from 'ox/Address';\nimport * as Secp256k1 from 'ox/Secp256k1';\nimport * as Signature from 'ox/Signature';\nimport * as TypedData from 'ox/TypedData';\nimport { hashMessage, hashTypedData, } from 'viem';\nimport { toAccount } from 'viem/accounts';\nimport * as Key from './Key.js';\n/**\n * Instantiates a delegated account.\n *\n * @param account - Account to instantiate.\n * @returns An instantiated delegated account.\n */\nexport function from(parameters) {\n const account = (typeof parameters === 'string' ? { address: parameters } : parameters);\n const source = account.sign ? 'privateKey' : 'porto';\n const { address, sign: sign_, signMessage, signTransaction, signTypedData, type, } = toAccount({\n address: account.address,\n sign({ hash }) {\n if (source === 'privateKey')\n return account.sign({ hash });\n throw new Error('`sign` not supported on porto accounts.');\n },\n signMessage({ message }) {\n return this.sign({\n hash: hashMessage(message),\n });\n },\n signTransaction() {\n throw new Error('`signTransaction` not supported on porto accounts.');\n },\n signTypedData(typedData) {\n return this.sign({\n hash: hashTypedData(typedData),\n });\n },\n });\n return {\n address,\n keys: account.keys ?? undefined,\n sign: sign_,\n signMessage,\n signTransaction,\n signTypedData,\n source,\n type,\n };\n}\n/**\n * Instantiates a delegated account from a private key.\n *\n * @param privateKey - Private key.\n * @param options - Options.\n * @returns An instantiated delegated account.\n */\nexport function fromPrivateKey(privateKey, options = {}) {\n const { keys } = options;\n const address = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey }));\n return from({\n address,\n keys,\n async sign({ hash }) {\n return Signature.toHex(Secp256k1.sign({\n payload: hash,\n privateKey,\n }));\n },\n source: 'privateKey',\n });\n}\nexport function getKey(account, parameters = {}) {\n const { key, role } = parameters;\n if (key === null)\n return undefined;\n // Extract from `key` parameter.\n if (typeof key === 'object')\n return key;\n // Extract from `account.keys` (with optional `key` index).\n if (account.keys && account.keys.length > 0) {\n if (typeof key === 'number')\n return account.keys[key];\n return account.keys.find((key) => key.privateKey && (!role || key.role === role));\n }\n return undefined;\n}\n/**\n * Extracts a signing key from a delegated account and signs a payload.\n *\n * @example\n * TODO\n *\n * @param parameters - Parameters.\n * @returns Signature.\n */\nexport async function sign(account, parameters) {\n const { storage, replaySafe = true, wrap = true, webAuthn } = parameters;\n const key = getKey(account, parameters);\n const payload = (() => {\n if (!replaySafe)\n return parameters.payload;\n return TypedData.getSignPayload({\n domain: { verifyingContract: account.address },\n message: {\n digest: parameters.payload,\n },\n primaryType: 'ERC1271Sign',\n types: {\n ERC1271Sign: [{ name: 'digest', type: 'bytes32' }],\n },\n });\n })();\n const sign = (() => {\n if (!key) {\n if (account.source === 'privateKey')\n return account.sign;\n return undefined;\n }\n return ({ hash }) => Key.sign(key, {\n address: null,\n payload: hash,\n storage,\n webAuthn,\n wrap,\n });\n })();\n // If the account has no valid signing key, then we cannot sign the payload.\n if (!sign)\n throw new Error('cannot find key to sign with.');\n // Sign the payload.\n return await sign({ hash: payload });\n}\n//# sourceMappingURL=Account.js.map","import * as abitype from 'abitype';\nimport * as AbiItem from './AbiItem.js';\nimport * as AbiParameters from './AbiParameters.js';\nimport * as Hex from './Hex.js';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(...parameters) {\n const [abiError, data, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data, options] = parameters;\n return [fromAbi(abi, name), data, options];\n }\n return parameters;\n })();\n if (Hex.size(data) < 4)\n throw new AbiItem.InvalidSelectorSizeError({ data });\n if (abiError.inputs.length === 0)\n return undefined;\n const values = AbiParameters.decode(abiError.inputs, Hex.slice(data, 4), options);\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values))\n return values[0];\n return Object.values(values)[0];\n }\n return values;\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encode(...parameters) {\n const [abiError, args] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, ...args] = parameters;\n return [fromAbi(abi, name), args];\n }\n const [abiError, ...args] = parameters;\n return [abiError, args];\n })();\n const selector = getSelector(abiError);\n const data = args.length > 0\n ? AbiParameters.encode(abiError.inputs, args[0])\n : undefined;\n return data ? Hex.concat(selector, data) : selector;\n}\n/**\n * Formats an {@link ox#AbiError.AbiError} into a **Human Readable ABI Error**.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const formatted = AbiError.format({\n * type: 'error',\n * name: 'Example',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiError - The ABI Error to format.\n * @returns The formatted ABI Error.\n */\nexport function format(abiError) {\n return abitype.formatAbiItem(abiError);\n}\n/**\n * Parses an arbitrary **JSON ABI Error** or **Human Readable ABI Error** into a typed {@link ox#AbiError.AbiError}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error',\n * })\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from(\n * 'error BadSignatureV(uint8 v)' // [!code hl]\n * )\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from([\n * 'struct Signature { uint8 v; }', // [!code hl]\n * 'error BadSignatureV(Signature signature)',\n * ])\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiError - The ABI Error to parse.\n * @returns Typed ABI Error.\n */\nexport function from(abiError, options = {}) {\n return AbiItem.from(abiError, options);\n}\n/**\n * Extracts an {@link ox#AbiError.AbiError} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Errors can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiError.fromAbi(abi, 'BadSignatureV') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Errors can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiError.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Error from JSON-RPC error data.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi(abi, name, options) {\n if (name === 'Error')\n return solidityError;\n if (name === 'Panic')\n return solidityPanic;\n if (Hex.validate(name, { strict: false })) {\n const selector = Hex.slice(name, 0, 4);\n if (selector === solidityErrorSelector)\n return solidityError;\n if (selector === solidityPanicSelector)\n return solidityPanic;\n }\n const item = AbiItem.fromAbi(abi, name, options);\n if (item.type !== 'error')\n throw new AbiItem.NotFoundError({ name, type: 'error' });\n return item;\n}\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiError.AbiError}.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector('error BadSignatureV(uint8 v)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the error signature.\n */\nexport function getSelector(abiItem) {\n return AbiItem.getSelector(abiItem);\n}\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n 1: 'An `assert` condition failed.',\n 17: 'Arithmetic operation resulted in underflow or overflow.',\n 18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n 33: 'Attempted to convert to an invalid type.',\n 34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n 49: 'Performed `.pop()` on an empty array',\n 50: 'Array index is out of bounds.',\n 65: 'Allocated too much memory or created an array which is too large.',\n 81: 'Attempted to call a zero-initialized variable of internal function type.',\n};\nexport const solidityError = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'Error',\n type: 'error',\n});\nexport const solidityErrorSelector = '0x08c379a0';\nexport const solidityPanic = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'reason',\n type: 'uint8',\n },\n ],\n name: 'Panic',\n type: 'error',\n});\nexport const solidityPanicSelector = '0x4e487b71';\n//# sourceMappingURL=AbiError.js.map","import { BaseError } from '../../errors/base.js';\nexport class ExecuteUnsupportedError extends BaseError {\n constructor() {\n super('ERC-7821 execution is not supported.', {\n name: 'ExecuteUnsupportedError',\n });\n }\n}\nexport class FunctionSelectorNotRecognizedError extends BaseError {\n constructor() {\n super('Function is not recognized.', {\n metaMessages: [\n 'This could be due to any of the following:',\n ' - The contract does not have the function,',\n ' - The address is not a contract.',\n ],\n name: 'FunctionSelectorNotRecognizedError',\n });\n }\n}\n//# sourceMappingURL=errors.js.map","import * as abitype from 'abitype';\nimport * as AbiItem from './AbiItem.js';\nimport * as AbiParameters from './AbiParameters.js';\nimport * as Hex from './Hex.js';\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(...parameters) {\n const [abiError, data, options = {}] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, data, options] = parameters;\n return [fromAbi(abi, name), data, options];\n }\n return parameters;\n })();\n if (Hex.size(data) < 4)\n throw new AbiItem.InvalidSelectorSizeError({ data });\n if (abiError.inputs.length === 0)\n return undefined;\n const values = AbiParameters.decode(abiError.inputs, Hex.slice(data, 4), options);\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values))\n return values[0];\n return Object.values(values)[0];\n }\n return values;\n}\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function encode(...parameters) {\n const [abiError, args] = (() => {\n if (Array.isArray(parameters[0])) {\n const [abi, name, ...args] = parameters;\n return [fromAbi(abi, name), args];\n }\n const [abiError, ...args] = parameters;\n return [abiError, args];\n })();\n const selector = getSelector(abiError);\n const data = args.length > 0\n ? AbiParameters.encode(abiError.inputs, args[0])\n : undefined;\n return data ? Hex.concat(selector, data) : selector;\n}\n/**\n * Formats an {@link ox#AbiError.AbiError} into a **Human Readable ABI Error**.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const formatted = AbiError.format({\n * type: 'error',\n * name: 'Example',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiError - The ABI Error to format.\n * @returns The formatted ABI Error.\n */\nexport function format(abiError) {\n return abitype.formatAbiItem(abiError);\n}\n/**\n * Parses an arbitrary **JSON ABI Error** or **Human Readable ABI Error** into a typed {@link ox#AbiError.AbiError}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error',\n * })\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from(\n * 'error BadSignatureV(uint8 v)' // [!code hl]\n * )\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from([\n * 'struct Signature { uint8 v; }', // [!code hl]\n * 'error BadSignatureV(Signature signature)',\n * ])\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiError - The ABI Error to parse.\n * @returns Typed ABI Error.\n */\nexport function from(abiError, options = {}) {\n return AbiItem.from(abiError, options);\n}\n/**\n * Extracts an {@link ox#AbiError.AbiError} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Errors can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiError.fromAbi(abi, 'BadSignatureV') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Errors can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiError.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Error from JSON-RPC error data.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi(abi, name, options) {\n if (name === 'Error')\n return solidityError;\n if (name === 'Panic')\n return solidityPanic;\n if (Hex.validate(name, { strict: false })) {\n const selector = Hex.slice(name, 0, 4);\n if (selector === solidityErrorSelector)\n return solidityError;\n if (selector === solidityPanicSelector)\n return solidityPanic;\n }\n const item = AbiItem.fromAbi(abi, name, options);\n if (item.type !== 'error')\n throw new AbiItem.NotFoundError({ name, type: 'error' });\n return item;\n}\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiError.AbiError}.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector('error BadSignatureV(uint8 v)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the error signature.\n */\nexport function getSelector(abiItem) {\n return AbiItem.getSelector(abiItem);\n}\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n 1: 'An `assert` condition failed.',\n 17: 'Arithmetic operation resulted in underflow or overflow.',\n 18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n 33: 'Attempted to convert to an invalid type.',\n 34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n 49: 'Performed `.pop()` on an empty array',\n 50: 'Array index is out of bounds.',\n 65: 'Allocated too much memory or created an array which is too large.',\n 81: 'Attempted to call a zero-initialized variable of internal function type.',\n};\nexport const solidityError = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'Error',\n type: 'error',\n});\nexport const solidityErrorSelector = '0x08c379a0';\nexport const solidityPanic = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'reason',\n type: 'uint8',\n },\n ],\n name: 'Panic',\n type: 'error',\n});\nexport const solidityPanicSelector = '0x4e487b71';\n//# sourceMappingURL=AbiError.js.map","import * as AbiError from 'ox/AbiError';\nimport { decodeErrorResult } from '../../../utils/abi/decodeErrorResult.js';\nimport { getContractError, } from '../../../utils/errors/getContractError.js';\nimport { FunctionSelectorNotRecognizedError, } from '../errors.js';\nexport function getExecuteError(e, parameters) {\n const error = e.walk((e) => 'data' in e);\n if (!error?.data)\n return e;\n if (error.data ===\n AbiError.getSelector(AbiError.from('error FnSelectorNotRecognized()')))\n return new FunctionSelectorNotRecognizedError();\n let matched = null;\n for (const c of parameters.calls) {\n const call = c;\n if (!call.abi)\n continue;\n try {\n const matches = Boolean(decodeErrorResult({\n abi: call.abi,\n data: error.data,\n }));\n if (!matches)\n continue;\n matched = call;\n }\n catch { }\n }\n if (matched)\n return getContractError(error, {\n abi: matched.abi,\n address: matched.to,\n args: matched.args,\n functionName: matched.functionName,\n });\n return e;\n}\n//# sourceMappingURL=getExecuteError.js.map","/**\n * Actions for Porto Relay.\n *\n * @see https://porto.sh/relay\n */\nimport * as AbiError from 'ox/AbiError';\nimport * as AbiFunction from 'ox/AbiFunction';\nimport * as Errors from 'ox/Errors';\nimport * as Hash from 'ox/Hash';\nimport * as Hex from 'ox/Hex';\nimport * as Secp256k1 from 'ox/Secp256k1';\nimport * as Signature from 'ox/Signature';\nimport { BaseError, withCache, } from 'viem';\nimport { verifyHash } from 'viem/actions';\nimport { getExecuteError, } from 'viem/experimental/erc7821';\nimport * as z from 'zod/mini';\nimport * as RpcSchema from '../../core/internal/relay/rpcSchema.js';\nimport * as u from '../../core/internal/schema/utils.js';\nimport * as U from '../../core/internal/utils.js';\n/**\n * Gets the authorization for a given address.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function getAuthorization(client, parameters) {\n try {\n const method = 'wallet_getAuthorization';\n const result = await withCache(() => client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_getAuthorization.Parameters, parameters),\n ],\n }), { cacheKey: `${client.uid}.${method}.${parameters.address}` });\n return z.decode(RpcSchema.wallet_getAuthorization.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Gets the capabilities for a given chain ID.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param options - Options.\n * @returns Result.\n */\nexport async function getCapabilities(client, options = {}) {\n const chainIds = (() => {\n if (options.chainId)\n return [options.chainId];\n if (options.chainIds === 'all')\n return undefined;\n if (options.chainIds)\n return options.chainIds;\n return [client.chain.id];\n })();\n try {\n const method = 'wallet_getCapabilities';\n const result = await withCache(() => client.request({\n method,\n params: chainIds ? [chainIds] : undefined,\n }, {\n retryCount: 0,\n }), {\n cacheKey: `${client.uid}.${method}.${chainIds?.join(',')}`,\n });\n const parsed = (() => {\n if (options.raw)\n return result;\n return z.decode(RpcSchema.wallet_getCapabilities.Response, result);\n })();\n if (options.chainIds)\n return parsed;\n return Object.values(parsed)[0];\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Get assets owned by user in given chain IDs.\n */\nexport async function getAssets(client, parameters) {\n const { account, assetFilter, assetTypeFilter, chainFilter } = parameters;\n try {\n const method = 'wallet_getAssets';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_getAssets.Parameters, {\n account,\n assetFilter,\n assetTypeFilter,\n chainFilter,\n }),\n ],\n });\n const value = z.decode(RpcSchema.wallet_getAssets.Response, result);\n const decoded = Object.entries(value).reduce((acc, [key, value]) => {\n acc[Hex.toNumber(key)] = value;\n return acc;\n }, {});\n const aggregated = {};\n for (const value of Object.values(decoded)) {\n for (const item of value) {\n const key = JSON.stringify(item.metadata);\n aggregated[key] = {\n ...item,\n balance: item.balance + (aggregated[key]?.balance ?? 0n),\n };\n }\n }\n return {\n ...decoded,\n '0': Object.values(aggregated),\n };\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Requests faucet funds to be sent to an address on the Relay.\n */\nexport async function addFaucetFunds(client, parameters) {\n const { address, chain = client.chain, tokenAddress, value } = parameters;\n try {\n const method = 'wallet_addFaucetFunds';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_addFaucetFunds.Parameters, {\n address,\n chainId: chain?.id,\n tokenAddress,\n value,\n }),\n ],\n }, {\n retryCount: 0,\n });\n // relay state can be behind node state. wait to ensure sync.\n // TODO: figure out how to resolve.\n await new Promise((resolve) => setTimeout(resolve, 2_000));\n return result;\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Gets the status of a call bundle.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function getCallsStatus(client, parameters) {\n const { id } = parameters;\n try {\n const method = 'wallet_getCallsStatus';\n const result = await client.request({\n method,\n params: [id],\n });\n return z.decode(RpcSchema.wallet_getCallsStatus.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Gets the keys for a given account.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function getKeys(client, parameters) {\n const { address, chainIds } = parameters;\n try {\n const method = 'wallet_getKeys';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_getKeys.Parameters, {\n address,\n chainIds,\n }),\n ],\n });\n return z.decode(RpcSchema.wallet_getKeys.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\n/**\n * Gets the health of the RPC.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @returns Result.\n */\nexport async function health(client) {\n const method = 'health';\n const result = await withCache(() => client.request({\n method,\n }), { cacheKey: `${client.uid}.${method}` });\n return z.decode(RpcSchema.health.Response, result);\n}\n/**\n * Prepares a call bundle.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function prepareCalls(client, parameters) {\n const { address, capabilities, chain = client.chain, key } = parameters;\n const calls = parameters.calls.map((call) => {\n return {\n data: call.abi\n ? AbiFunction.encodeData(AbiFunction.fromAbi(call.abi, call.functionName), call.args)\n : (call.data ?? '0x'),\n to: call.to,\n value: call.value ?? 0n,\n };\n });\n try {\n const method = 'wallet_prepareCalls';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_prepareCalls.Parameters, {\n calls,\n capabilities: {\n ...capabilities,\n meta: {\n ...capabilities?.meta,\n },\n },\n chainId: chain?.id,\n from: address,\n key: key\n ? {\n prehash: key.prehash,\n publicKey: key.publicKey,\n type: key.type,\n }\n : undefined,\n }),\n ],\n }, {\n retryCount: 0,\n });\n return Object.assign(z.decode(RpcSchema.wallet_prepareCalls.Response, result), { _raw: result });\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error, { calls: parameters.calls });\n throw error;\n }\n}\n/**\n * Prepares an account upgrade.\n *\n * @example\n * TODO\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function prepareUpgradeAccount(client, parameters) {\n const { address, chain = client.chain, delegation, ...capabilities } = parameters;\n try {\n const method = 'wallet_prepareUpgradeAccount';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_prepareUpgradeAccount.Parameters, U.normalizeValue({\n address,\n capabilities,\n chainId: chain?.id,\n delegation,\n })),\n ],\n }, {\n retryCount: 0,\n });\n return z.decode(RpcSchema.wallet_prepareUpgradeAccount.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error);\n throw error;\n }\n}\n/**\n * Broadcasts a signed call bundle.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function sendPreparedCalls(client, parameters) {\n const { capabilities, context, key, signature } = parameters;\n try {\n const method = 'wallet_sendPreparedCalls';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_sendPreparedCalls.Parameters, {\n capabilities,\n context: {\n preCall: context.preCall,\n quote: context.quote,\n },\n key: key\n ? {\n prehash: key.prehash,\n publicKey: key.publicKey,\n type: key.type,\n }\n : undefined,\n signature,\n }),\n ],\n }, {\n retryCount: 0,\n });\n return z.decode(RpcSchema.wallet_sendPreparedCalls.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error);\n throw error;\n }\n}\n/**\n * Sets email for address\n *\n * @example\n * TODO\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function setEmail(client, parameters) {\n const { email, walletAddress } = parameters;\n try {\n const method = 'account_setEmail';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.account_setEmail.Parameters, {\n email,\n walletAddress,\n }),\n ],\n }, {\n retryCount: 0,\n });\n return z.decode(RpcSchema.account_setEmail.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error);\n throw error;\n }\n}\n/**\n * Submits an account upgrade to the Relay.\n *\n * @example\n * TODO\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function upgradeAccount(client, parameters) {\n const { context, signatures } = parameters;\n try {\n const method = 'wallet_upgradeAccount';\n await client.request({\n method,\n params: [\n z.encode(RpcSchema.wallet_upgradeAccount.Parameters, {\n context,\n signatures,\n }),\n ],\n }, {\n retryCount: 0,\n });\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error);\n throw error;\n }\n}\n/**\n * Verifies email for address\n *\n * @example\n * TODO\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function verifyEmail(client, parameters) {\n const { chainId, email, signature, token, walletAddress } = parameters;\n try {\n const method = 'account_verifyEmail';\n const result = await client.request({\n method,\n params: [\n z.encode(RpcSchema.account_verifyEmail.Parameters, {\n chainId,\n email,\n signature,\n token,\n walletAddress,\n }),\n ],\n }, {\n retryCount: 0,\n });\n return z.decode(RpcSchema.account_verifyEmail.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n parseExecutionError(error);\n throw error;\n }\n}\n/**\n * Verifies a prepare calls response.\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Whether or not the response is valid.\n */\nexport async function verifyPrepareCallsResponse(client, parameters) {\n const { signature } = parameters;\n const { signature: _, capabilities: { feeSignature: __, ...capabilities }, ...response } = parameters.response;\n const sorted = sortKeys({ capabilities, ...response });\n const payload = Hash.keccak256(Hex.fromString(JSON.stringify(sorted)));\n const address = Secp256k1.recoverAddress({\n payload,\n signature: Signature.fromHex(signature),\n });\n const { quoteSigner } = await health(client);\n return address === quoteSigner;\n}\n/**\n * Verifies a signature.\n *\n * @example\n * TODO\n *\n * @param client - The client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function verifySignature(client, parameters) {\n const { address, chain = client.chain, digest, signature } = parameters;\n try {\n async function fallback() {\n const valid = await verifyHash(client, {\n address,\n hash: digest,\n signature,\n });\n return {\n proof: null,\n valid,\n };\n }\n const method = 'wallet_verifySignature';\n const result = await (async () => {\n const result = await client\n .request({\n method,\n params: [\n z.encode(RpcSchema.wallet_verifySignature.Parameters, {\n address,\n chainId: chain?.id,\n digest,\n signature,\n }),\n ],\n }, {\n retryCount: 0,\n })\n .catch(fallback);\n if (result.valid)\n return result;\n return fallback();\n })();\n return z.decode(RpcSchema.wallet_verifySignature.Response, result);\n }\n catch (error) {\n parseSchemaError(error);\n throw error;\n }\n}\nexport function parseExecutionError(e, { calls } = {}) {\n if (!(e instanceof BaseError))\n return;\n const getAbiError = (error) => {\n try {\n if (error.name === 'ContractFunctionExecutionError') {\n const data = error.cause.name === 'ContractFunctionRevertedError'\n ? error.cause.data\n : undefined;\n if (data)\n return AbiError.fromAbi([data.abiItem], data.errorName);\n }\n const cause = error.walk((e) => !(e instanceof Error) &&\n e.code === 3);\n if (!cause)\n return undefined;\n const { data, message } = cause;\n if (data === '0xd0d5039b')\n return AbiError.from('error Unauthorized()');\n return {\n inputs: [],\n name: (message ?? data).split('(')[0],\n type: 'error',\n };\n }\n catch {\n return undefined;\n }\n };\n const error = getExecuteError(e, {\n calls: (calls ?? []),\n });\n const abiError = getAbiError(error);\n if (error === e && !abiError)\n return;\n throw new ExecutionError(Object.assign(error, { abiError }));\n}\nexport function sortKeys(value) {\n if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value))\n return value.map(sortKeys);\n const result = {};\n for (const key of Object.keys(value).sort())\n result[key] = sortKeys(value[key]);\n return result;\n }\n return value;\n}\n/** Thrown when schema validation fails. */\nexport function parseSchemaError(e) {\n if (e.name === '$ZodError')\n throw u.toValidationError(e);\n}\n/** Thrown when the execution fails. */\nexport class ExecutionError extends Errors.BaseError {\n constructor(cause) {\n super('An error occurred while executing calls.', {\n cause,\n metaMessages: [cause.abiError && 'Reason: ' + cause.abiError.name].filter(Boolean),\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Rpc.ExecutionError'\n });\n Object.defineProperty(this, \"abiError\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.abiError = cause.abiError;\n }\n}\n//# sourceMappingURL=relayActions.js.map","import { createTransport } from 'viem';\nexport { fallback, http, webSocket } from 'viem';\nexport const relayUrls = {\n anvil: { http: 'http://localhost:9119' },\n prod: { http: 'https://rpc.porto.sh' },\n stg: { http: 'https://stg-rpc.porto.sh' },\n};\nexport function relayProxy(transports) {\n return (config) => {\n const transport_public = transports.public(config);\n const transport_relay = transports.relay(config);\n return createTransport({\n key: relayProxy.type,\n name: 'Relay Proxy',\n async request({ method, params }, options) {\n if (isRelay(method))\n return transport_relay.request({ method, params }, options);\n return transport_public.request({ method, params }, options);\n },\n type: relayProxy.type,\n });\n };\n}\n(function (relayProxy) {\n relayProxy.type = 'relayProxy';\n})(relayProxy || (relayProxy = {}));\n/** @internal */\nfunction isRelay(method) {\n if (method.startsWith('wallet_'))\n return true;\n if (method.startsWith('account_'))\n return true;\n if (method === 'health')\n return true;\n return false;\n}\n//# sourceMappingURL=Transport.js.map","import * as Json from 'ox/Json';\nimport { createClient, fallback, http, } from 'viem';\nimport * as Transport from '../core/Transport.js';\nconst clientCache = new Map();\n/**\n * Extracts a Viem Client from a Porto instance, and an optional chain ID.\n * By default, the Client for the current chain ID will be extracted.\n *\n * @param porto - Porto instance.\n * @param parameters - Parameters.\n * @returns Client.\n */\nexport function fromPorto(porto, config = {}) {\n const { config: config_, id, store } = porto._internal;\n const { chains, relay } = config_;\n const state = store.getState();\n const chainId = config.chainId ?? state.chainIds[0];\n const chain = chains.find((chain) => chain.id === chainId);\n if (!chain)\n throw new Error([\n 'Could not find a compatible Porto chain on the given chain configuration.',\n '',\n `Provided chains: [${chains.map((chain) => `${chain.name} (id: ${chain.id})`).join(', ')}]`,\n `Needed chain (id): ${chainId}`,\n 'Please add this chain (id) to your chain configuration.',\n ].join('\\n'));\n const transport = Transport.relayProxy({\n public: config_.transports[chain.id] ??\n fallback(chain.rpcUrls.default.http.map((url) => http(url))),\n relay,\n });\n const key = [id, Json.stringify(chain)].filter(Boolean).join(':');\n if (clientCache.has(key))\n return clientCache.get(key);\n const client = createClient({\n ...config,\n chain,\n pollingInterval: 1_000,\n transport,\n });\n clientCache.set(key, client);\n return client;\n}\n//# sourceMappingURL=RelayClient.js.map","import * as Key from '../../viem/Key.js';\nimport * as Permissions_ from './schema/permissions.js';\nexport const Schema = Permissions_.Permissions;\nexport function fromKey(key, options) {\n const { chainId, expiry, permissions, id, publicKey, type } = key;\n const { address } = options;\n return {\n address,\n chainId,\n expiry,\n id,\n key: {\n publicKey,\n type,\n },\n permissions: (permissions ?? {}),\n };\n}\nexport function toKey(permissions) {\n const { chainId, expiry, key } = permissions;\n return Key.from({\n chainId,\n expiry,\n permissions: permissions.permissions ?? {},\n publicKey: key.publicKey,\n role: 'session',\n type: key.type,\n });\n}\n//# sourceMappingURL=permissions.js.map","import * as RpcResponse from 'ox/RpcResponse';\nimport * as z from 'zod/mini';\nimport * as RpcRequest from './rpc.js';\nimport * as u from './utils.js';\nexport * from './rpc.js';\nexport const Request = z.discriminatedUnion('method', [\n RpcRequest.account_verifyEmail.Request,\n RpcRequest.wallet_addFunds.Request,\n RpcRequest.eth_accounts.Request,\n RpcRequest.eth_chainId.Request,\n RpcRequest.eth_requestAccounts.Request,\n RpcRequest.eth_sendTransaction.Request,\n RpcRequest.eth_signTypedData_v4.Request,\n RpcRequest.wallet_getAccountVersion.Request,\n RpcRequest.wallet_getAdmins.Request,\n RpcRequest.wallet_getPermissions.Request,\n RpcRequest.wallet_grantAdmin.Request,\n RpcRequest.wallet_grantPermissions.Request,\n RpcRequest.wallet_prepareUpgradeAccount.Request,\n RpcRequest.wallet_revokeAdmin.Request,\n RpcRequest.wallet_revokePermissions.Request,\n RpcRequest.wallet_upgradeAccount.Request,\n RpcRequest.personal_sign.Request,\n RpcRequest.porto_ping.Request,\n RpcRequest.wallet_connect.Request,\n RpcRequest.wallet_disconnect.Request,\n RpcRequest.wallet_getAssets.Request,\n RpcRequest.wallet_getCallsStatus.Request,\n RpcRequest.wallet_getCapabilities.Request,\n RpcRequest.wallet_getKeys.Request,\n RpcRequest.wallet_prepareCalls.Request,\n RpcRequest.wallet_sendCalls.Request,\n RpcRequest.wallet_sendPreparedCalls.Request,\n RpcRequest.wallet_switchEthereumChain.Request,\n RpcRequest.wallet_verifySignature.Request,\n]);\nexport function validate(schema, value) {\n const result = z.safeParse(schema, value);\n if (result.error) {\n const issue = result.error.issues.at(0);\n if (issue?.code === 'invalid_union' &&\n issue.note === 'No matching discriminator')\n throw new RpcResponse.MethodNotSupportedError();\n throw new RpcResponse.InvalidParamsError(u.toValidationError(result.error));\n }\n return {\n ...value,\n _decoded: result.data,\n };\n}\n/** @internal */\nexport const schemaWithJsonRpc = (schema) => z.intersection(schema, z.object({\n _returnType: z.unknown(),\n id: z.number(),\n jsonrpc: z.literal('2.0'),\n}));\n//# sourceMappingURL=request.js.map","export async function waitForHydration(store) {\n if (store.persist.hasHydrated())\n return;\n await new Promise((resolve) => {\n store.persist.onFinishHydration(() => resolve(true));\n setTimeout(() => resolve(true), 100);\n });\n}\n//# sourceMappingURL=store.js.map","export function toAbsolute(url) {\n if (!url)\n return undefined;\n if (url.startsWith('/'))\n return `${window.location.origin}${url}`;\n return url;\n}\n//# sourceMappingURL=urlString.js.map","import * as Mipd from 'mipd';\nimport * as Address from 'ox/Address';\nimport * as Hex from 'ox/Hex';\nimport * as ox_Provider from 'ox/Provider';\nimport * as RpcResponse from 'ox/RpcResponse';\nimport { withCache } from 'viem';\nimport * as z from 'zod/mini';\nimport * as Account from '../../viem/Account.js';\nimport * as Actions from '../../viem/internal/relayActions.js';\nimport * as RelayClient from '../../viem/RelayClient.js';\nimport * as Permissions from './permissions.js';\nimport * as RpcRequest from './schema/request.js';\nimport * as Rpc from './schema/rpc.js';\nimport * as Store from './store.js';\nimport * as UrlString from './urlString.js';\nimport { uuidv4 } from './utils.js';\nexport function from(parameters) {\n const { config, getMode, id, store } = parameters;\n const { announceProvider } = config;\n function getCapabilities(parameters = {}) {\n const client = getClient();\n const request = parameters.request ??\n RpcRequest.validate(RpcRequest.Request, {\n method: 'wallet_getCapabilities',\n params: parameters.chainIds\n ? [undefined, parameters.chainIds]\n : undefined,\n });\n return withCache(() => getMode().actions.getCapabilities({\n chainIds: parameters.chainIds,\n internal: {\n client,\n config,\n request,\n store,\n },\n }), { cacheKey: `getCapabilities.${id}.${parameters.chainIds?.join(',')}` });\n }\n function getClient(chainId_) {\n const chainId = typeof chainId_ === 'string' ? Hex.toNumber(chainId_) : chainId_;\n return RelayClient.fromPorto({ _internal: parameters }, { chainId });\n }\n const lock = new Map();\n const preparedAccounts_internal = [];\n const emitter = ox_Provider.createEmitter();\n const provider = ox_Provider.from({\n ...emitter,\n async request(request_) {\n await Store.waitForHydration(store);\n let request;\n try {\n request = RpcRequest.validate(RpcRequest.Request, request_);\n }\n catch (e) {\n const error = e;\n if (!(error instanceof RpcResponse.MethodNotSupportedError))\n throw error;\n // catch unsupported methods\n if (request_.method.startsWith('wallet_'))\n throw new ox_Provider.UnsupportedMethodError();\n return getClient().request(request_);\n }\n const state = store.getState();\n switch (request.method) {\n case 'account_verifyEmail': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [parameters] = request._decoded.params;\n const { chainId, email, token, walletAddress } = parameters;\n const client = getClient(chainId);\n if (chainId && chainId !== client.chain.id)\n throw new ox_Provider.ChainDisconnectedError();\n const account = walletAddress\n ? state.accounts.find((account) => Address.isEqual(account.address, walletAddress))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n return await getMode().actions.verifyEmail({\n account,\n chainId,\n email,\n internal: {\n client,\n config,\n request,\n store,\n },\n token,\n walletAddress,\n });\n }\n case 'wallet_addFunds': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const { address, value, token } = request.params[0] ?? {};\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const result = await getMode().actions.addFunds({\n address: account.address,\n internal: {\n client,\n config,\n request,\n store,\n },\n token,\n value,\n });\n emitter.emit('message', {\n data: null,\n type: 'assetsChanged',\n });\n return result;\n }\n case 'eth_accounts': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n return state.accounts.map((account) => account.address);\n }\n case 'eth_chainId': {\n return Hex.fromNumber(state.chainIds[0]);\n }\n case 'eth_requestAccounts': {\n // Some apps will call `eth_requestAccounts` multiple times in a short period of time.\n // Return the cached accounts if the request is locked.\n if (state.accounts.length > 0 && lock.get('eth_requestAccounts'))\n return state.accounts.map((account) => account.address);\n const client = getClient();\n const { accounts } = await getMode().actions.loadAccounts({\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n store.setState((x) => ({ ...x, accounts }));\n emitter.emit('connect', {\n chainId: Hex.fromNumber(client.chain.id),\n });\n lock.set('eth_requestAccounts', true);\n setTimeout(() => lock.delete('eth_requestAccounts'), 1_000);\n return accounts.map((account) => account.address);\n }\n case 'eth_sendTransaction': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ capabilities, chainId, data = '0x', from, to, value }] = request._decoded.params;\n const client = getClient(chainId);\n if (chainId && chainId !== client.chain.id)\n throw new ox_Provider.ChainDisconnectedError();\n const account = from\n ? state.accounts.find((account) => Address.isEqual(account.address, from))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const { id } = await getMode().actions.sendCalls({\n account,\n asTxHash: true,\n calls: [\n {\n data,\n to,\n value,\n },\n ],\n internal: {\n client,\n config,\n request,\n store,\n },\n merchantUrl: UrlString.toAbsolute(config.merchantUrl ?? capabilities?.merchantUrl),\n });\n return id;\n }\n case 'eth_signTypedData_v4': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [address, data] = request._decoded.params;\n const account = state.accounts.find((account) => Address.isEqual(account.address, address));\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const signature = await getMode().actions.signTypedData({\n account,\n data,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n return signature;\n }\n case 'wallet_grantAdmin': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, capabilities, chainId, key: keyToAuthorize }] = request._decoded.params ?? [{}];\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient(chainId);\n const keyExists = getAdmins([...(account.keys ?? [])])?.some((key) => key.publicKey?.toLowerCase() ===\n keyToAuthorize.publicKey.toLowerCase());\n if (keyExists)\n throw new RpcResponse.InvalidParamsError({\n message: 'Key already granted as admin.',\n });\n const { key } = await getMode().actions.grantAdmin({\n account,\n feeToken: capabilities?.feeToken,\n internal: {\n client,\n config,\n request,\n store,\n },\n key: keyToAuthorize,\n });\n store.setState((x) => {\n const index = x.accounts.findIndex((x) => account ? Address.isEqual(x.address, account.address) : true);\n if (index === -1)\n return x;\n return {\n ...x,\n accounts: x.accounts.map((account, i) => i === index\n ? { ...account, keys: [...(account.keys ?? []), key] }\n : account),\n };\n });\n const admins = getAdmins([...(account.keys ?? []), key]);\n emitter.emit('message', {\n data: null,\n type: 'adminsChanged',\n });\n return z.encode(Rpc.wallet_grantAdmin.Response, {\n address: account.address,\n chainId: client.chain.id,\n key: admins.at(-1),\n });\n }\n case 'wallet_grantPermissions': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, chainId, ...permissions }] = request._decoded\n .params ?? [{}];\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient(chainId);\n const { key } = await getMode().actions.grantPermissions({\n account,\n internal: {\n client,\n config,\n request,\n store,\n },\n permissions,\n });\n store.setState((x) => {\n const index = x.accounts.findIndex((x) => account ? Address.isEqual(x.address, account.address) : true);\n if (index === -1)\n return x;\n return {\n ...x,\n accounts: x.accounts.map((account, i) => i === index\n ? { ...account, keys: [...(account.keys ?? []), key] }\n : account),\n };\n });\n emitter.emit('message', {\n data: null,\n type: 'permissionsChanged',\n });\n return z.encode(Rpc.wallet_grantPermissions.Response, {\n ...Permissions.fromKey(key, {\n address: account.address,\n }),\n });\n }\n case 'wallet_getAdmins': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, chainId }] = request._decoded.params ?? [{}];\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient(chainId);\n const keys = await getMode().actions.getKeys({\n account,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n const admins = getAdmins(keys);\n return z.encode(Rpc.wallet_getAdmins.Response, {\n address: account.address,\n chainId: client.chain.id,\n keys: admins,\n });\n }\n case 'wallet_prepareUpgradeAccount': {\n const [{ address, capabilities, chainId }] = request._decoded\n .params ?? [{}];\n const { email, label, grantPermissions: permissions, } = capabilities ?? {};\n const client = getClient(chainId);\n const { context, digests } = await getMode().actions.prepareUpgradeAccount({\n address,\n email,\n internal: {\n client,\n config,\n request,\n store,\n },\n label,\n permissions,\n });\n preparedAccounts_internal.push(context.account);\n return {\n context,\n digests,\n };\n }\n case 'wallet_getAccountVersion': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address }] = request._decoded.params ?? [{}];\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const { current, latest } = await getMode().actions.getAccountVersion({\n address: account.address,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n return {\n current,\n latest,\n };\n }\n case 'wallet_getKeys': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, chainIds }] = request._decoded.params ?? [{}];\n const account = state.accounts.find((account) => Address.isEqual(account.address, address));\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const keys = await getMode().actions.getKeys({\n account,\n chainIds,\n internal: { client, config, request, store },\n });\n return z.encode(Rpc.wallet_getKeys.Response, keys);\n }\n case 'wallet_getPermissions': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, chainIds }] = request._decoded.params ?? [{}];\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const keys = await getMode().actions.getKeys({\n account,\n chainIds,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n const permissions = getActivePermissions(keys, {\n address: account.address,\n });\n return permissions;\n }\n case 'wallet_revokeAdmin': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, capabilities, id }] = request._decoded.params;\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n await getMode().actions.revokeAdmin({\n account,\n feeToken: capabilities?.feeToken,\n id,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n const keys = account.keys?.filter((key) => key.id.toLowerCase() !== id.toLowerCase());\n store.setState((x) => ({\n ...x,\n accounts: x.accounts.map((x) => Address.isEqual(x.address, account.address)\n ? {\n ...x,\n keys,\n }\n : x),\n }));\n emitter.emit('message', {\n data: null,\n type: 'adminsChanged',\n });\n return;\n }\n case 'wallet_revokePermissions': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [{ address, capabilities, id }] = request._decoded.params;\n const account = address\n ? state.accounts.find((account) => Address.isEqual(account.address, address))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n await getMode().actions.revokePermissions({\n account,\n feeToken: capabilities?.feeToken,\n id,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n const keys = account.keys?.filter((key) => key.id.toLowerCase() !== id.toLowerCase());\n store.setState((x) => ({\n ...x,\n accounts: x.accounts.map((x) => Address.isEqual(x.address, account.address)\n ? {\n ...x,\n keys,\n }\n : x),\n }));\n emitter.emit('message', {\n data: null,\n type: 'permissionsChanged',\n });\n return;\n }\n case 'wallet_upgradeAccount': {\n const [{ context, signatures }] = request._decoded.params ?? [{}];\n const client = getClient();\n const account_ = preparedAccounts_internal.find((account) => Address.isEqual(account.address, context.account.address));\n if (!account_)\n throw new ox_Provider.UnauthorizedError();\n const { account } = await getMode().actions.upgradeAccount({\n account: account_,\n context,\n internal: {\n client,\n config,\n request,\n store,\n },\n signatures,\n });\n const admins = getAdmins(account.keys ?? []);\n const permissions = getActivePermissions(account.keys ?? [], {\n address: account.address,\n });\n store.setState((x) => ({ ...x, accounts: [account] }));\n emitter.emit('connect', {\n chainId: Hex.fromNumber(client.chain.id),\n });\n return {\n address: account.address,\n capabilities: {\n admins,\n ...(permissions.length > 0 ? { permissions } : {}),\n },\n };\n }\n case 'porto_ping': {\n return 'pong';\n }\n case 'personal_sign': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [data, address] = request._decoded.params;\n const account = state.accounts.find((account) => Address.isEqual(account.address, address));\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const client = getClient();\n const signature = await getMode().actions.signPersonalMessage({\n account,\n data,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n return signature;\n }\n case 'wallet_connect': {\n const [{ capabilities, chainIds }] = request._decoded.params ?? [{}];\n const client = getClient(chainIds?.[0]);\n const chainId = client.chain.id;\n const { createAccount, email, grantAdmins: admins, grantPermissions: permissions, selectAccount, signInWithEthereum, } = capabilities ?? {};\n const internal = {\n client,\n config,\n request,\n store,\n };\n const { accounts } = await (async () => {\n if (email || createAccount) {\n const { label = undefined } = typeof createAccount === 'object' ? createAccount : {};\n const { account } = await getMode().actions.createAccount({\n admins,\n email,\n internal,\n label,\n permissions,\n signInWithEthereum,\n });\n return { accounts: [account] };\n }\n const account = state.accounts[0];\n const { address, key } = (() => {\n if (selectAccount) {\n if (typeof selectAccount === 'object')\n return selectAccount;\n return {\n address: undefined,\n key: undefined,\n };\n }\n for (const key of account?.keys ?? []) {\n if (key.type === 'webauthn-p256' && key.role === 'admin')\n return {\n address: account?.address,\n key: {\n credentialId: key.credentialId ??\n key.privateKey?.credential?.id,\n publicKey: key.publicKey,\n },\n };\n }\n return {\n address: undefined,\n key: undefined,\n };\n })();\n const loadAccountsParams = {\n internal,\n permissions,\n signInWithEthereum,\n };\n try {\n // try to restore from stored account (`address`/`key`) to avoid multiple prompts\n return await getMode().actions.loadAccounts({\n address,\n key,\n ...loadAccountsParams,\n });\n }\n catch (error) {\n if (error instanceof ox_Provider.UserRejectedRequestError)\n throw error;\n // error with `address`/`key` likely means one or both are stale, retry\n if (address && key)\n return await getMode().actions.loadAccounts(loadAccountsParams);\n throw error;\n }\n })();\n store.setState((x) => ({ ...x, accounts }));\n const chainIds_response = [\n chainId,\n ...store.getState().chainIds.filter((id) => id !== chainId),\n ];\n emitter.emit('connect', {\n chainId: Hex.fromNumber(chainIds_response[0]),\n });\n return {\n accounts: accounts.map((account) => ({\n address: account.address,\n capabilities: {\n admins: account.keys ? getAdmins(account.keys) : [],\n permissions: account.keys\n ? getActivePermissions(account.keys, {\n address: account.address,\n })\n : [],\n ...(account.signInWithEthereum && {\n signInWithEthereum: account.signInWithEthereum,\n }),\n },\n })),\n chainIds: chainIds_response.map((chainId) => Hex.fromNumber(chainId)),\n };\n }\n case 'wallet_disconnect': {\n const client = getClient();\n await getMode().actions.disconnect?.({\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n store.setState((x) => ({ ...x, accounts: [] }));\n emitter.emit('disconnect', new ox_Provider.DisconnectedError());\n return;\n }\n case 'wallet_getAssets': {\n const [parameters] = request._decoded.params ?? [];\n const { account, chainFilter, assetFilter, assetTypeFilter } = parameters;\n const client = getClient();\n const response = await getMode().actions.getAssets({\n account,\n assetFilter,\n assetTypeFilter,\n chainFilter,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n const value = Object.entries(response).reduce((acc, [key, value]) => {\n acc[Hex.fromNumber(Number(key))] = value;\n return acc;\n }, {});\n return z.encode(Rpc.wallet_getAssets.Response, value);\n }\n case 'wallet_getCallsStatus': {\n const [id] = request._decoded.params ?? [];\n const client = getClient();\n const response = await getMode().actions.getCallsStatus({\n id,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n return response;\n }\n case 'wallet_getCapabilities': {\n const [_, chainIds] = request.params ?? [];\n const capabilities = await getCapabilities({\n chainIds,\n request,\n });\n return capabilities;\n }\n case 'wallet_prepareCalls': {\n const [parameters] = request._decoded.params;\n const { calls, capabilities, chainId, key, from } = parameters;\n const client = getClient(chainId);\n const account = from ?? state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n if (chainId && chainId !== client.chain.id)\n throw new ox_Provider.ChainDisconnectedError();\n const { digest, ...rest } = await getMode().actions.prepareCalls({\n account: Account.from(account),\n calls,\n feeToken: capabilities?.feeToken,\n internal: {\n client,\n config,\n request,\n store,\n },\n key,\n merchantUrl: UrlString.toAbsolute(config.merchantUrl ?? capabilities?.merchantUrl),\n requiredFunds: capabilities?.requiredFunds,\n });\n return z.encode(Rpc.wallet_prepareCalls.Response, {\n capabilities: rest.capabilities,\n chainId: Hex.fromNumber(rest.chainId ?? client.chain.id),\n context: {\n ...rest.context,\n account: {\n address: rest.account.address,\n },\n calls: rest.context.calls ?? [],\n nonce: rest.context.nonce ?? 0n,\n },\n digest,\n key: rest.key,\n typedData: rest.typedData,\n });\n }\n case 'wallet_sendPreparedCalls': {\n const [parameters] = request._decoded.params;\n const { chainId, context, key, signature } = parameters;\n const { account } = parameters.context;\n const client = getClient(chainId);\n if (chainId && Hex.toNumber(chainId) !== client.chain.id)\n throw new ox_Provider.ChainDisconnectedError();\n const hash = await getMode().actions.sendPreparedCalls({\n account: Account.from(account),\n context,\n internal: {\n client,\n config,\n request,\n store,\n },\n key,\n signature,\n });\n return [{ id: hash }];\n }\n case 'wallet_sendCalls': {\n if (state.accounts.length === 0)\n throw new ox_Provider.DisconnectedError();\n const [parameters] = request._decoded.params;\n const { calls, capabilities, chainId, from } = parameters;\n const client = getClient(chainId);\n if (chainId && chainId !== client.chain.id)\n throw new ox_Provider.ChainDisconnectedError();\n const account = from\n ? state.accounts.find((account) => Address.isEqual(account.address, from))\n : state.accounts[0];\n if (!account)\n throw new ox_Provider.UnauthorizedError();\n const { id } = await getMode().actions.sendCalls({\n account,\n calls,\n feeToken: capabilities?.feeToken,\n internal: {\n client,\n config,\n request,\n store,\n },\n merchantUrl: UrlString.toAbsolute(config.merchantUrl ?? capabilities?.merchantUrl),\n permissionsId: capabilities?.permissions?.id,\n requiredFunds: capabilities?.requiredFunds,\n });\n return { id };\n }\n case 'wallet_switchEthereumChain': {\n const [parameters] = request._decoded.params;\n const { chainId } = parameters;\n const chainId_number = Hex.toNumber(chainId);\n const chain = config.chains.find((chain) => chain.id === chainId_number);\n if (!chain)\n throw new ox_Provider.UnsupportedChainIdError();\n const client = getClient(chainId);\n await getMode().actions.switchChain?.({\n chainId: client.chain.id,\n internal: {\n client,\n config,\n request,\n store,\n },\n });\n store.setState((state) => ({\n ...state,\n chainIds: [\n chainId_number,\n ...state.chainIds.filter((id) => id !== chainId_number),\n ],\n }));\n return undefined;\n }\n case 'wallet_verifySignature': {\n const [parameters] = request._decoded.params;\n const { address, chainId, digest, signature } = parameters;\n const client = getClient(chainId);\n const result = await Actions.verifySignature(client, {\n address,\n digest,\n signature,\n });\n return {\n ...result,\n address,\n chainId: Hex.fromNumber(client.chain.id),\n };\n }\n }\n },\n });\n function setup() {\n let unsubscribe_accounts = () => { };\n let unsubscribe_chain = () => { };\n Store.waitForHydration(store).then(() => {\n // Pre-fetch the capabilities to hit cache.\n getCapabilities().catch(() => { });\n unsubscribe_accounts();\n unsubscribe_accounts = store.subscribe((state) => state.accounts, (accounts) => {\n emitter.emit('accountsChanged', accounts.map((account) => account.address));\n }, {\n equalityFn: (a, b) => a.every((a, index) => a.address === b[index]?.address),\n });\n unsubscribe_chain();\n unsubscribe_chain = store.subscribe((state) => state.chainIds[0], (chainId, previousChainId) => {\n if (chainId === previousChainId)\n return;\n emitter.emit('chainChanged', Hex.fromNumber(chainId));\n });\n });\n const unannounce = announce(provider, announceProvider);\n return () => {\n unsubscribe_accounts();\n unsubscribe_chain();\n unannounce();\n };\n }\n const destroy = setup();\n return Object.assign(provider, {\n _internal: {\n destroy,\n },\n });\n}\nfunction announce(provider, info) {\n if (!info)\n return () => { };\n if (typeof window === 'undefined' || !window.dispatchEvent)\n return () => { };\n const { icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIyIiBoZWlnaHQ9IjQyMiIgdmlld0JveD0iMCAwIDQyMiA0MjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MjIiIGhlaWdodD0iNDIyIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV8xNSkiPgo8cGF0aCBkPSJNODEgMjg2LjM2NkM4MSAyODAuODkzIDg1LjQ1MDUgMjc2LjQ1NSA5MC45NDA0IDI3Ni40NTVIMzI5LjUxMUMzMzUuMDAxIDI3Ni40NTUgMzM5LjQ1MiAyODAuODkzIDMzOS40NTIgMjg2LjM2NlYzMDYuMTg4QzMzOS40NTIgMzExLjY2MiAzMzUuMDAxIDMxNi4wOTkgMzI5LjUxMSAzMTYuMDk5SDkwLjk0MDRDODUuNDUwNSAzMTYuMDk5IDgxIDMxMS42NjIgODEgMzA2LjE4OFYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAyMzQuODI4Qzg1LjQ1MDUgMjM0LjgyOCA4MSAyMzkuMjY2IDgxIDI0NC43MzlWMjcxLjUzMUM4My44NDMyIDI2OS42MzMgODcuMjYyMiAyNjguNTI2IDkwLjk0MDQgMjY4LjUyNkgzMjkuNTExQzMzMy4xODggMjY4LjUyNiAzMzYuNjA4IDI2OS42MzMgMzM5LjQ1MiAyNzEuNTMxVjI0NC43MzlDMzM5LjQ1MiAyMzkuMjY2IDMzNS4wMDEgMjM0LjgyOCAzMjkuNTExIDIzNC44MjhIOTAuOTQwNFpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgwLjg5MyAzMzUuMDAxIDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTlDODEgMzExLjY2NCA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2NCAzMzkuNDUyIDMwNi4xOVYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAxOTMuMjAxQzg1LjQ1MDUgMTkzLjIwMSA4MSAxOTcuNjM4IDgxIDIwMy4xMTJWMjI5LjkwM0M4My44NDMyIDIyOC4wMDYgODcuMjYyMiAyMjYuODk5IDkwLjk0MDQgMjI2Ljg5OUgzMjkuNTExQzMzMy4xODggMjI2Ljg5OSAzMzYuNjA4IDIyOC4wMDYgMzM5LjQ1MiAyMjkuOTAzVjIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNFpNMzM5LjQ1MiAyNDQuNzM5QzMzOS40NTIgMjM5LjI2NSAzMzUuMDAxIDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNDODEuMjE3NSAyNzEuMzg1IDgxLjQzODMgMjcxLjI0NSA4MS42NjI0IDI3MS4xMDlDODMuODMyNSAyNjkuNzk0IDg2LjMwNTQgMjY4LjkyNyA4OC45NTIzIDI2OC42MzVDODkuNjA1MSAyNjguNTYzIDkwLjI2ODQgMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMzAuMTgzIDI2OC41MjYgMzMwLjg0NiAyNjguNTYzIDMzMS40OTggMjY4LjYzNUMzMzQuNDE5IDI2OC45NTcgMzM3LjEyOCAyNjkuOTggMzM5LjQ1MiAyNzEuNTNWMjQ0LjczOVpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgxLjAyMSAzMzUuMjA2IDI3Ni42NjMgMzI5Ljg5MyAyNzYuNDYyQzMyOS43NjcgMjc2LjQ1NyAzMjkuNjQgMjc2LjQ1NSAzMjkuNTExIDI3Ni40NTVIOTAuOTQwNEM4NS40NTA1IDI3Ni40NTUgODEgMjgwLjg5MyA4MSAyODYuMzY2VjMwNi4xODhDODEgMzExLjY2MiA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2MiAzMzkuNDUyIDMwNi4xODhWMjg2LjM2NloiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBvcGFjaXR5PSIwLjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguMDE0NiAxMDRDODguNjE3NyAxMDQgODEgMTExLjU5NSA4MSAxMjAuOTY1VjE4OC4yNzZDODMuODQzMiAxODYuMzc5IDg3LjI2MjIgMTg1LjI3MiA5MC45NDA0IDE4NS4yNzJIMzI5LjUxMUMzMzMuMTg4IDE4NS4yNzIgMzM2LjYwOCAxODYuMzc5IDMzOS40NTIgMTg4LjI3NlYxMjAuOTY1QzMzOS40NTIgMTExLjU5NSAzMzEuODMzIDEwNCAzMjIuNDM3IDEwNEg5OC4wMTQ2Wk0zMzkuNDUyIDIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNEM4NS40NTA1IDE5My4yMDEgODEgMTk3LjYzOCA4MSAyMDMuMTEyVjIyOS45MDNDODEuMjE3NSAyMjkuNzU4IDgxLjQzODMgMjI5LjYxOCA4MS42NjI0IDIyOS40ODJDODMuODMyNSAyMjguMTY3IDg2LjMwNTQgMjI3LjMgODguOTUyMyAyMjcuMDA4Qzg5LjYwNTEgMjI2LjkzNiA5MC4yNjg0IDIyNi44OTkgOTAuOTQwNCAyMjYuODk5SDMyOS41MTFDMzMwLjE4MyAyMjYuODk5IDMzMC44NDYgMjI2LjkzNiAzMzEuNDk4IDIyNy4wMDhDMzM0LjQxOSAyMjcuMzMgMzM3LjEyOCAyMjguMzUyIDMzOS40NTIgMjI5LjkwM1YyMDMuMTEyWk0zMzkuNDUyIDI0NC43MzlDMzM5LjQ1MiAyMzkuMzkzIDMzNS4yMDYgMjM1LjAzNiAzMjkuODkzIDIzNC44MzVDMzI5Ljc2NyAyMzQuODMgMzI5LjY0IDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNMODEuMDcwNyAyNzEuNDgzQzgxLjI2NTMgMjcxLjM1NSA4MS40NjI1IDI3MS4yMyA4MS42NjI0IDI3MS4xMDlDODEuOTA4MyAyNzAuOTYgODIuMTU4MSAyNzAuODE3IDgyLjQxMTcgMjcwLjY3OUM4NC4zOTUzIDI2OS42MDUgODYuNjA1NCAyNjguODk0IDg4Ljk1MjMgMjY4LjYzNUM4OS4wMDUyIDI2OC42MjkgODkuMDU4IDI2OC42MjQgODkuMTExIDI2OC42MThDODkuNzEyNSAyNjguNTU3IDkwLjMyMjggMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMjkuNzM4IDI2OC41MjYgMzI5Ljk2NSAyNjguNTMgMzMwLjE5MiAyNjguNTM5QzMzMC42MzEgMjY4LjU1NSAzMzEuMDY3IDI2OC41ODcgMzMxLjQ5OCAyNjguNjM1QzMzNC40MTkgMjY4Ljk1NyAzMzcuMTI4IDI2OS45OCAzMzkuNDUyIDI3MS41M1YyNDQuNzM5Wk0zMzkuNDUyIDI4Ni4zNjZDMzM5LjQ1MiAyODEuMDIxIDMzNS4yMDYgMjc2LjY2MyAzMjkuODkzIDI3Ni40NjJMMzI5Ljg2NSAyNzYuNDYxQzMyOS43NDggMjc2LjQ1NyAzMjkuNjI5IDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTg4QzgxIDMxMS42NjIgODUuNDUwNSAzMTYuMTAxIDkwLjk0MDQgMzE2LjEwMUgzMjkuNTExQzMzNS4wMDEgMzE2LjEwMSAzMzkuNDUyIDMxMS42NjIgMzM5LjQ1MiAzMDYuMTg4VjI4Ni4zNjZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjY5Ljg2OCAxMzEuNzUyQzI2OS44NjggMTI2LjI3OCAyNzQuMzE4IDEyMS44NCAyNzkuODA4IDEyMS44NEgzMTEuNjE4QzMxNy4xMDggMTIxLjg0IDMyMS41NTggMTI2LjI3OCAzMjEuNTU4IDEzMS43NTJWMTYxLjQ4NUMzMjEuNTU4IDE2Ni45NTkgMzE3LjEwOCAxNzEuMzk2IDMxMS42MTggMTcxLjM5NkgyNzkuODA4QzI3NC4zMTggMTcxLjM5NiAyNjkuODY4IDE2Ni45NTkgMjY5Ljg2OCAxNjEuNDg1VjEzMS43NTJaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMTUiPgo8cmVjdCB3aWR0aD0iMjU5IiBoZWlnaHQ9IjIxMyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgxIDEwNCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K', name = 'Porto', rdns = 'xyz.ithaca.porto', } = typeof info === 'object' ? info : {};\n return Mipd.announceProvider({\n info: {\n icon,\n name,\n rdns,\n uuid: uuidv4(),\n },\n provider: provider,\n });\n}\nfunction getAdmins(keys) {\n return keys\n .map((key) => {\n if (key.role !== 'admin')\n return undefined;\n try {\n return z.encode(Rpc.wallet_getAdmins.Key, {\n id: key.id ?? key.publicKey,\n publicKey: key.publicKey,\n type: key.type,\n ...(key.type === 'webauthn-p256'\n ? {\n credentialId: key.privateKey?.credential?.id,\n privateKey: {\n credential: {\n id: key.privateKey?.credential?.id,\n },\n rpId: key.privateKey?.rpId,\n },\n }\n : {}),\n });\n }\n catch {\n return undefined;\n }\n })\n .filter(Boolean);\n}\nfunction getActivePermissions(keys, { address }) {\n return keys\n .map((key) => {\n if (!key.chainId)\n return undefined;\n if (key.role !== 'session')\n return undefined;\n if (key.expiry > 0 && key.expiry < BigInt(Math.floor(Date.now() / 1000)))\n return undefined;\n try {\n return z.encode(Permissions.Schema, Permissions.fromKey(key, { address }));\n }\n catch {\n return undefined;\n }\n })\n .filter(Boolean);\n}\n//# sourceMappingURL=provider.js.map","import * as AbiItem from 'ox/AbiItem';\nimport * as Hex from 'ox/Hex';\nimport * as Call from './call.js';\n/**\n * Instantiates a mode.\n *\n * @param mode - Mode.\n * @returns Mode.\n */\nexport function from(mode) {\n return {\n ...mode,\n setup: mode.setup ?? (() => () => { }),\n };\n}\n/**\n * Returns the calls needed to authorize the given keys (and permissions).\n *\n * @param keys - Keys to authorize.\n * @returns Calls to authorize the given keys.\n */\nexport function getAuthorizeCalls(keys) {\n return keys.flatMap((key) => {\n const { permissions, role } = key;\n const permissionCalls = [];\n // Set call scopes.\n if (permissions?.calls)\n permissionCalls.push(...permissions.calls.map((scope) => {\n const selector = (() => {\n if (!scope.signature)\n return undefined;\n if (scope.signature.startsWith('0x'))\n return scope.signature;\n return AbiItem.getSelector(scope.signature);\n })();\n return Call.setCanExecute({\n key,\n selector,\n to: scope.to,\n });\n }));\n else if (role === 'session')\n permissionCalls.push(Call.setCanExecute({ key }));\n // Set spend limits.\n if (permissions?.spend)\n permissionCalls.push(...permissions.spend.map((spend) => Call.setSpendLimit({ key, ...spend })));\n // If no spend limits are provided for a session, set a default of 0\n // (account cannot spend ERC20, ERC721, ETH, etc).\n else if (role === 'session')\n permissionCalls.push(Call.setSpendLimit({ key, limit: 0n, period: 'year' }));\n // Set authorized contracts for signature verification.\n if (permissions?.signatureVerification) {\n const { addresses } = permissions.signatureVerification;\n permissionCalls.push(...addresses.map((address) => Call.setSignatureCheckerApproval({\n address,\n enabled: true,\n key,\n })));\n }\n return [Call.authorize({ key }), ...permissionCalls];\n });\n}\n/**\n *\n * @param parameters\n * @returns\n */\nexport async function getAuthorizedExecuteKey(parameters) {\n const { account, calls, permissionsId } = parameters;\n // If a key is provided, use it.\n if (typeof permissionsId !== 'undefined') {\n if (permissionsId === null)\n return undefined;\n const key = account.keys?.find((key) => key.publicKey === permissionsId && key.privateKey);\n if (!key)\n throw new Error(`permission (id: ${permissionsId}) does not exist.`);\n return key;\n }\n // Otherwise, try and find a valid session key.\n const sessionKey = account.keys?.find((key) => {\n if (!key.privateKey)\n return false;\n if (key.role !== 'session')\n return false;\n if (key.expiry < BigInt(Math.floor(Date.now() / 1000)))\n return false;\n // Check if every call is covered by a call permission.\n const hasValidScope = calls.every((call) => key.permissions?.calls?.some((scope) => {\n if (scope.to && scope.to !== call.to)\n return false;\n if (scope.signature) {\n if (!call.data)\n return false;\n const selector = Hex.slice(call.data, 0, 4);\n if (Hex.validate(scope.signature))\n return scope.signature === selector;\n if (AbiItem.getSelector(scope.signature) !== selector)\n return false;\n }\n return true;\n }));\n if (hasValidScope)\n return true;\n return false;\n });\n // Fall back to an admin key.\n const adminKey = account.keys?.find((key) => key.role === 'admin' && key.privateKey);\n return sessionKey ?? adminKey;\n}\n//# sourceMappingURL=mode.js.map","/**\n * Creates a JSON-RPC request store to build requests with an incrementing `id`.\n *\n * Returns a type-safe `prepare` function to build a JSON-RPC request object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object).\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest } from 'ox'\n *\n * const store = RpcRequest.createStore()\n *\n * const request_1 = store.prepare({\n * method: 'eth_blockNumber',\n * })\n * // @log: { id: 0, jsonrpc: '2.0', method: 'eth_blockNumber' }\n *\n * const request_2 = store.prepare({\n * method: 'eth_call',\n * params: [\n * {\n * to: '0x0000000000000000000000000000000000000000',\n * data: '0xdeadbeef',\n * },\n * ],\n * })\n * // @log: { id: 1, jsonrpc: '2.0', method: 'eth_call', params: [{ to: '0x0000000000000000000000000000000000000000', data: '0xdeadbeef' }] }\n * ```\n *\n * @example\n * ### Type-safe Custom Schemas\n *\n * It is possible to define your own type-safe schema by using the {@link ox#RpcSchema.From} type.\n *\n * ```ts twoslash\n * import { RpcSchema, RpcRequest } from 'ox'\n *\n * type Schema = RpcSchema.From<{ // [!code focus]\n * Request: { // [!code focus]\n * method: 'eth_foobar' // [!code focus]\n * params: [number] // [!code focus]\n * } // [!code focus]\n * ReturnType: string // [!code focus]\n * } | { // [!code focus]\n * Request: { // [!code focus]\n * method: 'eth_foobaz' // [!code focus]\n * params: [string] // [!code focus]\n * } // [!code focus]\n * ReturnType: string // [!code focus]\n * }> // [!code focus]\n *\n * const store = RpcRequest.createStore<Schema>() // [!code focus]\n *\n * const request = store.prepare({\n * method: 'eth_foobar', // [!code focus]\n * // ^?\n * params: [42],\n * })\n * ```\n *\n * @param options - Request store options.\n * @returns The request store\n */\nexport function createStore(options = {}) {\n let id = options.id ?? 0;\n return {\n prepare(options) {\n return from({\n id: id++,\n ...options,\n });\n },\n get id() {\n return id;\n },\n };\n}\n/**\n * A type-safe interface to build a JSON-RPC request object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object).\n *\n * :::warning\n *\n * You will likely want to use {@link ox#RpcRequest.(createStore:function)} instead as it will also manage `id`s and uses this function internally.\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * // 1. Build a request object.\n * const request = RpcRequest.from({ // [!code focus]\n * id: 0, // [!code focus]\n * method: 'eth_estimateGas', // [!code focus]\n * params: [ // [!code focus]\n * { // [!code focus]\n * from: '0xd2135CfB216b74109775236E36d4b433F1DF507B', // [!code focus]\n * to: '0x0D44f617435088c947F00B31160f64b074e412B4', // [!code focus]\n * value: '0x69420', // [!code focus]\n * }, // [!code focus]\n * ], // [!code focus]\n * }) // [!code focus]\n *\n * // 2. Send the JSON-RPC request via HTTP.\n * const gas = await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(request),\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * method: 'POST',\n * })\n * .then((response) => response.json())\n * // 3. Parse the JSON-RPC response into a type-safe result.\n * .then((response) => RpcResponse.parse(response, { request }))\n * ```\n *\n * @param options - JSON-RPC request options.\n * @returns The fully-formed JSON-RPC request object.\n */\nexport function from(options) {\n return {\n ...options,\n jsonrpc: '2.0',\n };\n}\n//# sourceMappingURL=RpcRequest.js.map","import * as Key from '../../viem/Key.js';\nimport * as Permissions from './schema/permissions.js';\nexport const Schema = Permissions.Request;\nexport function fromKey(key) {\n const { expiry, feeToken, permissions, publicKey, type } = key;\n return {\n expiry,\n feeToken: feeToken ?? null,\n key: {\n publicKey,\n type,\n },\n permissions: (permissions ?? {}),\n };\n}\nexport async function toKey(request, options = {}) {\n if (!request)\n return undefined;\n const chainId = options.chainId ?? request.chainId;\n const expiry = request.expiry ?? 0;\n const type = request.key?.type ?? 'secp256k1';\n const feeToken = request.feeToken;\n const permissions = Key.resolvePermissions(request, {\n feeTokens: options.feeTokens,\n });\n const publicKey = request?.key?.publicKey ?? '0x';\n const key = Key.from({\n chainId,\n expiry,\n feeToken,\n permissions,\n publicKey,\n role: 'session',\n type,\n });\n if (request?.key)\n return key;\n return await Key.createWebCryptoP256({\n ...key,\n role: 'session',\n });\n}\n//# sourceMappingURL=permissionsRequest.js.map","import * as Address from './Address.js';\nimport * as Errors from './Errors.js';\nimport { uid } from './internal/uid.js';\nexport const domainRegex = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}(:[0-9]{1,5})?$/;\nexport const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:[0-9]{1,5})?$/;\nexport const localhostRegex = /^localhost(:[0-9]{1,5})?$/;\nexport const nonceRegex = /^[a-zA-Z0-9]{8,}$/;\nexport const schemeRegex = /^([a-zA-Z][a-zA-Z0-9+-.]*)$/;\n// https://regexr.com/80gdj\nexport const prefixRegex = /^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?<address>0x[a-fA-F0-9]{40})\\n\\n(?:(?<statement>.*)\\n\\n)?/;\n// https://regexr.com/80gf9\nexport const suffixRegex = /(?:URI: (?<uri>.+))\\n(?:Version: (?<version>.+))\\n(?:Chain ID: (?<chainId>\\d+))\\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\\n(?:Issued At: (?<issuedAt>.+))(?:\\nExpiration Time: (?<expirationTime>.+))?(?:\\nNot Before: (?<notBefore>.+))?(?:\\nRequest ID: (?<requestId>.+))?/;\n/**\n * Creates [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.createMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * })\n * // @log: \"example.com wants you to sign in with your Ethereum account:\n * // @log: 0xA0Cf798816D4b9b9866b5330EEa46a18382f251e\n * // @log:\n * // @log:\n * // @log: URI: https://example.com/path\n * // @log: Version: 1\n * // @log: Chain ID: 1\n * // @log: Nonce: foobarbaz\n * // @log: Issued At: 2023-02-01T00:00:00.000Z\"\n * ```\n *\n * @param value - Values to use when creating EIP-4361 formatted message.\n * @returns EIP-4361 formatted message.\n */\nexport function createMessage(value) {\n const { chainId, domain, expirationTime, issuedAt = new Date(), nonce, notBefore, requestId, resources, scheme, uri, version, } = value;\n // Validate fields\n {\n // Required fields\n if (chainId !== Math.floor(chainId))\n throw new InvalidMessageFieldError({\n field: 'chainId',\n metaMessages: [\n '- Chain ID must be a EIP-155 chain ID.',\n '- See https://eips.ethereum.org/EIPS/eip-155',\n '',\n `Provided value: ${chainId}`,\n ],\n });\n if (!(domainRegex.test(domain) ||\n ipRegex.test(domain) ||\n localhostRegex.test(domain)))\n throw new InvalidMessageFieldError({\n field: 'domain',\n metaMessages: [\n '- Domain must be an RFC 3986 authority.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${domain}`,\n ],\n });\n if (!nonceRegex.test(nonce))\n throw new InvalidMessageFieldError({\n field: 'nonce',\n metaMessages: [\n '- Nonce must be at least 8 characters.',\n '- Nonce must be alphanumeric.',\n '',\n `Provided value: ${nonce}`,\n ],\n });\n if (!isUri(uri))\n throw new InvalidMessageFieldError({\n field: 'uri',\n metaMessages: [\n '- URI must be a RFC 3986 URI referring to the resource that is the subject of the signing.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${uri}`,\n ],\n });\n if (version !== '1')\n throw new InvalidMessageFieldError({\n field: 'version',\n metaMessages: [\n \"- Version must be '1'.\",\n '',\n `Provided value: ${version}`,\n ],\n });\n // Optional fields\n if (scheme && !schemeRegex.test(scheme))\n throw new InvalidMessageFieldError({\n field: 'scheme',\n metaMessages: [\n '- Scheme must be an RFC 3986 URI scheme.',\n '- See https://www.rfc-editor.org/rfc/rfc3986#section-3.1',\n '',\n `Provided value: ${scheme}`,\n ],\n });\n const statement = value.statement;\n if (statement?.includes('\\n'))\n throw new InvalidMessageFieldError({\n field: 'statement',\n metaMessages: [\n \"- Statement must not include '\\\\n'.\",\n '',\n `Provided value: ${statement}`,\n ],\n });\n }\n // Construct message\n const address = Address.from(value.address, { checksum: true });\n const origin = (() => {\n if (scheme)\n return `${scheme}://${domain}`;\n return domain;\n })();\n const statement = (() => {\n if (!value.statement)\n return '';\n return `${value.statement}\\n`;\n })();\n const prefix = `${origin} wants you to sign in with your Ethereum account:\\n${address}\\n\\n${statement}`;\n let suffix = `URI: ${uri}\\nVersion: ${version}\\nChain ID: ${chainId}\\nNonce: ${nonce}\\nIssued At: ${issuedAt.toISOString()}`;\n if (expirationTime)\n suffix += `\\nExpiration Time: ${expirationTime.toISOString()}`;\n if (notBefore)\n suffix += `\\nNot Before: ${notBefore.toISOString()}`;\n if (requestId)\n suffix += `\\nRequest ID: ${requestId}`;\n if (resources) {\n let content = '\\nResources:';\n for (const resource of resources) {\n if (!isUri(resource))\n throw new InvalidMessageFieldError({\n field: 'resources',\n metaMessages: [\n '- Every resource must be a RFC 3986 URI.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${resource}`,\n ],\n });\n content += `\\n- ${resource}`;\n }\n suffix += content;\n }\n return `${prefix}\\n${suffix}`;\n}\n/**\n * Generates random [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) nonce.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.generateNonce()\n * // @log: '65ed4681d4efe0270b923ff5f4b097b1c95974dc33aeebecd5724c42fd86dfd25dc70b27ef836b2aa22e68f19ebcccc1'\n * ```\n *\n * @returns Random nonce.\n */\nexport function generateNonce() {\n return uid(96);\n}\n/**\n * Check if the given URI is a valid [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) URI.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.isUri('https://example.com/foo')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `false` if invalid, otherwise the valid URI.\n */\n// based on https://github.com/ogt/valid-url\nexport function isUri(value) {\n // check for illegal characters\n if (/[^a-z0-9:/?#[\\]@!$&'()*+,;=.\\-_~%]/i.test(value))\n return false;\n // check for hex escapes that aren't complete\n if (/%[^0-9a-f]/i.test(value))\n return false;\n if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value))\n return false;\n // from RFC 3986\n const splitted = splitUri(value);\n const scheme = splitted[1];\n const authority = splitted[2];\n const path = splitted[3];\n const query = splitted[4];\n const fragment = splitted[5];\n // scheme and path are required, though the path can be empty\n if (!(scheme?.length && path && path.length >= 0))\n return false;\n // if authority is present, the path must be empty or begin with a /\n if (authority?.length) {\n if (!(path.length === 0 || /^\\//.test(path)))\n return false;\n }\n else {\n // if authority is not present, the path must not start with //\n if (/^\\/\\//.test(path))\n return false;\n }\n // scheme must begin with a letter, then consist of letters, digits, +, ., or -\n if (!/^[a-z][a-z0-9+\\-.]*$/.test(scheme.toLowerCase()))\n return false;\n let out = '';\n // re-assemble the URL per section 5.3 in RFC 3986\n out += `${scheme}:`;\n if (authority?.length)\n out += `//${authority}`;\n out += path;\n if (query?.length)\n out += `?${query}`;\n if (fragment?.length)\n out += `#${fragment}`;\n return out;\n}\nfunction splitUri(value) {\n return value.match(/(?:([^:/?#]+):)?(?:\\/\\/([^/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/);\n}\n/**\n * [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message into message fields object.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.parseMessage(`example.com wants you to sign in with your Ethereum account:\n * 0xA0Cf798816D4b9b9866b5330EEa46a18382f251e\n *\n * I accept the ExampleOrg Terms of Service: https://example.com/tos\n *\n * URI: https://example.com/path\n * Version: 1\n * Chain ID: 1\n * Nonce: foobarbaz\n * Issued At: 2023-02-01T00:00:00.000Z`)\n * // @log: {\n * // @log: address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * // @log: chainId: 1,\n * // @log: domain: 'example.com',\n * // @log: issuedAt: '2023-02-01T00:00:00.000Z',\n * // @log: nonce: 'foobarbaz',\n * // @log: statement: 'I accept the ExampleOrg Terms of Service: https://example.com/tos',\n * // @log: uri: 'https://example.com/path',\n * // @log: version: '1',\n * // @log: }\n * ```\n *\n * @param message - [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message.\n * @returns Message fields object.\n */\nexport function parseMessage(message) {\n const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n ?.groups ?? {});\n const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } = (message.match(suffixRegex)?.groups ?? {});\n const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1);\n return {\n ...prefix,\n ...suffix,\n ...(chainId ? { chainId: Number(chainId) } : {}),\n ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n ...(requestId ? { requestId } : {}),\n ...(resources ? { resources } : {}),\n ...(scheme ? { scheme } : {}),\n ...(statement ? { statement } : {}),\n };\n}\n/**\n * Validates [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) message.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.validateMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * domain: 'example.com',\n * message: {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * },\n * nonce: 'foobarbaz',\n * })\n * // @log: true\n * ```\n *\n * @param value - Values to use when validating EIP-4361 formatted message.\n * @returns Whether the message is valid.\n */\nexport function validateMessage(value) {\n const { address, domain, message, nonce, scheme, time = new Date() } = value;\n if (domain && message.domain !== domain)\n return false;\n if (nonce && message.nonce !== nonce)\n return false;\n if (scheme && message.scheme !== scheme)\n return false;\n if (message.expirationTime && time >= message.expirationTime)\n return false;\n if (message.notBefore && time < message.notBefore)\n return false;\n try {\n if (!message.address)\n return false;\n if (address && !Address.isEqual(message.address, address))\n return false;\n }\n catch {\n return false;\n }\n return true;\n}\n/**\n * Thrown when a field in a SIWE Message is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.createMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1.1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * })\n * // @error: Siwe.InvalidMessageFieldError: Invalid Sign-In with Ethereum message field \"chainId\".\n * // @error: - Chain ID must be a EIP-155 chain ID.\n * // @error: - See https://eips.ethereum.org/EIPS/eip-155\n * // @error: Provided value: 1.1\n * ```\n */\nexport class InvalidMessageFieldError extends Errors.BaseError {\n constructor(parameters) {\n const { field, metaMessages } = parameters;\n super(`Invalid Sign-In with Ethereum message field \"${field}\".`, {\n metaMessages,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'Siwe.InvalidMessageFieldError'\n });\n }\n}\n//# sourceMappingURL=Siwe.js.map","import * as Siwe from 'ox/Siwe';\nexport async function authenticate(parameters) {\n const { address, authUrl, message, signature } = parameters;\n const { chainId } = Siwe.parseMessage(message);\n return await fetch(authUrl.verify, {\n body: JSON.stringify({\n address,\n chainId,\n message,\n signature,\n walletAddress: address,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n }).then((res) => res.json());\n}\nexport async function buildMessage(client, siwe, options) {\n const { chainId = client.chain?.id, domain, uri, resources, version = '1', } = siwe;\n const { address } = options;\n const authUrl = siwe.authUrl ? resolveAuthUrl(siwe.authUrl) : undefined;\n if (!chainId)\n throw new Error('`chainId` is required.');\n if (!domain)\n throw new Error('`domain` is required.');\n if (!siwe.nonce && !authUrl?.nonce)\n throw new Error('`nonce` or `authUrl.nonce` is required.');\n if (!uri)\n throw new Error('`uri` is required.');\n const nonce = await (async () => {\n if (siwe.nonce)\n return siwe.nonce;\n if (!authUrl?.nonce)\n throw new Error('`nonce` or `authUrl.nonce` is required.');\n const response = await fetch(authUrl.nonce, {\n body: JSON.stringify({\n address,\n chainId,\n walletAddress: address,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n const res = await response.json().catch(() => undefined);\n if (!res?.nonce)\n throw new Error('`nonce` or `authUrl.nonce` is required.');\n return res.nonce;\n })();\n const message = Siwe.createMessage({\n ...siwe,\n address: options.address,\n chainId,\n domain,\n nonce,\n resources: resources,\n uri,\n version,\n });\n return message;\n}\nexport function resolveAuthUrl(authUrl, origin = '') {\n if (!authUrl)\n return undefined;\n const urls = (() => {\n if (typeof authUrl === 'string') {\n const url = authUrl.replace(/\\/$/, '');\n return {\n logout: url + '/logout',\n nonce: url + '/nonce',\n verify: url + '/verify',\n };\n }\n return authUrl;\n })();\n return {\n logout: resolveUrl(urls.logout, origin),\n nonce: resolveUrl(urls.nonce, origin),\n verify: resolveUrl(urls.verify, origin),\n };\n}\nfunction resolveUrl(url, origin) {\n if (!origin)\n return url;\n if (!url.startsWith('/'))\n return url;\n return origin + url;\n}\n//# sourceMappingURL=siwe.js.map","import * as Hash from './Hash.js';\nimport * as Hex from './Hex.js';\n/**\n * Encodes a personal sign message in [ERC-191 format](https://eips.ethereum.org/EIPS/eip-191#version-0x45-e): `0x19 ‖ \"Ethereum Signed Message:\\n\" + message.length ‖ message`.\n *\n * @example\n * ```ts twoslash\n * import { Hex, PersonalMessage } from 'ox'\n *\n * const data = PersonalMessage.encode(Hex.fromString('hello world'))\n * // @log: '0x19457468657265756d205369676e6564204d6573736167653a0a313168656c6c6f20776f726c64'\n * // @log: (0x19 ‖ 'Ethereum Signed Message:\\n11' ‖ 'hello world')\n * ```\n *\n * @param data - The data to encode.\n * @returns The encoded personal sign message.\n */\nexport function encode(data) {\n const message = Hex.from(data);\n return Hex.concat(\n // Personal Sign Format: `0x19 ‖ \"Ethereum Signed Message:\\n\" ‖ message.length ‖ message`\n '0x19', Hex.fromString('Ethereum Signed Message:\\n' + Hex.size(message)), message);\n}\n/**\n * Gets the payload to use for signing an [ERC-191 formatted](https://eips.ethereum.org/EIPS/eip-191#version-0x45-e) personal message.\n *\n * @example\n * ```ts twoslash\n * import { Hex, PersonalMessage, Secp256k1 } from 'ox'\n *\n * const payload = PersonalMessage.getSignPayload(Hex.fromString('hello world')) // [!code focus]\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param data - The data to get the sign payload for.\n * @returns The payload to use for signing.\n */\nexport function getSignPayload(data) {\n return Hash.keccak256(encode(data));\n}\n//# sourceMappingURL=PersonalMessage.js.map","import * as Bytes from './Bytes.js';\nimport * as Errors from './Errors.js';\nimport * as Hex from './Hex.js';\nimport * as Cursor from './internal/cursor.js';\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toBytes('0x8b68656c6c6f20776f726c64')\n * // Uint8Array([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Bytes.Bytes} value.\n */\nexport function toBytes(value) {\n return to(value, 'Bytes');\n}\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toHex('0x8b68656c6c6f20776f726c64')\n * // 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value) {\n return to(value, 'Hex');\n}\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n/** @internal */\nexport function to(value, to) {\n const to_ = to ?? (typeof value === 'string' ? 'Hex' : 'Bytes');\n const bytes = (() => {\n if (typeof value === 'string') {\n if (value.length > 3 && value.length % 2 !== 0)\n throw new Hex.InvalidLengthError(value);\n return Bytes.fromHex(value);\n }\n return value;\n })();\n const cursor = Cursor.create(bytes, {\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n });\n const result = decodeRlpCursor(cursor, to_);\n return result;\n}\n/** @internal */\n/** @internal */\nexport function decodeRlpCursor(cursor, to = 'Hex') {\n if (cursor.bytes.length === 0)\n return (to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes);\n const prefix = cursor.readByte();\n if (prefix < 0x80)\n cursor.decrementPosition(1);\n // bytes\n if (prefix < 0xc0) {\n const length = readLength(cursor, prefix, 0x80);\n const bytes = cursor.readBytes(length);\n return (to === 'Hex' ? Hex.fromBytes(bytes) : bytes);\n }\n // list\n const length = readLength(cursor, prefix, 0xc0);\n return readList(cursor, length, to);\n}\n/** @internal */\nexport function readLength(cursor, prefix, offset) {\n if (offset === 0x80 && prefix < 0x80)\n return 1;\n if (prefix <= offset + 55)\n return prefix - offset;\n if (prefix === offset + 55 + 1)\n return cursor.readUint8();\n if (prefix === offset + 55 + 2)\n return cursor.readUint16();\n if (prefix === offset + 55 + 3)\n return cursor.readUint24();\n if (prefix === offset + 55 + 4)\n return cursor.readUint32();\n throw new Errors.BaseError('Invalid RLP prefix');\n}\n/** @internal */\nexport function readList(cursor, length, to) {\n const position = cursor.position;\n const value = [];\n while (cursor.position - position < length)\n value.push(decodeRlpCursor(cursor, to));\n return value;\n}\n/**\n * Encodes a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.from('0x68656c6c6f20776f726c64', { as: 'Hex' })\n * // @log: 0x8b68656c6c6f20776f726c64\n *\n * Rlp.from(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]), { as: 'Bytes' })\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function from(value, options) {\n const { as } = options;\n const encodable = getEncodable(value);\n const cursor = Cursor.create(new Uint8Array(encodable.length));\n encodable.encode(cursor);\n if (as === 'Hex')\n return Hex.fromBytes(cursor.bytes);\n return cursor.bytes;\n}\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.fromBytes(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]))\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromBytes(bytes, options = {}) {\n const { as = 'Bytes' } = options;\n return from(bytes, { as });\n}\n/**\n * Encodes a {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n *\n * Rlp.fromHex('0x68656c6c6f20776f726c64')\n * // @log: 0x8b68656c6c6f20776f726c64\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromHex(hex, options = {}) {\n const { as = 'Hex' } = options;\n return from(hex, { as });\n}\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\nfunction getEncodable(bytes) {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)));\n return getEncodableBytes(bytes);\n}\nfunction getEncodableList(list) {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0);\n const sizeOfBodyLength = getSizeOfLength(bodyLength);\n const length = (() => {\n if (bodyLength <= 55)\n return 1 + bodyLength;\n return 1 + sizeOfBodyLength + bodyLength;\n })();\n return {\n length,\n encode(cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength);\n }\n else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength);\n if (sizeOfBodyLength === 1)\n cursor.pushUint8(bodyLength);\n else if (sizeOfBodyLength === 2)\n cursor.pushUint16(bodyLength);\n else if (sizeOfBodyLength === 3)\n cursor.pushUint24(bodyLength);\n else\n cursor.pushUint32(bodyLength);\n }\n for (const { encode } of list) {\n encode(cursor);\n }\n },\n };\n}\nfunction getEncodableBytes(bytesOrHex) {\n const bytes = typeof bytesOrHex === 'string' ? Bytes.fromHex(bytesOrHex) : bytesOrHex;\n const sizeOfBytesLength = getSizeOfLength(bytes.length);\n const length = (() => {\n if (bytes.length === 1 && bytes[0] < 0x80)\n return 1;\n if (bytes.length <= 55)\n return 1 + bytes.length;\n return 1 + sizeOfBytesLength + bytes.length;\n })();\n return {\n length,\n encode(cursor) {\n if (bytes.length === 1 && bytes[0] < 0x80) {\n cursor.pushBytes(bytes);\n }\n else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length);\n cursor.pushBytes(bytes);\n }\n else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength);\n if (sizeOfBytesLength === 1)\n cursor.pushUint8(bytes.length);\n else if (sizeOfBytesLength === 2)\n cursor.pushUint16(bytes.length);\n else if (sizeOfBytesLength === 3)\n cursor.pushUint24(bytes.length);\n else\n cursor.pushUint32(bytes.length);\n cursor.pushBytes(bytes);\n }\n },\n };\n}\nfunction getSizeOfLength(length) {\n if (length <= 0xff)\n return 1;\n if (length <= 0xff_ff)\n return 2;\n if (length <= 0xff_ff_ff)\n return 3;\n if (length <= 0xff_ff_ff_ff)\n return 4;\n throw new Errors.BaseError('Length is too large.');\n}\n//# sourceMappingURL=Rlp.js.map","import * as Hash from './Hash.js';\nimport * as Hex from './Hex.js';\nimport * as Rlp from './Rlp.js';\nimport * as Signature from './Signature.js';\n/**\n * Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed {@link ox#Authorization.Authorization}.\n *\n * @example\n * An Authorization can be instantiated from an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * A {@link ox#Signature.Signature} can be attached with the `signature` option. The example below demonstrates signing\n * an Authorization with {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * chainId: 1,\n * nonce: 40n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: Authorization.getSignPayload(authorization),\n * privateKey: '0x...',\n * })\n *\n * const authorization_signed = Authorization.from(authorization, { signature }) // [!code focus]\n * ```\n *\n * @param authorization - An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n * @param options - Authorization options.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function from(authorization, options = {}) {\n if (typeof authorization.chainId === 'string')\n return fromRpc(authorization);\n return { ...authorization, ...options.signature };\n}\n/**\n * Converts an {@link ox#Authorization.Rpc} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param authorization - The RPC-formatted Authorization.\n * @returns A signed {@link ox#Authorization.Authorization}.\n */\nexport function fromRpc(authorization) {\n const { address, chainId, nonce } = authorization;\n const signature = Signature.extract(authorization);\n return {\n address,\n chainId: Number(chainId),\n nonce: BigInt(nonce),\n ...signature,\n };\n}\n/**\n * Converts an {@link ox#Authorization.ListRpc} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * }])\n * ```\n *\n * @param authorizationList - The RPC-formatted Authorization list.\n * @returns A signed {@link ox#Authorization.List}.\n */\nexport function fromRpcList(authorizationList) {\n return authorizationList.map(fromRpc);\n}\n/**\n * Converts an {@link ox#Authorization.Tuple} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3'\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: }\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3',\n * '0x1',\n * '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n * '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @param tuple - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function fromTuple(tuple) {\n const [chainId, address, nonce, yParity, r, s] = tuple;\n let args = {\n address,\n chainId: chainId === '0x' ? 0 : Number(chainId),\n nonce: nonce === '0x' ? 0n : BigInt(nonce),\n };\n if (yParity && r && s)\n args = { ...args, ...Signature.fromTuple([yParity, r, s]) };\n return from(args);\n}\n/**\n * Converts an {@link ox#Authorization.TupleList} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @param tupleList - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n * @returns An {@link ox#Authorization.List}.\n */\nexport function fromTupleList(tupleList) {\n const list = [];\n for (const tuple of tupleList)\n list.push(fromTuple(tuple));\n return list;\n}\n/**\n * Computes the sign payload for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * The example below demonstrates computing the sign payload for an {@link ox#Authorization.Authorization}. This payload\n * can then be passed to signing functions like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const payload = Authorization.getSignPayload(authorization) // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload,\n * privateKey: '0x...',\n * })\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The sign payload.\n */\nexport function getSignPayload(authorization) {\n return hash(authorization, { presign: true });\n}\n/**\n * Computes the hash for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const hash = Authorization.hash(authorization) // [!code focus]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The hash.\n */\nexport function hash(authorization, options = {}) {\n const { presign } = options;\n return Hash.keccak256(Hex.concat('0x05', Rlp.fromHex(toTuple(presign\n ? {\n address: authorization.address,\n chainId: authorization.chainId,\n nonce: authorization.nonce,\n }\n : authorization))));\n}\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * })\n * ```\n *\n * @param authorization - An Authorization.\n * @returns An RPC-formatted Authorization.\n */\nexport function toRpc(authorization) {\n const { address, chainId, nonce, ...signature } = authorization;\n return {\n address,\n chainId: Hex.fromNumber(chainId),\n nonce: Hex.fromNumber(nonce),\n ...Signature.toRpc(signature),\n };\n}\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.ListRpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * }])\n * ```\n *\n * @param authorizationList - An Authorization List.\n * @returns An RPC-formatted Authorization List.\n */\nexport function toRpcList(authorizationList) {\n return authorizationList.map(toRpc);\n}\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Tuple}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const tuple = Authorization.toTuple(authorization) // [!code focus]\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n */\nexport function toTuple(authorization) {\n const { address, chainId, nonce } = authorization;\n const signature = Signature.extract(authorization);\n return [\n chainId ? Hex.fromNumber(chainId) : '0x',\n address,\n nonce ? Hex.fromNumber(nonce) : '0x',\n ...(signature ? Signature.toTuple(signature) : []),\n ];\n}\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.TupleList}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization_1 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * const authorization_2 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 3,\n * nonce: 20n,\n * })\n *\n * const tuple = Authorization.toTupleList([authorization_1, authorization_2]) // [!code focus]\n * // @log: [\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ],\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: ],\n * // @log: ]\n * ```\n *\n * @param list - An {@link ox#Authorization.List}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n */\nexport function toTupleList(list) {\n if (!list || list.length === 0)\n return [];\n const tupleList = [];\n for (const authorization of list)\n tupleList.push(toTuple(authorization));\n return tupleList;\n}\n//# sourceMappingURL=Authorization.js.map","import * as AbiError from 'ox/AbiError';\nimport * as AbiParameters from 'ox/AbiParameters';\nimport * as Authorization from 'ox/Authorization';\nimport * as Errors from 'ox/Errors';\nimport * as Hex from 'ox/Hex';\nimport * as Signature from 'ox/Signature';\nimport * as TypedData from 'ox/TypedData';\nimport { BaseError, encodeFunctionData, parseAbi, } from 'viem';\nimport { call, getEip712Domain as getEip712Domain_viem, prepareAuthorization, readContract, sendTransaction, } from 'viem/actions';\nimport { encodeExecuteData, getExecuteError as getExecuteError_viem, } from 'viem/experimental/erc7821';\nimport * as IthacaAccount from '../core/internal/_generated/contracts/IthacaAccount.js';\nimport * as Call from '../core/internal/call.js';\nimport * as Account from './Account.js';\nimport * as Key from './Key.js';\nexport { abi, code, } from '../core/internal/_generated/contracts/IthacaAccount.js';\n/**\n * Executes a set of calls on a delegated account.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Execution parameters.\n * @returns Transaction hash.\n */\nexport async function execute(client, parameters) {\n const { account = client.account } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n // Block expression to obtain the execution request and signatures.\n const { request, signatures } = await (async () => {\n const { nonce, key, signatures, storage } = parameters;\n // If an execution has been prepared, we can early return the request and signatures.\n if (nonce && signatures)\n return { request: parameters, signatures };\n // Otherwise, we need to prepare the execution (compute digests and sign over them).\n const { digests, request } = await prepareExecute(client, {\n ...parameters,\n account: account_,\n });\n const exec = await Account.sign(account_, {\n key: digests.auth ? null : key,\n payload: digests.exec,\n replaySafe: false,\n storage,\n });\n const auth = await (async () => {\n if (!digests.auth)\n return undefined;\n if (account_.source !== 'privateKey')\n throw new Error('cannot sign authorization without root key.');\n return account_.sign?.({\n hash: digests.auth,\n });\n })();\n return {\n request,\n signatures: {\n auth,\n exec,\n },\n };\n })();\n const { authorization, calls, executor, nonce } = request;\n // If an authorization signature is provided, it means that we will need to designate\n // the EOA to the delegation contract. We will need to construct an authorization list\n // to do so.\n const authorizationList = (() => {\n if (!signatures.auth)\n return undefined;\n const signature = Signature.from(signatures.auth);\n return [\n {\n ...authorization,\n r: Hex.fromNumber(signature.r),\n s: Hex.fromNumber(signature.s),\n yParity: signature.yParity,\n },\n ];\n })();\n // Structure the operation data to be passed to EIP-7821 execution.\n // The operation data contains the nonce of the execution, as well as the\n // signature.\n const opData = AbiParameters.encodePacked(['uint256', 'bytes'], [nonce, signatures.exec]);\n try {\n return await sendTransaction(client, {\n account: typeof executor === 'undefined' ? null : executor,\n authorizationList,\n data: encodeExecuteData({ calls, opData }),\n to: account_.address,\n });\n }\n catch (e) {\n parseExecutionError(e, { calls });\n throw e;\n }\n}\n/**\n * Returns the EIP-712 domain for a delegated account. Used for the execution\n * signing payload.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns EIP-712 domain.\n */\nexport async function getEip712Domain(client, parameters) {\n const { account = client.account } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n const { domain: { name, version }, } = await getEip712Domain_viem(client, {\n address: account_.address,\n });\n if (!client.chain)\n throw new Error('client.chain is required');\n return {\n chainId: client.chain.id,\n name,\n verifyingContract: account_.address,\n version,\n };\n}\n/**\n * Returns the key at the given index.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Key.\n */\nexport async function keyAt(client, parameters) {\n const { account = client.account, index } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n const key = await readContract(client, {\n abi: IthacaAccount.abi,\n address: account_.address,\n args: [BigInt(index)],\n functionName: 'keyAt',\n });\n return Key.deserialize(key, { chainId: client.chain?.id ?? 0 });\n}\n/**\n * Prepares the payloads to sign over and fills the request to execute a set of calls.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Prepared properties.\n */\nexport async function prepareExecute(client, parameters) {\n const { account = client.account, delegation, executor, ...rest } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n const calls = parameters.calls.map((call) => ({\n data: call.data ?? '0x',\n to: call.to === Call.selfAddress ? account_.address : call.to,\n value: call.value ?? 0n,\n }));\n const nonce = Hex.toBigInt(Hex.concat(\n // multichain flag (0 = single chain, 0xc1d0 = multi-chain) // TODO: enable multi-chain\n Hex.fromNumber(0, { size: 2 }), \n // sequence key\n Hex.random(22), \n // sequential nonce\n Hex.fromNumber(0, { size: 8 })));\n // Compute the signing payloads for execution and EIP-7702 authorization (optional).\n const [executePayload, [authorization, authorizationPayload]] = await Promise.all([\n getExecuteDigest(client, {\n account: account_,\n calls,\n delegation,\n nonce,\n }),\n // Only need to compute an authorization payload if we are delegating to an EOA.\n (async () => {\n if (!delegation)\n return [];\n const authorization = await prepareAuthorization(client, {\n account: account_.address,\n // chainId: 0,\n contractAddress: delegation,\n executor,\n });\n return [\n authorization,\n Authorization.getSignPayload({\n address: authorization.address,\n chainId: authorization.chainId,\n nonce: BigInt(authorization.nonce),\n }),\n ];\n })(),\n ]);\n return {\n digests: {\n auth: authorizationPayload,\n exec: executePayload.digest,\n },\n request: {\n ...rest,\n account: account_,\n authorization,\n calls,\n executor,\n nonce,\n },\n typedData: executePayload.typedData,\n };\n}\nexport function parseExecutionError(e, { calls } = {}) {\n if (!(e instanceof BaseError))\n return;\n const getAbiError = (error) => {\n const cause = error.walk((e) => 'data' in e);\n if (!cause)\n return undefined;\n let data;\n if (cause instanceof BaseError) {\n const [, match] = cause.details?.match(/\"(0x[0-9a-f]{8})\"/) || [];\n if (match)\n data = match;\n }\n if (!data) {\n if (!('data' in cause))\n return undefined;\n if (cause.data instanceof BaseError)\n return getAbiError(cause.data);\n if (typeof cause.data !== 'string')\n return undefined;\n if (cause.data === '0x')\n return undefined;\n data = cause.data;\n }\n try {\n if (data === '0xd0d5039b')\n return AbiError.from('error Unauthorized()');\n return AbiError.fromAbi([...IthacaAccount.abi, AbiError.from('error CallError()')], data);\n }\n catch {\n return undefined;\n }\n };\n const error = getExecuteError_viem(e, {\n calls: (calls ?? []),\n });\n const abiError = getAbiError(error);\n if (error === e && !abiError)\n return;\n throw new ExecutionError(Object.assign(error, { abiError }));\n}\n/** Thrown when the execution fails. */\nexport class ExecutionError extends Errors.BaseError {\n constructor(cause) {\n super('An error occurred while executing calls.', {\n cause,\n metaMessages: [cause.abiError && 'Reason: ' + cause.abiError.name].filter(Boolean),\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AccountContract.ExecutionError'\n });\n Object.defineProperty(this, \"abiError\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.abiError = cause.abiError;\n }\n}\nexport function decorator(client) {\n return {\n execute: (parameters) => execute(client, parameters),\n getEip712Domain: (parameters) => getEip712Domain(client, parameters),\n keyAt: (parameters) => keyAt(client, parameters),\n prepareExecute: (parameters) => prepareExecute(client, parameters),\n };\n}\n///////////////////////////////////////////////////////////////////////////\n// Internal\n///////////////////////////////////////////////////////////////////////////\n/** @internal */\nasync function getExecuteDigest(client, parameters) {\n const { account = client.account, delegation, nonce } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n // Structure calls into EIP-7821 execution format.\n const calls = parameters.calls.map((call) => ({\n data: call.data ?? '0x',\n to: call.to === Call.selfAddress ? account_.address : call.to,\n value: call.value ?? 0n,\n }));\n const address = await (async () => {\n if (!delegation)\n return account_.address;\n const { data } = await call(client, {\n data: encodeFunctionData({\n abi: parseAbi(['function implementation() view returns (address)']),\n functionName: 'implementation',\n }),\n to: delegation,\n }).catch(() => ({ data: undefined }));\n if (!data)\n throw new Error('delegation address not found.');\n return Hex.slice(data, 12);\n })();\n const domain = await getEip712Domain(client, { account: address });\n const multichain = nonce & 1n;\n if (!client.chain)\n throw new Error('chain is required.');\n const typedData = {\n domain: {\n chainId: client.chain.id,\n name: domain.name,\n verifyingContract: account_.address,\n version: domain.version,\n },\n message: {\n calls,\n multichain: Boolean(multichain),\n nonce,\n },\n primaryType: 'Execute',\n types: {\n Call: [\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n ],\n Execute: [\n { name: 'multichain', type: 'bool' },\n { name: 'calls', type: 'Call[]' },\n { name: 'nonce', type: 'uint256' },\n ],\n },\n };\n return {\n digest: TypedData.getSignPayload(typedData),\n typedData,\n };\n}\n//# sourceMappingURL=ContractActions.js.map","import * as Secp256k1 from 'ox/Secp256k1';\nimport { createClient, http, } from 'viem';\nimport * as Account from './Account.js';\nimport * as RelayActions from './internal/relayActions.js';\nimport * as Key from './Key.js';\nexport { addFaucetFunds, getAssets, getAuthorization, getCallsStatus, getCapabilities, health, verifySignature, } from './internal/relayActions.js';\n/**\n * Creates a new Porto Account using an ephemeral EOA.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function createAccount(client, parameters) {\n const account = Account.fromPrivateKey(Secp256k1.randomPrivateKey(), {\n keys: parameters.authorizeKeys,\n });\n return await upgradeAccount(client, {\n ...parameters,\n account,\n });\n}\n/**\n * Gets the keys for an account.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Account keys.\n */\nexport async function getKeys(client, parameters) {\n const { account = client.account, chainIds } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('account is required.');\n const keys = await RelayActions.getKeys(client, {\n address: account_.address,\n chainIds,\n });\n return Object.entries(keys).flatMap(([chainId, keys]) => keys.map((key) => Key.fromRelay(key, { chainId: Number(chainId) })));\n}\n/**\n * Prepares the digest to sign over and fills the request to send a call bundle.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Prepare call bundle parameters.\n * @returns Prepared properties.\n */\nexport async function prepareCalls(client, parameters) {\n const { account = client.account, calls, chain = client.chain, feePayer, merchantUrl, nonce, preCalls, requiredFunds, revokeKeys, } = parameters;\n const account_ = account ? Account.from(account) : undefined;\n const key = parameters.key ??\n (account_ ? Account.getKey(account_, { role: 'admin' }) : undefined);\n const hasSessionKey = parameters.authorizeKeys?.some((x) => x.role === 'session');\n const { contracts, fees: { tokens }, } = await RelayActions.getCapabilities(client, { chainId: chain?.id });\n const orchestrator = hasSessionKey\n ? contracts.orchestrator.address\n : undefined;\n const authorizeKeys = (parameters.authorizeKeys ?? []).map((key) => Key.toRelay(key, { feeTokens: tokens, orchestrator }));\n // If a fee token is provided, use it.\n // Otherwise, if there are spend permissions set, we cannot predictably\n // infer the fee token (not pass it) as the fee token needs to have\n // an assigned spend permission set. It is assumed that the first spend\n // permission is the one that is used for the fee token.\n const feeToken = (() => {\n if (parameters.feeToken)\n return parameters.feeToken;\n return key?.permissions?.spend?.[0]?.token;\n })();\n const preCall = typeof preCalls === 'boolean' ? preCalls : false;\n const signedPreCalls = typeof preCalls === 'object'\n ? preCalls.map(({ context, signature }) => ({\n ...context.preCall,\n signature,\n }))\n : undefined;\n const args = {\n address: account_?.address,\n calls: (calls ?? []),\n capabilities: {\n authorizeKeys,\n meta: {\n feePayer,\n feeToken,\n nonce,\n },\n preCall,\n preCalls: signedPreCalls,\n requiredFunds,\n revokeKeys: revokeKeys?.map((key) => ({\n hash: key.hash,\n })),\n },\n chain: chain,\n key: key ? Key.toRelay(key, { feeTokens: tokens }) : undefined,\n };\n const result = await (async () => {\n if (merchantUrl) {\n const client_ = createClient({\n chain: client.chain,\n transport: http(merchantUrl),\n });\n // Prepare with Merchant RPC.\n return await RelayActions.prepareCalls(client_, args).catch((e) => {\n console.error(e);\n // Fall back to default client.\n return RelayActions.prepareCalls(client, args);\n });\n }\n return await RelayActions.prepareCalls(client, args);\n })();\n const { capabilities, context, digest, signature, typedData } = result;\n if (merchantUrl) {\n const isValid = await RelayActions.verifyPrepareCallsResponse(client, {\n response: result._raw,\n signature,\n });\n if (!isValid)\n throw new Error(`cannot verify integrity of \\`wallet_prepareCalls\\` response from ${merchantUrl}`);\n }\n return {\n capabilities: { ...capabilities, quote: context.quote },\n context,\n digest,\n key,\n typedData,\n };\n}\n/**\n * Prepares an account upgrade.\n *\n * @example\n * TODO\n *\n * @param client - Client to use.\n * @param parameters - Parameters.\n * @returns Result.\n */\nexport async function prepareUpgradeAccount(client, parameters) {\n const { address, authorizeKeys: keys, chain = client.chain } = parameters;\n if (!chain)\n throw new Error('chain is required.');\n const { contracts, fees: { tokens }, } = await RelayActions.getCapabilities(client, { chainId: chain.id });\n const delegation = parameters.delegation ?? contracts.accountProxy.address;\n const hasSessionKey = keys.some((x) => x.role === 'session');\n const orchestrator = hasSessionKey\n ? contracts.orchestrator.address\n : undefined;\n const authorizeKeys = keys.map((key) => {\n const permissions = key.role === 'session' ? key.permissions : {};\n return Key.toRelay({ ...key, permissions }, { feeTokens: tokens, orchestrator });\n });\n const { capabilities, chainId, context, digests, typedData } = await RelayActions.prepareUpgradeAccount(client, {\n address,\n authorizeKeys,\n chain,\n delegation,\n });\n const account = Account.from({\n address,\n keys,\n });\n return {\n capabilities,\n chainId,\n context: {\n ...context,\n account,\n },\n digests,\n typedData,\n };\n}\n/**\n * Broadcasts a call bundle to the Relay.\n *\n * @example\n * TODO\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Bundle identifier.\n */\nexport async function sendCalls(client, parameters) {\n const { account = client.account, chain = client.chain, webAuthn, } = parameters;\n if (!chain)\n throw new Error('`chain` is required.');\n // If no signature is provided, prepare the calls and sign them.\n const account_ = account ? Account.from(account) : undefined;\n if (!account_)\n throw new Error('`account` is required.');\n const key = parameters.key ?? Account.getKey(account_, parameters);\n if (!key && !account_.sign)\n throw new Error('`key` or `account` with `sign` is required');\n // Prepare pre-calls.\n const preCalls = await Promise.all((parameters.preCalls ?? []).map(async (pre) => {\n if (pre.signature)\n return pre;\n const { authorizeKeys, key, calls, revokeKeys } = pre;\n const { context, digest } = await prepareCalls(client, {\n account: account_,\n authorizeKeys,\n calls,\n chain,\n feeToken: parameters.feeToken,\n key,\n preCalls: true,\n revokeKeys,\n });\n const signature = await Key.sign(key, {\n address: null,\n payload: digest,\n webAuthn,\n });\n return { context, signature };\n }));\n // Prepare main bundle.\n const { capabilities, context, digest } = await prepareCalls(client, {\n ...parameters,\n account: account_,\n chain,\n key,\n preCalls,\n });\n // Sign over the bundles.\n const signature = await (async () => {\n if (key)\n return await Key.sign(key, {\n address: null,\n payload: digest,\n webAuthn,\n wrap: false,\n });\n return await account_.sign({\n hash: digest,\n });\n })();\n // Broadcast the bundle to the Relay.\n return await sendPreparedCalls(client, {\n capabilities: capabilities.feeSignature\n ? {\n feeSignature: capabilities.feeSignature,\n }\n : undefined,\n context,\n key,\n signature,\n });\n}\nexport async function signCalls(request, options) {\n const isPrecall = Boolean(request.context.preCall);\n const { account, key } = options;\n if (account) {\n const keyIndex = account.keys?.findIndex((k) => k.publicKey === request.key?.publicKey);\n if (keyIndex === -1)\n throw new Error('key not found');\n return await Account.sign(account, {\n key: keyIndex,\n payload: request.digest,\n replaySafe: false,\n wrap: isPrecall,\n });\n }\n if (key)\n return await Key.sign(key, {\n address: null,\n payload: request.digest,\n wrap: isPrecall,\n });\n throw new Error('no key or account provided');\n}\nexport async function sendPreparedCalls(client, parameters) {\n const { capabilities, context, key, signature } = parameters;\n return await RelayActions.sendPreparedCalls(client, {\n capabilities,\n context,\n key: key ? Key.toRelay(key) : undefined,\n signature,\n });\n}\nexport async function setEmail(client, parameters) {\n const { email, walletAddress } = parameters;\n return await RelayActions.setEmail(client, {\n email,\n walletAddress,\n });\n}\nexport async function upgradeAccount(client, parameters) {\n if (parameters.account) {\n const { account } = parameters;\n const authorizeKeys = [\n ...(account.keys ?? []),\n ...(parameters.authorizeKeys ?? []),\n ].filter((key, index, array) => array.findIndex((k) => k.id === key.id) === index);\n const { digests, ...request } = await prepareUpgradeAccount(client, {\n ...parameters,\n address: account.address,\n authorizeKeys,\n });\n const signatures = {\n auth: await account.sign({ hash: digests.auth }),\n exec: await account.sign({ hash: digests.exec }),\n };\n return await upgradeAccount(client, {\n ...request,\n signatures,\n });\n }\n const { context, signatures } = parameters;\n const account = Account.from(context.account);\n await RelayActions.upgradeAccount(client, {\n context,\n signatures,\n });\n return account;\n}\nexport async function verifyEmail(client, parameters) {\n const { chainId, email, signature, token, walletAddress } = parameters;\n return await RelayActions.verifyEmail(client, {\n chainId,\n email,\n signature,\n token,\n walletAddress,\n });\n}\nexport function decorator(client) {\n return {\n createAccount: (parameters) => createAccount(client, parameters),\n getCallsStatus: (parameters) => RelayActions.getCallsStatus(client, parameters),\n getCapabilities: () => RelayActions.getCapabilities(client),\n getKeys: (parameters) => getKeys(client, parameters),\n health: () => RelayActions.health(client),\n prepareCalls: (parameters) => prepareCalls(client, parameters),\n prepareUpgradeAccount: (parameters) => prepareUpgradeAccount(client, parameters),\n sendCalls: (parameters) => sendCalls(client, parameters),\n sendPreparedCalls: (parameters) => sendPreparedCalls(client, parameters),\n upgradeAccount: (parameters) => upgradeAccount(client, parameters),\n verifySignature: (parameters) => RelayActions.verifySignature(client, parameters),\n };\n}\n//# sourceMappingURL=RelayActions.js.map","import * as AbiParameters from '../core/AbiParameters.js';\nimport * as Authorization from '../core/Authorization.js';\nimport * as Errors from '../core/Errors.js';\nimport * as Hex from '../core/Hex.js';\nimport * as Secp256k1 from '../core/Secp256k1.js';\nimport * as Signature from '../core/Signature.js';\n/**\n * Magic bytes used to identify ERC-8010 wrapped signatures.\n */\nexport const magicBytes = '0x8010801080108010801080108010801080108010801080108010801080108010';\n/** Suffix ABI parameters for the ERC-8010 wrapped signature. */\nexport const suffixParameters = AbiParameters.from('(uint256 chainId, address delegation, uint256 nonce, uint8 yParity, uint256 r, uint256 s), address to, bytes data');\n/**\n * Asserts that the wrapped signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * SignatureErc8010.assert('0xdeadbeef')\n * // @error: InvalidWrappedSignatureError: Value `0xdeadbeef` is an invalid ERC-8010 wrapped signature.\n * ```\n *\n * @param value - The value to assert.\n */\nexport function assert(value) {\n if (typeof value === 'string') {\n if (Hex.slice(value, -32) !== magicBytes)\n throw new InvalidWrappedSignatureError(value);\n }\n else\n Signature.assert(value.authorization);\n}\n/**\n * Parses an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1 } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * // Instantiate from serialized format. // [!code focus]\n * const wrapped = SignatureErc8010.from('0x...') // [!code focus]\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } } // [!code focus]\n *\n * // Instantiate from constituent parts. // [!code focus]\n * const wrapped = SignatureErc8010.from({ // [!code focus]\n * authorization: { ... }, // [!code focus]\n * data: '0x...', // [!code focus]\n * signature, // [!code focus]\n * })\n * // @log: { authorization: { ... }, data: '0x...', signature: { ... } }\n * ```\n *\n * @param value - Value to parse.\n * @returns Parsed value.\n */\nexport function from(value) {\n if (typeof value === 'string')\n return unwrap(value);\n return value;\n}\n/**\n * Unwraps an [ERC-8010 wrapped signature](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md) into its constituent parts.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const { authorization, data, signature } = SignatureErc8010.unwrap('0x...')\n * ```\n *\n * @param wrapped - Wrapped signature to unwrap.\n * @returns Unwrapped signature.\n */\nexport function unwrap(wrapped) {\n assert(wrapped);\n const suffixLength = Hex.toNumber(Hex.slice(wrapped, -64, -32));\n const suffix = Hex.slice(wrapped, -suffixLength - 64, -64);\n const signature = Hex.slice(wrapped, 0, -suffixLength - 64);\n const [auth, to, data] = AbiParameters.decode(suffixParameters, suffix);\n const authorization = Authorization.from({\n address: auth.delegation,\n chainId: Number(auth.chainId),\n nonce: auth.nonce,\n yParity: auth.yParity,\n r: auth.r,\n s: auth.s,\n });\n return {\n authorization,\n signature,\n ...(data && data !== '0x' ? { data, to } : {}),\n };\n}\n/**\n * Wraps a signature into [ERC-8010 format](https://github.com/jxom/ERCs/blob/16f7e3891fff2e1e9c25dea0485497739db8a816/ERCS/erc-8010.md).\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, Signature } from 'ox'\n * import { SignatureErc8010 } from 'ox/erc8010' // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload: '0x...',\n * privateKey: '0x...',\n * })\n *\n * const wrapped = SignatureErc8010.wrap({ // [!code focus]\n * authorization: { ... }, // [!code focus]\n * data: '0xdeadbeef', // [!code focus]\n * signature: Signature.toHex(signature), // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param value - Values to wrap.\n * @returns Wrapped signature.\n */\nexport function wrap(value) {\n const { data, signature } = value;\n assert(value);\n const self = Secp256k1.recoverAddress({\n payload: Authorization.getSignPayload(value.authorization),\n signature: Signature.from(value.authorization),\n });\n const suffix = AbiParameters.encode(suffixParameters, [\n {\n ...value.authorization,\n delegation: value.authorization.address,\n chainId: BigInt(value.authorization.chainId),\n },\n value.to ?? self,\n data ?? '0x',\n ]);\n const suffixLength = Hex.fromNumber(Hex.size(suffix), { size: 32 });\n return Hex.concat(signature, suffix, suffixLength, magicBytes);\n}\n/**\n * Validates a wrapped signature. Returns `true` if the wrapped signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { SignatureErc8010 } from 'ox/erc8010'\n *\n * const valid = SignatureErc8010.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param value - The value to validate.\n * @returns `true` if the value is valid, `false` otherwise.\n */\nexport function validate(value) {\n try {\n assert(value);\n return true;\n }\n catch {\n return false;\n }\n}\n/** Thrown when the ERC-8010 wrapped signature is invalid. */\nexport class InvalidWrappedSignatureError extends Errors.BaseError {\n constructor(wrapped) {\n super(`Value \\`${wrapped}\\` is an invalid ERC-8010 wrapped signature.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'SignatureErc8010.InvalidWrappedSignatureError'\n });\n }\n}\n//# sourceMappingURL=SignatureErc8010.js.map","import * as SignatureErc8010 from 'ox/erc8010/SignatureErc8010';\nimport * as RelayActions from '../../viem/RelayActions.js';\n/**\n * Wraps a signature in ERC-8010 format to enable pre-delegated signature verification.\n *\n * @param client - The client to use.\n * @param parameters - The parameters for the wrap function.\n * @returns The wrapped signature.\n */\nexport async function wrap(client, parameters) {\n const { address } = parameters;\n // Obtain the account's authorization and init data.\n const { authorization, data, to } = await RelayActions.getAuthorization(client, {\n address,\n });\n // Wrap the signature.\n return SignatureErc8010.wrap({\n authorization: {\n ...authorization,\n nonce: BigInt(authorization.nonce),\n r: BigInt(authorization.r),\n s: BigInt(authorization.s),\n },\n data,\n signature: parameters.signature,\n to,\n });\n}\n//# sourceMappingURL=erc8010.js.map","import * as Value from 'ox/Value';\n/**\n * Transforms into Relay-formatted required funds.\n *\n * @param requiredFunds - The required funds object to convert.\n * @param options - The options for the conversion.\n * @returns The converted required funds object.\n */\n// TODO: perhaps Relay should support `Capabilities.requiredFunds.Request` format.\nexport function toRelay(requiredFunds, options) {\n const { tokens } = options;\n const interopTokens = tokens.filter((token) => token.interop);\n return requiredFunds.map((requiredFund) => {\n if (requiredFund.address)\n return requiredFund;\n const interopToken = interopTokens.find((token) => token.symbol === requiredFund.symbol);\n if (!interopToken)\n throw new Error(`interop token not found: ${requiredFund.symbol}`);\n return {\n address: interopToken.address,\n value: Value.from(requiredFund.value, interopToken.decimals),\n };\n });\n}\n//# sourceMappingURL=requiredFunds.js.map","import * as Address from 'ox/Address';\nimport { zeroAddress } from 'viem';\nimport * as RelayActions from '../../viem/RelayActions.js';\n/**\n * Fetches all supported tokens for a given chain.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Tokens.\n */\nexport async function getTokens(client, parameters) {\n const { chain = client.chain } = parameters ?? {};\n const tokens = await RelayActions.getCapabilities(client, {\n chainId: chain?.id,\n }).then((capabilities) => capabilities.fees.tokens);\n return tokens;\n}\n/**\n * Fetches a token for a given chain, provided an address or symbol.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Token.\n */\nexport async function getToken(client, parameters) {\n const { addressOrSymbol } = parameters;\n const tokens = await getTokens(client, parameters);\n return tokens.find(getToken.predicate(addressOrSymbol));\n}\n(function (getToken) {\n function predicate(addressOrSymbol) {\n return (token) => {\n if (!addressOrSymbol)\n return false;\n if (Address.validate(addressOrSymbol))\n return Address.isEqual(token.address, addressOrSymbol);\n if (addressOrSymbol === 'native')\n return token.address === zeroAddress;\n return addressOrSymbol === token.symbol;\n };\n }\n getToken.predicate = predicate;\n})(getToken || (getToken = {}));\n/**\n * Resolves the fee token to use. Resolves the provided address or symbol,\n * or the defaults to the fee token stored in state.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Fee token.\n */\nexport async function resolveFeeToken(client, parameters) {\n const { chain = client.chain, store } = parameters ?? {};\n const state = (store?.getState() ?? {});\n const addressOrSymbol = parameters?.addressOrSymbol ?? state.feeToken;\n const feeTokens = await getTokens(client, { chain: chain }).then((tokens) => tokens.filter((token) => token.feeToken));\n const feeToken = feeTokens?.find((feeToken) => {\n if (!addressOrSymbol)\n return false;\n if (addressOrSymbol === 'native' && feeToken.address === zeroAddress)\n return true;\n if (Address.validate(addressOrSymbol) &&\n Address.isEqual(feeToken.address, addressOrSymbol))\n return true;\n return addressOrSymbol === feeToken.symbol;\n });\n return feeToken;\n}\n//# sourceMappingURL=tokens.js.map","import * as Bytes from 'ox/Bytes';\nimport * as Hash from 'ox/Hash';\nimport * as Hex from 'ox/Hex';\nimport * as Json from 'ox/Json';\nimport * as PersonalMessage from 'ox/PersonalMessage';\nimport * as Provider from 'ox/Provider';\nimport * as PublicKey from 'ox/PublicKey';\nimport * as RpcResponse from 'ox/RpcResponse';\nimport * as Secp256k1 from 'ox/Secp256k1';\nimport * as TypedData from 'ox/TypedData';\nimport * as WebAuthnP256 from 'ox/WebAuthnP256';\nimport { waitForCallsStatus } from 'viem/actions';\nimport * as Account from '../../../viem/Account.js';\nimport * as ContractActions from '../../../viem/ContractActions.js';\nimport * as RelayActions_internal from '../../../viem/internal/relayActions.js';\nimport * as Key from '../../../viem/Key.js';\nimport * as RelayActions from '../../../viem/RelayActions.js';\nimport * as Erc8010 from '../erc8010.js';\nimport * as Mode from '../mode.js';\nimport * as PermissionsRequest from '../permissionsRequest.js';\nimport * as RequiredFunds from '../requiredFunds.js';\nimport * as Siwe from '../siwe.js';\nimport * as Tokens from '../tokens.js';\nimport * as U from '../utils.js';\n/**\n * Mode for a WebAuthn-based environment that interacts with the Porto\n * Relay. Account management, signing, and execution is coordinated\n * between the library and the Relay.\n *\n * @param parameters - Parameters.\n * @returns Mode.\n */\nexport function relay(parameters = {}) {\n const config = parameters;\n const { mock, multichain = true, webAuthn } = config;\n let address_internal;\n let email_internal;\n const keystoreHost = (() => {\n if (config.keystoreHost === 'self')\n return undefined;\n if (typeof window !== 'undefined' &&\n window.location?.hostname === 'localhost')\n return undefined;\n return config.keystoreHost;\n })();\n return Mode.from({\n actions: {\n async addFunds() {\n throw new Provider.UnsupportedMethodError();\n },\n async createAccount(parameters) {\n const { admins, email, label, permissions, internal, signInWithEthereum, } = parameters;\n const { client } = internal;\n const eoa = Account.fromPrivateKey(Secp256k1.randomPrivateKey());\n const feeTokens = await Tokens.getTokens(client);\n const adminKey = !mock\n ? await Key.createWebAuthnP256({\n createFn: webAuthn?.createFn,\n label: label ||\n `${eoa.address.slice(0, 8)}\\u2026${eoa.address.slice(-6)}`,\n rpId: keystoreHost,\n userId: Bytes.from(eoa.address),\n })\n : Key.createHeadlessWebAuthnP256();\n const sessionKey = await PermissionsRequest.toKey(permissions, {\n chainId: client.chain.id,\n feeTokens,\n });\n const adminKeys = admins?.map((admin) => Key.from(admin));\n const account = await RelayActions.upgradeAccount(client, {\n account: eoa,\n authorizeKeys: [\n adminKey,\n ...(adminKeys ?? []),\n ...(sessionKey ? [sessionKey] : []),\n ],\n });\n address_internal = eoa.address;\n if (email && label)\n await RelayActions.setEmail(client, {\n email: label,\n walletAddress: account.address,\n });\n const signInWithEthereum_response = await (async () => {\n if (!signInWithEthereum)\n return undefined;\n const message = await Siwe.buildMessage(client, signInWithEthereum, {\n address: account.address,\n });\n const signature = await Account.sign(eoa, {\n payload: PersonalMessage.getSignPayload(Hex.fromString(message)),\n });\n const signature_erc8010 = await Erc8010.wrap(client, {\n address: account.address,\n signature,\n });\n return { message, signature: signature_erc8010 };\n })();\n return {\n account: {\n ...account,\n signInWithEthereum: signInWithEthereum_response,\n },\n };\n },\n async getAccountVersion(parameters) {\n const { address, internal } = parameters;\n const { client } = internal;\n const { contracts } = await RelayActions.getCapabilities(client);\n const { accountImplementation } = contracts;\n const latest = await ContractActions.getEip712Domain(client, {\n account: Account.from(accountImplementation),\n }).then((x) => x.version);\n const current = await ContractActions.getEip712Domain(client, {\n account: address,\n })\n .then((x) => x.version)\n // TODO: get counterfactual account version via Relay.\n .catch(() => latest);\n if (!current || !latest)\n throw new Error('version not found.');\n return { current, latest };\n },\n async getAssets(parameters) {\n const { account, chainFilter, assetFilter, assetTypeFilter, internal } = parameters;\n const { client } = internal;\n const result = await RelayActions.getAssets(client, {\n account,\n assetFilter,\n assetTypeFilter,\n chainFilter,\n });\n return result;\n },\n async getCallsStatus(parameters) {\n const { id, internal } = parameters;\n const { client } = internal;\n const result = await RelayActions_internal.getCallsStatus(client, {\n id,\n });\n return {\n atomic: true,\n chainId: Hex.fromNumber(client.chain.id),\n id,\n receipts: result.receipts?.map((receipt) => ({\n blockHash: receipt.blockHash,\n blockNumber: Hex.fromNumber(receipt.blockNumber),\n gasUsed: Hex.fromNumber(receipt.gasUsed),\n logs: receipt.logs,\n status: receipt.status,\n transactionHash: receipt.transactionHash,\n })),\n status: result.status,\n version: '1.0',\n };\n },\n async getCapabilities(parameters) {\n const { chainIds, internal } = parameters;\n const { client } = internal;\n const base = {\n atomic: {\n status: 'supported',\n },\n atomicBatch: {\n supported: true,\n },\n feeToken: {\n supported: true,\n tokens: [],\n },\n merchant: {\n supported: true,\n },\n permissions: {\n supported: true,\n },\n requiredFunds: {\n supported: Boolean(multichain),\n tokens: [],\n },\n };\n const capabilities = await RelayActions.getCapabilities(client, {\n chainIds: chainIds ? chainIds.map((id) => Hex.toNumber(id)) : 'all',\n raw: true,\n });\n return Object.entries(capabilities).reduce((acc, [chainId, capabilities]) => ({\n // biome-ignore lint/performance/noAccumulatingSpread: _\n ...acc,\n [chainId]: {\n ...base,\n ...capabilities,\n feeToken: {\n supported: true,\n tokens: capabilities.fees.tokens,\n },\n requiredFunds: {\n supported: Boolean(multichain),\n tokens: multichain\n ? capabilities.fees.tokens.filter((token) => token.interop)\n : [],\n },\n },\n }), {});\n },\n async getKeys(parameters) {\n const { account, chainIds, internal } = parameters;\n const { client } = internal;\n const keys = await RelayActions.getKeys(client, {\n account,\n chainIds,\n });\n return U.uniqBy([...keys, ...(account.keys ?? [])], (key) => key.publicKey);\n },\n async grantAdmin(parameters) {\n const { account, internal } = parameters;\n const { client } = internal;\n const authorizeKey = Key.from(parameters.key, {\n chainId: client.chain.id,\n });\n const feeToken = await Tokens.resolveFeeToken(client, {\n addressOrSymbol: parameters.feeToken,\n store: internal.store,\n });\n const { id } = await RelayActions.sendCalls(client, {\n account,\n authorizeKeys: [authorizeKey],\n feeToken: feeToken?.address,\n webAuthn,\n });\n await waitForCallsStatus(client, {\n id,\n pollingInterval: 500,\n });\n return { key: authorizeKey };\n },\n async grantPermissions(parameters) {\n const { account, internal, permissions } = parameters;\n const { client } = internal;\n const feeTokens = await Tokens.getTokens(client);\n // Parse permissions request into a structured key.\n const authorizeKey = await PermissionsRequest.toKey(permissions, {\n chainId: client.chain.id,\n feeTokens,\n });\n if (!authorizeKey)\n throw new Error('key to authorize not found.');\n const adminKey = account.keys?.find((key) => key.role === 'admin' && key.privateKey);\n if (!adminKey)\n throw new Error('admin key not found.');\n const { context, digest } = await RelayActions.prepareCalls(client, {\n account,\n authorizeKeys: [authorizeKey],\n key: adminKey,\n preCalls: true,\n });\n const signature = await Key.sign(adminKey, {\n address: null,\n payload: digest,\n });\n await RelayActions.sendPreparedCalls(client, {\n context,\n key: adminKey,\n signature,\n });\n return { key: authorizeKey };\n },\n async loadAccounts(parameters) {\n const { internal, permissions, signInWithEthereum } = parameters;\n const { client } = internal;\n const feeTokens = await Tokens.getTokens(client);\n const authorizeKey = await PermissionsRequest.toKey(permissions, {\n chainId: client.chain.id,\n feeTokens,\n });\n // Prepare calls to sign over the session key or SIWE message to authorize.\n // TODO: figure out with relay if we can prepare the \"precall\" here also.\n // prepareCalls requires the EOA address, but we don't know it here.\n const { digest, digestType, message } = await (async () => {\n if (signInWithEthereum && parameters.address) {\n const message = await Siwe.buildMessage(client, signInWithEthereum, {\n address: parameters.address,\n });\n return {\n context: undefined,\n digest: PersonalMessage.getSignPayload(Hex.fromString(message)),\n digestType: 'siwe',\n message,\n };\n }\n return {\n context: undefined,\n digest: '0x',\n message: undefined,\n };\n })();\n const { address, credentialId, webAuthnSignature } = await (async () => {\n if (mock) {\n if (!address_internal)\n throw new Error('address_internal not found.');\n return {\n address: address_internal,\n credentialId: undefined,\n };\n }\n // If the address and credentialId are provided, we can skip the\n // WebAuthn discovery step.\n if (parameters.address && parameters.key)\n return {\n address: parameters.address,\n credentialId: parameters.key.credentialId,\n };\n // Discovery step. We need to do this to extract the key id\n // to query for the Account.\n // We will also optionally sign over a digest to authorize\n // a session key if the user has provided one.\n const webAuthnSignature = await WebAuthnP256.sign({\n challenge: digest,\n getFn: webAuthn?.getFn,\n rpId: keystoreHost,\n });\n const response = webAuthnSignature.raw\n .response;\n const address = Bytes.toHex(new Uint8Array(response.userHandle));\n const credentialId = webAuthnSignature.raw.id;\n return { address, credentialId, webAuthnSignature };\n })();\n const keys = await RelayActions.getKeys(client, {\n account: address,\n chainIds: [client.chain.id],\n });\n // Instantiate the account based off the extracted address and keys.\n const account = Account.from({\n address,\n keys: [...keys, ...(authorizeKey ? [authorizeKey] : [])].map((key, i) => {\n // Assume that the first key is the admin WebAuthn key.\n if (i === 0) {\n if (key.type === 'webauthn-p256')\n return Key.fromWebAuthnP256({\n ...key,\n credential: {\n id: credentialId,\n publicKey: PublicKey.fromHex(key.publicKey),\n },\n id: address,\n rpId: keystoreHost,\n });\n }\n return key;\n }),\n });\n const adminKey = Account.getKey(account, { role: 'admin' });\n // Get the signature of the authorize session key pre-call.\n const signature = await (async () => {\n // If we don't have a digest, we never signed over anything.\n if (digest === '0x')\n return undefined;\n // If we signed to authorize the session key at credential\n // discovery, we will need to form the signature and store it\n // as a signed pre-call.\n if (webAuthnSignature)\n return Key.wrapSignature(Key.serializeWebAuthnSignature(webAuthnSignature), {\n keyType: 'webauthn-p256',\n publicKey: adminKey.publicKey,\n });\n // Otherwise, we will sign over the digest for authorizing\n // the session key.\n return await Key.sign(adminKey, {\n address: account.address,\n payload: digest,\n });\n })();\n // Prepare and send the authorize key pre-call.\n if (authorizeKey) {\n const { context, digest } = await RelayActions.prepareCalls(client, {\n account,\n authorizeKeys: [authorizeKey],\n preCalls: true,\n });\n const signature = await Key.sign(adminKey, {\n address: null,\n payload: digest,\n });\n await RelayActions.sendPreparedCalls(client, {\n context,\n key: adminKey,\n signature,\n });\n }\n const signInWithEthereum_response = await (async () => {\n if (!signInWithEthereum)\n return undefined;\n if (digestType === 'siwe' && message && signature) {\n const signature_erc8010 = await Erc8010.wrap(client, {\n address: account.address,\n signature,\n });\n return { message, signature: signature_erc8010 };\n }\n {\n const message = await Siwe.buildMessage(client, signInWithEthereum, {\n address: account.address,\n });\n const signature = await Account.sign(account, {\n payload: PersonalMessage.getSignPayload(Hex.fromString(message)),\n role: 'admin',\n });\n const signature_erc8010 = await Erc8010.wrap(client, {\n address: account.address,\n signature,\n });\n return {\n message,\n signature: signature_erc8010,\n };\n }\n })();\n return {\n accounts: [\n {\n ...account,\n signInWithEthereum: signInWithEthereum_response,\n },\n ],\n };\n },\n async prepareCalls(parameters) {\n const { account, calls, internal, merchantUrl } = parameters;\n const { client } = internal;\n // Try and extract an authorized key to sign the calls with.\n const key = parameters.key ??\n (await Mode.getAuthorizedExecuteKey({\n account,\n calls,\n }));\n if (!key)\n throw new Error('cannot find authorized key to sign with.');\n const [tokens, feeToken] = await Promise.all([\n Tokens.getTokens(client),\n Tokens.resolveFeeToken(client, {\n addressOrSymbol: parameters.feeToken,\n store: internal.store,\n }),\n ]);\n const requiredFunds = RequiredFunds.toRelay(parameters.requiredFunds ?? [], {\n tokens,\n });\n const { capabilities, context, digest, typedData } = await RelayActions.prepareCalls(client, {\n account,\n calls,\n feeToken: feeToken?.address,\n key,\n merchantUrl,\n requiredFunds: multichain ? requiredFunds : undefined,\n });\n const quotes = context.quote?.quotes ?? [];\n const outputQuote = quotes[quotes.length - 1];\n return {\n account,\n capabilities: {\n ...capabilities,\n quote: context.quote,\n },\n chainId: client.chain.id,\n context: {\n ...context,\n account,\n calls,\n nonce: outputQuote?.intent.nonce,\n },\n digest,\n key,\n typedData,\n };\n },\n async prepareUpgradeAccount(parameters) {\n const { address, email, label, internal, permissions } = parameters;\n const { client } = internal;\n const [tokens, feeToken] = await Promise.all([\n Tokens.getTokens(client),\n Tokens.resolveFeeToken(client, {\n store: internal.store,\n }),\n ]);\n const adminKey = !mock\n ? await Key.createWebAuthnP256({\n createFn: webAuthn?.createFn,\n label: label || `${address.slice(0, 8)}\\u2026${address.slice(-6)}`,\n rpId: keystoreHost,\n userId: Bytes.from(address),\n })\n : Key.createHeadlessWebAuthnP256();\n const sessionKey = await PermissionsRequest.toKey(permissions, {\n chainId: client.chain.id,\n feeTokens: tokens,\n });\n const { context, digests } = await RelayActions.prepareUpgradeAccount(client, {\n address,\n authorizeKeys: [adminKey, ...(sessionKey ? [sessionKey] : [])],\n feeToken: feeToken?.address,\n });\n if (email)\n email_internal = label;\n return {\n context,\n digests,\n };\n },\n async revokeAdmin(parameters) {\n const { account, id, internal } = parameters;\n const { client } = internal;\n const key = account.keys?.find((key) => key.id === id);\n if (!key)\n return;\n // Cannot revoke the only WebAuthn key left\n if (key.type === 'webauthn-p256' &&\n account.keys?.filter((key) => key.type === 'webauthn-p256').length ===\n 1)\n throw new Error('revoke the only WebAuthn key left.');\n try {\n const feeToken = await Tokens.resolveFeeToken(client, {\n addressOrSymbol: parameters.feeToken,\n store: internal.store,\n });\n const { id } = await RelayActions.sendCalls(client, {\n account,\n feeToken: feeToken?.address,\n revokeKeys: [key],\n webAuthn,\n });\n await waitForCallsStatus(client, {\n id,\n });\n }\n catch (e) {\n const error = e;\n if (error.name === 'Rpc.ExecutionError' &&\n error.abiError?.name === 'KeyDoesNotExist')\n return;\n throw e;\n }\n },\n async revokePermissions(parameters) {\n const { account, id, internal } = parameters;\n const { client } = internal;\n const key = account.keys?.find((key) => key.id === id);\n if (!key)\n return;\n // We shouldn't be able to revoke the admin keys.\n if (key.role === 'admin')\n throw new Error('cannot revoke admins.');\n try {\n const feeToken = await Tokens.resolveFeeToken(client, {\n addressOrSymbol: parameters.feeToken,\n store: internal.store,\n });\n const { id } = await RelayActions.sendCalls(client, {\n account,\n feeToken: feeToken?.address,\n revokeKeys: [key],\n webAuthn,\n });\n await waitForCallsStatus(client, {\n id,\n });\n }\n catch (e) {\n const error = e;\n if (error.name === 'Rpc.ExecutionError' &&\n error.abiError?.name === 'KeyDoesNotExist')\n return;\n throw e;\n }\n },\n async sendCalls(parameters) {\n const { account, asTxHash, calls, internal, merchantUrl } = parameters;\n const { client } = internal;\n // Try and extract an authorized key to sign the calls with.\n const key = await Mode.getAuthorizedExecuteKey({\n account,\n calls,\n permissionsId: parameters.permissionsId,\n });\n // Resolve fee token to use.\n const [tokens, feeToken] = await Promise.all([\n Tokens.getTokens(client),\n Tokens.resolveFeeToken(client, {\n addressOrSymbol: parameters.feeToken,\n store: internal.store,\n }),\n ]);\n const requiredFunds = RequiredFunds.toRelay(parameters.requiredFunds ?? [], {\n tokens,\n });\n // Execute the calls (with the key if provided, otherwise it will\n // fall back to an admin key).\n const result = await RelayActions.sendCalls(client, {\n account,\n calls,\n feeToken: feeToken?.address,\n key,\n merchantUrl,\n requiredFunds: multichain ? requiredFunds : undefined,\n webAuthn,\n });\n if (asTxHash) {\n const { id, receipts, status } = await waitForCallsStatus(client, {\n id: result.id,\n pollingInterval: 500,\n });\n if (!receipts?.[0]) {\n if (status === 'success')\n throw new Provider.UnknownBundleIdError({\n message: 'Call bundle with id: ' + id + ' not found.',\n });\n throw new RpcResponse.TransactionRejectedError({\n message: 'Transaction failed under call bundle id: ' + id + '.',\n });\n }\n return {\n id: receipts[0].transactionHash,\n };\n }\n return result;\n },\n async sendPreparedCalls(parameters) {\n const { context, key, internal, signature } = parameters;\n const { client } = internal;\n const { id } = await RelayActions.sendPreparedCalls(client, {\n context: context,\n key,\n signature,\n });\n return id;\n },\n async signPersonalMessage(parameters) {\n const { account, data, internal } = parameters;\n const { client } = internal;\n // Only admin keys can sign personal messages.\n const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);\n if (!key)\n throw new Error('cannot find admin key to sign with.');\n const signature = await Account.sign(account, {\n key,\n payload: PersonalMessage.getSignPayload(data),\n webAuthn,\n });\n return Erc8010.wrap(client, { address: account.address, signature });\n },\n async signTypedData(parameters) {\n const { account, internal } = parameters;\n const { client } = internal;\n // Only admin keys can sign typed data.\n const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);\n if (!key)\n throw new Error('cannot find admin key to sign with.');\n const data = Json.parse(parameters.data);\n const isOrchestrator = data.domain?.name === 'Orchestrator';\n const signature = await Account.sign(account, {\n key,\n payload: TypedData.getSignPayload(data),\n // If the domain is the Orchestrator, we don't need to replay-safe sign.\n replaySafe: !isOrchestrator,\n webAuthn,\n });\n return isOrchestrator\n ? signature\n : Erc8010.wrap(client, { address: account.address, signature });\n },\n async upgradeAccount(parameters) {\n const { account, context, internal, signatures } = parameters;\n const { client } = internal;\n await RelayActions.upgradeAccount(client, {\n context: context,\n signatures,\n });\n if (email_internal)\n await RelayActions.setEmail(client, {\n email: email_internal,\n walletAddress: account.address,\n });\n return { account };\n },\n async verifyEmail(parameters) {\n const { account, chainId, email, token, internal, walletAddress } = parameters;\n const { client } = internal;\n // Only allow admin keys can sign message.\n const key = account.keys?.find((key) => key.role === 'admin' && key.privateKey);\n if (!key)\n throw new Error('cannot find admin key to sign with.');\n const signature = await Account.sign(account, {\n key,\n payload: Hash.keccak256(Hex.fromString(`${email}${token}`)),\n webAuthn,\n });\n return await RelayActions.verifyEmail(client, {\n chainId,\n email,\n signature,\n token,\n walletAddress,\n });\n },\n },\n config: parameters,\n name: 'rpc',\n });\n}\n//# sourceMappingURL=relay.js.map","import * as Hex from 'ox/Hex';\nimport * as Provider from 'ox/Provider';\nimport * as RpcRequest from 'ox/RpcRequest';\nimport * as RpcResponse from 'ox/RpcResponse';\nimport * as RpcSchema from 'ox/RpcSchema';\nimport { waitForCallsStatus } from 'viem/actions';\nimport * as z from 'zod/mini';\nimport * as Account from '../../../viem/Account.js';\nimport * as Key from '../../../viem/Key.js';\nimport * as Dialog from '../../Dialog.js';\nimport * as RpcSchema_porto from '../../RpcSchema.js';\nimport * as Mode from '../mode.js';\nimport * as Permissions from '../permissions.js';\nimport * as PermissionsRequest from '../permissionsRequest.js';\nimport * as Siwe from '../siwe.js';\nimport * as U from '../utils.js';\nimport { relay } from './relay.js';\nexport function dialog(parameters = {}) {\n const { fallback = relay(), host = Dialog.hostUrls.prod, renderer = Dialog.iframe(), theme, themeController, } = parameters;\n const listeners = new Set();\n const requestStore = RpcRequest.createStore();\n // Function to instantiate a provider for the dialog. This\n // will be used to queue up requests for the dialog and\n // handle responses.\n function getProvider(store) {\n return Provider.from({\n async request(r) {\n const request = requestStore.prepare(r);\n // When we receive a request, we need to add it to the queue.\n store.setState((x) => {\n const account = x.accounts[0];\n const adminKey = account?.keys?.find((key) => key.role === 'admin' && key.type === 'webauthn-p256');\n return {\n ...x,\n requestQueue: [\n ...x.requestQueue,\n {\n account: account\n ? {\n address: account.address,\n key: adminKey\n ? {\n credentialId: adminKey?.credentialId,\n publicKey: adminKey.publicKey,\n }\n : undefined,\n }\n : undefined,\n request,\n status: 'pending',\n },\n ],\n };\n });\n // We need to wait for the request to be resolved.\n return new Promise((resolve, reject) => {\n const listener = (requestQueue) => {\n // Find the request in the queue based off its JSON-RPC identifier.\n const queued = requestQueue.find((x) => x.request.id === request.id);\n // If the request is not found and the queue is empty, reject the request\n // as it will never be resolved (likely cancelled or dialog closed).\n if (!queued && requestQueue.length === 0) {\n listeners.delete(listener);\n reject(new Provider.UserRejectedRequestError());\n return;\n }\n // If request not found but queue has other requests, wait for next update.\n if (!queued)\n return;\n // If request found but not yet resolved, wait for next update.\n if (queued.status !== 'success' && queued.status !== 'error')\n return;\n // We have a response, we can unsubscribe from the listener.\n listeners.delete(listener);\n // If the request was successful, resolve with the result.\n if (queued.status === 'success')\n resolve(queued.result);\n // Otherwise, reject with EIP-1193 Provider error.\n else\n reject(Provider.parseError(queued.error));\n // Remove the request from the queue.\n store.setState((x) => ({\n ...x,\n requestQueue: x.requestQueue.filter((x) => x.request.id !== request.id),\n }));\n };\n listeners.add(listener);\n });\n },\n }, { schema: RpcSchema.from() });\n }\n return Mode.from({\n actions: {\n async addFunds(parameters) {\n const { internal } = parameters;\n const { request, store } = internal;\n if (request.method !== 'wallet_addFunds')\n throw new Error('Cannot add funds for method: ' + request.method);\n const provider = getProvider(store);\n return await provider.request(request);\n },\n async createAccount(parameters) {\n const { internal } = parameters;\n const { client, config, request, store } = internal;\n const { storage } = config;\n const provider = getProvider(store);\n const account = await (async () => {\n if (request.method === 'wallet_connect') {\n // Extract the capabilities from the request.\n const [{ capabilities, chainIds }] = request._decoded.params ?? [{}];\n const authUrl = getAuthUrl(capabilities?.signInWithEthereum?.authUrl ?? config.authUrl, { storage });\n const signInWithEthereum = request.params?.[0]?.capabilities?.signInWithEthereum;\n // Parse the authorize key into a structured key.\n const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {\n chainId: client.chain.id,\n });\n // Convert the key into a permission.\n const permissionsRequest = key\n ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))\n : undefined;\n // Send a request off to the dialog to create an account.\n const { accounts } = await provider.request({\n ...request,\n params: [\n {\n capabilities: {\n ...request.params?.[0]?.capabilities,\n grantPermissions: permissionsRequest,\n signInWithEthereum: authUrl || signInWithEthereum\n ? {\n ...signInWithEthereum,\n authUrl: authUrl,\n }\n : undefined,\n },\n chainIds: chainIds?.map((chainId) => Hex.fromNumber(chainId)),\n },\n ],\n });\n const [account] = accounts;\n if (!account)\n throw new Error('no account found.');\n // Build keys to assign onto the account.\n const adminKeys = account.capabilities?.admins\n ?.map((admin) => Key.from(admin, { chainId: client.chain.id }))\n .filter(Boolean);\n const sessionKeys = account.capabilities?.permissions\n ?.map((permission) => {\n try {\n const key_permission = Permissions.toKey(z.decode(Permissions.Schema, permission));\n if (key_permission.id === key?.id)\n return {\n ...key_permission,\n ...key,\n permissions: key_permission.permissions,\n };\n return key_permission;\n }\n catch {\n return undefined;\n }\n })\n .filter(Boolean);\n const signInWithEthereum_response = await (async () => {\n if (!account.capabilities?.signInWithEthereum)\n return;\n const { message, signature } = account.capabilities.signInWithEthereum;\n if (!authUrl)\n return {\n message,\n signature,\n };\n const { token } = await Siwe.authenticate({\n address: account.address,\n authUrl,\n message,\n signature,\n });\n return {\n message,\n signature,\n token,\n };\n })();\n return {\n ...Account.from({\n address: account.address,\n keys: [...adminKeys, ...sessionKeys],\n }),\n signInWithEthereum: signInWithEthereum_response,\n };\n }\n throw new Error(`Account creation not supported on method: ${request.method}`);\n })();\n return {\n account,\n };\n },\n async disconnect(parameters) {\n const { internal } = parameters;\n const { config } = internal;\n const { storage } = config;\n const authUrl_storage = (await storage.getItem('porto.authUrl')) ||\n undefined;\n const authUrl = getAuthUrl(config.authUrl ?? authUrl_storage, {\n storage,\n });\n if (authUrl)\n await fetch(authUrl.logout, {\n credentials: 'include',\n method: 'POST',\n }).catch(() => { });\n },\n async getAccountVersion(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_getAccountVersion')\n throw new Error('Cannot get version for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.getAccountVersion(parameters);\n const provider = getProvider(store);\n const result = await provider.request(request);\n return result;\n },\n async getAssets(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_getAssets')\n throw new Error('Cannot get assets for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.getAssets(parameters);\n const provider = getProvider(store);\n const result = await provider.request(request);\n return z.decode(RpcSchema_porto.wallet_getAssets.Response, result);\n },\n async getCallsStatus(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_getCallsStatus')\n throw new Error('Cannot get status for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.getCallsStatus(parameters);\n const provider = getProvider(store);\n const result = await provider.request(request);\n return result;\n },\n async getCapabilities(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_getCapabilities')\n throw new Error('Cannot get capabilities for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.getCapabilities(parameters);\n const provider = getProvider(store);\n const result = await provider.request(request);\n return result;\n },\n async getKeys(parameters) {\n const { account, chainIds, internal } = parameters;\n const { store } = internal;\n const keys = await (async () => {\n if (!renderer.supportsHeadless)\n return fallback.actions.getKeys(parameters);\n const provider = getProvider(store);\n const result = await provider.request({\n method: 'wallet_getKeys',\n params: [\n z.encode(RpcSchema_porto.wallet_getKeys.Parameters, {\n address: account.address,\n chainIds,\n }),\n ],\n });\n return z.decode(RpcSchema_porto.wallet_getKeys.Response, result);\n })();\n return U.uniqBy([...keys, ...(account.keys ?? [])], (key) => key.publicKey);\n },\n async grantAdmin(parameters) {\n const { internal } = parameters;\n const { request, store } = internal;\n if (request.method !== 'wallet_grantAdmin')\n throw new Error('Cannot authorize admin for method: ' + request.method);\n const [params] = request._decoded.params;\n const key = Key.from(params.key);\n if (!key)\n throw new Error('no key found.');\n const feeToken = await resolveFeeToken(internal, parameters);\n // Send a request off to the dialog to authorize the admin.\n const provider = getProvider(store);\n await provider.request({\n method: 'wallet_grantAdmin',\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n feeToken,\n },\n },\n ],\n });\n return { key };\n },\n async grantPermissions(parameters) {\n const { internal } = parameters;\n const { client, request, store } = internal;\n if (request.method !== 'wallet_grantPermissions')\n throw new Error('Cannot grant permissions for method: ' + request.method);\n const [{ address, ...permissions }] = request._decoded.params;\n // Parse permissions request into a structured key.\n const key = await PermissionsRequest.toKey(permissions, {\n chainId: client.chain.id,\n });\n if (!key)\n throw new Error('no key found.');\n const permissionsRequest = z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key));\n // Send a request off to the dialog to grant the permissions.\n const provider = getProvider(store);\n await provider.request({\n method: 'wallet_grantPermissions',\n params: [permissionsRequest],\n });\n return { key };\n },\n async loadAccounts(parameters) {\n const { internal } = parameters;\n const { client, config, store } = internal;\n const { storage } = config;\n const provider = getProvider(store);\n const request = internal.request;\n if (request.method !== 'wallet_connect' &&\n request.method !== 'eth_requestAccounts')\n throw new Error('Cannot load accounts for method: ' + request.method);\n const accounts = await (async () => {\n const [params] = request._decoded.params ?? [];\n const { capabilities } = params ?? {};\n const authUrl = getAuthUrl(capabilities?.signInWithEthereum?.authUrl ?? config.authUrl, { storage });\n const signInWithEthereum = request.params?.[0]?.capabilities?.signInWithEthereum;\n // Parse provided (RPC) key into a structured key.\n const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {\n chainId: client.chain.id,\n });\n // Convert the key into a permissions request.\n const permissionsRequest = key\n ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))\n : undefined;\n // Send a request to the dialog.\n const { accounts } = await provider.request({\n method: 'wallet_connect',\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n grantPermissions: permissionsRequest,\n signInWithEthereum: authUrl || signInWithEthereum\n ? {\n ...signInWithEthereum,\n authUrl: authUrl,\n }\n : undefined,\n },\n },\n ],\n });\n return Promise.all(accounts.map(async (account) => {\n const adminKeys = account.capabilities?.admins\n ?.map((key) => Key.from(key))\n .filter(Boolean);\n const sessionKeys = account.capabilities?.permissions\n ?.map((permission) => {\n try {\n const key_permission = Permissions.toKey(z.decode(Permissions.Schema, permission));\n if (key_permission.id === key?.id)\n return {\n ...key_permission,\n ...key,\n permissions: key_permission.permissions,\n };\n return key_permission;\n }\n catch {\n return undefined;\n }\n })\n .filter(Boolean);\n const signInWithEthereum_response = await (async () => {\n if (!account.capabilities?.signInWithEthereum)\n return;\n const { message, signature } = account.capabilities.signInWithEthereum;\n if (!authUrl)\n return {\n message,\n signature,\n };\n const { token } = await Siwe.authenticate({\n address: account.address,\n authUrl,\n message,\n signature,\n });\n return {\n message,\n signature,\n token,\n };\n })();\n return {\n ...Account.from({\n address: account.address,\n keys: [...adminKeys, ...sessionKeys],\n }),\n signInWithEthereum: signInWithEthereum_response,\n };\n }));\n })();\n return {\n accounts,\n };\n },\n async prepareCalls(parameters) {\n const { account, internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_prepareCalls')\n throw new Error('Cannot prepare calls for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.prepareCalls(parameters);\n const feeToken = await resolveFeeToken(internal, parameters);\n const provider = getProvider(store);\n const result = z.decode(RpcSchema_porto.wallet_prepareCalls.Response, await provider.request({\n ...request,\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n feeToken,\n },\n },\n ],\n }));\n return {\n account,\n chainId: Number(result.chainId),\n context: result.context,\n digest: result.digest,\n key: result.key,\n typedData: result.typedData,\n };\n },\n async prepareUpgradeAccount(parameters) {\n const { internal } = parameters;\n const { client, store, request } = internal;\n if (request.method !== 'wallet_prepareUpgradeAccount')\n throw new Error('Cannot prepare upgrade for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.prepareUpgradeAccount(parameters);\n // Extract the capabilities from the request.\n const [{ capabilities }] = request._decoded.params ?? [{}];\n // Parse the authorize key into a structured key.\n const key = await PermissionsRequest.toKey(capabilities?.grantPermissions, {\n chainId: client.chain.id,\n });\n // Convert the key into a permission.\n const permissionsRequest = key\n ? z.encode(PermissionsRequest.Schema, PermissionsRequest.fromKey(key))\n : undefined;\n // Send a request off to the dialog to prepare the upgrade.\n const provider = getProvider(store);\n const { context, digests } = await provider.request({\n ...request,\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n grantPermissions: permissionsRequest,\n },\n },\n ],\n });\n const keys = context.account.keys?.map((k) => {\n if (k.id === key?.id)\n return { ...k, ...key };\n return k;\n });\n return {\n context: {\n ...context,\n account: { ...context.account, keys },\n },\n digests,\n };\n },\n async revokeAdmin(parameters) {\n const { account, id, internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_revokeAdmin')\n throw new Error('Cannot revoke admin for method: ' + request.method);\n const key = account.keys?.find((key) => key.id === id);\n if (!key)\n return;\n // Cannot revoke the only WebAuthn key left\n if (key.type === 'webauthn-p256' &&\n account.keys?.filter((key) => key.type === 'webauthn-p256').length ===\n 1)\n throw new Error('revoke the only WebAuthn key left.');\n const feeToken = await resolveFeeToken(internal, parameters);\n const provider = getProvider(store);\n return await provider.request({\n ...request,\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n feeToken,\n },\n },\n ],\n });\n },\n async revokePermissions(parameters) {\n const { account, id, internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_revokePermissions')\n throw new Error('Cannot revoke permissions for method: ' + request.method);\n const key = account.keys?.find((key) => key.id === id);\n if (!key)\n return;\n // We shouldn't be able to revoke admins.\n if (key.role === 'admin')\n throw new Error('cannot revoke permissions.');\n const provider = getProvider(store);\n return await provider.request(request);\n },\n async sendCalls(parameters) {\n const { account, asTxHash, calls, internal, merchantUrl, requiredFunds, } = parameters;\n const { client, store, request } = internal;\n const provider = getProvider(store);\n const feeToken = await resolveFeeToken(internal, parameters);\n // Try and extract an authorized key to sign the calls with.\n const key = await Mode.getAuthorizedExecuteKey({\n account,\n calls,\n permissionsId: parameters.permissionsId,\n });\n // If a session key is found, try execute the calls with it\n // without sending a request to the dialog. If the key does not\n // have permission to execute the calls, fall back to the dialog.\n if (key && key.role === 'session') {\n if (!renderer.supportsHeadless)\n return fallback.actions.sendCalls(parameters);\n try {\n // TODO: use eventual Viem Action.\n const req = await provider.request(z.encode(RpcSchema_porto.wallet_prepareCalls.Request, {\n method: 'wallet_prepareCalls',\n params: [\n {\n calls,\n capabilities: {\n ...(request._decoded.method === 'wallet_sendCalls'\n ? request._decoded.params?.[0]?.capabilities\n : undefined),\n feeToken,\n merchantUrl,\n requiredFunds,\n },\n chainId: client.chain.id,\n from: account.address,\n key,\n },\n ],\n }));\n const quotes = req.capabilities?.quote?.quotes ?? [];\n const hasFeeDeficit = quotes.some((quote, index) => {\n const isMultichainDestination = index === quotes.length - 1 && quotes.length > 1;\n if (isMultichainDestination)\n return false;\n return Hex.toBigInt(quote.feeTokenDeficit) > 0n;\n });\n if (hasFeeDeficit)\n throw new Error('insufficient funds');\n const signature = await Key.sign(key, {\n address: null,\n payload: req.digest,\n wrap: false,\n });\n // TODO: use eventual Viem Action.\n const result = await provider.request({\n method: 'wallet_sendPreparedCalls',\n params: [\n {\n ...req,\n signature,\n },\n ],\n });\n const response = result[0];\n if (!response)\n throw new Error('id not found');\n if (asTxHash) {\n const { id, receipts, status } = await waitForCallsStatus(client, {\n id: response.id,\n pollingInterval: 500,\n });\n if (!receipts?.[0]) {\n if (status === 'success')\n throw new Provider.UnknownBundleIdError({\n message: 'Call bundle with id: ' + id + ' not found.',\n });\n throw new RpcResponse.TransactionRejectedError({\n message: 'Transaction failed under call bundle id: ' + id + '.',\n });\n }\n return {\n id: receipts[0].transactionHash,\n };\n }\n return response;\n }\n catch { }\n }\n if (request.method === 'eth_sendTransaction') {\n // Send a transaction request to the dialog.\n const id = await provider.request({\n ...request,\n params: [\n {\n ...request.params?.[0],\n // @ts-expect-error\n capabilities: {\n feeToken,\n merchantUrl,\n },\n },\n ],\n });\n return { id };\n }\n if (request.method === 'wallet_sendCalls') {\n // Send calls request to the dialog.\n const result = await provider.request({\n method: 'wallet_sendCalls',\n params: [\n {\n ...request.params?.[0],\n capabilities: {\n ...request.params?.[0]?.capabilities,\n feeToken,\n merchantUrl,\n },\n },\n ],\n });\n return result;\n }\n throw new Error('Cannot execute for method: ' + request.method);\n },\n async sendPreparedCalls(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_sendPreparedCalls')\n throw new Error('Cannot send prepared calls for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return fallback.actions.sendPreparedCalls(parameters);\n const provider = getProvider(store);\n const result = await provider.request(request);\n const id = result[0]?.id;\n if (!id)\n throw new Error('id not found');\n return id;\n },\n async signPersonalMessage(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'personal_sign')\n throw new Error('Cannot sign personal message for method: ' + request.method);\n const provider = getProvider(store);\n return await provider.request(request);\n },\n async signTypedData(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'eth_signTypedData_v4')\n throw new Error('Cannot sign typed data for method: ' + request.method);\n const provider = getProvider(store);\n return await provider.request(request);\n },\n async switchChain(parameters) {\n const { internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_switchEthereumChain')\n throw new Error('Cannot switch chain for method: ' + request.method);\n if (!renderer.supportsHeadless)\n return;\n const provider = getProvider(store);\n return await provider.request(request);\n },\n async upgradeAccount(parameters) {\n const { account, internal } = parameters;\n const { store, request } = internal;\n if (request.method !== 'wallet_upgradeAccount')\n throw new Error('Cannot upgrade account for method: ' + request.method);\n const provider = getProvider(store);\n await provider.request(request);\n return { account };\n },\n async verifyEmail(parameters) {\n const { internal } = parameters;\n const { request, store } = internal;\n if (request.method !== 'account_verifyEmail')\n throw new Error('Cannot verify email for method: ' + request.method);\n const provider = getProvider(store);\n return await provider.request(request);\n },\n },\n config: parameters,\n name: 'dialog',\n setup(parameters) {\n const { internal } = parameters;\n const { store } = internal;\n const dialog = renderer.setup({\n host,\n internal,\n theme,\n themeController,\n });\n const unsubscribe = store.subscribe((x) => x.requestQueue, (requestQueue) => {\n for (const listener of listeners)\n listener(requestQueue);\n const requests = requestQueue\n .map((x) => (x.status === 'pending' ? x : undefined))\n .filter(Boolean);\n dialog.syncRequests(requests).catch(() => { });\n if (requests.length === 0)\n dialog.close();\n });\n return () => {\n unsubscribe();\n dialog.destroy();\n };\n },\n });\n}\nexport async function resolveFeeToken(internal, parameters) {\n const { config: { feeToken }, } = internal;\n const { feeToken: overrideFeeToken } = parameters ?? {};\n return overrideFeeToken ?? feeToken;\n}\nfunction getAuthUrl(apiUrl, { storage }) {\n if (!apiUrl)\n return undefined;\n const authUrl = Siwe.resolveAuthUrl(apiUrl, typeof window !== 'undefined' ? window.location.origin : undefined);\n // Store the resolved auth URL for future use (e.g., disconnect)\n if (authUrl)\n storage.setItem('porto.authUrl', authUrl);\n return authUrl;\n}\n//# sourceMappingURL=dialog.js.map","import { createStore, del, get, set } from 'idb-keyval';\nimport * as Json from 'ox/Json';\nimport * as Utils from './internal/utils.js';\nexport function from(storage) {\n return storage;\n}\nexport function combine(...storages) {\n return {\n async getItem(name) {\n const results = await Promise.allSettled(storages.map((x) => x.getItem(name)));\n const result = results.find((x) => x.status === 'fulfilled' && x.value !== null);\n if (result?.status !== 'fulfilled')\n return null;\n if (result.value === null)\n return null;\n return result.value;\n },\n async removeItem(name) {\n await Promise.allSettled(storages.map((x) => x.removeItem(name)));\n },\n async setItem(name, value) {\n await Promise.allSettled(storages.map((x) => x.setItem(name, value)));\n },\n sizeLimit: Math.min(...storages.map((x) => x.sizeLimit)),\n storages,\n };\n}\nexport function idb() {\n const store = typeof indexedDB !== 'undefined' ? createStore('porto', 'store') : undefined;\n return from({\n async getItem(name) {\n const value = await get(name, store);\n if (value === null)\n return null;\n return value;\n },\n async removeItem(name) {\n await del(name, store);\n },\n async setItem(name, value) {\n await set(name, Utils.normalizeValue(value), store);\n },\n sizeLimit: 1024 * 1024 * 50, // ≈50MB\n });\n}\nexport function localStorage() {\n return from({\n async getItem(name) {\n const item = window.localStorage.getItem(name);\n if (item === null)\n return null;\n try {\n return Json.parse(item);\n }\n catch {\n return null;\n }\n },\n async removeItem(name) {\n window.localStorage.removeItem(name);\n },\n async setItem(name, value) {\n window.localStorage.setItem(name, Json.stringify(value));\n },\n sizeLimit: 1024 * 1024 * 5, // ≈5MB\n });\n}\nexport function cookie() {\n return from({\n async getItem(name) {\n const value = document.cookie\n .split('; ')\n .find((x) => x.startsWith(`${name}=`));\n if (!value)\n return null;\n try {\n return Json.parse(value.substring(name.length + 1));\n }\n catch {\n return null;\n }\n },\n async removeItem(name) {\n // biome-ignore lint/suspicious/noDocumentCookie: do what i want\n document.cookie = `${name}=;max-age=-1;path=/`;\n },\n async setItem(name, value) {\n // biome-ignore lint/suspicious/noDocumentCookie: do what i want\n document.cookie = `${name}=${Json.stringify(value)};path=/;samesite=None;secure;max-age=31536000`;\n },\n sizeLimit: 1024 * 4, // ≈4kB\n });\n}\nexport function memory() {\n const store = new Map();\n return from({\n getItem(name) {\n return store.get(name) ?? null;\n },\n removeItem(name) {\n store.delete(name);\n },\n setItem(name, value) {\n store.set(name, value);\n },\n sizeLimit: Number.POSITIVE_INFINITY,\n });\n}\n//# sourceMappingURL=Storage.js.map","import { http } from 'viem';\nimport { devtools, persist, subscribeWithSelector } from 'zustand/middleware';\nimport { createStore } from 'zustand/vanilla';\nimport * as Chains from './Chains.js';\nimport { hostUrls } from './Dialog.js';\nimport { dialog } from './internal/modes/dialog.js';\nimport { relay } from './internal/modes/relay.js';\nimport * as Provider from './internal/provider.js';\nimport * as Utils from './internal/utils.js';\nimport * as Storage from './Storage.js';\nimport { relayUrls } from './Transport.js';\nconst browser = typeof window !== 'undefined' && typeof document !== 'undefined';\nexport const defaultConfig = {\n announceProvider: true,\n chains: Chains.all,\n mode: browser ? dialog({ host: hostUrls.prod }) : relay(),\n relay: http(relayUrls.prod.http),\n storage: browser && typeof indexedDB !== 'undefined'\n ? Storage.idb()\n : Storage.memory(),\n storageKey: 'porto.store',\n};\nexport function create(parameters = {}) {\n const chains = parameters.chains ?? defaultConfig.chains;\n const transports = Object.fromEntries(chains.map((chain) => [\n chain.id,\n parameters.transports?.[chain.id] ?? http(),\n ]));\n const config = {\n announceProvider: parameters.announceProvider ?? defaultConfig.announceProvider,\n authUrl: parameters.authUrl,\n chains,\n feeToken: parameters.feeToken,\n merchantUrl: parameters.merchantUrl,\n mode: parameters.mode ?? defaultConfig.mode,\n relay: parameters.relay ?? defaultConfig.relay,\n storage: parameters.storage ?? defaultConfig.storage,\n storageKey: parameters.storageKey ?? defaultConfig.storageKey,\n transports,\n };\n const store = createStore(devtools(subscribeWithSelector(persist((_) => ({\n accounts: [],\n chainIds: config.chains.map((chain) => chain.id),\n feeToken: config.feeToken,\n requestQueue: [],\n }), {\n merge(p, currentState) {\n const persistedState = p;\n const currentChainId = config.chains.find((chain) => chain.id === persistedState.chainIds[0])?.id ?? config.chains[0].id;\n const chainIds = [\n currentChainId,\n ...config.chains\n .map((chain) => chain.id)\n .filter((id) => id !== currentChainId),\n ];\n return {\n ...currentState,\n ...persistedState,\n chainIds,\n };\n },\n name: config.storageKey,\n partialize: (state) => ({\n accounts: state.accounts.map((account) => \n // omit non-serializable properties (e.g. functions).\n Utils.normalizeValue(account)),\n chainIds: state.chainIds,\n }),\n storage: config.storage,\n version: 5,\n }))));\n let mode = config.mode;\n const internal = {\n config,\n getMode() {\n return mode;\n },\n id: Utils.uuidv4(),\n setMode(i) {\n destroy?.();\n mode = i;\n destroy = i.setup({\n internal,\n });\n return destroy;\n },\n store,\n };\n const provider = Provider.from(internal);\n let destroy = mode !== null\n ? mode.setup({\n internal,\n })\n : () => { };\n return {\n _internal: internal,\n config,\n destroy() {\n destroy();\n provider._internal.destroy();\n },\n provider,\n };\n}\n//# sourceMappingURL=Porto.js.map"],"names":["p256","sha256","p256n","formatters","serializeTransaction","serializeTransaction_","serializers","from","toHex","InvalidAddressError","chainConfig","anvil","sourceId","serializeTransaction_op","maxUint256","BaseError","chains.base","viem_anvil","parseError","InvalidInputError","RpcResponse.parse","RpcResponse.parseError","RpcResponse.InternalError","Errors.BaseError","create","Utils.uuidv4","Utils.normalizeValue","promise.withResolvers","dialog","UserAgent.isSafari","fallback","iframe","UserAgent.isFirefox","Messenger.bridge","Messenger.fromWindow","options","IO.supported","size","popup","UserAgent.isMobile","x","Provider.UserRejectedRequestError","Bytes.size","Bytes.SizeOverflowError","Bytes.SliceOffsetOutOfBoundsError","Bytes.SizeExceedsPaddingSizeError","encoder","assert","fromHex","internal_hex.assertSize","Hex.padRight","internal.charCodeToBase16","internal.assertSize","internal.pad","internal.assertStartOffset","internal.assertEndOffset","Hex.fromBytes","Hex.toBigInt","validate","Json.stringify","checksum","noble_keccak256","Bytes.from","noble_sha256","Hex.validate","Bytes.validate","fromBytes","InvalidSerializedSizeError","Hex.slice","prefix","Hex.concat","Hex.fromNumber","Hex.size","Hex.from","Caches.checksum","hash","Hash.keccak256","Bytes.fromString","PublicKey.toHex","getPublicKey","PublicKey.from","randomPrivateKey","Address.fromPublicKey","sign","extraEntropy","Entropy.extraEntropy","Solidity.maxUint256","yParity","toTuple","Hex.trimLeft","AbiParameters.InvalidTypeError","encode","Address.assert","Hex.padLeft","AbiParameters.InvalidArrayError","AbiParameters.ArrayLengthMismatchError","length","AbiParameters.BytesSizeMismatchError","Hex.fromBoolean","Hex.IntegerOutOfRangeError","Hex.fromString","internal.prepareParameters","internal.encode","encodePacked","Solidity.integerRegex","Solidity.bytesRegex","BytesSizeMismatchError","Solidity.arrayRegex","abitype.parseAbiParameters","value","base","Address.validate","Address.InvalidAddressError","Address.InvalidInputError","struct","getSignPayload","encodeData","AbiParameters.encode","abitype.parseAbiItem","fromAbi","abiItem","getSelector","internal.isArgOfType","internal.getAmbiguousTypes","abitype.formatAbiItem","internal.normalizeSignature","args","abiFunction","AbiItem.fromAbi","AbiItem.NotFoundError","AbiItem.getSelector","Bytes.fromHex","pad","internal.parseCredentialPublicKey","Hash.sha256","Base64.fromHex","Base64.toBytes","internal.parseAsn1Signature","Bytes.fromArray","Bytes.toBigInt","Bytes.slice","WebAuthnP256.createCredential","Bytes.toHex","P256.randomPrivateKey","WebCryptoP256.createKeyPair","publicKey","isAddress","PublicKey.fromHex","Call.anyTarget","P256.getPublicKey","wrap","TypedData.getSignPayload","privateKey","Signature.toHex","P256.sign","signature","WebCryptoP256.sign","Secp256k1.sign","metadata","WebAuthnP256.getSignPayload","r","s","WebAuthnP256.sign","Address.isEqual","toRelay","key","Call.anySelector","AbiFunction.getSelector","Value.from","AbiParameters.from","AbiParameters.encodePacked","Secp256k1.getPublicKey","Key.sign","AbiItem.from","e","AbiError.getSelector","AbiError.from","z.encode","RpcSchema.wallet_getAuthorization","z.decode","RpcSchema.wallet_getCapabilities","RpcSchema.wallet_getAssets","Hex.toNumber","RpcSchema.wallet_getCallsStatus","getKeys","RpcSchema.wallet_getKeys","RpcSchema.health","prepareCalls","AbiFunction.encodeData","AbiFunction.fromAbi","RpcSchema.wallet_prepareCalls","prepareUpgradeAccount","RpcSchema.wallet_prepareUpgradeAccount","U.normalizeValue","sendPreparedCalls","RpcSchema.wallet_sendPreparedCalls","setEmail","RpcSchema.account_setEmail","upgradeAccount","RpcSchema.wallet_upgradeAccount","verifyEmail","RpcSchema.account_verifyEmail","Secp256k1.recoverAddress","Signature.fromHex","result","RpcSchema.wallet_verifySignature","error","data","AbiError.fromAbi","u.toValidationError","relayProxy","chains","relay","chain","Transport.relayProxy","Schema","Permissions_.Permissions","fromKey","toKey","Key.from","z.discriminatedUnion","RpcRequest.account_verifyEmail","RpcRequest.wallet_addFunds","RpcRequest.eth_accounts","RpcRequest.eth_chainId","RpcRequest.eth_requestAccounts","RpcRequest.eth_sendTransaction","RpcRequest.eth_signTypedData_v4","RpcRequest.wallet_getAccountVersion","RpcRequest.wallet_getAdmins","RpcRequest.wallet_getPermissions","RpcRequest.wallet_grantAdmin","RpcRequest.wallet_grantPermissions","RpcRequest.wallet_prepareUpgradeAccount","RpcRequest.wallet_revokeAdmin","RpcRequest.wallet_revokePermissions","RpcRequest.wallet_upgradeAccount","RpcRequest.personal_sign","RpcRequest.porto_ping","RpcRequest.wallet_connect","RpcRequest.wallet_disconnect","RpcRequest.wallet_getAssets","RpcRequest.wallet_getCallsStatus","RpcRequest.wallet_getCapabilities","RpcRequest.wallet_getKeys","RpcRequest.wallet_prepareCalls","RpcRequest.wallet_sendCalls","RpcRequest.wallet_sendPreparedCalls","RpcRequest.wallet_switchEthereumChain","RpcRequest.wallet_verifySignature","z.safeParse","RpcResponse.MethodNotSupportedError","RpcResponse.InvalidParamsError","announceProvider","getCapabilities","parameters","RpcRequest.validate","RpcRequest.Request","RelayClient.fromPorto","ox_Provider.createEmitter","ox_Provider.from","Store.waitForHydration","ox_Provider.UnsupportedMethodError","ox_Provider.DisconnectedError","ox_Provider.ChainDisconnectedError","account","ox_Provider.UnauthorizedError","id","UrlString.toAbsolute","_a","Rpc.wallet_grantAdmin","Rpc.wallet_grantPermissions","Permissions.fromKey","Rpc.wallet_getAdmins","Rpc.wallet_getKeys","_b","ox_Provider.UserRejectedRequestError","chainId","Rpc.wallet_getAssets","Account.from","Rpc.wallet_prepareCalls","ox_Provider.UnsupportedChainIdError","state","Actions.verifySignature","a","Mipd.announceProvider","Permissions.Schema","Permissions.Request","Key.resolvePermissions","Key.createWebCryptoP256","statement","Address.from","Siwe.parseMessage","Siwe.createMessage","Cursor.create","Rlp.fromHex","Signature.extract","Signature.toTuple","getEip712Domain_viem","RelayActions.getKeys","keys","Key.fromRelay","Account.getKey","contracts","RelayActions.getCapabilities","Key.toRelay","context","RelayActions.prepareCalls","RelayActions.verifyPrepareCallsResponse","RelayActions.prepareUpgradeAccount","digest","RelayActions.sendPreparedCalls","RelayActions.setEmail","signatures","RelayActions.upgradeAccount","RelayActions.verifyEmail","Signature.assert","Authorization.getSignPayload","Signature.from","RelayActions.getAuthorization","SignatureErc8010.wrap","getToken","resolveFeeToken","feeToken","Mode.from","Provider.UnsupportedMethodError","Account.fromPrivateKey","Secp256k1.randomPrivateKey","Tokens.getTokens","Key.createWebAuthnP256","Key.createHeadlessWebAuthnP256","PermissionsRequest.toKey","Siwe.buildMessage","Account.sign","PersonalMessage.getSignPayload","Erc8010.wrap","ContractActions.getEip712Domain","RelayActions.getAssets","RelayActions_internal.getCallsStatus","capabilities","U.uniqBy","Tokens.resolveFeeToken","RelayActions.sendCalls","message","webAuthnSignature","address","credentialId","Key.fromWebAuthnP256","Key.wrapSignature","Key.serializeWebAuthnSignature","Mode.getAuthorizedExecuteKey","RequiredFunds.toRelay","Provider.UnknownBundleIdError","RpcResponse.TransactionRejectedError","Json.parse","Dialog.hostUrls","Dialog.iframe","RpcRequest.createStore","Provider.from","Provider.parseError","PermissionsRequest.Schema","PermissionsRequest.fromKey","Permissions.toKey","Siwe.authenticate","RpcSchema_porto.wallet_getAssets","RpcSchema_porto.wallet_getKeys","accounts","_d","_c","RpcSchema_porto.wallet_prepareCalls","Siwe.resolveAuthUrl","createStore","Chains.all","Storage.idb","Storage.memory"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]}
|