@halliday-sdk/payments 0.2.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -31
- package/dist/paymentsApiClient/index.cjs.min.js +2 -0
- package/dist/paymentsApiClient/index.cjs.min.js.map +1 -0
- package/dist/paymentsApiClient/index.d.ts +1868 -0
- package/dist/paymentsApiClient/index.esm.min.js +2 -0
- package/dist/paymentsApiClient/index.esm.min.js.map +1 -0
- package/dist/paymentsWidget/ethers/index.d.ts +1 -1
- package/dist/paymentsWidget/index.cjs.min.js +1 -1
- package/dist/paymentsWidget/index.cjs.min.js.map +1 -1
- package/dist/paymentsWidget/index.d.ts +35 -8
- package/dist/paymentsWidget/index.esm.min.js +1 -1
- package/dist/paymentsWidget/index.esm.min.js.map +1 -1
- package/dist/paymentsWidget/index.umd.min.js +1 -1
- package/dist/paymentsWidget/index.umd.min.js.map +1 -1
- package/dist/paymentsWidget/viem/index.cjs.min.js +1 -1
- package/dist/paymentsWidget/viem/index.cjs.min.js.map +1 -1
- package/dist/paymentsWidget/viem/index.d.ts +1 -1
- package/dist/paymentsWidget/viem/index.esm.min.js +1 -1
- package/dist/paymentsWidget/viem/index.esm.min.js.map +1 -1
- package/dist/paymentsWidget/viem/index.umd.min.js +1 -1
- package/dist/paymentsWidget/viem/index.umd.min.js.map +1 -1
- package/package.json +15 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var a=require("viem");const t=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:a.chain_id,name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),n=async(a,n,r)=>{try{await n.switchChain({id:a})}catch(e){if(console.error("Error switching chain",e),!r)throw e;try{await(async(a,n)=>{const r=t(n);r&&await a.addChain({chain:r})})(n,r),await n.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},r=async({walletClient:n,transaction:r,chainConfig:e})=>{const
|
|
1
|
+
"use strict";var a=require("viem");const t=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:Number(a.chain_id),name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),n=async(a,n,r)=>{try{await n.switchChain({id:a})}catch(e){if(console.error("Error switching chain",e),!r)throw e;try{await(async(a,n)=>{const r=t(n);r&&await a.addChain({chain:r})})(n,r),await n.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},r=async({walletClient:n,transaction:r,chainConfig:e})=>{const i=a.createPublicClient({chain:t(e),transport:a.http(e.rpc)}),c=await n.sendTransaction(((a,n)=>({account:a.from,to:a.to,value:a.value,data:a.data,gas:a.gasLimit,nonce:a.nonce,chain:t(n)}))(r,e));return await i.waitForTransactionReceipt({hash:c})};exports.connectWalletClient=a=>{const t=async()=>{const t=a(),n=await t.getAddresses();return n?.[0]};return{getAddress:t,signMessage:async({message:t,ownerAddress:n})=>{const r=a();return await r.signMessage({account:n,message:t})},sendTransaction:async(e,i)=>{let c=a();const s=await t();e.from=s;const o=await c.getChainId();BigInt(i.chain_id)!==BigInt(o)&&(await n(Number(i.chain_id),c,i),c=a());const d=await r({walletClient:c,transaction:e,chainConfig:i});return{transactionHash:(h=d).transactionHash,blockHash:h.blockHash,blockNumber:Number(h.blockNumber),from:h.from,to:h.to||void 0,rawReceipt:h};var h},signTypedData:async({typedData:t,ownerAddress:n})=>{const r=a(),e=JSON.parse(t);return await r.signTypedData({account:n,...e})}}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: chainConfig.chain_id,\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (chainConfig.chain_id !== currentChain) {\n await switchChain(chainConfig.chain_id, walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","
|
|
1
|
+
{"version":3,"file":"index.cjs.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: Number(chainConfig.chain_id),\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (BigInt(chainConfig.chain_id) !== BigInt(currentChain)) {\n await switchChain(Number(chainConfig.chain_id), walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","Number","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","BigInt","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","undefined","rawReceipt","signTypedData","typedData","typedDataObject","JSON","parse"],"mappings":"mCAIA,MAAMA,EAA2BC,IACtB,CACHC,eAAgB,CACZC,QAAS,CAAEC,KAAMH,EAAYI,QAASC,IAAKL,EAAYM,UAAY,KAEvEC,GAAIC,OAAOR,EAAYS,UACvBN,KAAMH,EAAYI,QAClBM,eAAgBV,EAAYW,gBAC5BC,QAAS,CACLV,QAAS,CAAEW,KAAM,CAACb,EAAYc,SA2B7BC,EAAcC,MAAOC,EAAiBC,EAAsBlB,KACrE,UACUkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOE,GAEL,GADAC,QAAQC,MAAM,wBAAyBF,IAClCnB,EACD,MAAMmB,EAGV,SAhBgBH,OAAOE,EAAsBlB,KACjD,MAAMsB,EAAQvB,EAAwBC,GAClCsB,SACMJ,EAAOK,SAAS,CAAED,WAedC,CAASL,EAAQlB,SACjBkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOO,GAEL,MADAJ,QAAQC,MAAM,qBAAsBG,GAC9BA,KAKLC,EAAkBT,OAC3BU,eACAC,cACA3B,kBAMA,MAAM4B,EAAeC,EAAAA,mBAAmB,CACpCP,MAAOvB,EAAwBC,GAC/B8B,UAAWjB,EAAAA,KAAKb,EAAYc,OAE1BiB,QAAeL,EAAaD,gBAvDqB,EACvDE,EACA3B,KAEO,CACHgC,QAASL,EAAYM,KACrBC,GAAIP,EAAYO,GAChBC,MAAOR,EAAYQ,MACnBC,KAAMT,EAAYS,KAClBC,IAAKV,EAAYW,SACjBC,MAAOZ,EAAYY,MACnBjB,MAAOvB,EAAwBC,KA6C/BwC,CAAmDb,EAAa3B,IAEpE,aAAa4B,EAAaa,0BAA0B,CAAEC,KAAMX,GAAS,8BC3CrCY,IAEhC,MAAMC,EAAa5B,UACf,MAAMU,EAAeiB,IACfE,QAAkBnB,EAAaoB,eACrC,OAAOD,IAAY,EAAE,EAwCzB,MAAO,CAAED,aAAYG,YArCY/B,OAASgC,UAASC,mBAC/C,MAAMvB,EAAeiB,IAKrB,aAJwBjB,EAAaqB,YAAY,CAC7Cf,QAASiB,EACTD,WAEY,EA+BcvB,gBA5BOT,MAAOW,EAAa3B,KACzD,IAAI0B,EAAeiB,IAEnB,MAAMO,QAAgBN,IACtBjB,EAAYM,KAAOiB,EAEnB,MAAMC,QAAqBzB,EAAa0B,aAEpCC,OAAOrD,EAAYS,YAAc4C,OAAOF,WAClCpC,EAAYP,OAAOR,EAAYS,UAAWiB,EAAc1B,GAC9D0B,EAAeiB,KAGnB,MAAMW,QAAsBC,EAAiB,CAAE7B,eAAcC,cAAa3B,gBAC1E,MAjDG,CACHwD,iBAFwBC,EAkDMH,GAhDHE,gBAC3BE,UAAWD,EAAUC,UACrBC,YAAanD,OAAOiD,EAAUE,aAC9B1B,KAAMwB,EAAUxB,KAChBC,GAAIuB,EAAUvB,SAAM0B,EACpBC,WAAYJ,GAPW,IAACA,CAkDoB,EAcGK,cAXd9C,OAAS+C,YAAWd,mBACrD,MAAMvB,EAAeiB,IAEfqB,EAAkBC,KAAKC,MAAMH,GAKnC,aAJwBrC,EAAaoC,cAAc,CAC/C9B,QAASiB,KACNe,GAES,EAG8C"}
|
|
@@ -26,7 +26,7 @@ declare const TransactionReceipt: z.ZodObject<{
|
|
|
26
26
|
}, z.core.$strip>;
|
|
27
27
|
type TransactionReceipt = z.infer<typeof TransactionReceipt>;
|
|
28
28
|
declare const EVMChainConfig: z.ZodObject<{
|
|
29
|
-
chain_id: z.
|
|
29
|
+
chain_id: z.ZodBigInt;
|
|
30
30
|
network: z.ZodString;
|
|
31
31
|
native_currency: z.ZodObject<{
|
|
32
32
|
name: z.ZodString;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createPublicClient as a,http as t}from"viem";const n=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:a.chain_id,name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),r=async(a,t,r)=>{try{await t.switchChain({id:a})}catch(e){if(console.error("Error switching chain",e),!r)throw e;try{await(async(a,t)=>{const r=n(t);r&&await a.addChain({chain:r})})(t,r),await t.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},e=async({walletClient:r,transaction:e,chainConfig:
|
|
1
|
+
import{createPublicClient as a,http as t}from"viem";const n=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:Number(a.chain_id),name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),r=async(a,t,r)=>{try{await t.switchChain({id:a})}catch(e){if(console.error("Error switching chain",e),!r)throw e;try{await(async(a,t)=>{const r=n(t);r&&await a.addChain({chain:r})})(t,r),await t.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},e=async({walletClient:r,transaction:e,chainConfig:i})=>{const c=a({chain:n(i),transport:t(i.rpc)}),s=await r.sendTransaction(((a,t)=>({account:a.from,to:a.to,value:a.value,data:a.data,gas:a.gasLimit,nonce:a.nonce,chain:n(t)}))(e,i));return await c.waitForTransactionReceipt({hash:s})},i=a=>{const t=async()=>{const t=a(),n=await t.getAddresses();return n?.[0]};return{getAddress:t,signMessage:async({message:t,ownerAddress:n})=>{const r=a();return await r.signMessage({account:n,message:t})},sendTransaction:async(n,i)=>{let c=a();const s=await t();n.from=s;const o=await c.getChainId();BigInt(i.chain_id)!==BigInt(o)&&(await r(Number(i.chain_id),c,i),c=a());const d=await e({walletClient:c,transaction:n,chainConfig:i});return{transactionHash:(h=d).transactionHash,blockHash:h.blockHash,blockNumber:Number(h.blockNumber),from:h.from,to:h.to||void 0,rawReceipt:h};var h},signTypedData:async({typedData:t,ownerAddress:n})=>{const r=a(),e=JSON.parse(t);return await r.signTypedData({account:n,...e})}}};export{i as connectWalletClient};
|
|
2
2
|
//# sourceMappingURL=index.esm.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: chainConfig.chain_id,\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (chainConfig.chain_id !== currentChain) {\n await switchChain(chainConfig.chain_id, walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","connectWalletClient","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","
|
|
1
|
+
{"version":3,"file":"index.esm.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: Number(chainConfig.chain_id),\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (BigInt(chainConfig.chain_id) !== BigInt(currentChain)) {\n await switchChain(Number(chainConfig.chain_id), walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","Number","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","connectWalletClient","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","BigInt","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","undefined","rawReceipt","signTypedData","typedData","typedDataObject","JSON","parse"],"mappings":"oDAIA,MAAMA,EAA2BC,IACtB,CACHC,eAAgB,CACZC,QAAS,CAAEC,KAAMH,EAAYI,QAASC,IAAKL,EAAYM,UAAY,KAEvEC,GAAIC,OAAOR,EAAYS,UACvBN,KAAMH,EAAYI,QAClBM,eAAgBV,EAAYW,gBAC5BC,QAAS,CACLV,QAAS,CAAEW,KAAM,CAACb,EAAYc,SA2B7BC,EAAcC,MAAOC,EAAiBC,EAAsBlB,KACrE,UACUkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOE,GAEL,GADAC,QAAQC,MAAM,wBAAyBF,IAClCnB,EACD,MAAMmB,EAGV,SAhBgBH,OAAOE,EAAsBlB,KACjD,MAAMsB,EAAQvB,EAAwBC,GAClCsB,SACMJ,EAAOK,SAAS,CAAED,WAedC,CAASL,EAAQlB,SACjBkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOO,GAEL,MADAJ,QAAQC,MAAM,qBAAsBG,GAC9BA,KAKLC,EAAkBT,OAC3BU,eACAC,cACA3B,kBAMA,MAAM4B,EAAeC,EAAmB,CACpCP,MAAOvB,EAAwBC,GAC/B8B,UAAWjB,EAAKb,EAAYc,OAE1BiB,QAAeL,EAAaD,gBAvDqB,EACvDE,EACA3B,KAEO,CACHgC,QAASL,EAAYM,KACrBC,GAAIP,EAAYO,GAChBC,MAAOR,EAAYQ,MACnBC,KAAMT,EAAYS,KAClBC,IAAKV,EAAYW,SACjBC,MAAOZ,EAAYY,MACnBjB,MAAOvB,EAAwBC,KA6C/BwC,CAAmDb,EAAa3B,IAEpE,aAAa4B,EAAaa,0BAA0B,CAAEC,KAAMX,GAAS,EC3C5DY,EAAuBC,IAEhC,MAAMC,EAAa7B,UACf,MAAMU,EAAekB,IACfE,QAAkBpB,EAAaqB,eACrC,OAAOD,IAAY,EAAE,EAwCzB,MAAO,CAAED,aAAYG,YArCYhC,OAASiC,UAASC,mBAC/C,MAAMxB,EAAekB,IAKrB,aAJwBlB,EAAasB,YAAY,CAC7ChB,QAASkB,EACTD,WAEY,EA+BcxB,gBA5BOT,MAAOW,EAAa3B,KACzD,IAAI0B,EAAekB,IAEnB,MAAMO,QAAgBN,IACtBlB,EAAYM,KAAOkB,EAEnB,MAAMC,QAAqB1B,EAAa2B,aAEpCC,OAAOtD,EAAYS,YAAc6C,OAAOF,WAClCrC,EAAYP,OAAOR,EAAYS,UAAWiB,EAAc1B,GAC9D0B,EAAekB,KAGnB,MAAMW,QAAsBC,EAAiB,CAAE9B,eAAcC,cAAa3B,gBAC1E,MAjDG,CACHyD,iBAFwBC,EAkDMH,GAhDHE,gBAC3BE,UAAWD,EAAUC,UACrBC,YAAapD,OAAOkD,EAAUE,aAC9B3B,KAAMyB,EAAUzB,KAChBC,GAAIwB,EAAUxB,SAAM2B,EACpBC,WAAYJ,GAPW,IAACA,CAkDoB,EAcGK,cAXd/C,OAASgD,YAAWd,mBACrD,MAAMxB,EAAekB,IAEfqB,EAAkBC,KAAKC,MAAMH,GAKnC,aAJwBtC,EAAaqC,cAAc,CAC/C/B,QAASkB,KACNe,GAES,EAG8C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(a,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("viem")):"function"==typeof define&&define.amd?define(["exports","viem"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).viem={},a.viem)}(this,(function(a,t){"use strict";const n=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:a.chain_id,name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),e=async(a,t,e)=>{try{await t.switchChain({id:a})}catch(i){if(console.error("Error switching chain",i),!e)throw i;try{await(async(a,t)=>{const e=n(t);e&&await a.addChain({chain:e})})(t,e),await t.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},i=async({walletClient:a,transaction:e,chainConfig:i})=>{const r=t.createPublicClient({chain:n(i),transport:t.http(i.rpc)}),c=await a.sendTransaction(((a,t)=>({account:a.from,to:a.to,value:a.value,data:a.data,gas:a.gasLimit,nonce:a.nonce,chain:n(t)}))(e,i));return await r.waitForTransactionReceipt({hash:c})};a.connectWalletClient=a=>{const t=async()=>{const t=a(),n=await t.getAddresses();return n?.[0]};return{getAddress:t,signMessage:async({message:t,ownerAddress:n})=>{const e=a();return await e.signMessage({account:n,message:t})},sendTransaction:async(n,r)=>{let c=a();const s=await t();n.from=s;const o=await c.getChainId();r.chain_id!==o&&(await e(r.chain_id,c,r),c=a());const d=await i({walletClient:c,transaction:n,chainConfig:r});return{transactionHash:(l=d).transactionHash,blockHash:l.blockHash,blockNumber:Number(l.blockNumber),from:l.from,to:l.to||void 0,rawReceipt:l};var l},signTypedData:async({typedData:t,ownerAddress:n})=>{const e=a(),i=JSON.parse(t);return await e.signTypedData({account:n,...i})}}}}));
|
|
1
|
+
!function(a,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("viem")):"function"==typeof define&&define.amd?define(["exports","viem"],t):t((a="undefined"!=typeof globalThis?globalThis:a||self).viem={},a.viem)}(this,(function(a,t){"use strict";const n=a=>({blockExplorers:{default:{name:a.network,url:a.explorer??""}},id:Number(a.chain_id),name:a.network,nativeCurrency:a.native_currency,rpcUrls:{default:{http:[a.rpc]}}}),e=async(a,t,e)=>{try{await t.switchChain({id:a})}catch(i){if(console.error("Error switching chain",i),!e)throw i;try{await(async(a,t)=>{const e=n(t);e&&await a.addChain({chain:e})})(t,e),await t.switchChain({id:a})}catch(a){throw console.error("Error adding chain",a),a}}},i=async({walletClient:a,transaction:e,chainConfig:i})=>{const r=t.createPublicClient({chain:n(i),transport:t.http(i.rpc)}),c=await a.sendTransaction(((a,t)=>({account:a.from,to:a.to,value:a.value,data:a.data,gas:a.gasLimit,nonce:a.nonce,chain:n(t)}))(e,i));return await r.waitForTransactionReceipt({hash:c})};a.connectWalletClient=a=>{const t=async()=>{const t=a(),n=await t.getAddresses();return n?.[0]};return{getAddress:t,signMessage:async({message:t,ownerAddress:n})=>{const e=a();return await e.signMessage({account:n,message:t})},sendTransaction:async(n,r)=>{let c=a();const s=await t();n.from=s;const o=await c.getChainId();BigInt(r.chain_id)!==BigInt(o)&&(await e(Number(r.chain_id),c,r),c=a());const d=await i({walletClient:c,transaction:n,chainConfig:r});return{transactionHash:(l=d).transactionHash,blockHash:l.blockHash,blockNumber:Number(l.blockNumber),from:l.from,to:l.to||void 0,rawReceipt:l};var l},signTypedData:async({typedData:t,ownerAddress:n})=>{const e=a(),i=JSON.parse(t);return await e.signTypedData({account:n,...i})}}}}));
|
|
2
2
|
//# sourceMappingURL=index.umd.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: chainConfig.chain_id,\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (chainConfig.chain_id !== currentChain) {\n await switchChain(chainConfig.chain_id, walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","
|
|
1
|
+
{"version":3,"file":"index.umd.min.js","sources":["../../../../_shared/utils/viemWalletUtils.ts","../../../src/paymentsWidget/viem/index.ts"],"sourcesContent":["import { WalletClient, SendTransactionParameters, Chain, createPublicClient, http, TransactionReceipt } from \"viem\";\n\nimport { EVMChainConfig, TransactionRequest } from \"../types\";\n\nconst getChainFromChainConfig = (chainConfig: EVMChainConfig): Chain => {\n return {\n blockExplorers: {\n default: { name: chainConfig.network, url: chainConfig.explorer ?? \"\" },\n },\n id: Number(chainConfig.chain_id),\n name: chainConfig.network,\n nativeCurrency: chainConfig.native_currency,\n rpcUrls: {\n default: { http: [chainConfig.rpc] },\n },\n };\n};\n\nconst getSendTransactionParametersFromTransactionRequest = (\n transaction: TransactionRequest,\n chainConfig: EVMChainConfig\n): SendTransactionParameters => {\n return {\n account: transaction.from as `0x${string}`,\n to: transaction.to as `0x${string}`,\n value: transaction.value,\n data: transaction.data as `0x${string}`,\n gas: transaction.gasLimit,\n nonce: transaction.nonce,\n chain: getChainFromChainConfig(chainConfig),\n };\n};\n\nexport const addChain = async (wallet: WalletClient, chainConfig: EVMChainConfig) => {\n const chain = getChainFromChainConfig(chainConfig);\n if (chain) {\n await wallet.addChain({ chain });\n }\n};\n\nexport const switchChain = async (chainId: number, wallet: WalletClient, chainConfig?: EVMChainConfig) => {\n try {\n await wallet.switchChain({ id: chainId });\n } catch (switchError) {\n console.error(\"Error switching chain\", switchError);\n if (!chainConfig) {\n throw switchError;\n }\n\n try {\n // Add the chain to the wallet and try again\n await addChain(wallet, chainConfig);\n await wallet.switchChain({ id: chainId });\n } catch (addChainError) {\n console.error(\"Error adding chain\", addChainError);\n throw addChainError;\n }\n }\n};\n\nexport const sendTransaction = async ({\n walletClient,\n transaction,\n chainConfig,\n}: {\n walletClient: WalletClient;\n transaction: TransactionRequest;\n chainConfig: EVMChainConfig;\n}): Promise<TransactionReceipt> => {\n const publicClient = createPublicClient({\n chain: getChainFromChainConfig(chainConfig),\n transport: http(chainConfig.rpc),\n });\n const txHash = await walletClient.sendTransaction(\n getSendTransactionParametersFromTransactionRequest(transaction, chainConfig)\n );\n return await publicClient.waitForTransactionReceipt({ hash: txHash });\n};\n","import { TransactionReceipt as ViemTransactionReceipt, WalletClient } from \"viem\";\nimport type { WalletClient as ViemWalletClient } from \"viem\";\n\nimport { sendTransaction as _sendTransaction, switchChain } from \"@shared/utils/viemWalletUtils\";\nimport type { Address, TransactionReceipt } 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 {ViemTransactionReceipt} txReceipt The viem transaction receipt.\n * @returns {TransactionReceipt} The transaction receipt.\n */\nconst _getTransactionReceipt = (txReceipt: ViemTransactionReceipt): TransactionReceipt => {\n return {\n transactionHash: txReceipt.transactionHash,\n blockHash: txReceipt.blockHash,\n blockNumber: Number(txReceipt.blockNumber),\n from: txReceipt.from,\n to: txReceipt.to || undefined,\n rawReceipt: txReceipt,\n };\n};\n\n/**\n * Connect to a wallet.\n *\n * @param {WalletClient} wallet {{@link WalletClient}} The viem wallet client.\n * @returns {function} ``getAddress`` {function} Function that returns the addresse of the wallet.\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 connectWalletClient = (getClientWallet: () => ViemWalletClient): Required<WalletActionsType> => {\n // return the first address of the wallet\n const getAddress = async () => {\n const walletClient = getClientWallet();\n const addresses = await walletClient.getAddresses();\n return addresses?.[0];\n };\n\n const signMessage: SignMessage = async ({ message, ownerAddress }) => {\n const walletClient = getClientWallet();\n const signature = await walletClient.signMessage({\n account: ownerAddress as `0x${string}`,\n message,\n });\n return signature;\n };\n\n const sendTransaction: SendTransaction = async (transaction, chainConfig) => {\n let walletClient = getClientWallet();\n\n const address = await getAddress();\n transaction.from = address;\n\n const currentChain = await walletClient.getChainId();\n\n if (BigInt(chainConfig.chain_id) !== BigInt(currentChain)) {\n await switchChain(Number(chainConfig.chain_id), walletClient, chainConfig);\n walletClient = getClientWallet();\n }\n\n const viemTxReceipt = await _sendTransaction({ walletClient, transaction, chainConfig });\n return _getTransactionReceipt(viemTxReceipt);\n };\n\n const signTypedData: SignTypedData = async ({ typedData, ownerAddress }) => {\n const walletClient = getClientWallet();\n\n const typedDataObject = JSON.parse(typedData);\n const signature = await walletClient.signTypedData({\n account: ownerAddress as `0x${string}`,\n ...typedDataObject,\n });\n return signature;\n };\n\n return { getAddress, signMessage, sendTransaction, signTypedData };\n};\n"],"names":["getChainFromChainConfig","chainConfig","blockExplorers","default","name","network","url","explorer","id","Number","chain_id","nativeCurrency","native_currency","rpcUrls","http","rpc","switchChain","async","chainId","wallet","switchError","console","error","chain","addChain","addChainError","sendTransaction","walletClient","transaction","publicClient","createPublicClient","transport","txHash","account","from","to","value","data","gas","gasLimit","nonce","getSendTransactionParametersFromTransactionRequest","waitForTransactionReceipt","hash","getClientWallet","getAddress","addresses","getAddresses","signMessage","message","ownerAddress","address","currentChain","getChainId","BigInt","viemTxReceipt","_sendTransaction","transactionHash","txReceipt","blockHash","blockNumber","undefined","rawReceipt","signTypedData","typedData","typedDataObject","JSON","parse"],"mappings":"4QAIA,MAAMA,EAA2BC,IACtB,CACHC,eAAgB,CACZC,QAAS,CAAEC,KAAMH,EAAYI,QAASC,IAAKL,EAAYM,UAAY,KAEvEC,GAAIC,OAAOR,EAAYS,UACvBN,KAAMH,EAAYI,QAClBM,eAAgBV,EAAYW,gBAC5BC,QAAS,CACLV,QAAS,CAAEW,KAAM,CAACb,EAAYc,SA2B7BC,EAAcC,MAAOC,EAAiBC,EAAsBlB,KACrE,UACUkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOE,GAEL,GADAC,QAAQC,MAAM,wBAAyBF,IAClCnB,EACD,MAAMmB,EAGV,SAhBgBH,OAAOE,EAAsBlB,KACjD,MAAMsB,EAAQvB,EAAwBC,GAClCsB,SACMJ,EAAOK,SAAS,CAAED,WAedC,CAASL,EAAQlB,SACjBkB,EAAOH,YAAY,CAAER,GAAIU,IACjC,MAAOO,GAEL,MADAJ,QAAQC,MAAM,qBAAsBG,GAC9BA,KAKLC,EAAkBT,OAC3BU,eACAC,cACA3B,kBAMA,MAAM4B,EAAeC,EAAAA,mBAAmB,CACpCP,MAAOvB,EAAwBC,GAC/B8B,UAAWjB,EAAAA,KAAKb,EAAYc,OAE1BiB,QAAeL,EAAaD,gBAvDqB,EACvDE,EACA3B,KAEO,CACHgC,QAASL,EAAYM,KACrBC,GAAIP,EAAYO,GAChBC,MAAOR,EAAYQ,MACnBC,KAAMT,EAAYS,KAClBC,IAAKV,EAAYW,SACjBC,MAAOZ,EAAYY,MACnBjB,MAAOvB,EAAwBC,KA6C/BwC,CAAmDb,EAAa3B,IAEpE,aAAa4B,EAAaa,0BAA0B,CAAEC,KAAMX,GAAS,wBC3CrCY,IAEhC,MAAMC,EAAa5B,UACf,MAAMU,EAAeiB,IACfE,QAAkBnB,EAAaoB,eACrC,OAAOD,IAAY,EAAE,EAwCzB,MAAO,CAAED,aAAYG,YArCY/B,OAASgC,UAASC,mBAC/C,MAAMvB,EAAeiB,IAKrB,aAJwBjB,EAAaqB,YAAY,CAC7Cf,QAASiB,EACTD,WAEY,EA+BcvB,gBA5BOT,MAAOW,EAAa3B,KACzD,IAAI0B,EAAeiB,IAEnB,MAAMO,QAAgBN,IACtBjB,EAAYM,KAAOiB,EAEnB,MAAMC,QAAqBzB,EAAa0B,aAEpCC,OAAOrD,EAAYS,YAAc4C,OAAOF,WAClCpC,EAAYP,OAAOR,EAAYS,UAAWiB,EAAc1B,GAC9D0B,EAAeiB,KAGnB,MAAMW,QAAsBC,EAAiB,CAAE7B,eAAcC,cAAa3B,gBAC1E,MAjDG,CACHwD,iBAFwBC,EAkDMH,GAhDHE,gBAC3BE,UAAWD,EAAUC,UACrBC,YAAanD,OAAOiD,EAAUE,aAC9B1B,KAAMwB,EAAUxB,KAChBC,GAAIuB,EAAUvB,SAAM0B,EACpBC,WAAYJ,GAPW,IAACA,CAkDoB,EAcGK,cAXd9C,OAAS+C,YAAWd,mBACrD,MAAMvB,EAAeiB,IAEfqB,EAAkBC,KAAKC,MAAMH,GAKnC,aAJwBrC,EAAaoC,cAAc,CAC/C9B,QAASiB,KACNe,GAES,EAG8C"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@halliday-sdk/payments",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"require": "./dist/paymentsWidget/index.cjs.min.js",
|
|
7
7
|
"import": "./dist/paymentsWidget/index.esm.min.js",
|
|
8
8
|
"types": "./dist/paymentsWidget/index.d.ts"
|
|
9
9
|
},
|
|
10
|
+
"./payments-api-client": {
|
|
11
|
+
"require": "./dist/paymentsApiClient/index.cjs.min.js",
|
|
12
|
+
"import": "./dist/paymentsApiClient/index.esm.min.js",
|
|
13
|
+
"types": "./dist/paymentsApiClient/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./payments-widget": {
|
|
16
|
+
"require": "./dist/paymentsWidget/index.cjs.min.js",
|
|
17
|
+
"import": "./dist/paymentsWidget/index.esm.min.js",
|
|
18
|
+
"types": "./dist/paymentsWidget/index.d.ts"
|
|
19
|
+
},
|
|
10
20
|
"./ethers": {
|
|
11
21
|
"require": "./dist/paymentsWidget/ethers/index.cjs.min.js",
|
|
12
22
|
"import": "./dist/paymentsWidget/ethers/index.esm.min.js",
|
|
@@ -18,18 +28,18 @@
|
|
|
18
28
|
"types": "./dist/paymentsWidget/viem/index.d.ts"
|
|
19
29
|
}
|
|
20
30
|
},
|
|
21
|
-
"main": "dist/
|
|
22
|
-
"module": "dist/
|
|
31
|
+
"main": "dist/paymentsApiClient/index.cjs.min.js",
|
|
32
|
+
"module": "dist/paymentsApiClient/index.esm.min.js",
|
|
23
33
|
"umd:main": "dist/paymentsWidget/index.umd.min.js",
|
|
24
34
|
"unpkg": "dist/paymentsWidget/index.umd.min.js",
|
|
25
|
-
"types": "dist/
|
|
35
|
+
"types": "dist/paymentsApiClient/index.d.ts",
|
|
26
36
|
"author": "Halliday",
|
|
27
37
|
"license": "UNLICENSED",
|
|
28
38
|
"files": [
|
|
29
39
|
"dist/**/*"
|
|
30
40
|
],
|
|
31
41
|
"dependencies": {
|
|
32
|
-
"axios": "^1.
|
|
42
|
+
"axios": "^1.12.2",
|
|
33
43
|
"reflect-metadata": "^0.2.2",
|
|
34
44
|
"zod": "^3.25.0"
|
|
35
45
|
},
|