@swapkit/wallets 3.0.0-beta.3 → 3.0.0-beta.30
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-0qaxr89s.js +3 -0
- package/dist/chunk-0qaxr89s.js.map +10 -0
- package/dist/chunk-2aa1w78q.js +3 -0
- package/dist/chunk-2aa1w78q.js.map +10 -0
- package/dist/chunk-bexr8da2.js +4 -0
- package/dist/chunk-bexr8da2.js.map +10 -0
- package/dist/chunk-dcj9twam.js +3 -0
- package/dist/chunk-dcj9twam.js.map +10 -0
- package/dist/{chunk-p1kdg37m.js → chunk-qwd1kp32.js} +2 -2
- package/dist/{chunk-p1kdg37m.js.map → chunk-qwd1kp32.js.map} +1 -1
- package/dist/chunk-sn6pgje5.js +3 -0
- package/dist/chunk-sn6pgje5.js.map +10 -0
- package/dist/chunk-th8ggrmx.js +4 -0
- package/dist/{chunk-czhtd6cy.js.map → chunk-th8ggrmx.js.map} +3 -3
- package/dist/chunk-wfattb4a.js +3 -0
- package/dist/chunk-wfattb4a.js.map +10 -0
- package/dist/chunk-yah6cf33.js +3 -0
- package/dist/{chunk-qadd75nn.js.map → chunk-yah6cf33.js.map} +3 -3
- 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.cjs +2 -2
- package/dist/src/coinbase/index.cjs.map +3 -3
- package/dist/src/coinbase/index.js +2 -2
- package/dist/src/coinbase/index.js.map +3 -3
- package/dist/src/cosmostation/index.cjs +3 -0
- package/dist/src/cosmostation/index.cjs.map +10 -0
- package/dist/src/cosmostation/index.js +3 -0
- package/dist/src/cosmostation/index.js.map +10 -0
- 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.cjs +2 -2
- package/dist/src/evm-extensions/index.cjs.map +3 -3
- package/dist/src/evm-extensions/index.js +2 -2
- package/dist/src/evm-extensions/index.js.map +3 -3
- 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.cjs +2 -2
- package/dist/src/keepkey/index.cjs.map +9 -9
- package/dist/src/keepkey/index.js +2 -2
- package/dist/src/keepkey/index.js.map +9 -9
- package/dist/src/keepkey-bex/index.cjs +2 -2
- package/dist/src/keepkey-bex/index.cjs.map +4 -4
- package/dist/src/keepkey-bex/index.js +2 -2
- package/dist/src/keepkey-bex/index.js.map +4 -4
- package/dist/src/keplr/index.cjs +2 -2
- package/dist/src/keplr/index.cjs.map +3 -3
- package/dist/src/keplr/index.js +2 -2
- package/dist/src/keplr/index.js.map +3 -3
- package/dist/src/keystore/index.cjs +2 -2
- package/dist/src/keystore/index.cjs.map +4 -4
- package/dist/src/keystore/index.js +2 -2
- package/dist/src/keystore/index.js.map +4 -4
- package/dist/src/ledger/index.cjs +3 -3
- package/dist/src/ledger/index.cjs.map +17 -15
- package/dist/src/ledger/index.js +3 -3
- package/dist/src/ledger/index.js.map +17 -15
- 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 +2 -2
- package/dist/src/polkadotjs/index.js +2 -2
- package/dist/src/polkadotjs/index.js.map +1 -1
- package/dist/src/radix/index.cjs +2 -2
- package/dist/src/radix/index.cjs.map +3 -3
- package/dist/src/radix/index.js +2 -2
- package/dist/src/radix/index.js.map +3 -3
- 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 +6 -7
- package/dist/src/walletconnect/index.js +2 -2
- package/dist/src/walletconnect/index.js.map +6 -7
- package/package.json +36 -28
- package/src/bitget/helpers.ts +4 -4
- package/src/coinbase/signer.ts +4 -4
- package/src/cosmostation/index.ts +142 -0
- package/src/ctrl/index.ts +83 -0
- package/src/ctrl/walletHelpers.ts +98 -70
- package/src/evm-extensions/index.ts +4 -3
- package/src/exodus/index.ts +8 -9
- package/src/helpers/near-browser-provider.d.ts +286 -0
- package/src/helpers/near.ts +206 -0
- package/src/keepkey/chains/cosmos.ts +44 -50
- package/src/keepkey/chains/evm.ts +16 -8
- package/src/keepkey/chains/mayachain.ts +3 -2
- package/src/keepkey/chains/thorchain.ts +3 -2
- package/src/keepkey/chains/utxo.ts +14 -3
- package/src/keepkey/coins.ts +10 -4
- package/src/keepkey/index.ts +15 -7
- package/src/keepkey-bex/index.ts +9 -14
- package/src/keepkey-bex/walletHelpers.ts +1 -1
- package/src/keplr/index.ts +4 -3
- package/src/keystore/helpers.ts +2 -4
- package/src/keystore/index.ts +2 -0
- package/src/ledger/clients/cosmos.ts +5 -4
- package/src/ledger/clients/evm.ts +7 -6
- package/src/ledger/clients/near.ts +86 -0
- package/src/ledger/clients/thorchain/helpers.ts +9 -4
- package/src/ledger/clients/thorchain/index.ts +3 -3
- package/src/ledger/clients/thorchain/lib.ts +3 -2
- package/src/ledger/clients/thorchain/utils.ts +20 -9
- package/src/ledger/clients/utxo.ts +3 -5
- package/src/ledger/clients/xrp.ts +66 -0
- package/src/ledger/cosmosTypes.ts +14 -10
- package/src/ledger/helpers/getLedgerAddress.ts +17 -3
- package/src/ledger/helpers/getLedgerClient.ts +63 -45
- package/src/ledger/helpers/getLedgerTransport.ts +5 -3
- package/src/ledger/index.ts +28 -7
- package/src/ledger/interfaces/CosmosLedgerInterface.ts +1 -2
- package/src/okx/helpers.ts +27 -9
- package/src/okx/index.ts +1 -0
- package/src/onekey/index.ts +3 -7
- package/src/radix/index.ts +4 -4
- package/src/trezor/evmSigner.ts +4 -4
- package/src/trezor/index.ts +14 -4
- package/src/types.ts +14 -0
- package/src/utils.ts +4 -0
- package/src/walletconnect/constants.ts +2 -0
- package/src/walletconnect/evmSigner.ts +8 -4
- package/src/walletconnect/helpers.ts +9 -2
- package/src/walletconnect/index.ts +134 -24
- package/dist/chunk-bhfpfqc3.js +0 -3
- package/dist/chunk-bhfpfqc3.js.map +0 -10
- package/dist/chunk-czhtd6cy.js +0 -4
- package/dist/chunk-q81hzyra.js +0 -3
- package/dist/chunk-q81hzyra.js.map +0 -10
- package/dist/chunk-qadd75nn.js +0 -3
package/dist/src/keplr/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as b,D as f}from"../../chunk-qwd1kp32.js";import{Chain as a,ChainId as r,ChainToChainId as y,SwapKitError as t,WalletOption as p,createWallet as F,filterSupportedChains as I}from"@swapkit/helpers";import{ChainId as l}from"@swapkit/helpers";var h=new Map([[l.Kujira,{chainId:"kaiyo-1",chainName:"Kujira",chainSymbolImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/chain.png",rpc:"https://kujira-rpc.nodes.defiantlabs.net",rest:"https://rest.cosmos.directory/kujira/",nodeProvider:{name:"PFC",email:"pfc-validator@protonmail.com",website:"https://pfc.zone/"},bip44:{coinType:118},bech32Config:{bech32PrefixAccAddr:"kujira",bech32PrefixAccPub:"kujirapub",bech32PrefixValAddr:"kujiravaloper",bech32PrefixValPub:"kujiravaloperpub",bech32PrefixConsAddr:"kujiravalcons",bech32PrefixConsPub:"kujiravalconspub"},currencies:[{coinDenom:"KUJI",coinMinimalDenom:"ukuji",coinDecimals:6,coinGeckoId:"kujira",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png"},{coinDenom:"USK",coinMinimalDenom:"factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk",coinDecimals:6,coinGeckoId:"usk"},{coinDenom:"MNTA",coinMinimalDenom:"factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta",coinDecimals:6,coinGeckoId:"mantadao"},{coinDenom:"bKUJI",coinMinimalDenom:"factory/kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv/boneKuji",coinDecimals:6,coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/factory/kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv/bKUJI.png"},{coinDenom:"AQLA",coinMinimalDenom:"factory/kujira1xe0awk5planmtsmjel5xtx2hzhqdw5p8z66yqd/uaqla",coinDecimals:6,coinGeckoId:"aqualibre",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/factory/kujira1xe0awk5planmtsmjel5xtx2hzhqdw5p8z66yqd/AQLA.png"}],feeCurrencies:[{coinDenom:"KUJI",coinMinimalDenom:"ukuji",coinDecimals:6,coinGeckoId:"kujira",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png"},{coinDenom:"USK",coinMinimalDenom:"factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk",coinDecimals:6,coinGeckoId:"usk"},{coinDenom:"axlUSDC",coinMinimalDenom:"ibc/295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F",coinDecimals:6,coinGeckoId:"usd-coin"},{coinDenom:"ATOM",coinMinimalDenom:"ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2",coinDecimals:6,coinGeckoId:"cosmos"},{coinDenom:"OSMO",coinMinimalDenom:"ibc/47BD209179859CDE4A2806763D7189B6E6FE13A17880FE2B42DE1E6C1E329E23",coinDecimals:6,coinGeckoId:"osmosis"},{coinDenom:"CMDX",coinMinimalDenom:"ibc/3607EB5B5E64DD1C0E12E07F077FF470D5BC4706AFCBC98FE1BA960E5AE4CE07",coinDecimals:6,coinGeckoId:"comdex"},{coinDenom:"EVMOS",coinMinimalDenom:"ibc/F3AA7EF362EC5E791FE78A0F4CCC69FEE1F9A7485EB1A8CAB3F6601C00522F10",coinDecimals:6,coinGeckoId:"evmos"},{coinDenom:"JUNO",coinMinimalDenom:"ibc/EFF323CC632EC4F747C61BCE238A758EFDB7699C3226565F7C20DA06509D59A5",coinDecimals:6,coinGeckoId:"juno-network"},{coinDenom:"MNTA",coinMinimalDenom:"factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta",coinDecimals:6,coinGeckoId:"mantadao"},{coinDenom:"SCRT",coinMinimalDenom:"ibc/A358D7F19237777AF6D8AD0E0F53268F8B18AE8A53ED318095C14D6D7F3B2DB5",coinDecimals:6,coinGeckoId:"secret"},{coinDenom:"STARS",coinMinimalDenom:"ibc/4F393C3FCA4190C0A6756CE7F6D897D5D1BE57D6CCB80D0BC87393566A7B6602",coinDecimals:6,coinGeckoId:"stargaze"},{coinDenom:"wAVAX",coinMinimalDenom:"ibc/004EBF085BBED1029326D56BE8A2E67C08CECE670A94AC1947DF413EF5130EB2",coinDecimals:18,coinGeckoId:"avalanche-2"},{coinDenom:"wETH",coinMinimalDenom:"ibc/1B38805B1C75352B28169284F96DF56BDEBD9E8FAC005BDCC8CF0378C82AA8E7",coinDecimals:18,coinGeckoId:"ethereum"}],stakeCurrency:{coinDenom:"KUJI",coinMinimalDenom:"ukuji",coinDecimals:6,coinGeckoId:"kujira",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png"},features:["cosmwasm"]}],[l.THORChain,{chainId:"thorchain-1",chainName:"THORChain",chainSymbolImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/chain.png",rpc:"https://rpc-thorchain.keplr.app",rest:"https://lcd-thorchain.keplr.app",bip44:{coinType:931},bech32Config:{bech32PrefixAccAddr:"thor",bech32PrefixAccPub:"thorpub",bech32PrefixValAddr:"thorvaloper",bech32PrefixValPub:"thorvaloperpub",bech32PrefixConsAddr:"thorvalcons",bech32PrefixConsPub:"thorvalconspub"},currencies:[{coinDenom:"RUNE",coinMinimalDenom:"rune",coinDecimals:8,coinGeckoId:"thorchain",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/rune.png"}],feeCurrencies:[{coinDenom:"RUNE",coinMinimalDenom:"rune",coinDecimals:8,coinGeckoId:"thorchain",coinImageUrl:"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/rune.png",gasPriceStep:{low:0.02,average:0.02,high:0.03}}],features:[]}]]);var x=[r.Cosmos,r.Kujira,r.THORChain],v=F({name:"connectKeplr",supportedChains:[a.Cosmos,a.Kujira,a.THORChain],connect:({addChain:u,supportedChains:D})=>async function j(k,o=p.KEPLR){let C=o===p.LEAP?"leap":"keplr",d=I({chains:k,supportedChains:D,walletType:o}),e=window[C];return await Promise.all(d.map(async(i)=>{let n=y[i];if(!x.includes(n)){let m=h.get(n);if(!m)throw new t("wallet_keplr_chain_not_supported",{chain:i});await e.experimentalSuggestChain(m)}e?.enable(n);let c=e?.getOfflineSignerOnlyAmino(n);if(!c)throw new t("wallet_keplr_signer_not_found");let{getCosmosToolbox:g}=await import("@swapkit/toolboxes/cosmos"),s=await c.getAccounts();if(!s?.[0]?.address)throw new t("wallet_keplr_no_accounts");let[{address:A}]=s,E=g(i,{signer:c});u({...E,chain:i,address:A,walletType:o})})),!0}});export{v as keplrWallet};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=6CE237E8BFE52E3164756E2164756E21
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/keplr/index.ts", "../src/keplr/chainRegistry.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n Chain,\n ChainId,\n ChainToChainId,\n WalletOption,\n createWallet,\n filterSupportedChains,\n} from \"@swapkit/helpers\";\nimport { chainRegistry } from \"./chainRegistry\";\n\nconst keplrSupportedChainIds = [ChainId.Cosmos, ChainId.Kujira, ChainId.THORChain] as const;\n\nexport const keplrWallet = createWallet({\n name: \"connectKeplr\",\n supportedChains: [Chain.Cosmos, Chain.Kujira, Chain.THORChain],\n connect: ({ addChain, supportedChains }) =>\n async function connectKeplr(\n chains: Chain[],\n walletType: WalletOption.KEPLR | WalletOption.LEAP = WalletOption.KEPLR,\n ) {\n const extensionKey = walletType === WalletOption.LEAP ? \"leap\" : \"keplr\";\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n const keplrClient = window[extensionKey];\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const chainId = ChainToChainId[chain] as (typeof keplrSupportedChainIds)[number];\n\n if (!keplrSupportedChainIds.includes(chainId)) {\n const chainConfig = chainRegistry.get(chainId);\n if (!chainConfig) throw new
|
|
5
|
+
"import {\n Chain,\n ChainId,\n ChainToChainId,\n SwapKitError,\n WalletOption,\n createWallet,\n filterSupportedChains,\n} from \"@swapkit/helpers\";\nimport { chainRegistry } from \"./chainRegistry\";\n\nconst keplrSupportedChainIds = [ChainId.Cosmos, ChainId.Kujira, ChainId.THORChain] as const;\n\nexport const keplrWallet = createWallet({\n name: \"connectKeplr\",\n supportedChains: [Chain.Cosmos, Chain.Kujira, Chain.THORChain],\n connect: ({ addChain, supportedChains }) =>\n async function connectKeplr(\n chains: Chain[],\n walletType: WalletOption.KEPLR | WalletOption.LEAP = WalletOption.KEPLR,\n ) {\n const extensionKey = walletType === WalletOption.LEAP ? \"leap\" : \"keplr\";\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n const keplrClient = window[extensionKey];\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const chainId = ChainToChainId[chain] as (typeof keplrSupportedChainIds)[number];\n\n if (!keplrSupportedChainIds.includes(chainId)) {\n const chainConfig = chainRegistry.get(chainId);\n if (!chainConfig) throw new SwapKitError(\"wallet_keplr_chain_not_supported\", { chain });\n\n await keplrClient.experimentalSuggestChain(chainConfig);\n }\n\n keplrClient?.enable(chainId);\n const signer = keplrClient?.getOfflineSignerOnlyAmino(chainId);\n if (!signer) throw new SwapKitError(\"wallet_keplr_signer_not_found\");\n\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const accounts = await signer.getAccounts();\n if (!accounts?.[0]?.address) throw new SwapKitError(\"wallet_keplr_no_accounts\");\n\n const [{ address }] = accounts;\n const toolbox = getCosmosToolbox(chain, { signer });\n\n addChain({ ...toolbox, chain, address, walletType });\n }),\n );\n\n return true;\n },\n});\n",
|
|
6
6
|
"import type { ChainInfo } from \"@keplr-wallet/types\";\nimport { ChainId } from \"@swapkit/helpers\";\n\nexport const chainRegistry = new Map<ChainId, ChainInfo>([\n [\n ChainId.Kujira,\n {\n chainId: \"kaiyo-1\",\n chainName: \"Kujira\",\n chainSymbolImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/chain.png\",\n rpc: \"https://kujira-rpc.nodes.defiantlabs.net\",\n rest: \"https://rest.cosmos.directory/kujira/\",\n nodeProvider: {\n name: \"PFC\",\n email: \"pfc-validator@protonmail.com\",\n website: \"https://pfc.zone/\",\n },\n bip44: {\n coinType: 118,\n },\n bech32Config: {\n bech32PrefixAccAddr: \"kujira\",\n bech32PrefixAccPub: \"kujirapub\",\n bech32PrefixValAddr: \"kujiravaloper\",\n bech32PrefixValPub: \"kujiravaloperpub\",\n bech32PrefixConsAddr: \"kujiravalcons\",\n bech32PrefixConsPub: \"kujiravalconspub\",\n },\n currencies: [\n {\n coinDenom: \"KUJI\",\n coinMinimalDenom: \"ukuji\",\n coinDecimals: 6,\n coinGeckoId: \"kujira\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png\",\n },\n {\n coinDenom: \"USK\",\n coinMinimalDenom:\n \"factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk\",\n coinDecimals: 6,\n coinGeckoId: \"usk\",\n },\n {\n coinDenom: \"MNTA\",\n coinMinimalDenom: \"factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta\",\n coinDecimals: 6,\n coinGeckoId: \"mantadao\",\n },\n {\n coinDenom: \"bKUJI\",\n coinMinimalDenom:\n \"factory/kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv/boneKuji\",\n coinDecimals: 6,\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/factory/kujira15e8q5wzlk5k38gjxlhse3vu6vqnafysncx2ltexd6y9gx50vuj2qpt7dgv/bKUJI.png\",\n },\n {\n coinDenom: \"AQLA\",\n coinMinimalDenom: \"factory/kujira1xe0awk5planmtsmjel5xtx2hzhqdw5p8z66yqd/uaqla\",\n coinDecimals: 6,\n coinGeckoId: \"aqualibre\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/factory/kujira1xe0awk5planmtsmjel5xtx2hzhqdw5p8z66yqd/AQLA.png\",\n },\n ],\n feeCurrencies: [\n {\n coinDenom: \"KUJI\",\n coinMinimalDenom: \"ukuji\",\n coinDecimals: 6,\n coinGeckoId: \"kujira\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png\",\n },\n {\n coinDenom: \"USK\",\n coinMinimalDenom:\n \"factory/kujira1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luase444a7/uusk\",\n coinDecimals: 6,\n coinGeckoId: \"usk\",\n },\n {\n coinDenom: \"axlUSDC\",\n coinMinimalDenom: \"ibc/295548A78785A1007F232DE286149A6FF512F180AF5657780FC89C009E2C348F\",\n coinDecimals: 6,\n coinGeckoId: \"usd-coin\",\n },\n {\n coinDenom: \"ATOM\",\n coinMinimalDenom: \"ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2\",\n coinDecimals: 6,\n coinGeckoId: \"cosmos\",\n },\n {\n coinDenom: \"OSMO\",\n coinMinimalDenom: \"ibc/47BD209179859CDE4A2806763D7189B6E6FE13A17880FE2B42DE1E6C1E329E23\",\n coinDecimals: 6,\n coinGeckoId: \"osmosis\",\n },\n {\n coinDenom: \"CMDX\",\n coinMinimalDenom: \"ibc/3607EB5B5E64DD1C0E12E07F077FF470D5BC4706AFCBC98FE1BA960E5AE4CE07\",\n coinDecimals: 6,\n coinGeckoId: \"comdex\",\n },\n {\n coinDenom: \"EVMOS\",\n coinMinimalDenom: \"ibc/F3AA7EF362EC5E791FE78A0F4CCC69FEE1F9A7485EB1A8CAB3F6601C00522F10\",\n coinDecimals: 6,\n coinGeckoId: \"evmos\",\n },\n {\n coinDenom: \"JUNO\",\n coinMinimalDenom: \"ibc/EFF323CC632EC4F747C61BCE238A758EFDB7699C3226565F7C20DA06509D59A5\",\n coinDecimals: 6,\n coinGeckoId: \"juno-network\",\n },\n {\n coinDenom: \"MNTA\",\n coinMinimalDenom: \"factory/kujira1643jxg8wasy5cfcn7xm8rd742yeazcksqlg4d7/umnta\",\n coinDecimals: 6,\n coinGeckoId: \"mantadao\",\n },\n {\n coinDenom: \"SCRT\",\n coinMinimalDenom: \"ibc/A358D7F19237777AF6D8AD0E0F53268F8B18AE8A53ED318095C14D6D7F3B2DB5\",\n coinDecimals: 6,\n coinGeckoId: \"secret\",\n },\n {\n coinDenom: \"STARS\",\n coinMinimalDenom: \"ibc/4F393C3FCA4190C0A6756CE7F6D897D5D1BE57D6CCB80D0BC87393566A7B6602\",\n coinDecimals: 6,\n coinGeckoId: \"stargaze\",\n },\n {\n coinDenom: \"wAVAX\",\n coinMinimalDenom: \"ibc/004EBF085BBED1029326D56BE8A2E67C08CECE670A94AC1947DF413EF5130EB2\",\n coinDecimals: 18,\n coinGeckoId: \"avalanche-2\",\n },\n {\n coinDenom: \"wETH\",\n coinMinimalDenom: \"ibc/1B38805B1C75352B28169284F96DF56BDEBD9E8FAC005BDCC8CF0378C82AA8E7\",\n coinDecimals: 18,\n coinGeckoId: \"ethereum\",\n },\n ],\n stakeCurrency: {\n coinDenom: \"KUJI\",\n coinMinimalDenom: \"ukuji\",\n coinDecimals: 6,\n coinGeckoId: \"kujira\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/kaiyo/ukuji.png\",\n },\n features: [\"cosmwasm\"],\n },\n ],\n [\n ChainId.THORChain,\n {\n chainId: \"thorchain-1\",\n chainName: \"THORChain\",\n chainSymbolImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/chain.png\",\n rpc: \"https://rpc-thorchain.keplr.app\",\n rest: \"https://lcd-thorchain.keplr.app\",\n bip44: {\n coinType: 931,\n },\n bech32Config: {\n bech32PrefixAccAddr: \"thor\",\n bech32PrefixAccPub: \"thorpub\",\n bech32PrefixValAddr: \"thorvaloper\",\n bech32PrefixValPub: \"thorvaloperpub\",\n bech32PrefixConsAddr: \"thorvalcons\",\n bech32PrefixConsPub: \"thorvalconspub\",\n },\n currencies: [\n {\n coinDenom: \"RUNE\",\n coinMinimalDenom: \"rune\",\n coinDecimals: 8,\n coinGeckoId: \"thorchain\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/rune.png\",\n },\n ],\n feeCurrencies: [\n {\n coinDenom: \"RUNE\",\n coinMinimalDenom: \"rune\",\n coinDecimals: 8,\n coinGeckoId: \"thorchain\",\n coinImageUrl:\n \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/thorchain/rune.png\",\n gasPriceStep: {\n low: 0.02,\n average: 0.02,\n high: 0.03,\n },\n },\n ],\n features: [],\n },\n ],\n]);\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "mDAAA,gBACE,aACA,oBACA,kBACA,kBACA,2BACA,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "mDAAA,gBACE,aACA,oBACA,kBACA,kBACA,kBACA,2BACA,yBCNF,kBAAS,yBAEF,IAAM,EAAgB,IAAI,IAAwB,CACvD,CACE,EAAQ,OACR,CACE,QAAS,UACT,UAAW,SACX,oBACE,gGACF,IAAK,2CACL,KAAM,wCACN,aAAc,CACZ,KAAM,MACN,MAAO,+BACP,QAAS,mBACX,EACA,MAAO,CACL,SAAU,GACZ,EACA,aAAc,CACZ,oBAAqB,SACrB,mBAAoB,YACpB,oBAAqB,gBACrB,mBAAoB,mBACpB,qBAAsB,gBACtB,oBAAqB,kBACvB,EACA,WAAY,CACV,CACE,UAAW,OACX,iBAAkB,QAClB,aAAc,EACd,YAAa,SACb,aACE,+FACJ,EACA,CACE,UAAW,MACX,iBACE,iFACF,aAAc,EACd,YAAa,KACf,EACA,CACE,UAAW,OACX,iBAAkB,8DAClB,aAAc,EACd,YAAa,UACf,EACA,CACE,UAAW,QACX,iBACE,qFACF,aAAc,EACd,aACE,yKACJ,EACA,CACE,UAAW,OACX,iBAAkB,8DAClB,aAAc,EACd,YAAa,YACb,aACE,oJACJ,CACF,EACA,cAAe,CACb,CACE,UAAW,OACX,iBAAkB,QAClB,aAAc,EACd,YAAa,SACb,aACE,+FACJ,EACA,CACE,UAAW,MACX,iBACE,iFACF,aAAc,EACd,YAAa,KACf,EACA,CACE,UAAW,UACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,UACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,QACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,SACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,QACf,EACA,CACE,UAAW,QACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,OACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,cACf,EACA,CACE,UAAW,OACX,iBAAkB,8DAClB,aAAc,EACd,YAAa,UACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,QACf,EACA,CACE,UAAW,QACX,iBAAkB,uEAClB,aAAc,EACd,YAAa,UACf,EACA,CACE,UAAW,QACX,iBAAkB,uEAClB,aAAc,GACd,YAAa,aACf,EACA,CACE,UAAW,OACX,iBAAkB,uEAClB,aAAc,GACd,YAAa,UACf,CACF,EACA,cAAe,CACb,UAAW,OACX,iBAAkB,QAClB,aAAc,EACd,YAAa,SACb,aACE,+FACJ,EACA,SAAU,CAAC,UAAU,CACvB,CACF,EACA,CACE,EAAQ,UACR,CACE,QAAS,cACT,UAAW,YACX,oBACE,oGACF,IAAK,kCACL,KAAM,kCACN,MAAO,CACL,SAAU,GACZ,EACA,aAAc,CACZ,oBAAqB,OACrB,mBAAoB,UACpB,oBAAqB,cACrB,mBAAoB,iBACpB,qBAAsB,cACtB,oBAAqB,gBACvB,EACA,WAAY,CACV,CACE,UAAW,OACX,iBAAkB,OAClB,aAAc,EACd,YAAa,YACb,aACE,kGACJ,CACF,EACA,cAAe,CACb,CACE,UAAW,OACX,iBAAkB,OAClB,aAAc,EACd,YAAa,YACb,aACE,mGACF,aAAc,CACZ,IAAK,KACL,QAAS,KACT,KAAM,IACR,CACF,CACF,EACA,SAAU,CAAC,CACb,CACF,CACF,CAAC,EDvMD,IAAM,EAAyB,CAAC,EAAQ,OAAQ,EAAQ,OAAQ,EAAQ,SAAS,EAEpE,EAAc,EAAa,CACtC,KAAM,eACN,gBAAiB,CAAC,EAAM,OAAQ,EAAM,OAAQ,EAAM,SAAS,EAC7D,QAAS,EAAG,WAAU,qBACpB,eAAe,CAAY,CACzB,EACA,EAAqD,EAAa,MAClE,CACA,IAAM,EAAe,IAAe,EAAa,KAAO,OAAS,QAC3D,EAAiB,EAAsB,CAAE,SAAQ,kBAAiB,YAAW,CAAC,EAC9E,EAAc,OAAO,GA6B3B,OA3BA,MAAM,QAAQ,IACZ,EAAe,IAAI,MAAO,IAAU,CAClC,IAAM,EAAU,EAAe,GAE/B,IAAK,EAAuB,SAAS,CAAO,EAAG,CAC7C,IAAM,EAAc,EAAc,IAAI,CAAO,EAC7C,IAAK,EAAa,MAAM,IAAI,EAAa,mCAAoC,CAAE,OAAM,CAAC,EAEtF,MAAM,EAAY,yBAAyB,CAAW,EAGxD,GAAa,OAAO,CAAO,EAC3B,IAAM,EAAS,GAAa,0BAA0B,CAAO,EAC7D,IAAK,EAAQ,MAAM,IAAI,EAAa,+BAA+B,EAEnE,IAAQ,oBAAqB,KAAa,qCAEpC,EAAW,MAAM,EAAO,YAAY,EAC1C,IAAK,IAAW,IAAI,QAAS,MAAM,IAAI,EAAa,0BAA0B,EAE9E,KAAS,YAAa,EAChB,EAAU,EAAiB,EAAO,CAAE,QAAO,CAAC,EAElD,EAAS,IAAK,EAAS,QAAO,UAAS,YAAW,CAAC,EACpD,CACH,EAEO,GAEb,CAAC",
|
|
9
|
+
"debugId": "6CE237E8BFE52E3164756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _={};E(_,{validatePhrase:()=>K,keystoreWallet:()=>x,generatePhrase:()=>P,encryptToKeyStore:()=>B,decryptFromKeystore:()=>T,KEYSTORE_SUPPORTED_CHAINS:()=>A});module.exports=D(_);var t=require("@swapkit/helpers");var o=require("node:crypto"),h=require("@scure/bip39"),d=require("@scure/bip39/wordlists/english");async function g(r){let{blake2bFinal:c,blake2bInit:p,blake2bUpdate:i}=(await import("blakejs")).default,a=r;if(!(a instanceof Buffer))a=Buffer.from(a,"hex");let n=p(32);return i(n,a),Array.from(c(n)).map((e)=>e<16?`0${e.toString(16)}`:e.toString(16)).join("")}async function B(r,c){let i=o.randomBytes(16),a=o.randomBytes(32),n={c:262144,prf:"hmac-sha256",dklen:32,salt:a.toString("hex")},e=o.pbkdf2Sync(c,a,n.c,n.dklen,"sha256"),f=o.createCipheriv("aes-128-ctr",e.subarray(0,16),i),s=Buffer.concat([f.update(Buffer.from(r,"utf8")),f.final()]),l=Buffer.concat([e.subarray(16,32),Buffer.from(s)]),m=await g(l);return{meta:"xchain-keystore",version:1,crypto:{cipher:"aes-128-ctr",cipherparams:{iv:i.toString("hex")},ciphertext:s.toString("hex"),kdf:"pbkdf2",kdfparams:n,mac:m}}}function P(r=12){return h.generateMnemonic(d.wordlist,r===12?128:256)}function K(r){return h.validateMnemonic(r,d.wordlist)}async function T(r,c){let{SwapKitError:p}=await import("@swapkit/helpers");switch(r.version){case 1:{let i=r.crypto.kdfparams,a=Buffer.from(i.salt,"hex"),n=o.pbkdf2Sync(c,a,i.c,i.dklen,"sha256"),e=Buffer.from(r.crypto.ciphertext,"hex"),f=Buffer.concat([n.subarray(16,32),e]);if(await g(f)!==r.crypto.mac)throw new p("wallet_keystore_invalid_password");let l=o.createDecipheriv(r.crypto.cipher,n.subarray(0,16),Buffer.from(r.crypto.cipherparams.iv,"hex"));return Buffer.concat([l.update(e),l.final()]).toString("utf8")}default:throw new p("wallet_keystore_unsupported_version")}}var x=t.createWallet({name:"connectKeystore",walletType:t.WalletOption.KEYSTORE,supportedChains:[...t.EVMChains,...t.UTXOChains,...t.CosmosChains,t.Chain.Polkadot,t.Chain.Chainflip,t.Chain.Ripple,t.Chain.Solana,t.Chain.Tron,t.Chain.Near],connect:({addChain:r,supportedChains:c,walletType:p})=>async function i(a,n,e){let f=t.filterSupportedChains({chains:a,supportedChains:c,walletType:p});return await Promise.all(f.map(async(s)=>{let l=typeof e==="number"?e:0,m=e&&typeof e==="object"?e[s]:void 0,v=t.NetworkDerivationPath[s].slice(0,s===t.Chain.Solana?4:5),b=m||t.updateDerivationPath(v,{index:l}),{getToolbox:k}=await import("@swapkit/toolboxes"),y=await k(s,{phrase:n,derivationPath:b}),S=await y.getAddress()||"",C={...y,address:S};r({...C,chain:s,walletType:t.WalletOption.KEYSTORE})})),!0}}),A=w(x);
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=8B787A2A3639BA0C64756E2164756E21
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/keystore/index.ts", "../src/keystore/helpers.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n NetworkDerivationPath,\n UTXOChains,\n WalletOption,\n createWallet,\n filterSupportedChains,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { getWalletSupportedChains } from \"../utils\";\n\nexport const keystoreWallet = createWallet({\n name: \"connectKeystore\",\n walletType: WalletOption.KEYSTORE,\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const derivationPathIndex =\n typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap ||\n updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const { getToolbox } = await import(\"@swapkit/toolboxes\");\n\n const toolbox = await getToolbox(chain, { phrase, derivationPath });\n const address = (await toolbox.getAddress()) || \"\";\n\n const wallet = { ...toolbox, address };\n\n addChain({ ...wallet, chain, walletType: WalletOption.KEYSTORE });\n }),\n );\n\n return true;\n },\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport * from \"./helpers\";\n",
|
|
6
|
-
"import { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const { blake2bFinal, blake2bInit, blake2bUpdate } = await import(\"blakejs\");\n let data = initData;\n\n if (!(data instanceof Buffer)) {\n // @ts-ignore\n data = Buffer.from(data, \"hex\");\n }\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const
|
|
5
|
+
"import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n NetworkDerivationPath,\n UTXOChains,\n WalletOption,\n createWallet,\n filterSupportedChains,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { getWalletSupportedChains } from \"../utils\";\n\nexport const keystoreWallet = createWallet({\n name: \"connectKeystore\",\n walletType: WalletOption.KEYSTORE,\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n Chain.Tron,\n Chain.Near,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const derivationPathIndex =\n typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap ||\n updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const { getToolbox } = await import(\"@swapkit/toolboxes\");\n\n const toolbox = await getToolbox(chain, { phrase, derivationPath });\n const address = (await toolbox.getAddress()) || \"\";\n\n const wallet = { ...toolbox, address };\n\n addChain({ ...wallet, chain, walletType: WalletOption.KEYSTORE });\n }),\n );\n\n return true;\n },\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport * from \"./helpers\";\n",
|
|
6
|
+
"import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from \"node:crypto\";\nimport { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const { blake2bFinal, blake2bInit, blake2bUpdate } = (await import(\"blakejs\")).default;\n let data = initData;\n\n if (!(data instanceof Buffer)) {\n // @ts-ignore\n data = Buffer.from(data, \"hex\");\n }\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const cipher = \"aes-128-ctr\";\n const iv = randomBytes(16);\n const salt = randomBytes(32);\n const kdfParams = { c: 262144, prf: \"hmac-sha256\", dklen: 32, salt: salt.toString(\"hex\") };\n\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n const cipherIV = createCipheriv(cipher, derivedKey.subarray(0, 16), iv);\n const ciphertext = Buffer.concat([\n cipherIV.update(Buffer.from(phrase, \"utf8\")),\n cipherIV.final(),\n ]);\n const initData = Buffer.concat([derivedKey.subarray(16, 32), Buffer.from(ciphertext)]);\n const mac = await blake256(initData);\n\n return {\n meta: \"xchain-keystore\",\n version: 1,\n crypto: {\n cipher,\n cipherparams: { iv: iv.toString(\"hex\") },\n ciphertext: ciphertext.toString(\"hex\"),\n kdf: \"pbkdf2\",\n kdfparams: kdfParams,\n mac,\n },\n };\n}\n\nexport function generatePhrase(size: 12 | 24 = 12) {\n return generateMnemonic(wordlist, size === 12 ? 128 : 256);\n}\n\nexport function validatePhrase(phrase: string) {\n return validateMnemonic(phrase, wordlist);\n}\n\nexport async function decryptFromKeystore(keystore: Keystore, password: string) {\n const { SwapKitError } = await import(\"@swapkit/helpers\");\n\n switch (keystore.version) {\n case 1: {\n const kdfParams = keystore.crypto.kdfparams;\n const salt = Buffer.from(kdfParams.salt, \"hex\");\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n\n const ciphertext = Buffer.from(keystore.crypto.ciphertext, \"hex\");\n const initData = Buffer.concat([derivedKey.subarray(16, 32), ciphertext]);\n const mac = await blake256(initData);\n\n if (mac !== keystore.crypto.mac) {\n throw new SwapKitError(\"wallet_keystore_invalid_password\");\n }\n\n const decipher = createDecipheriv(\n keystore.crypto.cipher,\n derivedKey.subarray(0, 16),\n Buffer.from(keystore.crypto.cipherparams.iv, \"hex\"),\n );\n\n const phrase = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n return phrase.toString(\"utf8\");\n }\n\n default:\n throw new SwapKitError(\"wallet_keystore_unsupported_version\");\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "qLAWO,IAXP,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "8B787A2A3639BA0C64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{A as v}from"../../chunk-th8ggrmx.js";import{C as m,D as h}from"../../chunk-qwd1kp32.js";import{Chain as c,CosmosChains as E,EVMChains as A,NetworkDerivationPath as _,UTXOChains as R,WalletOption as w,createWallet as U,filterSupportedChains as W,updateDerivationPath as F}from"@swapkit/helpers";import{createCipheriv as P,createDecipheriv as K,pbkdf2Sync as y,randomBytes as d}from"node:crypto";import{generateMnemonic as T,validateMnemonic as D}from"@scure/bip39";import{wordlist as g}from"@scure/bip39/wordlists/english";async function x(t){let{blake2bFinal:i,blake2bInit:s,blake2bUpdate:n}=(await import("blakejs")).default,e=t;if(!(e instanceof Buffer))e=Buffer.from(e,"hex");let a=s(32);return n(a,e),Array.from(i(a)).map((r)=>r<16?`0${r.toString(16)}`:r.toString(16)).join("")}async function V(t,i){let n=d(16),e=d(32),a={c:262144,prf:"hmac-sha256",dklen:32,salt:e.toString("hex")},r=y(i,e,a.c,a.dklen,"sha256"),p=P("aes-128-ctr",r.subarray(0,16),n),o=Buffer.concat([p.update(Buffer.from(t,"utf8")),p.final()]),f=Buffer.concat([r.subarray(16,32),Buffer.from(o)]),l=await x(f);return{meta:"xchain-keystore",version:1,crypto:{cipher:"aes-128-ctr",cipherparams:{iv:n.toString("hex")},ciphertext:o.toString("hex"),kdf:"pbkdf2",kdfparams:a,mac:l}}}function H(t=12){return T(g,t===12?128:256)}function X(t){return D(t,g)}async function $(t,i){let{SwapKitError:s}=await import("@swapkit/helpers");switch(t.version){case 1:{let n=t.crypto.kdfparams,e=Buffer.from(n.salt,"hex"),a=y(i,e,n.c,n.dklen,"sha256"),r=Buffer.from(t.crypto.ciphertext,"hex"),p=Buffer.concat([a.subarray(16,32),r]);if(await x(p)!==t.crypto.mac)throw new s("wallet_keystore_invalid_password");let f=K(t.crypto.cipher,a.subarray(0,16),Buffer.from(t.crypto.cipherparams.iv,"hex"));return Buffer.concat([f.update(r),f.final()]).toString("utf8")}default:throw new s("wallet_keystore_unsupported_version")}}var N=U({name:"connectKeystore",walletType:w.KEYSTORE,supportedChains:[...A,...R,...E,c.Polkadot,c.Chainflip,c.Ripple,c.Solana,c.Tron,c.Near],connect:({addChain:t,supportedChains:i,walletType:s})=>async function n(e,a,r){let p=W({chains:e,supportedChains:i,walletType:s});return await Promise.all(p.map(async(o)=>{let f=typeof r==="number"?r:0,l=r&&typeof r==="object"?r[o]:void 0,b=_[o].slice(0,o===c.Solana?4:5),k=l||F(b,{index:f}),{getToolbox:S}=await import("@swapkit/toolboxes"),u=await S(o,{phrase:a,derivationPath:k}),C=await u.getAddress()||"",B={...u,address:C};t({...B,chain:o,walletType:w.KEYSTORE})})),!0}}),I=v(N);export{X as validatePhrase,N as keystoreWallet,H as generatePhrase,V as encryptToKeyStore,$ as decryptFromKeystore,I as KEYSTORE_SUPPORTED_CHAINS};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=111FA87A0901E32464756E2164756E21
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/keystore/index.ts", "../src/keystore/helpers.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n NetworkDerivationPath,\n UTXOChains,\n WalletOption,\n createWallet,\n filterSupportedChains,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { getWalletSupportedChains } from \"../utils\";\n\nexport const keystoreWallet = createWallet({\n name: \"connectKeystore\",\n walletType: WalletOption.KEYSTORE,\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const derivationPathIndex =\n typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap ||\n updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const { getToolbox } = await import(\"@swapkit/toolboxes\");\n\n const toolbox = await getToolbox(chain, { phrase, derivationPath });\n const address = (await toolbox.getAddress()) || \"\";\n\n const wallet = { ...toolbox, address };\n\n addChain({ ...wallet, chain, walletType: WalletOption.KEYSTORE });\n }),\n );\n\n return true;\n },\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport * from \"./helpers\";\n",
|
|
6
|
-
"import { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const { blake2bFinal, blake2bInit, blake2bUpdate } = await import(\"blakejs\");\n let data = initData;\n\n if (!(data instanceof Buffer)) {\n // @ts-ignore\n data = Buffer.from(data, \"hex\");\n }\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const
|
|
5
|
+
"import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n NetworkDerivationPath,\n UTXOChains,\n WalletOption,\n createWallet,\n filterSupportedChains,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { getWalletSupportedChains } from \"../utils\";\n\nexport const keystoreWallet = createWallet({\n name: \"connectKeystore\",\n walletType: WalletOption.KEYSTORE,\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n Chain.Tron,\n Chain.Near,\n ],\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const filteredChains = filterSupportedChains({ chains, supportedChains, walletType });\n\n await Promise.all(\n filteredChains.map(async (chain) => {\n const derivationPathIndex =\n typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap ||\n updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const { getToolbox } = await import(\"@swapkit/toolboxes\");\n\n const toolbox = await getToolbox(chain, { phrase, derivationPath });\n const address = (await toolbox.getAddress()) || \"\";\n\n const wallet = { ...toolbox, address };\n\n addChain({ ...wallet, chain, walletType: WalletOption.KEYSTORE });\n }),\n );\n\n return true;\n },\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport * from \"./helpers\";\n",
|
|
6
|
+
"import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from \"node:crypto\";\nimport { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const { blake2bFinal, blake2bInit, blake2bUpdate } = (await import(\"blakejs\")).default;\n let data = initData;\n\n if (!(data instanceof Buffer)) {\n // @ts-ignore\n data = Buffer.from(data, \"hex\");\n }\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const cipher = \"aes-128-ctr\";\n const iv = randomBytes(16);\n const salt = randomBytes(32);\n const kdfParams = { c: 262144, prf: \"hmac-sha256\", dklen: 32, salt: salt.toString(\"hex\") };\n\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n const cipherIV = createCipheriv(cipher, derivedKey.subarray(0, 16), iv);\n const ciphertext = Buffer.concat([\n cipherIV.update(Buffer.from(phrase, \"utf8\")),\n cipherIV.final(),\n ]);\n const initData = Buffer.concat([derivedKey.subarray(16, 32), Buffer.from(ciphertext)]);\n const mac = await blake256(initData);\n\n return {\n meta: \"xchain-keystore\",\n version: 1,\n crypto: {\n cipher,\n cipherparams: { iv: iv.toString(\"hex\") },\n ciphertext: ciphertext.toString(\"hex\"),\n kdf: \"pbkdf2\",\n kdfparams: kdfParams,\n mac,\n },\n };\n}\n\nexport function generatePhrase(size: 12 | 24 = 12) {\n return generateMnemonic(wordlist, size === 12 ? 128 : 256);\n}\n\nexport function validatePhrase(phrase: string) {\n return validateMnemonic(phrase, wordlist);\n}\n\nexport async function decryptFromKeystore(keystore: Keystore, password: string) {\n const { SwapKitError } = await import(\"@swapkit/helpers\");\n\n switch (keystore.version) {\n case 1: {\n const kdfParams = keystore.crypto.kdfparams;\n const salt = Buffer.from(kdfParams.salt, \"hex\");\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n\n const ciphertext = Buffer.from(keystore.crypto.ciphertext, \"hex\");\n const initData = Buffer.concat([derivedKey.subarray(16, 32), ciphertext]);\n const mac = await blake256(initData);\n\n if (mac !== keystore.crypto.mac) {\n throw new SwapKitError(\"wallet_keystore_invalid_password\");\n }\n\n const decipher = createDecipheriv(\n keystore.crypto.cipher,\n derivedKey.subarray(0, 16),\n Buffer.from(keystore.crypto.cipherparams.iv, \"hex\"),\n );\n\n const phrase = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n return phrase.toString(\"utf8\");\n }\n\n default:\n throw new SwapKitError(\"wallet_keystore_unsupported_version\");\n }\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "iGAAA,cACE,kBACA,eAEA,2BACA,gBACA,kBACA,kBACA,2BACA,0BACA,yBCVF,2BAAS,sBAAkB,qBAC3B,mBAAS,uCAeT,eAAe,CAAQ,CAAC,EAA2B,CACjD,IAAQ,eAAc,cAAa,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "111FA87A0901E32464756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e0={};t0(e0,{ledgerWallet:()=>K0,LEDGER_SUPPORTED_CHAINS:()=>n0});module.exports=o0(e0);var J=require("@swapkit/helpers");var H=require("@swapkit/helpers"),E=async({chain:L,ledgerClient:_})=>{if(!_)return"";switch(L){case H.Chain.Cosmos:case H.Chain.THORChain:return _.connect();case H.Chain.Ethereum:case H.Chain.BinanceSmartChain:case H.Chain.Avalanche:case H.Chain.Polygon:case H.Chain.Arbitrum:case H.Chain.Optimism:case H.Chain.Base:return _.getAddress();case H.Chain.Bitcoin:case H.Chain.BitcoinCash:case H.Chain.Dash:case H.Chain.Dogecoin:case H.Chain.Litecoin:{let O=_;await O.connect();let B=await O.getAddress();return L===H.Chain.BitcoinCash?B.replace("bitcoincash:",""):B}default:throw new H.SwapKitError("wallet_chain_not_supported",{wallet:H.WalletOption.LEDGER,chain:L})}};var Y=require("@swapkit/helpers");var x=require("@swapkit/helpers");var w=require("@swapkit/helpers");var C=85,d=250;var K={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},k={INIT:0,ADD:1,LAST:2},i={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},f={JSON:0},R={NoError:36864},G0={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 U(L){if(L in G0)return G0[L];return`Unknown Status Code: ${L}`}function h0(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function M(L){if(L){if(h0(L)){if(Object.prototype.hasOwnProperty.call(L,"statusCode"))return{return_code:L.statusCode,error_message:U(L.statusCode)};if(Object.prototype.hasOwnProperty.call(L,"return_code")&&Object.prototype.hasOwnProperty.call(L,"error_message"))return L}return{return_code:65535,error_message:L.toString()}}return{return_code:65535,error_message:L.toString()}}async function p(L){return L.send(85,K.GET_VERSION,0,0).then((_)=>{let O=_.slice(-2),B=O[0]*256+O[1],G=0;if(_.length>=9)G=(_[5]<<24)+(_[6]<<16)+(_[7]<<8)+(_[8]<<0);return{return_code:B,error_message:U(B),test_mode:_[0]!==0,major:_[1],minor:_[2],patch:_[3],device_locked:_[4]===1,target_id:G.toString(16)}},M)}function B0(L){if(L==null||L.length<3)throw new Error("Invalid path.");if(L.length>10)throw new Error("Invalid path. Length should be <= 10");let _=Buffer.alloc(1+4*L.length);_.writeUInt8(L.length,0);for(let O=0;O<L.length;O+=1){let B=L[O]||0;if(O<3)B|=2147483648;_.writeInt32LE(B,1+O*4)}return _}async function o(L,_,O,B,G=f.JSON){return L.transport.send(C,K.SIGN_SECP256K1,_,G,B,[R.NoError,27012,27264]).then((j)=>{let X=j.slice(-2),F=X[0]*256+X[1],W=U(F);if(F===27264||F===27012)W=`${W} : ${j.slice(0,j.length-2).toString("ascii")}`;let $=null;if(j.length>2)$=j.slice(0,j.length-2);return{signature:$,return_code:F,error_message:W}},M)}function d0(L){if(L.length!==65)throw new Error("decompressed public key length should be 65 bytes");let _=L.slice(33,65),O=Buffer.from([2+(_[_.length-1]&1)]);return Buffer.concat([O,L.slice(1,33)])}async function j0(L,_){return L.transport.send(C,K.INS_PUBLIC_KEY_SECP256K1,0,0,_,[R.NoError]).then((O)=>{let B=O.slice(-2),G=B[0]*256+B[1],j=Buffer.from(O.slice(0,65));return{pk:j,compressed_pk:d0(j),return_code:G,error_message:U(G)}},M)}function F0(L){if(!L||L.length!==5)throw new Error("Invalid path.");let _=Buffer.alloc(20);return _.writeUInt32LE(2147483648+L[0],0),_.writeUInt32LE(2147483648+L[1],4),_.writeUInt32LE(2147483648+L[2],8),_.writeUInt32LE(L[3],12),_.writeUInt32LE(L[4],16),_}function X0(L,_,O,B,G=f.JSON){let j=k.ADD;if(_===1)j=k.INIT;if(_===O)j=k.LAST;return o(L,j,0,B,G)}async function J0(L,_){return L.transport.send(C,K.GET_ADDR_SECP256K1,0,0,_,[R.NoError]).then((O)=>{let B=O.slice(-2),G=B[0]*256+B[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(O.slice(0,33)),return_code:G,error_message:U(G)}},M)}class l{transport;versionResponse;constructor(L){if(!L)throw new Error("Transport has not been defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new Error("Invalid HRP");let _=Buffer.alloc(1+L.length);return _.writeUInt8(L.length,0),_.write(L,1),_}async serializePath(L){if(this.versionResponse=await p(this.transport),this.versionResponse.return_code!==R.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return B0(L);case 2:return F0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,_){let O=await this.serializePath(L),B=[];B.push(O);for(let G=0;G<_.length;G+=d){let j=G+d;if(G>_.length)j=_.length;B.push(_.slice(G,j))}return B}async getVersion(){try{return this.versionResponse=await p(this.transport),this.versionResponse}catch(L){return M(L)}}async appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let _=L.slice(-2),O=_[0]*256+_[1],B="",G="",j=0,X=0;if(L[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let F=L[1];B=L.slice(2,2+F).toString("ascii");let W=2+F,$=L[W];W+=1,G=L.slice(W,W+$).toString("ascii"),W+=$;let Q=L[W];return W+=1,j=Q,X=L[W],{return_code:O,error_message:U(O),appName:B,appVersion:G,flagLen:j,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}},M)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[R.NoError,28160]).then((L)=>{let _=L.slice(-2),O=_[0]*256+_[1];if(O===28160)return{return_code:O,error_message:"This command is only available in the Dashboard"};let B=L.slice(0,4).toString("hex"),G=4,j=L[G];G+=1;let X=L.slice(G,G+j).toString();G+=j;let F=L[G];G+=1;let W=L.slice(G,G+F).toString("hex");G+=F;let $=L[G];G+=1;let Q=L.slice(G,G+$);if(Q[$-1]===0)Q=L.slice(G,G+$-1);let T=Q.toString();return{return_code:O,error_message:U(O),targetId:B,seVersion:X,flag:W,mcuVersion:T}},M)}async publicKey(L){try{let _=await this.serializePath(L);switch(this.versionResponse.major){case 1:return j0(this,_);case 2:{let O=Buffer.concat([l.serializeHRP("thor"),_]);return J0(this,O)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(_){return M(_)}}async getAddressAndPubKey(L,_,O=!1){return this.serializePath(L).then((B)=>{let G=Buffer.concat([l.serializeHRP(_),B]);return this.transport.send(C,K.GET_ADDR_SECP256K1,O?i.SHOW_ADDRESS_IN_DEVICE:i.ONLY_RETRIEVE,0,G,[R.NoError]).then((j)=>{let X=j.slice(-2),F=X[0]*256+X[1],W=Buffer.from(j.slice(0,33));return{bech32_address:Buffer.from(j.slice(33,-2)).toString(),compressed_pk:W,return_code:F,error_message:U(F)}},M)}).catch((B)=>M(B))}showAddressAndPubKey(L,_){return this.getAddressAndPubKey(L,_,!0)}signSendChunk(L,_,O,B=f.JSON){switch(this.versionResponse.major){case 1:return o(this,L,_,O,B);case 2:return X0(this,L,_,O,B);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(L,_,O=f.JSON){let B=Buffer.from(_),G=[],j;try{G=await this.signGetChunks(L,B),j=await this.signSendChunk(1,G.length,G[0],O)}catch(F){M(F)}let X={return_code:j.return_code,error_message:j.error_message,signature:null};for(let F=1;F<G.length;F+=1)if(X=await this.signSendChunk(1+F,G.length,G[F],O),X.return_code!==R.NoError)break;return{return_code:X.return_code,error_message:X.error_message,signature:X.signature}}}var b=require("@swapkit/helpers"),t=()=>navigator?.usb,i0=async()=>{let L=t();if(typeof L?.getDevices!=="function")return[];let{ledgerUSBVendorId:_}=await import("@ledgerhq/devices"),B=(await L?.getDevices()).filter((G)=>G.vendorId===_);if(B.length>0)return B[0];return L?.requestDevice({filters:[{vendorId:_}]})},N=async()=>{let L=await i0();if(!L)throw new b.SwapKitError("wallet_ledger_device_not_found");if(await L.open(),L.configuration===null)await L.selectConfiguration(1);try{await L.reset()}catch{}let _=L.configurations[0].interfaces.find(({alternates:F})=>F.some(({interfaceClass:W})=>W===255));if(!_)throw await L.close(),new b.SwapKitError("wallet_ledger_connection_error");try{await L.claimInterface(_.interfaceNumber)}catch(F){throw await L.close(),new b.SwapKitError("wallet_ledger_connection_claimed",F)}let{default:O}=await import("@ledgerhq/hw-transport-webusb");if(!await O.isSupported())throw new Error("WebUSB not supported");let{DisconnectedDevice:G}=await import("@ledgerhq/errors"),j=new O(L,_.interfaceNumber),X=(F)=>{if(L===F.device)t()?.removeEventListener("disconnect",X),j._emitDisconnect(new G)};return t()?.addEventListener("disconnect",X),j};class V{ledgerTimeout=50000;derivationPath=w.NetworkDerivationPath.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await N():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new l(this.transport):this.ledgerApp;break}case"cosmos":{let{default:_}=await import("@ledgerhq/hw-app-cosmos");this.ledgerApp=L||!this.ledgerApp?new _(this.transport):this.ledgerApp}}return this.ledgerApp}catch(_){throw new w.SwapKitError("wallet_ledger_connection_error",_)}};validateResponse=(L,_)=>{switch(L){case w.LedgerErrorCode.NoError:return;case w.LedgerErrorCode.LockedDevice:throw new w.SwapKitError("wallet_ledger_device_locked",{message:`Ledger is locked: ${_}`});case w.LedgerErrorCode.TC_NotFound:throw new w.SwapKitError("wallet_ledger_device_not_found");default:{console.error(`Ledger error: ${L} ${_}`);break}}}}class n extends V{pubKey=null;derivationPath;constructor(L=x.NetworkDerivationPath.GAIA){super();this.chain="cosmos",this.derivationPath=x.derivationPathToString(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:_}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),_};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,_="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:O,error_message:B,signature:G}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(O,B),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:_,signature:G}]};signAmino=async(L,_)=>{await this.checkOrCreateTransportAndLedger(!0);let O=await this.getAccounts();if(O.findIndex((Q)=>Q.address===L)===-1)throw new Error(`Address ${L} not found in wallet`);let{encodeSecp256k1Signature:G,serializeSignDoc:j}=await import("@cosmjs/amino"),{Secp256k1Signature:X}=await import("@cosmjs/crypto"),F=j(_),W=await this.ledgerApp.sign(this.derivationPath,F);this.validateResponse(W.return_code,W.error_message);let $=X.fromDer(W.signature).toFixedLength();return{signed:_,signature:G(O[0].pubkey,$)}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}var m=require("@swapkit/helpers"),W0=require("ethers");class y extends W0.AbstractSigner{chainId=m.ChainId.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:_=m.NetworkDerivationPath.OP,chainId:O=m.ChainId.Optimism}){super(L);this.chainId=O||m.ChainId.Ethereum,this.derivationPath=typeof _==="string"?_:m.derivationPathToString(_),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new y({provider:L,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await N(),{default:_}=await import("@ledgerhq/hw-app-eth");this.ledgerApp=new _(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new Error("Could not get Address");return L.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(L)=>{let{Signature:_}=await import("ethers");await this.createTransportAndLedger();let O=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!O)throw new Error("Signing failed");return O.r=`0x${O.r}`,O.s=`0x${O.s}`,_.from(O).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new Error("No provider set");let _=await this.signTransaction(L);return await this.provider.broadcastTransaction(_)};signTypedData(){throw new Error("Method not implemented.")}signTransaction=async(L)=>{let{Transaction:_}=await import("ethers");await this.createTransportAndLedger();let O=await this.provider?.getTransactionCount(L.from||await this.getAddress()),B={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:L.nonce!==void 0?Number((L.nonce||O||0).toString()):O,to:L.to?.toString(),value:L.value,type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0},G=_.from(B).unsignedSerialized.slice(2),{ledgerService:j}=await import("@ledgerhq/hw-app-eth"),X=await j.resolveTransaction(G,{},{externalPlugins:!0,erc20:!0}),F=await this.ledgerApp?.signTransaction(this.derivationPath,G,X);if(!F)throw new Error("Could not sign transaction");let{r:W,s:$,v:Q}=F;return _.from({...B,signature:{v:Number(BigInt(Q)),r:`0x${W}`,s:`0x${$}`}}).serialized}}var $0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Ethereum,provider:L,derivationPath:_}),Q0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Avalanche,provider:L,derivationPath:_}),Y0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.BinanceSmartChain,provider:L,derivationPath:_}),Z0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Arbitrum,provider:L,derivationPath:_}),H0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Polygon,provider:L,derivationPath:_}),m0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Optimism,provider:L,derivationPath:_}),M0=({provider:L,derivationPath:_})=>new y({chainId:m.ChainId.Base,provider:L,derivationPath:_});var U0=require("@scure/base"),w0=require("@swapkit/helpers");var T0=require("@scure/base"),a=(L)=>{if(L.length<64)throw new Error("Invalid Signature: Too short");if(L[0]!==48)throw new Error("Invalid Ledger Signature TLV encoding: expected first byte 0x30");if(L[1]+2!==L.length)throw new Error("Invalid Signature: signature length does not match TLV");if(L[2]!==2)throw new Error("Invalid Ledger Signature TLV encoding: expected length type 0x02");let _=L[3],O=L.slice(4,_+4);if(O.length===33&&O[0]===0)O=O.slice(1,33);else if(O.length===33)throw new Error('Invalid signature: "r" too long');while(O.length<32)O.unshift(0);if(L[_+4]!==2)throw new Error("Invalid Ledger Signature TLV encoding: expected length type 0x02");let B=L[_+5];if(4+_+2+B!==L.length)throw new Error("Invalid Ledger Signature: TLV byte lengths do not match message length");let G=L.slice(_+6,L.length);if(G.length===33&&G[0]===0)G=G.slice(1,33);else if(G.length===33)throw new Error('Invalid signature: "s" too long');while(G.length<32)G.unshift(0);if(O.length!==32||G.length!==32)throw new Error("Invalid signatures: must be 32 bytes each");return T0.base64.encode(Buffer.concat([O,G]))};class s extends V{pubKey=null;derivationPath;constructor(L=w0.NetworkDerivationPath.THOR){super();this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:_}=await this.getAddressAndPubKey();return this.pubKey=U0.base64.encode(L),_};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,_="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:O,error_message:B,signature:G}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(O,B),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:_,signature:a(G)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:O,signature:B}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(_,O),a(B)}}var q=require("@swapkit/helpers");var p0=async({psbt:L,inputUtxos:_,btcApp:O,derivationPath:B},G)=>{let{Transaction:j}=await import("bitcoinjs-lib"),X=_.map((T)=>{let D=j.fromHex(T.txHex||"");return[O.splitTransaction(D.toHex(),D.hasWitnesses()),T.index,void 0,void 0]}),F=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),W=O.splitTransaction(F,!0),$=O.serializeTransactionOutputs(W).toString("hex"),Q={additionals:["bech32"],associatedKeysets:X.map(()=>B),inputs:X,outputScriptHex:$,segwit:!0,useTrustedInputForSegwit:!0};return O.createPaymentTransaction({...Q,...G})},A=({chain:L,additionalSignParams:_})=>{let O,B=null;async function G(X=!0){if(X&&!O)new q.SwapKitError("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
-
${JSON.stringify({checkBtcApp:
|
|
1
|
+
var WL={};XL(WL,{ledgerWallet:()=>K0,LEDGER_SUPPORTED_CHAINS:()=>BL});module.exports=TL(WL);var T=require("@swapkit/helpers");var j=require("@swapkit/helpers"),V=async({chain:L,ledgerClient:m})=>{if(!m)return"";switch(L){case j.Chain.Cosmos:case j.Chain.THORChain:return m.connect();case j.Chain.Ethereum:case j.Chain.BinanceSmartChain:case j.Chain.Avalanche:case j.Chain.Polygon:case j.Chain.Arbitrum:case j.Chain.Optimism:case j.Chain.Base:return m.getAddress();case j.Chain.Bitcoin:case j.Chain.BitcoinCash:case j.Chain.Dash:case j.Chain.Dogecoin:case j.Chain.Litecoin:{let _=m;await _.connect();let O=await _.getAddress();return L===j.Chain.BitcoinCash?O.replace("bitcoincash:",""):O}case j.Chain.Near:return await m.getAddress();case j.Chain.Ripple:return m.address;default:throw new j.SwapKitError("wallet_chain_not_supported",{wallet:j.WalletOption.LEDGER,chain:L})}};var $=require("@swapkit/helpers");var A=require("@swapkit/helpers");var w=require("@swapkit/helpers");var r=require("@swapkit/helpers");var E=85,p=250;var S={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},i={INIT:0,ADD:1,LAST:2},a={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},k={JSON:0},z={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(L){if(L in F0)return F0[L];return`Unknown Status Code: ${L}`}function s0(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function Z(L){if(L){if(s0(L)){if(Object.prototype.hasOwnProperty.call(L,"statusCode"))return{return_code:L.statusCode,error_message:H(L.statusCode)};if(Object.prototype.hasOwnProperty.call(L,"return_code")&&Object.prototype.hasOwnProperty.call(L,"error_message"))return L}return{return_code:65535,error_message:L.toString()}}return{return_code:65535,error_message:L.toString()}}async function s(L){return L.send(85,S.GET_VERSION,0,0).then((m)=>{let _=m.slice(-2),O=_[0]*256+_[1],y=0;if(m.length>=9)y=(m[5]<<24)+(m[6]<<16)+(m[7]<<8)+(m[8]<<0);return{return_code:O,error_message:H(O),test_mode:m[0]!==0,major:m[1],minor:m[2],patch:m[3],device_locked:m[4]===1,target_id:y.toString(16)}},Z)}var x=require("@swapkit/helpers");function R0(L){if(L==null||L.length<3)throw new x.SwapKitError("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new x.SwapKitError("wallet_ledger_invalid_params",{reason:"Path too long"});let m=Buffer.alloc(1+4*L.length);m.writeUInt8(L.length,0);for(let _=0;_<L.length;_+=1){let O=L[_]||0;if(_<3)O|=2147483648;m.writeInt32LE(O,1+_*4)}return m}async function e(L,m,_,O,y=k.JSON){return L.transport.send(E,S.SIGN_SECP256K1,m,y,O,[z.NoError,27012,27264]).then((X)=>{let G=X.slice(-2),B=G[0]*256+G[1],F=H(B);if(B===27264||B===27012)F=`${F} : ${X.slice(0,X.length-2).toString("ascii")}`;let R=null;if(X.length>2)R=X.slice(0,X.length-2);return{signature:R,return_code:B,error_message:F}},Z)}function e0(L){if(L.length!==65)throw new x.SwapKitError("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let m=L.slice(33,65),_=Buffer.from([2+(m[m.length-1]&1)]);return Buffer.concat([_,L.slice(1,33)])}async function W0(L,m){return L.transport.send(E,S.INS_PUBLIC_KEY_SECP256K1,0,0,m,[z.NoError]).then((_)=>{let O=_.slice(-2),y=O[0]*256+O[1],X=Buffer.from(_.slice(0,65));return{pk:X,compressed_pk:e0(X),return_code:y,error_message:H(y)}},Z)}function J0(L){if(!L||L.length!==5)throw new x.SwapKitError("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let m=Buffer.alloc(20);return m.writeUInt32LE(2147483648+L[0],0),m.writeUInt32LE(2147483648+L[1],4),m.writeUInt32LE(2147483648+L[2],8),m.writeUInt32LE(L[3],12),m.writeUInt32LE(L[4],16),m}function $0(L,m,_,O,y=k.JSON){let X=i.ADD;if(m===1)X=i.INIT;if(m===_)X=i.LAST;return e(L,X,0,O,y)}async function j0(L,m){return L.transport.send(E,S.GET_ADDR_SECP256K1,0,0,m,[z.NoError]).then((_)=>{let O=_.slice(-2),y=O[0]*256+O[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(_.slice(0,33)),return_code:y,error_message:H(y)}},Z)}class g{transport;versionResponse;constructor(L){if(!L)throw new r.SwapKitError("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new r.SwapKitError("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let m=Buffer.alloc(1+L.length);return m.writeUInt8(L.length,0),m.write(L,1),m}async serializePath(L){if(this.versionResponse=await s(this.transport),this.versionResponse.return_code!==z.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return R0(L);case 2:return J0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,m){let _=await this.serializePath(L),O=[];O.push(_);for(let y=0;y<m.length;y+=p){let X=y+p;if(y>m.length)X=m.length;O.push(m.slice(y,X))}return O}async getVersion(){try{return this.versionResponse=await s(this.transport),this.versionResponse}catch(L){return Z(L)}}async appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let m=L.slice(-2),_=m[0]*256+m[1],O="",y="",X=0,G=0;if(L[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let B=L[1];O=L.slice(2,2+B).toString("ascii");let F=2+B,R=L[F];F+=1,y=L.slice(F,F+R).toString("ascii"),F+=R;let J=L[F];return F+=1,X=J,G=L[F],{return_code:_,error_message:H(_),appName:O,appVersion:y,flagLen:X,flagsValue:G,flag_recovery:(G&1)!==0,flag_signed_mcu_code:(G&2)!==0,flag_onboarded:(G&4)!==0,flag_pin_validated:(G&128)!==0}},Z)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[z.NoError,28160]).then((L)=>{let m=L.slice(-2),_=m[0]*256+m[1];if(_===28160)return{return_code:_,error_message:"This command is only available in the Dashboard"};let O=L.slice(0,4).toString("hex"),y=4,X=L[y];y+=1;let G=L.slice(y,y+X).toString();y+=X;let B=L[y];y+=1;let F=L.slice(y,y+B).toString("hex");y+=B;let R=L[y];y+=1;let J=L.slice(y,y+R);if(J[R-1]===0)J=L.slice(y,y+R-1);let M=J.toString();return{return_code:_,error_message:H(_),targetId:O,seVersion:G,flag:F,mcuVersion:M}},Z)}async publicKey(L){try{let m=await this.serializePath(L);switch(this.versionResponse.major){case 1:return W0(this,m);case 2:{let _=Buffer.concat([g.serializeHRP("thor"),m]);return j0(this,_)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(m){return Z(m)}}async getAddressAndPubKey(L,m,_=!1){return this.serializePath(L).then((O)=>{let y=Buffer.concat([g.serializeHRP(m),O]);return this.transport.send(E,S.GET_ADDR_SECP256K1,_?a.SHOW_ADDRESS_IN_DEVICE:a.ONLY_RETRIEVE,0,y,[z.NoError]).then((X)=>{let G=X.slice(-2),B=G[0]*256+G[1],F=Buffer.from(X.slice(0,33));return{bech32_address:Buffer.from(X.slice(33,-2)).toString(),compressed_pk:F,return_code:B,error_message:H(B)}},Z)}).catch((O)=>Z(O))}showAddressAndPubKey(L,m){return this.getAddressAndPubKey(L,m,!0)}signSendChunk(L,m,_,O=k.JSON){switch(this.versionResponse.major){case 1:return e(this,L,m,_,O);case 2:return $0(this,L,m,_,O);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(L,m,_=k.JSON){let O=Buffer.from(m),y=[],X;try{y=await this.signGetChunks(L,O),X=await this.signSendChunk(1,y.length,y[0],_)}catch(B){Z(B)}let G={return_code:X.return_code,error_message:X.error_message,signature:null};for(let B=1;B<y.length;B+=1)if(G=await this.signSendChunk(1+B,y.length,y[B],_),G.return_code!==z.NoError)break;return{return_code:G.return_code,error_message:G.error_message,signature:G.signature}}}var c=require("@swapkit/helpers"),L0=()=>navigator?.usb,r0=async()=>{let L=L0();if(typeof L?.getDevices!=="function")return[];let{ledgerUSBVendorId:m}=await import("@ledgerhq/devices"),O=(await L?.getDevices()).filter((y)=>y.vendorId===m);if(O.length>0)return O[0];return L?.requestDevice({filters:[{vendorId:m}]})},N=async()=>{let L=await r0();if(!L)throw new c.SwapKitError("wallet_ledger_device_not_found");if(await L.open(),L.configuration===null)await L.selectConfiguration(1);try{await L.reset()}catch{}let m=L.configurations[0].interfaces.find(({alternates:B})=>B.some(({interfaceClass:F})=>F===255));if(!m)throw await L.close(),new c.SwapKitError("wallet_ledger_connection_error");try{await L.claimInterface(m.interfaceNumber)}catch(B){throw await L.close(),new c.SwapKitError("wallet_ledger_connection_claimed",B)}let _=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await _.isSupported())throw new c.SwapKitError("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:y}=await import("@ledgerhq/errors"),X=new _(L,m.interfaceNumber),G=(B)=>{if(L===B.device)L0()?.removeEventListener("disconnect",G),X._emitDisconnect(new y)};return L0()?.addEventListener("disconnect",G),X};class v{ledgerTimeout=50000;derivationPath=w.NetworkDerivationPath.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await N():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new g(this.transport):this.ledgerApp;break}case"cosmos":{let m=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new m(this.transport):this.ledgerApp}}return this.ledgerApp}catch(m){throw new w.SwapKitError("wallet_ledger_connection_error",m)}};validateResponse=(L,m)=>{switch(L){case w.LedgerErrorCode.NoError:return;case w.LedgerErrorCode.LockedDevice:throw new w.SwapKitError("wallet_ledger_device_locked",{message:`Ledger is locked: ${m}`});case w.LedgerErrorCode.TC_NotFound:throw new w.SwapKitError("wallet_ledger_device_not_found");default:break}}}class m0 extends v{pubKey=null;derivationPath;constructor(L=A.NetworkDerivationPath.GAIA){super();this.chain="cosmos",this.derivationPath=A.derivationPathToString(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:m}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),m};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,m="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:O,signature:y}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new A.SwapKitError("wallet_ledger_pubkey_not_found");return this.validateResponse(_,O),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:y}]};signAmino=async(L,m)=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAccounts();if(_.findIndex((J)=>J.address===L)===-1)throw new A.SwapKitError("wallet_ledger_address_not_found",{address:L});let{encodeSecp256k1Signature:y,serializeSignDoc:X}=(await import("@cosmjs/amino")).default,{Secp256k1Signature:G}=(await import("@cosmjs/crypto")).default,B=X(m),F=await this.ledgerApp.sign(this.derivationPath,B);this.validateResponse(F.return_code,F.error_message);let R=G.fromDer(F.signature).toFixedLength();return{signed:m,signature:y(_[0].pubkey,R)}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}var Q=require("@swapkit/helpers"),Q0=require("ethers");class q extends Q0.AbstractSigner{chainId=Q.ChainId.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:m=Q.NetworkDerivationPath.OP,chainId:_=Q.ChainId.Optimism}){super(L);this.chainId=_||Q.ChainId.Ethereum,this.derivationPath=typeof m==="string"?m:Q.derivationPathToString(m),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new q({provider:L,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await N(),m=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new Q.SwapKitError("wallet_ledger_failed_to_get_address");return L.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(L)=>{let{Signature:m}=await import("ethers");await this.createTransportAndLedger();let _=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!_)throw new Q.SwapKitError("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,m.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new Q.SwapKitError("wallet_ledger_no_provider");let m=await this.signTransaction(L);return await this.provider.broadcastTransaction(m)};signTypedData(){throw new Q.SwapKitError("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(L)=>{let{Transaction:m}=await import("ethers");await this.createTransportAndLedger();let _=await this.provider?.getTransactionCount(L.from||await this.getAddress()),O={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:L.nonce!==void 0?Number((L.nonce||_||0).toString()):_,to:L.to?.toString(),value:L.value,type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0},y=m.from(O).unsignedSerialized.slice(2),{ledgerService:X}=await import("@ledgerhq/hw-app-eth"),G=await X.resolveTransaction(y,{},{externalPlugins:!0,erc20:!0}),B=await this.ledgerApp?.signTransaction(this.derivationPath,y,G);if(!B)throw new Q.SwapKitError("wallet_ledger_signing_error");let{r:F,s:R,v:J}=B;return m.from({...O,signature:{v:Number(BigInt(J)),r:`0x${F}`,s:`0x${R}`}}).serialized}}var Y0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Ethereum,provider:L,derivationPath:m}),M0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Avalanche,provider:L,derivationPath:m}),Z0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.BinanceSmartChain,provider:L,derivationPath:m}),N0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Arbitrum,provider:L,derivationPath:m}),C0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Polygon,provider:L,derivationPath:m}),U0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Optimism,provider:L,derivationPath:m}),H0=({provider:L,derivationPath:m})=>new q({chainId:Q.ChainId.Base,provider:L,derivationPath:m});async function w0(L,m){let _=await import("@ledgerhq/hw-app-near"),{Chain:O,DerivationPath:y,derivationPathToString:X,SwapKitError:G}=await import("@swapkit/helpers"),B=new _.default(L),F=m?X(m):y[O.Near],{address:R,publicKey:J}=await B.getAddress(F);return{async getPublicKey(){let{utils:Y}=await import("near-api-js");return Y.PublicKey.fromString(`ed25519:${J}`)},signNep413Message(Y,C,f,U,K){return Promise.reject(new G("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signNep413Message"}))},getAddress(){return Promise.resolve(R)},async signTransaction(Y){let{Signature:C,SignedTransaction:f}=await import("near-api-js/lib/transaction");try{let U=await B.signTransaction(Y.encode(),F);if(!U)throw new Error("Signature undefined");let K=new C({keyType:0,data:U}),d=new f({transaction:Y,signature:K});return[U,d]}catch(U){throw new G("wallet_ledger_signing_error",{error:U})}},signDelegateAction(Y){return Promise.reject(new G("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signDelegateAction"}))}}}var f0=require("@scure/base"),h=require("@swapkit/helpers");var D0=require("@scure/base"),D=require("@swapkit/helpers"),_0=(L)=>{if(L.length<64)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let m=L[3],_=L.slice(4,m+4);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[m+4]!==2)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let O=L[m+5];if(4+m+2+O!==L.length)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let y=L.slice(m+6,L.length);if(y.length===33&&y[0]===0)y=y.slice(1,33);else if(y.length===33)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"s too long"});while(y.length<32)y.unshift(0);if(_.length!==32||y.length!==32)throw new D.SwapKitError("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return D0.base64.encode(Buffer.concat([_,y]))};class y0 extends v{pubKey=null;derivationPath;constructor(L=h.NetworkDerivationPath.THOR){super();this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:m}=await this.getAddressAndPubKey();return this.pubKey=f0.base64.encode(L),m};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,m="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:O,signature:y}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new h.SwapKitError("wallet_ledger_pubkey_not_found");return this.validateResponse(_,O),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:_0(y)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:m,error_message:_,signature:O}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new h.SwapKitError("wallet_ledger_pubkey_not_found");return this.validateResponse(m,_),_0(O)}}var I=require("@swapkit/helpers"),z0=require("bitcoinjs-lib");var LL=async({psbt:L,inputUtxos:m,btcApp:_,derivationPath:O},y)=>{let X=m.map((J)=>{let M=z0.Transaction.fromHex(J.txHex||"");return[_.splitTransaction(M.toHex(),M.hasWitnesses()),J.index,void 0,void 0]}),G=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),B=_.splitTransaction(G,!0),F=_.serializeTransactionOutputs(B).toString("hex"),R={additionals:["bech32"],associatedKeysets:X.map(()=>O),inputs:X,outputScriptHex:F,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...R,...y})},u=({chain:L,additionalSignParams:m})=>{let _,O=null;async function y(G=!0){if(G&&!_)new I.SwapKitError("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
+
${JSON.stringify({checkBtcApp:G,btcApp:_})}`});O||=await N()}async function X(){O=await N(),_=new(await import("@ledgerhq/hw-app-btc")).default({transport:O,currency:L})}return(G)=>{let B=typeof G==="string"?G:I.derivationPathToString(G),F=I.getWalletFormatFor(B);return{connect:async()=>{await y(!1),_=new(await import("@ledgerhq/hw-app-btc")).default({transport:O,currency:L})},getExtendedPublicKey:async(R="84'/0'/0'",J=76067358)=>{return await y(!1),_.getWalletXpub({path:R,xpubVersion:J})},signTransaction:async(R,J)=>{return await X(),LL({psbt:R,derivationPath:B,btcApp:_,inputUtxos:J},m)},getAddress:async()=>{let{toCashAddress:R}=await import("@swapkit/toolboxes/utxo");await y(!1);let{bitcoinAddress:J}=await _.getWalletPublicKey(B,{format:F});if(!J)throw new I.SwapKitError("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${B}`});return L==="bitcoin-cash"&&F==="legacy"?R(J).replace(/(bchtest:|bitcoincash:)/,""):J}}}},q0=u({chain:"bitcoin"}),l0=u({chain:"litecoin"}),P0=u({chain:"bitcoin-cash",additionalSignParams:{segwit:!1,additionals:["abc"],sigHashType:65}}),S0=u({chain:"dogecoin",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}}),A0=u({chain:"dash",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}});var b=require("@swapkit/helpers"),O0=require("ripple-binary-codec");var mL=2147483648;function _L(L){let m={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)m[_]=L[_];return m}async function yL(L){let{default:m}=await import("@ledgerhq/hw-app-xrp");return new m(L)}function OL({instance:L,derivationPath:m}){return L.getAddress(m)}var I0=async(L)=>{let m=b.derivationPathToString(L||b.NetworkDerivationPath[b.Chain.Ripple]),_=await N(),O=await yL(_),{address:y,publicKey:X}=await OL({instance:O,derivationPath:m});async function G(B){let{hashes:F}=await import("@swapkit/toolboxes/ripple"),J={..._L(B),Flags:B.Flags||mL,SigningPubKey:X.toUpperCase()},M=O0.encode(J),Y=await O.signTransaction(m,M),C=O0.encode({...J,TxnSignature:Y}),f=F.hashSignedTx(C);return{tx_blob:C,hash:f}}return{address:y,sign:G}};var l=async({chain:L,derivationPath:m})=>{let{match:_}=await import("ts-pattern");return _(L).returnType().with($.Chain.THORChain,()=>Promise.resolve(new y0(m))).with($.Chain.Cosmos,()=>Promise.resolve(new m0(m))).with($.Chain.Bitcoin,()=>Promise.resolve(q0(m))).with($.Chain.BitcoinCash,()=>Promise.resolve(P0(m))).with($.Chain.Dash,()=>Promise.resolve(A0(m))).with($.Chain.Dogecoin,()=>Promise.resolve(S0(m))).with($.Chain.Litecoin,()=>Promise.resolve(l0(m))).with($.Chain.Ripple,()=>Promise.resolve(I0(m))).with($.Chain.Near,async()=>{let O=await N();return w0(O,m)}).with($.Chain.Arbitrum,$.Chain.Avalanche,$.Chain.BinanceSmartChain,$.Chain.Ethereum,$.Chain.Optimism,$.Chain.Polygon,$.Chain.Base,async()=>{let{getProvider:O}=await import("@swapkit/toolboxes/evm"),y={provider:await O(L),derivationPath:m};return _(L).with($.Chain.BinanceSmartChain,()=>Z0(y)).with($.Chain.Avalanche,()=>M0(y)).with($.Chain.Arbitrum,()=>N0(y)).with($.Chain.Optimism,()=>U0(y)).with($.Chain.Polygon,()=>C0(y)).with($.Chain.Base,()=>H0(y)).otherwise(()=>Y0(y))}).otherwise(()=>{throw new $.SwapKitError("wallet_chain_not_supported",{wallet:$.WalletOption.LEDGER,chain:L})})};var K0=T.createWallet({name:"connectLedger",supportedChains:[T.Chain.Arbitrum,T.Chain.Avalanche,T.Chain.Base,T.Chain.BinanceSmartChain,T.Chain.Bitcoin,T.Chain.BitcoinCash,T.Chain.Cosmos,T.Chain.Dash,T.Chain.Dogecoin,T.Chain.Ethereum,T.Chain.Litecoin,T.Chain.Near,T.Chain.Optimism,T.Chain.Polygon,T.Chain.Ripple,T.Chain.THORChain],walletType:T.WalletOption.LEDGER,connect:({addChain:L,supportedChains:m,walletType:_})=>async function O(y,X){let[G]=T.filterSupportedChains({chains:y,supportedChains:m,walletType:_});if(!G)return!1;let B=await RL({chain:G,derivationPath:X});return L({...B,chain:G,walletType:T.WalletOption.LEDGER}),!0}}),BL=V0(K0);function GL(L,m="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${m}:`)?L.split(`:${m}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}function t(L){if(Array.isArray(L))return L.forEach((O,y)=>{L[y]=t(O)}),L;if(typeof L!=="object")return L;let m={},_=Object.keys(L).sort();for(let O of _)m[O]=t(L[O]);return m}function FL(L){return JSON.stringify(t(L))}async function RL({chain:L,derivationPath:m}){switch(L){case T.Chain.BitcoinCash:case T.Chain.Bitcoin:case T.Chain.Dash:case T.Chain.Dogecoin:case T.Chain.Litecoin:{let{getUtxoToolbox:_}=await import("@swapkit/toolboxes/utxo"),O=await _(L),y=await l({chain:L,derivationPath:m}),X=await V({chain:L,ledgerClient:y});return{...O,address:X,transfer:async(B)=>{let F=B.feeRate||(await O.getFeeRates())[T.FeeOption.Average],R=[T.Chain.Bitcoin].includes(L)?B.memo:GL(B.memo),{psbt:J,inputs:M}=await O.createTransaction({...B,feeRate:F,memo:R,sender:X,fetchTxHex:!0}),Y=await y.signTransaction(J,M);return await O.broadcastTx(Y)}}}case T.Chain.Ethereum:case T.Chain.Avalanche:case T.Chain.Arbitrum:case T.Chain.Optimism:case T.Chain.Polygon:case T.Chain.BinanceSmartChain:case T.Chain.Base:{let{getEvmToolbox:_}=await import("@swapkit/toolboxes/evm"),O=await l({chain:L,derivationPath:m}),y=await V({chain:L,ledgerClient:O});return{...await _(L,{signer:O}),address:y}}case T.Chain.Cosmos:{let{createSigningStargateClient:_,getMsgSendDenom:O,getCosmosToolbox:y}=await import("@swapkit/toolboxes/cosmos"),X=await y(T.Chain.Cosmos),G=await l({chain:L,derivationPath:m}),B=await V({chain:L,ledgerClient:G});return{...X,address:B,transfer:async({assetValue:R,recipient:J,memo:M})=>{if(!R)throw new T.SwapKitError("wallet_ledger_invalid_asset");let Y={amount:[{amount:R.getBaseValue("string"),denom:O(`u${R.symbol}`).toLowerCase()}],fromAddress:B,toAddress:J},C=await _(T.SKConfig.get("rpcUrls")[L],G,"0.007uatom"),{transactionHash:f}=await C.signAndBroadcast(B,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:Y}],2,M);return f}}}case T.Chain.THORChain:{let{SignMode:_}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:O}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),{encodePubkey:y,makeAuthInfoBytes:X}=(await import("@cosmjs/proto-signing")).default,{createStargateClient:G,buildEncodedTxBody:B,getCosmosToolbox:F,buildAminoMsg:R,getDefaultChainFee:J,fromBase64:M,parseAminoMessageForDirectSigning:Y}=await import("@swapkit/toolboxes/cosmos"),C=await F(L),f=await l({chain:L,derivationPath:m}),U=await V({chain:L,ledgerClient:f}),K=J(L),{pubkey:d,signTransaction:E0,sign:k0}=f,T0=async({memo:P="",assetValue:X0,...b0})=>{let B0=await C.getAccount(U);if(!B0)throw new T.SwapKitError("wallet_ledger_invalid_account");if(!X0)throw new T.SwapKitError("wallet_ledger_invalid_asset");if(!d)throw new T.SwapKitError("wallet_ledger_pubkey_not_found");let{accountNumber:x0,sequence:g0}=B0,n=(g0||0).toString(),G0=t([R({sender:U,assetValue:X0,memo:P,...b0})]),c0=FL({account_number:x0?.toString(),chain_id:T.ChainId.THORChain,fee:K,memo:P,msgs:G0,sequence:n}),o=await E0(c0,n);if(!o)throw new T.SwapKitError("wallet_ledger_signing_error");let v0=y({type:"tendermint/PubKeySecp256k1",value:d}),h0=G0.map(Y),u0=await B({msgs:h0,chain:L,memo:P}),d0=X([{pubkey:v0,sequence:Number(n)}],K.amount,Number.parseInt(K.gas),void 0,void 0,_.SIGN_MODE_LEGACY_AMINO_JSON),i0=o?.[0]?.signature?M(o[0].signature):Uint8Array.from([]),t0=O.fromPartial({bodyBytes:u0,authInfoBytes:d0,signatures:[i0]}),n0=O.encode(t0).finish(),{isStagenet:o0}=T.SKConfig.get("envs"),p0=await G(T.SKConfig.get("rpcUrls")[o0?T.StagenetChain.THORChain:T.Chain.THORChain]),{transactionHash:a0}=await p0.broadcastTx(n0);return a0};return{...C,address:U,deposit:(P)=>T0(P),transfer:(P)=>T0(P),signMessage:k0}}case T.Chain.Near:{let{getNearToolbox:_}=await import("@swapkit/toolboxes/near"),O=await l({chain:L,derivationPath:m}),y=await O.getAddress();return{...await _({signer:O}),address:y}}case T.Chain.Ripple:{let{getRippleToolbox:_}=await import("@swapkit/toolboxes/ripple"),O=await l({chain:L,derivationPath:m}),y=O.address;return{...await _({signer:O}),address:y}}default:throw new T.SwapKitError("wallet_ledger_chain_not_supported",{chain:L})}}
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=00C89B228D4A22FD64756E2164756E21
|