@swapkit/wallet-hardware 4.0.0-beta.9 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2w8wzmz5.js.map +2 -2
- package/dist/chunk-31bmhjxx.js.map +2 -2
- package/dist/{chunk-2aa1w78q.js → chunk-4k7gb7ss.js} +3 -3
- package/dist/chunk-4k7gb7ss.js.map +10 -0
- package/dist/{chunk-x5hgx9x9.js → chunk-4znkgpw6.js} +3 -3
- package/dist/chunk-4znkgpw6.js.map +10 -0
- package/dist/{chunk-tw3vaf1s.js → chunk-dvw9dy39.js} +3 -3
- package/dist/chunk-dvw9dy39.js.map +10 -0
- package/dist/{chunk-etm8zfkk.js → chunk-ydf1czdk.js} +3 -3
- package/dist/chunk-ydf1czdk.js.map +10 -0
- package/dist/keepkey/index.cjs +2 -2
- package/dist/keepkey/index.cjs.map +8 -8
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +8 -8
- package/dist/ledger/index.cjs +3 -3
- package/dist/ledger/index.cjs.map +18 -18
- package/dist/ledger/index.js +3 -3
- package/dist/ledger/index.js.map +18 -18
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +3 -3
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/keepkey/chains/cosmos.d.ts +3 -57
- package/dist/types/keepkey/chains/cosmos.d.ts.map +1 -1
- package/dist/types/keepkey/chains/evm.d.ts.map +1 -1
- package/dist/types/keepkey/chains/mayachain.d.ts +3 -148
- package/dist/types/keepkey/chains/mayachain.d.ts.map +1 -1
- package/dist/types/keepkey/chains/ripple.d.ts +13 -10
- package/dist/types/keepkey/chains/ripple.d.ts.map +1 -1
- package/dist/types/keepkey/chains/thorchain.d.ts +3 -148
- package/dist/types/keepkey/chains/thorchain.d.ts.map +1 -1
- package/dist/types/keepkey/chains/utxo.d.ts +55 -77
- package/dist/types/keepkey/chains/utxo.d.ts.map +1 -1
- package/dist/types/keepkey/coins.d.ts.map +1 -1
- package/dist/types/keepkey/index.d.ts.map +1 -1
- package/dist/types/ledger/clients/cosmos.d.ts.map +1 -1
- package/dist/types/ledger/clients/evm.d.ts.map +1 -1
- package/dist/types/ledger/clients/near.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/common.d.ts +3 -3
- package/dist/types/ledger/clients/thorchain/common.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/helpers.d.ts +4 -4
- package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/lib.d.ts +2 -5
- package/dist/types/ledger/clients/thorchain/lib.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/utils.d.ts.map +1 -1
- package/dist/types/ledger/clients/tron.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo.d.ts +10 -4
- package/dist/types/ledger/clients/utxo.d.ts.map +1 -1
- package/dist/types/ledger/clients/xrp.d.ts +1 -1
- package/dist/types/ledger/clients/xrp.d.ts.map +1 -1
- package/dist/types/ledger/cosmosTypes.d.ts.map +1 -1
- package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
- package/dist/types/ledger/helpers/getLedgerClient.d.ts +2 -1
- package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
- package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +1 -1
- package/dist/types/ledger/index.d.ts +2 -2
- package/dist/types/ledger/index.d.ts.map +1 -1
- package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +1 -1
- package/dist/types/ledger/types.d.ts.map +1 -1
- package/dist/types/trezor/evmSigner.d.ts.map +1 -1
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +21 -25
- package/dist/chunk-2aa1w78q.js.map +0 -10
- package/dist/chunk-etm8zfkk.js.map +0 -10
- package/dist/chunk-tw3vaf1s.js.map +0 -10
- package/dist/chunk-x5hgx9x9.js.map +0 -10
package/dist/ledger/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{c as W,d as J}from"../chunk-38ztynv0.js";import{Chain as B,ChainId as SL,FeeOption as KL,SKConfig as _0,StagenetChain as IL,SwapKitError as E,WalletOption as g0,filterSupportedChains as VL}from"@swapkit/helpers";import{createWallet as EL,getWalletSupportedChains as bL}from"@swapkit/wallet-core";import{Chain as Q,SwapKitError as yL,WalletOption as TL}from"@swapkit/helpers";var P=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:case Q.Aurora:case Q.Gnosis:return m.getAddress();case Q.Bitcoin:case Q.BitcoinCash:case Q.Dash:case Q.Dogecoin:case Q.Litecoin:{let y=m;await y.connect();let _=await y.getAddress();return L===Q.BitcoinCash?_.replace("bitcoincash:",""):_}case Q.Near:return await m.getAddress();case Q.Ripple:return m.address;case Q.Tron:return m.getAddress();default:throw new yL("wallet_chain_not_supported",{wallet:TL.LEDGER,chain:L})}};import{Chain as j,SwapKitError as AL,WalletOption as PL}from"@swapkit/helpers";import{NetworkDerivationPath as BL,SwapKitError as Z0,derivationPathToString as RL}from"@swapkit/helpers";import{LedgerErrorCode as r,NetworkDerivationPath as XL,SwapKitError as L0}from"@swapkit/helpers";import{SwapKitError as Y0}from"@swapkit/helpers";var I=85,p=250;var S={GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2,GET_ADDR_SECP256K1:4},u={INIT:0,ADD:1,LAST:2},t={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},V={JSON:0},z={NoError:36864},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 D(L){if(L in F0)return F0[L];return`Unknown Status Code: ${L}`}function _L(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function N(L){if(L){if(_L(L)){if(Object.prototype.hasOwnProperty.call(L,"statusCode"))return{return_code:L.statusCode,error_message:D(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 a(L){return L.send(85,S.GET_VERSION,0,0).then((m)=>{let y=m.slice(-2),_=y[0]*256+y[1],T=0;if(m.length>=9)T=(m[5]<<24)+(m[6]<<16)+(m[7]<<8)+(m[8]<<0);return{return_code:_,error_message:D(_),test_mode:m[0]!==0,major:m[1],minor:m[2],patch:m[3],device_locked:m[4]===1,target_id:T.toString(16)}},N)}import{SwapKitError as h}from"@swapkit/helpers";function W0(L){if(L==null||L.length<3)throw new h("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new h("wallet_ledger_invalid_params",{reason:"Path too long"});let m=Buffer.alloc(1+4*L.length);m.writeUInt8(L.length,0);for(let y=0;y<L.length;y+=1){let _=L[y]||0;if(y<3)_|=2147483648;m.writeInt32LE(_,1+y*4)}return m}async function s(L,m,y,_,T=V.JSON){return L.transport.send(I,S.SIGN_SECP256K1,m,T,_,[z.NoError,27012,27264]).then((O)=>{let X=O.slice(-2),G=X[0]*256+X[1],R=D(G);if(G===27264||G===27012)R=`${R} : ${O.slice(0,O.length-2).toString("ascii")}`;let F=null;if(O.length>2)F=O.slice(0,O.length-2);return{signature:F,return_code:G,error_message:R}},N)}function OL(L){if(L.length!==65)throw new h("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let m=L.slice(33,65),y=Buffer.from([2+(m[m.length-1]&1)]);return Buffer.concat([y,L.slice(1,33)])}async function J0(L,m){return L.transport.send(I,S.INS_PUBLIC_KEY_SECP256K1,0,0,m,[z.NoError]).then((y)=>{let _=y.slice(-2),T=_[0]*256+_[1],O=Buffer.from(y.slice(0,65));return{pk:O,compressed_pk:OL(O),return_code:T,error_message:D(T)}},N)}function $0(L){if(!L||L.length!==5)throw new h("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,y,_,T=V.JSON){let O=u.ADD;if(m===1)O=u.INIT;if(m===y)O=u.LAST;return s(L,O,0,_,T)}async function Q0(L,m){return L.transport.send(I,S.GET_ADDR_SECP256K1,0,0,m,[z.NoError]).then((y)=>{let _=y.slice(-2),T=_[0]*256+_[1];return{pk:"OBSOLETE PROPERTY",compressed_pk:Buffer.from(y.slice(0,33)),return_code:T,error_message:D(T)}},N)}class k{transport;versionResponse;constructor(L){if(!L)throw new Y0("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new Y0("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 a(this.transport),this.versionResponse.return_code!==z.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return W0(L);case 2:return $0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,m){let y=await this.serializePath(L),_=[];_.push(y);for(let T=0;T<m.length;T+=p){let O=T+p;if(T>m.length)O=m.length;_.push(m.slice(T,O))}return _}async getVersion(){try{return this.versionResponse=await a(this.transport),this.versionResponse}catch(L){return N(L)}}async appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let m=L.slice(-2),y=m[0]*256+m[1],_="",T="",O=0,X=0;if(L[0]!==1)return{return_code:36865,error_message:"response format ID not recognized"};let G=L[1];_=L.slice(2,2+G).toString("ascii");let R=2+G,F=L[R];R+=1,T=L.slice(R,R+F).toString("ascii"),R+=F;let $=L[R];return R+=1,O=$,X=L[R],{return_code:y,error_message:D(y),appName:_,appVersion:T,flagLen:O,flagsValue:X,flag_recovery:(X&1)!==0,flag_signed_mcu_code:(X&2)!==0,flag_onboarded:(X&4)!==0,flag_pin_validated:(X&128)!==0}},N)}async deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[z.NoError,28160]).then((L)=>{let m=L.slice(-2),y=m[0]*256+m[1];if(y===28160)return{return_code:y,error_message:"This command is only available in the Dashboard"};let _=L.slice(0,4).toString("hex"),T=4,O=L[T];T+=1;let X=L.slice(T,T+O).toString();T+=O;let G=L[T];T+=1;let R=L.slice(T,T+G).toString("hex");T+=G;let F=L[T];T+=1;let $=L.slice(T,T+F);if($[F-1]===0)$=L.slice(T,T+F-1);let Z=$.toString();return{return_code:y,error_message:D(y),targetId:_,seVersion:X,flag:R,mcuVersion:Z}},N)}async publicKey(L){try{let m=await this.serializePath(L);switch(this.versionResponse.major){case 1:return J0(this,m);case 2:{let y=Buffer.concat([k.serializeHRP("thor"),m]);return Q0(this,y)}default:return{return_code:25600,error_message:"App Version is not supported"}}}catch(m){return N(m)}}async getAddressAndPubKey(L,m,y=!1){return this.serializePath(L).then((_)=>{let T=Buffer.concat([k.serializeHRP(m),_]);return this.transport.send(I,S.GET_ADDR_SECP256K1,y?t.SHOW_ADDRESS_IN_DEVICE:t.ONLY_RETRIEVE,0,T,[z.NoError]).then((O)=>{let X=O.slice(-2),G=X[0]*256+X[1],R=Buffer.from(O.slice(0,33));return{bech32_address:Buffer.from(O.slice(33,-2)).toString(),compressed_pk:R,return_code:G,error_message:D(G)}},N)}).catch((_)=>N(_))}showAddressAndPubKey(L,m){return this.getAddressAndPubKey(L,m,!0)}signSendChunk(L,m,y,_=V.JSON){switch(this.versionResponse.major){case 1:return s(this,L,m,y,_);case 2:return j0(this,L,m,y,_);default:return{return_code:25600,error_message:"App Version is not supported"}}}async sign(L,m,y=V.JSON){let _=Buffer.from(m),T=[],O;try{T=await this.signGetChunks(L,_),O=await this.signSendChunk(1,T.length,T[0],y)}catch(G){N(G)}let X={return_code:O.return_code,error_message:O.error_message,signature:null};for(let G=1;G<T.length;G+=1)if(X=await this.signSendChunk(1+G,T.length,T[G],y),X.return_code!==z.NoError)break;return{return_code:X.return_code,error_message:X.error_message,signature:X.signature}}}import{SwapKitError as d}from"@swapkit/helpers";var e=()=>navigator?.usb,GL=async()=>{let L=e();if(typeof L?.getDevices!=="function")return[];let{ledgerUSBVendorId:m}=await import("@ledgerhq/devices"),_=(await L?.getDevices()).filter((T)=>T.vendorId===m);if(_.length>0)return _[0];return L?.requestDevice({filters:[{vendorId:m}]})},M=async()=>{let L=await GL();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 m=L.configurations[0].interfaces.find(({alternates:G})=>G.some(({interfaceClass:R})=>R===255));if(!m)throw await L.close(),new d("wallet_ledger_connection_error");try{await L.claimInterface(m.interfaceNumber)}catch(G){throw await L.close(),new d("wallet_ledger_connection_claimed",G)}let y=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await y.isSupported())throw new d("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:T}=await import("@ledgerhq/errors"),O=new y(L,m.interfaceNumber),X=(G)=>{if(L===G.device)e()?.removeEventListener("disconnect",X),O._emitDisconnect(new T)};return e()?.addEventListener("disconnect",X),O};class x{ledgerTimeout=50000;derivationPath=XL.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await M():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new k(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 L0("wallet_ledger_connection_error",m)}};validateResponse=(L,m)=>{switch(L){case r.NoError:return;case r.LockedDevice:throw new L0("wallet_ledger_device_locked",{message:`Ledger is locked: ${m}`});case r.TC_NotFound:throw new L0("wallet_ledger_device_not_found");default:break}}}class m0 extends x{pubKey=null;derivationPath;constructor(L=BL.GAIA){super();this.chain="cosmos",this.derivationPath=RL(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:y,error_message:_,signature:T}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new Z0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:T}]};signAmino=async(L,m)=>{await this.checkOrCreateTransportAndLedger(!0);let y=await this.getAccounts();if(y.findIndex((Y)=>Y.address===L)===-1)throw new Z0("wallet_ledger_address_not_found",{address:L});let T=await import("@cosmjs/amino"),O=T.encodeSecp256k1Signature??T.default?.encodeSecp256k1Signature,X=T.serializeSignDoc??T.default?.serializeSignDoc,G=await import("@cosmjs/crypto"),R=G.Secp256k1Signature??G.default?.Secp256k1Signature,F=X(m),$=await this.ledgerApp.sign(this.derivationPath,F);this.validateResponse($.return_code,$.error_message);let Z=R.fromDer($.signature).toFixedLength();return{signed:m,signature:O(y[0].pubkey,Z)}};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 FL,SwapKitError as g,derivationPathToString as WL}from"@swapkit/helpers";import{AbstractSigner as JL}from"ethers";class H extends JL{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:m=FL.OP,chainId:y=U.Optimism}){super(L);this.chainId=y||U.Ethereum,this.derivationPath=typeof m==="string"?m:WL(m),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new H({provider:L,derivationPath:this.derivationPath,chainId:this.chainId});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await M(),m=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new g("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 y=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!y)throw new g("wallet_ledger_signing_error");return y.r=`0x${y.r}`,y.s=`0x${y.s}`,m.from(y).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new g("wallet_ledger_no_provider");let m=await this.signTransaction(L);return await this.provider.broadcastTransaction(m)};signTypedData(){throw new g("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(L)=>{let{Transaction:m}=await import("ethers");await this.createTransportAndLedger();let y=await this.provider?.getTransactionCount(L.from||await this.getAddress()),_={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||y||0).toString()):y,to:L.to?.toString(),value:L.value,type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0},T=m.from(_).unsignedSerialized.slice(2),{ledgerService:O}=await import("@ledgerhq/hw-app-eth"),X=await O.resolveTransaction(T,{},{externalPlugins:!0,erc20:!0}),G=await this.ledgerApp?.signTransaction(this.derivationPath,T,X);if(!G)throw new g("wallet_ledger_signing_error");let{r:R,s:F,v:$}=G;return m.from({..._,signature:{v:Number(BigInt($)),r:`0x${R}`,s:`0x${F}`}}).serialized}}var M0=({provider:L,derivationPath:m})=>new H({chainId:U.Ethereum,provider:L,derivationPath:m}),N0=({provider:L,derivationPath:m})=>new H({chainId:U.Avalanche,provider:L,derivationPath:m}),U0=({provider:L,derivationPath:m})=>new H({chainId:U.BinanceSmartChain,provider:L,derivationPath:m}),H0=({provider:L,derivationPath:m})=>new H({chainId:U.Arbitrum,provider:L,derivationPath:m}),C0=({provider:L,derivationPath:m})=>new H({chainId:U.Polygon,provider:L,derivationPath:m}),D0=({provider:L,derivationPath:m})=>new H({chainId:U.Optimism,provider:L,derivationPath:m}),w0=({provider:L,derivationPath:m})=>new H({chainId:U.Base,provider:L,derivationPath:m}),f0=({provider:L,derivationPath:m})=>new H({chainId:U.Aurora,provider:L,derivationPath:m}),z0=({provider:L,derivationPath:m})=>new H({chainId:U.Gnosis,provider:L,derivationPath:m});async function q0(L,m){let y=await import("@ledgerhq/hw-app-near"),{Chain:_,DerivationPath:T,derivationPathToString:O,SwapKitError:X}=await import("@swapkit/helpers"),G=new y.default(L),R=m?O(m):T[_.Near],{address:F,publicKey:$}=await G.getAddress(R);return{async getPublicKey(){let{utils:Y}=await import("near-api-js");return Y.PublicKey.fromString(`ed25519:${$}`)},signNep413Message(Y,C,w,f,K){return Promise.reject(new X("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signNep413Message"}))},getAddress(){return Promise.resolve(F)},async signTransaction(Y){let{Signature:C,SignedTransaction:w}=await import("near-api-js/lib/transaction");try{let f=await G.signTransaction(Y.encode(),R);if(!f)throw new Error("Signature undefined");let K=new C({keyType:0,data:f}),b=new w({transaction:Y,signature:K});return[f,b]}catch(f){throw new X("wallet_ledger_signing_error",{error:f})}},signDelegateAction(Y){return Promise.reject(new X("wallet_ledger_method_not_supported",{wallet:"Ledger",method:"signDelegateAction"}))}}}import{base64 as jL}from"@scure/base";import{NetworkDerivationPath as QL,SwapKitError as l0}from"@swapkit/helpers";import{base64 as $L}from"@scure/base";import{SwapKitError as q}from"@swapkit/helpers";var y0=(L)=>{if(L.length<64)throw new q("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new q("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let m=L[3],y=L.slice(4,m+4);if(y.length===33&&y[0]===0)y=y.slice(1,33);else if(y.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"r too long"});while(y.length<32)y.unshift(0);if(L[m+4]!==2)throw new q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let _=L[m+5];if(4+m+2+_!==L.length)throw new q("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let T=L.slice(m+6,L.length);if(T.length===33&&T[0]===0)T=T.slice(1,33);else if(T.length===33)throw new q("wallet_ledger_invalid_signature",{reason:"s too long"});while(T.length<32)T.unshift(0);if(y.length!==32||T.length!==32)throw new q("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return $L.encode(Buffer.concat([y,T]))};class T0 extends x{pubKey=null;derivationPath;constructor(L=QL.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=jL.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:y,error_message:_,signature:T}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new l0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:y0(T)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:m,error_message:y,signature:_}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new l0("wallet_ledger_pubkey_not_found");return this.validateResponse(m,y),y0(_)}}import{NetworkDerivationPath as YL,SwapKitError as c,derivationPathToString as ZL}from"@swapkit/helpers";class A0{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(L){this.derivationPath=typeof L==="string"?L:ZL(L||YL.TRX)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await M(),m=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new c("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new c("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new c("wallet_ledger_transport_error");let m=JSON.stringify(L);try{let y=await this.ledgerApp.signTransaction(this.derivationPath,m,[]);if(!y)throw new c("wallet_ledger_signing_error");return{...L,signature:[y]}}catch(y){throw new c("wallet_ledger_signing_error",{error:y})}}}var P0=(L)=>new A0(L);import{SwapKitError as S0,derivationPathToString as ML,getWalletFormatFor as NL}from"@swapkit/helpers";import{Transaction as UL}from"bitcoinjs-lib";var HL=async({psbt:L,inputUtxos:m,btcApp:y,derivationPath:_},T)=>{let O=m.map(($)=>{let Z=UL.fromHex($.txHex||"");return[y.splitTransaction(Z.toHex(),Z.hasWitnesses()),$.index,void 0,void 0]}),X=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),G=y.splitTransaction(X,!0),R=y.serializeTransactionOutputs(G).toString("hex"),F={additionals:["bech32"],associatedKeysets:O.map(()=>_),inputs:O,outputScriptHex:R,segwit:!0,useTrustedInputForSegwit:!0};return y.createPaymentTransaction({...F,...T})},v=({chain:L,additionalSignParams:m})=>{let y,_=null;async function T(X=!0){if(X&&!y)new S0("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
-
${JSON.stringify({
|
|
1
|
+
import{c as B,d as F}from"../chunk-38ztynv0.js";import{Chain as R,ChainId as P0,FeeOption as K0,filterSupportedChains as I0,getRPCUrl as bL,SwapKitError as V,WalletOption as xL}from"@swapkit/helpers";import{createWallet as E0,getWalletSupportedChains as V0}from"@swapkit/wallet-core";import{Chain as Z,SwapKitError as T0,WalletOption as y0}from"@swapkit/helpers";var g=async({chain:L,ledgerClient:m})=>{if(!m)return"";switch(L){case Z.Cosmos:case Z.THORChain:return m.connect();case Z.Ethereum:case Z.BinanceSmartChain:case Z.Avalanche:case Z.Polygon:case Z.Arbitrum:case Z.Optimism:case Z.Base:case Z.Aurora:case Z.Gnosis:return m.getAddress();case Z.Bitcoin:case Z.BitcoinCash:case Z.Dash:case Z.Dogecoin:case Z.Litecoin:case Z.Zcash:{let _=m;await _.connect();let y=await _.getAddress();return L===Z.BitcoinCash?y.replace("bitcoincash:",""):y}case Z.Near:return await m.getAddress();case Z.Ripple:return m.address;case Z.Tron:return m.getAddress();default:throw new T0("wallet_chain_not_supported",{chain:L,wallet:y0.LEDGER})}};import{Chain as l,SwapKitError as g0,WalletOption as S0}from"@swapkit/helpers";import{derivationPathToString as C0,NetworkDerivationPath as X0,SwapKitError as WL}from"@swapkit/helpers";import{LedgerErrorCode as r,NetworkDerivationPath as R0,SwapKitError as LL}from"@swapkit/helpers";import{SwapKitError as ZL}from"@swapkit/helpers";var K=85,n=250;var S={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},v={ADD:1,INIT:0,LAST:2},p={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},I={JSON:0},D={NoError:36864},CL={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",25600:"Execution Error",26368:"Wrong Length",26626:"Error deriving keys",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",36864:"No errors",36865:"Device is busy"};function H(L){if(L in CL)return CL[L];return`Unknown Status Code: ${L}`}function O0(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function N(L){if(L){if(O0(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:H(L.statusCode),return_code:L.statusCode};if(Object.hasOwn(L,"return_code")&&Object.hasOwn(L,"error_message"))return L}return{error_message:L.toString(),return_code:65535}}return{error_message:L.toString(),return_code:65535}}function a(L){return L.send(85,S.GET_VERSION,0,0).then((m)=>{let _=m.slice(-2),y=_[0]*256+_[1],T=0;if(m.length>=9)T=(m[5]<<24)+(m[6]<<16)+(m[7]<<8)+(m[8]<<0);return{device_locked:m[4]===1,error_message:H(y),major:m[1],minor:m[2],patch:m[3],return_code:y,target_id:T.toString(16),test_mode:m[0]!==0}},N)}import{SwapKitError as u}from"@swapkit/helpers";function XL(L){if(L==null||L.length<3)throw new u("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new u("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 y=L[_]||0;if(_<3)y|=2147483648;m.writeInt32LE(y,1+_*4)}return m}function s(L,m,_,y,T=I.JSON){return L.transport.send(K,S.SIGN_SECP256K1,m,T,y,[D.NoError,27012,27264]).then((O)=>{let G=O.slice(-2),w=G[0]*256+G[1],C=H(w);if(w===27264||w===27012)C=`${C} : ${O.slice(0,O.length-2).toString("ascii")}`;let X=null;if(O.length>2)X=O.slice(0,O.length-2);return{error_message:C,return_code:w,signature:X}},N)}function w0(L){if(L.length!==65)throw new u("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)])}function BL(L,m){return L.transport.send(K,S.INS_PUBLIC_KEY_SECP256K1,0,0,m,[D.NoError]).then((_)=>{let y=_.slice(-2),T=y[0]*256+y[1],O=Buffer.from(_.slice(0,65));return{compressed_pk:w0(O),error_message:H(T),pk:O,return_code:T}},N)}function FL(L){if(!L||L.length!==5)throw new u("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 fL(L,m,_,y,T=I.JSON){let O=v.ADD;if(m===1)O=v.INIT;if(m===_)O=v.LAST;return s(L,O,0,y,T)}function lL(L,m){return L.transport.send(K,S.GET_ADDR_SECP256K1,0,0,m,[D.NoError]).then((_)=>{let y=_.slice(-2),T=y[0]*256+y[1];return{compressed_pk:Buffer.from(_.slice(0,33)),error_message:H(T),pk:"OBSOLETE PROPERTY",return_code:T}},N)}class k{transport;versionResponse;constructor(L){if(!L)throw new ZL("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new ZL("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 a(this.transport),this.versionResponse.return_code!==D.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return XL(L);case 2:return FL(L);default:return Buffer.alloc(0)}}async signGetChunks(L,m){let _=await this.serializePath(L),y=[];y.push(_);for(let T=0;T<m.length;T+=n){let O=T+n;if(T>m.length)O=m.length;y.push(m.slice(T,O))}return y}async getVersion(){try{return this.versionResponse=await a(this.transport),this.versionResponse}catch(L){return N(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let m=L.slice(-2),_=m[0]*256+m[1],y="",T="",O=0,G=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let w=L[1];y=L.slice(2,2+w).toString("ascii");let C=2+w,X=L[C];C+=1,T=L.slice(C,C+X).toString("ascii"),C+=X;let f=L[C];return C+=1,O=f,G=L[C],{appName:y,appVersion:T,error_message:H(_),flag_onboarded:(G&4)!==0,flag_pin_validated:(G&128)!==0,flag_recovery:(G&1)!==0,flag_signed_mcu_code:(G&2)!==0,flagLen:O,flagsValue:G,return_code:_}},N)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[D.NoError,28160]).then((L)=>{let m=L.slice(-2),_=m[0]*256+m[1];if(_===28160)return{error_message:"This command is only available in the Dashboard",return_code:_};let y=L.slice(0,4).toString("hex"),T=4,O=L[T];T+=1;let G=L.slice(T,T+O).toString();T+=O;let w=L[T];T+=1;let C=L.slice(T,T+w).toString("hex");T+=w;let X=L[T];T+=1;let f=L.slice(T,T+X);if(f[X-1]===0)f=L.slice(T,T+X-1);let J=f.toString();return{error_message:H(_),flag:C,mcuVersion:J,return_code:_,seVersion:G,targetId:y}},N)}async publicKey(L){try{let m=await this.serializePath(L);switch(this.versionResponse.major){case 1:return BL(this,m);case 2:{let _=Buffer.concat([k.serializeHRP("thor"),m]);return lL(this,_)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(m){return N(m)}}getAddressAndPubKey(L,m,_=!1){return this.serializePath(L).then((y)=>{let T=Buffer.concat([k.serializeHRP(m),y]);return this.transport.send(K,S.GET_ADDR_SECP256K1,_?p.SHOW_ADDRESS_IN_DEVICE:p.ONLY_RETRIEVE,0,T,[D.NoError]).then((O)=>{let G=O.slice(-2),w=G[0]*256+G[1],C=Buffer.from(O.slice(0,33));return{bech32_address:Buffer.from(O.slice(33,-2)).toString(),compressed_pk:C,error_message:H(w),return_code:w}},N)}).catch((y)=>N(y))}showAddressAndPubKey(L,m){return this.getAddressAndPubKey(L,m,!0)}signSendChunk(L,m,_,y=I.JSON){switch(this.versionResponse.major){case 1:return s(this,L,m,_,y);case 2:return fL(this,L,m,_,y);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,m,_=I.JSON){let y=Buffer.from(m),T=[],O;try{T=await this.signGetChunks(L,y),O=await this.signSendChunk(1,T.length,T[0],_)}catch(w){N(w)}let G={error_message:O.error_message,return_code:O.return_code,signature:null};for(let w=1;w<T.length;w+=1)if(G=await this.signSendChunk(1+w,T.length,T[w],_),G.return_code!==D.NoError)break;return{error_message:G.error_message,return_code:G.return_code,signature:G.signature}}}import{SwapKitError as d}from"@swapkit/helpers";var e=()=>navigator?.usb,G0=async()=>{let L=e();if(typeof L?.getDevices!=="function")return[];let{ledgerUSBVendorId:m}=await import("@ledgerhq/devices"),y=(await L?.getDevices()).filter((T)=>T.vendorId===m);if(y.length>0)return y[0];return L?.requestDevice({filters:[{vendorId:m}]})},$=async()=>{let L=await G0();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 m=L.configurations[0].interfaces.find(({alternates:w})=>w.some(({interfaceClass:C})=>C===255));if(!m)throw await L.close(),new d("wallet_ledger_connection_error");try{await L.claimInterface(m.interfaceNumber)}catch(w){throw await L.close(),new d("wallet_ledger_connection_claimed",w)}let _=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await _.isSupported())throw new d("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:T}=await import("@ledgerhq/errors"),O=new _(L,m.interfaceNumber),G=(w)=>{if(L===w.device)e()?.removeEventListener("disconnect",G),O._emitDisconnect(new T)};return e()?.addEventListener("disconnect",G),O};class b{ledgerTimeout=50000;derivationPath=R0.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await $():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new k(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 LL("wallet_ledger_connection_error",m)}};validateResponse=(L,m)=>{switch(L){case r.NoError:return;case r.LockedDevice:throw new LL("wallet_ledger_device_locked",{message:`Ledger is locked: ${m}`});case r.TC_NotFound:throw new LL("wallet_ledger_device_not_found");default:break}}}class mL extends b{pubKey=null;derivationPath;constructor(L=X0.GAIA){super();this.chain="cosmos",this.derivationPath=C0(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:y,signature:T}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new WL("wallet_ledger_pubkey_not_found");return this.validateResponse(_,y),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:T}]};signAmino=async(L,m)=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAccounts();if(_.findIndex((W)=>W.address===L)===-1)throw new WL("wallet_ledger_address_not_found",{address:L});let T=await import("@cosmjs/amino"),O=T.encodeSecp256k1Signature??T.default?.encodeSecp256k1Signature,G=T.serializeSignDoc??T.default?.serializeSignDoc,w=await import("@cosmjs/crypto"),C=w.Secp256k1Signature??w.default?.Secp256k1Signature,X=G(m),f=await this.ledgerApp.sign(this.derivationPath,X);this.validateResponse(f.return_code,f.error_message);let J=C.fromDer(f.signature).toFixedLength();return{signature:O(_[0].pubkey,J),signed:m}};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 j,derivationPathToString as B0,NetworkDerivationPath as F0,SwapKitError as x}from"@swapkit/helpers";import{AbstractSigner as f0}from"ethers";class Y extends f0{chainId=j.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:m=F0.OP,chainId:_=j.Optimism}){super(L);this.chainId=_||j.Ethereum,this.derivationPath=typeof m==="string"?m:B0(m),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new Y({chainId:this.chainId,derivationPath:this.derivationPath,provider:L});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await $(),m=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new x("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 x("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,m.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new x("wallet_ledger_no_provider");let m=await this.signTransaction(L);return await this.provider.broadcastTransaction(m)};signTypedData(){throw new x("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()),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||_||0).toString()):_,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},T=m.from(y).unsignedSerialized.slice(2),{ledgerService:O}=await import("@ledgerhq/hw-app-eth"),G=await O.resolveTransaction(T,{},{erc20:!0,externalPlugins:!0}),w=await this.ledgerApp?.signTransaction(this.derivationPath,T,G);if(!w)throw new x("wallet_ledger_signing_error");let{r:C,s:X,v:f}=w;return m.from({...y,signature:{r:`0x${C}`,s:`0x${X}`,v:Number(BigInt(f))}}).serialized}}var JL=({provider:L,derivationPath:m})=>new Y({chainId:j.Ethereum,derivationPath:m,provider:L}),$L=({provider:L,derivationPath:m})=>new Y({chainId:j.Avalanche,derivationPath:m,provider:L}),NL=({provider:L,derivationPath:m})=>new Y({chainId:j.BinanceSmartChain,derivationPath:m,provider:L}),jL=({provider:L,derivationPath:m})=>new Y({chainId:j.Arbitrum,derivationPath:m,provider:L}),QL=({provider:L,derivationPath:m})=>new Y({chainId:j.Polygon,derivationPath:m,provider:L}),YL=({provider:L,derivationPath:m})=>new Y({chainId:j.Optimism,derivationPath:m,provider:L}),ML=({provider:L,derivationPath:m})=>new Y({chainId:j.Base,derivationPath:m,provider:L}),HL=({provider:L,derivationPath:m})=>new Y({chainId:j.Aurora,derivationPath:m,provider:L}),DL=({provider:L,derivationPath:m})=>new Y({chainId:j.Gnosis,derivationPath:m,provider:L});async function UL(L,m){let _=await import("@ledgerhq/hw-app-near"),{Chain:y,DerivationPath:T,derivationPathToString:O,SwapKitError:G}=await import("@swapkit/helpers"),w=new _.default(L),C=m?O(m):T[y.Near],{address:X,publicKey:f}=await w.getAddress(C);return{getAddress(){return Promise.resolve(X)},async getPublicKey(){let{utils:W}=await import("near-api-js");return W.PublicKey.fromString(`ed25519:${f}`)},signDelegateAction(W){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(W,M,z,Q,P){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(W){let{Signature:M,SignedTransaction:z}=await import("near-api-js/lib/transaction");try{let Q=await w.signTransaction(W.encode(),C);if(!Q)throw new Error("Signature undefined");let P=new M({data:Q,keyType:0}),c=new z({signature:P,transaction:W});return[Q,c]}catch(Q){throw new G("wallet_ledger_signing_error",{error:Q})}}}}import{base64 as Z0}from"@scure/base";import{NetworkDerivationPath as W0,SwapKitError as qL}from"@swapkit/helpers";import{base64 as l0}from"@scure/base";import{SwapKitError as U}from"@swapkit/helpers";var _L=(L)=>{if(L.length<64)throw new U("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new U("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new U("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new U("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 U("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[m+4]!==2)throw new U("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let y=L[m+5];if(4+m+2+y!==L.length)throw new U("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let T=L.slice(m+6,L.length);if(T.length===33&&T[0]===0)T=T.slice(1,33);else if(T.length===33)throw new U("wallet_ledger_invalid_signature",{reason:"s too long"});while(T.length<32)T.unshift(0);if(_.length!==32||T.length!==32)throw new U("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return l0.encode(Buffer.concat([_,T]))};class TL extends b{pubKey=null;derivationPath;constructor(L=W0.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=Z0.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:y,signature:T}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new qL("wallet_ledger_pubkey_not_found");return this.validateResponse(_,y),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:m,signature:_L(T)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:m,error_message:_,signature:y}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new qL("wallet_ledger_pubkey_not_found");return this.validateResponse(m,_),_L(y)}}import{derivationPathToString as J0,NetworkDerivationPath as $0,SwapKitError as h}from"@swapkit/helpers";class zL{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(L){this.derivationPath=typeof L==="string"?L:J0(L||$0.TRON)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await $(),m=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new m(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new h("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new h("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new h("wallet_ledger_transport_error");let m=JSON.stringify(L);try{let _=await this.ledgerApp.signTransaction(this.derivationPath,m,[]);if(!_)throw new h("wallet_ledger_signing_error");return{...L,signature:[_]}}catch(_){throw new h("wallet_ledger_signing_error",{error:_})}}}var AL=(L)=>new zL(L);import{derivationPathToString as N0,getWalletFormatFor as j0,SwapKitError as gL}from"@swapkit/helpers";import{Transaction as Q0}from"bitcoinjs-lib";var Y0=({psbt:L,inputUtxos:m,btcApp:_,derivationPath:y},T)=>{let O=m.map((f)=>{let J=Q0.fromHex(f.txHex||"");return[_.splitTransaction(J.toHex(),J.hasWitnesses()),f.index,void 0,void 0]}),G=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),w=_.splitTransaction(G,!0),C=_.serializeTransactionOutputs(w).toString("hex"),X={additionals:["bech32"],associatedKeysets:O.map(()=>y),inputs:O,outputScriptHex:C,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...X,...T})},E=({chain:L,additionalSignParams:m})=>{let _,y=null;async function T(G=!0){if(G&&!_)new gL("wallet_ledger_connection_error",{message:`Ledger connection failed:
|
|
2
|
+
${JSON.stringify({btcApp:_,checkBtcApp:G})}`});y||=await $()}async function O(){y=await $(),_=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:y})}return(G)=>{let w=typeof G==="string"?G:N0(G),C=j0(w);return{connect:async()=>{await T(!1),_=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:y})},getAddress:async()=>{let{toCashAddress:X}=await import("@swapkit/toolboxes/utxo");await T(!1);let{bitcoinAddress:f}=await _.getWalletPublicKey(w,{format:C});if(!f)throw new gL("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${w}`});return L==="bitcoin-cash"&&C==="legacy"?X(f).replace(/(bchtest:|bitcoincash:)/,""):f},getExtendedPublicKey:async(X="84'/0'/0'",f=76067358)=>{return await T(!1),_.getWalletXpub({path:X,xpubVersion:f})},signTransaction:async(X,f)=>{return await O(),Y0({btcApp:_,derivationPath:w,inputUtxos:f,psbt:X},m)}}}},SL=E({chain:"bitcoin"}),PL=E({chain:"litecoin"}),KL=E({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),IL=E({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),EL=E({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),VL=E({chain:"zcash",additionalSignParams:{additionals:["zcash","sapling"],segwit:!1,useTrustedInputForSegwit:!1}});import{Chain as M0,derivationPathToString as H0,NetworkDerivationPath as D0}from"@swapkit/helpers";import{encode as cL}from"ripple-binary-codec";var U0=2147483648;function q0(L){let m={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)m[_]=L[_];return m}async function z0(L){let{default:m}=await import("@ledgerhq/hw-app-xrp");return new m(L)}function A0({instance:L,derivationPath:m}){return L.getAddress(m)}var kL=async(L)=>{let m=H0(L||D0[M0.Ripple]),_=await $(),y=await z0(_),{address:T,publicKey:O}=await A0({derivationPath:m,instance:y});async function G(w){let{hashes:C}=await import("@swapkit/toolboxes/ripple"),f={...q0(w),Flags:w.Flags||U0,SigningPubKey:O.toUpperCase()},J=cL(f),W=await y.signTransaction(m,J),M=cL({...f,TxnSignature:W});return{hash:C.hashSignedTx(M),tx_blob:M}}return{address:T,sign:G}};var q=async({chain:L,derivationPath:m})=>{let{match:_}=await import("ts-pattern");return _(L).returnType().with(l.THORChain,()=>Promise.resolve(new TL(m))).with(l.Cosmos,()=>Promise.resolve(new mL(m))).with(l.Bitcoin,()=>Promise.resolve(SL(m))).with(l.BitcoinCash,()=>Promise.resolve(KL(m))).with(l.Dash,()=>Promise.resolve(EL(m))).with(l.Dogecoin,()=>Promise.resolve(IL(m))).with(l.Litecoin,()=>Promise.resolve(PL(m))).with(l.Zcash,()=>Promise.resolve(VL(m))).with(l.Ripple,()=>Promise.resolve(kL(m))).with(l.Tron,()=>Promise.resolve(AL(m))).with(l.Near,async()=>{let y=await $();return UL(y,m)}).with(l.Arbitrum,l.Aurora,l.Avalanche,l.BinanceSmartChain,l.Ethereum,l.Gnosis,l.Optimism,l.Polygon,l.Base,async()=>{let{getProvider:y}=await import("@swapkit/toolboxes/evm"),T={derivationPath:m,provider:await y(L)};return _(L).with(l.BinanceSmartChain,()=>NL(T)).with(l.Avalanche,()=>$L(T)).with(l.Arbitrum,()=>jL(T)).with(l.Optimism,()=>YL(T)).with(l.Polygon,()=>QL(T)).with(l.Base,()=>ML(T)).with(l.Aurora,()=>HL(T)).with(l.Gnosis,()=>DL(T)).otherwise(()=>JL(T))}).otherwise(()=>{throw new g0("wallet_chain_not_supported",{chain:L,wallet:S0.LEDGER})})};var c0=E0({connect:({addChain:L,supportedChains:m,walletType:_})=>async function y(T,O){let[G]=I0({chains:T,supportedChains:m,walletType:_});if(!G)return!1;let w=await x0({chain:G,derivationPath:O});return L({...w,chain:G,walletType:xL.LEDGER}),!0},name:"connectLedger",supportedChains:[R.Arbitrum,R.Aurora,R.Avalanche,R.Base,R.BinanceSmartChain,R.Bitcoin,R.BitcoinCash,R.Cosmos,R.Dash,R.Dogecoin,R.Ethereum,R.Gnosis,R.Litecoin,R.Near,R.Optimism,R.Polygon,R.Ripple,R.THORChain,R.Tron,R.Zcash],walletType:xL.LEDGER}),pm=V0(c0);function k0(L,m="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${m}:`)?L.split(`:${m}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}function i(L){if(Array.isArray(L))return L.forEach((y,T)=>{L[T]=i(y)}),L;if(typeof L!=="object")return L;let m={},_=Object.keys(L).sort();for(let y of _)m[y]=i(L[y]);return m}function b0(L){return JSON.stringify(i(L))}async function x0({chain:L,derivationPath:m}){switch(L){case R.BitcoinCash:case R.Bitcoin:case R.Dash:case R.Dogecoin:case R.Litecoin:case R.Zcash:{let{getUtxoToolbox:_}=await import("@swapkit/toolboxes/utxo"),y=await _(L),T=await q({chain:L,derivationPath:m}),O=await g({chain:L,ledgerClient:T});return{...y,address:O,transfer:async(w)=>{let C=w.feeRate||(await y.getFeeRates())[K0.Average],X=[R.Bitcoin].includes(L)?w.memo:k0(w.memo),{psbt:f,inputs:J}=await y.createTransaction({...w,feeRate:C,fetchTxHex:!0,memo:X,sender:O}),W=await T.signTransaction(f,J);return await y.broadcastTx(W)}}}case R.Ethereum:case R.Avalanche:case R.Arbitrum:case R.Optimism:case R.Polygon:case R.BinanceSmartChain:case R.Base:case R.Aurora:case R.Gnosis:{let{getEvmToolbox:_}=await import("@swapkit/toolboxes/evm"),y=await q({chain:L,derivationPath:m}),T=await g({chain:L,ledgerClient:y});return{...await _(L,{signer:y}),address:T}}case R.Cosmos:{let{createSigningStargateClient:_,getMsgSendDenom:y,getCosmosToolbox:T}=await import("@swapkit/toolboxes/cosmos"),O=await T(R.Cosmos),G=await q({chain:L,derivationPath:m}),w=await g({chain:L,ledgerClient:G});return{...O,address:w,transfer:async({assetValue:X,recipient:f,memo:J})=>{if(!X)throw new V("wallet_ledger_invalid_asset");let W={amount:[{amount:X.getBaseValue("string"),denom:y(`u${X.symbol}`).toLowerCase()}],fromAddress:w,toAddress:f},M=await bL(L),z=await _(M,G,"0.007uatom"),{transactionHash:Q}=await z.signAndBroadcast(w,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:W}],2,J);return Q}}}case R.THORChain:{let{SignMode:_}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:y}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),T=await import("@cosmjs/proto-signing"),O=T.encodePubkey??T.default?.encodePubkey,G=T.makeAuthInfoBytes??T.default?.makeAuthInfoBytes,{createStargateClient:w,buildEncodedTxBody:C,getCosmosToolbox:X,buildAminoMsg:f,getDefaultChainFee:J,fromBase64:W,parseAminoMessageForDirectSigning:M}=await import("@swapkit/toolboxes/cosmos"),z=await X(L),Q=await q({chain:L,derivationPath:m}),P=await g({chain:L,ledgerClient:Q}),c=J(L),{pubkey:yL,signTransaction:hL,sign:vL}=Q,OL=async({memo:A="",assetValue:wL,...uL})=>{let GL=await z.getAccount(P);if(!GL)throw new V("wallet_ledger_invalid_account");if(!wL)throw new V("wallet_ledger_invalid_asset");if(!yL)throw new V("wallet_ledger_pubkey_not_found");let{accountNumber:dL,sequence:iL}=GL,o=(iL||0).toString(),RL=i([f({assetValue:wL,memo:A,sender:P,...uL})]),oL=b0({account_number:dL?.toString(),chain_id:P0.THORChain,fee:c,memo:A,msgs:RL,sequence:o}),t=await hL(oL,o);if(!t)throw new V("wallet_ledger_signing_error");let tL=O({type:"tendermint/PubKeySecp256k1",value:yL}),nL=RL.map(M),pL=await C({chain:L,memo:A,msgs:nL}),aL=G([{pubkey:tL,sequence:Number(o)}],c.amount,Number.parseInt(c.gas,10),void 0,void 0,_.SIGN_MODE_LEGACY_AMINO_JSON),sL=t?.[0]?.signature?W(t[0].signature):Uint8Array.from([]),eL=y.fromPartial({authInfoBytes:aL,bodyBytes:pL,signatures:[sL]}),rL=y.encode(eL).finish(),L0=await bL(R.THORChain),m0=await w(L0),{transactionHash:_0}=await m0.broadcastTx(rL);return _0};return{...z,address:P,deposit:(A)=>OL(A),signMessage:vL,transfer:(A)=>OL(A)}}case R.Near:{let{getNearToolbox:_}=await import("@swapkit/toolboxes/near"),y=await q({chain:L,derivationPath:m}),T=await y.getAddress();return{...await _({signer:y}),address:T}}case R.Ripple:{let{getRippleToolbox:_}=await import("@swapkit/toolboxes/ripple"),y=await q({chain:L,derivationPath:m}),T=y.address;return{...await _({signer:y}),address:T}}case R.Tron:{let{createTronToolbox:_}=await import("@swapkit/toolboxes/tron"),y=await q({chain:L,derivationPath:m}),T=await g({chain:L,ledgerClient:y});return{...await _({signer:y}),address:T}}default:throw new V("wallet_ledger_chain_not_supported",{chain:L})}}export{c0 as ledgerWallet,pm as LEDGER_SUPPORTED_CHAINS};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=6DC292BFCE250A1B64756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.js.map
|