@halliday-sdk/payments 2.7.2 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/paymentsApiClient/index.cjs.min.js +1 -1
  2. package/dist/paymentsApiClient/index.cjs.min.js.map +1 -1
  3. package/dist/paymentsApiClient/index.d.ts +188 -59
  4. package/dist/paymentsApiClient/index.esm.min.js +1 -1
  5. package/dist/paymentsApiClient/index.esm.min.js.map +1 -1
  6. package/dist/paymentsWidget/ethers/index.cjs.min.js +1 -1
  7. package/dist/paymentsWidget/ethers/index.cjs.min.js.map +1 -1
  8. package/dist/paymentsWidget/ethers/index.d.ts +12 -10
  9. package/dist/paymentsWidget/ethers/index.esm.min.js +1 -1
  10. package/dist/paymentsWidget/ethers/index.esm.min.js.map +1 -1
  11. package/dist/paymentsWidget/ethers/index.umd.min.js +1 -1
  12. package/dist/paymentsWidget/ethers/index.umd.min.js.map +1 -1
  13. package/dist/paymentsWidget/index.cjs.min.js +1 -1
  14. package/dist/paymentsWidget/index.cjs.min.js.map +1 -1
  15. package/dist/paymentsWidget/index.d.ts +42 -36
  16. package/dist/paymentsWidget/index.esm.min.js +1 -1
  17. package/dist/paymentsWidget/index.esm.min.js.map +1 -1
  18. package/dist/paymentsWidget/index.umd.min.js +1 -1
  19. package/dist/paymentsWidget/index.umd.min.js.map +1 -1
  20. package/dist/paymentsWidget/viem/index.cjs.min.js +1 -1
  21. package/dist/paymentsWidget/viem/index.cjs.min.js.map +1 -1
  22. package/dist/paymentsWidget/viem/index.d.ts +12 -10
  23. package/dist/paymentsWidget/viem/index.esm.min.js +1 -1
  24. package/dist/paymentsWidget/viem/index.esm.min.js.map +1 -1
  25. package/dist/paymentsWidget/viem/index.umd.min.js +1 -1
  26. package/dist/paymentsWidget/viem/index.umd.min.js.map +1 -1
  27. package/package.json +2 -2
@@ -1,2 +1,2 @@
1
- "use strict";require("ethers");const r=async(r,a,e)=>{if(!a.provider)throw new Error("Signer does not have a provider");try{await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(t){if(console.error("Error switching chain",t),!e)throw t;try{await(async(r,a)=>{if(!r.provider)throw new Error("Signer does not have a provider");await r.provider.send("wallet_addEthereumChain",[a])})(a,(r=>({chainId:`0x${r.chain_id.toString(16)}`,blockExplorerUrls:[r.explorer],chainName:r.network,iconUrls:[r.image],nativeCurrency:r.native_currency,rpcUrls:[r.rpc]}))(e)),await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(r){throw console.error("Error adding chain",r),r}}};exports.connectSigner=a=>({getAddress:async()=>(await a()).getAddress(),signMessage:async({message:r,ownerAddress:e})=>{const t=await a(e);if(e){if(e!==await t.getAddress())throw new Error("Owner address does not match")}return await t.signMessage(r)},sendTransaction:async(e,t)=>{let n=await a();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==e.chainId.toString()&&(await r(e.chainId,n,t),n=await a());const o=await(async({signer:r,transaction:a,confirmations:e,timeout:t})=>{const n=await r.sendTransaction(a);return await n.wait(e,t)})({signer:n,transaction:e});return{transactionHash:(s=o).hash,blockHash:s.blockHash,blockNumber:s.blockNumber,from:s.from,to:s.to||void 0,rawReceipt:s};var s},signTypedData:async({typedData:r,ownerAddress:e})=>{const t=await a(e);if(e){if(e!==await t.getAddress())throw new Error("Owner address does not match")}return await(t.provider?.send("eth_signTypedData_v4",[e,r]))}});
1
+ "use strict";require("ethers");const r=async(r,a,e)=>{if(!a.provider)throw new Error("Signer does not have a provider");try{await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(t){if(console.error("Error switching chain",t),!e)throw t;try{await(async(r,a)=>{if(!r.provider)throw new Error("Signer does not have a provider");await r.provider.send("wallet_addEthereumChain",[a])})(a,(r=>({chainId:`0x${r.chain_id.toString(16)}`,blockExplorerUrls:[r.explorer??""],chainName:r.network,iconUrls:[r.image??""],nativeCurrency:r.native_currency,rpcUrls:[r.rpc??""]}))(e)),await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(r){throw console.error("Error adding chain",r),r}}};exports.connectSigner=a=>({getAddress:async()=>(await a()).getAddress(),signMessage:async({message:r,ownerAddress:e})=>{const t=await a(e);if(e){if(e!==await t.getAddress())throw new Error("Owner address does not match")}return await t.signMessage(r)},sendTransaction:async(e,t)=>{let n=await a();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==e.chainId.toString()&&(await r(e.chainId,n,t),n=await a());const s=await(async({signer:r,transaction:a,confirmations:e,timeout:t})=>{const n=await r.sendTransaction(a);return await n.wait(e,t)})({signer:n,transaction:e});return{transactionHash:(o=s).hash,blockHash:o.blockHash,blockNumber:o.blockNumber,from:o.from,to:o.to,rawReceipt:o};var o},signTypedData:async({typedData:r,ownerAddress:e})=>{const t=await a(e);if(e){if(e!==await t.getAddress())throw new Error("Owner address does not match")}return await(t.provider?.send("eth_signTypedData_v4",[e,r]))}});
2
2
  //# sourceMappingURL=index.cjs.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","undefined","rawReceipt","signTypedData","typedData"],"mappings":"+BAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAChCC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OACvBC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,OA+BaC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,2BCzBlBe,IAyCO,CAAEC,WAvCUxB,gBACMuB,KACPC,aAqCGC,YAlCYzB,OAAS0B,UAASC,mBAC/C,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAIxB,aADwBH,EAAOuB,YAAYC,EAC3B,EAyBcE,gBAtBO5B,MAAO6B,EAAa1B,KACzD,IAAID,QAAeqB,IACnB,MAAMO,QAAsB5B,EAAOE,UAAU2B,cACzCD,GAAe7B,SAASM,aAAesB,EAAY5B,QAAQM,mBACrDR,EAAY8B,EAAY5B,QAASC,EAAQC,GAC/CD,QAAeqB,KAEnB,MAAMS,ODmBiBhC,QAC3BE,SACA2B,cACAI,gBACAC,cAOA,MAAMC,QAAmBjC,EAAO0B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEnC,SAAQ2B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,SAAMC,EACpBC,WAAYP,GAPW,IAACA,CA+CsB,EAcCQ,cAXd/C,OAASgD,YAAWrB,mBACrD,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACqB,EAAcqB,IAAW"}
1
+ {"version":3,"file":"index.cjs.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer ?? \"\"],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image ?? \"\"],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc ?? \"\"],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from as `0x${string}`,\n to: txReceipt.to as `0x${string}` | undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","rawReceipt","signTypedData","typedData"],"mappings":"+BAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAAY,IAC5CC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OAAS,IAChCC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,KAAO,MA+BMC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,2BCzBlBe,IAyCO,CAAEC,WAvCUxB,gBACMuB,KACPC,aAqCGC,YAlCYzB,OAAS0B,UAASC,mBAC/C,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAIxB,aADwBH,EAAOuB,YAAYC,EAC3B,EAyBcE,gBAtBO5B,MAAO6B,EAAa1B,KACzD,IAAID,QAAeqB,IACnB,MAAMO,QAAsB5B,EAAOE,UAAU2B,cACzCD,GAAe7B,SAASM,aAAesB,EAAY5B,QAAQM,mBACrDR,EAAY8B,EAAY5B,QAASC,EAAQC,GAC/CD,QAAeqB,KAEnB,MAAMS,ODmBiBhC,QAC3BE,SACA2B,cACAI,gBACAC,cAOA,MAAMC,QAAmBjC,EAAO0B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEnC,SAAQ2B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,GACdC,WAAYN,GAPW,IAACA,CA+CsB,EAcCO,cAXd9C,OAAS+C,YAAWpB,mBACrD,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACqB,EAAcoB,IAAW"}
@@ -1,11 +1,12 @@
1
1
  import { JsonRpcSigner } from 'ethers';
2
- import { z } from 'zod/v4';
2
+ import { z } from 'zod';
3
3
 
4
- declare const Address: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
4
+ declare const Address: z.ZodString;
5
5
  type Address = z.infer<typeof Address>;
6
+
6
7
  declare const TransactionRequest: z.ZodObject<{
7
- to: z.ZodString;
8
- from: z.ZodOptional<z.ZodString>;
8
+ to: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
9
+ from: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>>;
9
10
  nonce: z.ZodOptional<z.ZodNumber>;
10
11
  gasLimit: z.ZodOptional<z.ZodBigInt>;
11
12
  gasPrice: z.ZodOptional<z.ZodBigInt>;
@@ -20,23 +21,24 @@ declare const TransactionReceipt: z.ZodObject<{
20
21
  transactionHash: z.ZodOptional<z.ZodString>;
21
22
  blockHash: z.ZodOptional<z.ZodString>;
22
23
  blockNumber: z.ZodOptional<z.ZodNumber>;
23
- from: z.ZodOptional<z.ZodString>;
24
- to: z.ZodOptional<z.ZodString>;
24
+ from: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>>;
25
+ to: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>>;
25
26
  rawReceipt: z.ZodAny;
26
27
  }, z.core.$strip>;
27
28
  type TransactionReceipt = z.infer<typeof TransactionReceipt>;
28
29
  declare const EVMChainConfig: z.ZodObject<{
29
30
  chain_id: z.ZodBigInt;
30
31
  network: z.ZodString;
32
+ explorer: z.ZodOptional<z.ZodURL>;
33
+ image: z.ZodOptional<z.ZodURL>;
34
+ is_testnet: z.ZodBoolean;
35
+ address_family: z.ZodLiteral<"EVM">;
31
36
  native_currency: z.ZodObject<{
32
37
  name: z.ZodString;
33
38
  symbol: z.ZodString;
34
39
  decimals: z.ZodNumber;
35
40
  }, z.core.$strip>;
36
- rpc: z.ZodString;
37
- image: z.ZodString;
38
- is_testnet: z.ZodBoolean;
39
- explorer: z.ZodString;
41
+ rpc: z.ZodOptional<z.ZodString>;
40
42
  }, z.core.$strip>;
41
43
  type EVMChainConfig = z.infer<typeof EVMChainConfig>;
42
44
 
@@ -1,2 +1,2 @@
1
- import"ethers";const r=async(r,a,t)=>{if(!a.provider)throw new Error("Signer does not have a provider");try{await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(e){if(console.error("Error switching chain",e),!t)throw e;try{await(async(r,a)=>{if(!r.provider)throw new Error("Signer does not have a provider");await r.provider.send("wallet_addEthereumChain",[a])})(a,(r=>({chainId:`0x${r.chain_id.toString(16)}`,blockExplorerUrls:[r.explorer],chainName:r.network,iconUrls:[r.image],nativeCurrency:r.native_currency,rpcUrls:[r.rpc]}))(t)),await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(r){throw console.error("Error adding chain",r),r}}},a=a=>({getAddress:async()=>(await a()).getAddress(),signMessage:async({message:r,ownerAddress:t})=>{const e=await a(t);if(t){if(t!==await e.getAddress())throw new Error("Owner address does not match")}return await e.signMessage(r)},sendTransaction:async(t,e)=>{let n=await a();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==t.chainId.toString()&&(await r(t.chainId,n,e),n=await a());const o=await(async({signer:r,transaction:a,confirmations:t,timeout:e})=>{const n=await r.sendTransaction(a);return await n.wait(t,e)})({signer:n,transaction:t});return{transactionHash:(s=o).hash,blockHash:s.blockHash,blockNumber:s.blockNumber,from:s.from,to:s.to||void 0,rawReceipt:s};var s},signTypedData:async({typedData:r,ownerAddress:t})=>{const e=await a(t);if(t){if(t!==await e.getAddress())throw new Error("Owner address does not match")}return await(e.provider?.send("eth_signTypedData_v4",[t,r]))}});export{a as connectSigner};
1
+ import"ethers";const r=async(r,a,t)=>{if(!a.provider)throw new Error("Signer does not have a provider");try{await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(e){if(console.error("Error switching chain",e),!t)throw e;try{await(async(r,a)=>{if(!r.provider)throw new Error("Signer does not have a provider");await r.provider.send("wallet_addEthereumChain",[a])})(a,(r=>({chainId:`0x${r.chain_id.toString(16)}`,blockExplorerUrls:[r.explorer??""],chainName:r.network,iconUrls:[r.image??""],nativeCurrency:r.native_currency,rpcUrls:[r.rpc??""]}))(t)),await a.provider.send("wallet_switchEthereumChain",[{chainId:`0x${r.toString(16)}`}])}catch(r){throw console.error("Error adding chain",r),r}}},a=a=>({getAddress:async()=>(await a()).getAddress(),signMessage:async({message:r,ownerAddress:t})=>{const e=await a(t);if(t){if(t!==await e.getAddress())throw new Error("Owner address does not match")}return await e.signMessage(r)},sendTransaction:async(t,e)=>{let n=await a();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==t.chainId.toString()&&(await r(t.chainId,n,e),n=await a());const o=await(async({signer:r,transaction:a,confirmations:t,timeout:e})=>{const n=await r.sendTransaction(a);return await n.wait(t,e)})({signer:n,transaction:t});return{transactionHash:(s=o).hash,blockHash:s.blockHash,blockNumber:s.blockNumber,from:s.from,to:s.to,rawReceipt:s};var s},signTypedData:async({typedData:r,ownerAddress:t})=>{const e=await a(t);if(t){if(t!==await e.getAddress())throw new Error("Owner address does not match")}return await(e.provider?.send("eth_signTypedData_v4",[t,r]))}});export{a as connectSigner};
2
2
  //# sourceMappingURL=index.esm.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","connectSigner","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","undefined","rawReceipt","signTypedData","typedData"],"mappings":"eAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAChCC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OACvBC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,OA+BaC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,KC1BTe,EACTC,IAyCO,CAAEC,WAvCUzB,gBACMwB,KACPC,aAqCGC,YAlCY1B,OAAS2B,UAASC,mBAC/C,MAAM1B,QAAesB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkB1B,EAAOuB,aAEzB,MAAM,IAAIpB,MAAM,gCAIxB,aADwBH,EAAOwB,YAAYC,EAC3B,EAyBcE,gBAtBO7B,MAAO8B,EAAa3B,KACzD,IAAID,QAAesB,IACnB,MAAMO,QAAsB7B,EAAOE,UAAU4B,cACzCD,GAAe9B,SAASM,aAAeuB,EAAY7B,QAAQM,mBACrDR,EAAY+B,EAAY7B,QAASC,EAAQC,GAC/CD,QAAesB,KAEnB,MAAMS,ODmBiBjC,QAC3BE,SACA4B,cACAI,gBACAC,cAOA,MAAMC,QAAmBlC,EAAO2B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEpC,SAAQ4B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,SAAMC,EACpBC,WAAYP,GAPW,IAACA,CA+CsB,EAcCQ,cAXdhD,OAASiD,YAAWrB,mBACrD,MAAM1B,QAAesB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkB1B,EAAOuB,aAEzB,MAAM,IAAIpB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACsB,EAAcqB,IAAW"}
1
+ {"version":3,"file":"index.esm.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer ?? \"\"],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image ?? \"\"],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc ?? \"\"],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from as `0x${string}`,\n to: txReceipt.to as `0x${string}` | undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","connectSigner","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","rawReceipt","signTypedData","typedData"],"mappings":"eAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAAY,IAC5CC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OAAS,IAChCC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,KAAO,MA+BMC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,KC1BTe,EACTC,IAyCO,CAAEC,WAvCUzB,gBACMwB,KACPC,aAqCGC,YAlCY1B,OAAS2B,UAASC,mBAC/C,MAAM1B,QAAesB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkB1B,EAAOuB,aAEzB,MAAM,IAAIpB,MAAM,gCAIxB,aADwBH,EAAOwB,YAAYC,EAC3B,EAyBcE,gBAtBO7B,MAAO8B,EAAa3B,KACzD,IAAID,QAAesB,IACnB,MAAMO,QAAsB7B,EAAOE,UAAU4B,cACzCD,GAAe9B,SAASM,aAAeuB,EAAY7B,QAAQM,mBACrDR,EAAY+B,EAAY7B,QAASC,EAAQC,GAC/CD,QAAesB,KAEnB,MAAMS,ODmBiBjC,QAC3BE,SACA4B,cACAI,gBACAC,cAOA,MAAMC,QAAmBlC,EAAO2B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEpC,SAAQ4B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,GACdC,WAAYN,GAPW,IAACA,CA+CsB,EAcCO,cAXd/C,OAASgD,YAAWpB,mBACrD,MAAM1B,QAAesB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkB1B,EAAOuB,aAEzB,MAAM,IAAIpB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACsB,EAAcoB,IAAW"}
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("ethers")):"function"==typeof define&&define.amd?define(["exports","ethers"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).ethers={})}(this,(function(e){"use strict";const r=async(e,r,t)=>{if(!r.provider)throw new Error("Signer does not have a provider");try{await r.provider.send("wallet_switchEthereumChain",[{chainId:`0x${e.toString(16)}`}])}catch(a){if(console.error("Error switching chain",a),!t)throw a;try{await(async(e,r)=>{if(!e.provider)throw new Error("Signer does not have a provider");await e.provider.send("wallet_addEthereumChain",[r])})(r,(e=>({chainId:`0x${e.chain_id.toString(16)}`,blockExplorerUrls:[e.explorer],chainName:e.network,iconUrls:[e.image],nativeCurrency:e.native_currency,rpcUrls:[e.rpc]}))(t)),await r.provider.send("wallet_switchEthereumChain",[{chainId:`0x${e.toString(16)}`}])}catch(e){throw console.error("Error adding chain",e),e}}};e.connectSigner=e=>({getAddress:async()=>(await e()).getAddress(),signMessage:async({message:r,ownerAddress:t})=>{const a=await e(t);if(t){if(t!==await a.getAddress())throw new Error("Owner address does not match")}return await a.signMessage(r)},sendTransaction:async(t,a)=>{let n=await e();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==t.chainId.toString()&&(await r(t.chainId,n,a),n=await e());const o=await(async({signer:e,transaction:r,confirmations:t,timeout:a})=>{const n=await e.sendTransaction(r);return await n.wait(t,a)})({signer:n,transaction:t});return{transactionHash:(s=o).hash,blockHash:s.blockHash,blockNumber:s.blockNumber,from:s.from,to:s.to||void 0,rawReceipt:s};var s},signTypedData:async({typedData:r,ownerAddress:t})=>{const a=await e(t);if(t){if(t!==await a.getAddress())throw new Error("Owner address does not match")}return await(a.provider?.send("eth_signTypedData_v4",[t,r]))}})}));
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("ethers")):"function"==typeof define&&define.amd?define(["exports","ethers"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).ethers={})}(this,(function(e){"use strict";const r=async(e,r,t)=>{if(!r.provider)throw new Error("Signer does not have a provider");try{await r.provider.send("wallet_switchEthereumChain",[{chainId:`0x${e.toString(16)}`}])}catch(a){if(console.error("Error switching chain",a),!t)throw a;try{await(async(e,r)=>{if(!e.provider)throw new Error("Signer does not have a provider");await e.provider.send("wallet_addEthereumChain",[r])})(r,(e=>({chainId:`0x${e.chain_id.toString(16)}`,blockExplorerUrls:[e.explorer??""],chainName:e.network,iconUrls:[e.image??""],nativeCurrency:e.native_currency,rpcUrls:[e.rpc??""]}))(t)),await r.provider.send("wallet_switchEthereumChain",[{chainId:`0x${e.toString(16)}`}])}catch(e){throw console.error("Error adding chain",e),e}}};e.connectSigner=e=>({getAddress:async()=>(await e()).getAddress(),signMessage:async({message:r,ownerAddress:t})=>{const a=await e(t);if(t){if(t!==await a.getAddress())throw new Error("Owner address does not match")}return await a.signMessage(r)},sendTransaction:async(t,a)=>{let n=await e();const i=await(n.provider?.getNetwork());i?.chainId?.toString()!==t.chainId.toString()&&(await r(t.chainId,n,a),n=await e());const o=await(async({signer:e,transaction:r,confirmations:t,timeout:a})=>{const n=await e.sendTransaction(r);return await n.wait(t,a)})({signer:n,transaction:t});return{transactionHash:(s=o).hash,blockHash:s.blockHash,blockNumber:s.blockNumber,from:s.from,to:s.to,rawReceipt:s};var s},signTypedData:async({typedData:r,ownerAddress:t})=>{const a=await e(t);if(t){if(t!==await a.getAddress())throw new Error("Owner address does not match")}return await(a.provider?.send("eth_signTypedData_v4",[t,r]))}})}));
2
2
  //# sourceMappingURL=index.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","undefined","rawReceipt","signTypedData","typedData"],"mappings":"yQAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAChCC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OACvBC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,OA+BaC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,qBCzBlBe,IAyCO,CAAEC,WAvCUxB,gBACMuB,KACPC,aAqCGC,YAlCYzB,OAAS0B,UAASC,mBAC/C,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAIxB,aADwBH,EAAOuB,YAAYC,EAC3B,EAyBcE,gBAtBO5B,MAAO6B,EAAa1B,KACzD,IAAID,QAAeqB,IACnB,MAAMO,QAAsB5B,EAAOE,UAAU2B,cACzCD,GAAe7B,SAASM,aAAesB,EAAY5B,QAAQM,mBACrDR,EAAY8B,EAAY5B,QAASC,EAAQC,GAC/CD,QAAeqB,KAEnB,MAAMS,ODmBiBhC,QAC3BE,SACA2B,cACAI,gBACAC,cAOA,MAAMC,QAAmBjC,EAAO0B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEnC,SAAQ2B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,SAAMC,EACpBC,WAAYP,GAPW,IAACA,CA+CsB,EAcCQ,cAXd/C,OAASgD,YAAWrB,mBACrD,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACqB,EAAcqB,IAAW"}
1
+ {"version":3,"file":"index.umd.min.js","sources":["../../../../_shared/utils/signerUtils.ts","../../../src/paymentsWidget/ethers/index.ts"],"sourcesContent":["import { TransactionReceipt, TransactionRequest, JsonRpcSigner, verifyMessage, toBeArray } from \"ethers\";\nimport { EVMChainConfig } from \"@shared/types\";\n\n// https://eips.ethereum.org/EIPS/eip-3085\ntype AddEthereumChainParameter = {\n chainId: string;\n blockExplorerUrls?: string[];\n chainName?: string;\n iconUrls?: string[];\n nativeCurrency?: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls?: string[];\n};\n\nexport const _getEVMChainParamFromChainConfig = (chainConfig: EVMChainConfig): AddEthereumChainParameter => ({\n chainId: `0x${chainConfig.chain_id.toString(16)}`,\n blockExplorerUrls: [chainConfig.explorer ?? \"\"],\n chainName: chainConfig.network,\n iconUrls: [chainConfig.image ?? \"\"],\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: [chainConfig.rpc ?? \"\"],\n});\n\nexport const getChainIdFromSigner = async (signer: JsonRpcSigner): Promise<number> => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n const network = await signer.provider.getNetwork();\n return Number(network.chainId.toString());\n};\n\nexport const addChain = async (signer: JsonRpcSigner, chainConfig: AddEthereumChainParameter) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n await signer.provider.send(\"wallet_addEthereumChain\", [chainConfig]);\n};\n\nexport const switchChain = async (chainId: number, signer: JsonRpcSigner, chainConfig?: EVMChainConfig) => {\n if (!signer.provider) {\n throw new Error(\"Signer does not have a provider\");\n }\n\n try {\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error switching chain\", error);\n if (chainConfig) {\n try {\n await addChain(signer, _getEVMChainParamFromChainConfig(chainConfig));\n await signer.provider.send(\"wallet_switchEthereumChain\", [{ chainId: `0x${chainId.toString(16)}` }]);\n } catch (error) {\n console.error(\"Error adding chain\", error);\n throw error;\n }\n } else {\n throw error;\n }\n }\n};\n\n/**\n * Send a transaction using the signer.\n *\n * @param {JsonRpcSigner} signer {{@link JsonRpcSigner}} The signer to send the transaction.\n * @param {TransactionRequest} transaction {{@link TransactionRequest}} The transaction to send.\n * @param {number} confirmations {{@link number}} (optional) The number of confirmations to wait for default to 1.\n * @param {number} timeout {{@link number}} (optional) The timeout to wait for.\n * @returns {Promise<TransactionReceipt | null>} ``receipt`` {{@link TransactionReceipt}} The transaction receipt.\n *\n * If confirmations is 0, the promise will resolve to ``null``.\n * Check the {@link https://docs.ethers.org/v6/api/providers/#TransactionResponse-wait ethers v6 documentation} for more information.\n */\nexport const sendTransaction = async <C extends number = 1>({\n signer,\n transaction,\n confirmations,\n timeout,\n}: {\n signer: JsonRpcSigner;\n transaction: TransactionRequest;\n confirmations?: C;\n timeout?: number;\n}): Promise<C extends 0 ? null : TransactionReceipt> => {\n const txResponse = await signer.sendTransaction(transaction);\n\n return (await txResponse.wait(confirmations, timeout)) as C extends 0 ? null : TransactionReceipt;\n};\n\nexport const getSignerAddressFromMessage = (message: string, signedMessage: string) =>\n verifyMessage(toBeArray(message), signedMessage);\n","import { JsonRpcSigner, TransactionReceipt as EthersTransactionReceipt } from \"ethers\";\n\nimport { switchChain, sendTransaction as _sendTransaction } from \"@shared/utils/signerUtils\";\nimport { TransactionReceipt, Address } from \"@shared/types\";\n\nimport type { SignMessage, SendTransaction, SignTypedData, WalletActionsType } from \"../types\";\n\n/**\n * Get the transaction receipt from the ethers transaction receipt.\n *\n * @param {EthersTransactionReceipt} txReceipt The ethers transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: EthersTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.hash,\n blockHash: txReceipt.blockHash,\n blockNumber: txReceipt.blockNumber,\n from: txReceipt.from as `0x${string}`,\n to: txReceipt.to as `0x${string}` | undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a signer.\n *\n * @param {function} getSigner {function} The function to get the signer.\n * @returns {function} ``getAddress`` {function} Function that returns the address of the signer.\n * @returns {function} ``signMessage`` {{@link SignMessage}} Function that signs a message.\n * @returns {function} ``sendTransaction`` {{@link SendTransaction}} Function that sends an EVM transaction.\n */\nexport const connectSigner = (\n getSigner: (address?: Address) => Promise<JsonRpcSigner>\n): Required<WalletActionsType> => {\n const getAddress = async (): Promise<Address> => {\n const signer = await getSigner();\n return signer.getAddress();\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n const signature = await signer.signMessage(message);\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let signer = await getSigner();\n const signerNetwork = await signer.provider?.getNetwork();\n if (signerNetwork?.chainId?.toString() !== transaction.chainId.toString()) {\n await switchChain(transaction.chainId, signer, chainConfig);\n signer = await getSigner();\n }\n const ethersTxReceipt = await _sendTransaction({ signer, transaction });\n return _getTransactionReceipt(ethersTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const signer = await getSigner(ownerAddress);\n if (ownerAddress) {\n const address = await signer.getAddress();\n if (ownerAddress !== address) {\n throw new Error(\"Owner address does not match\");\n }\n }\n return await signer.provider?.send(\"eth_signTypedData_v4\", [ownerAddress, typedData]);\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["switchChain","async","chainId","signer","chainConfig","provider","Error","send","toString","error","console","addChain","chain_id","blockExplorerUrls","explorer","chainName","network","iconUrls","image","nativeCurrency","native_currency","rpcUrls","rpc","_getEVMChainParamFromChainConfig","getSigner","getAddress","signMessage","message","ownerAddress","sendTransaction","transaction","signerNetwork","getNetwork","ethersTxReceipt","confirmations","timeout","txResponse","wait","_sendTransaction","transactionHash","txReceipt","hash","blockHash","blockNumber","from","to","rawReceipt","signTypedData","typedData"],"mappings":"yQAiBO,MA0BMA,EAAcC,MAAOC,EAAiBC,EAAuBC,KACtE,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,mCAGpB,UACUH,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,GADAC,QAAQD,MAAM,wBAAyBA,IACnCL,EASA,MAAMK,EARN,SAlBYR,OAAOE,EAAuBC,KAClD,IAAKD,EAAOE,SACR,MAAM,IAAIC,MAAM,yCAGdH,EAAOE,SAASE,KAAK,0BAA2B,CAACH,GAAa,EAclDO,CAASR,EArCiB,CAACC,IAA4D,CACzGF,QAAS,KAAKE,EAAYQ,SAASJ,SAAS,MAC5CK,kBAAmB,CAACT,EAAYU,UAAY,IAC5CC,UAAWX,EAAYY,QACvBC,SAAU,CAACb,EAAYc,OAAS,IAChCC,eAAgBf,EAAYgB,gBAC5BC,QAAS,CAACjB,EAAYkB,KAAO,MA+BMC,CAAiCnB,UAClDD,EAAOE,SAASE,KAAK,6BAA8B,CAAC,CAAEL,QAAS,KAAKA,EAAQM,SAAS,SAC7F,MAAOC,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,qBCzBlBe,IAyCO,CAAEC,WAvCUxB,gBACMuB,KACPC,aAqCGC,YAlCYzB,OAAS0B,UAASC,mBAC/C,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAIxB,aADwBH,EAAOuB,YAAYC,EAC3B,EAyBcE,gBAtBO5B,MAAO6B,EAAa1B,KACzD,IAAID,QAAeqB,IACnB,MAAMO,QAAsB5B,EAAOE,UAAU2B,cACzCD,GAAe7B,SAASM,aAAesB,EAAY5B,QAAQM,mBACrDR,EAAY8B,EAAY5B,QAASC,EAAQC,GAC/CD,QAAeqB,KAEnB,MAAMS,ODmBiBhC,QAC3BE,SACA2B,cACAI,gBACAC,cAOA,MAAMC,QAAmBjC,EAAO0B,gBAAgBC,GAEhD,aAAcM,EAAWC,KAAKH,EAAeC,EAAQ,EChCnBG,CAAiB,CAAEnC,SAAQ2B,gBACzD,MA9CG,CACHS,iBAFwBC,EA+CMP,GA7CHQ,KAC3BC,UAAWF,EAAUE,UACrBC,YAAaH,EAAUG,YACvBC,KAAMJ,EAAUI,KAChBC,GAAIL,EAAUK,GACdC,WAAYN,GAPW,IAACA,CA+CsB,EAcCO,cAXd9C,OAAS+C,YAAWpB,mBACrD,MAAMzB,QAAeqB,EAAUI,GAC/B,GAAIA,EAAc,CAEd,GAAIA,UADkBzB,EAAOsB,aAEzB,MAAM,IAAInB,MAAM,gCAGxB,aAAaH,EAAOE,UAAUE,KAAK,uBAAwB,CAACqB,EAAcoB,IAAW"}