@swapkit/wallets 3.0.0-beta.0 → 3.0.0-beta.2

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 (132) hide show
  1. package/dist/chunk-czhtd6cy.js +4 -0
  2. package/dist/chunk-czhtd6cy.js.map +10 -0
  3. package/dist/{chunk-5m175wfy.js → chunk-p1kdg37m.js} +2 -2
  4. package/dist/{chunk-5m175wfy.js.map → chunk-p1kdg37m.js.map} +1 -1
  5. package/dist/{chunk-f76hj57k.js → chunk-q81hzyra.js} +2 -2
  6. package/dist/{chunk-f76hj57k.js.map → chunk-q81hzyra.js.map} +1 -1
  7. package/dist/chunk-qadd75nn.js +3 -0
  8. package/dist/chunk-qadd75nn.js.map +10 -0
  9. package/dist/src/bitget/index.cjs +2 -2
  10. package/dist/src/bitget/index.cjs.map +5 -5
  11. package/dist/src/bitget/index.js +2 -2
  12. package/dist/src/bitget/index.js.map +5 -5
  13. package/dist/src/coinbase/index.cjs +2 -2
  14. package/dist/src/coinbase/index.cjs.map +4 -4
  15. package/dist/src/coinbase/index.js +2 -3
  16. package/dist/src/coinbase/index.js.map +4 -4
  17. package/dist/src/ctrl/index.cjs +2 -2
  18. package/dist/src/ctrl/index.cjs.map +5 -5
  19. package/dist/src/ctrl/index.js +2 -2
  20. package/dist/src/ctrl/index.js.map +5 -5
  21. package/dist/src/evm-extensions/index.cjs +2 -2
  22. package/dist/src/evm-extensions/index.cjs.map +3 -3
  23. package/dist/src/evm-extensions/index.js +2 -3
  24. package/dist/src/evm-extensions/index.js.map +3 -3
  25. package/dist/src/exodus/index.cjs +2 -2
  26. package/dist/src/exodus/index.cjs.map +3 -3
  27. package/dist/src/exodus/index.js +2 -3
  28. package/dist/src/exodus/index.js.map +3 -3
  29. package/dist/src/index.cjs +2 -2
  30. package/dist/src/index.cjs.map +3 -4
  31. package/dist/src/index.js +2 -2
  32. package/dist/src/index.js.map +3 -4
  33. package/dist/src/keepkey/index.cjs +2 -2
  34. package/dist/src/keepkey/index.cjs.map +7 -7
  35. package/dist/src/keepkey/index.js +2 -3
  36. package/dist/src/keepkey/index.js.map +7 -7
  37. package/dist/src/keepkey-bex/index.cjs +2 -2
  38. package/dist/src/keepkey-bex/index.cjs.map +4 -4
  39. package/dist/src/keepkey-bex/index.js +2 -3
  40. package/dist/src/keepkey-bex/index.js.map +4 -4
  41. package/dist/src/keplr/index.cjs +2 -2
  42. package/dist/src/keplr/index.cjs.map +3 -3
  43. package/dist/src/keplr/index.js +2 -3
  44. package/dist/src/keplr/index.js.map +3 -3
  45. package/dist/src/keystore/index.cjs +2 -2
  46. package/dist/src/keystore/index.cjs.map +4 -4
  47. package/dist/src/keystore/index.js +2 -3
  48. package/dist/src/keystore/index.js.map +4 -4
  49. package/dist/src/ledger/index.cjs +3 -3
  50. package/dist/src/ledger/index.cjs.map +8 -8
  51. package/dist/src/ledger/index.js +3 -4
  52. package/dist/src/ledger/index.js.map +8 -8
  53. package/dist/src/okx/index.cjs +2 -2
  54. package/dist/src/okx/index.cjs.map +4 -4
  55. package/dist/src/okx/index.js +2 -3
  56. package/dist/src/okx/index.js.map +4 -4
  57. package/dist/src/onekey/index.cjs +3 -0
  58. package/dist/src/onekey/index.cjs.map +10 -0
  59. package/dist/src/onekey/index.js +3 -0
  60. package/dist/src/onekey/index.js.map +10 -0
  61. package/dist/src/phantom/index.cjs +2 -2
  62. package/dist/src/phantom/index.cjs.map +3 -3
  63. package/dist/src/phantom/index.js +2 -3
  64. package/dist/src/phantom/index.js.map +3 -3
  65. package/dist/src/polkadotjs/index.cjs +2 -2
  66. package/dist/src/polkadotjs/index.cjs.map +3 -3
  67. package/dist/src/polkadotjs/index.js +2 -3
  68. package/dist/src/polkadotjs/index.js.map +3 -3
  69. package/dist/src/radix/index.cjs +2 -2
  70. package/dist/src/radix/index.cjs.map +3 -3
  71. package/dist/src/radix/index.js +2 -3
  72. package/dist/src/radix/index.js.map +3 -3
  73. package/dist/src/talisman/index.cjs +2 -2
  74. package/dist/src/talisman/index.cjs.map +3 -3
  75. package/dist/src/talisman/index.js +2 -3
  76. package/dist/src/talisman/index.js.map +3 -3
  77. package/dist/src/trezor/index.cjs +2 -2
  78. package/dist/src/trezor/index.cjs.map +3 -3
  79. package/dist/src/trezor/index.js +2 -3
  80. package/dist/src/trezor/index.js.map +3 -3
  81. package/dist/src/walletconnect/index.cjs +2 -2
  82. package/dist/src/walletconnect/index.cjs.map +5 -5
  83. package/dist/src/walletconnect/index.js +2 -3
  84. package/dist/src/walletconnect/index.js.map +5 -5
  85. package/package.json +31 -26
  86. package/src/bitget/helpers.ts +33 -93
  87. package/src/bitget/index.ts +32 -54
  88. package/src/coinbase/index.ts +2 -2
  89. package/src/coinbase/signer.ts +46 -42
  90. package/src/ctrl/index.ts +157 -22
  91. package/src/ctrl/walletHelpers.ts +45 -94
  92. package/src/evm-extensions/index.ts +21 -40
  93. package/src/exodus/index.ts +18 -28
  94. package/src/index.ts +2 -37
  95. package/src/keepkey/chains/cosmos.ts +10 -7
  96. package/src/keepkey/chains/mayachain.ts +24 -24
  97. package/src/keepkey/chains/thorchain.ts +19 -13
  98. package/src/keepkey/chains/utxo.ts +36 -48
  99. package/src/keepkey/index.ts +9 -23
  100. package/src/keepkey-bex/index.ts +25 -23
  101. package/src/keepkey-bex/walletHelpers.ts +8 -36
  102. package/src/keplr/index.ts +6 -53
  103. package/src/keystore/helpers.ts +34 -55
  104. package/src/keystore/index.ts +15 -183
  105. package/src/ledger/clients/evm.ts +3 -7
  106. package/src/ledger/clients/thorchain/lib.ts +0 -19
  107. package/src/ledger/clients/utxo.ts +3 -2
  108. package/src/ledger/helpers/getLedgerClient.ts +2 -2
  109. package/src/ledger/index.ts +20 -21
  110. package/src/ledger/types.ts +1 -1
  111. package/src/okx/helpers.ts +23 -33
  112. package/src/okx/index.ts +4 -47
  113. package/src/onekey/evmSigner.ts +133 -0
  114. package/src/onekey/index.ts +213 -0
  115. package/src/phantom/index.ts +18 -42
  116. package/src/polkadotjs/index.ts +5 -7
  117. package/src/radix/index.ts +31 -47
  118. package/src/talisman/index.ts +15 -32
  119. package/src/trezor/index.ts +46 -45
  120. package/src/types.ts +199 -0
  121. package/src/utils.ts +54 -0
  122. package/src/walletconnect/constants.ts +1 -1
  123. package/src/walletconnect/helpers.ts +2 -2
  124. package/src/walletconnect/index.ts +36 -37
  125. package/dist/chunk-ha78se5g.js +0 -4
  126. package/dist/chunk-ha78se5g.js.map +0 -10
  127. package/dist/chunk-yvbvzc0q.js +0 -3
  128. package/dist/chunk-yvbvzc0q.js.map +0 -10
  129. package/src/bitget/bitgetWallet.ts +0 -32
  130. package/src/ctrl/ctrlWallet.ts +0 -175
  131. package/src/helpers.ts +0 -8
  132. package/src/ledger/ledgerLive.ts +0 -429
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/ledger/index.ts", "../src/ledger/helpers/getLedgerAddress.ts", "../src/ledger/helpers/getLedgerClient.ts", "../src/ledger/clients/cosmos.ts", "../src/ledger/interfaces/CosmosLedgerInterface.ts", "../src/ledger/clients/thorchain/lib.ts", "../src/ledger/clients/thorchain/common.ts", "../src/ledger/clients/thorchain/helpers.ts", "../src/ledger/helpers/getLedgerTransport.ts", "../src/ledger/clients/evm.ts", "../src/ledger/clients/thorchain/index.ts", "../src/ledger/clients/thorchain/utils.ts", "../src/ledger/clients/utxo.ts"],
3
+ "sources": ["../src/ledger/index.ts", "../src/ledger/helpers/getLedgerAddress.ts", "../src/ledger/helpers/getLedgerClient.ts", "../src/ledger/clients/cosmos.ts", "../src/ledger/interfaces/CosmosLedgerInterface.ts", "../src/ledger/clients/thorchain/common.ts", "../src/ledger/clients/thorchain/helpers.ts", "../src/ledger/clients/thorchain/lib.ts", "../src/ledger/helpers/getLedgerTransport.ts", "../src/ledger/clients/evm.ts", "../src/ledger/clients/thorchain/index.ts", "../src/ledger/clients/thorchain/utils.ts", "../src/ledger/clients/utxo.ts"],
4
4
  "sourcesContent": [
5
- "import {\n Chain,\n ChainId,\n type DerivationPathArray,\n FeeOption,\n SKConfig,\n StagenetChain,\n WalletOption,\n createWallet,\n filterSupportedChains,\n} from \"@swapkit/helpers\";\nimport type { DepositParam, TransferParams } from \"@swapkit/toolboxes/cosmos\";\nimport type { UTXOBuildTxParams } from \"@swapkit/toolboxes/utxo\";\n\nimport { getWalletSupportedChains } from \"../helpers\";\nimport { getLedgerAddress, getLedgerClient } from \"./helpers/index\";\n\nexport const ledgerWallet = createWallet({\n name: \"connectLedger\",\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Cosmos,\n Chain.Dash,\n Chain.Dogecoin,\n Chain.Ethereum,\n Chain.Litecoin,\n Chain.Optimism,\n Chain.Polygon,\n Chain.THORChain,\n ],\n walletType: WalletOption.LEDGER,\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectLedger(chains: Chain[], derivationPath?: DerivationPathArray) {\n const [chain] = filterSupportedChains({ chains, supportedChains, walletType });\n\n if (!chain) return false;\n\n const walletMethods = await getWalletMethods({ chain, derivationPath });\n\n addChain({ ...walletMethods, chain, balance: [], walletType: WalletOption.LEDGER });\n\n return true;\n },\n});\n\nexport const LEDGER_SUPPORTED_CHAINS = getWalletSupportedChains(ledgerWallet);\n\n// reduce memo length by removing trade limit\nfunction reduceMemo(memo?: string, affiliateAddress = \"t\") {\n if (!memo?.includes(\"=:\")) return memo;\n\n const removedAffiliate = memo.includes(`:${affiliateAddress}:`)\n ? memo.split(`:${affiliateAddress}:`)[0]\n : memo;\n\n return removedAffiliate?.substring(0, removedAffiliate.lastIndexOf(\":\"));\n}\n\nfunction recursivelyOrderKeys(unordered: any) {\n // If it's an array - recursively order any\n // dictionary items within the array\n if (Array.isArray(unordered)) {\n unordered.forEach((item, index) => {\n unordered[index] = recursivelyOrderKeys(item);\n });\n return unordered;\n }\n\n // If it's an object - let's order the keys\n if (typeof unordered !== \"object\") return unordered;\n const ordered: any = {};\n const sortedKeys = Object.keys(unordered).sort();\n\n for (const key of sortedKeys) {\n ordered[key] = recursivelyOrderKeys(unordered[key]);\n }\n\n return ordered;\n}\n\nfunction stringifyKeysInOrder(data: any) {\n return JSON.stringify(recursivelyOrderKeys(data));\n}\n\nasync function getWalletMethods({\n chain,\n derivationPath,\n}: { chain: Chain; derivationPath?: DerivationPathArray }) {\n switch (chain) {\n case Chain.BitcoinCash:\n case Chain.Bitcoin:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin: {\n const { getToolboxByChain } = await import(\"@swapkit/toolboxes/utxo\");\n\n const toolbox = getToolboxByChain(chain)();\n\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async (params: UTXOBuildTxParams) => {\n const feeRate = params.feeRate || (await toolbox.getFeeRates())[FeeOption.Average];\n const memo = [Chain.Bitcoin].includes(chain) ? params.memo : reduceMemo(params.memo);\n\n const { psbt, inputs } = await toolbox.buildTx({\n ...params,\n feeRate,\n fetchTxHex: true,\n memo,\n sender: address,\n });\n const txHex = await signer.signTransaction(psbt, inputs);\n const tx = await toolbox.broadcastTx(txHex);\n\n return tx;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.Ethereum:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain:\n case Chain.Base: {\n const { getToolboxByChain, getProvider } = await import(\"@swapkit/toolboxes/evm\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const provider = getProvider(chain);\n const toolbox = getToolboxByChain(chain)({ signer, provider });\n\n return { ...toolbox, address };\n }\n\n case Chain.Cosmos: {\n const { createSigningStargateClient, getMsgSendDenom, GaiaToolbox } = await import(\n \"@swapkit/toolboxes/cosmos\"\n );\n const toolbox = GaiaToolbox();\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async ({ assetValue, recipient, memo }: TransferParams) => {\n if (!assetValue) throw new Error(\"invalid asset\");\n\n const sendCoinsMessage = {\n amount: [\n {\n amount: assetValue.getBaseValue(\"string\"),\n denom: getMsgSendDenom(`u${assetValue.symbol}`).toLowerCase(),\n },\n ],\n fromAddress: address,\n toAddress: recipient,\n };\n\n const signingClient = await createSigningStargateClient(\n SKConfig.get(\"rpcUrls\")[chain],\n signer,\n \"0.007uatom\",\n );\n\n const { transactionHash } = await signingClient.signAndBroadcast(\n address,\n [{ typeUrl: \"/cosmos.bank.v1beta1.MsgSend\", value: sendCoinsMessage }],\n 2,\n memo,\n );\n\n return transactionHash;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.THORChain: {\n const { SignMode } = await import(\"cosmjs-types/cosmos/tx/signing/v1beta1/signing.js\");\n const { TxRaw } = await import(\"cosmjs-types/cosmos/tx/v1beta1/tx.js\");\n const { encodePubkey, makeAuthInfoBytes } = await import(\"@cosmjs/proto-signing\");\n const {\n createStargateClient,\n buildEncodedTxBody,\n ThorchainToolbox,\n buildAminoMsg,\n getDefaultChainFee,\n fromBase64,\n parseAminoMessageForDirectSigning,\n } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = ThorchainToolbox();\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const fee = getDefaultChainFee(chain);\n const { pubkey: value, signTransaction, sign: signMessage } = signer;\n\n // ANCHOR (@Chillios): Same parts in methods + can extract StargateClient init to toolbox\n const thorchainTransfer = async ({\n memo = \"\",\n assetValue,\n ...rest\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Refactor to reduce complexity\n }: TransferParams | DepositParam) => {\n const account = await toolbox.getAccount(address);\n if (!account) throw new Error(\"invalid account\");\n if (!assetValue) throw new Error(\"invalid asset\");\n if (!value) throw new Error(\"Account pubkey not found\");\n\n const { accountNumber, sequence: sequenceNumber } = account;\n const sequence = (sequenceNumber || 0).toString();\n\n const orderedMessages = recursivelyOrderKeys([\n buildAminoMsg({ chain, from: address, assetValue, memo, ...rest }),\n ]);\n\n // get tx signing msg\n const rawSendTx = stringifyKeysInOrder({\n account_number: accountNumber?.toString(),\n chain_id: ChainId.THORChain,\n fee,\n memo,\n msgs: orderedMessages,\n sequence,\n });\n\n const signatures = await signTransaction(rawSendTx, sequence);\n if (!signatures) throw new Error(\"tx signing failed\");\n\n const pubkey = encodePubkey({ type: \"tendermint/PubKeySecp256k1\", value });\n const msgs = orderedMessages.map(parseAminoMessageForDirectSigning);\n const bodyBytes = await buildEncodedTxBody({ msgs, chain, memo });\n\n const authInfoBytes = makeAuthInfoBytes(\n [{ pubkey, sequence: Number(sequence) }],\n fee.amount,\n Number.parseInt(fee.gas),\n undefined,\n undefined,\n SignMode.SIGN_MODE_LEGACY_AMINO_JSON,\n );\n\n const signature = signatures?.[0]?.signature\n ? fromBase64(signatures[0].signature)\n : Uint8Array.from([]);\n\n const txRaw = TxRaw.fromPartial({ bodyBytes, authInfoBytes, signatures: [signature] });\n const txBytes = TxRaw.encode(txRaw).finish();\n const { isStagenet } = SKConfig.get(\"envs\");\n\n const broadcaster = await createStargateClient(\n SKConfig.get(\"rpcUrls\")[isStagenet ? StagenetChain.THORChain : Chain.THORChain],\n );\n const { transactionHash } = await broadcaster.broadcastTx(txBytes);\n\n return transactionHash;\n };\n\n const transfer = (params: TransferParams) => thorchainTransfer(params);\n const deposit = (params: DepositParam) => thorchainTransfer(params);\n\n return { ...toolbox, address, deposit, transfer, signMessage };\n }\n\n default:\n throw new Error(\"Unsupported chain\");\n }\n}\n",
5
+ "import {\n Chain,\n ChainId,\n type DerivationPathArray,\n FeeOption,\n type GenericTransferParams,\n SKConfig,\n StagenetChain,\n WalletOption,\n createWallet,\n filterSupportedChains,\n} from \"@swapkit/helpers\";\nimport type { ThorchainDepositParams } from \"@swapkit/toolboxes/cosmos\";\nimport type { UTXOBuildTxParams } from \"@swapkit/toolboxes/utxo\";\n\nimport { getWalletSupportedChains } from \"../utils\";\nimport { getLedgerAddress, getLedgerClient } from \"./helpers\";\n\nexport const ledgerWallet = createWallet({\n name: \"connectLedger\",\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Cosmos,\n Chain.Dash,\n Chain.Dogecoin,\n Chain.Ethereum,\n Chain.Litecoin,\n Chain.Optimism,\n Chain.Polygon,\n Chain.THORChain,\n ],\n walletType: WalletOption.LEDGER,\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectLedger(chains: Chain[], derivationPath?: DerivationPathArray) {\n const [chain] = filterSupportedChains({ chains, supportedChains, walletType });\n\n if (!chain) return false;\n\n const walletMethods = await getWalletMethods({ chain, derivationPath });\n\n addChain({ ...walletMethods, chain, walletType: WalletOption.LEDGER });\n\n return true;\n },\n});\n\nexport const LEDGER_SUPPORTED_CHAINS = getWalletSupportedChains(ledgerWallet);\n\n// reduce memo length by removing trade limit\nfunction reduceMemo(memo?: string, affiliateAddress = \"t\") {\n if (!memo?.includes(\"=:\")) return memo;\n\n const removedAffiliate = memo.includes(`:${affiliateAddress}:`)\n ? memo.split(`:${affiliateAddress}:`)[0]\n : memo;\n\n return removedAffiliate?.substring(0, removedAffiliate.lastIndexOf(\":\"));\n}\n\nfunction recursivelyOrderKeys(unordered: any) {\n // If it's an array - recursively order any\n // dictionary items within the array\n if (Array.isArray(unordered)) {\n unordered.forEach((item, index) => {\n unordered[index] = recursivelyOrderKeys(item);\n });\n return unordered;\n }\n\n // If it's an object - let's order the keys\n if (typeof unordered !== \"object\") return unordered;\n const ordered: any = {};\n const sortedKeys = Object.keys(unordered).sort();\n\n for (const key of sortedKeys) {\n ordered[key] = recursivelyOrderKeys(unordered[key]);\n }\n\n return ordered;\n}\n\nfunction stringifyKeysInOrder(data: any) {\n return JSON.stringify(recursivelyOrderKeys(data));\n}\n\nasync function getWalletMethods({\n chain,\n derivationPath,\n}: { chain: Chain; derivationPath?: DerivationPathArray }) {\n switch (chain) {\n case Chain.BitcoinCash:\n case Chain.Bitcoin:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin: {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n const toolbox = await getUtxoToolbox(chain as Chain.Bitcoin);\n\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async (params: UTXOBuildTxParams) => {\n const feeRate = params.feeRate || (await toolbox.getFeeRates())[FeeOption.Average];\n const memo = [Chain.Bitcoin].includes(chain) ? params.memo : reduceMemo(params.memo);\n\n const { psbt, inputs } = await toolbox.createTransaction({\n ...params,\n feeRate,\n memo,\n sender: address,\n fetchTxHex: true,\n });\n const txHex = await signer.signTransaction(psbt, inputs);\n const tx = await toolbox.broadcastTx(txHex);\n\n return tx;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.Ethereum:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain:\n case Chain.Base: {\n const { getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const toolbox = await getEvmToolbox(chain, { signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Cosmos: {\n const { createSigningStargateClient, getMsgSendDenom, getCosmosToolbox } = await import(\n \"@swapkit/toolboxes/cosmos\"\n );\n const toolbox = await getCosmosToolbox(Chain.Cosmos);\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n if (!assetValue) throw new Error(\"invalid asset\");\n\n const sendCoinsMessage = {\n amount: [\n {\n amount: assetValue.getBaseValue(\"string\"),\n denom: getMsgSendDenom(`u${assetValue.symbol}`).toLowerCase(),\n },\n ],\n fromAddress: address,\n toAddress: recipient,\n };\n\n const signingClient = await createSigningStargateClient(\n SKConfig.get(\"rpcUrls\")[chain],\n signer,\n \"0.007uatom\",\n );\n\n const { transactionHash } = await signingClient.signAndBroadcast(\n address,\n [{ typeUrl: \"/cosmos.bank.v1beta1.MsgSend\", value: sendCoinsMessage }],\n 2,\n memo,\n );\n\n return transactionHash;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.THORChain: {\n const { SignMode } = await import(\"cosmjs-types/cosmos/tx/signing/v1beta1/signing.js\");\n const { TxRaw } = await import(\"cosmjs-types/cosmos/tx/v1beta1/tx.js\");\n const { encodePubkey, makeAuthInfoBytes } = await import(\"@cosmjs/proto-signing\");\n const {\n createStargateClient,\n buildEncodedTxBody,\n getCosmosToolbox,\n buildAminoMsg,\n getDefaultChainFee,\n fromBase64,\n parseAminoMessageForDirectSigning,\n } = await import(\"@swapkit/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const fee = getDefaultChainFee(chain);\n const { pubkey: value, signTransaction, sign: signMessage } = signer;\n\n // ANCHOR (@Chillios): Same parts in methods + can extract StargateClient init to toolbox\n const thorchainTransfer = async ({\n memo = \"\",\n assetValue,\n ...rest\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Refactor to reduce complexity\n }: GenericTransferParams | ThorchainDepositParams) => {\n const account = await toolbox.getAccount(address);\n if (!account) throw new Error(\"invalid account\");\n if (!assetValue) throw new Error(\"invalid asset\");\n if (!value) throw new Error(\"Account pubkey not found\");\n\n const { accountNumber, sequence: sequenceNumber } = account;\n const sequence = (sequenceNumber || 0).toString();\n\n const orderedMessages = recursivelyOrderKeys([\n buildAminoMsg({ sender: address, assetValue, memo, ...rest }),\n ]);\n\n // get tx signing msg\n const rawSendTx = stringifyKeysInOrder({\n account_number: accountNumber?.toString(),\n chain_id: ChainId.THORChain,\n fee,\n memo,\n msgs: orderedMessages,\n sequence,\n });\n\n const signatures = await signTransaction(rawSendTx, sequence);\n if (!signatures) throw new Error(\"tx signing failed\");\n\n const pubkey = encodePubkey({ type: \"tendermint/PubKeySecp256k1\", value });\n const msgs = orderedMessages.map(parseAminoMessageForDirectSigning);\n const bodyBytes = await buildEncodedTxBody({ msgs, chain, memo });\n\n const authInfoBytes = makeAuthInfoBytes(\n [{ pubkey, sequence: Number(sequence) }],\n fee.amount,\n Number.parseInt(fee.gas),\n undefined,\n undefined,\n SignMode.SIGN_MODE_LEGACY_AMINO_JSON,\n );\n\n const signature = signatures?.[0]?.signature\n ? fromBase64(signatures[0].signature)\n : Uint8Array.from([]);\n\n const txRaw = TxRaw.fromPartial({ bodyBytes, authInfoBytes, signatures: [signature] });\n const txBytes = TxRaw.encode(txRaw).finish();\n const { isStagenet } = SKConfig.get(\"envs\");\n\n const broadcaster = await createStargateClient(\n SKConfig.get(\"rpcUrls\")[isStagenet ? StagenetChain.THORChain : Chain.THORChain],\n );\n const { transactionHash } = await broadcaster.broadcastTx(txBytes);\n\n return transactionHash;\n };\n\n const transfer = (params: GenericTransferParams) => thorchainTransfer(params);\n const deposit = (params: ThorchainDepositParams) => thorchainTransfer(params);\n\n return { ...toolbox, address, deposit, transfer, signMessage };\n }\n\n default:\n throw new Error(\"Unsupported chain\");\n }\n}\n",
6
6
  "import { Chain, SwapKitError, WalletOption } from \"@swapkit/helpers\";\n\nimport type { LEDGER_SUPPORTED_CHAINS } from \"../index\";\nimport type { CosmosLedgerClients, EVMLedgerClients, UTXOLedgerClients } from \"../types\";\nimport type { getLedgerClient } from \"./getLedgerClient\";\n\nexport const getLedgerAddress = async ({\n chain,\n ledgerClient,\n}: {\n chain: (typeof LEDGER_SUPPORTED_CHAINS)[number];\n ledgerClient: Awaited<ReturnType<typeof getLedgerClient>>;\n}) => {\n if (!ledgerClient) return \"\";\n\n switch (chain) {\n case Chain.Cosmos:\n case Chain.THORChain: {\n return (ledgerClient as CosmosLedgerClients).connect();\n }\n\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Avalanche:\n case Chain.Polygon:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Base: {\n return (ledgerClient as EVMLedgerClients).getAddress();\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin: {\n const ledger = ledgerClient as UTXOLedgerClients;\n await ledger.connect();\n const address = await ledger.getAddress();\n\n return chain === Chain.BitcoinCash ? address.replace(\"bitcoincash:\", \"\") : address;\n }\n default:\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n }\n};\n",
7
- "import { Chain, type DerivationPathArray, SwapKitError, WalletOption } from \"@swapkit/helpers\";\n\nimport { CosmosLedger } from \"../clients/cosmos\";\nimport {\n ArbitrumLedger,\n AvalancheLedger,\n BaseLedger,\n BinanceSmartChainLedger,\n EthereumLedger,\n OptimismLedger,\n PolygonLedger,\n} from \"../clients/evm\";\nimport { THORChainLedger } from \"../clients/thorchain/index\";\nimport {\n BitcoinCashLedger,\n BitcoinLedger,\n DashLedger,\n DogecoinLedger,\n LitecoinLedger,\n} from \"../clients/utxo\";\n\ntype LedgerSignerMap = {\n [Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;\n [Chain.Avalanche]: ReturnType<typeof AvalancheLedger>;\n [Chain.Base]: ReturnType<typeof BaseLedger>;\n [Chain.BinanceSmartChain]: ReturnType<typeof BinanceSmartChainLedger>;\n [Chain.BitcoinCash]: ReturnType<typeof BitcoinCashLedger>;\n [Chain.Bitcoin]: ReturnType<typeof BitcoinLedger>;\n [Chain.Cosmos]: CosmosLedger;\n [Chain.Dash]: ReturnType<typeof DashLedger>;\n [Chain.Dogecoin]: ReturnType<typeof DogecoinLedger>;\n [Chain.Ethereum]: ReturnType<typeof EthereumLedger>;\n [Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;\n [Chain.Optimism]: ReturnType<typeof OptimismLedger>;\n [Chain.Polygon]: ReturnType<typeof PolygonLedger>;\n [Chain.THORChain]: THORChainLedger;\n};\n\ntype LedgerSupportedChain = keyof LedgerSignerMap;\n\nexport const getLedgerClient = async <T extends LedgerSupportedChain>({\n chain,\n derivationPath,\n}: {\n chain: T;\n derivationPath?: DerivationPathArray;\n}): Promise<LedgerSignerMap[T]> => {\n switch (chain) {\n case Chain.THORChain:\n return new THORChainLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Cosmos:\n return new CosmosLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Bitcoin:\n return BitcoinLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.BitcoinCash:\n return BitcoinCashLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Dash:\n return DashLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Dogecoin:\n return DogecoinLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Litecoin:\n return LitecoinLedger(derivationPath) as LedgerSignerMap[T];\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.Base: {\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n const params = { provider: getProvider(chain), derivationPath };\n\n switch (chain) {\n case Chain.BinanceSmartChain:\n return BinanceSmartChainLedger(params) as LedgerSignerMap[T];\n case Chain.Avalanche:\n return AvalancheLedger(params) as LedgerSignerMap[T];\n case Chain.Arbitrum:\n return ArbitrumLedger(params) as LedgerSignerMap[T];\n case Chain.Optimism:\n return OptimismLedger(params) as LedgerSignerMap[T];\n case Chain.Polygon:\n return PolygonLedger(params) as LedgerSignerMap[T];\n case Chain.Base:\n return BaseLedger(params) as LedgerSignerMap[T];\n default:\n return EthereumLedger(params) as LedgerSignerMap[T];\n }\n }\n\n default:\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n }\n};\n",
7
+ "import { Chain, type DerivationPathArray, SwapKitError, WalletOption } from \"@swapkit/helpers\";\n\nimport { CosmosLedger } from \"../clients/cosmos\";\nimport {\n ArbitrumLedger,\n AvalancheLedger,\n BaseLedger,\n BinanceSmartChainLedger,\n EthereumLedger,\n OptimismLedger,\n PolygonLedger,\n} from \"../clients/evm\";\nimport { THORChainLedger } from \"../clients/thorchain\";\nimport {\n BitcoinCashLedger,\n BitcoinLedger,\n DashLedger,\n DogecoinLedger,\n LitecoinLedger,\n} from \"../clients/utxo\";\n\ntype LedgerSignerMap = {\n [Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;\n [Chain.Avalanche]: ReturnType<typeof AvalancheLedger>;\n [Chain.Base]: ReturnType<typeof BaseLedger>;\n [Chain.BinanceSmartChain]: ReturnType<typeof BinanceSmartChainLedger>;\n [Chain.BitcoinCash]: ReturnType<typeof BitcoinCashLedger>;\n [Chain.Bitcoin]: ReturnType<typeof BitcoinLedger>;\n [Chain.Cosmos]: CosmosLedger;\n [Chain.Dash]: ReturnType<typeof DashLedger>;\n [Chain.Dogecoin]: ReturnType<typeof DogecoinLedger>;\n [Chain.Ethereum]: ReturnType<typeof EthereumLedger>;\n [Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;\n [Chain.Optimism]: ReturnType<typeof OptimismLedger>;\n [Chain.Polygon]: ReturnType<typeof PolygonLedger>;\n [Chain.THORChain]: THORChainLedger;\n};\n\ntype LedgerSupportedChain = keyof LedgerSignerMap;\n\nexport const getLedgerClient = async <T extends LedgerSupportedChain>({\n chain,\n derivationPath,\n}: {\n chain: T;\n derivationPath?: DerivationPathArray;\n}): Promise<LedgerSignerMap[T]> => {\n switch (chain) {\n case Chain.THORChain:\n return new THORChainLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Cosmos:\n return new CosmosLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Bitcoin:\n return BitcoinLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.BitcoinCash:\n return BitcoinCashLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Dash:\n return DashLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Dogecoin:\n return DogecoinLedger(derivationPath) as LedgerSignerMap[T];\n case Chain.Litecoin:\n return LitecoinLedger(derivationPath) as LedgerSignerMap[T];\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.BinanceSmartChain:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.Base: {\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n const params = { provider: await getProvider(chain), derivationPath };\n\n switch (chain) {\n case Chain.BinanceSmartChain:\n return BinanceSmartChainLedger(params) as LedgerSignerMap[T];\n case Chain.Avalanche:\n return AvalancheLedger(params) as LedgerSignerMap[T];\n case Chain.Arbitrum:\n return ArbitrumLedger(params) as LedgerSignerMap[T];\n case Chain.Optimism:\n return OptimismLedger(params) as LedgerSignerMap[T];\n case Chain.Polygon:\n return PolygonLedger(params) as LedgerSignerMap[T];\n case Chain.Base:\n return BaseLedger(params) as LedgerSignerMap[T];\n default:\n return EthereumLedger(params) as LedgerSignerMap[T];\n }\n }\n\n default:\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n }\n};\n",
8
8
  "import {\n type DerivationPathArray,\n NetworkDerivationPath,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport { CosmosLedgerInterface } from \"../interfaces/CosmosLedgerInterface\";\n\nexport class CosmosLedger extends CosmosLedgerInterface {\n private pubKey: string | null = null;\n\n derivationPath: string;\n\n constructor(derivationPath: DerivationPathArray = NetworkDerivationPath.GAIA) {\n super();\n this.chain = \"cosmos\";\n this.derivationPath = derivationPathToString(derivationPath);\n }\n\n connect = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n const { publicKey, address } = await this.getAddressAndPubKey();\n\n this.pubKey = Buffer.from(publicKey, \"hex\").toString(\"base64\");\n\n return address;\n };\n\n getAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response = await this.ledgerApp.getAddress(this.derivationPath, this.chain);\n\n return response;\n };\n\n signTransaction = async (rawTx: string, sequence = \"0\") => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(\n this.derivationPath,\n rawTx,\n );\n\n if (!this.pubKey) throw new Error(\"Public Key not found\");\n\n this.validateResponse(return_code, error_message);\n\n return [\n {\n pub_key: { type: \"tendermint/PubKeySecp256k1\", value: this.pubKey },\n sequence,\n signature,\n },\n ];\n };\n\n signAmino = async (signerAddress: string, signDoc: any): Promise<any> => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const accounts = await this.getAccounts();\n const accountIndex = accounts.findIndex((account) => account.address === signerAddress);\n\n if (accountIndex === -1) {\n throw new Error(`Address ${signerAddress} not found in wallet`);\n }\n\n const { encodeSecp256k1Signature, serializeSignDoc } = await import(\"@cosmjs/amino\");\n const { Secp256k1Signature } = await import(\"@cosmjs/crypto\");\n\n const message = serializeSignDoc(signDoc);\n const signature = await this.ledgerApp.sign(this.derivationPath, message);\n\n this.validateResponse(signature.return_code, signature.error_message);\n\n const secpSignature = Secp256k1Signature.fromDer(signature.signature).toFixedLength();\n\n return {\n signed: signDoc,\n signature: encodeSecp256k1Signature(accounts[0].pubkey, secpSignature),\n };\n };\n\n getAccounts = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const addressAndPubKey = await this.getAddressAndPubKey();\n return [\n {\n address: addressAndPubKey.address,\n algo: \"secp256k1\",\n pubkey: Buffer.from(addressAndPubKey.publicKey, \"hex\"),\n },\n ] as any[];\n };\n}\n",
9
9
  "import {\n type DerivationPathArray,\n LedgerErrorCode,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nimport { THORChainApp } from \"../clients/thorchain/lib\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport abstract class CosmosLedgerInterface {\n ledgerTimeout = 50000;\n derivationPath: DerivationPathArray | string = NetworkDerivationPath.GAIA;\n transport: any;\n ledgerApp: any;\n chain: \"thor\" | \"cosmos\" = \"thor\";\n\n checkOrCreateTransportAndLedger = async (forceReconnect = false) => {\n if (!forceReconnect && this.transport && this.ledgerApp) return;\n\n try {\n this.transport =\n forceReconnect || !this.transport ? await getLedgerTransport() : this.transport;\n\n // biome-ignore lint/style/useDefaultSwitchClause: default will never be hit\n switch (this.chain) {\n case \"thor\": {\n this.ledgerApp =\n forceReconnect || !this.ledgerApp ? new THORChainApp(this.transport) : this.ledgerApp;\n\n break;\n }\n\n case \"cosmos\": {\n const { default: CosmosApp } = await import(\"@ledgerhq/hw-app-cosmos\");\n this.ledgerApp =\n forceReconnect || !this.ledgerApp ? new CosmosApp(this.transport) : this.ledgerApp;\n }\n }\n\n return this.ledgerApp;\n } catch (error: unknown) {\n throw new SwapKitError(\"wallet_ledger_connection_error\", error);\n }\n };\n\n validateResponse = (errorCode: LedgerErrorCode, message?: string) => {\n switch (errorCode) {\n case LedgerErrorCode.NoError:\n return;\n\n case LedgerErrorCode.LockedDevice:\n throw new SwapKitError(\"wallet_ledger_device_locked\", {\n message: `Ledger is locked: ${message}`,\n });\n\n case LedgerErrorCode.TC_NotFound:\n throw new SwapKitError(\"wallet_ledger_device_not_found\");\n\n default: {\n console.error(`Ledger error: ${errorCode} ${message}`);\n break;\n }\n }\n };\n}\n",
10
- "import crypto from \"crypto\";\nimport type Transport from \"@ledgerhq/hw-transport\";\n/** ******************************************************************************\n * (c) 2019 ZondaX GmbH\n * (c) 2016-2017 Ledger\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n ******************************************************************************* */\nimport { bech32 } from \"@scure/base\";\nimport Ripemd160 from \"ripemd160\";\n\nimport {\n CHUNK_SIZE,\n CLA,\n ERROR_CODE,\n INS,\n P1_VALUES,\n P2_VALUES,\n errorCodeToString,\n getVersion,\n processErrorResponse,\n} from \"./common\";\nimport {\n publicKeyv1,\n publicKeyv2,\n serializePathv1,\n serializePathv2,\n signSendChunkv1,\n signSendChunkv2,\n} from \"./helpers\";\n\nexport class THORChainApp {\n transport: Transport;\n versionResponse: any;\n\n constructor(transport: any) {\n if (!transport) {\n throw new Error(\"Transport has not been defined\");\n }\n\n this.transport = transport;\n }\n\n static serializeHRP(hrp: string) {\n if (hrp == null || hrp.length < 3 || hrp.length > 83) {\n throw new Error(\"Invalid HRP\");\n }\n const buf = Buffer.alloc(1 + hrp.length);\n buf.writeUInt8(hrp.length, 0);\n buf.write(hrp, 1);\n return buf;\n }\n\n static getBech32FromPK(hrp: string, pk: Buffer) {\n if (pk.length !== 33) {\n throw new Error(\"expected compressed public key [31 bytes]\");\n }\n // @ts-ignore\n const hashSha256 = crypto.createHash(\"sha256\").update(pk).digest();\n // @ts-ignore\n const hashRip = new Ripemd160().update(hashSha256).digest();\n // @ts-ignore\n const encode = bech32.encode || bech32.bech32.encode;\n // @ts-ignore\n const toWords = bech32.toWords || bech32.bech32.toWords;\n // @ts-ignore\n return encode(hrp, toWords(hashRip));\n }\n\n async serializePath(path: number[]) {\n this.versionResponse = await getVersion(this.transport);\n\n if (this.versionResponse.return_code !== ERROR_CODE.NoError) {\n throw this.versionResponse;\n }\n\n switch (this.versionResponse.major) {\n case 1:\n return serializePathv1(path);\n case 2:\n return serializePathv2(path);\n default:\n return Buffer.alloc(0);\n }\n }\n\n async signGetChunks(path: number[], buffer: Buffer) {\n const serializedPath = await this.serializePath(path);\n\n const chunks = [];\n chunks.push(serializedPath);\n\n for (let i = 0; i < buffer.length; i += CHUNK_SIZE) {\n let end = i + CHUNK_SIZE;\n if (i > buffer.length) {\n end = buffer.length;\n }\n chunks.push(buffer.slice(i, end));\n }\n\n return chunks;\n }\n\n async getVersion() {\n try {\n this.versionResponse = await getVersion(this.transport);\n return this.versionResponse;\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n async appInfo() {\n return this.transport.send(0xb0, 0x01, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let appName = \"\";\n let appVersion = \"\";\n let flagLen = 0;\n let flagsValue = 0;\n\n if (response[0] !== 1) {\n // Ledger responds with format ID 1. There is no spec for any format != 1\n return {\n return_code: 0x9001,\n error_message: \"response format ID not recognized\",\n };\n }\n\n const appNameLen = response[1];\n appName = response.slice(2, 2 + appNameLen).toString(\"ascii\");\n let idx = 2 + appNameLen;\n const appVersionLen = response[idx];\n idx += 1;\n appVersion = response.slice(idx, idx + appVersionLen).toString(\"ascii\");\n idx += appVersionLen;\n const appFlagsLen = response[idx];\n idx += 1;\n flagLen = appFlagsLen;\n flagsValue = response[idx];\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n appName,\n appVersion,\n flagLen,\n flagsValue,\n flag_recovery: (flagsValue & 1) !== 0,\n flag_signed_mcu_code: (flagsValue & 2) !== 0,\n flag_onboarded: (flagsValue & 4) !== 0,\n flag_pin_validated: (flagsValue & 128) !== 0,\n };\n }, processErrorResponse);\n }\n\n async deviceInfo() {\n return this.transport\n .send(0xe0, 0x01, 0, 0, Buffer.from([]), [ERROR_CODE.NoError, 0x6e00])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n if (returnCode === 0x6e00) {\n return {\n return_code: returnCode,\n error_message: \"This command is only available in the Dashboard\",\n };\n }\n\n const targetId = response.slice(0, 4).toString(\"hex\");\n\n let pos = 4;\n const secureElementVersionLen = response[pos];\n pos += 1;\n const seVersion = response.slice(pos, pos + secureElementVersionLen).toString();\n pos += secureElementVersionLen;\n\n const flagsLen = response[pos];\n pos += 1;\n const flag = response.slice(pos, pos + flagsLen).toString(\"hex\");\n pos += flagsLen;\n\n const mcuVersionLen = response[pos];\n pos += 1;\n // Patch issue in mcu version\n let tmp = response.slice(pos, pos + mcuVersionLen);\n if (tmp[mcuVersionLen - 1] === 0) {\n tmp = response.slice(pos, pos + mcuVersionLen - 1);\n }\n const mcuVersion = tmp.toString();\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n // //\n targetId,\n seVersion,\n flag,\n mcuVersion,\n };\n }, processErrorResponse);\n }\n\n async publicKey(path: number[]) {\n try {\n const serializedPath = await this.serializePath(path);\n\n switch (this.versionResponse.major) {\n case 1:\n return publicKeyv1(this, serializedPath);\n case 2: {\n // @ts-ignore\n const data = Buffer.concat([THORChainApp.serializeHRP(\"thor\"), serializedPath]);\n return publicKeyv2(this, data);\n }\n default:\n return {\n return_code: 0x6400,\n error_message: \"App Version is not supported\",\n };\n }\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n async getAddressAndPubKey(path: number[], hrp: string, showInDevice = false) {\n return this.serializePath(path)\n .then((serializedPath: Buffer) => {\n // @ts-ignore\n const data = Buffer.concat([THORChainApp.serializeHRP(hrp), serializedPath]);\n return this.transport\n .send(\n CLA,\n INS.GET_ADDR_SECP256K1,\n showInDevice ? P1_VALUES.SHOW_ADDRESS_IN_DEVICE : P1_VALUES.ONLY_RETRIEVE,\n 0,\n data,\n [ERROR_CODE.NoError],\n )\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n const compressedPk = Buffer.from(response.slice(0, 33));\n const bech32Address = Buffer.from(response.slice(33, -2)).toString();\n\n return {\n bech32_address: bech32Address,\n compressed_pk: compressedPk,\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n };\n }, processErrorResponse);\n })\n .catch((err) => processErrorResponse(err));\n }\n\n showAddressAndPubKey(path: number[], hrp: string) {\n return this.getAddressAndPubKey(path, hrp, true);\n }\n\n signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n switch (this.versionResponse.major) {\n case 1:\n return signSendChunkv1(this, chunkIdx, chunkNum, chunk, txType);\n case 2:\n return signSendChunkv2(this, chunkIdx, chunkNum, chunk, txType);\n default:\n return {\n return_code: 0x6400,\n error_message: \"App Version is not supported\",\n };\n }\n }\n\n async sign(path: number[], message: string, txType = P2_VALUES.JSON) {\n const buffer = Buffer.from(message);\n let chunks: Buffer[] = [];\n let response: any;\n try {\n chunks = await this.signGetChunks(path, buffer);\n response = await this.signSendChunk(1, chunks.length, chunks[0] as Buffer, txType);\n } catch (error) {\n processErrorResponse(error);\n }\n let result = {\n return_code: response.return_code,\n error_message: response.error_message,\n signature: null,\n };\n\n for (let i = 1; i < chunks.length; i += 1) {\n result = await this.signSendChunk(1 + i, chunks.length, chunks[i] as Buffer, txType);\n if (result.return_code !== ERROR_CODE.NoError) {\n break;\n }\n }\n\n return {\n return_code: result.return_code,\n error_message: result.error_message,\n signature: result.signature,\n };\n }\n}\n",
11
10
  "export const CLA = 0x55;\nexport const CHUNK_SIZE = 250;\nexport const APP_KEY = \"CSM\";\n\nexport const INS = {\n GET_VERSION: 0x00,\n INS_PUBLIC_KEY_SECP256K1: 0x01, // Obsolete\n SIGN_SECP256K1: 0x02,\n GET_ADDR_SECP256K1: 0x04,\n};\n\nexport const PAYLOAD_TYPE = {\n INIT: 0x00,\n ADD: 0x01,\n LAST: 0x02,\n};\n\nexport const P1_VALUES = {\n ONLY_RETRIEVE: 0x00,\n SHOW_ADDRESS_IN_DEVICE: 0x01,\n};\n\nexport const P2_VALUES = {\n JSON: 0x0,\n};\n\nexport const ERROR_CODE = {\n NoError: 0x9000,\n};\n\nconst ERROR_DESCRIPTION: any = {\n 1: \"U2F: Unknown\",\n 2: \"U2F: Bad request\",\n 3: \"U2F: Configuration unsupported\",\n 4: \"U2F: Device Ineligible\",\n 5: \"U2F: Timeout\",\n 14: \"Timeout\",\n 36864: \"No errors\",\n 36865: \"Device is busy\",\n 26626: \"Error deriving keys\",\n 25600: \"Execution Error\",\n 26368: \"Wrong Length\",\n 27010: \"Empty Buffer\",\n 27011: \"Output buffer too small\",\n 27012: \"Data is invalid\",\n 27013: \"Conditions not satisfied\",\n 27014: \"Transaction rejected\",\n 27264: \"Bad key handle\",\n 27392: \"Invalid P1/P2\",\n 27904: \"Instruction not supported\",\n 28160: \"App does not seem to be open\",\n 28416: \"Unknown error\",\n 28417: \"Sign/verify error\",\n};\n\nexport function errorCodeToString(statusCode: number) {\n if (statusCode in ERROR_DESCRIPTION) return ERROR_DESCRIPTION[statusCode];\n return `Unknown Status Code: ${statusCode}`;\n}\n\nfunction isDict(v: any) {\n return typeof v === \"object\" && v !== null && !Array.isArray(v) && !(v instanceof Date);\n}\n\nexport function processErrorResponse(response: any) {\n if (response) {\n if (isDict(response)) {\n if (Object.prototype.hasOwnProperty.call(response, \"statusCode\")) {\n return {\n return_code: response.statusCode,\n error_message: errorCodeToString(response.statusCode),\n };\n }\n\n if (\n Object.prototype.hasOwnProperty.call(response, \"return_code\") &&\n Object.prototype.hasOwnProperty.call(response, \"error_message\")\n ) {\n return response;\n }\n }\n return {\n return_code: 0xffff,\n error_message: response.toString(),\n };\n }\n\n return {\n return_code: 0xffff,\n error_message: response.toString(),\n };\n}\n\nexport async function getVersion(transport: any) {\n return transport.send(CLA, INS.GET_VERSION, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let targetId = 0;\n if (response.length >= 9) {\n targetId =\n (response[5] << 24) + (response[6] << 16) + (response[7] << 8) + (response[8] << 0);\n }\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n // ///\n test_mode: response[0] !== 0,\n major: response[1],\n minor: response[2],\n patch: response[3],\n device_locked: response[4] === 1,\n target_id: targetId.toString(16),\n };\n }, processErrorResponse);\n}\n",
12
11
  "import {\n CLA,\n ERROR_CODE,\n INS,\n P2_VALUES,\n PAYLOAD_TYPE,\n errorCodeToString,\n processErrorResponse,\n} from \"./common\";\n\nexport function serializePathv1(path: number[]) {\n if (path == null || path.length < 3) {\n throw new Error(\"Invalid path.\");\n }\n if (path.length > 10) {\n throw new Error(\"Invalid path. Length should be <= 10\");\n }\n const buf = Buffer.alloc(1 + 4 * path.length);\n buf.writeUInt8(path.length, 0);\n for (let i = 0; i < path.length; i += 1) {\n let v = path[i] || 0;\n if (i < 3) {\n // eslint-disable-next-line no-bitwise\n v |= 0x80000000; // Harden\n }\n buf.writeInt32LE(v, 1 + i * 4);\n }\n return buf;\n}\n\nexport async function signSendChunkv1(\n app: any,\n chunkIdx: number,\n _chunkNum: number,\n chunk: Buffer,\n txType = P2_VALUES.JSON,\n) {\n return app.transport\n .send(CLA, INS.SIGN_SECP256K1, chunkIdx, txType, chunk, [ERROR_CODE.NoError, 0x6984, 0x6a80])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n let errorMessage = errorCodeToString(returnCode);\n\n if (returnCode === 0x6a80 || returnCode === 0x6984) {\n errorMessage = `${errorMessage} : ${response.slice(0, response.length - 2).toString(\"ascii\")}`;\n }\n\n let signature: any = null;\n if (response.length > 2) {\n signature = response.slice(0, response.length - 2);\n }\n\n return {\n signature,\n return_code: returnCode,\n error_message: errorMessage,\n };\n }, processErrorResponse);\n}\n\nfunction compressPublicKey(publicKey: Buffer) {\n if (publicKey.length !== 65) {\n throw new Error(\"decompressed public key length should be 65 bytes\");\n }\n const y = publicKey.slice(33, 65);\n\n // @ts-ignore\n const z = Buffer.from([2 + (y[y.length - 1] & 1)]);\n // @ts-ignore\n return Buffer.concat([z, publicKey.slice(1, 33)]);\n}\n\nexport async function publicKeyv1(app: any, data: Buffer) {\n return app.transport\n .send(CLA, INS.INS_PUBLIC_KEY_SECP256K1, 0, 0, data, [ERROR_CODE.NoError])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const pk = Buffer.from(response.slice(0, 65));\n\n return {\n pk,\n compressed_pk: compressPublicKey(pk),\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n };\n }, processErrorResponse);\n}\n\nexport function serializePathv2(path: number[]) {\n if (!path || path.length !== 5) {\n throw new Error(\"Invalid path.\");\n }\n\n const buf = Buffer.alloc(20);\n // @ts-ignore\n buf.writeUInt32LE(0x80000000 + path[0], 0);\n // @ts-ignore\n buf.writeUInt32LE(0x80000000 + path[1], 4);\n // @ts-ignore\n buf.writeUInt32LE(0x80000000 + path[2], 8);\n // @ts-ignore\n buf.writeUInt32LE(path[3], 12);\n // @ts-ignore\n buf.writeUInt32LE(path[4], 16);\n\n return buf;\n}\n\nexport function signSendChunkv2(\n app: any,\n chunkIdx: number,\n chunkNum: number,\n chunk: Buffer,\n txType = P2_VALUES.JSON,\n) {\n let payloadType = PAYLOAD_TYPE.ADD;\n if (chunkIdx === 1) {\n payloadType = PAYLOAD_TYPE.INIT;\n }\n if (chunkIdx === chunkNum) {\n payloadType = PAYLOAD_TYPE.LAST;\n }\n\n return signSendChunkv1(app, payloadType, 0, chunk, txType);\n}\n\nexport async function publicKeyv2(app: any, data: Buffer) {\n return app.transport\n .send(CLA, INS.GET_ADDR_SECP256K1, 0, 0, data, [ERROR_CODE.NoError])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const compressedPk = Buffer.from(response.slice(0, 33));\n\n return {\n pk: \"OBSOLETE PROPERTY\",\n compressed_pk: compressedPk,\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n };\n }, processErrorResponse);\n}\n",
12
+ "import type Transport from \"@ledgerhq/hw-transport\";\n/** ******************************************************************************\n * (c) 2019 ZondaX GmbH\n * (c) 2016-2017 Ledger\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n ******************************************************************************* */\n\nimport {\n CHUNK_SIZE,\n CLA,\n ERROR_CODE,\n INS,\n P1_VALUES,\n P2_VALUES,\n errorCodeToString,\n getVersion,\n processErrorResponse,\n} from \"./common\";\nimport {\n publicKeyv1,\n publicKeyv2,\n serializePathv1,\n serializePathv2,\n signSendChunkv1,\n signSendChunkv2,\n} from \"./helpers\";\n\nexport class THORChainApp {\n transport: Transport;\n versionResponse: any;\n\n constructor(transport: any) {\n if (!transport) {\n throw new Error(\"Transport has not been defined\");\n }\n\n this.transport = transport;\n }\n\n static serializeHRP(hrp: string) {\n if (hrp == null || hrp.length < 3 || hrp.length > 83) {\n throw new Error(\"Invalid HRP\");\n }\n const buf = Buffer.alloc(1 + hrp.length);\n buf.writeUInt8(hrp.length, 0);\n buf.write(hrp, 1);\n return buf;\n }\n\n async serializePath(path: number[]) {\n this.versionResponse = await getVersion(this.transport);\n\n if (this.versionResponse.return_code !== ERROR_CODE.NoError) {\n throw this.versionResponse;\n }\n\n switch (this.versionResponse.major) {\n case 1:\n return serializePathv1(path);\n case 2:\n return serializePathv2(path);\n default:\n return Buffer.alloc(0);\n }\n }\n\n async signGetChunks(path: number[], buffer: Buffer) {\n const serializedPath = await this.serializePath(path);\n\n const chunks = [];\n chunks.push(serializedPath);\n\n for (let i = 0; i < buffer.length; i += CHUNK_SIZE) {\n let end = i + CHUNK_SIZE;\n if (i > buffer.length) {\n end = buffer.length;\n }\n chunks.push(buffer.slice(i, end));\n }\n\n return chunks;\n }\n\n async getVersion() {\n try {\n this.versionResponse = await getVersion(this.transport);\n return this.versionResponse;\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n async appInfo() {\n return this.transport.send(0xb0, 0x01, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let appName = \"\";\n let appVersion = \"\";\n let flagLen = 0;\n let flagsValue = 0;\n\n if (response[0] !== 1) {\n // Ledger responds with format ID 1. There is no spec for any format != 1\n return {\n return_code: 0x9001,\n error_message: \"response format ID not recognized\",\n };\n }\n\n const appNameLen = response[1];\n appName = response.slice(2, 2 + appNameLen).toString(\"ascii\");\n let idx = 2 + appNameLen;\n const appVersionLen = response[idx];\n idx += 1;\n appVersion = response.slice(idx, idx + appVersionLen).toString(\"ascii\");\n idx += appVersionLen;\n const appFlagsLen = response[idx];\n idx += 1;\n flagLen = appFlagsLen;\n flagsValue = response[idx];\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n appName,\n appVersion,\n flagLen,\n flagsValue,\n flag_recovery: (flagsValue & 1) !== 0,\n flag_signed_mcu_code: (flagsValue & 2) !== 0,\n flag_onboarded: (flagsValue & 4) !== 0,\n flag_pin_validated: (flagsValue & 128) !== 0,\n };\n }, processErrorResponse);\n }\n\n async deviceInfo() {\n return this.transport\n .send(0xe0, 0x01, 0, 0, Buffer.from([]), [ERROR_CODE.NoError, 0x6e00])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n if (returnCode === 0x6e00) {\n return {\n return_code: returnCode,\n error_message: \"This command is only available in the Dashboard\",\n };\n }\n\n const targetId = response.slice(0, 4).toString(\"hex\");\n\n let pos = 4;\n const secureElementVersionLen = response[pos];\n pos += 1;\n const seVersion = response.slice(pos, pos + secureElementVersionLen).toString();\n pos += secureElementVersionLen;\n\n const flagsLen = response[pos];\n pos += 1;\n const flag = response.slice(pos, pos + flagsLen).toString(\"hex\");\n pos += flagsLen;\n\n const mcuVersionLen = response[pos];\n pos += 1;\n // Patch issue in mcu version\n let tmp = response.slice(pos, pos + mcuVersionLen);\n if (tmp[mcuVersionLen - 1] === 0) {\n tmp = response.slice(pos, pos + mcuVersionLen - 1);\n }\n const mcuVersion = tmp.toString();\n\n return {\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n // //\n targetId,\n seVersion,\n flag,\n mcuVersion,\n };\n }, processErrorResponse);\n }\n\n async publicKey(path: number[]) {\n try {\n const serializedPath = await this.serializePath(path);\n\n switch (this.versionResponse.major) {\n case 1:\n return publicKeyv1(this, serializedPath);\n case 2: {\n // @ts-ignore\n const data = Buffer.concat([THORChainApp.serializeHRP(\"thor\"), serializedPath]);\n return publicKeyv2(this, data);\n }\n default:\n return {\n return_code: 0x6400,\n error_message: \"App Version is not supported\",\n };\n }\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n async getAddressAndPubKey(path: number[], hrp: string, showInDevice = false) {\n return this.serializePath(path)\n .then((serializedPath: Buffer) => {\n // @ts-ignore\n const data = Buffer.concat([THORChainApp.serializeHRP(hrp), serializedPath]);\n return this.transport\n .send(\n CLA,\n INS.GET_ADDR_SECP256K1,\n showInDevice ? P1_VALUES.SHOW_ADDRESS_IN_DEVICE : P1_VALUES.ONLY_RETRIEVE,\n 0,\n data,\n [ERROR_CODE.NoError],\n )\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n const compressedPk = Buffer.from(response.slice(0, 33));\n const bech32Address = Buffer.from(response.slice(33, -2)).toString();\n\n return {\n bech32_address: bech32Address,\n compressed_pk: compressedPk,\n return_code: returnCode,\n error_message: errorCodeToString(returnCode),\n };\n }, processErrorResponse);\n })\n .catch((err) => processErrorResponse(err));\n }\n\n showAddressAndPubKey(path: number[], hrp: string) {\n return this.getAddressAndPubKey(path, hrp, true);\n }\n\n signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n switch (this.versionResponse.major) {\n case 1:\n return signSendChunkv1(this, chunkIdx, chunkNum, chunk, txType);\n case 2:\n return signSendChunkv2(this, chunkIdx, chunkNum, chunk, txType);\n default:\n return {\n return_code: 0x6400,\n error_message: \"App Version is not supported\",\n };\n }\n }\n\n async sign(path: number[], message: string, txType = P2_VALUES.JSON) {\n const buffer = Buffer.from(message);\n let chunks: Buffer[] = [];\n let response: any;\n try {\n chunks = await this.signGetChunks(path, buffer);\n response = await this.signSendChunk(1, chunks.length, chunks[0] as Buffer, txType);\n } catch (error) {\n processErrorResponse(error);\n }\n let result = {\n return_code: response.return_code,\n error_message: response.error_message,\n signature: null,\n };\n\n for (let i = 1; i < chunks.length; i += 1) {\n result = await this.signSendChunk(1 + i, chunks.length, chunks[i] as Buffer, txType);\n if (result.return_code !== ERROR_CODE.NoError) {\n break;\n }\n }\n\n return {\n return_code: result.return_code,\n error_message: result.error_message,\n signature: result.signature,\n };\n }\n}\n",
13
13
  "import type Transport from \"@ledgerhq/hw-transport\";\nimport { SwapKitError } from \"@swapkit/helpers\";\n\nconst getNavigatorUsb = () =>\n // @ts-ignore\n navigator?.usb as unknown as {\n getDevices: () => Promise<any[]>;\n requestDevice: (requestObject: any) => Promise<any>;\n removeEventListener: (event: string, callback: (e: any) => void) => void;\n addEventListener: (event: string, callback: (e: any) => void) => void;\n };\n\nconst getLedgerDevices = async () => {\n const navigatorUsb = getNavigatorUsb();\n\n if (typeof navigatorUsb?.getDevices !== \"function\") return [];\n const { ledgerUSBVendorId } = await import(\"@ledgerhq/devices\");\n\n const devices = await navigatorUsb?.getDevices();\n const existingDevices = devices.filter((d) => d.vendorId === ledgerUSBVendorId);\n if (existingDevices.length > 0) return existingDevices[0];\n\n return navigatorUsb?.requestDevice({ filters: [{ vendorId: ledgerUSBVendorId }] });\n};\n\nexport const getLedgerTransport = async () => {\n const device = await getLedgerDevices();\n\n if (!device) {\n throw new SwapKitError(\"wallet_ledger_device_not_found\");\n }\n\n await device.open();\n if (device.configuration === null) await device.selectConfiguration(1);\n\n try {\n await device.reset();\n } catch {\n // reset fails on devices that are already open\n }\n\n const iface = device.configurations[0].interfaces.find(\n ({ alternates }: { alternates: { interfaceClass: number }[] }) =>\n alternates.some(({ interfaceClass }) => interfaceClass === 255),\n );\n\n if (!iface) {\n await device.close();\n throw new SwapKitError(\"wallet_ledger_connection_error\");\n }\n\n try {\n await device.claimInterface(iface.interfaceNumber);\n } catch (error: unknown) {\n await device.close();\n\n throw new SwapKitError(\"wallet_ledger_connection_claimed\", error);\n }\n\n const { default: Transport } = await import(\"@ledgerhq/hw-transport-webusb\");\n const isSupported = await Transport.isSupported();\n if (!isSupported) throw new Error(\"WebUSB not supported\");\n\n const { DisconnectedDevice } = await import(\"@ledgerhq/errors\");\n\n const transport = new Transport(device, iface.interfaceNumber);\n\n const onDisconnect = (e: any) => {\n if (device === e.device) {\n getNavigatorUsb()?.removeEventListener(\"disconnect\", onDisconnect);\n\n transport._emitDisconnect(new DisconnectedDevice());\n }\n };\n getNavigatorUsb()?.addEventListener(\"disconnect\", onDisconnect);\n\n return transport as Transport;\n};\n",
14
- "import type EthereumApp from \"@ledgerhq/hw-app-eth\";\nimport {\n ChainId,\n type DerivationPathArray,\n NetworkDerivationPath,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport {\n AbstractSigner,\n type Provider,\n Signature,\n Transaction,\n type TransactionRequest,\n} from \"ethers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nclass EVMLedgerInterface extends AbstractSigner {\n chainId: ChainId = ChainId.Ethereum;\n derivationPath = \"\";\n ledgerApp: InstanceType<typeof EthereumApp> | null = null;\n ledgerTimeout = 50000;\n\n constructor({\n provider,\n derivationPath = NetworkDerivationPath.OP,\n chainId = ChainId.Optimism,\n }: {\n provider: Provider;\n derivationPath?: DerivationPathArray | string;\n chainId?: ChainId;\n }) {\n super(provider);\n\n this.chainId = chainId || ChainId.Ethereum;\n this.derivationPath =\n typeof derivationPath === \"string\" ? derivationPath : derivationPathToString(derivationPath);\n\n Object.defineProperty(this, \"provider\", {\n enumerable: true,\n value: provider || null,\n writable: false,\n });\n }\n\n connect = (provider: Provider) =>\n new EVMLedgerInterface({\n provider,\n derivationPath: this.derivationPath,\n chainId: this.chainId,\n });\n\n checkOrCreateTransportAndLedger = async () => {\n if (this.ledgerApp) return;\n await this.createTransportAndLedger();\n };\n\n createTransportAndLedger = async () => {\n const transport = await getLedgerTransport();\n const { default: EthereumApp } = await import(\"@ledgerhq/hw-app-eth\");\n\n this.ledgerApp = new EthereumApp(transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new Error(\"Could not get Address\");\n return response.address;\n };\n\n getAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath);\n };\n\n showAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath, true);\n };\n\n signMessage = async (messageHex: string) => {\n await this.createTransportAndLedger();\n\n const sig = await this.ledgerApp?.signPersonalMessage(this.derivationPath, messageHex);\n\n if (!sig) throw new Error(\"Signing failed\");\n\n sig.r = `0x${sig.r}`;\n sig.s = `0x${sig.s}`;\n return Signature.from(sig).serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new Error(\"No provider set\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Method not implemented.\");\n }\n\n signTransaction = async (tx: TransactionRequest) => {\n await this.createTransportAndLedger();\n\n const transactionCount = await this.provider?.getTransactionCount(\n tx.from || (await this.getAddress()),\n );\n\n const baseTx = {\n chainId: tx.chainId || this.chainId,\n data: tx.data,\n gasLimit: tx.gasLimit,\n ...(tx.gasPrice && { gasPrice: tx.gasPrice }),\n ...(!tx.gasPrice &&\n tx.maxFeePerGas && {\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n }),\n nonce:\n tx.nonce !== undefined\n ? Number((tx.nonce || transactionCount || 0).toString())\n : transactionCount,\n to: tx.to?.toString(),\n value: tx.value,\n type: tx.type && !Number.isNaN(tx.type) ? tx.type : tx.maxFeePerGas ? 2 : 0,\n };\n\n // ledger expects the tx to be serialized without the 0x prefix\n const unsignedTx = Transaction.from(baseTx).unsignedSerialized.slice(2);\n\n const { ledgerService } = await import(\"@ledgerhq/hw-app-eth\");\n\n const resolution = await ledgerService.resolveTransaction(\n unsignedTx,\n {},\n { externalPlugins: true, erc20: true },\n );\n\n const signature = await this.ledgerApp?.signTransaction(\n this.derivationPath,\n unsignedTx,\n resolution,\n );\n\n if (!signature) throw new Error(\"Could not sign transaction\");\n\n const { r, s, v } = signature;\n\n return Transaction.from({\n ...baseTx,\n signature: { v: Number(BigInt(v)), r: `0x${r}`, s: `0x${s}` },\n }).serialized;\n };\n}\n\ntype LedgerParams = { provider: Provider; derivationPath?: DerivationPathArray };\n\nexport const EthereumLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Ethereum, provider, derivationPath });\n\nexport const AvalancheLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Avalanche, provider, derivationPath });\n\nexport const BinanceSmartChainLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.BinanceSmartChain, provider, derivationPath });\n\nexport const ArbitrumLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Arbitrum, provider, derivationPath });\n\nexport const PolygonLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Polygon, provider, derivationPath });\n\nexport const OptimismLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Optimism, provider, derivationPath });\n\nexport const BaseLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Base, provider, derivationPath });\n",
14
+ "import type EthereumApp from \"@ledgerhq/hw-app-eth\";\nimport {\n ChainId,\n type DerivationPathArray,\n NetworkDerivationPath,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport { AbstractSigner, type Provider, type TransactionRequest } from \"ethers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nclass EVMLedgerInterface extends AbstractSigner {\n chainId: ChainId = ChainId.Ethereum;\n derivationPath = \"\";\n ledgerApp: InstanceType<typeof EthereumApp> | null = null;\n ledgerTimeout = 50000;\n\n constructor({\n provider,\n derivationPath = NetworkDerivationPath.OP,\n chainId = ChainId.Optimism,\n }: {\n provider: Provider;\n derivationPath?: DerivationPathArray | string;\n chainId?: ChainId;\n }) {\n super(provider);\n\n this.chainId = chainId || ChainId.Ethereum;\n this.derivationPath =\n typeof derivationPath === \"string\" ? derivationPath : derivationPathToString(derivationPath);\n\n Object.defineProperty(this, \"provider\", {\n enumerable: true,\n value: provider || null,\n writable: false,\n });\n }\n\n connect = (provider: Provider) =>\n new EVMLedgerInterface({\n provider,\n derivationPath: this.derivationPath,\n chainId: this.chainId,\n });\n\n checkOrCreateTransportAndLedger = async () => {\n if (this.ledgerApp) return;\n await this.createTransportAndLedger();\n };\n\n createTransportAndLedger = async () => {\n const transport = await getLedgerTransport();\n const { default: EthereumApp } = await import(\"@ledgerhq/hw-app-eth\");\n\n this.ledgerApp = new EthereumApp(transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new Error(\"Could not get Address\");\n return response.address;\n };\n\n getAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath);\n };\n\n showAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath, true);\n };\n\n signMessage = async (messageHex: string) => {\n const { Signature } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const sig = await this.ledgerApp?.signPersonalMessage(this.derivationPath, messageHex);\n\n if (!sig) throw new Error(\"Signing failed\");\n\n sig.r = `0x${sig.r}`;\n sig.s = `0x${sig.s}`;\n return Signature.from(sig).serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new Error(\"No provider set\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Method not implemented.\");\n }\n\n signTransaction = async (tx: TransactionRequest) => {\n const { Transaction } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const transactionCount = await this.provider?.getTransactionCount(\n tx.from || (await this.getAddress()),\n );\n\n const baseTx = {\n chainId: tx.chainId || this.chainId,\n data: tx.data,\n gasLimit: tx.gasLimit,\n ...(tx.gasPrice && { gasPrice: tx.gasPrice }),\n ...(!tx.gasPrice &&\n tx.maxFeePerGas && {\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n }),\n nonce:\n tx.nonce !== undefined\n ? Number((tx.nonce || transactionCount || 0).toString())\n : transactionCount,\n to: tx.to?.toString(),\n value: tx.value,\n type: tx.type && !Number.isNaN(tx.type) ? tx.type : tx.maxFeePerGas ? 2 : 0,\n };\n\n // ledger expects the tx to be serialized without the 0x prefix\n const unsignedTx = Transaction.from(baseTx).unsignedSerialized.slice(2);\n\n const { ledgerService } = await import(\"@ledgerhq/hw-app-eth\");\n\n const resolution = await ledgerService.resolveTransaction(\n unsignedTx,\n {},\n { externalPlugins: true, erc20: true },\n );\n\n const signature = await this.ledgerApp?.signTransaction(\n this.derivationPath,\n unsignedTx,\n resolution,\n );\n\n if (!signature) throw new Error(\"Could not sign transaction\");\n\n const { r, s, v } = signature;\n\n return Transaction.from({\n ...baseTx,\n signature: { v: Number(BigInt(v)), r: `0x${r}`, s: `0x${s}` },\n }).serialized;\n };\n}\n\ntype LedgerParams = { provider: Provider; derivationPath?: DerivationPathArray };\n\nexport const EthereumLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Ethereum, provider, derivationPath });\n\nexport const AvalancheLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Avalanche, provider, derivationPath });\n\nexport const BinanceSmartChainLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.BinanceSmartChain, provider, derivationPath });\n\nexport const ArbitrumLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Arbitrum, provider, derivationPath });\n\nexport const PolygonLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Polygon, provider, derivationPath });\n\nexport const OptimismLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Optimism, provider, derivationPath });\n\nexport const BaseLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Base, provider, derivationPath });\n",
15
15
  "import { base64 } from \"@scure/base\";\nimport { type DerivationPathArray, NetworkDerivationPath } from \"@swapkit/helpers\";\n\nimport { CosmosLedgerInterface } from \"../../interfaces/CosmosLedgerInterface\";\nimport type { GetAddressAndPubKeyResponse } from \"../../types\";\nimport { getSignature } from \"./utils\";\n\nexport class THORChainLedger extends CosmosLedgerInterface {\n private pubKey: string | null = null;\n\n derivationPath: DerivationPathArray;\n\n constructor(derivationPath: DerivationPathArray = NetworkDerivationPath.THOR) {\n super();\n this.chain = \"thor\";\n this.derivationPath = derivationPath;\n }\n\n get pubkey() {\n return this.pubKey;\n }\n\n connect = async () => {\n await this.checkOrCreateTransportAndLedger();\n const { compressed_pk, bech32_address }: GetAddressAndPubKeyResponse =\n await this.getAddressAndPubKey();\n\n this.pubKey = base64.encode(compressed_pk);\n\n return bech32_address;\n };\n\n getAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.getAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n showAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.showAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n signTransaction = async (rawTx: string, sequence = \"0\") => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(\n this.derivationPath,\n rawTx,\n );\n\n if (!this.pubKey) throw new Error(\"Public Key not found\");\n\n this.validateResponse(return_code, error_message);\n\n return [\n {\n pub_key: { type: \"tendermint/PubKeySecp256k1\", value: this.pubKey },\n sequence,\n signature: getSignature(signature),\n },\n ];\n };\n\n sign = async (message: string) => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(\n this.derivationPath,\n message,\n );\n\n if (!this.pubKey) throw new Error(\"Public Key not found\");\n\n this.validateResponse(return_code, error_message);\n\n return getSignature(signature);\n };\n}\n",
16
16
  "import { base64 } from \"@scure/base\";\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\nexport const getSignature = (signatureArray: any) => {\n // Check Type Length Value encoding\n if (signatureArray.length < 64) {\n throw new Error(\"Invalid Signature: Too short\");\n }\n if (signatureArray[0] !== 0x30) {\n throw new Error(\"Invalid Ledger Signature TLV encoding: expected first byte 0x30\");\n }\n if (signatureArray[1] + 2 !== signatureArray.length) {\n throw new Error(\"Invalid Signature: signature length does not match TLV\");\n }\n if (signatureArray[2] !== 0x02) {\n throw new Error(\"Invalid Ledger Signature TLV encoding: expected length type 0x02\");\n }\n\n // r signature\n const rLength = signatureArray[3];\n let rSignature = signatureArray.slice(4, rLength + 4);\n\n // Drop leading zero on some 'r' signatures that are 33 bytes.\n if (rSignature.length === 33 && rSignature[0] === 0) {\n rSignature = rSignature.slice(1, 33);\n } else if (rSignature.length === 33) {\n throw new Error('Invalid signature: \"r\" too long');\n }\n\n // add leading zero's to pad to 32 bytes\n while (rSignature.length < 32) {\n rSignature.unshift(0);\n }\n\n // s signature\n if (signatureArray[rLength + 4] !== 0x02) {\n throw new Error(\"Invalid Ledger Signature TLV encoding: expected length type 0x02\");\n }\n\n const sLength = signatureArray[rLength + 5];\n\n if (4 + rLength + 2 + sLength !== signatureArray.length) {\n throw new Error(\"Invalid Ledger Signature: TLV byte lengths do not match message length\");\n }\n\n let sSignature = signatureArray.slice(rLength + 6, signatureArray.length);\n\n // Drop leading zero on 's' signatures that are 33 bytes. This shouldn't occur since ledger signs using \"Small s\" math. But just to be sure...\n if (sSignature.length === 33 && sSignature[0] === 0) {\n sSignature = sSignature.slice(1, 33);\n } else if (sSignature.length === 33) {\n throw new Error('Invalid signature: \"s\" too long');\n }\n\n // add leading zero's to pad to 32 bytes\n while (sSignature.length < 32) {\n sSignature.unshift(0);\n }\n\n if (rSignature.length !== 32 || sSignature.length !== 32) {\n throw new Error(\"Invalid signatures: must be 32 bytes each\");\n }\n\n return base64.encode(Buffer.concat([rSignature, sSignature]));\n};\n",
17
- "import type BitcoinApp from \"@ledgerhq/hw-app-btc\";\nimport type { CreateTransactionArg } from \"@ledgerhq/hw-app-btc/lib-es/createTransaction\";\nimport {\n type DerivationPathArray,\n SwapKitError,\n derivationPathToString,\n getWalletFormatFor,\n} from \"@swapkit/helpers\";\nimport type { Psbt, UTXOType } from \"@swapkit/toolboxes/utxo\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\ntype Params = {\n psbt: Psbt;\n inputUtxos: UTXOType[];\n btcApp: any;\n derivationPath: string;\n};\n\nconst signUTXOTransaction = async (\n { psbt, inputUtxos, btcApp, derivationPath }: Params,\n options?: Partial<CreateTransactionArg>,\n) => {\n const { Transaction } = await import(\"@swapkit/toolboxes/utxo\");\n\n const inputs = inputUtxos.map((item) => {\n const utxoTx = Transaction.fromHex(item.txHex || \"\");\n const splitTx = btcApp.splitTransaction(utxoTx.toHex(), utxoTx.hasWitnesses());\n\n return [\n splitTx,\n item.index,\n undefined as string | null | undefined,\n undefined as number | null | undefined,\n ] as any;\n });\n\n const newTxHex = psbt.data.globalMap.unsignedTx.toBuffer().toString(\"hex\");\n\n const splitNewTx = btcApp.splitTransaction(newTxHex, true);\n const outputScriptHex = btcApp.serializeTransactionOutputs(splitNewTx).toString(\"hex\");\n\n const params: CreateTransactionArg = {\n additionals: [\"bech32\"],\n associatedKeysets: inputs.map(() => derivationPath),\n inputs,\n outputScriptHex,\n segwit: true,\n useTrustedInputForSegwit: true,\n };\n\n return btcApp.createPaymentTransaction({ ...params, ...options });\n};\n\nconst BaseLedgerUTXO = ({\n chain,\n additionalSignParams,\n}: {\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\";\n additionalSignParams?: Partial<CreateTransactionArg>;\n}) => {\n let btcApp: InstanceType<typeof BitcoinApp>;\n let transport: any = null;\n\n async function checkBtcAppAndCreateTransportWebUSB(checkBtcApp = true) {\n if (checkBtcApp && !btcApp) {\n new SwapKitError(\"wallet_ledger_connection_error\", {\n message: `Ledger connection failed:\\n${JSON.stringify({ checkBtcApp, btcApp })}`,\n });\n }\n\n transport ||= await getLedgerTransport();\n }\n\n async function createTransportWebUSB() {\n transport = await getLedgerTransport();\n const { default: BitcoinApp } = await import(\"@ledgerhq/hw-app-btc\");\n\n btcApp = new BitcoinApp({ transport, currency: chain });\n }\n\n return (derivationPathArray?: DerivationPathArray | string) => {\n const derivationPath =\n typeof derivationPathArray === \"string\"\n ? derivationPathArray\n : derivationPathToString(derivationPathArray as DerivationPathArray);\n\n const format = getWalletFormatFor(derivationPath);\n\n return {\n connect: async () => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n const { default: BitcoinApp } = await import(\"@ledgerhq/hw-app-btc\");\n\n btcApp = new BitcoinApp({ transport, currency: chain });\n },\n getExtendedPublicKey: async (path = \"84'/0'/0'\", xpubVersion = 76067358) => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n return btcApp.getWalletXpub({ path, xpubVersion });\n },\n signTransaction: async (psbt: Psbt, inputUtxos: UTXOType[]) => {\n await createTransportWebUSB();\n\n return signUTXOTransaction(\n { psbt, derivationPath, btcApp, inputUtxos },\n additionalSignParams,\n );\n },\n getAddress: async () => {\n const { toCashAddress } = await import(\"@swapkit/toolboxes/utxo\");\n\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n const { bitcoinAddress: address } = await btcApp.getWalletPublicKey(derivationPath, {\n format,\n });\n\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n\n return chain === \"bitcoin-cash\" && format === \"legacy\"\n ? toCashAddress(address).replace(/(bchtest:|bitcoincash:)/, \"\")\n : address;\n },\n };\n };\n};\n\nexport const BitcoinLedger = BaseLedgerUTXO({ chain: \"bitcoin\" });\nexport const LitecoinLedger = BaseLedgerUTXO({ chain: \"litecoin\" });\n\nexport const BitcoinCashLedger = BaseLedgerUTXO({\n chain: \"bitcoin-cash\",\n additionalSignParams: { segwit: false, additionals: [\"abc\"], sigHashType: 0x41 },\n});\n\nexport const DogecoinLedger = BaseLedgerUTXO({\n chain: \"dogecoin\",\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n});\n\nexport const DashLedger = BaseLedgerUTXO({\n chain: \"dash\",\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n});\n"
17
+ "import type BitcoinApp from \"@ledgerhq/hw-app-btc\";\nimport type { CreateTransactionArg } from \"@ledgerhq/hw-app-btc/lib-es/createTransaction\";\nimport {\n type DerivationPathArray,\n SwapKitError,\n derivationPathToString,\n getWalletFormatFor,\n} from \"@swapkit/helpers\";\nimport type { UTXOType } from \"@swapkit/toolboxes/utxo\";\nimport type { Psbt } from \"bitcoinjs-lib\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\ntype Params = {\n psbt: Psbt;\n inputUtxos: UTXOType[];\n btcApp: any;\n derivationPath: string;\n};\n\nconst signUTXOTransaction = async (\n { psbt, inputUtxos, btcApp, derivationPath }: Params,\n options?: Partial<CreateTransactionArg>,\n) => {\n const { Transaction } = await import(\"bitcoinjs-lib\");\n\n const inputs = inputUtxos.map((item) => {\n const utxoTx = Transaction.fromHex(item.txHex || \"\");\n const splitTx = btcApp.splitTransaction(utxoTx.toHex(), utxoTx.hasWitnesses());\n\n return [\n splitTx,\n item.index,\n undefined as string | null | undefined,\n undefined as number | null | undefined,\n ] as any;\n });\n\n const newTxHex = psbt.data.globalMap.unsignedTx.toBuffer().toString(\"hex\");\n\n const splitNewTx = btcApp.splitTransaction(newTxHex, true);\n const outputScriptHex = btcApp.serializeTransactionOutputs(splitNewTx).toString(\"hex\");\n\n const params: CreateTransactionArg = {\n additionals: [\"bech32\"],\n associatedKeysets: inputs.map(() => derivationPath),\n inputs,\n outputScriptHex,\n segwit: true,\n useTrustedInputForSegwit: true,\n };\n\n return btcApp.createPaymentTransaction({ ...params, ...options });\n};\n\nconst BaseLedgerUTXO = ({\n chain,\n additionalSignParams,\n}: {\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\";\n additionalSignParams?: Partial<CreateTransactionArg>;\n}) => {\n let btcApp: InstanceType<typeof BitcoinApp>;\n let transport: any = null;\n\n async function checkBtcAppAndCreateTransportWebUSB(checkBtcApp = true) {\n if (checkBtcApp && !btcApp) {\n new SwapKitError(\"wallet_ledger_connection_error\", {\n message: `Ledger connection failed:\\n${JSON.stringify({ checkBtcApp, btcApp })}`,\n });\n }\n\n transport ||= await getLedgerTransport();\n }\n\n async function createTransportWebUSB() {\n transport = await getLedgerTransport();\n const { default: BitcoinApp } = await import(\"@ledgerhq/hw-app-btc\");\n\n btcApp = new BitcoinApp({ transport, currency: chain });\n }\n\n return (derivationPathArray?: DerivationPathArray | string) => {\n const derivationPath =\n typeof derivationPathArray === \"string\"\n ? derivationPathArray\n : derivationPathToString(derivationPathArray as DerivationPathArray);\n\n const format = getWalletFormatFor(derivationPath);\n\n return {\n connect: async () => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n const { default: BitcoinApp } = await import(\"@ledgerhq/hw-app-btc\");\n\n btcApp = new BitcoinApp({ transport, currency: chain });\n },\n getExtendedPublicKey: async (path = \"84'/0'/0'\", xpubVersion = 76067358) => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n return btcApp.getWalletXpub({ path, xpubVersion });\n },\n signTransaction: async (psbt: Psbt, inputUtxos: UTXOType[]) => {\n await createTransportWebUSB();\n\n return signUTXOTransaction(\n { psbt, derivationPath, btcApp, inputUtxos },\n additionalSignParams,\n );\n },\n getAddress: async () => {\n const { toCashAddress } = await import(\"@swapkit/toolboxes/utxo\");\n\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n const { bitcoinAddress: address } = await btcApp.getWalletPublicKey(derivationPath, {\n format,\n });\n\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n\n return chain === \"bitcoin-cash\" && format === \"legacy\"\n ? toCashAddress(address).replace(/(bchtest:|bitcoincash:)/, \"\")\n : address;\n },\n };\n };\n};\n\nexport const BitcoinLedger = BaseLedgerUTXO({ chain: \"bitcoin\" });\nexport const LitecoinLedger = BaseLedgerUTXO({ chain: \"litecoin\" });\n\nexport const BitcoinCashLedger = BaseLedgerUTXO({\n chain: \"bitcoin-cash\",\n additionalSignParams: { segwit: false, additionals: [\"abc\"], sigHashType: 0x41 },\n});\n\nexport const DogecoinLedger = BaseLedgerUTXO({\n chain: \"dogecoin\",\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n});\n\nexport const DashLedger = BaseLedgerUTXO({\n chain: \"dash\",\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n});\n"
18
18
  ],
19
- "mappings": "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",
20
- "debugId": "1A63B44018E9026964756E2164756E21",
19
+ "mappings": "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",
20
+ "debugId": "BBF071F272C9653E64756E2164756E21",
21
21
  "names": []
22
22
  }
@@ -1,3 +1,3 @@
1
- var P={};b(P,{okxWallet:()=>f,OKX_SUPPORTED_CHAINS:()=>k});module.exports=y(P);var e=require("@swapkit/helpers");var t=require("@swapkit/helpers"),h=()=>async({from:a,recipient:o,amount:n,asset:i,memo:r})=>{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No cosmos okxwallet found");let{createSigningStargateClient:l}=await import("@swapkit/toolboxes/cosmos"),{keplr:s}=window.okxwallet,w=s?.getOfflineSignerOnlyAmino(t.ChainId.Cosmos),m=await l(t.SKConfig.get("rpcUrls").GAIA,w),d=[{denom:i?.symbol==="MUON"?"umuon":"uatom",amount:n.amount().toString()}],{transactionHash:u}=await m.sendTokens(a,o,d,1.6,r);return u};async function x({walletProvider:a,chain:o}){let{getToolboxByChain:n}=await import("@swapkit/toolboxes/evm"),{BrowserProvider:i}=await import("ethers");if(!a)throw new Error("Requested web3 wallet is not installed");let r=new i(a,"any"),l=await r.getSigner(),s=n(o)({provider:r,signer:l});try{if(o!==t.Chain.Ethereum&&"getNetworkParams"in s)await t.switchEVMWalletNetwork(r,o,s.getNetworkParams())}catch(w){throw new Error(`Failed to add/switch ${o} network: ${o}`)}return t.prepareNetworkSwitch({toolbox:s,provider:r,chain:o})}async function g(a){switch(a){case t.Chain.Ethereum:case t.Chain.Base:case t.Chain.Avalanche:case t.Chain.Arbitrum:case t.Chain.Optimism:case t.Chain.Polygon:case t.Chain.BinanceSmartChain:{if(!(window.okxwallet&&("send"in window.okxwallet)))throw new Error("No okxwallet found");let{getProvider:o}=await import("@swapkit/toolboxes/evm"),n=await x({chain:a,walletProvider:window.okxwallet}),i=(await window.okxwallet.send("eth_requestAccounts",[])).result[0];return{...n,getBalance:async(l,s=!0)=>n.getBalance(l||i,s,o(a)),address:i}}case t.Chain.Bitcoin:{if(!(window.okxwallet&&("bitcoin"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{Psbt:o,BTCToolbox:n}=await import("@swapkit/toolboxes/utxo"),{bitcoin:i}=window.okxwallet,r=(await i.connect()).address,l=n(),s=async(m)=>{let d=await i.signPsbt(m.toHex(),{from:r,type:"list"});return o.fromHex(d)};return{...l,transfer:(m)=>{return l.transfer({...m,signTransaction:s})},address:r}}case t.Chain.Cosmos:{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{keplr:o}=window.okxwallet;await o.enable(t.ChainId.Cosmos);let n=await o.getOfflineSignerOnlyAmino(t.ChainId.Cosmos).getAccounts();if(!n?.[0])throw new Error("No cosmos account found");let{GaiaToolbox:i}=await import("@swapkit/toolboxes/cosmos"),[{address:r}]=n;return{...i(),address:r,transfer:h()}}default:throw new Error(`No wallet for chain ${a}`)}}var f=e.createWallet({name:"connectOkx",walletType:e.WalletOption.OKX,supportedChains:[e.Chain.Arbitrum,e.Chain.Avalanche,e.Chain.Base,e.Chain.BinanceSmartChain,e.Chain.Bitcoin,e.Chain.Cosmos,e.Chain.Ethereum,e.Chain.Optimism,e.Chain.Polygon],connect:({addChain:a,supportedChains:o,walletType:n})=>async function i(r){let l=e.filterSupportedChains({chains:r,supportedChains:o,walletType:n});return await Promise.all(l.map(async(s)=>{let w=await g(s);a({...w,chain:s,balance:[],walletType:n})})),!0}}),k=p(f);
1
+ var y={};C(y,{okxWallet:()=>p,OKX_SUPPORTED_CHAINS:()=>b});module.exports=k(y);var e=require("@swapkit/helpers");var o=require("@swapkit/helpers"),x=()=>async({from:r,recipient:t,amount:a,asset:s,memo:n})=>{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No cosmos okxwallet found");let{createSigningStargateClient:l}=await import("@swapkit/toolboxes/cosmos"),{keplr:i}=window.okxwallet,w=i?.getOfflineSignerOnlyAmino(o.ChainId.Cosmos),d=await l(o.SKConfig.get("rpcUrls").GAIA,w),f=[{denom:s?.symbol==="MUON"?"umuon":"uatom",amount:a.amount().toString()}],{transactionHash:g}=await d.sendTokens(r,t,f,1.6,n);return g};async function h({walletProvider:r,chain:t}){let{getEvmToolbox:a}=await import("@swapkit/toolboxes/evm"),{BrowserProvider:s}=await import("ethers");if(!r)throw new Error("Requested web3 wallet is not installed");let n=new s(r,"any"),l=await n.getSigner(),i=await a(t,{provider:n,signer:l});try{if(t!==o.Chain.Ethereum&&"getNetworkParams"in i)await o.switchEVMWalletNetwork(n,t,i.getNetworkParams())}catch(w){throw new Error(`Failed to add/switch ${t} network: ${t}`)}return o.prepareNetworkSwitch({toolbox:i,provider:n,chain:t})}async function m(r){switch(r){case o.Chain.Ethereum:case o.Chain.Base:case o.Chain.Avalanche:case o.Chain.Arbitrum:case o.Chain.Optimism:case o.Chain.Polygon:case o.Chain.BinanceSmartChain:{if(!(window.okxwallet&&("send"in window.okxwallet)))throw new Error("No okxwallet found");let t=await h({chain:r,walletProvider:window.okxwallet}),a=(await window.okxwallet.send("eth_requestAccounts",[])).result[0];return{...t,address:a}}case o.Chain.Bitcoin:{if(!(window.okxwallet&&("bitcoin"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{Psbt:t}=await import("bitcoinjs-lib"),{getUtxoToolbox:a}=await import("@swapkit/toolboxes/utxo"),{bitcoin:s}=window.okxwallet,n=(await s.connect()).address;return{...await a(r,{signer:{signTransaction:async(w)=>{let d=await s.signPsbt(w.toHex(),{from:n,type:"list"});return t.fromHex(d)},getAddress:async()=>Promise.resolve(n)}}),address:n}}case o.Chain.Cosmos:{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{keplr:t}=window.okxwallet;await t.enable(o.ChainId.Cosmos);let a=await t.getOfflineSignerOnlyAmino(o.ChainId.Cosmos).getAccounts();if(!a?.[0])throw new Error("No cosmos account found");let{getCosmosToolbox:s}=await import("@swapkit/toolboxes/cosmos"),[{address:n}]=a;return{...s(o.Chain.Cosmos),address:n,transfer:x()}}default:throw new Error(`No wallet for chain ${r}`)}}var p=e.createWallet({name:"connectOkx",walletType:e.WalletOption.OKX,supportedChains:[e.Chain.Arbitrum,e.Chain.Avalanche,e.Chain.Base,e.Chain.BinanceSmartChain,e.Chain.Bitcoin,e.Chain.Cosmos,e.Chain.Ethereum,e.Chain.Optimism,e.Chain.Polygon],connect:({addChain:r,supportedChains:t,walletType:a})=>async function s(n){let l=e.filterSupportedChains({chains:n,supportedChains:t,walletType:a});return await Promise.all(l.map(async(i)=>{let w=await m(i),d=await w.getAddress()||"";r({...w,address:d,chain:i,walletType:a})})),!0}}),b=u(p);
2
2
 
3
- //# debugId=C8EBC746998EF7A764756E2164756E21
3
+ //# debugId=3FFEFDCEE0DA0BD364756E2164756E21
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/okx/index.ts", "../src/okx/helpers.ts"],
4
4
  "sourcesContent": [
5
- "import type { StdSignDoc, StdSignature } from \"@cosmjs/amino\";\nimport type { EthereumWindowProvider } from \"@swapkit/helpers\";\nimport { Chain, WalletOption, createWallet, filterSupportedChains } from \"@swapkit/helpers\";\n\nimport { getWalletSupportedChains } from \"../helpers\";\nimport { getWalletMethods } from \"./helpers\";\nimport type { AminoSignResponse, OfflineAminoSigner } from \"./types\";\n\nexport const okxWallet = createWallet({\n name: \"connectOkx\",\n walletType: WalletOption.OKX,\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.Cosmos,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectOkx(chains: Chain[]) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const walletMethods = await getWalletMethods(chain);\n\n addChain({ ...walletMethods, chain, balance: [], walletType });\n }),\n );\n\n return true;\n },\n});\n\nexport const OKX_SUPPORTED_CHAINS = getWalletSupportedChains(okxWallet);\n\ndeclare global {\n interface Window {\n okxwallet?:\n | {\n bitcoin: {\n connect: () => Promise<{\n address: string;\n publicKey: string;\n }>;\n disconnect: () => Promise<void>;\n signMessage: (message: string, { from }: { from: string }) => Promise<string>;\n signPsbt: (\n psbtHex: string,\n { from, type }: { from: string; type: string },\n ) => Promise<string>;\n };\n keplr: {\n enable: (chainId: string | string[]) => Promise<void>;\n signAmino: (\n chainId: string,\n signer: string,\n signDoc: StdSignDoc,\n signOptions: any,\n ) => Promise<AminoSignResponse>;\n signArbitrary: (\n chainId: string,\n signer: string,\n data: string | Uint8Array,\n ) => Promise<StdSignature>;\n verifyArbitrary: (\n chainId: string,\n signer: string,\n data: string | Uint8Array,\n signature: StdSignature,\n ) => Promise<boolean>;\n getOfflineSignerOnlyAmino: (chainId: string) => OfflineAminoSigner;\n };\n }\n | EthereumWindowProvider;\n }\n}\n",
6
- "import {\n Chain,\n ChainId,\n type EVMChain,\n SKConfig,\n prepareNetworkSwitch,\n switchEVMWalletNetwork,\n} from \"@swapkit/helpers\";\nimport type { GaiaToolbox } from \"@swapkit/toolboxes/cosmos\";\nimport type { BTCToolbox, Psbt, UTXOTransferParams } from \"@swapkit/toolboxes/utxo\";\nimport type { Eip1193Provider } from \"ethers\";\n\nconst cosmosTransfer =\n () =>\n async ({ from, recipient, amount, asset, memo }: any) => {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No cosmos okxwallet found\");\n }\n const { createSigningStargateClient } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const { keplr: wallet } = window.okxwallet;\n const offlineSigner = wallet?.getOfflineSignerOnlyAmino(ChainId.Cosmos);\n\n const cosmJS = await createSigningStargateClient(SKConfig.get(\"rpcUrls\").GAIA, offlineSigner);\n\n const coins = [\n { denom: asset?.symbol === \"MUON\" ? \"umuon\" : \"uatom\", amount: amount.amount().toString() },\n ];\n\n const { transactionHash } = await cosmJS.sendTokens(from, recipient, coins, 1.6, memo);\n return transactionHash;\n };\n\nasync function getWeb3WalletMethods({\n walletProvider,\n chain,\n}: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {\n const { getToolboxByChain } = await import(\"@swapkit/toolboxes/evm\");\n const { BrowserProvider } = await import(\"ethers\");\n if (!walletProvider) throw new Error(\"Requested web3 wallet is not installed\");\n\n const provider = new BrowserProvider(walletProvider, \"any\");\n const signer = await provider.getSigner();\n\n const toolbox = getToolboxByChain(chain)({ provider, signer });\n\n try {\n if (chain !== Chain.Ethereum && \"getNetworkParams\" in toolbox) {\n await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());\n }\n } catch (_error) {\n throw new Error(`Failed to add/switch ${chain} network: ${chain}`);\n }\n\n return prepareNetworkSwitch({ toolbox, provider, chain });\n}\n\nexport async function getWalletMethods(\n chain: Chain,\n): Promise<\n (\n | ReturnType<typeof GaiaToolbox>\n | Awaited<ReturnType<typeof getWeb3WalletMethods>>\n | ReturnType<typeof BTCToolbox>\n ) & { address: string }\n> {\n switch (chain) {\n case Chain.Ethereum:\n case Chain.Base:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain: {\n if (!(window.okxwallet && \"send\" in window.okxwallet)) {\n throw new Error(\"No okxwallet found\");\n }\n\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n\n const evmWallet = await getWeb3WalletMethods({\n chain,\n walletProvider: window.okxwallet,\n });\n\n const address: string = (await window.okxwallet.send(\"eth_requestAccounts\", [])).result[0];\n\n const getBalance = async (addressOverwrite?: string, potentialScamFilter = true) =>\n evmWallet.getBalance(addressOverwrite || address, potentialScamFilter, getProvider(chain));\n\n return { ...evmWallet, getBalance, address };\n }\n\n case Chain.Bitcoin: {\n if (!(window.okxwallet && \"bitcoin\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { Psbt, BTCToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n\n const { bitcoin: wallet } = window.okxwallet;\n const address = (await wallet.connect()).address;\n const toolbox = BTCToolbox();\n\n const signTransaction = async (psbt: Psbt) => {\n const signedPsbt = await wallet.signPsbt(psbt.toHex(), { from: address, type: \"list\" });\n\n return Psbt.fromHex(signedPsbt);\n };\n\n const transfer = (transferParams: UTXOTransferParams) => {\n return toolbox.transfer({ ...transferParams, signTransaction });\n };\n\n return { ...toolbox, transfer, address };\n }\n\n case Chain.Cosmos: {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { keplr: wallet } = window.okxwallet;\n\n await wallet.enable(ChainId.Cosmos);\n const accounts = await wallet.getOfflineSignerOnlyAmino(ChainId.Cosmos).getAccounts();\n if (!accounts?.[0]) throw new Error(\"No cosmos account found\");\n\n const { GaiaToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const [{ address }] = accounts;\n const toolbox = GaiaToolbox();\n\n return { ...toolbox, address, transfer: cosmosTransfer() };\n }\n\n default:\n throw new Error(`No wallet for chain ${chain}`);\n }\n}\n"
5
+ "import { Chain, WalletOption, createWallet, filterSupportedChains } from \"@swapkit/helpers\";\n\nimport { getWalletSupportedChains } from \"../utils\";\nimport { getWalletMethods } from \"./helpers\";\n\nexport const okxWallet = createWallet({\n name: \"connectOkx\",\n walletType: WalletOption.OKX,\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.Cosmos,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectOkx(chains: Chain[]) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const walletMethods = await getWalletMethods(chain);\n\n const address = (await walletMethods.getAddress()) || \"\";\n\n addChain({ ...walletMethods, address, chain, walletType });\n }),\n );\n\n return true;\n },\n});\n\nexport const OKX_SUPPORTED_CHAINS = getWalletSupportedChains(okxWallet);\n",
6
+ "import {\n Chain,\n ChainId,\n type EVMChain,\n SKConfig,\n prepareNetworkSwitch,\n switchEVMWalletNetwork,\n} from \"@swapkit/helpers\";\nimport type { Eip1193Provider } from \"ethers\";\n\nconst cosmosTransfer =\n () =>\n async ({ from, recipient, amount, asset, memo }: any) => {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No cosmos okxwallet found\");\n }\n const { createSigningStargateClient } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const { keplr: wallet } = window.okxwallet;\n const offlineSigner = wallet?.getOfflineSignerOnlyAmino(ChainId.Cosmos);\n\n const cosmJS = await createSigningStargateClient(SKConfig.get(\"rpcUrls\").GAIA, offlineSigner);\n\n const coins = [\n {\n denom: asset?.symbol === \"MUON\" ? \"umuon\" : \"uatom\",\n amount: amount.amount().toString(),\n },\n ];\n\n const { transactionHash } = await cosmJS.sendTokens(from, recipient, coins, 1.6, memo);\n return transactionHash;\n };\n\nasync function getWeb3WalletMethods({\n walletProvider,\n chain,\n}: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {\n const { getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n const { BrowserProvider } = await import(\"ethers\");\n if (!walletProvider) throw new Error(\"Requested web3 wallet is not installed\");\n\n const provider = new BrowserProvider(walletProvider, \"any\");\n const signer = await provider.getSigner();\n const toolbox = await getEvmToolbox(chain, { provider, signer });\n\n try {\n if (chain !== Chain.Ethereum && \"getNetworkParams\" in toolbox) {\n await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());\n }\n } catch (_error) {\n throw new Error(`Failed to add/switch ${chain} network: ${chain}`);\n }\n\n return prepareNetworkSwitch({ toolbox, provider, chain });\n}\n\nexport async function getWalletMethods(chain: Chain) {\n switch (chain) {\n case Chain.Ethereum:\n case Chain.Base:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain: {\n if (!(window.okxwallet && \"send\" in window.okxwallet)) {\n throw new Error(\"No okxwallet found\");\n }\n\n const evmWallet = await getWeb3WalletMethods({\n chain,\n walletProvider: window.okxwallet,\n });\n const address: string = (await window.okxwallet.send(\"eth_requestAccounts\", [])).result[0];\n\n return { ...evmWallet, address };\n }\n\n case Chain.Bitcoin: {\n if (!(window.okxwallet && \"bitcoin\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { Psbt } = await import(\"bitcoinjs-lib\");\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n\n const { bitcoin: wallet } = window.okxwallet;\n const address = (await wallet.connect()).address;\n\n const signer = {\n signTransaction: async (psbt: InstanceType<typeof Psbt>) => {\n const signedPsbt = await wallet.signPsbt(psbt.toHex(), {\n from: address,\n type: \"list\",\n });\n\n return Psbt.fromHex(signedPsbt);\n },\n getAddress: async () => Promise.resolve(address),\n };\n\n const toolbox = await getUtxoToolbox(chain, { signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Cosmos: {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { keplr: wallet } = window.okxwallet;\n\n await wallet.enable(ChainId.Cosmos);\n const accounts = await wallet.getOfflineSignerOnlyAmino(ChainId.Cosmos).getAccounts();\n if (!accounts?.[0]) throw new Error(\"No cosmos account found\");\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const [{ address }] = accounts;\n const toolbox = getCosmosToolbox(Chain.Cosmos);\n\n return { ...toolbox, address, transfer: cosmosTransfer() };\n }\n\n default:\n throw new Error(`No wallet for chain ${chain}`);\n }\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "C8EBC746998EF7A764756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "3FFEFDCEE0DA0BD364756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,3 @@
1
- import{r as u}from"../../chunk-ha78se5g.js";import{s as c,t as w}from"../../chunk-5m175wfy.js";import{Chain as l,WalletOption as S,createWallet as C,filterSupportedChains as A}from"@swapkit/helpers";import{Chain as a,ChainId as p,SKConfig as x,prepareNetworkSwitch as y,switchEVMWalletNetwork as b}from"@swapkit/helpers";var k=()=>async({from:i,recipient:t,amount:o,asset:n,memo:e})=>{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No cosmos okxwallet found");let{createSigningStargateClient:s}=await import("@swapkit/toolboxes/cosmos"),{keplr:r}=window.okxwallet,m=r?.getOfflineSignerOnlyAmino(p.Cosmos),d=await s(x.get("rpcUrls").GAIA,m),g=[{denom:n?.symbol==="MUON"?"umuon":"uatom",amount:o.amount().toString()}],{transactionHash:h}=await d.sendTokens(i,t,g,1.6,e);return h};async function P({walletProvider:i,chain:t}){let{getToolboxByChain:o}=await import("@swapkit/toolboxes/evm"),{BrowserProvider:n}=await import("ethers");if(!i)throw new Error("Requested web3 wallet is not installed");let e=new n(i,"any"),s=await e.getSigner(),r=o(t)({provider:e,signer:s});try{if(t!==a.Ethereum&&"getNetworkParams"in r)await b(e,t,r.getNetworkParams())}catch(m){throw new Error(`Failed to add/switch ${t} network: ${t}`)}return y({toolbox:r,provider:e,chain:t})}async function f(i){switch(i){case a.Ethereum:case a.Base:case a.Avalanche:case a.Arbitrum:case a.Optimism:case a.Polygon:case a.BinanceSmartChain:{if(!(window.okxwallet&&("send"in window.okxwallet)))throw new Error("No okxwallet found");let{getProvider:t}=await import("@swapkit/toolboxes/evm"),o=await P({chain:i,walletProvider:window.okxwallet}),n=(await window.okxwallet.send("eth_requestAccounts",[])).result[0];return{...o,getBalance:async(s,r=!0)=>o.getBalance(s||n,r,t(i)),address:n}}case a.Bitcoin:{if(!(window.okxwallet&&("bitcoin"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{Psbt:t,BTCToolbox:o}=await import("@swapkit/toolboxes/utxo"),{bitcoin:n}=window.okxwallet,e=(await n.connect()).address,s=o(),r=async(d)=>{let g=await n.signPsbt(d.toHex(),{from:e,type:"list"});return t.fromHex(g)};return{...s,transfer:(d)=>{return s.transfer({...d,signTransaction:r})},address:e}}case a.Cosmos:{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{keplr:t}=window.okxwallet;await t.enable(p.Cosmos);let o=await t.getOfflineSignerOnlyAmino(p.Cosmos).getAccounts();if(!o?.[0])throw new Error("No cosmos account found");let{GaiaToolbox:n}=await import("@swapkit/toolboxes/cosmos"),[{address:e}]=o;return{...n(),address:e,transfer:k()}}default:throw new Error(`No wallet for chain ${i}`)}}var T=C({name:"connectOkx",walletType:S.OKX,supportedChains:[l.Arbitrum,l.Avalanche,l.Base,l.BinanceSmartChain,l.Bitcoin,l.Cosmos,l.Ethereum,l.Optimism,l.Polygon],connect:({addChain:i,supportedChains:t,walletType:o})=>async function n(e){let s=A({chains:e,supportedChains:t,walletType:o});return await Promise.all(s.map(async(r)=>{let m=await f(r);i({...m,chain:r,balance:[],walletType:o})})),!0}}),N=u(T);export{T as okxWallet,N as OKX_SUPPORTED_CHAINS};
2
- export{T as f};
1
+ import{a as f}from"../../chunk-czhtd6cy.js";import{c,d}from"../../chunk-p1kdg37m.js";import{Chain as i,WalletOption as E,createWallet as P,filterSupportedChains as S}from"@swapkit/helpers";import{Chain as a,ChainId as p,SKConfig as h,prepareNetworkSwitch as k,switchEVMWalletNetwork as C}from"@swapkit/helpers";var b=()=>async({from:n,recipient:o,amount:e,asset:r,memo:t})=>{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No cosmos okxwallet found");let{createSigningStargateClient:l}=await import("@swapkit/toolboxes/cosmos"),{keplr:s}=window.okxwallet,w=s?.getOfflineSignerOnlyAmino(p.Cosmos),m=await l(h.get("rpcUrls").GAIA,w),g=[{denom:r?.symbol==="MUON"?"umuon":"uatom",amount:e.amount().toString()}],{transactionHash:x}=await m.sendTokens(n,o,g,1.6,t);return x};async function y({walletProvider:n,chain:o}){let{getEvmToolbox:e}=await import("@swapkit/toolboxes/evm"),{BrowserProvider:r}=await import("ethers");if(!n)throw new Error("Requested web3 wallet is not installed");let t=new r(n,"any"),l=await t.getSigner(),s=await e(o,{provider:t,signer:l});try{if(o!==a.Ethereum&&"getNetworkParams"in s)await C(t,o,s.getNetworkParams())}catch(w){throw new Error(`Failed to add/switch ${o} network: ${o}`)}return k({toolbox:s,provider:t,chain:o})}async function u(n){switch(n){case a.Ethereum:case a.Base:case a.Avalanche:case a.Arbitrum:case a.Optimism:case a.Polygon:case a.BinanceSmartChain:{if(!(window.okxwallet&&("send"in window.okxwallet)))throw new Error("No okxwallet found");let o=await y({chain:n,walletProvider:window.okxwallet}),e=(await window.okxwallet.send("eth_requestAccounts",[])).result[0];return{...o,address:e}}case a.Bitcoin:{if(!(window.okxwallet&&("bitcoin"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{Psbt:o}=await import("bitcoinjs-lib"),{getUtxoToolbox:e}=await import("@swapkit/toolboxes/utxo"),{bitcoin:r}=window.okxwallet,t=(await r.connect()).address;return{...await e(n,{signer:{signTransaction:async(w)=>{let m=await r.signPsbt(w.toHex(),{from:t,type:"list"});return o.fromHex(m)},getAddress:async()=>Promise.resolve(t)}}),address:t}}case a.Cosmos:{if(!(window.okxwallet&&("keplr"in window.okxwallet)))throw new Error("No bitcoin okxwallet found");let{keplr:o}=window.okxwallet;await o.enable(p.Cosmos);let e=await o.getOfflineSignerOnlyAmino(p.Cosmos).getAccounts();if(!e?.[0])throw new Error("No cosmos account found");let{getCosmosToolbox:r}=await import("@swapkit/toolboxes/cosmos"),[{address:t}]=e;return{...r(a.Cosmos),address:t,transfer:b()}}default:throw new Error(`No wallet for chain ${n}`)}}var A=P({name:"connectOkx",walletType:E.OKX,supportedChains:[i.Arbitrum,i.Avalanche,i.Base,i.BinanceSmartChain,i.Bitcoin,i.Cosmos,i.Ethereum,i.Optimism,i.Polygon],connect:({addChain:n,supportedChains:o,walletType:e})=>async function r(t){let l=S({chains:t,supportedChains:o,walletType:e});return await Promise.all(l.map(async(s)=>{let w=await u(s),m=await w.getAddress()||"";n({...w,address:m,chain:s,walletType:e})})),!0}}),T=f(A);export{A as okxWallet,T as OKX_SUPPORTED_CHAINS};
3
2
 
4
- //# debugId=0FFA01C45071364064756E2164756E21
3
+ //# debugId=512295FA2983091F64756E2164756E21
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/okx/index.ts", "../src/okx/helpers.ts"],
4
4
  "sourcesContent": [
5
- "import type { StdSignDoc, StdSignature } from \"@cosmjs/amino\";\nimport type { EthereumWindowProvider } from \"@swapkit/helpers\";\nimport { Chain, WalletOption, createWallet, filterSupportedChains } from \"@swapkit/helpers\";\n\nimport { getWalletSupportedChains } from \"../helpers\";\nimport { getWalletMethods } from \"./helpers\";\nimport type { AminoSignResponse, OfflineAminoSigner } from \"./types\";\n\nexport const okxWallet = createWallet({\n name: \"connectOkx\",\n walletType: WalletOption.OKX,\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.Cosmos,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectOkx(chains: Chain[]) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const walletMethods = await getWalletMethods(chain);\n\n addChain({ ...walletMethods, chain, balance: [], walletType });\n }),\n );\n\n return true;\n },\n});\n\nexport const OKX_SUPPORTED_CHAINS = getWalletSupportedChains(okxWallet);\n\ndeclare global {\n interface Window {\n okxwallet?:\n | {\n bitcoin: {\n connect: () => Promise<{\n address: string;\n publicKey: string;\n }>;\n disconnect: () => Promise<void>;\n signMessage: (message: string, { from }: { from: string }) => Promise<string>;\n signPsbt: (\n psbtHex: string,\n { from, type }: { from: string; type: string },\n ) => Promise<string>;\n };\n keplr: {\n enable: (chainId: string | string[]) => Promise<void>;\n signAmino: (\n chainId: string,\n signer: string,\n signDoc: StdSignDoc,\n signOptions: any,\n ) => Promise<AminoSignResponse>;\n signArbitrary: (\n chainId: string,\n signer: string,\n data: string | Uint8Array,\n ) => Promise<StdSignature>;\n verifyArbitrary: (\n chainId: string,\n signer: string,\n data: string | Uint8Array,\n signature: StdSignature,\n ) => Promise<boolean>;\n getOfflineSignerOnlyAmino: (chainId: string) => OfflineAminoSigner;\n };\n }\n | EthereumWindowProvider;\n }\n}\n",
6
- "import {\n Chain,\n ChainId,\n type EVMChain,\n SKConfig,\n prepareNetworkSwitch,\n switchEVMWalletNetwork,\n} from \"@swapkit/helpers\";\nimport type { GaiaToolbox } from \"@swapkit/toolboxes/cosmos\";\nimport type { BTCToolbox, Psbt, UTXOTransferParams } from \"@swapkit/toolboxes/utxo\";\nimport type { Eip1193Provider } from \"ethers\";\n\nconst cosmosTransfer =\n () =>\n async ({ from, recipient, amount, asset, memo }: any) => {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No cosmos okxwallet found\");\n }\n const { createSigningStargateClient } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const { keplr: wallet } = window.okxwallet;\n const offlineSigner = wallet?.getOfflineSignerOnlyAmino(ChainId.Cosmos);\n\n const cosmJS = await createSigningStargateClient(SKConfig.get(\"rpcUrls\").GAIA, offlineSigner);\n\n const coins = [\n { denom: asset?.symbol === \"MUON\" ? \"umuon\" : \"uatom\", amount: amount.amount().toString() },\n ];\n\n const { transactionHash } = await cosmJS.sendTokens(from, recipient, coins, 1.6, memo);\n return transactionHash;\n };\n\nasync function getWeb3WalletMethods({\n walletProvider,\n chain,\n}: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {\n const { getToolboxByChain } = await import(\"@swapkit/toolboxes/evm\");\n const { BrowserProvider } = await import(\"ethers\");\n if (!walletProvider) throw new Error(\"Requested web3 wallet is not installed\");\n\n const provider = new BrowserProvider(walletProvider, \"any\");\n const signer = await provider.getSigner();\n\n const toolbox = getToolboxByChain(chain)({ provider, signer });\n\n try {\n if (chain !== Chain.Ethereum && \"getNetworkParams\" in toolbox) {\n await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());\n }\n } catch (_error) {\n throw new Error(`Failed to add/switch ${chain} network: ${chain}`);\n }\n\n return prepareNetworkSwitch({ toolbox, provider, chain });\n}\n\nexport async function getWalletMethods(\n chain: Chain,\n): Promise<\n (\n | ReturnType<typeof GaiaToolbox>\n | Awaited<ReturnType<typeof getWeb3WalletMethods>>\n | ReturnType<typeof BTCToolbox>\n ) & { address: string }\n> {\n switch (chain) {\n case Chain.Ethereum:\n case Chain.Base:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain: {\n if (!(window.okxwallet && \"send\" in window.okxwallet)) {\n throw new Error(\"No okxwallet found\");\n }\n\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n\n const evmWallet = await getWeb3WalletMethods({\n chain,\n walletProvider: window.okxwallet,\n });\n\n const address: string = (await window.okxwallet.send(\"eth_requestAccounts\", [])).result[0];\n\n const getBalance = async (addressOverwrite?: string, potentialScamFilter = true) =>\n evmWallet.getBalance(addressOverwrite || address, potentialScamFilter, getProvider(chain));\n\n return { ...evmWallet, getBalance, address };\n }\n\n case Chain.Bitcoin: {\n if (!(window.okxwallet && \"bitcoin\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { Psbt, BTCToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n\n const { bitcoin: wallet } = window.okxwallet;\n const address = (await wallet.connect()).address;\n const toolbox = BTCToolbox();\n\n const signTransaction = async (psbt: Psbt) => {\n const signedPsbt = await wallet.signPsbt(psbt.toHex(), { from: address, type: \"list\" });\n\n return Psbt.fromHex(signedPsbt);\n };\n\n const transfer = (transferParams: UTXOTransferParams) => {\n return toolbox.transfer({ ...transferParams, signTransaction });\n };\n\n return { ...toolbox, transfer, address };\n }\n\n case Chain.Cosmos: {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { keplr: wallet } = window.okxwallet;\n\n await wallet.enable(ChainId.Cosmos);\n const accounts = await wallet.getOfflineSignerOnlyAmino(ChainId.Cosmos).getAccounts();\n if (!accounts?.[0]) throw new Error(\"No cosmos account found\");\n\n const { GaiaToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const [{ address }] = accounts;\n const toolbox = GaiaToolbox();\n\n return { ...toolbox, address, transfer: cosmosTransfer() };\n }\n\n default:\n throw new Error(`No wallet for chain ${chain}`);\n }\n}\n"
5
+ "import { Chain, WalletOption, createWallet, filterSupportedChains } from \"@swapkit/helpers\";\n\nimport { getWalletSupportedChains } from \"../utils\";\nimport { getWalletMethods } from \"./helpers\";\n\nexport const okxWallet = createWallet({\n name: \"connectOkx\",\n walletType: WalletOption.OKX,\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.Cosmos,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectOkx(chains: Chain[]) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const walletMethods = await getWalletMethods(chain);\n\n const address = (await walletMethods.getAddress()) || \"\";\n\n addChain({ ...walletMethods, address, chain, walletType });\n }),\n );\n\n return true;\n },\n});\n\nexport const OKX_SUPPORTED_CHAINS = getWalletSupportedChains(okxWallet);\n",
6
+ "import {\n Chain,\n ChainId,\n type EVMChain,\n SKConfig,\n prepareNetworkSwitch,\n switchEVMWalletNetwork,\n} from \"@swapkit/helpers\";\nimport type { Eip1193Provider } from \"ethers\";\n\nconst cosmosTransfer =\n () =>\n async ({ from, recipient, amount, asset, memo }: any) => {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No cosmos okxwallet found\");\n }\n const { createSigningStargateClient } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const { keplr: wallet } = window.okxwallet;\n const offlineSigner = wallet?.getOfflineSignerOnlyAmino(ChainId.Cosmos);\n\n const cosmJS = await createSigningStargateClient(SKConfig.get(\"rpcUrls\").GAIA, offlineSigner);\n\n const coins = [\n {\n denom: asset?.symbol === \"MUON\" ? \"umuon\" : \"uatom\",\n amount: amount.amount().toString(),\n },\n ];\n\n const { transactionHash } = await cosmJS.sendTokens(from, recipient, coins, 1.6, memo);\n return transactionHash;\n };\n\nasync function getWeb3WalletMethods({\n walletProvider,\n chain,\n}: { walletProvider: Eip1193Provider | undefined; chain: EVMChain }) {\n const { getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n const { BrowserProvider } = await import(\"ethers\");\n if (!walletProvider) throw new Error(\"Requested web3 wallet is not installed\");\n\n const provider = new BrowserProvider(walletProvider, \"any\");\n const signer = await provider.getSigner();\n const toolbox = await getEvmToolbox(chain, { provider, signer });\n\n try {\n if (chain !== Chain.Ethereum && \"getNetworkParams\" in toolbox) {\n await switchEVMWalletNetwork(provider, chain, toolbox.getNetworkParams());\n }\n } catch (_error) {\n throw new Error(`Failed to add/switch ${chain} network: ${chain}`);\n }\n\n return prepareNetworkSwitch({ toolbox, provider, chain });\n}\n\nexport async function getWalletMethods(chain: Chain) {\n switch (chain) {\n case Chain.Ethereum:\n case Chain.Base:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain: {\n if (!(window.okxwallet && \"send\" in window.okxwallet)) {\n throw new Error(\"No okxwallet found\");\n }\n\n const evmWallet = await getWeb3WalletMethods({\n chain,\n walletProvider: window.okxwallet,\n });\n const address: string = (await window.okxwallet.send(\"eth_requestAccounts\", [])).result[0];\n\n return { ...evmWallet, address };\n }\n\n case Chain.Bitcoin: {\n if (!(window.okxwallet && \"bitcoin\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { Psbt } = await import(\"bitcoinjs-lib\");\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n\n const { bitcoin: wallet } = window.okxwallet;\n const address = (await wallet.connect()).address;\n\n const signer = {\n signTransaction: async (psbt: InstanceType<typeof Psbt>) => {\n const signedPsbt = await wallet.signPsbt(psbt.toHex(), {\n from: address,\n type: \"list\",\n });\n\n return Psbt.fromHex(signedPsbt);\n },\n getAddress: async () => Promise.resolve(address),\n };\n\n const toolbox = await getUtxoToolbox(chain, { signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Cosmos: {\n if (!(window.okxwallet && \"keplr\" in window.okxwallet)) {\n throw new Error(\"No bitcoin okxwallet found\");\n }\n const { keplr: wallet } = window.okxwallet;\n\n await wallet.enable(ChainId.Cosmos);\n const accounts = await wallet.getOfflineSignerOnlyAmino(ChainId.Cosmos).getAccounts();\n if (!accounts?.[0]) throw new Error(\"No cosmos account found\");\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const [{ address }] = accounts;\n const toolbox = getCosmosToolbox(Chain.Cosmos);\n\n return { ...toolbox, address, transfer: cosmosTransfer() };\n }\n\n default:\n throw new Error(`No wallet for chain ${chain}`);\n }\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "0FFA01C45071364064756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "512295FA2983091F64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -0,0 +1,3 @@
1
+ var S={};h(S,{onekeyWallet:()=>_,ONEKEY_WALLET_SUPPORTED_CHAINS:()=>A});module.exports=P(S);var e=require("@swapkit/helpers");async function b(t){switch(t){case e.Chain.Bitcoin:{if(!window.$onekey?.btc)throw new e.SwapKitError({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{Psbt:r}=await import("bitcoinjs-lib"),{getUtxoToolbox:s}=await import("@swapkit/toolboxes/utxo"),{signTransaction:d,getAddress:n,AddressPurpose:l,BitcoinNetworkType:a}=await import("sats-connect"),o="",w=()=>new Promise((i)=>i(window.$onekey?.btc)),m={getProvider:w,payload:{purposes:[l.Payment],message:"Address for receiving and sending payments",network:{type:a.Mainnet}},onFinish:(i)=>{if(i.addresses[0]?.address)o=i.addresses[0].address},onCancel:()=>{throw new e.SwapKitError("wallet_connection_rejected_by_user")}};await n(m);async function p(i){let y,f={getProvider:w,payload:{message:"Sign transaction",network:{type:a.Mainnet},psbtBase64:i.toBase64(),broadcast:!1,inputsToSign:[{address:o,signingIndexes:i.txInputs.map((g,k)=>k)}]},onFinish:(g)=>{y=r.fromBase64(g.psbtBase64)},onCancel:()=>{throw new e.SwapKitError("wallet_connection_rejected_by_user")}};if(await d(f),!y)throw new e.SwapKitError("wallet_onekey_sign_transaction_error");return y}return{...await s(t,{signer:{signTransaction:p,getAddress:()=>Promise.resolve(o)}}),address:o}}case e.Chain.Solana:{if(!window.$onekey?.sol)throw new e.SwapKitError({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{getSolanaToolbox:r}=await import("@swapkit/toolboxes/solana"),s=window.$onekey.sol,d=await s.getAddress();return{...r({signer:s}),address:d}}case e.Chain.Arbitrum:case e.Chain.Avalanche:case e.Chain.Base:case e.Chain.BinanceSmartChain:case e.Chain.Ethereum:case e.Chain.Optimism:case e.Chain.Polygon:{let{getProvider:r,getEvmToolbox:s}=await import("@swapkit/toolboxes/evm");if(!window.$onekey?.ethereum)throw new e.SwapKitError({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{BrowserProvider:d}=await import("ethers"),n=new d(window.$onekey.ethereum,"any"),l=e.SKConfig.get("rpcUrls")[t];await n.send("eth_requestAccounts",[]);let a=await r(t,l),o=await n.getSigner(),w=await o.getAddress(),m=await s(t,{provider:a,signer:o});try{if(t!==e.Chain.Ethereum){let p=m.getNetworkParams();await e.addEVMWalletNetwork(n,p)}}catch(p){throw new e.SwapKitError({errorKey:"wallet_failed_to_add_or_switch_network",info:{chain:t,error:p}})}return{address:w,...e.prepareNetworkSwitch({toolbox:m,chain:t,provider:n})}}default:throw new e.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:t,wallet:e.WalletOption.ONEKEY}})}}var _=e.createWallet({name:"connectOnekeyWallet",walletType:e.WalletOption.ONEKEY,supportedChains:[e.Chain.Arbitrum,e.Chain.Avalanche,e.Chain.Base,e.Chain.BinanceSmartChain,e.Chain.Bitcoin,e.Chain.Ethereum,e.Chain.Optimism,e.Chain.Polygon,e.Chain.Solana],connect:({addChain:t,walletType:r,supportedChains:s})=>async function d(n){if(!window.$onekey)throw new e.SwapKitError({errorKey:"wallet_onekey_not_found",info:{wallet:e.WalletOption.ONEKEY}});let l=e.filterSupportedChains({chains:n,supportedChains:s,walletType:r});return await Promise.all(l.map(async(a)=>{let o=await b(a),w=await o.getAddress()||"F";t({...o,chain:a,address:w,walletType:r})})),!0}}),A=u(_);
2
+
3
+ //# debugId=E175D68272618D3C64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/onekey/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n Chain,\n type NetworkParams,\n SKConfig,\n SwapKitError,\n WalletOption,\n addEVMWalletNetwork,\n createWallet,\n filterSupportedChains,\n prepareNetworkSwitch,\n} from \"@swapkit/helpers\";\nimport type {\n BitcoinProvider,\n GetAddressOptions,\n GetAddressResponse,\n SignTransactionOptions,\n} from \"sats-connect\";\nimport { getWalletSupportedChains } from \"../utils\";\n\nasync function getWalletMethodsForExtension(chain: Chain) {\n switch (chain) {\n case Chain.Bitcoin: {\n if (!window.$onekey?.btc) {\n throw new SwapKitError({\n errorKey: \"wallet_onekey_not_found\",\n info: { chain },\n });\n }\n\n const { Psbt } = await import(\"bitcoinjs-lib\");\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n const {\n signTransaction: satsSignTransaction,\n getAddress,\n AddressPurpose,\n BitcoinNetworkType,\n } = await import(\"sats-connect\");\n\n let address = \"\";\n\n const getProvider: () => Promise<BitcoinProvider | undefined> = () =>\n new Promise((res) => res(window.$onekey?.btc as BitcoinProvider));\n\n const getAddressOptions: GetAddressOptions = {\n getProvider,\n payload: {\n purposes: [AddressPurpose.Payment],\n message: \"Address for receiving and sending payments\",\n network: { type: BitcoinNetworkType.Mainnet },\n },\n onFinish: (response: GetAddressResponse) => {\n if (response.addresses[0]?.address) {\n address = response.addresses[0].address;\n }\n },\n onCancel: () => {\n throw new SwapKitError(\"wallet_connection_rejected_by_user\");\n },\n };\n\n await getAddress(getAddressOptions);\n\n async function signTransaction(psbt: any) {\n let signedPsbt: any;\n const signPsbtOptions: SignTransactionOptions = {\n getProvider,\n payload: {\n message: \"Sign transaction\",\n network: {\n type: BitcoinNetworkType.Mainnet,\n },\n psbtBase64: psbt.toBase64(),\n broadcast: false,\n inputsToSign: [\n {\n address,\n signingIndexes: psbt.txInputs.map((_: any, index: number) => index),\n },\n ],\n },\n onFinish: (response) => {\n signedPsbt = Psbt.fromBase64(response.psbtBase64);\n },\n onCancel: () => {\n throw new SwapKitError(\"wallet_connection_rejected_by_user\");\n },\n };\n\n await satsSignTransaction(signPsbtOptions);\n if (!signedPsbt) throw new SwapKitError(\"wallet_onekey_sign_transaction_error\");\n return signedPsbt;\n }\n\n const signer = {\n signTransaction,\n getAddress: () => Promise.resolve(address),\n };\n\n const toolbox = await getUtxoToolbox(chain, { signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Solana: {\n if (!window.$onekey?.sol) {\n throw new SwapKitError({\n errorKey: \"wallet_onekey_not_found\",\n info: { chain },\n });\n }\n\n const { getSolanaToolbox } = await import(\"@swapkit/toolboxes/solana\");\n\n const signer = window.$onekey.sol;\n const address = await signer.getAddress();\n const toolbox = getSolanaToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Base:\n case Chain.BinanceSmartChain:\n case Chain.Ethereum:\n case Chain.Optimism:\n case Chain.Polygon: {\n const { getProvider, getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n if (!window.$onekey?.ethereum) {\n throw new SwapKitError({\n errorKey: \"wallet_onekey_not_found\",\n info: { chain },\n });\n }\n\n const { BrowserProvider } = await import(\"ethers\");\n const provider = new BrowserProvider(window.$onekey.ethereum, \"any\");\n\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n\n await provider.send(\"eth_requestAccounts\", []);\n const jsonRpcProvider = await getProvider(chain, rpcUrl);\n const signer = await provider.getSigner();\n const address = await signer.getAddress();\n\n const toolbox = await getEvmToolbox(chain, { provider: jsonRpcProvider, signer });\n try {\n if (chain !== Chain.Ethereum) {\n const networkParams = toolbox.getNetworkParams() as NetworkParams;\n\n await addEVMWalletNetwork(provider, networkParams);\n }\n } catch (error) {\n throw new SwapKitError({\n errorKey: \"wallet_failed_to_add_or_switch_network\",\n info: { chain, error },\n });\n }\n\n return {\n address,\n ...prepareNetworkSwitch({ toolbox, chain, provider }),\n };\n }\n\n default:\n throw new SwapKitError({\n errorKey: \"wallet_chain_not_supported\",\n info: { chain, wallet: WalletOption.ONEKEY },\n });\n }\n}\n\nexport const onekeyWallet = createWallet({\n name: \"connectOnekeyWallet\",\n walletType: WalletOption.ONEKEY,\n supportedChains: [\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Solana,\n ],\n connect: ({ addChain, walletType, supportedChains }) =>\n async function connectOnekeyWallet(chains: Chain[]) {\n if (!window.$onekey) {\n throw new SwapKitError({\n errorKey: \"wallet_onekey_not_found\",\n info: { wallet: WalletOption.ONEKEY },\n });\n }\n\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const walletMethods = await getWalletMethodsForExtension(chain);\n\n const address = (await walletMethods.getAddress()) || \"F\";\n\n addChain({ ...walletMethods, chain, address, walletType });\n }),\n );\n\n return true;\n },\n});\n\nexport const ONEKEY_WALLET_SUPPORTED_CHAINS = getWalletSupportedChains(onekeyWallet);\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "E175D68272618D3C64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ import{a as k}from"../../chunk-czhtd6cy.js";import{c as l,d as p}from"../../chunk-p1kdg37m.js";import{Chain as e,SKConfig as b,SwapKitError as r,WalletOption as u,addEVMWalletNetwork as A,createWallet as S,filterSupportedChains as E,prepareNetworkSwitch as O}from"@swapkit/helpers";async function B(t){switch(t){case e.Bitcoin:{if(!window.$onekey?.btc)throw new r({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{Psbt:s}=await import("bitcoinjs-lib"),{getUtxoToolbox:a}=await import("@swapkit/toolboxes/utxo"),{signTransaction:w,getAddress:n,AddressPurpose:m,BitcoinNetworkType:i}=await import("sats-connect"),o="",c=()=>new Promise((d)=>d(window.$onekey?.btc)),g={getProvider:c,payload:{purposes:[m.Payment],message:"Address for receiving and sending payments",network:{type:i.Mainnet}},onFinish:(d)=>{if(d.addresses[0]?.address)o=d.addresses[0].address},onCancel:()=>{throw new r("wallet_connection_rejected_by_user")}};await n(g);async function y(d){let _,P={getProvider:c,payload:{message:"Sign transaction",network:{type:i.Mainnet},psbtBase64:d.toBase64(),broadcast:!1,inputsToSign:[{address:o,signingIndexes:d.txInputs.map((f,h)=>h)}]},onFinish:(f)=>{_=s.fromBase64(f.psbtBase64)},onCancel:()=>{throw new r("wallet_connection_rejected_by_user")}};if(await w(P),!_)throw new r("wallet_onekey_sign_transaction_error");return _}return{...await a(t,{signer:{signTransaction:y,getAddress:()=>Promise.resolve(o)}}),address:o}}case e.Solana:{if(!window.$onekey?.sol)throw new r({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{getSolanaToolbox:s}=await import("@swapkit/toolboxes/solana"),a=window.$onekey.sol,w=await a.getAddress();return{...s({signer:a}),address:w}}case e.Arbitrum:case e.Avalanche:case e.Base:case e.BinanceSmartChain:case e.Ethereum:case e.Optimism:case e.Polygon:{let{getProvider:s,getEvmToolbox:a}=await import("@swapkit/toolboxes/evm");if(!window.$onekey?.ethereum)throw new r({errorKey:"wallet_onekey_not_found",info:{chain:t}});let{BrowserProvider:w}=await import("ethers"),n=new w(window.$onekey.ethereum,"any"),m=b.get("rpcUrls")[t];await n.send("eth_requestAccounts",[]);let i=await s(t,m),o=await n.getSigner(),c=await o.getAddress(),g=await a(t,{provider:i,signer:o});try{if(t!==e.Ethereum){let y=g.getNetworkParams();await A(n,y)}}catch(y){throw new r({errorKey:"wallet_failed_to_add_or_switch_network",info:{chain:t,error:y}})}return{address:c,...O({toolbox:g,chain:t,provider:n})}}default:throw new r({errorKey:"wallet_chain_not_supported",info:{chain:t,wallet:u.ONEKEY}})}}var v=S({name:"connectOnekeyWallet",walletType:u.ONEKEY,supportedChains:[e.Arbitrum,e.Avalanche,e.Base,e.BinanceSmartChain,e.Bitcoin,e.Ethereum,e.Optimism,e.Polygon,e.Solana],connect:({addChain:t,walletType:s,supportedChains:a})=>async function w(n){if(!window.$onekey)throw new r({errorKey:"wallet_onekey_not_found",info:{wallet:u.ONEKEY}});let m=E({chains:n,supportedChains:a,walletType:s});return await Promise.all(m.map(async(i)=>{let o=await B(i),c=await o.getAddress()||"F";t({...o,chain:i,address:c,walletType:s})})),!0}}),N=k(v);export{v as onekeyWallet,N as ONEKEY_WALLET_SUPPORTED_CHAINS};
2
+
3
+ //# debugId=6FE71A965F54F3FD64756E2164756E21