@swapkit/wallets 3.0.0-beta.20 → 3.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/chunk-2aa1w78q.js +3 -0
  2. package/dist/chunk-2aa1w78q.js.map +10 -0
  3. package/dist/{chunk-s6xqbsy0.js → chunk-ebfkk1jn.js} +1 -1
  4. package/dist/{chunk-s6xqbsy0.js.map → chunk-ebfkk1jn.js.map} +1 -1
  5. package/dist/{chunk-sygzrjje.js → chunk-k9q04afa.js} +1 -1
  6. package/dist/{chunk-sygzrjje.js.map → chunk-k9q04afa.js.map} +1 -1
  7. package/dist/chunk-x5hgx9x9.js +3 -0
  8. package/dist/chunk-x5hgx9x9.js.map +10 -0
  9. package/dist/src/bitget/index.cjs +2 -2
  10. package/dist/src/bitget/index.cjs.map +3 -3
  11. package/dist/src/bitget/index.js +2 -2
  12. package/dist/src/bitget/index.js.map +3 -3
  13. package/dist/src/coinbase/index.cjs +2 -2
  14. package/dist/src/coinbase/index.cjs.map +3 -3
  15. package/dist/src/coinbase/index.js +2 -2
  16. package/dist/src/coinbase/index.js.map +3 -3
  17. package/dist/src/cosmostation/index.cjs +3 -0
  18. package/dist/src/cosmostation/index.cjs.map +10 -0
  19. package/dist/src/cosmostation/index.js +3 -0
  20. package/dist/src/cosmostation/index.js.map +10 -0
  21. package/dist/src/ctrl/index.js +1 -1
  22. package/dist/src/evm-extensions/index.cjs +2 -2
  23. package/dist/src/evm-extensions/index.cjs.map +3 -3
  24. package/dist/src/evm-extensions/index.js +2 -2
  25. package/dist/src/evm-extensions/index.js.map +3 -3
  26. package/dist/src/exodus/index.cjs +2 -2
  27. package/dist/src/exodus/index.cjs.map +3 -3
  28. package/dist/src/exodus/index.js +2 -2
  29. package/dist/src/exodus/index.js.map +3 -3
  30. package/dist/src/index.js +1 -1
  31. package/dist/src/keepkey/index.cjs +2 -2
  32. package/dist/src/keepkey/index.cjs.map +9 -9
  33. package/dist/src/keepkey/index.js +2 -2
  34. package/dist/src/keepkey/index.js.map +9 -9
  35. package/dist/src/keepkey-bex/index.cjs +2 -2
  36. package/dist/src/keepkey-bex/index.cjs.map +4 -4
  37. package/dist/src/keepkey-bex/index.js +2 -2
  38. package/dist/src/keepkey-bex/index.js.map +4 -4
  39. package/dist/src/keplr/index.cjs +2 -2
  40. package/dist/src/keplr/index.cjs.map +3 -3
  41. package/dist/src/keplr/index.js +2 -2
  42. package/dist/src/keplr/index.js.map +3 -3
  43. package/dist/src/keystore/index.cjs +2 -2
  44. package/dist/src/keystore/index.cjs.map +3 -3
  45. package/dist/src/keystore/index.js +2 -2
  46. package/dist/src/keystore/index.js.map +3 -3
  47. package/dist/src/ledger/index.cjs +3 -3
  48. package/dist/src/ledger/index.cjs.map +13 -13
  49. package/dist/src/ledger/index.js +3 -3
  50. package/dist/src/ledger/index.js.map +13 -13
  51. package/dist/src/okx/index.cjs +2 -2
  52. package/dist/src/okx/index.cjs.map +3 -3
  53. package/dist/src/okx/index.js +2 -2
  54. package/dist/src/okx/index.js.map +3 -3
  55. package/dist/src/onekey/index.cjs +2 -2
  56. package/dist/src/onekey/index.cjs.map +3 -3
  57. package/dist/src/onekey/index.js +2 -2
  58. package/dist/src/onekey/index.js.map +3 -3
  59. package/dist/src/phantom/index.js +1 -1
  60. package/dist/src/polkadotjs/index.js +1 -1
  61. package/dist/src/radix/index.cjs +2 -2
  62. package/dist/src/radix/index.cjs.map +3 -3
  63. package/dist/src/radix/index.js +2 -2
  64. package/dist/src/radix/index.js.map +3 -3
  65. package/dist/src/talisman/index.js +1 -1
  66. package/dist/src/trezor/index.cjs +1 -1
  67. package/dist/src/trezor/index.js +1 -1
  68. package/dist/src/walletconnect/index.cjs +2 -2
  69. package/dist/src/walletconnect/index.cjs.map +4 -4
  70. package/dist/src/walletconnect/index.js +2 -2
  71. package/dist/src/walletconnect/index.js.map +4 -4
  72. package/package.json +13 -8
  73. package/src/bitget/helpers.ts +3 -2
  74. package/src/coinbase/signer.ts +4 -4
  75. package/src/cosmostation/index.ts +8 -7
  76. package/src/evm-extensions/index.ts +4 -3
  77. package/src/exodus/index.ts +7 -7
  78. package/src/keepkey/chains/cosmos.ts +44 -50
  79. package/src/keepkey/chains/evm.ts +16 -8
  80. package/src/keepkey/chains/mayachain.ts +2 -1
  81. package/src/keepkey/chains/thorchain.ts +2 -1
  82. package/src/keepkey/chains/utxo.ts +9 -2
  83. package/src/keepkey/coins.ts +10 -4
  84. package/src/keepkey/index.ts +15 -7
  85. package/src/keepkey-bex/index.ts +9 -14
  86. package/src/keepkey-bex/walletHelpers.ts +1 -1
  87. package/src/keplr/index.ts +4 -3
  88. package/src/keystore/index.ts +1 -0
  89. package/src/ledger/clients/cosmos.ts +3 -2
  90. package/src/ledger/clients/evm.ts +6 -5
  91. package/src/ledger/clients/thorchain/helpers.ts +9 -4
  92. package/src/ledger/clients/thorchain/index.ts +3 -3
  93. package/src/ledger/clients/thorchain/lib.ts +3 -2
  94. package/src/ledger/clients/thorchain/utils.ts +20 -9
  95. package/src/ledger/cosmosTypes.ts +14 -10
  96. package/src/ledger/helpers/getLedgerClient.ts +54 -47
  97. package/src/ledger/helpers/getLedgerTransport.ts +1 -1
  98. package/src/ledger/index.ts +7 -6
  99. package/src/ledger/interfaces/CosmosLedgerInterface.ts +0 -1
  100. package/src/okx/helpers.ts +9 -8
  101. package/src/onekey/index.ts +2 -6
  102. package/src/radix/index.ts +4 -4
  103. package/src/trezor/evmSigner.ts +1 -1
  104. package/src/walletconnect/evmSigner.ts +6 -2
  105. package/src/walletconnect/index.ts +2 -2
  106. package/dist/chunk-4ef2xs46.js +0 -3
  107. package/dist/chunk-4ef2xs46.js.map +0 -10
  108. package/dist/chunk-qgv1myym.js +0 -3
  109. package/dist/chunk-qgv1myym.js.map +0 -10
  110. package/dist/chunk-w07sv0jv.js +0 -3
  111. package/dist/chunk-w07sv0jv.js.map +0 -10
  112. package/dist/chunk-y0g3prs9.js +0 -3
  113. package/dist/chunk-y0g3prs9.js.map +0 -10
@@ -1,4 +1,4 @@
1
- import{a as q0}from"../../chunk-s6xqbsy0.js";import{c as W,d as j}from"../../chunk-38ztynv0.js";import{Chain as F,ChainId as QL,FeeOption as YL,SKConfig as r,StagenetChain as ZL,WalletOption as K0,createWallet as HL,filterSupportedChains as UL}from"@swapkit/helpers";import{Chain as $,SwapKitError as i0,WalletOption as h0}from"@swapkit/helpers";var f=async({chain:L,ledgerClient:_})=>{if(!_)return"";switch(L){case $.Cosmos:case $.THORChain:return _.connect();case $.Ethereum:case $.BinanceSmartChain:case $.Avalanche:case $.Polygon:case $.Arbitrum:case $.Optimism:case $.Base:return _.getAddress();case $.Bitcoin:case $.BitcoinCash:case $.Dash:case $.Dogecoin:case $.Litecoin:{let m=_;await m.connect();let y=await m.getAddress();return L===$.BitcoinCash?y.replace("bitcoincash:",""):y}case $.Ripple:return _.address;default:throw new i0("wallet_chain_not_supported",{wallet:h0.LEDGER,chain:L})}};import{Chain as J,SwapKitError as JL,WalletOption as $L}from"@swapkit/helpers";import{NetworkDerivationPath as p0,derivationPathToString as a0}from"@swapkit/helpers";import{LedgerErrorCode as n,NetworkDerivationPath as o0,SwapKitError as o}from"@swapkit/helpers";var E=85,v=250;var q={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},V={INIT:0,ADD:1,LAST:2},u={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},l={JSON:0},M={NoError:36864},y0={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 Z(L){if(L in y0)return y0[L];return`Unknown Status Code: ${L}`}function d0(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function Q(L){if(L){if(d0(L)){if(Object.prototype.hasOwnProperty.call(L,"statusCode"))return{return_code:L.statusCode,error_message:Z(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 i(L){return L.send(85,q.GET_VERSION,0,0).then((_)=>{let m=_.slice(-2),y=m[0]*256+m[1],O=0;if(_.length>=9)O=(_[5]<<24)+(_[6]<<16)+(_[7]<<8)+(_[8]<<0);return{return_code:y,error_message:Z(y),test_mode:_[0]!==0,major:_[1],minor:_[2],patch:_[3],device_locked:_[4]===1,target_id:O.toString(16)}},Q)}function T0(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 m=0;m<L.length;m+=1){let y=L[m]||0;if(m<3)y|=2147483648;_.writeInt32LE(y,1+m*4)}return _}async function h(L,_,m,y,O=l.JSON){return L.transport.send(E,q.SIGN_SECP256K1,_,O,y,[M.NoError,27012,27264]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=Z(X);if(X===27264||X===27012)G=`${G} : ${T.slice(0,T.length-2).toString("ascii")}`;let w=null;if(T.length>2)w=T.slice(0,T.length-2);return{signature:w,return_code:X,error_message:G}},Q)}function t0(L){if(L.length!==65)throw new Error("decompressed public key length should be 65 bytes");let _=L.slice(33,65),m=Buffer.from([2+(_[_.length-1]&1)]);return Buffer.concat([m,L.slice(1,33)])}async function X0(L,_){return L.transport.send(E,q.INS_PUBLIC_KEY_SECP256K1,0,0,_,[M.NoError]).then((m)=>{let y=m.slice(-2),O=y[0]*256+y[1],T=Buffer.from(m.slice(0,65));return{pk:T,compressed_pk:t0(T),return_code:O,error_message:Z(O)}},Q)}function B0(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 G0(L,_,m,y,O=l.JSON){let T=V.ADD;if(_===1)T=V.INIT;if(_===m)T=V.LAST;return h(L,T,0,y,O)}async function F0(L,_){return L.transport.send(E,q.GET_ADDR_SECP256K1,0,0,_,[M.NoError]).then((m)=>{let y=m.slice(-2),O=y[0]*256+y[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(m.slice(0,33)),return_code:O,error_message:Z(O)}},Q)}class P{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 i(this.transport),this.versionResponse.return_code!==M.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return T0(L);case 2:return B0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,_){let m=await this.serializePath(L),y=[];y.push(m);for(let O=0;O<_.length;O+=v){let T=O+v;if(O>_.length)T=_.length;y.push(_.slice(O,T))}return y}async getVersion(){try{return this.versionResponse=await i(this.transport),this.versionResponse}catch(L){return Q(L)}}async appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let _=L.slice(-2),m=_[0]*256+_[1],y="",O="",T=0,B=0;if(L[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let X=L[1];y=L.slice(2,2+X).toString("ascii");let G=2+X,w=L[G];G+=1,O=L.slice(G,G+w).toString("ascii"),G+=w;let R=L[G];return G+=1,T=R,B=L[G],{return_code:m,error_message:Z(m),appName:y,appVersion:O,flagLen:T,flagsValue:B,flag_recovery:(B&1)!==0,flag_signed_mcu_code:(B&2)!==0,flag_onboarded:(B&4)!==0,flag_pin_validated:(B&128)!==0}},Q)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[M.NoError,28160]).then((L)=>{let _=L.slice(-2),m=_[0]*256+_[1];if(m===28160)return{return_code:m,error_message:"This command is only available in the Dashboard"};let y=L.slice(0,4).toString("hex"),O=4,T=L[O];O+=1;let B=L.slice(O,O+T).toString();O+=T;let X=L[O];O+=1;let G=L.slice(O,O+X).toString("hex");O+=X;let w=L[O];O+=1;let R=L.slice(O,O+w);if(R[w-1]===0)R=L.slice(O,O+w-1);let Y=R.toString();return{return_code:m,error_message:Z(m),targetId:y,seVersion:B,flag:G,mcuVersion:Y}},Q)}async publicKey(L){try{let _=await this.serializePath(L);switch(this.versionResponse.major){case 1:return X0(this,_);case 2:{let m=Buffer.concat([P.serializeHRP("thor"),_]);return F0(this,m)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(_){return Q(_)}}async getAddressAndPubKey(L,_,m=!1){return this.serializePath(L).then((y)=>{let O=Buffer.concat([P.serializeHRP(_),y]);return this.transport.send(E,q.GET_ADDR_SECP256K1,m?u.SHOW_ADDRESS_IN_DEVICE:u.ONLY_RETRIEVE,0,O,[M.NoError]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=Buffer.from(T.slice(0,33));return{bech32_address:Buffer.from(T.slice(33,-2)).toString(),compressed_pk:G,return_code:X,error_message:Z(X)}},Q)}).catch((y)=>Q(y))}showAddressAndPubKey(L,_){return this.getAddressAndPubKey(L,_,!0)}signSendChunk(L,_,m,y=l.JSON){switch(this.versionResponse.major){case 1:return h(this,L,_,m,y);case 2:return G0(this,L,_,m,y);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(L,_,m=l.JSON){let y=Buffer.from(_),O=[],T;try{O=await this.signGetChunks(L,y),T=await this.signSendChunk(1,O.length,O[0],m)}catch(X){Q(X)}let B={return_code:T.return_code,error_message:T.error_message,signature:null};for(let X=1;X<O.length;X+=1)if(B=await this.signSendChunk(1+X,O.length,O[X],m),B.return_code!==M.NoError)break;return{return_code:B.return_code,error_message:B.error_message,signature:B.signature}}}import{SwapKitError as d}from"@swapkit/helpers";var t=()=>navigator?.usb,n0=async()=>{let L=t();if(typeof L?.getDevices!=="function")return[];let{ledgerUSBVendorId:_}=await import("@ledgerhq/devices"),y=(await L?.getDevices()).filter((O)=>O.vendorId===_);if(y.length>0)return y[0];return L?.requestDevice({filters:[{vendorId:_}]})},H=async()=>{let L=await n0();if(!L)throw new d("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:X})=>X.some(({interfaceClass:G})=>G===255));if(!_)throw await L.close(),new d("wallet_ledger_connection_error");try{await L.claimInterface(_.interfaceNumber)}catch(X){throw await L.close(),new d("wallet_ledger_connection_claimed",X)}let m=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await m.isSupported())throw new Error("WebUSB not supported");let{DisconnectedDevice:O}=await import("@ledgerhq/errors"),T=new m(L,_.interfaceNumber),B=(X)=>{if(L===X.device)t()?.removeEventListener("disconnect",B),T._emitDisconnect(new O)};return t()?.addEventListener("disconnect",B),T};class A{ledgerTimeout=50000;derivationPath=o0.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await H():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new P(this.transport):this.ledgerApp;break}case"cosmos":{let _=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new _(this.transport):this.ledgerApp}}return this.ledgerApp}catch(_){throw new o("wallet_ledger_connection_error",_)}};validateResponse=(L,_)=>{switch(L){case n.NoError:return;case n.LockedDevice:throw new o("wallet_ledger_device_locked",{message:`Ledger is locked: ${_}`});case n.TC_NotFound:throw new o("wallet_ledger_device_not_found");default:{console.error(`Ledger error: ${L} ${_}`);break}}}}class p extends A{pubKey=null;derivationPath;constructor(L=p0.GAIA){super();this.chain="cosmos",this.derivationPath=a0(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:m,error_message:y,signature:O}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(m,y),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:_,signature:O}]};signAmino=async(L,_)=>{await this.checkOrCreateTransportAndLedger(!0);let m=await this.getAccounts();if(m.findIndex((R)=>R.address===L)===-1)throw new Error(`Address ${L} not found in wallet`);let{encodeSecp256k1Signature:O,serializeSignDoc:T}=(await import("@cosmjs/amino")).default,{Secp256k1Signature:B}=(await import("@cosmjs/crypto")).default,X=T(_),G=await this.ledgerApp.sign(this.derivationPath,X);this.validateResponse(G.return_code,G.error_message);let w=B.fromDer(G.signature).toFixedLength();return{signed:_,signature:O(m[0].pubkey,w)}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}import{ChainId as U,NetworkDerivationPath as s0,derivationPathToString as r0}from"@swapkit/helpers";import{AbstractSigner as e0}from"ethers";class S extends e0{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:_=s0.OP,chainId:m=U.Optimism}){super(L);this.chainId=m||U.Ethereum,this.derivationPath=typeof _==="string"?_:r0(_),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new S({provider:L,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await H(),_=(await import("@ledgerhq/hw-app-eth")).default;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 m=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!m)throw new Error("Signing failed");return m.r=`0x${m.r}`,m.s=`0x${m.s}`,_.from(m).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 m=await this.provider?.getTransactionCount(L.from||await this.getAddress()),y={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||m||0).toString()):m,to:L.to?.toString(),value:L.value,type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0},O=_.from(y).unsignedSerialized.slice(2),{ledgerService:T}=await import("@ledgerhq/hw-app-eth"),B=await T.resolveTransaction(O,{},{externalPlugins:!0,erc20:!0}),X=await this.ledgerApp?.signTransaction(this.derivationPath,O,B);if(!X)throw new Error("Could not sign transaction");let{r:G,s:w,v:R}=X;return _.from({...y,signature:{v:Number(BigInt(R)),r:`0x${G}`,s:`0x${w}`}}).serialized}}var w0=({provider:L,derivationPath:_})=>new S({chainId:U.Ethereum,provider:L,derivationPath:_}),R0=({provider:L,derivationPath:_})=>new S({chainId:U.Avalanche,provider:L,derivationPath:_}),W0=({provider:L,derivationPath:_})=>new S({chainId:U.BinanceSmartChain,provider:L,derivationPath:_}),j0=({provider:L,derivationPath:_})=>new S({chainId:U.Arbitrum,provider:L,derivationPath:_}),J0=({provider:L,derivationPath:_})=>new S({chainId:U.Polygon,provider:L,derivationPath:_}),$0=({provider:L,derivationPath:_})=>new S({chainId:U.Optimism,provider:L,derivationPath:_}),Q0=({provider:L,derivationPath:_})=>new S({chainId:U.Base,provider:L,derivationPath:_});import{base64 as _L}from"@scure/base";import{NetworkDerivationPath as mL}from"@swapkit/helpers";import{base64 as LL}from"@scure/base";var 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],m=L.slice(4,_+4);if(m.length===33&&m[0]===0)m=m.slice(1,33);else if(m.length===33)throw new Error('Invalid signature: "r" too long');while(m.length<32)m.unshift(0);if(L[_+4]!==2)throw new Error("Invalid Ledger Signature TLV encoding: expected length type 0x02");let y=L[_+5];if(4+_+2+y!==L.length)throw new Error("Invalid Ledger Signature: TLV byte lengths do not match message length");let O=L.slice(_+6,L.length);if(O.length===33&&O[0]===0)O=O.slice(1,33);else if(O.length===33)throw new Error('Invalid signature: "s" too long');while(O.length<32)O.unshift(0);if(m.length!==32||O.length!==32)throw new Error("Invalid signatures: must be 32 bytes each");return LL.encode(Buffer.concat([m,O]))};class s extends A{pubKey=null;derivationPath;constructor(L=mL.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=_L.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:m,error_message:y,signature:O}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(m,y),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:_,signature:a(O)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:m,signature:y}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Error("Public Key not found");return this.validateResponse(_,m),a(y)}}import{SwapKitError as Y0,derivationPathToString as OL,getWalletFormatFor as yL}from"@swapkit/helpers";import{Transaction as TL}from"bitcoinjs-lib";var XL=async({psbt:L,inputUtxos:_,btcApp:m,derivationPath:y},O)=>{let T=_.map((R)=>{let Y=TL.fromHex(R.txHex||"");return[m.splitTransaction(Y.toHex(),Y.hasWitnesses()),R.index,void 0,void 0]}),B=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),X=m.splitTransaction(B,!0),G=m.serializeTransactionOutputs(X).toString("hex"),w={additionals:["bech32"],associatedKeysets:T.map(()=>y),inputs:T,outputScriptHex:G,segwit:!0,useTrustedInputForSegwit:!0};return m.createPaymentTransaction({...w,...O})},I=({chain:L,additionalSignParams:_})=>{let m,y=null;async function O(B=!0){if(B&&!m)new Y0("wallet_ledger_connection_error",{message:`Ledger connection failed:
2
- ${JSON.stringify({checkBtcApp:B,btcApp:m})}`});y||=await H()}async function T(){y=await H(),m=new(await import("@ledgerhq/hw-app-btc")).default({transport:y,currency:L})}return(B)=>{let X=typeof B==="string"?B:OL(B),G=yL(X);return{connect:async()=>{await O(!1),m=new(await import("@ledgerhq/hw-app-btc")).default({transport:y,currency:L})},getExtendedPublicKey:async(w="84'/0'/0'",R=76067358)=>{return await O(!1),m.getWalletXpub({path:w,xpubVersion:R})},signTransaction:async(w,R)=>{return await T(),XL({psbt:w,derivationPath:X,btcApp:m,inputUtxos:R},_)},getAddress:async()=>{let{toCashAddress:w}=await import("@swapkit/toolboxes/utxo");await O(!1);let{bitcoinAddress:R}=await m.getWalletPublicKey(X,{format:G});if(!R)throw new Y0("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${X}`});return L==="bitcoin-cash"&&G==="legacy"?w(R).replace(/(bchtest:|bitcoincash:)/,""):R}}}},Z0=I({chain:"bitcoin"}),H0=I({chain:"litecoin"}),U0=I({chain:"bitcoin-cash",additionalSignParams:{segwit:!1,additionals:["abc"],sigHashType:65}}),M0=I({chain:"dogecoin",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}}),S0=I({chain:"dash",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}});import{Chain as BL,NetworkDerivationPath as GL,derivationPathToString as FL}from"@swapkit/helpers";import{encode as N0}from"ripple-binary-codec";var wL=2147483648;function RL(L){let _={};for(let m in L)if(L[m]!==null&&L[m]!==void 0)_[m]=L[m];return _}async function WL(L){let{default:_}=await import("@ledgerhq/hw-app-xrp");return new _(L)}function jL({instance:L,derivationPath:_}){return L.getAddress(_)}var D0=async(L)=>{let _=FL(L||GL[BL.Ripple]),m=await H(),y=await WL(m),{address:O,publicKey:T}=await jL({instance:y,derivationPath:_});async function B(X){let{hashes:G}=await import("@swapkit/toolboxes/ripple"),R={...RL(X),Flags:X.Flags||wL,SigningPubKey:T.toUpperCase()},Y=N0(R),N=await y.signTransaction(_,Y),D=N0({...R,TxnSignature:N}),C=G.hashSignedTx(D);return{tx_blob:D,hash:C}}return{address:O,sign:B}};var z=async({chain:L,derivationPath:_})=>{switch(L){case J.THORChain:return new s(_);case J.Cosmos:return new p(_);case J.Bitcoin:return Z0(_);case J.BitcoinCash:return U0(_);case J.Dash:return S0(_);case J.Dogecoin:return M0(_);case J.Litecoin:return H0(_);case J.Ripple:return D0(_);case J.Arbitrum:case J.Avalanche:case J.BinanceSmartChain:case J.Ethereum:case J.Optimism:case J.Polygon:case J.Base:{let{getProvider:m}=await import("@swapkit/toolboxes/evm"),y={provider:await m(L),derivationPath:_};switch(L){case J.BinanceSmartChain:return W0(y);case J.Avalanche:return R0(y);case J.Arbitrum:return j0(y);case J.Optimism:return $0(y);case J.Polygon:return J0(y);case J.Base:return Q0(y);default:return w0(y)}}default:throw new JL("wallet_chain_not_supported",{wallet:$L.LEDGER,chain:L})}};var ML=HL({name:"connectLedger",supportedChains:[F.Arbitrum,F.Avalanche,F.Base,F.BinanceSmartChain,F.Bitcoin,F.BitcoinCash,F.Cosmos,F.Dash,F.Dogecoin,F.Ethereum,F.Litecoin,F.Optimism,F.Polygon,F.Ripple,F.THORChain],walletType:K0.LEDGER,connect:({addChain:L,supportedChains:_,walletType:m})=>async function y(O,T){let[B]=UL({chains:O,supportedChains:_,walletType:m});if(!B)return!1;let X=await DL({chain:B,derivationPath:T});return L({...X,chain:B,walletType:K0.LEDGER}),!0}}),N2=q0(ML);function SL(L,_="t"){if(!L?.includes("=:"))return L;let m=L.includes(`:${_}:`)?L.split(`:${_}:`)[0]:L;return m?.substring(0,m.lastIndexOf(":"))}function b(L){if(Array.isArray(L))return L.forEach((y,O)=>{L[O]=b(y)}),L;if(typeof L!=="object")return L;let _={},m=Object.keys(L).sort();for(let y of m)_[y]=b(L[y]);return _}function NL(L){return JSON.stringify(b(L))}async function DL({chain:L,derivationPath:_}){switch(L){case F.BitcoinCash:case F.Bitcoin:case F.Dash:case F.Dogecoin:case F.Litecoin:{let{getUtxoToolbox:m}=await import("@swapkit/toolboxes/utxo"),y=await m(L),O=await z({chain:L,derivationPath:_}),T=await f({chain:L,ledgerClient:O});return{...y,address:T,transfer:async(X)=>{let G=X.feeRate||(await y.getFeeRates())[YL.Average],w=[F.Bitcoin].includes(L)?X.memo:SL(X.memo),{psbt:R,inputs:Y}=await y.createTransaction({...X,feeRate:G,memo:w,sender:T,fetchTxHex:!0}),N=await O.signTransaction(R,Y);return await y.broadcastTx(N)}}}case F.Ethereum:case F.Avalanche:case F.Arbitrum:case F.Optimism:case F.Polygon:case F.BinanceSmartChain:case F.Base:{let{getEvmToolbox:m}=await import("@swapkit/toolboxes/evm"),y=await z({chain:L,derivationPath:_}),O=await f({chain:L,ledgerClient:y});return{...await m(L,{signer:y}),address:O}}case F.Cosmos:{let{createSigningStargateClient:m,getMsgSendDenom:y,getCosmosToolbox:O}=await import("@swapkit/toolboxes/cosmos"),T=await O(F.Cosmos),B=await z({chain:L,derivationPath:_}),X=await f({chain:L,ledgerClient:B});return{...T,address:X,transfer:async({assetValue:w,recipient:R,memo:Y})=>{if(!w)throw new Error("invalid asset");let N={amount:[{amount:w.getBaseValue("string"),denom:y(`u${w.symbol}`).toLowerCase()}],fromAddress:X,toAddress:R},D=await m(r.get("rpcUrls")[L],B,"0.007uatom"),{transactionHash:C}=await D.signAndBroadcast(X,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:N}],2,Y);return C}}}case F.THORChain:{let{SignMode:m}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:y}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),{encodePubkey:O,makeAuthInfoBytes:T}=(await import("@cosmjs/proto-signing")).default,{createStargateClient:B,buildEncodedTxBody:X,getCosmosToolbox:G,buildAminoMsg:w,getDefaultChainFee:R,fromBase64:Y,parseAminoMessageForDirectSigning:N}=await import("@swapkit/toolboxes/cosmos"),D=await G(L),C=await z({chain:L,derivationPath:_}),k=await f({chain:L,ledgerClient:C}),c=R(L),{pubkey:e,signTransaction:z0,sign:C0}=C,L0=async({memo:K="",assetValue:_0,...f0})=>{let m0=await D.getAccount(k);if(!m0)throw new Error("invalid account");if(!_0)throw new Error("invalid asset");if(!e)throw new Error("Account pubkey not found");let{accountNumber:E0,sequence:l0}=m0,x=(l0||0).toString(),O0=b([w({sender:k,assetValue:_0,memo:K,...f0})]),P0=NL({account_number:E0?.toString(),chain_id:QL.THORChain,fee:c,memo:K,msgs:O0,sequence:x}),g=await z0(P0,x);if(!g)throw new Error("tx signing failed");let A0=O({type:"tendermint/PubKeySecp256k1",value:e}),I0=O0.map(N),V0=await X({msgs:I0,chain:L,memo:K}),b0=T([{pubkey:A0,sequence:Number(x)}],c.amount,Number.parseInt(c.gas),void 0,void 0,m.SIGN_MODE_LEGACY_AMINO_JSON),k0=g?.[0]?.signature?Y(g[0].signature):Uint8Array.from([]),c0=y.fromPartial({bodyBytes:V0,authInfoBytes:b0,signatures:[k0]}),x0=y.encode(c0).finish(),{isStagenet:g0}=r.get("envs"),v0=await B(r.get("rpcUrls")[g0?ZL.THORChain:F.THORChain]),{transactionHash:u0}=await v0.broadcastTx(x0);return u0};return{...D,address:k,deposit:(K)=>L0(K),transfer:(K)=>L0(K),signMessage:C0}}case F.Ripple:{let{getRippleToolbox:m}=await import("@swapkit/toolboxes/ripple"),y=await z({chain:L,derivationPath:_}),O=y.address;return{...await m({signer:y}),address:O}}default:throw new Error("Unsupported chain")}}export{ML as ledgerWallet,N2 as LEDGER_SUPPORTED_CHAINS};
1
+ import{a as I0}from"../../chunk-ebfkk1jn.js";import{c as j,d as J}from"../../chunk-38ztynv0.js";import{Chain as F,ChainId as wL,FeeOption as DL,SKConfig as _0,StagenetChain as qL,SwapKitError as I,WalletOption as K0,createWallet as zL,filterSupportedChains as fL}from"@swapkit/helpers";import{Chain as Q,SwapKitError as a0,WalletOption as s0}from"@swapkit/helpers";var S=async({chain:L,ledgerClient:m})=>{if(!m)return"";switch(L){case Q.Cosmos:case Q.THORChain:return m.connect();case Q.Ethereum:case Q.BinanceSmartChain:case Q.Avalanche:case Q.Polygon:case Q.Arbitrum:case Q.Optimism:case Q.Base:return m.getAddress();case Q.Bitcoin:case Q.BitcoinCash:case Q.Dash:case Q.Dogecoin:case Q.Litecoin:{let _=m;await _.connect();let O=await _.getAddress();return L===Q.BitcoinCash?O.replace("bitcoincash:",""):O}case Q.Ripple:return m.address;default:throw new a0("wallet_chain_not_supported",{wallet:s0.LEDGER,chain:L})}};import{Chain as $,SwapKitError as CL,WalletOption as NL}from"@swapkit/helpers";import{NetworkDerivationPath as _L,SwapKitError as Q0,derivationPathToString as yL}from"@swapkit/helpers";import{LedgerErrorCode as s,NetworkDerivationPath as mL,SwapKitError as r}from"@swapkit/helpers";import{SwapKitError as $0}from"@swapkit/helpers";var A=85,t=250;var f={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},x={INIT:0,ADD:1,LAST:2},n={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},K={JSON:0},C={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 Z(L){if(L in G0)return G0[L];return`Unknown Status Code: ${L}`}function r0(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function Y(L){if(L){if(r0(L)){if(Object.prototype.hasOwnProperty.call(L,"statusCode"))return{return_code:L.statusCode,error_message:Z(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 o(L){return L.send(85,f.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:Z(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)}},Y)}import{SwapKitError as g}from"@swapkit/helpers";function F0(L){if(L==null||L.length<3)throw new g("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new g("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 p(L,m,_,O,y=K.JSON){return L.transport.send(A,f.SIGN_SECP256K1,m,y,O,[C.NoError,27012,27264]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=Z(X);if(X===27264||X===27012)G=`${G} : ${T.slice(0,T.length-2).toString("ascii")}`;let R=null;if(T.length>2)R=T.slice(0,T.length-2);return{signature:R,return_code:X,error_message:G}},Y)}function e0(L){if(L.length!==65)throw new g("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 R0(L,m){return L.transport.send(A,f.INS_PUBLIC_KEY_SECP256K1,0,0,m,[C.NoError]).then((_)=>{let O=_.slice(-2),y=O[0]*256+O[1],T=Buffer.from(_.slice(0,65));return{pk:T,compressed_pk:e0(T),return_code:y,error_message:Z(y)}},Y)}function W0(L){if(!L||L.length!==5)throw new g("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 j0(L,m,_,O,y=K.JSON){let T=x.ADD;if(m===1)T=x.INIT;if(m===_)T=x.LAST;return p(L,T,0,O,y)}async function J0(L,m){return L.transport.send(A,f.GET_ADDR_SECP256K1,0,0,m,[C.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:Z(y)}},Y)}class E{transport;versionResponse;constructor(L){if(!L)throw new $0("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new $0("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 o(this.transport),this.versionResponse.return_code!==C.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return F0(L);case 2:return W0(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+=t){let T=y+t;if(y>m.length)T=m.length;O.push(m.slice(y,T))}return O}async getVersion(){try{return this.versionResponse=await o(this.transport),this.versionResponse}catch(L){return Y(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="",T=0,B=0;if(L[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let X=L[1];O=L.slice(2,2+X).toString("ascii");let G=2+X,R=L[G];G+=1,y=L.slice(G,G+R).toString("ascii"),G+=R;let W=L[G];return G+=1,T=W,B=L[G],{return_code:_,error_message:Z(_),appName:O,appVersion:y,flagLen:T,flagsValue:B,flag_recovery:(B&1)!==0,flag_signed_mcu_code:(B&2)!==0,flag_onboarded:(B&4)!==0,flag_pin_validated:(B&128)!==0}},Y)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[C.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,T=L[y];y+=1;let B=L.slice(y,y+T).toString();y+=T;let X=L[y];y+=1;let G=L.slice(y,y+X).toString("hex");y+=X;let R=L[y];y+=1;let W=L.slice(y,y+R);if(W[R-1]===0)W=L.slice(y,y+R-1);let M=W.toString();return{return_code:_,error_message:Z(_),targetId:O,seVersion:B,flag:G,mcuVersion:M}},Y)}async publicKey(L){try{let m=await this.serializePath(L);switch(this.versionResponse.major){case 1:return R0(this,m);case 2:{let _=Buffer.concat([E.serializeHRP("thor"),m]);return J0(this,_)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(m){return Y(m)}}async getAddressAndPubKey(L,m,_=!1){return this.serializePath(L).then((O)=>{let y=Buffer.concat([E.serializeHRP(m),O]);return this.transport.send(A,f.GET_ADDR_SECP256K1,_?n.SHOW_ADDRESS_IN_DEVICE:n.ONLY_RETRIEVE,0,y,[C.NoError]).then((T)=>{let B=T.slice(-2),X=B[0]*256+B[1],G=Buffer.from(T.slice(0,33));return{bech32_address:Buffer.from(T.slice(33,-2)).toString(),compressed_pk:G,return_code:X,error_message:Z(X)}},Y)}).catch((O)=>Y(O))}showAddressAndPubKey(L,m){return this.getAddressAndPubKey(L,m,!0)}signSendChunk(L,m,_,O=K.JSON){switch(this.versionResponse.major){case 1:return p(this,L,m,_,O);case 2:return j0(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=[],T;try{y=await this.signGetChunks(L,O),T=await this.signSendChunk(1,y.length,y[0],_)}catch(X){Y(X)}let B={return_code:T.return_code,error_message:T.error_message,signature:null};for(let X=1;X<y.length;X+=1)if(B=await this.signSendChunk(1+X,y.length,y[X],_),B.return_code!==C.NoError)break;return{return_code:B.return_code,error_message:B.error_message,signature:B.signature}}}import{SwapKitError as c}from"@swapkit/helpers";var a=()=>navigator?.usb,LL=async()=>{let L=a();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}]})},H=async()=>{let L=await LL();if(!L)throw new c("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:X})=>X.some(({interfaceClass:G})=>G===255));if(!m)throw await L.close(),new c("wallet_ledger_connection_error");try{await L.claimInterface(m.interfaceNumber)}catch(X){throw await L.close(),new c("wallet_ledger_connection_claimed",X)}let _=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await _.isSupported())throw new c("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:y}=await import("@ledgerhq/errors"),T=new _(L,m.interfaceNumber),B=(X)=>{if(L===X.device)a()?.removeEventListener("disconnect",B),T._emitDisconnect(new y)};return a()?.addEventListener("disconnect",B),T};class V{ledgerTimeout=50000;derivationPath=mL.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await H():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new E(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 r("wallet_ledger_connection_error",m)}};validateResponse=(L,m)=>{switch(L){case s.NoError:return;case s.LockedDevice:throw new r("wallet_ledger_device_locked",{message:`Ledger is locked: ${m}`});case s.TC_NotFound:throw new r("wallet_ledger_device_not_found");default:break}}}class e extends V{pubKey=null;derivationPath;constructor(L=_L.GAIA){super();this.chain="cosmos",this.derivationPath=yL(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 Q0("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((W)=>W.address===L)===-1)throw new Q0("wallet_ledger_address_not_found",{address:L});let{encodeSecp256k1Signature:y,serializeSignDoc:T}=(await import("@cosmjs/amino")).default,{Secp256k1Signature:B}=(await import("@cosmjs/crypto")).default,X=T(m),G=await this.ledgerApp.sign(this.derivationPath,X);this.validateResponse(G.return_code,G.error_message);let R=B.fromDer(G.signature).toFixedLength();return{signed: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")}]}}import{ChainId as U,NetworkDerivationPath as OL,SwapKitError as b,derivationPathToString as TL}from"@swapkit/helpers";import{AbstractSigner as XL}from"ethers";class N extends XL{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:m=OL.OP,chainId:_=U.Optimism}){super(L);this.chainId=_||U.Ethereum,this.derivationPath=typeof m==="string"?m:TL(m),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new N({provider:L,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await H(),m=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new b("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 b("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,m.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new b("wallet_ledger_no_provider");let m=await this.signTransaction(L);return await this.provider.broadcastTransaction(m)};signTypedData(){throw new b("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:T}=await import("@ledgerhq/hw-app-eth"),B=await T.resolveTransaction(y,{},{externalPlugins:!0,erc20:!0}),X=await this.ledgerApp?.signTransaction(this.derivationPath,y,B);if(!X)throw new b("wallet_ledger_signing_error");let{r:G,s:R,v:W}=X;return m.from({...O,signature:{v:Number(BigInt(W)),r:`0x${G}`,s:`0x${R}`}}).serialized}}var Y0=({provider:L,derivationPath:m})=>new N({chainId:U.Ethereum,provider:L,derivationPath:m}),M0=({provider:L,derivationPath:m})=>new N({chainId:U.Avalanche,provider:L,derivationPath:m}),Z0=({provider:L,derivationPath:m})=>new N({chainId:U.BinanceSmartChain,provider:L,derivationPath:m}),H0=({provider:L,derivationPath:m})=>new N({chainId:U.Arbitrum,provider:L,derivationPath:m}),U0=({provider:L,derivationPath:m})=>new N({chainId:U.Polygon,provider:L,derivationPath:m}),C0=({provider:L,derivationPath:m})=>new N({chainId:U.Optimism,provider:L,derivationPath:m}),N0=({provider:L,derivationPath:m})=>new N({chainId:U.Base,provider:L,derivationPath:m});import{base64 as GL}from"@scure/base";import{NetworkDerivationPath as FL,SwapKitError as w0}from"@swapkit/helpers";import{base64 as BL}from"@scure/base";import{SwapKitError as w}from"@swapkit/helpers";var L0=(L)=>{if(L.length<64)throw new w("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new w("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new w("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new w("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 w("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[m+4]!==2)throw new w("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 w("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 w("wallet_ledger_invalid_signature",{reason:"s too long"});while(y.length<32)y.unshift(0);if(_.length!==32||y.length!==32)throw new w("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return BL.encode(Buffer.concat([_,y]))};class m0 extends V{pubKey=null;derivationPath;constructor(L=FL.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=GL.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 w0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,O),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:L0(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 w0("wallet_ledger_pubkey_not_found");return this.validateResponse(m,_),L0(O)}}import{SwapKitError as D0,derivationPathToString as RL,getWalletFormatFor as WL}from"@swapkit/helpers";import{Transaction as jL}from"bitcoinjs-lib";var JL=async({psbt:L,inputUtxos:m,btcApp:_,derivationPath:O},y)=>{let T=m.map((W)=>{let M=jL.fromHex(W.txHex||"");return[_.splitTransaction(M.toHex(),M.hasWitnesses()),W.index,void 0,void 0]}),B=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),X=_.splitTransaction(B,!0),G=_.serializeTransactionOutputs(X).toString("hex"),R={additionals:["bech32"],associatedKeysets:T.map(()=>O),inputs:T,outputScriptHex:G,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...R,...y})},k=({chain:L,additionalSignParams:m})=>{let _,O=null;async function y(B=!0){if(B&&!_)new D0("wallet_ledger_connection_error",{message:`Ledger connection failed:
2
+ ${JSON.stringify({checkBtcApp:B,btcApp:_})}`});O||=await H()}async function T(){O=await H(),_=new(await import("@ledgerhq/hw-app-btc")).default({transport:O,currency:L})}return(B)=>{let X=typeof B==="string"?B:RL(B),G=WL(X);return{connect:async()=>{await y(!1),_=new(await import("@ledgerhq/hw-app-btc")).default({transport:O,currency:L})},getExtendedPublicKey:async(R="84'/0'/0'",W=76067358)=>{return await y(!1),_.getWalletXpub({path:R,xpubVersion:W})},signTransaction:async(R,W)=>{return await T(),JL({psbt:R,derivationPath:X,btcApp:_,inputUtxos:W},m)},getAddress:async()=>{let{toCashAddress:R}=await import("@swapkit/toolboxes/utxo");await y(!1);let{bitcoinAddress:W}=await _.getWalletPublicKey(X,{format:G});if(!W)throw new D0("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${X}`});return L==="bitcoin-cash"&&G==="legacy"?R(W).replace(/(bchtest:|bitcoincash:)/,""):W}}}},q0=k({chain:"bitcoin"}),z0=k({chain:"litecoin"}),f0=k({chain:"bitcoin-cash",additionalSignParams:{segwit:!1,additionals:["abc"],sigHashType:65}}),P0=k({chain:"dogecoin",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}}),l0=k({chain:"dash",additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1}});import{Chain as $L,NetworkDerivationPath as QL,derivationPathToString as YL}from"@swapkit/helpers";import{encode as S0}from"ripple-binary-codec";var ML=2147483648;function ZL(L){let m={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)m[_]=L[_];return m}async function HL(L){let{default:m}=await import("@ledgerhq/hw-app-xrp");return new m(L)}function UL({instance:L,derivationPath:m}){return L.getAddress(m)}var A0=async(L)=>{let m=YL(L||QL[$L.Ripple]),_=await H(),O=await HL(_),{address:y,publicKey:T}=await UL({instance:O,derivationPath:m});async function B(X){let{hashes:G}=await import("@swapkit/toolboxes/ripple"),W={...ZL(X),Flags:X.Flags||ML,SigningPubKey:T.toUpperCase()},M=S0(W),D=await O.signTransaction(m,M),q=S0({...W,TxnSignature:D}),l=G.hashSignedTx(q);return{tx_blob:q,hash:l}}return{address:y,sign:B}};var P=async({chain:L,derivationPath:m})=>{let{match:_}=await import("ts-pattern");return _(L).returnType().with($.THORChain,()=>Promise.resolve(new m0(m))).with($.Cosmos,()=>Promise.resolve(new e(m))).with($.Bitcoin,()=>Promise.resolve(q0(m))).with($.BitcoinCash,()=>Promise.resolve(f0(m))).with($.Dash,()=>Promise.resolve(l0(m))).with($.Dogecoin,()=>Promise.resolve(P0(m))).with($.Litecoin,()=>Promise.resolve(z0(m))).with($.Ripple,()=>Promise.resolve(A0(m))).with($.Arbitrum,$.Avalanche,$.BinanceSmartChain,$.Ethereum,$.Optimism,$.Polygon,$.Base,async()=>{let{getProvider:O}=await import("@swapkit/toolboxes/evm"),y={provider:await O(L),derivationPath:m};return _(L).with($.BinanceSmartChain,()=>Z0(y)).with($.Avalanche,()=>M0(y)).with($.Arbitrum,()=>H0(y)).with($.Optimism,()=>C0(y)).with($.Polygon,()=>U0(y)).with($.Base,()=>N0(y)).otherwise(()=>Y0(y))}).otherwise(()=>{throw new CL("wallet_chain_not_supported",{wallet:NL.LEDGER,chain:L})})};var PL=zL({name:"connectLedger",supportedChains:[F.Arbitrum,F.Avalanche,F.Base,F.BinanceSmartChain,F.Bitcoin,F.BitcoinCash,F.Cosmos,F.Dash,F.Dogecoin,F.Ethereum,F.Litecoin,F.Optimism,F.Polygon,F.Ripple,F.THORChain],walletType:K0.LEDGER,connect:({addChain:L,supportedChains:m,walletType:_})=>async function O(y,T){let[B]=fL({chains:y,supportedChains:m,walletType:_});if(!B)return!1;let X=await AL({chain:B,derivationPath:T});return L({...X,chain:B,walletType:K0.LEDGER}),!0}}),Im=I0(PL);function lL(L,m="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${m}:`)?L.split(`:${m}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}function v(L){if(Array.isArray(L))return L.forEach((O,y)=>{L[y]=v(O)}),L;if(typeof L!=="object")return L;let m={},_=Object.keys(L).sort();for(let O of _)m[O]=v(L[O]);return m}function SL(L){return JSON.stringify(v(L))}async function AL({chain:L,derivationPath:m}){switch(L){case F.BitcoinCash:case F.Bitcoin:case F.Dash:case F.Dogecoin:case F.Litecoin:{let{getUtxoToolbox:_}=await import("@swapkit/toolboxes/utxo"),O=await _(L),y=await P({chain:L,derivationPath:m}),T=await S({chain:L,ledgerClient:y});return{...O,address:T,transfer:async(X)=>{let G=X.feeRate||(await O.getFeeRates())[DL.Average],R=[F.Bitcoin].includes(L)?X.memo:lL(X.memo),{psbt:W,inputs:M}=await O.createTransaction({...X,feeRate:G,memo:R,sender:T,fetchTxHex:!0}),D=await y.signTransaction(W,M);return await O.broadcastTx(D)}}}case F.Ethereum:case F.Avalanche:case F.Arbitrum:case F.Optimism:case F.Polygon:case F.BinanceSmartChain:case F.Base:{let{getEvmToolbox:_}=await import("@swapkit/toolboxes/evm"),O=await P({chain:L,derivationPath:m}),y=await S({chain:L,ledgerClient:O});return{...await _(L,{signer:O}),address:y}}case F.Cosmos:{let{createSigningStargateClient:_,getMsgSendDenom:O,getCosmosToolbox:y}=await import("@swapkit/toolboxes/cosmos"),T=await y(F.Cosmos),B=await P({chain:L,derivationPath:m}),X=await S({chain:L,ledgerClient:B});return{...T,address:X,transfer:async({assetValue:R,recipient:W,memo:M})=>{if(!R)throw new I("wallet_ledger_invalid_asset");let D={amount:[{amount:R.getBaseValue("string"),denom:O(`u${R.symbol}`).toLowerCase()}],fromAddress:X,toAddress:W},q=await _(_0.get("rpcUrls")[L],B,"0.007uatom"),{transactionHash:l}=await q.signAndBroadcast(X,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:D}],2,M);return l}}}case F.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:T}=(await import("@cosmjs/proto-signing")).default,{createStargateClient:B,buildEncodedTxBody:X,getCosmosToolbox:G,buildAminoMsg:R,getDefaultChainFee:W,fromBase64:M,parseAminoMessageForDirectSigning:D}=await import("@swapkit/toolboxes/cosmos"),q=await G(L),l=await P({chain:L,derivationPath:m}),h=await S({chain:L,ledgerClient:l}),u=W(L),{pubkey:y0,signTransaction:E0,sign:V0}=l,O0=async({memo:z="",assetValue:T0,...b0})=>{let X0=await q.getAccount(h);if(!X0)throw new I("wallet_ledger_invalid_account");if(!T0)throw new I("wallet_ledger_invalid_asset");if(!y0)throw new I("wallet_ledger_pubkey_not_found");let{accountNumber:k0,sequence:x0}=X0,i=(x0||0).toString(),B0=v([R({sender:h,assetValue:T0,memo:z,...b0})]),g0=SL({account_number:k0?.toString(),chain_id:wL.THORChain,fee:u,memo:z,msgs:B0,sequence:i}),d=await E0(g0,i);if(!d)throw new I("wallet_ledger_signing_error");let c0=y({type:"tendermint/PubKeySecp256k1",value:y0}),v0=B0.map(D),h0=await X({msgs:v0,chain:L,memo:z}),u0=T([{pubkey:c0,sequence:Number(i)}],u.amount,Number.parseInt(u.gas),void 0,void 0,_.SIGN_MODE_LEGACY_AMINO_JSON),i0=d?.[0]?.signature?M(d[0].signature):Uint8Array.from([]),d0=O.fromPartial({bodyBytes:h0,authInfoBytes:u0,signatures:[i0]}),t0=O.encode(d0).finish(),{isStagenet:n0}=_0.get("envs"),o0=await B(_0.get("rpcUrls")[n0?qL.THORChain:F.THORChain]),{transactionHash:p0}=await o0.broadcastTx(t0);return p0};return{...q,address:h,deposit:(z)=>O0(z),transfer:(z)=>O0(z),signMessage:V0}}case F.Ripple:{let{getRippleToolbox:_}=await import("@swapkit/toolboxes/ripple"),O=await P({chain:L,derivationPath:m}),y=O.address;return{...await _({signer:O}),address:y}}default:throw new I("wallet_ledger_chain_not_supported",{chain:L})}}export{PL as ledgerWallet,Im as LEDGER_SUPPORTED_CHAINS};
3
3
 
4
- //# debugId=5C2801A80548D83A64756E2164756E21
4
+ //# debugId=D521F100B15D2FC164756E2164756E21