@swapkit/wallets 4.0.0-beta.50 → 4.0.0-beta.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-xwda1ncj.js → chunk-3etn0w20.js} +3 -3
- package/dist/{chunk-xwda1ncj.js.map → chunk-3etn0w20.js.map} +1 -1
- package/dist/{chunk-bnnq9hg1.js → chunk-e674mh4n.js} +3 -3
- package/dist/{chunk-bnnq9hg1.js.map → chunk-e674mh4n.js.map} +1 -1
- package/dist/{chunk-brmp4444.js → chunk-f0qkch7f.js} +1 -1
- package/dist/{chunk-bp34qnvm.js → chunk-h7myvxxm.js} +3 -3
- package/dist/{chunk-bp34qnvm.js.map → chunk-h7myvxxm.js.map} +1 -1
- package/dist/chunk-mvbb9fwb.js +5 -0
- package/dist/chunk-mvbb9fwb.js.map +10 -0
- package/dist/{chunk-10h87ecy.js → chunk-nfas79hz.js} +3 -3
- package/dist/{chunk-10h87ecy.js.map → chunk-nfas79hz.js.map} +1 -1
- package/dist/{chunk-fa0psb24.js → chunk-p2ca0j1v.js} +3 -3
- package/dist/{chunk-fa0psb24.js.map → chunk-p2ca0j1v.js.map} +1 -1
- package/dist/{chunk-a3x125xy.js → chunk-v7ytzdp4.js} +4 -4
- package/dist/{chunk-a3x125xy.js.map → chunk-v7ytzdp4.js.map} +1 -1
- package/dist/chunk-x5n5v0h8.js +4 -0
- package/dist/chunk-x5n5v0h8.js.map +10 -0
- package/dist/src/bitget/index.cjs +2 -2
- package/dist/src/bitget/index.cjs.map +3 -3
- package/dist/src/bitget/index.js +2 -2
- package/dist/src/bitget/index.js.map +3 -3
- package/dist/src/coinbase/index.js +2 -2
- package/dist/src/coinbase/index.js.map +1 -1
- package/dist/src/cosmostation/index.js +2 -2
- package/dist/src/cosmostation/index.js.map +1 -1
- package/dist/src/ctrl/index.cjs +2 -2
- package/dist/src/ctrl/index.cjs.map +4 -4
- package/dist/src/ctrl/index.js +2 -2
- package/dist/src/ctrl/index.js.map +4 -4
- package/dist/src/evm-extensions/index.js +2 -2
- package/dist/src/evm-extensions/index.js.map +1 -1
- package/dist/src/exodus/index.cjs +2 -2
- package/dist/src/exodus/index.cjs.map +3 -3
- package/dist/src/exodus/index.js +2 -2
- package/dist/src/exodus/index.js.map +3 -3
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/keepkey/index.js +2 -2
- package/dist/src/keepkey/index.js.map +1 -1
- package/dist/src/keepkey-bex/index.js +2 -2
- package/dist/src/keepkey-bex/index.js.map +1 -1
- package/dist/src/keplr/index.js +2 -2
- package/dist/src/keplr/index.js.map +1 -1
- package/dist/src/keystore/index.js +2 -2
- package/dist/src/keystore/index.js.map +1 -1
- package/dist/src/ledger/index.cjs +3 -3
- package/dist/src/ledger/index.cjs.map +6 -6
- package/dist/src/ledger/index.js +3 -3
- package/dist/src/ledger/index.js.map +6 -6
- package/dist/src/okx/index.cjs +2 -2
- package/dist/src/okx/index.cjs.map +4 -4
- package/dist/src/okx/index.js +2 -2
- package/dist/src/okx/index.js.map +4 -4
- package/dist/src/onekey/index.cjs +2 -2
- package/dist/src/onekey/index.cjs.map +3 -3
- package/dist/src/onekey/index.js +2 -2
- package/dist/src/onekey/index.js.map +3 -3
- package/dist/src/phantom/index.js +2 -2
- package/dist/src/phantom/index.js.map +1 -1
- package/dist/src/polkadotjs/index.js +2 -2
- package/dist/src/polkadotjs/index.js.map +1 -1
- package/dist/src/radix/index.js +2 -2
- package/dist/src/radix/index.js.map +1 -1
- package/dist/src/talisman/index.js +2 -2
- package/dist/src/talisman/index.js.map +1 -1
- package/dist/src/trezor/index.cjs +2 -2
- package/dist/src/trezor/index.cjs.map +3 -3
- package/dist/src/trezor/index.js +2 -2
- package/dist/src/trezor/index.js.map +3 -3
- package/dist/src/walletconnect/index.cjs +2 -2
- package/dist/src/walletconnect/index.cjs.map +4 -4
- package/dist/src/walletconnect/index.js +2 -2
- package/dist/src/walletconnect/index.js.map +4 -4
- package/dist/src/xaman/index.js +2 -2
- package/dist/src/xaman/index.js.map +1 -1
- package/package.json +3 -3
- package/src/bitget/helpers.ts +7 -4
- package/src/ctrl/index.ts +6 -0
- package/src/ctrl/walletHelpers.ts +3 -0
- package/src/exodus/index.ts +1 -0
- package/src/ledger/clients/evm.ts +6 -0
- package/src/ledger/helpers/getLedgerAddress.ts +3 -1
- package/src/ledger/helpers/getLedgerClient.ts +8 -0
- package/src/ledger/index.ts +5 -1
- package/src/ledger/types.ts +4 -0
- package/src/okx/helpers.ts +7 -4
- package/src/okx/index.ts +3 -0
- package/src/onekey/index.ts +4 -0
- package/src/trezor/index.ts +9 -5
- package/src/walletconnect/constants.ts +2 -0
- package/src/walletconnect/helpers.ts +6 -0
- package/src/walletconnect/index.ts +2 -0
- package/dist/chunk-hj6ccepz.js +0 -5
- package/dist/chunk-hj6ccepz.js.map +0 -10
- package/dist/chunk-xy3yys5z.js +0 -4
- package/dist/chunk-xy3yys5z.js.map +0 -10
- /package/dist/{chunk-brmp4444.js.map → chunk-f0qkch7f.js.map} +0 -0
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"version": 3,
|
|
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/near.ts", "../src/ledger/clients/thorchain/index.ts", "../src/ledger/clients/thorchain/utils.ts", "../src/ledger/clients/tron.ts", "../src/ledger/clients/utxo.ts", "../src/ledger/clients/xrp.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n Chain,\n ChainId,\n type DerivationPathArray,\n FeeOption,\n type GenericTransferParams,\n SKConfig,\n StagenetChain,\n SwapKitError,\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.Near,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Ripple,\n Chain.THORChain,\n Chain.Tron,\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 SwapKitError(\"wallet_ledger_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\")).default;\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 SwapKitError(\"wallet_ledger_invalid_account\");\n if (!assetValue) throw new SwapKitError(\"wallet_ledger_invalid_asset\");\n if (!value) throw new SwapKitError(\"wallet_ledger_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 SwapKitError(\"wallet_ledger_signing_error\");\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 case Chain.Near: {\n const { getNearToolbox } = await import(\"@swapkit/toolboxes/near\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const accountId = await signer.getAddress();\n const toolbox = await getNearToolbox({ signer });\n\n return { ...toolbox, address: accountId };\n }\n\n case Chain.Ripple: {\n const { getRippleToolbox } = await import(\"@swapkit/toolboxes/ripple\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = signer.address;\n const toolbox = await getRippleToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Tron: {\n const { createTronToolbox } = await import(\"@swapkit/toolboxes/tron\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const toolbox = await createTronToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n default:\n throw new SwapKitError(\"wallet_ledger_chain_not_supported\", { chain });\n }\n}\n",
|
|
6
|
-
"import { Chain, SwapKitError, WalletOption } from \"@swapkit/helpers\";\n\nimport type { getNearLedgerClient } from \"../clients/near\";\nimport type { TronLedger } from \"../clients/tron\";\nimport type { XRPLedger } from \"../clients/xrp\";\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 T extends (typeof LEDGER_SUPPORTED_CHAINS)[number],\n L extends Awaited<ReturnType<typeof getLedgerClient<T>>>,\n>({\n chain,\n ledgerClient,\n}: {\n chain: T;\n ledgerClient: L;\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\n case Chain.Near: {\n return await (ledgerClient as Awaited<ReturnType<typeof getNearLedgerClient>>).getAddress();\n }\n\n case Chain.Ripple: {\n return (ledgerClient as Awaited<ReturnType<typeof XRPLedger>>).address;\n }\n\n case Chain.Tron: {\n return (ledgerClient as Awaited<ReturnType<typeof TronLedger>>).getAddress();\n }\n\n default:\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n }\n};\n",
|
|
7
|
-
"import {\n Chain,\n type DerivationPathArray,\n type EVMChain,\n SwapKitError,\n WalletOption,\n} 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 { getNearLedgerClient } from \"../clients/near\";\nimport { THORChainLedger } from \"../clients/thorchain\";\nimport { TronLedger } from \"../clients/tron\";\nimport {\n BitcoinCashLedger,\n BitcoinLedger,\n DashLedger,\n DogecoinLedger,\n LitecoinLedger,\n} from \"../clients/utxo\";\nimport { XRPLedger } from \"../clients/xrp\";\nimport { getLedgerTransport } from \"./getLedgerTransport\";\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.Near]: Awaited<ReturnType<typeof getNearLedgerClient>>;\n [Chain.Optimism]: ReturnType<typeof OptimismLedger>;\n [Chain.Polygon]: ReturnType<typeof PolygonLedger>;\n [Chain.Ripple]: ReturnType<typeof XRPLedger>;\n [Chain.THORChain]: THORChainLedger;\n [Chain.Tron]: ReturnType<typeof TronLedger>;\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 const { match } = await import(\"ts-pattern\");\n\n return match(chain as LedgerSupportedChain)\n .returnType<Promise<LedgerSignerMap[T]>>()\n .with(Chain.THORChain, () =>\n Promise.resolve(new THORChainLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Cosmos, () =>\n Promise.resolve(new CosmosLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Bitcoin, () => Promise.resolve(BitcoinLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.BitcoinCash, () =>\n Promise.resolve(BitcoinCashLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Dash, () => Promise.resolve(DashLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Dogecoin, () =>\n Promise.resolve(DogecoinLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Litecoin, () =>\n Promise.resolve(LitecoinLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Ripple, () => Promise.resolve(XRPLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Tron, () => Promise.resolve(TronLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Near, async () => {\n const transport = await getLedgerTransport();\n return getNearLedgerClient(transport, derivationPath) as unknown as LedgerSignerMap[T];\n })\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Ethereum,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Base,\n async () => {\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n const params = { provider: await getProvider(chain as EVMChain), derivationPath };\n\n return match(chain as Chain)\n .with(\n Chain.BinanceSmartChain,\n () => BinanceSmartChainLedger(params) as LedgerSignerMap[T],\n )\n .with(Chain.Avalanche, () => AvalancheLedger(params) as LedgerSignerMap[T])\n .with(Chain.Arbitrum, () => ArbitrumLedger(params) as LedgerSignerMap[T])\n .with(Chain.Optimism, () => OptimismLedger(params) as LedgerSignerMap[T])\n .with(Chain.Polygon, () => PolygonLedger(params) as LedgerSignerMap[T])\n .with(Chain.Base, () => BaseLedger(params) as LedgerSignerMap[T])\n .otherwise(() => EthereumLedger(params) as LedgerSignerMap[T]);\n },\n )\n .otherwise(() => {\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n });\n};\n",
|
|
5
|
+
"import {\n Chain,\n ChainId,\n type DerivationPathArray,\n FeeOption,\n type GenericTransferParams,\n SKConfig,\n StagenetChain,\n SwapKitError,\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.Aurora,\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.Gnosis,\n Chain.Litecoin,\n Chain.Near,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Ripple,\n Chain.THORChain,\n Chain.Tron,\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 case Chain.Aurora:\n case Chain.Gnosis: {\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 SwapKitError(\"wallet_ledger_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\")).default;\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 SwapKitError(\"wallet_ledger_invalid_account\");\n if (!assetValue) throw new SwapKitError(\"wallet_ledger_invalid_asset\");\n if (!value) throw new SwapKitError(\"wallet_ledger_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 SwapKitError(\"wallet_ledger_signing_error\");\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 case Chain.Near: {\n const { getNearToolbox } = await import(\"@swapkit/toolboxes/near\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const accountId = await signer.getAddress();\n const toolbox = await getNearToolbox({ signer });\n\n return { ...toolbox, address: accountId };\n }\n\n case Chain.Ripple: {\n const { getRippleToolbox } = await import(\"@swapkit/toolboxes/ripple\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = signer.address;\n const toolbox = await getRippleToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Tron: {\n const { createTronToolbox } = await import(\"@swapkit/toolboxes/tron\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const toolbox = await createTronToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n default:\n throw new SwapKitError(\"wallet_ledger_chain_not_supported\", { chain });\n }\n}\n",
|
|
6
|
+
"import { Chain, SwapKitError, WalletOption } from \"@swapkit/helpers\";\n\nimport type { getNearLedgerClient } from \"../clients/near\";\nimport type { TronLedger } from \"../clients/tron\";\nimport type { XRPLedger } from \"../clients/xrp\";\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 T extends (typeof LEDGER_SUPPORTED_CHAINS)[number],\n L extends Awaited<ReturnType<typeof getLedgerClient<T>>>,\n>({\n chain,\n ledgerClient,\n}: {\n chain: T;\n ledgerClient: L;\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 case Chain.Aurora:\n case Chain.Gnosis: {\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\n case Chain.Near: {\n return await (ledgerClient as Awaited<ReturnType<typeof getNearLedgerClient>>).getAddress();\n }\n\n case Chain.Ripple: {\n return (ledgerClient as Awaited<ReturnType<typeof XRPLedger>>).address;\n }\n\n case Chain.Tron: {\n return (ledgerClient as Awaited<ReturnType<typeof TronLedger>>).getAddress();\n }\n\n default:\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n }\n};\n",
|
|
7
|
+
"import {\n Chain,\n type DerivationPathArray,\n type EVMChain,\n SwapKitError,\n WalletOption,\n} from \"@swapkit/helpers\";\n\nimport { CosmosLedger } from \"../clients/cosmos\";\nimport {\n ArbitrumLedger,\n AuroraLedger,\n AvalancheLedger,\n BaseLedger,\n BinanceSmartChainLedger,\n EthereumLedger,\n GnosisLedger,\n OptimismLedger,\n PolygonLedger,\n} from \"../clients/evm\";\nimport { getNearLedgerClient } from \"../clients/near\";\nimport { THORChainLedger } from \"../clients/thorchain\";\nimport { TronLedger } from \"../clients/tron\";\nimport {\n BitcoinCashLedger,\n BitcoinLedger,\n DashLedger,\n DogecoinLedger,\n LitecoinLedger,\n} from \"../clients/utxo\";\nimport { XRPLedger } from \"../clients/xrp\";\nimport { getLedgerTransport } from \"./getLedgerTransport\";\n\ntype LedgerSignerMap = {\n [Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;\n [Chain.Aurora]: ReturnType<typeof AuroraLedger>;\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.Gnosis]: ReturnType<typeof GnosisLedger>;\n [Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;\n [Chain.Near]: Awaited<ReturnType<typeof getNearLedgerClient>>;\n [Chain.Optimism]: ReturnType<typeof OptimismLedger>;\n [Chain.Polygon]: ReturnType<typeof PolygonLedger>;\n [Chain.Ripple]: ReturnType<typeof XRPLedger>;\n [Chain.THORChain]: THORChainLedger;\n [Chain.Tron]: ReturnType<typeof TronLedger>;\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 const { match } = await import(\"ts-pattern\");\n\n return match(chain as LedgerSupportedChain)\n .returnType<Promise<LedgerSignerMap[T]>>()\n .with(Chain.THORChain, () =>\n Promise.resolve(new THORChainLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Cosmos, () =>\n Promise.resolve(new CosmosLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Bitcoin, () => Promise.resolve(BitcoinLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.BitcoinCash, () =>\n Promise.resolve(BitcoinCashLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Dash, () => Promise.resolve(DashLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Dogecoin, () =>\n Promise.resolve(DogecoinLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Litecoin, () =>\n Promise.resolve(LitecoinLedger(derivationPath) as LedgerSignerMap[T]),\n )\n .with(Chain.Ripple, () => Promise.resolve(XRPLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Tron, () => Promise.resolve(TronLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Near, async () => {\n const transport = await getLedgerTransport();\n return getNearLedgerClient(transport, derivationPath) as unknown as LedgerSignerMap[T];\n })\n .with(\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Base,\n async () => {\n const { getProvider } = await import(\"@swapkit/toolboxes/evm\");\n const params = { provider: await getProvider(chain as EVMChain), derivationPath };\n\n return match(chain as Chain)\n .with(\n Chain.BinanceSmartChain,\n () => BinanceSmartChainLedger(params) as LedgerSignerMap[T],\n )\n .with(Chain.Avalanche, () => AvalancheLedger(params) as LedgerSignerMap[T])\n .with(Chain.Arbitrum, () => ArbitrumLedger(params) as LedgerSignerMap[T])\n .with(Chain.Optimism, () => OptimismLedger(params) as LedgerSignerMap[T])\n .with(Chain.Polygon, () => PolygonLedger(params) as LedgerSignerMap[T])\n .with(Chain.Base, () => BaseLedger(params) as LedgerSignerMap[T])\n .with(Chain.Aurora, () => AuroraLedger(params) as LedgerSignerMap[T])\n .with(Chain.Gnosis, () => GnosisLedger(params) as LedgerSignerMap[T])\n .otherwise(() => EthereumLedger(params) as LedgerSignerMap[T]);\n },\n )\n .otherwise(() => {\n throw new SwapKitError(\"wallet_chain_not_supported\", { wallet: WalletOption.LEDGER, chain });\n });\n};\n",
|
|
8
8
|
"import {\n type DerivationPathArray,\n NetworkDerivationPath,\n SwapKitError,\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 SwapKitError(\"wallet_ledger_pubkey_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 SwapKitError(\"wallet_ledger_address_not_found\", { address: signerAddress });\n }\n\n const { encodeSecp256k1Signature, serializeSignDoc } = (await import(\"@cosmjs/amino\")).default;\n const { Secp256k1Signature } = (await import(\"@cosmjs/crypto\")).default;\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 CosmosApp = (await import(\"@ledgerhq/hw-app-cosmos\")).default;\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 break;\n }\n }\n };\n}\n",
|
|
10
10
|
"import type Transport from \"@ledgerhq/hw-transport\";\nimport { SwapKitError } from \"@swapkit/helpers\";\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 SwapKitError(\"wallet_ledger_transport_not_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 SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"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",
|
|
11
11
|
"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
12
|
"import { SwapKitError } from \"@swapkit/helpers\";\nimport {\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 SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Path too short\" });\n }\n if (path.length > 10) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Path too long\" });\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 SwapKitError(\"wallet_ledger_invalid_params\", {\n reason: \"decompressed public key length should be 65 bytes\",\n });\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 SwapKitError(\"wallet_ledger_invalid_params\", {\n reason: \"Path must be exactly 5 elements\",\n });\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",
|
|
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({\n filters: [{ vendorId: ledgerUSBVendorId }],\n });\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 Transport = (await import(\"@ledgerhq/hw-transport-webusb\")).default;\n const isSupported = await Transport.isSupported();\n if (!isSupported) throw new SwapKitError(\"wallet_ledger_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 SwapKitError,\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 EthereumApp = (await import(\"@ledgerhq/hw-app-eth\")).default;\n\n this.ledgerApp = new EthereumApp(transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new SwapKitError(\"wallet_ledger_failed_to_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 SwapKitError(\"wallet_ledger_signing_error\");\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 SwapKitError(\"wallet_ledger_no_provider\");\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 SwapKitError(\"wallet_ledger_method_not_supported\", { method: \"signTypedData\" });\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 SwapKitError(\"wallet_ledger_signing_error\");\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 SwapKitError,\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 EthereumApp = (await import(\"@ledgerhq/hw-app-eth\")).default;\n\n this.ledgerApp = new EthereumApp(transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new SwapKitError(\"wallet_ledger_failed_to_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 SwapKitError(\"wallet_ledger_signing_error\");\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 SwapKitError(\"wallet_ledger_no_provider\");\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 SwapKitError(\"wallet_ledger_method_not_supported\", { method: \"signTypedData\" });\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 SwapKitError(\"wallet_ledger_signing_error\");\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\nexport const AuroraLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Aurora, provider, derivationPath });\n\nexport const GnosisLedger = ({ provider, derivationPath }: LedgerParams) =>\n new EVMLedgerInterface({ chainId: ChainId.Gnosis, provider, derivationPath });\n",
|
|
15
15
|
"import type Transport from \"@ledgerhq/hw-transport\";\nimport type { DerivationPathArray } from \"@swapkit/helpers\";\nimport type { NearSigner } from \"@swapkit/toolboxes/near\";\nimport type { SignedTransaction, Transaction } from \"near-api-js/lib/transaction\";\n\nexport async function getNearLedgerClient(\n transport: Transport,\n derivationPath?: DerivationPathArray,\n) {\n const Near = await import(\"@ledgerhq/hw-app-near\");\n const { Chain, DerivationPath, derivationPathToString, SwapKitError } = await import(\n \"@swapkit/helpers\"\n );\n const nearApp = new Near.default(transport);\n\n // NEAR uses m/44'/397'/0'/0'/0' by default\n const path = derivationPath ? derivationPathToString(derivationPath) : DerivationPath[Chain.Near];\n\n // Get address and public key from Ledger\n const { address, publicKey: pubKeyHex } = await nearApp.getAddress(path);\n\n const signer = {\n async getPublicKey() {\n const { utils } = await import(\"near-api-js\");\n // Convert hex public key to NEAR PublicKey format\n return utils.PublicKey.fromString(`ed25519:${pubKeyHex}`);\n },\n\n signNep413Message(\n _message: string,\n _accountId: string,\n _recipient: string,\n _nonce: Uint8Array,\n _callbackUrl?: string,\n ) {\n // Most NEAR Ledger apps don't support arbitrary message signing\n return Promise.reject(\n new SwapKitError(\"wallet_ledger_method_not_supported\", {\n wallet: \"Ledger\",\n method: \"signNep413Message\",\n }),\n );\n },\n\n getAddress() {\n return Promise.resolve(address);\n },\n\n async signTransaction(transaction: Transaction) {\n const { Signature, SignedTransaction } = await import(\"near-api-js/lib/transaction\");\n try {\n const signatureArray = await nearApp.signTransaction(transaction.encode(), path);\n if (!signatureArray) {\n throw new Error(\"Signature undefined\");\n }\n\n const signature = new Signature({\n keyType: 0,\n data: signatureArray,\n });\n\n const signedTransaction = new SignedTransaction({ transaction, signature });\n\n return [signatureArray, signedTransaction] as [\n Uint8Array<ArrayBufferLike>,\n SignedTransaction,\n ];\n } catch (error) {\n throw new SwapKitError(\"wallet_ledger_signing_error\", {\n error,\n });\n }\n },\n\n signDelegateAction(_delegateAction: any) {\n return Promise.reject(\n new SwapKitError(\"wallet_ledger_method_not_supported\", {\n wallet: \"Ledger\",\n method: \"signDelegateAction\",\n }),\n );\n },\n };\n\n return signer as NearSigner;\n}\n",
|
|
16
16
|
"import { base64 } from \"@scure/base\";\nimport { type DerivationPathArray, NetworkDerivationPath, SwapKitError } 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 SwapKitError(\"wallet_ledger_pubkey_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 SwapKitError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return getSignature(signature);\n };\n}\n",
|
|
17
17
|
"import { base64 } from \"@scure/base\";\nimport { SwapKitError } from \"@swapkit/helpers\";\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 SwapKitError(\"wallet_ledger_invalid_signature\", { reason: \"Too short\" });\n }\n if (signatureArray[0] !== 0x30) {\n throw new SwapKitError(\"wallet_ledger_invalid_signature\", {\n reason: \"TLV encoding: expected first byte 0x30\",\n });\n }\n if (signatureArray[1] + 2 !== signatureArray.length) {\n throw new SwapKitError(\"wallet_ledger_invalid_signature\", {\n reason: \"signature length does not match TLV\",\n });\n }\n if (signatureArray[2] !== 0x02) {\n throw new SwapKitError(\"wallet_ledger_invalid_signature\", {\n reason: \"TLV encoding: expected length type 0x02\",\n });\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 SwapKitError(\"wallet_ledger_invalid_signature\", { reason: \"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 SwapKitError(\"wallet_ledger_invalid_signature\", {\n reason: \"TLV encoding: expected length type 0x02 for s\",\n });\n }\n\n const sLength = signatureArray[rLength + 5];\n\n if (4 + rLength + 2 + sLength !== signatureArray.length) {\n throw new SwapKitError(\"wallet_ledger_invalid_signature\", {\n reason: \"TLV byte lengths do not match message length\",\n });\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 SwapKitError(\"wallet_ledger_invalid_signature\", { reason: \"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 SwapKitError(\"wallet_ledger_invalid_signature\", { reason: \"must be 32 bytes each\" });\n }\n\n return base64.encode(Buffer.concat([rSignature, sSignature]));\n};\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"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, Transaction } 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 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 BitcoinApp = (await import(\"@ledgerhq/hw-app-btc\")).default;\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 BitcoinApp = (await import(\"@ledgerhq/hw-app-btc\")).default;\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",
|
|
20
20
|
"import type Xrp from \"@ledgerhq/hw-app-xrp\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport {\n Chain,\n type DerivationPathArray,\n NetworkDerivationPath,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"@swapkit/toolboxes/ripple\";\nimport { encode } from \"ripple-binary-codec\";\nimport type { Payment } from \"xrpl\";\nimport { getLedgerTransport } from \"../helpers\";\n\nconst TF_FULLY_CANONICAL_SIG = 2147483648;\n\nfunction cleanTransactionObject(obj: Record<string, any>) {\n const cleaned: Record<string, any> = {};\n for (const key in obj) {\n if (obj[key] !== null && obj[key] !== undefined) {\n cleaned[key] = obj[key];\n }\n }\n return cleaned;\n}\n\nasync function establishConnection(transport: Transport) {\n const { default: Xrp } = await import(\"@ledgerhq/hw-app-xrp\");\n return new Xrp(transport);\n}\n\nfunction fetchAddressAndPublicKey({\n instance,\n derivationPath,\n}: { instance: Xrp; derivationPath: string }) {\n return instance.getAddress(derivationPath);\n}\n\nexport const XRPLedger = async (derivationPath?: DerivationPathArray) => {\n const path = derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Ripple]);\n const transport = await getLedgerTransport();\n const xrpInstance = await establishConnection(transport);\n\n const { address, publicKey } = await fetchAddressAndPublicKey({\n instance: xrpInstance,\n derivationPath: path,\n });\n\n async function sign(transaction: Payment | Transaction) {\n const { hashes } = await import(\"@swapkit/toolboxes/ripple\");\n const cleanedTxWithPubKey = cleanTransactionObject(transaction);\n const transactionJSON = {\n ...cleanedTxWithPubKey,\n Flags: transaction.Flags || TF_FULLY_CANONICAL_SIG,\n SigningPubKey: publicKey.toUpperCase(),\n };\n\n const transactionToSignOnLedger = encode(transactionJSON);\n const txnSignature = await xrpInstance.signTransaction(path, transactionToSignOnLedger);\n const tx_blob = encode({ ...transactionJSON, TxnSignature: txnSignature });\n const hash = hashes.hashSignedTx(tx_blob);\n\n return { tx_blob, hash };\n }\n\n return { address, sign };\n};\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "26FDAAABE74698C164756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
package/dist/src/ledger/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{F as k0}from"../../chunk-a3x125xy.js";import{H as W,I as J}from"../../chunk-fa0psb24.js";import{Chain as F,ChainId as Am,FeeOption as Pm,SKConfig as O0,StagenetChain as Im,SwapKitError as E,WalletOption as b0,createWallet as Sm,filterSupportedChains as Vm}from"@swapkit/helpers";import{Chain as M,SwapKitError as mm,WalletOption as Lm}from"@swapkit/helpers";var P=async({chain:m,ledgerClient:L})=>{if(!L)return"";switch(m){case M.Cosmos:case M.THORChain:return L.connect();case M.Ethereum:case M.BinanceSmartChain:case M.Avalanche:case M.Polygon:case M.Arbitrum:case M.Optimism:case M.Base:return L.getAddress();case M.Bitcoin:case M.BitcoinCash:case M.Dash:case M.Dogecoin:case M.Litecoin:{let y=L;await y.connect();let O=await y.getAddress();return m===M.BitcoinCash?O.replace("bitcoincash:",""):O}case M.Near:return await L.getAddress();case M.Ripple:return L.address;case M.Tron:return L.getAddress();default:throw new mm("wallet_chain_not_supported",{wallet:Lm.LEDGER,chain:m})}};import{Chain as j,SwapKitError as qm,WalletOption as lm}from"@swapkit/helpers";import{NetworkDerivationPath as Xm,SwapKitError as Q0,derivationPathToString as Bm}from"@swapkit/helpers";import{LedgerErrorCode as r,NetworkDerivationPath as Tm,SwapKitError as m0}from"@swapkit/helpers";import{SwapKitError as M0}from"@swapkit/helpers";var V=85,t=250;var I={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},u={INIT:0,ADD:1,LAST:2},p={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},K={JSON:0},w={NoError:36864},F0={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",36864:"No errors",36865:"Device is busy",26626:"Error deriving keys",25600:"Execution Error",26368:"Wrong Length",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error"};function H(m){if(m in F0)return F0[m];return`Unknown Status Code: ${m}`}function ym(m){return typeof m==="object"&&m!==null&&!Array.isArray(m)&&!(m instanceof Date)}function C(m){if(m){if(ym(m)){if(Object.prototype.hasOwnProperty.call(m,"statusCode"))return{return_code:m.statusCode,error_message:H(m.statusCode)};if(Object.prototype.hasOwnProperty.call(m,"return_code")&&Object.prototype.hasOwnProperty.call(m,"error_message"))return m}return{return_code:65535,error_message:m.toString()}}return{return_code:65535,error_message:m.toString()}}async function a(m){return m.send(85,I.GET_VERSION,0,0).then((L)=>{let y=L.slice(-2),O=y[0]*256+y[1],_=0;if(L.length>=9)_=(L[5]<<24)+(L[6]<<16)+(L[7]<<8)+(L[8]<<0);return{return_code:O,error_message:H(O),test_mode:L[0]!==0,major:L[1],minor:L[2],patch:L[3],device_locked:L[4]===1,target_id:_.toString(16)}},C)}import{SwapKitError as h}from"@swapkit/helpers";function R0(m){if(m==null||m.length<3)throw new h("wallet_ledger_invalid_params",{reason:"Path too short"});if(m.length>10)throw new h("wallet_ledger_invalid_params",{reason:"Path too long"});let L=Buffer.alloc(1+4*m.length);L.writeUInt8(m.length,0);for(let y=0;y<m.length;y+=1){let O=m[y]||0;if(y<3)O|=2147483648;L.writeInt32LE(O,1+y*4)}return L}async function s(m,L,y,O,_=K.JSON){return m.transport.send(V,I.SIGN_SECP256K1,L,_,O,[w.NoError,27012,27264]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=H(X);if(X===27264||X===27012)G=`${G} : ${T.slice(0,T.length-2).toString("ascii")}`;let R=null;if(T.length>2)R=T.slice(0,T.length-2);return{signature:R,return_code:X,error_message:G}},C)}function _m(m){if(m.length!==65)throw new h("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let L=m.slice(33,65),y=Buffer.from([2+(L[L.length-1]&1)]);return Buffer.concat([y,m.slice(1,33)])}async function W0(m,L){return m.transport.send(V,I.INS_PUBLIC_KEY_SECP256K1,0,0,L,[w.NoError]).then((y)=>{let O=y.slice(-2),_=O[0]*256+O[1],T=Buffer.from(y.slice(0,65));return{pk:T,compressed_pk:_m(T),return_code:_,error_message:H(_)}},C)}function J0(m){if(!m||m.length!==5)throw new h("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let L=Buffer.alloc(20);return L.writeUInt32LE(2147483648+m[0],0),L.writeUInt32LE(2147483648+m[1],4),L.writeUInt32LE(2147483648+m[2],8),L.writeUInt32LE(m[3],12),L.writeUInt32LE(m[4],16),L}function $0(m,L,y,O,_=K.JSON){let T=u.ADD;if(L===1)T=u.INIT;if(L===y)T=u.LAST;return s(m,T,0,O,_)}async function j0(m,L){return m.transport.send(V,I.GET_ADDR_SECP256K1,0,0,L,[w.NoError]).then((y)=>{let O=y.slice(-2),_=O[0]*256+O[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(y.slice(0,33)),return_code:_,error_message:H(_)}},C)}class b{transport;versionResponse;constructor(m){if(!m)throw new M0("wallet_ledger_transport_not_defined");this.transport=m}static serializeHRP(m){if(m==null||m.length<3||m.length>83)throw new M0("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let L=Buffer.alloc(1+m.length);return L.writeUInt8(m.length,0),L.write(m,1),L}async serializePath(m){if(this.versionResponse=await a(this.transport),this.versionResponse.return_code!==w.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return R0(m);case 2:return J0(m);default:return Buffer.alloc(0)}}async signGetChunks(m,L){let y=await this.serializePath(m),O=[];O.push(y);for(let _=0;_<L.length;_+=t){let T=_+t;if(_>L.length)T=L.length;O.push(L.slice(_,T))}return O}async getVersion(){try{return this.versionResponse=await a(this.transport),this.versionResponse}catch(m){return C(m)}}async appInfo(){return this.transport.send(176,1,0,0).then((m)=>{let L=m.slice(-2),y=L[0]*256+L[1],O="",_="",T=0,B=0;if(m[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let X=m[1];O=m.slice(2,2+X).toString("ascii");let G=2+X,R=m[G];G+=1,_=m.slice(G,G+R).toString("ascii"),G+=R;let $=m[G];return G+=1,T=$,B=m[G],{return_code:y,error_message:H(y),appName:O,appVersion:_,flagLen:T,flagsValue:B,flag_recovery:(B&1)!==0,flag_signed_mcu_code:(B&2)!==0,flag_onboarded:(B&4)!==0,flag_pin_validated:(B&128)!==0}},C)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[w.NoError,28160]).then((m)=>{let L=m.slice(-2),y=L[0]*256+L[1];if(y===28160)return{return_code:y,error_message:"This command is only available in the Dashboard"};let O=m.slice(0,4).toString("hex"),_=4,T=m[_];_+=1;let B=m.slice(_,_+T).toString();_+=T;let X=m[_];_+=1;let G=m.slice(_,_+X).toString("hex");_+=X;let R=m[_];_+=1;let $=m.slice(_,_+R);if($[R-1]===0)$=m.slice(_,_+R-1);let Z=$.toString();return{return_code:y,error_message:H(y),targetId:O,seVersion:B,flag:G,mcuVersion:Z}},C)}async publicKey(m){try{let L=await this.serializePath(m);switch(this.versionResponse.major){case 1:return W0(this,L);case 2:{let y=Buffer.concat([b.serializeHRP("thor"),L]);return j0(this,y)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(L){return C(L)}}async getAddressAndPubKey(m,L,y=!1){return this.serializePath(m).then((O)=>{let _=Buffer.concat([b.serializeHRP(L),O]);return this.transport.send(V,I.GET_ADDR_SECP256K1,y?p.SHOW_ADDRESS_IN_DEVICE:p.ONLY_RETRIEVE,0,_,[w.NoError]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=Buffer.from(T.slice(0,33));return{bech32_address:Buffer.from(T.slice(33,-2)).toString(),compressed_pk:G,return_code:X,error_message:H(X)}},C)}).catch((O)=>C(O))}showAddressAndPubKey(m,L){return this.getAddressAndPubKey(m,L,!0)}signSendChunk(m,L,y,O=K.JSON){switch(this.versionResponse.major){case 1:return s(this,m,L,y,O);case 2:return $0(this,m,L,y,O);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(m,L,y=K.JSON){let O=Buffer.from(L),_=[],T;try{_=await this.signGetChunks(m,O),T=await this.signSendChunk(1,_.length,_[0],y)}catch(X){C(X)}let B={return_code:T.return_code,error_message:T.error_message,signature:null};for(let X=1;X<_.length;X+=1)if(B=await this.signSendChunk(1+X,_.length,_[X],y),B.return_code!==w.NoError)break;return{return_code:B.return_code,error_message:B.error_message,signature:B.signature}}}import{SwapKitError as d}from"@swapkit/helpers";var e=()=>navigator?.usb,Om=async()=>{let m=e();if(typeof m?.getDevices!=="function")return[];let{ledgerUSBVendorId:L}=await import("@ledgerhq/devices"),O=(await m?.getDevices()).filter((_)=>_.vendorId===L);if(O.length>0)return O[0];return m?.requestDevice({filters:[{vendorId:L}]})},Y=async()=>{let m=await Om();if(!m)throw new d("wallet_ledger_device_not_found");if(await m.open(),m.configuration===null)await m.selectConfiguration(1);try{await m.reset()}catch{}let L=m.configurations[0].interfaces.find(({alternates:X})=>X.some(({interfaceClass:G})=>G===255));if(!L)throw await m.close(),new d("wallet_ledger_connection_error");try{await m.claimInterface(L.interfaceNumber)}catch(X){throw await m.close(),new d("wallet_ledger_connection_claimed",X)}let y=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await y.isSupported())throw new d("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:_}=await import("@ledgerhq/errors"),T=new y(m,L.interfaceNumber),B=(X)=>{if(m===X.device)e()?.removeEventListener("disconnect",B),T._emitDisconnect(new _)};return e()?.addEventListener("disconnect",B),T};class k{ledgerTimeout=50000;derivationPath=Tm.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(m=!1)=>{if(!m&&this.transport&&this.ledgerApp)return;try{switch(this.transport=m||!this.transport?await Y():this.transport,this.chain){case"thor":{this.ledgerApp=m||!this.ledgerApp?new b(this.transport):this.ledgerApp;break}case"cosmos":{let L=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=m||!this.ledgerApp?new L(this.transport):this.ledgerApp}}return this.ledgerApp}catch(L){throw new m0("wallet_ledger_connection_error",L)}};validateResponse=(m,L)=>{switch(m){case r.NoError:return;case r.LockedDevice:throw new m0("wallet_ledger_device_locked",{message:`Ledger is locked: ${L}`});case r.TC_NotFound:throw new m0("wallet_ledger_device_not_found");default:break}}}class L0 extends k{pubKey=null;derivationPath;constructor(m=Xm.GAIA){super();this.chain="cosmos",this.derivationPath=Bm(m)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:m,address:L}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(m,"hex").toString("base64"),L};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(m,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:O,signature:_}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new Q0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,O),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:_}]};signAmino=async(m,L)=>{await this.checkOrCreateTransportAndLedger(!0);let y=await this.getAccounts();if(y.findIndex(($)=>$.address===m)===-1)throw new Q0("wallet_ledger_address_not_found",{address:m});let{encodeSecp256k1Signature:_,serializeSignDoc:T}=(await import("@cosmjs/amino")).default,{Secp256k1Signature:B}=(await import("@cosmjs/crypto")).default,X=T(L),G=await this.ledgerApp.sign(this.derivationPath,X);this.validateResponse(G.return_code,G.error_message);let R=B.fromDer(G.signature).toFixedLength();return{signed:L,signature:_(y[0].pubkey,R)}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.getAddressAndPubKey();return[{address:m.address,algo:"secp256k1",pubkey:Buffer.from(m.publicKey,"hex")}]}}import{ChainId as D,NetworkDerivationPath as Gm,SwapKitError as x,derivationPathToString as Fm}from"@swapkit/helpers";import{AbstractSigner as Rm}from"ethers";class z extends Rm{chainId=D.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:m,derivationPath:L=Gm.OP,chainId:y=D.Optimism}){super(m);this.chainId=y||D.Ethereum,this.derivationPath=typeof L==="string"?L:Fm(L),Object.defineProperty(this,"provider",{enumerable:!0,value:m||null,writable:!1})}connect=(m)=>new z({provider:m,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let m=await Y(),L=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new L(m)};getAddress=async()=>{let m=await this.getAddressAndPubKey();if(!m)throw new x("wallet_ledger_failed_to_get_address");return m.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(m)=>{let{Signature:L}=await import("ethers");await this.createTransportAndLedger();let y=await this.ledgerApp?.signPersonalMessage(this.derivationPath,m);if(!y)throw new x("wallet_ledger_signing_error");return y.r=`0x${y.r}`,y.s=`0x${y.s}`,L.from(y).serialized};sendTransaction=async(m)=>{if(!this.provider)throw new x("wallet_ledger_no_provider");let L=await this.signTransaction(m);return await this.provider.broadcastTransaction(L)};signTypedData(){throw new x("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(m)=>{let{Transaction:L}=await import("ethers");await this.createTransportAndLedger();let y=await this.provider?.getTransactionCount(m.from||await this.getAddress()),O={chainId:m.chainId||this.chainId,data:m.data,gasLimit:m.gasLimit,...m.gasPrice&&{gasPrice:m.gasPrice},...!m.gasPrice&&m.maxFeePerGas&&{maxFeePerGas:m.maxFeePerGas,maxPriorityFeePerGas:m.maxPriorityFeePerGas},nonce:m.nonce!==void 0?Number((m.nonce||y||0).toString()):y,to:m.to?.toString(),value:m.value,type:m.type&&!Number.isNaN(m.type)?m.type:m.maxFeePerGas?2:0},_=L.from(O).unsignedSerialized.slice(2),{ledgerService:T}=await import("@ledgerhq/hw-app-eth"),B=await T.resolveTransaction(_,{},{externalPlugins:!0,erc20:!0}),X=await this.ledgerApp?.signTransaction(this.derivationPath,_,B);if(!X)throw new x("wallet_ledger_signing_error");let{r:G,s:R,v:$}=X;return L.from({...O,signature:{v:Number(BigInt($)),r:`0x${G}`,s:`0x${R}`}}).serialized}}var Y0=({provider:m,derivationPath:L})=>new z({chainId:D.Ethereum,provider:m,derivationPath:L}),Z0=({provider:m,derivationPath:L})=>new z({chainId:D.Avalanche,provider:m,derivationPath:L}),C0=({provider:m,derivationPath:L})=>new z({chainId:D.BinanceSmartChain,provider:m,derivationPath:L}),N0=({provider:m,derivationPath:L})=>new z({chainId:D.Arbitrum,provider:m,derivationPath:L}),U0=({provider:m,derivationPath:L})=>new z({chainId:D.Polygon,provider:m,derivationPath:L}),H0=({provider:m,derivationPath:L})=>new z({chainId:D.Optimism,provider:m,derivationPath:L}),D0=({provider:m,derivationPath:L})=>new z({chainId:D.Base,provider:m,derivationPath:L});async function f0(m,L){let y=await import("@ledgerhq/hw-app-near"),{Chain:O,DerivationPath:_,derivationPathToString:T,SwapKitError:B}=await import("@swapkit/helpers"),X=new y.default(m),G=L?T(L):_[O.Near],{address:R,publicKey:$}=await X.getAddress(G);return{async getPublicKey(){let{utils:Q}=await import("near-api-js");return Q.PublicKey.fromString(`ed25519:${$}`)},signNep413Message(Q,N,f,U,S){return Promise.reject(new B("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signNep413Message"}))},getAddress(){return Promise.resolve(R)},async signTransaction(Q){let{Signature:N,SignedTransaction:f}=await import("near-api-js/lib/transaction");try{let U=await X.signTransaction(Q.encode(),G);if(!U)throw new Error("Signature undefined");let S=new N({keyType:0,data:U}),v=new f({transaction:Q,signature:S});return[U,v]}catch(U){throw new B("wallet_ledger_signing_error",{error:U})}},signDelegateAction(Q){return Promise.reject(new B("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signDelegateAction"}))}}}import{base64 as Jm}from"@scure/base";import{NetworkDerivationPath as $m,SwapKitError as w0}from"@swapkit/helpers";import{base64 as Wm}from"@scure/base";import{SwapKitError as q}from"@swapkit/helpers";var y0=(m)=>{if(m.length<64)throw new q("wallet_ledger_invalid_signature",{reason:"Too short"});if(m[0]!==48)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(m[1]+2!==m.length)throw new q("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(m[2]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let L=m[3],y=m.slice(4,L+4);if(y.length===33&&y[0]===0)y=y.slice(1,33);else if(y.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"r too long"});while(y.length<32)y.unshift(0);if(m[L+4]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let O=m[L+5];if(4+L+2+O!==m.length)throw new q("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let _=m.slice(L+6,m.length);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"s too long"});while(_.length<32)_.unshift(0);if(y.length!==32||_.length!==32)throw new q("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return Wm.encode(Buffer.concat([y,_]))};class _0 extends k{pubKey=null;derivationPath;constructor(m=$m.THOR){super();this.chain="thor",this.derivationPath=m}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:m,bech32_address:L}=await this.getAddressAndPubKey();return this.pubKey=Jm.encode(m),L};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(m.return_code,m.error_message),m};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(m.return_code,m.error_message),m};signTransaction=async(m,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:O,signature:_}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new w0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,O),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:y0(_)}]};sign=async(m)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:L,error_message:y,signature:O}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new w0("wallet_ledger_pubkey_not_found");return this.validateResponse(L,y),y0(O)}}import{NetworkDerivationPath as jm,SwapKitError as g,derivationPathToString as Mm}from"@swapkit/helpers";class z0{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(m){this.derivationPath=typeof m==="string"?m:Mm(m||jm.TRX)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let m=await Y(),L=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new L(m)};getAddress=async()=>{let m=await this.getAddressAndPubKey();if(!m)throw new g("wallet_ledger_failed_to_get_address");return m.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let m=await this.ledgerApp?.getAddress(this.derivationPath);if(!m)throw new g("wallet_ledger_failed_to_get_address");return{address:m.address,publicKey:m.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(m)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new g("wallet_ledger_transport_error");let L=JSON.stringify(m);try{let y=await this.ledgerApp.signTransaction(this.derivationPath,L,[]);if(!y)throw new g("wallet_ledger_signing_error");return{...m,signature:[y]}}catch(y){throw new g("wallet_ledger_signing_error",{error:y})}}}var q0=(m)=>new z0(m);import{SwapKitError as l0,derivationPathToString as Qm,getWalletFormatFor as Ym}from"@swapkit/helpers";import{Transaction as Zm}from"bitcoinjs-lib";var Cm=async({psbt:m,inputUtxos:L,btcApp:y,derivationPath:O},_)=>{let T=L.map(($)=>{let Z=Zm.fromHex($.txHex||"");return[y.splitTransaction(Z.toHex(),Z.hasWitnesses()),$.index,void 0,void 0]}),B=m.data.globalMap.unsignedTx.toBuffer().toString("hex"),X=y.splitTransaction(B,!0),G=y.serializeTransactionOutputs(X).toString("hex"),R={additionals:["bech32"],associatedKeysets:T.map(()=>O),inputs:T,outputScriptHex:G,segwit:!0,useTrustedInputForSegwit:!0};return y.createPaymentTransaction({...R,..._})},c=({chain:m,additionalSignParams:L})=>{let y,O=null;async function _(B=!0){if(B&&!y)new l0("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
-
${JSON.stringify({checkBtcApp:
|
|
1
|
+
import{H as g0}from"../../chunk-v7ytzdp4.js";import{J as W,K as J}from"../../chunk-p2ca0j1v.js";import{Chain as B,ChainId as Pm,FeeOption as Km,SKConfig as _0,StagenetChain as Im,SwapKitError as E,WalletOption as x0,createWallet as Vm,filterSupportedChains as Em}from"@swapkit/helpers";import{Chain as Q,SwapKitError as ym,WalletOption as Tm}from"@swapkit/helpers";var S=async({chain:m,ledgerClient:L})=>{if(!L)return"";switch(m){case Q.Cosmos:case Q.THORChain:return L.connect();case Q.Ethereum:case Q.BinanceSmartChain:case Q.Avalanche:case Q.Polygon:case Q.Arbitrum:case Q.Optimism:case Q.Base:case Q.Aurora:case Q.Gnosis:return L.getAddress();case Q.Bitcoin:case Q.BitcoinCash:case Q.Dash:case Q.Dogecoin:case Q.Litecoin:{let y=L;await y.connect();let _=await y.getAddress();return m===Q.BitcoinCash?_.replace("bitcoincash:",""):_}case Q.Near:return await L.getAddress();case Q.Ripple:return L.address;case Q.Tron:return L.getAddress();default:throw new ym("wallet_chain_not_supported",{wallet:Tm.LEDGER,chain:m})}};import{Chain as j,SwapKitError as Am,WalletOption as Sm}from"@swapkit/helpers";import{NetworkDerivationPath as Bm,SwapKitError as Y0,derivationPathToString as Rm}from"@swapkit/helpers";import{LedgerErrorCode as r,NetworkDerivationPath as Xm,SwapKitError as m0}from"@swapkit/helpers";import{SwapKitError as Q0}from"@swapkit/helpers";var I=85,p=250;var P={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},u={INIT:0,ADD:1,LAST:2},t={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},V={JSON:0},z={NoError:36864},R0={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",36864:"No errors",36865:"Device is busy",26626:"Error deriving keys",25600:"Execution Error",26368:"Wrong Length",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error"};function w(m){if(m in R0)return R0[m];return`Unknown Status Code: ${m}`}function _m(m){return typeof m==="object"&&m!==null&&!Array.isArray(m)&&!(m instanceof Date)}function C(m){if(m){if(_m(m)){if(Object.prototype.hasOwnProperty.call(m,"statusCode"))return{return_code:m.statusCode,error_message:w(m.statusCode)};if(Object.prototype.hasOwnProperty.call(m,"return_code")&&Object.prototype.hasOwnProperty.call(m,"error_message"))return m}return{return_code:65535,error_message:m.toString()}}return{return_code:65535,error_message:m.toString()}}async function a(m){return m.send(85,P.GET_VERSION,0,0).then((L)=>{let y=L.slice(-2),_=y[0]*256+y[1],T=0;if(L.length>=9)T=(L[5]<<24)+(L[6]<<16)+(L[7]<<8)+(L[8]<<0);return{return_code:_,error_message:w(_),test_mode:L[0]!==0,major:L[1],minor:L[2],patch:L[3],device_locked:L[4]===1,target_id:T.toString(16)}},C)}import{SwapKitError as h}from"@swapkit/helpers";function F0(m){if(m==null||m.length<3)throw new h("wallet_ledger_invalid_params",{reason:"Path too short"});if(m.length>10)throw new h("wallet_ledger_invalid_params",{reason:"Path too long"});let L=Buffer.alloc(1+4*m.length);L.writeUInt8(m.length,0);for(let y=0;y<m.length;y+=1){let _=m[y]||0;if(y<3)_|=2147483648;L.writeInt32LE(_,1+y*4)}return L}async function s(m,L,y,_,T=V.JSON){return m.transport.send(I,P.SIGN_SECP256K1,L,T,_,[z.NoError,27012,27264]).then((O)=>{let X=O.slice(-2),G=X[0]*256+X[1],R=w(G);if(G===27264||G===27012)R=`${R} : ${O.slice(0,O.length-2).toString("ascii")}`;let F=null;if(O.length>2)F=O.slice(0,O.length-2);return{signature:F,return_code:G,error_message:R}},C)}function Om(m){if(m.length!==65)throw new h("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let L=m.slice(33,65),y=Buffer.from([2+(L[L.length-1]&1)]);return Buffer.concat([y,m.slice(1,33)])}async function W0(m,L){return m.transport.send(I,P.INS_PUBLIC_KEY_SECP256K1,0,0,L,[z.NoError]).then((y)=>{let _=y.slice(-2),T=_[0]*256+_[1],O=Buffer.from(y.slice(0,65));return{pk:O,compressed_pk:Om(O),return_code:T,error_message:w(T)}},C)}function J0(m){if(!m||m.length!==5)throw new h("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let L=Buffer.alloc(20);return L.writeUInt32LE(2147483648+m[0],0),L.writeUInt32LE(2147483648+m[1],4),L.writeUInt32LE(2147483648+m[2],8),L.writeUInt32LE(m[3],12),L.writeUInt32LE(m[4],16),L}function $0(m,L,y,_,T=V.JSON){let O=u.ADD;if(L===1)O=u.INIT;if(L===y)O=u.LAST;return s(m,O,0,_,T)}async function j0(m,L){return m.transport.send(I,P.GET_ADDR_SECP256K1,0,0,L,[z.NoError]).then((y)=>{let _=y.slice(-2),T=_[0]*256+_[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(y.slice(0,33)),return_code:T,error_message:w(T)}},C)}class b{transport;versionResponse;constructor(m){if(!m)throw new Q0("wallet_ledger_transport_not_defined");this.transport=m}static serializeHRP(m){if(m==null||m.length<3||m.length>83)throw new Q0("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let L=Buffer.alloc(1+m.length);return L.writeUInt8(m.length,0),L.write(m,1),L}async serializePath(m){if(this.versionResponse=await a(this.transport),this.versionResponse.return_code!==z.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return F0(m);case 2:return J0(m);default:return Buffer.alloc(0)}}async signGetChunks(m,L){let y=await this.serializePath(m),_=[];_.push(y);for(let T=0;T<L.length;T+=p){let O=T+p;if(T>L.length)O=L.length;_.push(L.slice(T,O))}return _}async getVersion(){try{return this.versionResponse=await a(this.transport),this.versionResponse}catch(m){return C(m)}}async appInfo(){return this.transport.send(176,1,0,0).then((m)=>{let L=m.slice(-2),y=L[0]*256+L[1],_="",T="",O=0,X=0;if(m[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let G=m[1];_=m.slice(2,2+G).toString("ascii");let R=2+G,F=m[R];R+=1,T=m.slice(R,R+F).toString("ascii"),R+=F;let $=m[R];return R+=1,O=$,X=m[R],{return_code:y,error_message:w(y),appName:_,appVersion:T,flagLen:O,flagsValue:X,flag_recovery:(X&1)!==0,flag_signed_mcu_code:(X&2)!==0,flag_onboarded:(X&4)!==0,flag_pin_validated:(X&128)!==0}},C)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[z.NoError,28160]).then((m)=>{let L=m.slice(-2),y=L[0]*256+L[1];if(y===28160)return{return_code:y,error_message:"This command is only available in the Dashboard"};let _=m.slice(0,4).toString("hex"),T=4,O=m[T];T+=1;let X=m.slice(T,T+O).toString();T+=O;let G=m[T];T+=1;let R=m.slice(T,T+G).toString("hex");T+=G;let F=m[T];T+=1;let $=m.slice(T,T+F);if($[F-1]===0)$=m.slice(T,T+F-1);let M=$.toString();return{return_code:y,error_message:w(y),targetId:_,seVersion:X,flag:R,mcuVersion:M}},C)}async publicKey(m){try{let L=await this.serializePath(m);switch(this.versionResponse.major){case 1:return W0(this,L);case 2:{let y=Buffer.concat([b.serializeHRP("thor"),L]);return j0(this,y)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(L){return C(L)}}async getAddressAndPubKey(m,L,y=!1){return this.serializePath(m).then((_)=>{let T=Buffer.concat([b.serializeHRP(L),_]);return this.transport.send(I,P.GET_ADDR_SECP256K1,y?t.SHOW_ADDRESS_IN_DEVICE:t.ONLY_RETRIEVE,0,T,[z.NoError]).then((O)=>{let X=O.slice(-2),G=X[0]*256+X[1],R=Buffer.from(O.slice(0,33));return{bech32_address:Buffer.from(O.slice(33,-2)).toString(),compressed_pk:R,return_code:G,error_message:w(G)}},C)}).catch((_)=>C(_))}showAddressAndPubKey(m,L){return this.getAddressAndPubKey(m,L,!0)}signSendChunk(m,L,y,_=V.JSON){switch(this.versionResponse.major){case 1:return s(this,m,L,y,_);case 2:return $0(this,m,L,y,_);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(m,L,y=V.JSON){let _=Buffer.from(L),T=[],O;try{T=await this.signGetChunks(m,_),O=await this.signSendChunk(1,T.length,T[0],y)}catch(G){C(G)}let X={return_code:O.return_code,error_message:O.error_message,signature:null};for(let G=1;G<T.length;G+=1)if(X=await this.signSendChunk(1+G,T.length,T[G],y),X.return_code!==z.NoError)break;return{return_code:X.return_code,error_message:X.error_message,signature:X.signature}}}import{SwapKitError as d}from"@swapkit/helpers";var e=()=>navigator?.usb,Gm=async()=>{let m=e();if(typeof m?.getDevices!=="function")return[];let{ledgerUSBVendorId:L}=await import("@ledgerhq/devices"),_=(await m?.getDevices()).filter((T)=>T.vendorId===L);if(_.length>0)return _[0];return m?.requestDevice({filters:[{vendorId:L}]})},Z=async()=>{let m=await Gm();if(!m)throw new d("wallet_ledger_device_not_found");if(await m.open(),m.configuration===null)await m.selectConfiguration(1);try{await m.reset()}catch{}let L=m.configurations[0].interfaces.find(({alternates:G})=>G.some(({interfaceClass:R})=>R===255));if(!L)throw await m.close(),new d("wallet_ledger_connection_error");try{await m.claimInterface(L.interfaceNumber)}catch(G){throw await m.close(),new d("wallet_ledger_connection_claimed",G)}let y=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await y.isSupported())throw new d("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:T}=await import("@ledgerhq/errors"),O=new y(m,L.interfaceNumber),X=(G)=>{if(m===G.device)e()?.removeEventListener("disconnect",X),O._emitDisconnect(new T)};return e()?.addEventListener("disconnect",X),O};class k{ledgerTimeout=50000;derivationPath=Xm.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(m=!1)=>{if(!m&&this.transport&&this.ledgerApp)return;try{switch(this.transport=m||!this.transport?await Z():this.transport,this.chain){case"thor":{this.ledgerApp=m||!this.ledgerApp?new b(this.transport):this.ledgerApp;break}case"cosmos":{let L=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=m||!this.ledgerApp?new L(this.transport):this.ledgerApp}}return this.ledgerApp}catch(L){throw new m0("wallet_ledger_connection_error",L)}};validateResponse=(m,L)=>{switch(m){case r.NoError:return;case r.LockedDevice:throw new m0("wallet_ledger_device_locked",{message:`Ledger is locked: ${L}`});case r.TC_NotFound:throw new m0("wallet_ledger_device_not_found");default:break}}}class L0 extends k{pubKey=null;derivationPath;constructor(m=Bm.GAIA){super();this.chain="cosmos",this.derivationPath=Rm(m)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:m,address:L}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(m,"hex").toString("base64"),L};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(m,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:_,signature:T}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new Y0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:T}]};signAmino=async(m,L)=>{await this.checkOrCreateTransportAndLedger(!0);let y=await this.getAccounts();if(y.findIndex(($)=>$.address===m)===-1)throw new Y0("wallet_ledger_address_not_found",{address:m});let{encodeSecp256k1Signature:T,serializeSignDoc:O}=(await import("@cosmjs/amino")).default,{Secp256k1Signature:X}=(await import("@cosmjs/crypto")).default,G=O(L),R=await this.ledgerApp.sign(this.derivationPath,G);this.validateResponse(R.return_code,R.error_message);let F=X.fromDer(R.signature).toFixedLength();return{signed:L,signature:T(y[0].pubkey,F)}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.getAddressAndPubKey();return[{address:m.address,algo:"secp256k1",pubkey:Buffer.from(m.publicKey,"hex")}]}}import{ChainId as N,NetworkDerivationPath as Fm,SwapKitError as x,derivationPathToString as Wm}from"@swapkit/helpers";import{AbstractSigner as Jm}from"ethers";class H extends Jm{chainId=N.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:m,derivationPath:L=Fm.OP,chainId:y=N.Optimism}){super(m);this.chainId=y||N.Ethereum,this.derivationPath=typeof L==="string"?L:Wm(L),Object.defineProperty(this,"provider",{enumerable:!0,value:m||null,writable:!1})}connect=(m)=>new H({provider:m,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let m=await Z(),L=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new L(m)};getAddress=async()=>{let m=await this.getAddressAndPubKey();if(!m)throw new x("wallet_ledger_failed_to_get_address");return m.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(m)=>{let{Signature:L}=await import("ethers");await this.createTransportAndLedger();let y=await this.ledgerApp?.signPersonalMessage(this.derivationPath,m);if(!y)throw new x("wallet_ledger_signing_error");return y.r=`0x${y.r}`,y.s=`0x${y.s}`,L.from(y).serialized};sendTransaction=async(m)=>{if(!this.provider)throw new x("wallet_ledger_no_provider");let L=await this.signTransaction(m);return await this.provider.broadcastTransaction(L)};signTypedData(){throw new x("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(m)=>{let{Transaction:L}=await import("ethers");await this.createTransportAndLedger();let y=await this.provider?.getTransactionCount(m.from||await this.getAddress()),_={chainId:m.chainId||this.chainId,data:m.data,gasLimit:m.gasLimit,...m.gasPrice&&{gasPrice:m.gasPrice},...!m.gasPrice&&m.maxFeePerGas&&{maxFeePerGas:m.maxFeePerGas,maxPriorityFeePerGas:m.maxPriorityFeePerGas},nonce:m.nonce!==void 0?Number((m.nonce||y||0).toString()):y,to:m.to?.toString(),value:m.value,type:m.type&&!Number.isNaN(m.type)?m.type:m.maxFeePerGas?2:0},T=L.from(_).unsignedSerialized.slice(2),{ledgerService:O}=await import("@ledgerhq/hw-app-eth"),X=await O.resolveTransaction(T,{},{externalPlugins:!0,erc20:!0}),G=await this.ledgerApp?.signTransaction(this.derivationPath,T,X);if(!G)throw new x("wallet_ledger_signing_error");let{r:R,s:F,v:$}=G;return L.from({..._,signature:{v:Number(BigInt($)),r:`0x${R}`,s:`0x${F}`}}).serialized}}var Z0=({provider:m,derivationPath:L})=>new H({chainId:N.Ethereum,provider:m,derivationPath:L}),M0=({provider:m,derivationPath:L})=>new H({chainId:N.Avalanche,provider:m,derivationPath:L}),C0=({provider:m,derivationPath:L})=>new H({chainId:N.BinanceSmartChain,provider:m,derivationPath:L}),N0=({provider:m,derivationPath:L})=>new H({chainId:N.Arbitrum,provider:m,derivationPath:L}),U0=({provider:m,derivationPath:L})=>new H({chainId:N.Polygon,provider:m,derivationPath:L}),H0=({provider:m,derivationPath:L})=>new H({chainId:N.Optimism,provider:m,derivationPath:L}),D0=({provider:m,derivationPath:L})=>new H({chainId:N.Base,provider:m,derivationPath:L}),w0=({provider:m,derivationPath:L})=>new H({chainId:N.Aurora,provider:m,derivationPath:L}),f0=({provider:m,derivationPath:L})=>new H({chainId:N.Gnosis,provider:m,derivationPath:L});async function z0(m,L){let y=await import("@ledgerhq/hw-app-near"),{Chain:_,DerivationPath:T,derivationPathToString:O,SwapKitError:X}=await import("@swapkit/helpers"),G=new y.default(m),R=L?O(L):T[_.Near],{address:F,publicKey:$}=await G.getAddress(R);return{async getPublicKey(){let{utils:Y}=await import("near-api-js");return Y.PublicKey.fromString(`ed25519:${$}`)},signNep413Message(Y,U,f,D,K){return Promise.reject(new X("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signNep413Message"}))},getAddress(){return Promise.resolve(F)},async signTransaction(Y){let{Signature:U,SignedTransaction:f}=await import("near-api-js/lib/transaction");try{let D=await G.signTransaction(Y.encode(),R);if(!D)throw new Error("Signature undefined");let K=new U({keyType:0,data:D}),v=new f({transaction:Y,signature:K});return[D,v]}catch(D){throw new X("wallet_ledger_signing_error",{error:D})}},signDelegateAction(Y){return Promise.reject(new X("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signDelegateAction"}))}}}import{base64 as jm}from"@scure/base";import{NetworkDerivationPath as Qm,SwapKitError as q0}from"@swapkit/helpers";import{base64 as $m}from"@scure/base";import{SwapKitError as q}from"@swapkit/helpers";var y0=(m)=>{if(m.length<64)throw new q("wallet_ledger_invalid_signature",{reason:"Too short"});if(m[0]!==48)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(m[1]+2!==m.length)throw new q("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(m[2]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let L=m[3],y=m.slice(4,L+4);if(y.length===33&&y[0]===0)y=y.slice(1,33);else if(y.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"r too long"});while(y.length<32)y.unshift(0);if(m[L+4]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let _=m[L+5];if(4+L+2+_!==m.length)throw new q("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let T=m.slice(L+6,m.length);if(T.length===33&&T[0]===0)T=T.slice(1,33);else if(T.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"s too long"});while(T.length<32)T.unshift(0);if(y.length!==32||T.length!==32)throw new q("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return $m.encode(Buffer.concat([y,T]))};class T0 extends k{pubKey=null;derivationPath;constructor(m=Qm.THOR){super();this.chain="thor",this.derivationPath=m}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:m,bech32_address:L}=await this.getAddressAndPubKey();return this.pubKey=jm.encode(m),L};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(m.return_code,m.error_message),m};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(m.return_code,m.error_message),m};signTransaction=async(m,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:_,signature:T}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new q0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:y0(T)}]};sign=async(m)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:L,error_message:y,signature:_}=await this.ledgerApp.sign(this.derivationPath,m);if(!this.pubKey)throw new q0("wallet_ledger_pubkey_not_found");return this.validateResponse(L,y),y0(_)}}import{NetworkDerivationPath as Ym,SwapKitError as g,derivationPathToString as Zm}from"@swapkit/helpers";class l0{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(m){this.derivationPath=typeof m==="string"?m:Zm(m||Ym.TRX)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let m=await Z(),L=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new L(m)};getAddress=async()=>{let m=await this.getAddressAndPubKey();if(!m)throw new g("wallet_ledger_failed_to_get_address");return m.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let m=await this.ledgerApp?.getAddress(this.derivationPath);if(!m)throw new g("wallet_ledger_failed_to_get_address");return{address:m.address,publicKey:m.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(m)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new g("wallet_ledger_transport_error");let L=JSON.stringify(m);try{let y=await this.ledgerApp.signTransaction(this.derivationPath,L,[]);if(!y)throw new g("wallet_ledger_signing_error");return{...m,signature:[y]}}catch(y){throw new g("wallet_ledger_signing_error",{error:y})}}}var A0=(m)=>new l0(m);import{SwapKitError as S0,derivationPathToString as Mm,getWalletFormatFor as Cm}from"@swapkit/helpers";import{Transaction as Nm}from"bitcoinjs-lib";var Um=async({psbt:m,inputUtxos:L,btcApp:y,derivationPath:_},T)=>{let O=L.map(($)=>{let M=Nm.fromHex($.txHex||"");return[y.splitTransaction(M.toHex(),M.hasWitnesses()),$.index,void 0,void 0]}),X=m.data.globalMap.unsignedTx.toBuffer().toString("hex"),G=y.splitTransaction(X,!0),R=y.serializeTransactionOutputs(G).toString("hex"),F={additionals:["bech32"],associatedKeysets:O.map(()=>_),inputs:O,outputScriptHex:R,segwit:!0,useTrustedInputForSegwit:!0};return y.createPaymentTransaction({...F,...T})},c=({chain:m,additionalSignParams:L})=>{let y,_=null;async function T(X=!0){if(X&&!y)new S0("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
+
${JSON.stringify({checkBtcApp:X,btcApp:y})}`});_||=await Z()}async function O(){_=await Z(),y=new(await import("@ledgerhq/hw-app-btc")).default({transport:_,currency:m})}return(X)=>{let G=typeof X==="string"?X:Mm(X),R=Cm(G);return{connect:async()=>{await T(!1),y=new(await import("@ledgerhq/hw-app-btc")).default({transport:_,currency:m})},getExtendedPublicKey:async(F="84'/0'/0'",$=76067358)=>{return await T(!1),y.getWalletXpub({path:F,xpubVersion:$})},signTransaction:async(F,$)=>{return await O(),Um({psbt:F,derivationPath:G,btcApp:y,inputUtxos:$},L)},getAddress:async()=>{let{toCashAddress:F}=await import("@swapkit/toolboxes/utxo");await T(!1);let{bitcoinAddress:$}=await y.getWalletPublicKey(G,{format:R});if(!$)throw new S0("wallet_ledger_get_address_error",{message:`Cannot get ${m} address from ledger derivation path: ${G}`});return m==="bitcoin-cash"&&R==="legacy"?F($).replace(/(bchtest:|bitcoincash:)/,""):$}}}},P0=c({chain:"bitcoin"}),K0=c({chain:"litecoin"}),I0=c({chain:"bitcoin-cash",additionalSignParams:{segwit:!1,additionals:["abc"],sigHashType:65}}),V0=c({chain:"dogecoin",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}}),E0=c({chain:"dash",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}});import{Chain as Hm,NetworkDerivationPath as Dm,derivationPathToString as wm}from"@swapkit/helpers";import{encode as b0}from"ripple-binary-codec";var fm=2147483648;function zm(m){let L={};for(let y in m)if(m[y]!==null&&m[y]!==void 0)L[y]=m[y];return L}async function qm(m){let{default:L}=await import("@ledgerhq/hw-app-xrp");return new L(m)}function lm({instance:m,derivationPath:L}){return m.getAddress(L)}var k0=async(m)=>{let L=wm(m||Dm[Hm.Ripple]),y=await Z(),_=await qm(y),{address:T,publicKey:O}=await lm({instance:_,derivationPath:L});async function X(G){let{hashes:R}=await import("@swapkit/toolboxes/ripple"),$={...zm(G),Flags:G.Flags||fm,SigningPubKey:O.toUpperCase()},M=b0($),Y=await _.signTransaction(L,M),U=b0({...$,TxnSignature:Y}),f=R.hashSignedTx(U);return{tx_blob:U,hash:f}}return{address:T,sign:X}};var l=async({chain:m,derivationPath:L})=>{let{match:y}=await import("ts-pattern");return y(m).returnType().with(j.THORChain,()=>Promise.resolve(new T0(L))).with(j.Cosmos,()=>Promise.resolve(new L0(L))).with(j.Bitcoin,()=>Promise.resolve(P0(L))).with(j.BitcoinCash,()=>Promise.resolve(I0(L))).with(j.Dash,()=>Promise.resolve(E0(L))).with(j.Dogecoin,()=>Promise.resolve(V0(L))).with(j.Litecoin,()=>Promise.resolve(K0(L))).with(j.Ripple,()=>Promise.resolve(k0(L))).with(j.Tron,()=>Promise.resolve(A0(L))).with(j.Near,async()=>{let _=await Z();return z0(_,L)}).with(j.Arbitrum,j.Aurora,j.Avalanche,j.BinanceSmartChain,j.Ethereum,j.Gnosis,j.Optimism,j.Polygon,j.Base,async()=>{let{getProvider:_}=await import("@swapkit/toolboxes/evm"),T={provider:await _(m),derivationPath:L};return y(m).with(j.BinanceSmartChain,()=>C0(T)).with(j.Avalanche,()=>M0(T)).with(j.Arbitrum,()=>N0(T)).with(j.Optimism,()=>H0(T)).with(j.Polygon,()=>U0(T)).with(j.Base,()=>D0(T)).with(j.Aurora,()=>w0(T)).with(j.Gnosis,()=>f0(T)).otherwise(()=>Z0(T))}).otherwise(()=>{throw new Am("wallet_chain_not_supported",{wallet:Sm.LEDGER,chain:m})})};var bm=Vm({name:"connectLedger",supportedChains:[B.Arbitrum,B.Aurora,B.Avalanche,B.Base,B.BinanceSmartChain,B.Bitcoin,B.BitcoinCash,B.Cosmos,B.Dash,B.Dogecoin,B.Ethereum,B.Gnosis,B.Litecoin,B.Near,B.Optimism,B.Polygon,B.Ripple,B.THORChain,B.Tron],walletType:x0.LEDGER,connect:({addChain:m,supportedChains:L,walletType:y})=>async function _(T,O){let[X]=Em({chains:T,supportedChains:L,walletType:y});if(!X)return!1;let G=await gm({chain:X,derivationPath:O});return m({...G,chain:X,walletType:x0.LEDGER}),!0}}),pL=g0(bm);function km(m,L="t"){if(!m?.includes("=:"))return m;let y=m.includes(`:${L}:`)?m.split(`:${L}:`)[0]:m;return y?.substring(0,y.lastIndexOf(":"))}function i(m){if(Array.isArray(m))return m.forEach((_,T)=>{m[T]=i(_)}),m;if(typeof m!=="object")return m;let L={},y=Object.keys(m).sort();for(let _ of y)L[_]=i(m[_]);return L}function xm(m){return JSON.stringify(i(m))}async function gm({chain:m,derivationPath:L}){switch(m){case B.BitcoinCash:case B.Bitcoin:case B.Dash:case B.Dogecoin:case B.Litecoin:{let{getUtxoToolbox:y}=await import("@swapkit/toolboxes/utxo"),_=await y(m),T=await l({chain:m,derivationPath:L}),O=await S({chain:m,ledgerClient:T});return{..._,address:O,transfer:async(G)=>{let R=G.feeRate||(await _.getFeeRates())[Km.Average],F=[B.Bitcoin].includes(m)?G.memo:km(G.memo),{psbt:$,inputs:M}=await _.createTransaction({...G,feeRate:R,memo:F,sender:O,fetchTxHex:!0}),Y=await T.signTransaction($,M);return await _.broadcastTx(Y)}}}case B.Ethereum:case B.Avalanche:case B.Arbitrum:case B.Optimism:case B.Polygon:case B.BinanceSmartChain:case B.Base:case B.Aurora:case B.Gnosis:{let{getEvmToolbox:y}=await import("@swapkit/toolboxes/evm"),_=await l({chain:m,derivationPath:L}),T=await S({chain:m,ledgerClient:_});return{...await y(m,{signer:_}),address:T}}case B.Cosmos:{let{createSigningStargateClient:y,getMsgSendDenom:_,getCosmosToolbox:T}=await import("@swapkit/toolboxes/cosmos"),O=await T(B.Cosmos),X=await l({chain:m,derivationPath:L}),G=await S({chain:m,ledgerClient:X});return{...O,address:G,transfer:async({assetValue:F,recipient:$,memo:M})=>{if(!F)throw new E("wallet_ledger_invalid_asset");let Y={amount:[{amount:F.getBaseValue("string"),denom:_(`u${F.symbol}`).toLowerCase()}],fromAddress:G,toAddress:$},U=await y(_0.get("rpcUrls")[m],X,"0.007uatom"),{transactionHash:f}=await U.signAndBroadcast(G,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:Y}],2,M);return f}}}case B.THORChain:{let{SignMode:y}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:_}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),{encodePubkey:T,makeAuthInfoBytes:O}=(await import("@cosmjs/proto-signing")).default,{createStargateClient:X,buildEncodedTxBody:G,getCosmosToolbox:R,buildAminoMsg:F,getDefaultChainFee:$,fromBase64:M,parseAminoMessageForDirectSigning:Y}=await import("@swapkit/toolboxes/cosmos"),U=await R(m),f=await l({chain:m,derivationPath:L}),D=await S({chain:m,ledgerClient:f}),K=$(m),{pubkey:v,signTransaction:c0,sign:v0}=f,O0=async({memo:A="",assetValue:G0,...u0})=>{let X0=await U.getAccount(D);if(!X0)throw new E("wallet_ledger_invalid_account");if(!G0)throw new E("wallet_ledger_invalid_asset");if(!v)throw new E("wallet_ledger_pubkey_not_found");let{accountNumber:h0,sequence:d0}=X0,o=(d0||0).toString(),B0=i([F({sender:D,assetValue:G0,memo:A,...u0})]),i0=xm({account_number:h0?.toString(),chain_id:Pm.THORChain,fee:K,memo:A,msgs:B0,sequence:o}),n=await c0(i0,o);if(!n)throw new E("wallet_ledger_signing_error");let o0=T({type:"tendermint/PubKeySecp256k1",value:v}),n0=B0.map(Y),p0=await G({msgs:n0,chain:m,memo:A}),t0=O([{pubkey:o0,sequence:Number(o)}],K.amount,Number.parseInt(K.gas),void 0,void 0,y.SIGN_MODE_LEGACY_AMINO_JSON),a0=n?.[0]?.signature?M(n[0].signature):Uint8Array.from([]),s0=_.fromPartial({bodyBytes:p0,authInfoBytes:t0,signatures:[a0]}),e0=_.encode(s0).finish(),{isStagenet:r0}=_0.get("envs"),mm=await X(_0.get("rpcUrls")[r0?Im.THORChain:B.THORChain]),{transactionHash:Lm}=await mm.broadcastTx(e0);return Lm};return{...U,address:D,deposit:(A)=>O0(A),transfer:(A)=>O0(A),signMessage:v0}}case B.Near:{let{getNearToolbox:y}=await import("@swapkit/toolboxes/near"),_=await l({chain:m,derivationPath:L}),T=await _.getAddress();return{...await y({signer:_}),address:T}}case B.Ripple:{let{getRippleToolbox:y}=await import("@swapkit/toolboxes/ripple"),_=await l({chain:m,derivationPath:L}),T=_.address;return{...await y({signer:_}),address:T}}case B.Tron:{let{createTronToolbox:y}=await import("@swapkit/toolboxes/tron"),_=await l({chain:m,derivationPath:L}),T=await S({chain:m,ledgerClient:_});return{...await y({signer:_}),address:T}}default:throw new E("wallet_ledger_chain_not_supported",{chain:m})}}export{bm as ledgerWallet,pL as LEDGER_SUPPORTED_CHAINS};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=359E8D91BD4132BE64756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.js.map
|