@rango-dev/queue-manager-rango-preset 0.61.2-next.0 → 0.61.2-next.1
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/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Xt=Object.defineProperty;var i=(e,t)=>Xt(e,"name",{value:t,configurable:!0});function Qt(){return process.env.REACT_APP_RANGO_API_KEY}i(Qt,"getApiKeyFromEnv");function Je(){return Qt()||"NOT_SET"}i(Je,"getApiKeyFromEnvOrNotSet");var Ne={API_KEY:Je(),BASE_URL:""};function j(e){return Ne[e]}i(j,"getConfig");function ze(e){return Ne=e,Ne}i(ze,"initConfig");import{warn as ne}from"@rango-dev/logging-core";import{SignerError as vt}from"rango-types";import{warn as en}from"@rango-dev/logging-core";import{Status as Le}from"@rango-dev/queue-manager-core";import{legacyReadAccountAddress as tn}from"@rango-dev/wallets-core/legacy";import{getBlockChainNameFromId as nn,getEvmProvider as rn}from"@rango-dev/wallets-shared";import an from"bignumber.js";import{PendingSwapNetworkStatus as ee,SignerError as on,TransactionType as I}from"rango-types";var Ie="Waiting for other swaps to complete",Ze="Waiting for connecting wallet",et=i((e,t)=>`Please change your ${e||"wallet"} account to ${t||"proper address"}`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET"),Se=i(e=>`Please connect your ${e??""} wallet.`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION"),ge=i(e=>`Please change your network to ${e}.`,"ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK"),P="CLIENT_UNEXPECTED_BEHAVIOUR";import{RangoClient as qt}from"rango-sdk";var me,q=i(()=>me||(me=new qt(j("API_KEY"),j("BASE_URL")),me),"httpService");import ot from"bignumber.js";import tt from"bignumber.js";var nt=i((e,t=null,n=null)=>{if(e===null||e==="")return"";let r=new tt(e),a=1,o=1e3;for(let l=0;l<60;l++)if(new tt(r.toFixed(l,a)).eq(r)){o=l;break}if(r.gte(1e4))return r.toFormat(0,a);if(r.gte(1e3)||r.gte(100))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,1))),a);if(r.gte(1))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,2))),a);if(r.gte(.01))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,4))),a);for(let l=t||4;l<17;l++)if(r.gte(Math.pow(10,-l)))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,l))),a);return r.isEqualTo(0)?"0":r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,8))),a)},"numberToString");import{SignerErrorCode as G,SignerError as Ht,isSignerErrorCode as Gt,isAPIErrorCode as Kt}from"rango-types";var Vt="Assertion failed (Unexpected behaviour)",$t="Create transaction failed in Rango Server",rt="Input wallet not found",D=class e extends Error{constructor(n,r,a,o){super(r);this._isPrettyError=!0;Object.setPrototypeOf(this,e.prototype),e.prototype._isPrettyError=!0,this.code=n,this.detail=o,this.root=a}static{i(this,"PrettyError")}static isPrettyError(n){return n instanceof e||Object.prototype.hasOwnProperty.call(n,"_isPrettyError")}getErrorDetail(){let n=typeof this.root=="object"&&this.root&&this.root.error?this.root.error:JSON.stringify(this.root),r=typeof this.root=="string"?this.root:this.root instanceof Error?this.root.message:n;return{extraMessage:this.message,extraMessageDetail:this.detail||r,extraMessageErrorCode:this.code||null}}static AssertionFailed(n){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Vt,null,n)}static BadStatusCode(n,r){return new e("TX_FAIL",n,null,`status code = ${r}`)}static CreateTransaction(n){return new e("FETCH_TX_FAILED",$t,null,n)}static WalletMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",rt,null,"Server requested for a blockchain or address not selected by user")}static BlockchainMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",rt,null,"Server requested for a blockchain or address not selected by user")}};function at(e){try{return e?Kt(e)?e:Gt(e)?{[G.REJECTED_BY_USER]:"USER_REJECT",[G.SIGN_TX_ERROR]:"CALL_WALLET_FAILED",[G.SEND_TX_ERROR]:"SEND_TX_FAILED",[G.TX_FAILED_IN_BLOCKCHAIN]:"TX_FAILED_IN_BLOCKCHAIN",[G.NOT_IMPLEMENTED]:P,[G.OPERATION_UNSUPPORTED]:P,[G.UNEXPECTED_BEHAVIOUR]:P}[e]:P:P}catch{return P}}i(at,"mapAppErrorCodesToAPIErrorCode");var H=i(e=>{if(!e)return{extraMessage:"",extraMessageErrorCode:null};if(D.isPrettyError(e))return e.getErrorDetail();if(Ht.isSignerError(e)){let t=e.getErrorDetail();return{extraMessage:t.message,extraMessageDetail:t.detail,extraMessageErrorCode:t.code}}return e instanceof Error?{extraMessage:e.toString(),extraMessageErrorCode:null}:typeof e!="string"?{extraMessage:JSON.stringify(e),extraMessageErrorCode:null}:{extraMessage:e,extraMessageErrorCode:null}},"prettifyErrorMessage");var Te=(a=>(a.error="error",a.warning="warning",a.info="info",a.success="success",a))(Te||{}),W=i((e,t)=>{try{return F(e,t)}catch{return null}},"getCurrentNamespaceOfOrNull"),F=i((e,t)=>{let n=t.evmTransaction?.blockChain||t.evmApprovalTransaction?.blockChain,r=t.starknetTransaction?.blockChain||t.starknetApprovalTransaction?.blockChain,a=t.tronTransaction?.blockChain||t.tronApprovalTransaction?.blockChain,o=t.cosmosTransaction?.blockChain,l=t.solanaTransaction?.blockChain,s=t.tonTransaction?.blockChain,u=t.suiTransaction?.blockChain,p=t.xrplTransaction?.blockChain,c=t.stellarTransaction?.blockChain;if(n)return{namespace:"EVM",network:n};if(r)return{namespace:"Starknet",network:r};if(a)return{namespace:"Tron",network:a};if(o)return{namespace:"Cosmos",network:o};if(l)return{namespace:"Solana",network:l};if(s)return{namespace:"Ton",network:s};if(u)return{namespace:"Sui",network:u};if(p)return{namespace:"XRPL",network:p};if(c)return{namespace:"Stellar",network:c};if(t.transferTransaction){let S=t.transferTransaction.fromWalletAddress;if(!S)throw D.BlockchainMissing();let d=Object.keys(e.wallets).find(g=>e.wallets[g]?.address===S);if(!d)throw D.BlockchainMissing();return{namespace:"UTXO",network:d}}throw new Error("Unsupported transaction type has been included in your swap.",{cause:t})},"getCurrentNamespaceOf"),le=i((e,t,n)=>{let a=n[t].info?.transactionUrl;if(a)return a.indexOf("/{txHash}")!==-1?a.replace("{txHash}",e):`${a}/${e}`},"getScannerUrl");function it(e,t){return e.steps.find(n=>n.status!=="failed"&&n.status!=="success"&&n.id!==t.id)||null}i(it,"getNextStep");var ct=i((e,t)=>{let n=e.wallets[t.evmTransaction?.blockChain||""]||e.wallets[t.evmApprovalTransaction?.blockChain||""]||e.wallets[t.tronTransaction?.blockChain||""]||e.wallets[t.tronApprovalTransaction?.blockChain||""]||e.wallets[t.starknetTransaction?.blockChain||""]||e.wallets[t.starknetApprovalTransaction?.blockChain||""]||e.wallets[t.cosmosTransaction?.blockChain||""]||e.wallets[t.solanaTransaction?.blockChain||""]||e.wallets[t.tonTransaction?.blockChain||""]||e.wallets[t.suiTransaction?.blockChain||""]||e.wallets[t.xrplTransaction?.blockChain||""]||e.wallets[t.stellarTransaction?.blockChain||""]||(t.transferTransaction?.fromWalletAddress?{address:t.transferTransaction.fromWalletAddress,walletType:Object.values(e.wallets).find(r=>r.address===t.transferTransaction?.fromWalletAddress)?.walletType}:null)||null;if(n==null)throw D.WalletMissing();return n},"getCurrentWalletTypeAndAddress"),J=i((e,t)=>ct(e,t).address,"getCurrentAddressOf");function R(e,t){let{address:n,walletType:r}=ct(e,t),a=Object.keys(e.wallets).map(u=>({k:u,v:e.wallets[u]})).find(({v:u})=>u.address===n&&u.walletType===r)||null,o=a?.k||null,l=a?.v||null,s=l?.walletType;if(l===null)throw D.AssertionFailed(`Wallet for source ${o} not passed: walletType: ${s}`);return l}i(R,"getRelatedWallet");function Pe(e,t){if(!t)return null;try{return R(e,t)}catch(n){return console.log({e:n}),null}}i(Pe,"getRelatedWalletOrNull");var lt=i((e,t,n,r)=>r?.find(o=>o.blockchain===e&&o.symbol?.toUpperCase()===t?.toUpperCase()&&o.address===n)?.usdPrice||null,"getUsdPrice");function Yt(e,t){let n=new ot(0);for(let r=0;r<e.fee.length;r++){let a=e.fee[r];if(a.expenseType==="DECREASE_FROM_OUTPUT")continue;let o=lt(a.asset.blockchain,a.asset.symbol,a.asset.address,t);n=n.plus(new ot(a.amount).multipliedBy(o||0))}return n}i(Yt,"getUsdFeeOfStep");function st(e,t){return{fromBlockchain:e.from.blockchain,fromBlockchainLogo:e.from.blockchainLogo,fromLogo:e.from.logo,fromSymbol:e.from.symbol,fromSymbolAddress:e.from.address,fromDecimals:e.from.decimals,fromAmountPrecision:e.fromAmountPrecision,fromAmountMinValue:e.fromAmountMinValue,fromAmountMaxValue:e.fromAmountMaxValue,fromAmountRestrictionType:e.fromAmountRestrictionType,fromUsdPrice:e.from.usdPrice,toBlockchain:e.to.blockchain,toBlockchainLogo:e.to.blockchainLogo,toSymbol:e.to.symbol,toSymbolAddress:e.to.address,toDecimals:e.to.decimals,toLogo:e.to.logo,toUsdPrice:e.to.usdPrice,swapperId:e.swapperId,swapperLogo:e.swapperLogo,swapperType:e.swapperType,expectedOutputAmountHumanReadable:e.toAmount,feeInUsd:t?nt(Yt(e,t?.tokens),null,8):null,estimatedTimeInSeconds:e.estimatedTimeInSeconds||null,internalSteps:null}}i(st,"mapSwapStepToPendingSwapStep");function jt(e){let{inputAmount:t,bestRoute:n,wallets:r,settings:a,validateBalanceOrFee:o,meta:l,swapMode:s="swap"}=e,u=n.result;if(!u)throw Error("Simulation result should not be null");return{creationTime:new Date().getTime().toString(),finishTime:null,requestId:n.requestId||"",inputAmount:t,wallets:r,status:"running",mode:s,isPaused:!1,extraMessage:null,extraMessageSeverity:null,extraMessageDetail:null,extraMessageErrorCode:null,networkStatusExtraMessage:null,networkStatusExtraMessageDetail:null,lastNotificationTime:null,settings:a,simulationResult:u,validateBalanceOrFee:o,steps:n.result?.swaps?.map((p,c)=>{let S=st(p,l);return{id:c+1,...S,internalSwaps:p?.internalSwaps?.map(d=>st(d,l))||null,outputAmount:"",status:"created",networkStatus:null,startTransactionTime:new Date().getTime(),externalTransactionId:null,executedTransactionId:null,executedTransactionTime:null,explorerUrl:null,diagnosisUrl:null,trackingCode:null,internalSteps:null,evmTransaction:null,evmApprovalTransaction:null,starknetTransaction:null,starknetApprovalTransaction:null,tronTransaction:null,tronApprovalTransaction:null,cosmosTransaction:null,solanaTransaction:null,transferTransaction:null,tonTransaction:null,suiTransaction:null,xrplTransaction:null,stellarTransaction:null,hyperliquidTransaction:null,hasAlreadyProceededToSign:!1}})||[]}}i(jt,"calculatePendingSwap");var Oe=(n=>(n.RouteEvent="routeEvent",n.StepEvent="stepEvent",n))(Oe||{}),De=(r=>(r.STARTED="started",r.FAILED="failed",r.SUCCEEDED="succeeded",r))(De||{}),z=(r=>(r.CREATE_TX="create_tx",r.SEND_TX="send_tx",r.TX_SENT="tx_sent",r))(z||{}),fe=(a=>(a.WAITING_FOR_QUEUE="waiting_for_queue",a.WAITING_FOR_WALLET_CONNECT="waiting_for_wallet_connect",a.WAITING_FOR_NETWORK_CHANGE="waiting_for_network_change",a.WAITING_FOR_CHANGE_WALLET_ACCOUNT="waiting_for_change_wallet_account",a))(fe||{}),B=(u=>(u.STARTED="started",u.FAILED="failed",u.SUCCEEDED="succeeded",u.TX_EXECUTION="tx_execution",u.TX_EXECUTION_BLOCKED="tx_execution_blocked",u.APPROVAL_TX_SUCCEEDED="approval_tx_succeeded",u.CHECK_STATUS="check_status",u.OUTPUT_REVEALED="output_revealed",u))(B||{}),Ue=(a=>(a.ERROR="error",a.SUCCESS="success",a.WARNING="warning",a.INFO="info",a))(Ue||{});function ut(e){return e.map(t=>{let{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:a,feeInUsd:o,executedTransactionId:l,executedTransactionTime:s,expectedOutputAmountHumanReadable:u,fromBlockchain:p,toBlockchain:c,fromSymbol:S,toSymbol:d,fromSymbolAddress:g,toSymbolAddress:m,swapperType:E,swapperId:C,outputAmount:_,fromAmountMaxValue:T,fromAmountMinValue:A,fromAmountPrecision:y,fromAmountRestrictionType:v,fromDecimals:x,status:k}=t;return{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:a,feeInUsd:o,executedTransactionId:l,executedTransactionTime:s,expectedOutputAmountHumanReadable:u,fromBlockchain:p,toBlockchain:c,fromSymbol:S,toSymbol:d,fromSymbolAddress:g,toSymbolAddress:m,swapperName:C,swapperType:E,outputAmount:_,fromAmountMaxValue:T,fromAmountMinValue:A,fromAmountPrecision:y,fromAmountRestrictionType:v,fromDecimals:x,status:k,transaction:h(t)}})}i(ut,"createSteps");function Jt(e,t,n){let{creationTime:r,finishTime:a,requestId:o,inputAmount:l,status:s,wallets:u,steps:p,settings:c}=e,S=ut(p),g={route:{creationTime:r,finishTime:a,requestId:o,inputAmount:l,status:s,wallets:u,steps:S,slippage:c.slippage,infiniteApproval:c.infiniteApprove},step:S[S.length-1]};if(n)g.step=ut([n])[0];else if(t==="failed"){let m=pt(S);m&&(g.step=m)}else{let m=Z(S);m&&(g.step=m)}return g}i(Jt,"getEventPayload");function zt(e,t,n){let r,{type:a}=e;switch(a){case"started":r={...e,type:"started"};break;case"failed":r={...e,type:"failed",inputAmount:n.inputAmount,inputAmountUsd:be(n),swapMode:n.mode||"swap"};break;case"succeeded":{r={...e,type:"succeeded",inputAmount:n.inputAmount,inputAmountUsd:be(n),outputAmount:n.steps[n.steps.length-1].outputAmount??"",outputAmountUsd:dt(n),swapMode:n.mode||"swap"};break}default:break}r&&j("emitter")?.emit("routeEvent",{event:r,route:t})}i(zt,"emitRouteEvent");function Zt(e,t,n){j("emitter")?.emit("stepEvent",{event:e,route:t,step:n})}i(Zt,"emitStepEvent");function w(e){let{event:t}=e,{type:n}=t,{route:r,step:a}=Jt(e.swap,n,e.step??void 0),o=`${a.fromBlockchain}.${a.fromSymbol}`,l=`${a.toBlockchain}.${a.toSymbol}`,s=a.outputAmount??"",u=e.step?W(e.swap,e.step):null,p="",c="info";switch(n){case"started":p="Swap process started",c="success";break;case"succeeded":p=`You received ${s} ${l}, hooray!`,c="success";break;case"failed":p=`Swap failed: ${e.swap?.extraMessage??"Reason is unknown"}`,c="error";break;case"tx_execution":t.status==="create_tx"?(p="Please wait while the transaction is created ...",c="info"):t.status==="send_tx"?(e.step&&L(e.step)?p=`Please confirm '${a.swapperName}' smart contract access to ${o}`:p="Please confirm transaction request in your wallet",c="warning"):t.status==="tx_sent"&&(p="Transaction sent successfully",c="info");break;case"check_status":e.step&&L(e.step)?p="Checking approve transaction status ...":p="Checking transaction status ...",c="info";break;case"approval_tx_succeeded":p="Smart contract called successfully",c="success";break;case"output_revealed":p="Transaction output amount revealed",c="success";break;case"tx_execution_blocked":t.status==="waiting_for_wallet_connect"?(p="Please connect your wallet.",c="warning"):t.status==="waiting_for_queue"?(p="Waiting for other swaps to complete",c="warning"):t.status==="waiting_for_change_wallet_account"?(p="Please change your wallet account.",c="warning"):t.status==="waiting_for_network_change"&&(p=`Please change your wallet network to ${u?.network}.`,c="warning");break;default:break}e.step&&Zt({...t,message:p,messageSeverity:c},r,a),(e.event.type==="failed"||!e.step)&&zt({...t,message:p,messageSeverity:c},r,e.swap)}i(w,"notifier");var We=null;function Ee(){return{claimedBy:()=>We?.id,setClaimer:e=>{We={id:e}},reset:()=>{We=null}}}i(Ee,"claimQueue");var K={};function we(){return{getTransactionDataByHash:e=>K[e]||{},setTransactionDataByHash:(e,t)=>{K[e]||(K[e]={}),K[e].response=t.response||K[e].response,K[e].receiptReceived=t.receiptReceived||K[e].receiptReceived||!1}}}i(we,"inMemoryTransactionsData");var f=i(e=>e.steps.find(t=>t.status!=="failed"&&t.status!=="success")||null,"getCurrentStep"),h=i(e=>{let{evmTransaction:t,evmApprovalTransaction:n,cosmosTransaction:r,solanaTransaction:a,transferTransaction:o,starknetApprovalTransaction:l,starknetTransaction:s,tronApprovalTransaction:u,tronTransaction:p,tonTransaction:c,suiTransaction:S,xrplTransaction:d}=e;return t||n||r||a||o||l||s||u||p||c||S||d},"getCurrentStepTx"),ye=i((e,t)=>{e.transferTransaction=null,e.cosmosTransaction=null,e.evmTransaction=null,e.solanaTransaction=null,e.evmApprovalTransaction=null,e.starknetApprovalTransaction=null,e.starknetTransaction=null,e.tronApprovalTransaction=null,e.tronTransaction=null,e.tonTransaction=null,e.suiTransaction=null,e.xrplTransaction=null,e.stellarTransaction=null;let n=t.type;switch(n){case I.EVM:t.isApprovalTx?e.evmApprovalTransaction=t:e.evmTransaction=t;break;case I.TRON:t.isApprovalTx?e.tronApprovalTransaction=t:e.tronTransaction=t;break;case I.STARKNET:t.isApprovalTx?e.starknetApprovalTransaction=t:e.starknetTransaction=t;break;case I.COSMOS:e.cosmosTransaction=t;break;case I.SOLANA:e.solanaTransaction=t;break;case I.TRANSFER:e.transferTransaction=t;break;case I.TON:e.tonTransaction=t;break;case I.SUI:e.suiTransaction=t;break;case I.XRPL:e.xrplTransaction=t;break;case I.STELLAR:e.stellarTransaction=t;break;case I.HYPERLIQUID:e.hyperliquidTransaction=t;break;default:(r=>{throw new Error(`${r} was unhandled!`)})(n)}return e},"setCurrentStepTx"),Me=i(e=>h(e)?.type,"getCurrentStepTxType"),L=i(e=>{let{evmApprovalTransaction:t,starknetApprovalTransaction:n,tronApprovalTransaction:r}=e;return!!(t||n||r)},"isApprovalCurrentStepTx");function O({getStorage:e,setStorage:t,nextStatus:n,nextStepStatus:r,message:a,details:o,errorCode:l=null,hasAlreadyProceededToSign:s,trace:u=null}){let p=e().swapDetails,c=f(p),S={swap:p,step:c};if(r&&c&&(c.status=r),n&&(p.status=n),p.hasAlreadyProceededToSign=s,n&&["failed","success"].includes(n)&&(p.finishTime=new Date().getTime().toString()),(a||o)&&(p.extraMessage=a||"",p.extraMessageDetail=o||""),r&&["failed"].includes(r)){let d=o&&o.includes("Warning")?"Swap canceled by user.":o,g=Pe(p,c)?.walletType;p.extraMessageSeverity="error";let m=at(l);S.failureType=m;let E=l!=="REJECTED_BY_USER"&&u?.message&&typeof u.message=="string"?u.message:d||"";q().reportFailure({requestId:p.requestId,step:c?.id||1,eventType:m,reason:E,tags:g?{wallet:g}:void 0}).then().catch()}else r&&["running"].includes(r)?p.extraMessageSeverity="info":r&&["success","approved"].includes(r)?p.extraMessageSeverity="success":r&&["waitingForApproval"].includes(r)&&(p.extraMessageSeverity="warning");return r==="running"&&c&&(c.startTransactionTime=new Date().getTime()),t({...e(),swapDetails:p}),S}i(O,"updateSwapStatus");function sn({getStorage:e,setStorage:t},n,r){let a=e().swapDetails;a.hasAlreadyProceededToSign=null;let o=f(a);o.executedTransactionId=n,o.executedTransactionTime=new Date().getTime().toString(),r?.url&&(o.explorerUrl=[...o.explorerUrl||[],{url:r.url,description:r.description||null}]),L(o)?a.extraMessage="Checking approve transaction status ...":a.extraMessage="Checking transaction status ...",a.extraMessageDetail="",a.extraMessageSeverity="info",t({...e(),swapDetails:a}),w({event:{type:"tx_execution",status:"tx_sent"},swap:a,step:o}),w({event:{type:"check_status"},swap:a,step:o})}i(sn,"setStepTransactionIds");function cn({getStorage:e,setStorage:t},n,r){let a=e().swapDetails,o=f(a);if(!o)return;let l=new Date;a.lastNotificationTime=l.getTime().toString(),!(o.networkStatus===ee.WaitingForConnectingWallet&&a.networkStatusExtraMessage===n&&a.networkStatusExtraMessageDetail===r)&&(o.networkStatus=ee.WaitingForConnectingWallet,a.networkStatusExtraMessage=n,a.networkStatusExtraMessageDetail=r,t({...e(),swapDetails:a}))}i(cn,"markRunningSwapAsWaitingForConnectingWallet");function gt({getStorage:e,setStorage:t}){let n=e().swapDetails,r=f(n);if(!r)return;let{type:a}=U(n),o=F(n,r),l=`Change ${a} wallet network to ${o.network}`,s=`We\u2019re switching the connected network to ${o.network}. Please check your wallet.`,u=new Date;return n.lastNotificationTime=u.getTime().toString(),r.networkStatus=ee.WaitingForNetworkChange,n.networkStatusExtraMessage=l,n.networkStatusExtraMessageDetail=s,t({...e(),swapDetails:n}),{swap:n,step:r}}i(gt,"markRunningSwapAsSwitchingNetwork");function mt({getStorage:e,setStorage:t}){let n=e().swapDetails,r=f(n);if(r)return n.networkStatusExtraMessage="",n.networkStatusExtraMessageDetail="",r.networkStatus=ee.WaitingForQueue,w({event:{type:"tx_execution_blocked",status:"waiting_for_queue"},swap:n,step:r}),t({...e(),swapDetails:n}),{swap:n,step:r}}i(mt,"markRunningSwapAsDependsOnOtherQueues");async function xe(e){return new Promise(t=>setTimeout(t,e))}i(xe,"delay");var ln=i((e,t)=>e.wallets[t]?.walletType,"getSwapWalletType");function Fe(e){return e===null||e?.blockchains===null||e?.blockchains.length===0}i(Fe,"isWalletNull");function U(e){let t=f(e),n=W(e,t);if(!n)return{type:null,namespace:null,address:null};let r=ln(e,n.network),a=e.wallets[n.network];return{type:r||null,namespace:n,address:a?a.address:null}}i(U,"getRequiredWallet");async function un(e){try{return await e.request({method:"eth_chainId"})||e?.chainId}catch{return e?.chainId}}i(un,"getChainId");async function pn(e,t,n){let r=rn(e,n);if(r)return await un(r);let o=t(n).get("evm");if(!o)throw new Error("EVM namespace not found for wallet type: "+n);return o.getChainId()}i(pn,"getProviderChainId");async function Tt(e,t,n,r,a,o){if(Fe(n))return!1;let l=W(e,t);if(!l)return!1;if(r.evmBasedChains.find(s=>s.name===l.network)){try{let s=e.wallets[l.network];if(s){let u=await pn(a,o,s.walletType);if(u){let p=nn(u,Object.entries(r.blockchains).map(([,c])=>c));if(p&&p.toLowerCase()===l.network.toLowerCase())return!0;if(p&&p.toLowerCase()!==l.network.toLowerCase())return!1}}}catch(s){console.log(s)}return!1}return!0}i(Tt,"isNetworkMatchedForTransaction");var ft=i((e,t)=>(e.wallets[t.evmTransaction?.blockChain||""]||e.wallets[t.evmApprovalTransaction?.blockChain||""]||e.wallets[t.tronTransaction?.blockChain||""]||e.wallets[t.tronApprovalTransaction?.blockChain||""]||e.wallets[t.starknetTransaction?.blockChain||""]||e.wallets[t.starknetApprovalTransaction?.blockChain||""]||e.wallets[t.cosmosTransaction?.blockChain||""]||e.wallets[t.solanaTransaction?.blockChain||""]||e.wallets[t.tonTransaction?.blockChain||""]||e.wallets[t.suiTransaction?.blockChain||""]||e.wallets[t.xrplTransaction?.blockChain||""]||t.transferTransaction?.fromWalletAddress||null)!==null,"isTxAlreadyCreated");function Ae(e){let{getStorage:t,setStorage:n}=e,r=t().swapDetails,a=f(r);a?.networkStatus&&(a.networkStatus=null,n({...t(),swapDetails:r}))}i(Ae,"resetNetworkStatus");function Be(e,t={message:"",details:"",status:null}){let{message:n,details:r,status:a}=t,{getStorage:o,setStorage:l}=e,s=o().swapDetails,u=f(s);u?.networkStatus&&(s.networkStatusExtraMessage=n,s.networkStatusExtraMessageDetail=r,u.networkStatus=a,l({...o(),swapDetails:s}))}i(Be,"updateNetworkStatus");function Et(e,t){let{context:n,queue:r}=t,a=r.getStorage().swapDetails,{ok:o,reason:l}=Xe(a,n.state);if(!o){let s=f(a),{type:u,address:p}=U(a);w({event:{type:"tx_execution_blocked",...l==="account_miss_match"?{status:"waiting_for_change_wallet_account",requiredAccount:p??void 0}:{status:"waiting_for_wallet_connect",requiredWallet:u??void 0,requiredAccount:p??void 0}},swap:a,step:s}),cn({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},Ze,e.reason.description);return}r.unblock()}i(Et,"onBlockForConnectWallet");function wt(e,t){let{context:n,queue:r}=t,a=r.getStorage().swapDetails,o=f(a);if(!o||a.status!=="running")return;let l=gt({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)}),s=W(a,o)?.network,u=U(a).type,p=u?n.state(u).network:void 0;l&&w({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",requiredNetwork:s??void 0,currentNetwork:p??void 0},swap:l.swap,step:l.step});let{type:c,namespace:S}=U(a);if(c&&S?.network&&n.canSwitchNetworkTo(c,S.network,S)){let d=n.switchNetwork(c,S);d&&d.then(()=>{r.unblock()}).catch(g=>{Be({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},{message:g.message,details:g.message,status:ee.NetworkChangeFailed})})}}i(wt,"onBlockForChangeNetwork");function yt(e,t){let{getBlockedTasks:n,forceExecute:r,queue:a,manager:o,context:l}=t,{setClaimer:s,claimedBy:u,reset:p}=Ee(),c=n().filter(T=>T.reason.reason==="depends_on_other_queues");if(c.length===0)return;let S=u(),d=!!S;if(S===a.id)return;if(d){mt({getStorage:a.getStorage.bind(a),setStorage:a.setStorage.bind(a)});return}let g=c.find(T=>T.queue_id===t.queue_id);g||(g=c[0]),s(g.queue_id);let m=g.storage.get(),{type:E,namespace:C,address:_}=U(m.swapDetails);r(g.queue_id,{claimedBy:u(),resetClaimedBy:()=>{p(),E&&He({walletType:E,network:C?.network,accounts:_?[_]:[]},o,l.canSwitchNetworkTo)}})}i(yt,"onDependsOnOtherQueues");function Xe(e,t){let{type:n,address:r}=U(e);if(!n||!r)return{ok:!1,reason:"not_connected"};let a=t(n),{accounts:o,connected:l}=a,s=o||[];return l?{ok:s.some(p=>{let{address:c}=tn(p);return r.toLocaleLowerCase()===c.toLocaleLowerCase()}),reason:"account_miss_match"}:{ok:!1,reason:"not_connected"}}i(Xe,"isRequiredWalletConnected");function Qe(e,t,n){let{setTransactionDataByHash:r}=we(),{getStorage:a,context:o}=e,{meta:l}=o,s=a().swapDetails,u=f(s),p=F(s,u),c=le(t.hash,p.network,l.blockchains);sn(e,t.hash,c&&(!t.response||t.response&&!t.response.hashRequiringUpdate)?{url:c,description:n.isApproval?"Approve":"Swap"}:void 0),t.response&&r(t.hash,{response:t.response})}i(Qe,"updateStorageOnSuccessfulSign");function Ce(e,t){return({hash:n,response:r})=>{let{schedule:a,next:o}=e;Qe(e,{hash:n,response:r},t),a("CHECK_TRANSACTION_STATUS"),o()}}i(Ce,"handleSuccessfulSign");function $(e){return t=>{let{getStorage:n,setStorage:r,failed:a}=e,o=n().swapDetails,l=f(o);if(o.status==="failed")return;let s=R(o,l),{extraMessage:u,extraMessageDetail:p,extraMessageErrorCode:c}=H(t);en(t,{tags:{requestId:o.requestId,rpc:!0,swapper:l?.swapperId||"",walletType:s?.walletType||""},context:on.isSignerError(t)?t.getErrorContext():{}});let S=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:u,details:p,errorCode:c,trace:t?.cause});w({event:{type:"failed",reason:u,reasonCode:S.failureType??P,inputAmount:M(o),inputAmountUsd:X(o)},...S}),a()}}i($,"handleRejectedSign");function xt(e){let{lastConnectedWallet:t,evmChains:n,manager:r}=e,{walletType:a,network:o}=t;n.some(l=>l.name==o)&&r?.getAll().forEach(l=>{let s=l.list.getStorage(),u=s?.swapDetails;if(u&&u.status==="running"){let p=f(u);if(p){let c=s?.swapDetails.wallets[p.fromBlockchain]?.walletType,S=Object.keys(l.list.state.tasks).some(g=>{let m=l.list.state.tasks[g];return m.status===Le.BLOCKED&&["waiting_for_connecting_wallet"].includes(m.blockedFor?.reason)}),d=W(u,p)?.network;if(!n.some(g=>g.name==d))return;if(c===a&&S&&d!=o){let g=l.list,{type:m}=U(u),E=ge(m);l.list.block({reason:{reason:"waiting_for_network_change",description:E},silent:!0});let C=gt({getStorage:g.getStorage.bind(g),setStorage:g.setStorage.bind(g)});C&&w({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",currentNetwork:o,requiredNetwork:d??void 0},swap:C.swap,step:C.step})}}}})}i(xt,"checkWaitingForConnectWalletChange");function qe(e){e?.getAll().forEach(t=>{if(Object.keys(t.list.state.tasks).some(r=>{let a=t.list.state.tasks[r];return a.status===Le.BLOCKED&&["waiting_for_network_change","depends_on_other_queues"].includes(a.blockedFor?.reason)})){let r=t.list.getStorage()?.swapDetails;if(r.status==="running"){let{type:a}=U(r),o=Se(a);t.list.block({reason:{reason:"waiting_for_connecting_wallet",description:o}})}}})}i(qe,"checkWaitingForNetworkChange");function dn(e){let t=e?.getAll()||new Map,n=[];return t.forEach(r=>{let o=r.list.getStorage()?.swapDetails;!o||o.status!=="running"||n.push(o)}),n}i(dn,"getRunningSwaps");function Sn(e){e.forEach(t=>{let n=f(t),r="tx_execution_blocked",a;n?.networkStatus===ee.WaitingForQueue?a="waiting_for_queue":t?.status==="running"&&(a="waiting_for_wallet_connect"),r&&w&&w({event:{type:r,status:a??"waiting_for_queue"},swap:t,step:n})})}i(Sn,"resetRunningSwapNotifsOnPageLoad");function He(e,t,n,r={fallbackToOnlyWallet:!0}){let{walletType:a,network:o}=e;if(!a)return;let l=[],s=[];t?.getAll().forEach(p=>{if(p.status===Le.BLOCKED){let c=p.list.getStorage(),S=c?.swapDetails;if(S&&S.status==="running"){let d=f(S);d&&(o&&W(S,d)?.network==o&&c?.swapDetails.wallets[o]?.walletType===a?l.push(p.list):c?.swapDetails.wallets[d.fromBlockchain]?.walletType===a&&s.push(p.list))}}});let u;if(l.length>0){if(u=l[0],l.length>1)for(let p=1;p<l.length;p++){let c=l[p];mt({getStorage:c.getStorage.bind(c),setStorage:c.setStorage.bind(c)})}}else s.length>0&&r.fallbackToOnlyWallet&&(u=s[0]);if(u){let p=u.getStorage(),c=f(p?.swapDetails),S=c?W(p.swapDetails,c):null;!o||!S||!n?.(a,o,S)?u.unblock():u.checkBlock()}}i(He,"retryOn");function At(e){return!!e.evmTransaction||!!e.evmApprovalTransaction}i(At,"isNeedBlockQueueForParallel");async function Ct(e){let t=await e;if(!t.ok||!t.transaction)throw D.CreateTransaction(t.error||"bad response from create tx endpoint");return t}i(Ct,"throwOnOK");function gn(e,t){let{reset:n}=Ee();e.actions.cancel();let r=O({getStorage:e.actions.getStorage,setStorage:e.actions.setStorage,message:"Swap canceled by user.",details:"Warning: If you've already signed and sent a transaction, it won't be affected, but next swap steps will not be executed.",nextStatus:"failed",nextStepStatus:"failed",errorCode:"USER_CANCEL"});return w({event:{type:"failed",reasonCode:"USER_CANCEL",reason:r.swap.extraMessage??void 0,inputAmount:M(r.swap),inputAmountUsd:X(r.swap)},swap:r.swap,step:r.step}),n(),t&&t?.retry(),r}i(gn,"cancelSwap");function Z(e){return e.slice().reverse().find(t=>t.status==="success")}i(Z,"getLastSuccessfulStep");function pt(e){return e.slice().reverse().find(t=>t.status==="failed")}i(pt,"getFailedStep");function mn(e){let{transaction:t}=e;return t?.type===I.EVM&&t.isApprovalTx||t?.type===I.STARKNET&&t.isApprovalTx||t?.type===I.TRON&&t.isApprovalTx}i(mn,"isApprovalTX");function ke(e,t){let n=new an(e).multipliedBy(t);return isNaN(n.toNumber())?"":n.toString()}i(ke,"getTokenAmountInUsd");function be(e){return ke(e.inputAmount,e.steps[0].fromUsdPrice??"")}i(be,"getSwapInputUsd");function dt(e){let t=e.steps[e.steps.length-1];return ke(t.outputAmount??"",t.toUsdPrice??"")}i(dt,"getSwapOutputUsd");function kt(e){let t=["success","failed"],n=e.steps.findLastIndex(r=>t.includes(r.status));return n<0?void 0:{step:e.steps[n],index:n}}i(kt,"getLastFinishedStep");function M(e){let t=kt(e);return t?t.index===0?e.inputAmount:e.steps[t.index-1].outputAmount??"":""}i(M,"getLastFinishedStepInput");function X(e){let t=kt(e);return ke(M(e),t?.step?.fromUsdPrice??"")}i(X,"getLastFinishedStepInputUsd");function _e(e){let t=Z(e.steps);return ke(t?.outputAmount??"",t?.toUsdPrice??"")}i(_e,"getLastSuccessfulStepOutputUsd");function te(e,t,n){return{type:"failed",reason:t,reasonCode:n??P,inputAmount:M(e),inputAmountUsd:X(e)}}i(te,"createStepFailedEvent");var _t=5e3,Tn=5e3;async function fn({getStorage:e,setStorage:t,next:n,schedule:r,retry:a,failed:o,context:l}){let s=e().swapDetails,{meta:u}=l,p=new Error("check status Error"),c=f(s);if(!c?.executedTransactionId)return;let S=h(c),d=c.executedTransactionId,g=!1,m=null,E=null,{getTransactionDataByHash:C,setTransactionDataByHash:_}=we();try{let x=Me(c),k=R(s,c);x&&k&&(E=(await l.getSigners(k.walletType)).getSigner(x))}catch{}try{let{response:x,receiptReceived:k}=C(d);if(E?.wait&&!k){let b=S?.blockChain&&u.blockchains?.[S?.blockChain]?.chainId||void 0,{hash:N,response:Y}=await E.wait(d,b,x);if(N!==d){c.executedTransactionId=N||c.executedTransactionId;let Q=F(s,c),ce;!!Object.keys(u.blockchains).length&&(ce=le(c.executedTransactionId,Q.network,u.blockchains)),ce&&c.explorerUrl&&c.explorerUrl?.length>=1&&(c.explorerUrl[c.explorerUrl.length-1]={url:ce,description:"Replaced Swap"}),d=c.executedTransactionId,N&&Y&&_(N,{response:Y})}else _(N,{receiptReceived:!0})}}catch(x){let{extraMessage:k,extraMessageDetail:b,extraMessageErrorCode:N}=H(x),Y=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:k,details:b,errorCode:N}),Q=te(s,k,Y.failureType);ne(p,{tags:{type:"singer-error",reason:Q.reason,reasonCode:Q.reasonCode,message:k,messageDetail:b,pendingSwap:s},context:vt.isSignerError(x)?x.getErrorContext():{}}),g=!0}let T={requestId:s.requestId,txId:d,step:c.id};try{m=await q().checkStatus(T)}catch{await xe(_t),a(),ne(p,{tags:{type:"request-error",requestBody:T,pendingSwap:s}});return}if(g)return o();if(c?.status==="failed")return;let A=m?.outputAmount||(c.outputAmount?c.outputAmount:null),y=c.outputAmount||null;s.extraMessage=m?.extraMessage||s.extraMessage,s.extraMessageSeverity="info",s.extraMessageDetail="",c.status=m?.status||c.status,c.diagnosisUrl=m?.diagnosisUrl||c.diagnosisUrl||null,c.outputAmount=A||c.outputAmount,c.explorerUrl=m?.explorerUrl||c.explorerUrl,c.internalSteps=m?.steps||null;let v=m?.newTx;if(v&&(c.status="created",c.executedTransactionId=null,c.executedTransactionTime=null,ye(c,v)),y===null&&A!==null?w({event:{type:"output_revealed",outputAmount:A},swap:s,step:c}):y===null&&A===null&&w({event:{type:"check_status"},swap:s,step:c}),c.status==="success"){let x=it(s,c);s.extraMessageDetail="",s.extraMessage=x?`starting next step: ${x.swapperId}: ${x.fromBlockchain} -> ${x.toBlockchain}`:"",w({event:{type:"succeeded",inputAmount:M(s),inputAmountUsd:X(s),outputAmount:c.outputAmount??"",outputAmountUsd:_e(s)},swap:s,step:c})}else c.status==="failed"&&(s.extraMessage="Transaction failed in blockchain",s.extraMessageSeverity="error",s.extraMessageDetail=m?.extraMessage||"",s.status="failed",s.finishTime=new Date().getTime().toString(),ne(p,{tags:{type:"transaction-failed",message:s.extraMessage,messageDetails:s.extraMessageDetail,pendingSwap:s}}));t({...e(),swapDetails:s}),m?.status==="failed"?o():m?.status==="success"||m?.status==="running"&&m.newTx?(r("SCHEDULE_NEXT_STEP"),n()):(await xe(_t),a())}i(fn,"checkTransactionStatus");async function En({getStorage:e,setStorage:t,next:n,schedule:r,retry:a,failed:o,context:l}){let s=e().swapDetails,{meta:u}=l,{getTransactionDataByHash:p,setTransactionDataByHash:c}=we(),S=new Error("check approval status error"),d=f(s);if(!d){console.log("ignore check status, current step is null");return}let g=h(d);if(!d?.executedTransactionId)return;let m=d.executedTransactionId,E=null;try{let T=Me(d),A=R(s,d);T&&A&&(E=(await l.getSigners(A.walletType)).getSigner(T))}catch{}try{let{response:T,receiptReceived:A}=p(m);if(E?.wait&&!A){let y=g?.blockChain&&u.blockchains?.[g?.blockChain]?.chainId||void 0,{hash:v,response:x}=await E.wait(m,y,T);if(v!==m){d.executedTransactionId=v||d.executedTransactionId;let k=F(s,d),b;!!Object.keys(u.blockchains).length&&(b=le(d.executedTransactionId,k.network,u.blockchains)),b&&d.explorerUrl&&d.explorerUrl?.length>=1&&(d.explorerUrl[d.explorerUrl.length-1]={url:b,description:"Replaced Approve"}),m=d.executedTransactionId,v&&x&&c(v,{response:x})}else c(v,{receiptReceived:!0})}}catch(T){let{extraMessage:A,extraMessageDetail:y,extraMessageErrorCode:v}=H(T),x=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:A,details:y,errorCode:v}),k=te(s,A,x.failureType);return w({event:k,...x}),ne(S,{tags:{type:"singer-error",reason:k.reason,reasonCode:k.reasonCode,message:A,messageDetail:y,pendingSwap:s},context:vt.isSignerError(T)?T.getErrorContext():{}}),o()}let C=!1,_={requestId:s.requestId,txId:d.executedTransactionId};try{let T=await q().checkApproval(_.requestId,_.txId);if(d?.status==="failed")return;if(C=T.isApproved,!C&&(T.txStatus==="failed"||T.txStatus==="success")){let A,y;T.txStatus==="failed"?(A="Approve transaction failed",y="Smart contract approval tx failed in blockchain."):(A="Not enough approval",T.requiredApprovedAmount&&T.currentApprovedAmount?y=`Required approval: ${T.requiredApprovedAmount}, current approval: ${T.currentApprovedAmount}`:y="You still don't have enough approval for this swap.");let v=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",errorCode:"INSUFFICIENT_APPROVE",message:A,details:y}),x=te(s,A,v.failureType);w({event:x,...v}),ne(S,{tags:{type:"approval-failed",message:s.extraMessage,messageDetails:s.extraMessageDetail,pendingSwap:s}}),o()}else C||w({event:{type:"check_status"},swap:s,step:d})}catch{C=!1,ne(S,{tags:{type:"request-error",requestBody:_,pendingSwap:s}})}C?(d.status="approved",s.extraMessage=`Spending ${d.fromSymbol} approved successfully.`,s.extraMessageDetail=null,s.extraMessageSeverity="success",d.evmApprovalTransaction=null,d.executedTransactionId=null,d.executedTransactionTime=null,d.starknetApprovalTransaction=null,d.tronApprovalTransaction=null,t({...e(),swapDetails:s}),w({event:{type:"approval_tx_succeeded"},swap:s,step:d}),r("SCHEDULE_NEXT_STEP"),n()):(await xe(Tn),a())}i(En,"checkApprovalStatus");async function ht(e){let t=e.getStorage().swapDetails,n=f(t);if(!n){console.log("ignore check status, current step is null",t.requestId);return}Ae(e),n.status==="running"?await fn(e):n.status==="waitingForApproval"&&await En(e)}i(ht,"checkStatus");import{PendingSwapNetworkStatus as Rt}from"rango-types";import{Err as he,Ok as Ge}from"ts-results";function ve(e){return e.claimedBy===e._queue?.id}i(ve,"isClaimedByCurrentQueue");function re(e,t){e.block(t),ve(e.context)&&e.context.resetClaimedBy&&e.context.resetClaimedBy()}i(re,"requestBlockQueue");async function ae(e){let{getStorage:t,context:n}=e,r=t().swapDetails,a=f(r),o=wn(e);if(o.err)return o;let l=await yn(e);if(l.err)return l;a.networkStatus===Rt.NetworkChanged&&Be(e,{message:"",details:"The network has been successfully changed.",status:Rt.NetworkChanged});let s=At(a),u=ve(n);if(s&&!u){let p={reason:"depends_on_other_queues",description:Ie,details:{}};return new he(p)}return new Ge(!0)}i(ae,"checkEnvironmentBeforeExecuteTransaction");function wn(e){let{getStorage:t,context:n}=e,{wallets:r}=n,a=t().swapDetails;if(!Xe(a,n.state).ok){let{type:l,address:s}=U(a),u=r?.blockchains?.find(S=>!S.accounts?.find(d=>d.walletType===l)),p=Fe(r)||u?Se(l):et(l,s),c={reason:"waiting_for_connecting_wallet",description:p};return new he(c)}return new Ge(!0)}i(wn,"ensureRequiredWalletIsConnected");async function yn(e){let{getStorage:t,context:n}=e,{meta:r,wallets:a,providers:o,hubProvider:l}=n,s=t().swapDetails,u=f(s),p=await Tt(s,u,a,r,o,l),{claimedBy:c}=Ee();if(!!c()&&!ve(n)&&!p){let g=Ie,m={reason:"depends_on_other_queues",details:g};return new he(m)}else if(!p){let g=F(s,u),m=ge(g.network),E={reason:"waiting_for_network_change",details:m};return new he(E)}return new Ge(!0)}i(yn,"ensureWalletIsOnCorrectNetwork");import{Err as Nt,Ok as It}from"ts-results";function oe(e){let{getStorage:t,context:n}=e,{isMobileWallet:r}=n,a=t().swapDetails,o=f(a),l=R(a,o),s=r(l?.walletType),u=h(o),p=L(o);if(!u||!u.type)return new Nt({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: tx is null!",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"});let c=!!a.hasAlreadyProceededToSign;return p?new It({nextStatus:void 0,nextStepStatus:"waitingForApproval",details:"Waiting for approve transaction to be mined and confirmed successfully",message:`Waiting for approval of ${o?.fromSymbol} coin ${s?"on your mobile phone!":""}`}):c?new Nt({message:"Transaction is expired. Please try again.",nextStepStatus:"failed",nextStatus:"failed",details:"",errorCode:"TX_EXPIRED"}):new It({message:"Executing transaction ...",nextStepStatus:"running",nextStatus:"running",details:`${s?"Check your mobile phone!":""}`})}i(oe,"produceNextStateForTransaction");function se(e,t){let{getStorage:n,setStorage:r}=e,a=n().swapDetails,o=f(a),l=L(o),s=typeof a.hasAlreadyProceededToSign=="boolean",u=O({getStorage:n,setStorage:r,nextStepStatus:t.nextStepStatus,nextStatus:t.nextStatus,message:t.message,details:t.details,errorCode:t.errorCode,hasAlreadyProceededToSign:l?void 0:s});w({event:{type:"failed",reason:t.message,reasonCode:u.failureType??P,inputAmount:M(a),inputAmountUsd:X(a)},...u})}i(se,"onNextStateError");function ie(e,t){let{getStorage:n,setStorage:r}=e,a=n().swapDetails,o=f(a),l=L(o),s=typeof a.hasAlreadyProceededToSign=="boolean",u=O({getStorage:n,setStorage:r,nextStepStatus:t.nextStepStatus,nextStatus:t.nextStatus,message:t.message,details:t.details,hasAlreadyProceededToSign:l?void 0:s});w({event:{type:"tx_execution",status:"send_tx"},...u})}i(ie,"onNextStateOk");import{isXrplTransaction as xn}from"rango-types";import{Err as Re,Ok as Pt}from"ts-results";async function ue(e){return e?xn(e)?e.data.TransactionType!=="Payment"?new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: We only support XRPL transactions with payment type",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"}):Pt(e):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: Expected XRPL transaction but it doesn't match with the structure.",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"}):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: tx is null!",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"})}i(ue,"ensureXrplTransactionIsValid");async function pe(e,t){let r=e.hubProvider(t).get("xrpl");return r?Pt(r):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"XRPL is not available on your wallet.",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"})}i(pe,"ensureXrplNamespaceExists");async function Ot(e,t,n){return!!(await n.namespace.accountLines(e,{peer:t.account})).some(a=>a.currency===t.currency&&a.account===t.account&&a.limit!=="0")}i(Ot,"checkTruslineAlreadyOpened");function Dt(e,t){return{TransactionType:"TrustSet",Account:e,LimitAmount:{currency:t.currency,issuer:t.account,value:t.amount}}}i(Dt,"createTrustlineTransaction");async function Ke(e){let t=await ae(e);if(t.err){re(e,t.val);return}let{failed:n,context:r,schedule:a,getStorage:o,next:l}=e,{meta:s,getSigners:u}=r,p=o().swapDetails,c=f(p),S=h(c),d=R(p,c),g=J(p,c),m=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),E=i(()=>{a("EXECUTE_XRPL_TRANSACTION"),l(),m()},"onSuccessfulFinish"),C=i(N=>{se(e,N.val),n(),m()},"handleErr"),_=oe(e);if(_.err){C(_);return}ie(e,_.val);let T=await ue(S);if(T.err){C(T);return}let A=await pe(r,d.walletType);if(A.err){C(A);return}let y=T.val.prerequisites.find(N=>N.type==="XRPL_CHANGE_TRUSTLINE");if(!y){E();return}let v=s.blockchains[T.val.blockChain]?.chainId,x=await u(d.walletType),k={currency:y.currency,account:y.issuer,amount:y.value};if(await Ot(y.wallet,k,{namespace:A.val})){E();return}else{let N=Dt(y.wallet,k),Y=x.getSigner(T.val.type);try{let Q={...T.val,data:N},ce=await Y.signAndSendTx(Q,g,v);Qe(e,ce,{isApproval:!0}),E()}catch(Q){$(e)(Q),m()}}}i(Ke,"checkXrplTrustline");import{warn as An}from"@rango-dev/logging-core";async function Ut(e){let{setStorage:t,getStorage:n,next:r,schedule:a}=e,o=n().swapDetails,l=f(o);if(!h(l)){w({event:{type:"tx_execution",status:"create_tx"},swap:o,step:l});let u={requestId:o.requestId,step:l.id,userSettings:{slippage:o.settings.slippage,infiniteApprove:o.settings.infiniteApprove},validations:{balance:o.validateBalanceOrFee,fee:o.validateBalanceOrFee,approve:!0}};try{let{transaction:p}=await Ct(q().createTransaction(u));p&&ye(l,p),t({...n(),swapDetails:o}),a("SCHEDULE_NEXT_STEP"),r()}catch(p){o.status="failed",o.finishTime=new Date().getTime().toString();let{extraMessage:c,extraMessageDetail:S}=H(p),d=O({getStorage:n,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:c,details:S,errorCode:"FETCH_TX_FAILED"}),g=te(o,c,d.failureType);w({event:g,...d}),p instanceof Error&&An(new Error("create transaction error"),{tags:{message:p.message,requestBody:u,reason:g.reason,reasonCode:g.reasonCode,pendingSwap:o}}),e.failed()}}}i(Ut,"createTransaction");async function Ve(e){let t=await ae(e);if(t.err){re(e,t.val);return}Ae(e);let{failed:n,getStorage:r,context:a}=e,{meta:o,getSigners:l}=a,s=r().swapDetails,u=f(s),p=L(u),c=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),S=oe(e);if(S.err){se(e,S.val),n(),c();return}ie(e,S.val);let d=h(u),g=R(s,u),m=J(s,u),E=o.blockchains?.[d.blockChain]?.chainId,C;try{C=await l(g.walletType)}catch(T){$(e)(T),c();return}await C.getSigner(d.type).signAndSendTx(d,m,E).then(Ce(e,{isApproval:p}),$(e)).finally(()=>{c()})}i(Ve,"executeTransaction");async function $e(e){let t=await ae(e);if(t.err){re(e,t.val);return}let{failed:n,getStorage:r,context:a}=e,{meta:o,getSigners:l}=a,s=r().swapDetails,u=f(s),p=h(u),c=R(s,u),S=J(s,u),d=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),g=i(y=>{se(e,y.val),n(),d()},"handleErr"),m=oe(e);if(m.err){g(m);return}ie(e,m.val);let E=await ue(p);if(E.err){g(E);return}let C=await pe(a,c.walletType);if(C.err){g(C);return}let _=o.blockchains[E.val.blockChain]?.chainId,A=(await l(c.walletType)).getSigner(E.val.type);try{let y=await A.signAndSendTx(E.val,S,_);Ce(e,{isApproval:E.val.data.TransactionType==="TrustSet"})(y)}catch(y){$(e)(y)}d()}i($e,"executeXrplTransaction");import{TransactionType as Cn}from"rango-types";function bt({schedule:e,next:t,failed:n,setStorage:r,getStorage:a}){let o=a().swapDetails,l=f(o),s=o.steps.find(u=>u.status==="failed");if(l&&!s){if(ft(o,l))return l.fromBlockchain===Cn.XRPL?e("CHECK_XRPL_TRUSTLINE"):e("EXECUTE_TRANSACTION"),t();if(l?.executedTransactionId)return e("CHECK_TRANSACTION_STATUS"),t();o.status="running",r({...a(),swapDetails:o}),w({event:{type:"started"},swap:o,step:l}),e("CREATE_TRANSACTION"),t()}else{o.status=s?"failed":"success",o.finishTime=new Date().getTime().toString(),r({...a(),swapDetails:o});let u=M(o),p=X(o);w({...s?{event:{type:"failed",reason:o.extraMessage??void 0,reasonCode:"CALL_OR_SEND_FAILED",inputAmount:u,inputAmountUsd:p}}:{event:{type:"succeeded",inputAmount:u,inputAmountUsd:p,outputAmount:Z(o.steps)?.outputAmount??"",outputAmountUsd:_e(o)}},swap:o,step:null}),s?n():t()}}i(bt,"scheduleNextStep");function Wt({schedule:e,next:t,getStorage:n}){let r=n().swapDetails;w({event:{type:"started"},swap:r,step:null}),e("SCHEDULE_NEXT_STEP"),t()}i(Wt,"start");var Lt={name:"swap",actions:{START:Wt,SCHEDULE_NEXT_STEP:bt,CREATE_TRANSACTION:Ut,EXECUTE_TRANSACTION:Ve,EXECUTE_XRPL_TRANSACTION:$e,CHECK_XRPL_TRUSTLINE:Ke,CHECK_TRANSACTION_STATUS:ht},run:["START"],whenTaskBlocked:(e,t)=>{e.reason.reason==="waiting_for_connecting_wallet"?Et(e,t):e.reason.reason==="waiting_for_network_change"?wt(e,t):e.reason.reason==="depends_on_other_queues"&&yt(e,t)}};import{useManager as Rn}from"@rango-dev/queue-manager-react";import{useEffect as je,useState as Nn}from"react";import{DB_NAME as kn,Persistor as _n,Status as de}from"@rango-dev/queue-manager-core";import{v4 as vn}from"uuid";var Mt="migratedToQueueManager";function Ye(){return!!window.localStorage.getItem(Mt)}i(Ye,"migrated");async function hn(){try{return(await window.indexedDB.databases()).map(e=>e.name).includes(kn)}catch{return!1}}i(hn,"hasQueueManagerOnIDB");async function Ft(){let e=window.localStorage.getItem("pendingSwaps"),t=await hn();if(!e||Ye()||t)return!0;let n=JSON.parse(e),r=[];n.forEach(l=>{if(l.status==="running"){let s=vn(),u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:de.RUNNING,storage:{swapDetails:l},state:{status:de.RUNNING,activeTaskIndex:0,tasks:{[s]:{blockedFor:null,status:de.RUNNING}}},tasks:[{id:s,action:"SCHEDULE_NEXT_STEP"}]};r.push(u)}else{let s=l.status==="success"?de.SUCCESS:de.FAILED,u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:s,storage:{swapDetails:l},state:{status:s,activeTaskIndex:0,tasks:{}},tasks:[]};r.push(u)}});let a=new _n,o=r.map(async l=>a.insertQueue(l));return await Promise.all(o),window.localStorage.setItem(Mt,"1"),!0}i(Ft,"migration");var Bt=0;function In(e){return`${e?.walletType}-${e?.network}-${e?.accounts?.toString()}`}i(In,"getLastConnectedWalletHash");function Pn(){let e=Ye(),[t,n]=Nn(e);return je(()=>{(async()=>Bt||(Bt=1,Ft().finally(()=>{n(!0)})))()},[]),{status:t}}i(Pn,"useMigration");function On(e){let{manager:t}=Rn(),{lastConnectedWallet:n,disconnectedWallet:r,evmChains:a,canSwitchNetworkTo:o,clearDisconnectedWallet:l}=e;je(()=>{n&&(xt({evmChains:a,lastConnectedWallet:n,manager:t}),He(n,t,o))},[In(n)]),je(()=>{r&&(qe(t),l())},[r])}i(On,"useQueueManager");function vo(e){return ze(e),Lt}i(vo,"makeQueueDefinition");export{Ue as EventSeverity,Te as MessageSeverity,D as PrettyError,De as RouteEventType,B as StepEventType,fe as StepExecutionBlockedEventStatus,z as StepExecutionEventStatus,Oe as WidgetEvents,jt as calculatePendingSwap,gn as cancelSwap,qe as checkWaitingForNetworkChange,W as getCurrentNamespaceOfOrNull,f as getCurrentStep,Z as getLastSuccessfulStep,R as getRelatedWallet,Pe as getRelatedWalletOrNull,U as getRequiredWallet,dn as getRunningSwaps,lt as getUsdPrice,mn as isApprovalTX,vo as makeQueueDefinition,H as prettifyErrorMessage,Sn as resetRunningSwapNotifsOnPageLoad,O as updateSwapStatus,Pn as useMigration,On as useQueueManager};
|
|
1
|
+
var Xt=Object.defineProperty;var i=(e,t)=>Xt(e,"name",{value:t,configurable:!0});function Qt(){return process.env.REACT_APP_RANGO_API_KEY}i(Qt,"getApiKeyFromEnv");function Je(){return Qt()||"NOT_SET"}i(Je,"getApiKeyFromEnvOrNotSet");var Ne={API_KEY:Je(),BASE_URL:""};function j(e){return Ne[e]}i(j,"getConfig");function ze(e){return Ne=e,Ne}i(ze,"initConfig");import{warn as ne}from"@rango-dev/logging-core";import{SignerError as vt}from"rango-types";import{warn as en}from"@rango-dev/logging-core";import{Status as Le}from"@rango-dev/queue-manager-core";import{legacyReadAccountAddress as tn}from"@rango-dev/wallets-core/legacy";import{getBlockChainNameFromId as nn,getEvmProvider as rn}from"@rango-dev/wallets-shared";import an from"bignumber.js";import{PendingSwapNetworkStatus as ee,SignerError as on,TransactionType as I}from"rango-types";var Ie="Waiting for other swaps to complete",Ze="Waiting for connecting wallet",et=i((e,t)=>`Please change your ${e||"wallet"} account to ${t||"proper address"}`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET"),Se=i(e=>`Please connect your ${e??""} wallet.`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION"),ge=i(e=>`Please change your network to ${e}.`,"ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK"),P="CLIENT_UNEXPECTED_BEHAVIOUR";import{RangoClient as qt}from"rango-sdk";var me,q=i(()=>me||(me=new qt(j("API_KEY"),j("BASE_URL")),me),"httpService");import ot from"bignumber.js";import tt from"bignumber.js";var nt=i((e,t=null,n=null)=>{if(e===null||e==="")return"";let r=new tt(e),a=1,o=1e3;for(let l=0;l<60;l++)if(new tt(r.toFixed(l,a)).eq(r)){o=l;break}if(r.gte(1e4))return r.toFormat(0,a);if(r.gte(1e3)||r.gte(100))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,1))),a);if(r.gte(1))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,2))),a);if(r.gte(.01))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,4))),a);for(let l=t||4;l<17;l++)if(r.gte(Math.pow(10,-l)))return r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,l))),a);return r.isEqualTo(0)?"0":r.toFormat(Math.min(o,Math.min(n||100,Math.max(t||0,8))),a)},"numberToString");import{SignerErrorCode as G,SignerError as Ht,isSignerErrorCode as Gt,isAPIErrorCode as Kt}from"rango-types";var Vt="Assertion failed (Unexpected behaviour)",$t="Create transaction failed in Rango Server",rt="Input wallet not found",D=class e extends Error{constructor(n,r,a,o){super(r);this._isPrettyError=!0;Object.setPrototypeOf(this,e.prototype),e.prototype._isPrettyError=!0,this.code=n,this.detail=o,this.root=a}static{i(this,"PrettyError")}static isPrettyError(n){return n instanceof e||Object.prototype.hasOwnProperty.call(n,"_isPrettyError")}getErrorDetail(){let n=typeof this.root=="object"&&this.root&&this.root.error?this.root.error:JSON.stringify(this.root),r=typeof this.root=="string"?this.root:this.root instanceof Error?this.root.message:n;return{extraMessage:this.message,extraMessageDetail:this.detail||r,extraMessageErrorCode:this.code||null}}static AssertionFailed(n){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Vt,null,n)}static BadStatusCode(n,r){return new e("TX_FAIL",n,null,`status code = ${r}`)}static CreateTransaction(n){return new e("FETCH_TX_FAILED",$t,null,n)}static WalletMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",rt,null,"Server requested for a blockchain or address not selected by user")}static BlockchainMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",rt,null,"Server requested for a blockchain or address not selected by user")}};function at(e){try{return e?Kt(e)?e:Gt(e)?{[G.REJECTED_BY_USER]:"USER_REJECT",[G.SIGN_TX_ERROR]:"CALL_WALLET_FAILED",[G.SEND_TX_ERROR]:"SEND_TX_FAILED",[G.TX_FAILED_IN_BLOCKCHAIN]:"TX_FAILED_IN_BLOCKCHAIN",[G.NOT_IMPLEMENTED]:P,[G.OPERATION_UNSUPPORTED]:P,[G.UNEXPECTED_BEHAVIOUR]:P}[e]:P:P}catch{return P}}i(at,"mapAppErrorCodesToAPIErrorCode");var H=i(e=>{if(!e)return{extraMessage:"",extraMessageErrorCode:null};if(D.isPrettyError(e))return e.getErrorDetail();if(Ht.isSignerError(e)){let t=e.getErrorDetail();return{extraMessage:t.message,extraMessageDetail:t.detail,extraMessageErrorCode:t.code}}return e instanceof Error?{extraMessage:e.toString(),extraMessageErrorCode:null}:typeof e!="string"?{extraMessage:JSON.stringify(e),extraMessageErrorCode:null}:{extraMessage:e,extraMessageErrorCode:null}},"prettifyErrorMessage");var Te=(a=>(a.error="error",a.warning="warning",a.info="info",a.success="success",a))(Te||{}),W=i((e,t)=>{try{return F(e,t)}catch{return null}},"getCurrentNamespaceOfOrNull"),F=i((e,t)=>{let n=t.evmTransaction?.blockChain||t.evmApprovalTransaction?.blockChain,r=t.starknetTransaction?.blockChain||t.starknetApprovalTransaction?.blockChain,a=t.tronTransaction?.blockChain||t.tronApprovalTransaction?.blockChain,o=t.cosmosTransaction?.blockChain,l=t.solanaTransaction?.blockChain,s=t.tonTransaction?.blockChain,u=t.suiTransaction?.blockChain,p=t.xrplTransaction?.blockChain,c=t.stellarTransaction?.blockChain;if(n)return{namespace:"EVM",network:n};if(r)return{namespace:"Starknet",network:r};if(a)return{namespace:"Tron",network:a};if(o)return{namespace:"Cosmos",network:o};if(l)return{namespace:"Solana",network:l};if(s)return{namespace:"Ton",network:s};if(u)return{namespace:"Sui",network:u};if(p)return{namespace:"XRPL",network:p};if(c)return{namespace:"Stellar",network:c};if(t.transferTransaction){let S=t.transferTransaction.fromWalletAddress;if(!S)throw D.BlockchainMissing();let d=Object.keys(e.wallets).find(g=>e.wallets[g]?.address===S);if(!d)throw D.BlockchainMissing();return{namespace:"UTXO",network:d}}throw new Error("Unsupported transaction type has been included in your swap.",{cause:t})},"getCurrentNamespaceOf"),le=i((e,t,n)=>{let a=n[t].info?.transactionUrl;if(a)return a.indexOf("/{txHash}")!==-1?a.replace("{txHash}",e):`${a}/${e}`},"getScannerUrl");function it(e,t){return e.steps.find(n=>n.status!=="failed"&&n.status!=="success"&&n.id!==t.id)||null}i(it,"getNextStep");var ct=i((e,t)=>{let n=e.wallets[t.evmTransaction?.blockChain||""]||e.wallets[t.evmApprovalTransaction?.blockChain||""]||e.wallets[t.tronTransaction?.blockChain||""]||e.wallets[t.tronApprovalTransaction?.blockChain||""]||e.wallets[t.starknetTransaction?.blockChain||""]||e.wallets[t.starknetApprovalTransaction?.blockChain||""]||e.wallets[t.cosmosTransaction?.blockChain||""]||e.wallets[t.solanaTransaction?.blockChain||""]||e.wallets[t.tonTransaction?.blockChain||""]||e.wallets[t.suiTransaction?.blockChain||""]||e.wallets[t.xrplTransaction?.blockChain||""]||e.wallets[t.stellarTransaction?.blockChain||""]||(t.transferTransaction?.fromWalletAddress?{address:t.transferTransaction.fromWalletAddress,walletType:Object.values(e.wallets).find(r=>r.address===t.transferTransaction?.fromWalletAddress)?.walletType}:null)||null;if(n==null)throw D.WalletMissing();return n},"getCurrentWalletTypeAndAddress"),J=i((e,t)=>ct(e,t).address,"getCurrentAddressOf");function R(e,t){let{address:n,walletType:r}=ct(e,t),a=Object.keys(e.wallets).map(u=>({k:u,v:e.wallets[u]})).find(({v:u})=>u.address===n&&u.walletType===r)||null,o=a?.k||null,l=a?.v||null,s=l?.walletType;if(l===null)throw D.AssertionFailed(`Wallet for source ${o} not passed: walletType: ${s}`);return l}i(R,"getRelatedWallet");function Pe(e,t){if(!t)return null;try{return R(e,t)}catch(n){return console.log({e:n}),null}}i(Pe,"getRelatedWalletOrNull");var lt=i((e,t,n,r)=>r?.find(o=>o.blockchain===e&&o.symbol?.toUpperCase()===t?.toUpperCase()&&o.address===n)?.usdPrice||null,"getUsdPrice");function Yt(e,t){let n=new ot(0);for(let r=0;r<e.fee.length;r++){let a=e.fee[r];if(a.expenseType==="DECREASE_FROM_OUTPUT")continue;let o=lt(a.asset.blockchain,a.asset.symbol,a.asset.address,t);n=n.plus(new ot(a.amount).multipliedBy(o||0))}return n}i(Yt,"getUsdFeeOfStep");function st(e,t){return{fromBlockchain:e.from.blockchain,fromBlockchainLogo:e.from.blockchainLogo,fromLogo:e.from.logo,fromSymbol:e.from.symbol,fromSymbolAddress:e.from.address,fromDecimals:e.from.decimals,fromAmountPrecision:e.fromAmountPrecision,fromAmountMinValue:e.fromAmountMinValue,fromAmountMaxValue:e.fromAmountMaxValue,fromAmountRestrictionType:e.fromAmountRestrictionType,fromUsdPrice:e.from.usdPrice,toBlockchain:e.to.blockchain,toBlockchainLogo:e.to.blockchainLogo,toSymbol:e.to.symbol,toSymbolAddress:e.to.address,toDecimals:e.to.decimals,toLogo:e.to.logo,toUsdPrice:e.to.usdPrice,swapperId:e.swapperId,swapperLogo:e.swapperLogo,swapperType:e.swapperType,expectedOutputAmountHumanReadable:e.toAmount,feeInUsd:t?nt(Yt(e,t?.tokens),null,8):null,estimatedTimeInSeconds:e.estimatedTimeInSeconds||null,internalSteps:null}}i(st,"mapSwapStepToPendingSwapStep");function jt(e){let{inputAmount:t,bestRoute:n,wallets:r,settings:a,validateBalanceOrFee:o,meta:l,swapMode:s="swap"}=e,u=n.result;if(!u)throw Error("Simulation result should not be null");return{creationTime:new Date().getTime().toString(),finishTime:null,requestId:n.requestId||"",inputAmount:t,wallets:r,status:"running",mode:s,isPaused:!1,extraMessage:null,extraMessageSeverity:null,extraMessageDetail:null,extraMessageErrorCode:null,networkStatusExtraMessage:null,networkStatusExtraMessageDetail:null,lastNotificationTime:null,settings:a,simulationResult:u,validateBalanceOrFee:o,steps:n.result?.swaps?.map((p,c)=>{let S=st(p,l);return{id:c+1,...S,internalSwaps:p?.internalSwaps?.map(d=>st(d,l))||null,outputAmount:"",prerequisiteResults:[],status:"created",networkStatus:null,startTransactionTime:new Date().getTime(),externalTransactionId:null,executedTransactionId:null,executedTransactionTime:null,explorerUrl:null,diagnosisUrl:null,trackingCode:null,internalSteps:null,evmTransaction:null,evmApprovalTransaction:null,starknetTransaction:null,starknetApprovalTransaction:null,tronTransaction:null,tronApprovalTransaction:null,cosmosTransaction:null,solanaTransaction:null,transferTransaction:null,tonTransaction:null,suiTransaction:null,xrplTransaction:null,stellarTransaction:null,hyperliquidTransaction:null,hasAlreadyProceededToSign:!1}})||[]}}i(jt,"calculatePendingSwap");var Oe=(n=>(n.RouteEvent="routeEvent",n.StepEvent="stepEvent",n))(Oe||{}),De=(r=>(r.STARTED="started",r.FAILED="failed",r.SUCCEEDED="succeeded",r))(De||{}),z=(r=>(r.CREATE_TX="create_tx",r.SEND_TX="send_tx",r.TX_SENT="tx_sent",r))(z||{}),fe=(a=>(a.WAITING_FOR_QUEUE="waiting_for_queue",a.WAITING_FOR_WALLET_CONNECT="waiting_for_wallet_connect",a.WAITING_FOR_NETWORK_CHANGE="waiting_for_network_change",a.WAITING_FOR_CHANGE_WALLET_ACCOUNT="waiting_for_change_wallet_account",a))(fe||{}),B=(u=>(u.STARTED="started",u.FAILED="failed",u.SUCCEEDED="succeeded",u.TX_EXECUTION="tx_execution",u.TX_EXECUTION_BLOCKED="tx_execution_blocked",u.APPROVAL_TX_SUCCEEDED="approval_tx_succeeded",u.CHECK_STATUS="check_status",u.OUTPUT_REVEALED="output_revealed",u))(B||{}),Ue=(a=>(a.ERROR="error",a.SUCCESS="success",a.WARNING="warning",a.INFO="info",a))(Ue||{});function ut(e){return e.map(t=>{let{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:a,feeInUsd:o,executedTransactionId:l,executedTransactionTime:s,expectedOutputAmountHumanReadable:u,fromBlockchain:p,toBlockchain:c,fromSymbol:S,toSymbol:d,fromSymbolAddress:g,toSymbolAddress:m,swapperType:E,swapperId:C,outputAmount:_,fromAmountMaxValue:T,fromAmountMinValue:A,fromAmountPrecision:y,fromAmountRestrictionType:v,fromDecimals:x,status:k}=t;return{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:a,feeInUsd:o,executedTransactionId:l,executedTransactionTime:s,expectedOutputAmountHumanReadable:u,fromBlockchain:p,toBlockchain:c,fromSymbol:S,toSymbol:d,fromSymbolAddress:g,toSymbolAddress:m,swapperName:C,swapperType:E,outputAmount:_,fromAmountMaxValue:T,fromAmountMinValue:A,fromAmountPrecision:y,fromAmountRestrictionType:v,fromDecimals:x,status:k,transaction:h(t)}})}i(ut,"createSteps");function Jt(e,t,n){let{creationTime:r,finishTime:a,requestId:o,inputAmount:l,status:s,wallets:u,steps:p,settings:c}=e,S=ut(p),g={route:{creationTime:r,finishTime:a,requestId:o,inputAmount:l,status:s,wallets:u,steps:S,slippage:c.slippage,infiniteApproval:c.infiniteApprove},step:S[S.length-1]};if(n)g.step=ut([n])[0];else if(t==="failed"){let m=pt(S);m&&(g.step=m)}else{let m=Z(S);m&&(g.step=m)}return g}i(Jt,"getEventPayload");function zt(e,t,n){let r,{type:a}=e;switch(a){case"started":r={...e,type:"started"};break;case"failed":r={...e,type:"failed",inputAmount:n.inputAmount,inputAmountUsd:be(n),swapMode:n.mode||"swap"};break;case"succeeded":{r={...e,type:"succeeded",inputAmount:n.inputAmount,inputAmountUsd:be(n),outputAmount:n.steps[n.steps.length-1].outputAmount??"",outputAmountUsd:dt(n),swapMode:n.mode||"swap"};break}default:break}r&&j("emitter")?.emit("routeEvent",{event:r,route:t})}i(zt,"emitRouteEvent");function Zt(e,t,n){j("emitter")?.emit("stepEvent",{event:e,route:t,step:n})}i(Zt,"emitStepEvent");function w(e){let{event:t}=e,{type:n}=t,{route:r,step:a}=Jt(e.swap,n,e.step??void 0),o=`${a.fromBlockchain}.${a.fromSymbol}`,l=`${a.toBlockchain}.${a.toSymbol}`,s=a.outputAmount??"",u=e.step?W(e.swap,e.step):null,p="",c="info";switch(n){case"started":p="Swap process started",c="success";break;case"succeeded":p=`You received ${s} ${l}, hooray!`,c="success";break;case"failed":p=`Swap failed: ${e.swap?.extraMessage??"Reason is unknown"}`,c="error";break;case"tx_execution":t.status==="create_tx"?(p="Please wait while the transaction is created ...",c="info"):t.status==="send_tx"?(e.step&&L(e.step)?p=`Please confirm '${a.swapperName}' smart contract access to ${o}`:p="Please confirm transaction request in your wallet",c="warning"):t.status==="tx_sent"&&(p="Transaction sent successfully",c="info");break;case"check_status":e.step&&L(e.step)?p="Checking approve transaction status ...":p="Checking transaction status ...",c="info";break;case"approval_tx_succeeded":p="Smart contract called successfully",c="success";break;case"output_revealed":p="Transaction output amount revealed",c="success";break;case"tx_execution_blocked":t.status==="waiting_for_wallet_connect"?(p="Please connect your wallet.",c="warning"):t.status==="waiting_for_queue"?(p="Waiting for other swaps to complete",c="warning"):t.status==="waiting_for_change_wallet_account"?(p="Please change your wallet account.",c="warning"):t.status==="waiting_for_network_change"&&(p=`Please change your wallet network to ${u?.network}.`,c="warning");break;default:break}e.step&&Zt({...t,message:p,messageSeverity:c},r,a),(e.event.type==="failed"||!e.step)&&zt({...t,message:p,messageSeverity:c},r,e.swap)}i(w,"notifier");var We=null;function Ee(){return{claimedBy:()=>We?.id,setClaimer:e=>{We={id:e}},reset:()=>{We=null}}}i(Ee,"claimQueue");var K={};function we(){return{getTransactionDataByHash:e=>K[e]||{},setTransactionDataByHash:(e,t)=>{K[e]||(K[e]={}),K[e].response=t.response||K[e].response,K[e].receiptReceived=t.receiptReceived||K[e].receiptReceived||!1}}}i(we,"inMemoryTransactionsData");var f=i(e=>e.steps.find(t=>t.status!=="failed"&&t.status!=="success")||null,"getCurrentStep"),h=i(e=>{let{evmTransaction:t,evmApprovalTransaction:n,cosmosTransaction:r,solanaTransaction:a,transferTransaction:o,starknetApprovalTransaction:l,starknetTransaction:s,tronApprovalTransaction:u,tronTransaction:p,tonTransaction:c,suiTransaction:S,xrplTransaction:d}=e;return t||n||r||a||o||l||s||u||p||c||S||d},"getCurrentStepTx"),ye=i((e,t)=>{e.transferTransaction=null,e.cosmosTransaction=null,e.evmTransaction=null,e.solanaTransaction=null,e.evmApprovalTransaction=null,e.starknetApprovalTransaction=null,e.starknetTransaction=null,e.tronApprovalTransaction=null,e.tronTransaction=null,e.tonTransaction=null,e.suiTransaction=null,e.xrplTransaction=null,e.stellarTransaction=null;let n=t.type;switch(n){case I.EVM:t.isApprovalTx?e.evmApprovalTransaction=t:e.evmTransaction=t;break;case I.TRON:t.isApprovalTx?e.tronApprovalTransaction=t:e.tronTransaction=t;break;case I.STARKNET:t.isApprovalTx?e.starknetApprovalTransaction=t:e.starknetTransaction=t;break;case I.COSMOS:e.cosmosTransaction=t;break;case I.SOLANA:e.solanaTransaction=t;break;case I.TRANSFER:e.transferTransaction=t;break;case I.TON:e.tonTransaction=t;break;case I.SUI:e.suiTransaction=t;break;case I.XRPL:e.xrplTransaction=t;break;case I.STELLAR:e.stellarTransaction=t;break;case I.HYPERLIQUID:e.hyperliquidTransaction=t;break;default:(r=>{throw new Error(`${r} was unhandled!`)})(n)}return e},"setCurrentStepTx"),Me=i(e=>h(e)?.type,"getCurrentStepTxType"),L=i(e=>{let{evmApprovalTransaction:t,starknetApprovalTransaction:n,tronApprovalTransaction:r}=e;return!!(t||n||r)},"isApprovalCurrentStepTx");function O({getStorage:e,setStorage:t,nextStatus:n,nextStepStatus:r,message:a,details:o,errorCode:l=null,hasAlreadyProceededToSign:s,trace:u=null}){let p=e().swapDetails,c=f(p),S={swap:p,step:c};if(r&&c&&(c.status=r),n&&(p.status=n),p.hasAlreadyProceededToSign=s,n&&["failed","success"].includes(n)&&(p.finishTime=new Date().getTime().toString()),(a||o)&&(p.extraMessage=a||"",p.extraMessageDetail=o||""),r&&["failed"].includes(r)){let d=o&&o.includes("Warning")?"Swap canceled by user.":o,g=Pe(p,c)?.walletType;p.extraMessageSeverity="error";let m=at(l);S.failureType=m;let E=l!=="REJECTED_BY_USER"&&u?.message&&typeof u.message=="string"?u.message:d||"";q().reportFailure({requestId:p.requestId,step:c?.id||1,eventType:m,reason:E,tags:g?{wallet:g}:void 0}).then().catch()}else r&&["running"].includes(r)?p.extraMessageSeverity="info":r&&["success","approved"].includes(r)?p.extraMessageSeverity="success":r&&["waitingForApproval"].includes(r)&&(p.extraMessageSeverity="warning");return r==="running"&&c&&(c.startTransactionTime=new Date().getTime()),t({...e(),swapDetails:p}),S}i(O,"updateSwapStatus");function sn({getStorage:e,setStorage:t},n,r){let a=e().swapDetails;a.hasAlreadyProceededToSign=null;let o=f(a);o.executedTransactionId=n,o.executedTransactionTime=new Date().getTime().toString(),r?.url&&(o.explorerUrl=[...o.explorerUrl||[],{url:r.url,description:r.description||null}]),L(o)?a.extraMessage="Checking approve transaction status ...":a.extraMessage="Checking transaction status ...",a.extraMessageDetail="",a.extraMessageSeverity="info",t({...e(),swapDetails:a}),w({event:{type:"tx_execution",status:"tx_sent"},swap:a,step:o}),w({event:{type:"check_status"},swap:a,step:o})}i(sn,"setStepTransactionIds");function cn({getStorage:e,setStorage:t},n,r){let a=e().swapDetails,o=f(a);if(!o)return;let l=new Date;a.lastNotificationTime=l.getTime().toString(),!(o.networkStatus===ee.WaitingForConnectingWallet&&a.networkStatusExtraMessage===n&&a.networkStatusExtraMessageDetail===r)&&(o.networkStatus=ee.WaitingForConnectingWallet,a.networkStatusExtraMessage=n,a.networkStatusExtraMessageDetail=r,t({...e(),swapDetails:a}))}i(cn,"markRunningSwapAsWaitingForConnectingWallet");function gt({getStorage:e,setStorage:t}){let n=e().swapDetails,r=f(n);if(!r)return;let{type:a}=U(n),o=F(n,r),l=`Change ${a} wallet network to ${o.network}`,s=`We\u2019re switching the connected network to ${o.network}. Please check your wallet.`,u=new Date;return n.lastNotificationTime=u.getTime().toString(),r.networkStatus=ee.WaitingForNetworkChange,n.networkStatusExtraMessage=l,n.networkStatusExtraMessageDetail=s,t({...e(),swapDetails:n}),{swap:n,step:r}}i(gt,"markRunningSwapAsSwitchingNetwork");function mt({getStorage:e,setStorage:t}){let n=e().swapDetails,r=f(n);if(r)return n.networkStatusExtraMessage="",n.networkStatusExtraMessageDetail="",r.networkStatus=ee.WaitingForQueue,w({event:{type:"tx_execution_blocked",status:"waiting_for_queue"},swap:n,step:r}),t({...e(),swapDetails:n}),{swap:n,step:r}}i(mt,"markRunningSwapAsDependsOnOtherQueues");async function xe(e){return new Promise(t=>setTimeout(t,e))}i(xe,"delay");var ln=i((e,t)=>e.wallets[t]?.walletType,"getSwapWalletType");function Fe(e){return e===null||e?.blockchains===null||e?.blockchains.length===0}i(Fe,"isWalletNull");function U(e){let t=f(e),n=W(e,t);if(!n)return{type:null,namespace:null,address:null};let r=ln(e,n.network),a=e.wallets[n.network];return{type:r||null,namespace:n,address:a?a.address:null}}i(U,"getRequiredWallet");async function un(e){try{return await e.request({method:"eth_chainId"})||e?.chainId}catch{return e?.chainId}}i(un,"getChainId");async function pn(e,t,n){let r=rn(e,n);if(r)return await un(r);let o=t(n).get("evm");if(!o)throw new Error("EVM namespace not found for wallet type: "+n);return o.getChainId()}i(pn,"getProviderChainId");async function Tt(e,t,n,r,a,o){if(Fe(n))return!1;let l=W(e,t);if(!l)return!1;if(r.evmBasedChains.find(s=>s.name===l.network)){try{let s=e.wallets[l.network];if(s){let u=await pn(a,o,s.walletType);if(u){let p=nn(u,Object.entries(r.blockchains).map(([,c])=>c));if(p&&p.toLowerCase()===l.network.toLowerCase())return!0;if(p&&p.toLowerCase()!==l.network.toLowerCase())return!1}}}catch(s){console.log(s)}return!1}return!0}i(Tt,"isNetworkMatchedForTransaction");var ft=i((e,t)=>(e.wallets[t.evmTransaction?.blockChain||""]||e.wallets[t.evmApprovalTransaction?.blockChain||""]||e.wallets[t.tronTransaction?.blockChain||""]||e.wallets[t.tronApprovalTransaction?.blockChain||""]||e.wallets[t.starknetTransaction?.blockChain||""]||e.wallets[t.starknetApprovalTransaction?.blockChain||""]||e.wallets[t.cosmosTransaction?.blockChain||""]||e.wallets[t.solanaTransaction?.blockChain||""]||e.wallets[t.tonTransaction?.blockChain||""]||e.wallets[t.suiTransaction?.blockChain||""]||e.wallets[t.xrplTransaction?.blockChain||""]||t.transferTransaction?.fromWalletAddress||null)!==null,"isTxAlreadyCreated");function Ae(e){let{getStorage:t,setStorage:n}=e,r=t().swapDetails,a=f(r);a?.networkStatus&&(a.networkStatus=null,n({...t(),swapDetails:r}))}i(Ae,"resetNetworkStatus");function Be(e,t={message:"",details:"",status:null}){let{message:n,details:r,status:a}=t,{getStorage:o,setStorage:l}=e,s=o().swapDetails,u=f(s);u?.networkStatus&&(s.networkStatusExtraMessage=n,s.networkStatusExtraMessageDetail=r,u.networkStatus=a,l({...o(),swapDetails:s}))}i(Be,"updateNetworkStatus");function Et(e,t){let{context:n,queue:r}=t,a=r.getStorage().swapDetails,{ok:o,reason:l}=Xe(a,n.state);if(!o){let s=f(a),{type:u,address:p}=U(a);w({event:{type:"tx_execution_blocked",...l==="account_miss_match"?{status:"waiting_for_change_wallet_account",requiredAccount:p??void 0}:{status:"waiting_for_wallet_connect",requiredWallet:u??void 0,requiredAccount:p??void 0}},swap:a,step:s}),cn({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},Ze,e.reason.description);return}r.unblock()}i(Et,"onBlockForConnectWallet");function wt(e,t){let{context:n,queue:r}=t,a=r.getStorage().swapDetails,o=f(a);if(!o||a.status!=="running")return;let l=gt({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)}),s=W(a,o)?.network,u=U(a).type,p=u?n.state(u).network:void 0;l&&w({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",requiredNetwork:s??void 0,currentNetwork:p??void 0},swap:l.swap,step:l.step});let{type:c,namespace:S}=U(a);if(c&&S?.network&&n.canSwitchNetworkTo(c,S.network,S)){let d=n.switchNetwork(c,S);d&&d.then(()=>{r.unblock()}).catch(g=>{Be({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},{message:g.message,details:g.message,status:ee.NetworkChangeFailed})})}}i(wt,"onBlockForChangeNetwork");function yt(e,t){let{getBlockedTasks:n,forceExecute:r,queue:a,manager:o,context:l}=t,{setClaimer:s,claimedBy:u,reset:p}=Ee(),c=n().filter(T=>T.reason.reason==="depends_on_other_queues");if(c.length===0)return;let S=u(),d=!!S;if(S===a.id)return;if(d){mt({getStorage:a.getStorage.bind(a),setStorage:a.setStorage.bind(a)});return}let g=c.find(T=>T.queue_id===t.queue_id);g||(g=c[0]),s(g.queue_id);let m=g.storage.get(),{type:E,namespace:C,address:_}=U(m.swapDetails);r(g.queue_id,{claimedBy:u(),resetClaimedBy:()=>{p(),E&&He({walletType:E,network:C?.network,accounts:_?[_]:[]},o,l.canSwitchNetworkTo)}})}i(yt,"onDependsOnOtherQueues");function Xe(e,t){let{type:n,address:r}=U(e);if(!n||!r)return{ok:!1,reason:"not_connected"};let a=t(n),{accounts:o,connected:l}=a,s=o||[];return l?{ok:s.some(p=>{let{address:c}=tn(p);return r.toLocaleLowerCase()===c.toLocaleLowerCase()}),reason:"account_miss_match"}:{ok:!1,reason:"not_connected"}}i(Xe,"isRequiredWalletConnected");function Qe(e,t,n){let{setTransactionDataByHash:r}=we(),{getStorage:a,context:o}=e,{meta:l}=o,s=a().swapDetails,u=f(s),p=F(s,u),c=le(t.hash,p.network,l.blockchains);sn(e,t.hash,c&&(!t.response||t.response&&!t.response.hashRequiringUpdate)?{url:c,description:n.isApproval?"Approve":"Swap"}:void 0),t.response&&r(t.hash,{response:t.response})}i(Qe,"updateStorageOnSuccessfulSign");function Ce(e,t){return({hash:n,response:r})=>{let{schedule:a,next:o}=e;Qe(e,{hash:n,response:r},t),a("CHECK_TRANSACTION_STATUS"),o()}}i(Ce,"handleSuccessfulSign");function $(e){return t=>{let{getStorage:n,setStorage:r,failed:a}=e,o=n().swapDetails,l=f(o);if(o.status==="failed")return;let s=R(o,l),{extraMessage:u,extraMessageDetail:p,extraMessageErrorCode:c}=H(t);en(t,{tags:{requestId:o.requestId,rpc:!0,swapper:l?.swapperId||"",walletType:s?.walletType||""},context:on.isSignerError(t)?t.getErrorContext():{}});let S=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:u,details:p,errorCode:c,trace:t?.cause});w({event:{type:"failed",reason:u,reasonCode:S.failureType??P,inputAmount:M(o),inputAmountUsd:X(o)},...S}),a()}}i($,"handleRejectedSign");function xt(e){let{lastConnectedWallet:t,evmChains:n,manager:r}=e,{walletType:a,network:o}=t;n.some(l=>l.name==o)&&r?.getAll().forEach(l=>{let s=l.list.getStorage(),u=s?.swapDetails;if(u&&u.status==="running"){let p=f(u);if(p){let c=s?.swapDetails.wallets[p.fromBlockchain]?.walletType,S=Object.keys(l.list.state.tasks).some(g=>{let m=l.list.state.tasks[g];return m.status===Le.BLOCKED&&["waiting_for_connecting_wallet"].includes(m.blockedFor?.reason)}),d=W(u,p)?.network;if(!n.some(g=>g.name==d))return;if(c===a&&S&&d!=o){let g=l.list,{type:m}=U(u),E=ge(m);l.list.block({reason:{reason:"waiting_for_network_change",description:E},silent:!0});let C=gt({getStorage:g.getStorage.bind(g),setStorage:g.setStorage.bind(g)});C&&w({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",currentNetwork:o,requiredNetwork:d??void 0},swap:C.swap,step:C.step})}}}})}i(xt,"checkWaitingForConnectWalletChange");function qe(e){e?.getAll().forEach(t=>{if(Object.keys(t.list.state.tasks).some(r=>{let a=t.list.state.tasks[r];return a.status===Le.BLOCKED&&["waiting_for_network_change","depends_on_other_queues"].includes(a.blockedFor?.reason)})){let r=t.list.getStorage()?.swapDetails;if(r.status==="running"){let{type:a}=U(r),o=Se(a);t.list.block({reason:{reason:"waiting_for_connecting_wallet",description:o}})}}})}i(qe,"checkWaitingForNetworkChange");function dn(e){let t=e?.getAll()||new Map,n=[];return t.forEach(r=>{let o=r.list.getStorage()?.swapDetails;!o||o.status!=="running"||n.push(o)}),n}i(dn,"getRunningSwaps");function Sn(e){e.forEach(t=>{let n=f(t),r="tx_execution_blocked",a;n?.networkStatus===ee.WaitingForQueue?a="waiting_for_queue":t?.status==="running"&&(a="waiting_for_wallet_connect"),r&&w&&w({event:{type:r,status:a??"waiting_for_queue"},swap:t,step:n})})}i(Sn,"resetRunningSwapNotifsOnPageLoad");function He(e,t,n,r={fallbackToOnlyWallet:!0}){let{walletType:a,network:o}=e;if(!a)return;let l=[],s=[];t?.getAll().forEach(p=>{if(p.status===Le.BLOCKED){let c=p.list.getStorage(),S=c?.swapDetails;if(S&&S.status==="running"){let d=f(S);d&&(o&&W(S,d)?.network==o&&c?.swapDetails.wallets[o]?.walletType===a?l.push(p.list):c?.swapDetails.wallets[d.fromBlockchain]?.walletType===a&&s.push(p.list))}}});let u;if(l.length>0){if(u=l[0],l.length>1)for(let p=1;p<l.length;p++){let c=l[p];mt({getStorage:c.getStorage.bind(c),setStorage:c.setStorage.bind(c)})}}else s.length>0&&r.fallbackToOnlyWallet&&(u=s[0]);if(u){let p=u.getStorage(),c=f(p?.swapDetails),S=c?W(p.swapDetails,c):null;!o||!S||!n?.(a,o,S)?u.unblock():u.checkBlock()}}i(He,"retryOn");function At(e){return!!e.evmTransaction||!!e.evmApprovalTransaction}i(At,"isNeedBlockQueueForParallel");async function Ct(e){let t=await e;if(!t.ok||!t.transaction)throw D.CreateTransaction(t.error||"bad response from create tx endpoint");return t}i(Ct,"throwOnOK");function gn(e,t){let{reset:n}=Ee();e.actions.cancel();let r=O({getStorage:e.actions.getStorage,setStorage:e.actions.setStorage,message:"Swap canceled by user.",details:"Warning: If you've already signed and sent a transaction, it won't be affected, but next swap steps will not be executed.",nextStatus:"failed",nextStepStatus:"failed",errorCode:"USER_CANCEL"});return w({event:{type:"failed",reasonCode:"USER_CANCEL",reason:r.swap.extraMessage??void 0,inputAmount:M(r.swap),inputAmountUsd:X(r.swap)},swap:r.swap,step:r.step}),n(),t&&t?.retry(),r}i(gn,"cancelSwap");function Z(e){return e.slice().reverse().find(t=>t.status==="success")}i(Z,"getLastSuccessfulStep");function pt(e){return e.slice().reverse().find(t=>t.status==="failed")}i(pt,"getFailedStep");function mn(e){let{transaction:t}=e;return t?.type===I.EVM&&t.isApprovalTx||t?.type===I.STARKNET&&t.isApprovalTx||t?.type===I.TRON&&t.isApprovalTx}i(mn,"isApprovalTX");function ke(e,t){let n=new an(e).multipliedBy(t);return isNaN(n.toNumber())?"":n.toString()}i(ke,"getTokenAmountInUsd");function be(e){return ke(e.inputAmount,e.steps[0].fromUsdPrice??"")}i(be,"getSwapInputUsd");function dt(e){let t=e.steps[e.steps.length-1];return ke(t.outputAmount??"",t.toUsdPrice??"")}i(dt,"getSwapOutputUsd");function kt(e){let t=["success","failed"],n=e.steps.findLastIndex(r=>t.includes(r.status));return n<0?void 0:{step:e.steps[n],index:n}}i(kt,"getLastFinishedStep");function M(e){let t=kt(e);return t?t.index===0?e.inputAmount:e.steps[t.index-1].outputAmount??"":""}i(M,"getLastFinishedStepInput");function X(e){let t=kt(e);return ke(M(e),t?.step?.fromUsdPrice??"")}i(X,"getLastFinishedStepInputUsd");function _e(e){let t=Z(e.steps);return ke(t?.outputAmount??"",t?.toUsdPrice??"")}i(_e,"getLastSuccessfulStepOutputUsd");function te(e,t,n){return{type:"failed",reason:t,reasonCode:n??P,inputAmount:M(e),inputAmountUsd:X(e)}}i(te,"createStepFailedEvent");var _t=5e3,Tn=5e3;async function fn({getStorage:e,setStorage:t,next:n,schedule:r,retry:a,failed:o,context:l}){let s=e().swapDetails,{meta:u}=l,p=new Error("check status Error"),c=f(s);if(!c?.executedTransactionId)return;let S=h(c),d=c.executedTransactionId,g=!1,m=null,E=null,{getTransactionDataByHash:C,setTransactionDataByHash:_}=we();try{let x=Me(c),k=R(s,c);x&&k&&(E=(await l.getSigners(k.walletType)).getSigner(x))}catch{}try{let{response:x,receiptReceived:k}=C(d);if(E?.wait&&!k){let b=S?.blockChain&&u.blockchains?.[S?.blockChain]?.chainId||void 0,{hash:N,response:Y}=await E.wait(d,b,x);if(N!==d){c.executedTransactionId=N||c.executedTransactionId;let Q=F(s,c),ce;!!Object.keys(u.blockchains).length&&(ce=le(c.executedTransactionId,Q.network,u.blockchains)),ce&&c.explorerUrl&&c.explorerUrl?.length>=1&&(c.explorerUrl[c.explorerUrl.length-1]={url:ce,description:"Replaced Swap"}),d=c.executedTransactionId,N&&Y&&_(N,{response:Y})}else _(N,{receiptReceived:!0})}}catch(x){let{extraMessage:k,extraMessageDetail:b,extraMessageErrorCode:N}=H(x),Y=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:k,details:b,errorCode:N}),Q=te(s,k,Y.failureType);ne(p,{tags:{type:"singer-error",reason:Q.reason,reasonCode:Q.reasonCode,message:k,messageDetail:b,pendingSwap:s},context:vt.isSignerError(x)?x.getErrorContext():{}}),g=!0}let T={requestId:s.requestId,txId:d,step:c.id};try{m=await q().checkStatus(T)}catch{await xe(_t),a(),ne(p,{tags:{type:"request-error",requestBody:T,pendingSwap:s}});return}if(g)return o();if(c?.status==="failed")return;let A=m?.outputAmount||(c.outputAmount?c.outputAmount:null),y=c.outputAmount||null;s.extraMessage=m?.extraMessage||s.extraMessage,s.extraMessageSeverity="info",s.extraMessageDetail="",c.status=m?.status||c.status,c.diagnosisUrl=m?.diagnosisUrl||c.diagnosisUrl||null,c.outputAmount=A||c.outputAmount,c.explorerUrl=m?.explorerUrl||c.explorerUrl,c.internalSteps=m?.steps||null;let v=m?.newTx;if(v&&(c.status="created",c.executedTransactionId=null,c.executedTransactionTime=null,ye(c,v)),y===null&&A!==null?w({event:{type:"output_revealed",outputAmount:A},swap:s,step:c}):y===null&&A===null&&w({event:{type:"check_status"},swap:s,step:c}),c.status==="success"){let x=it(s,c);s.extraMessageDetail="",s.extraMessage=x?`starting next step: ${x.swapperId}: ${x.fromBlockchain} -> ${x.toBlockchain}`:"",w({event:{type:"succeeded",inputAmount:M(s),inputAmountUsd:X(s),outputAmount:c.outputAmount??"",outputAmountUsd:_e(s)},swap:s,step:c})}else c.status==="failed"&&(s.extraMessage="Transaction failed in blockchain",s.extraMessageSeverity="error",s.extraMessageDetail=m?.extraMessage||"",s.status="failed",s.finishTime=new Date().getTime().toString(),ne(p,{tags:{type:"transaction-failed",message:s.extraMessage,messageDetails:s.extraMessageDetail,pendingSwap:s}}));t({...e(),swapDetails:s}),m?.status==="failed"?o():m?.status==="success"||m?.status==="running"&&m.newTx?(r("SCHEDULE_NEXT_STEP"),n()):(await xe(_t),a())}i(fn,"checkTransactionStatus");async function En({getStorage:e,setStorage:t,next:n,schedule:r,retry:a,failed:o,context:l}){let s=e().swapDetails,{meta:u}=l,{getTransactionDataByHash:p,setTransactionDataByHash:c}=we(),S=new Error("check approval status error"),d=f(s);if(!d){console.log("ignore check status, current step is null");return}let g=h(d);if(!d?.executedTransactionId)return;let m=d.executedTransactionId,E=null;try{let T=Me(d),A=R(s,d);T&&A&&(E=(await l.getSigners(A.walletType)).getSigner(T))}catch{}try{let{response:T,receiptReceived:A}=p(m);if(E?.wait&&!A){let y=g?.blockChain&&u.blockchains?.[g?.blockChain]?.chainId||void 0,{hash:v,response:x}=await E.wait(m,y,T);if(v!==m){d.executedTransactionId=v||d.executedTransactionId;let k=F(s,d),b;!!Object.keys(u.blockchains).length&&(b=le(d.executedTransactionId,k.network,u.blockchains)),b&&d.explorerUrl&&d.explorerUrl?.length>=1&&(d.explorerUrl[d.explorerUrl.length-1]={url:b,description:"Replaced Approve"}),m=d.executedTransactionId,v&&x&&c(v,{response:x})}else c(v,{receiptReceived:!0})}}catch(T){let{extraMessage:A,extraMessageDetail:y,extraMessageErrorCode:v}=H(T),x=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:A,details:y,errorCode:v}),k=te(s,A,x.failureType);return w({event:k,...x}),ne(S,{tags:{type:"singer-error",reason:k.reason,reasonCode:k.reasonCode,message:A,messageDetail:y,pendingSwap:s},context:vt.isSignerError(T)?T.getErrorContext():{}}),o()}let C=!1,_={requestId:s.requestId,txId:d.executedTransactionId};try{let T=await q().checkApproval(_.requestId,_.txId);if(d?.status==="failed")return;if(C=T.isApproved,!C&&(T.txStatus==="failed"||T.txStatus==="success")){let A,y;T.txStatus==="failed"?(A="Approve transaction failed",y="Smart contract approval tx failed in blockchain."):(A="Not enough approval",T.requiredApprovedAmount&&T.currentApprovedAmount?y=`Required approval: ${T.requiredApprovedAmount}, current approval: ${T.currentApprovedAmount}`:y="You still don't have enough approval for this swap.");let v=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",errorCode:"INSUFFICIENT_APPROVE",message:A,details:y}),x=te(s,A,v.failureType);w({event:x,...v}),ne(S,{tags:{type:"approval-failed",message:s.extraMessage,messageDetails:s.extraMessageDetail,pendingSwap:s}}),o()}else C||w({event:{type:"check_status"},swap:s,step:d})}catch{C=!1,ne(S,{tags:{type:"request-error",requestBody:_,pendingSwap:s}})}C?(d.status="approved",s.extraMessage=`Spending ${d.fromSymbol} approved successfully.`,s.extraMessageDetail=null,s.extraMessageSeverity="success",d.evmApprovalTransaction=null,d.executedTransactionId=null,d.executedTransactionTime=null,d.starknetApprovalTransaction=null,d.tronApprovalTransaction=null,t({...e(),swapDetails:s}),w({event:{type:"approval_tx_succeeded"},swap:s,step:d}),r("SCHEDULE_NEXT_STEP"),n()):(await xe(Tn),a())}i(En,"checkApprovalStatus");async function ht(e){let t=e.getStorage().swapDetails,n=f(t);if(!n){console.log("ignore check status, current step is null",t.requestId);return}Ae(e),n.status==="running"?await fn(e):n.status==="waitingForApproval"&&await En(e)}i(ht,"checkStatus");import{PendingSwapNetworkStatus as Rt}from"rango-types";import{Err as he,Ok as Ge}from"ts-results";function ve(e){return e.claimedBy===e._queue?.id}i(ve,"isClaimedByCurrentQueue");function re(e,t){e.block(t),ve(e.context)&&e.context.resetClaimedBy&&e.context.resetClaimedBy()}i(re,"requestBlockQueue");async function ae(e){let{getStorage:t,context:n}=e,r=t().swapDetails,a=f(r),o=wn(e);if(o.err)return o;let l=await yn(e);if(l.err)return l;a.networkStatus===Rt.NetworkChanged&&Be(e,{message:"",details:"The network has been successfully changed.",status:Rt.NetworkChanged});let s=At(a),u=ve(n);if(s&&!u){let p={reason:"depends_on_other_queues",description:Ie,details:{}};return new he(p)}return new Ge(!0)}i(ae,"checkEnvironmentBeforeExecuteTransaction");function wn(e){let{getStorage:t,context:n}=e,{wallets:r}=n,a=t().swapDetails;if(!Xe(a,n.state).ok){let{type:l,address:s}=U(a),u=r?.blockchains?.find(S=>!S.accounts?.find(d=>d.walletType===l)),p=Fe(r)||u?Se(l):et(l,s),c={reason:"waiting_for_connecting_wallet",description:p};return new he(c)}return new Ge(!0)}i(wn,"ensureRequiredWalletIsConnected");async function yn(e){let{getStorage:t,context:n}=e,{meta:r,wallets:a,providers:o,hubProvider:l}=n,s=t().swapDetails,u=f(s),p=await Tt(s,u,a,r,o,l),{claimedBy:c}=Ee();if(!!c()&&!ve(n)&&!p){let g=Ie,m={reason:"depends_on_other_queues",details:g};return new he(m)}else if(!p){let g=F(s,u),m=ge(g.network),E={reason:"waiting_for_network_change",details:m};return new he(E)}return new Ge(!0)}i(yn,"ensureWalletIsOnCorrectNetwork");import{Err as Nt,Ok as It}from"ts-results";function oe(e){let{getStorage:t,context:n}=e,{isMobileWallet:r}=n,a=t().swapDetails,o=f(a),l=R(a,o),s=r(l?.walletType),u=h(o),p=L(o);if(!u||!u.type)return new Nt({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: tx is null!",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"});let c=!!a.hasAlreadyProceededToSign;return p?new It({nextStatus:void 0,nextStepStatus:"waitingForApproval",details:"Waiting for approve transaction to be mined and confirmed successfully",message:`Waiting for approval of ${o?.fromSymbol} coin ${s?"on your mobile phone!":""}`}):c?new Nt({message:"Transaction is expired. Please try again.",nextStepStatus:"failed",nextStatus:"failed",details:"",errorCode:"TX_EXPIRED"}):new It({message:"Executing transaction ...",nextStepStatus:"running",nextStatus:"running",details:`${s?"Check your mobile phone!":""}`})}i(oe,"produceNextStateForTransaction");function se(e,t){let{getStorage:n,setStorage:r}=e,a=n().swapDetails,o=f(a),l=L(o),s=typeof a.hasAlreadyProceededToSign=="boolean",u=O({getStorage:n,setStorage:r,nextStepStatus:t.nextStepStatus,nextStatus:t.nextStatus,message:t.message,details:t.details,errorCode:t.errorCode,hasAlreadyProceededToSign:l?void 0:s});w({event:{type:"failed",reason:t.message,reasonCode:u.failureType??P,inputAmount:M(a),inputAmountUsd:X(a)},...u})}i(se,"onNextStateError");function ie(e,t){let{getStorage:n,setStorage:r}=e,a=n().swapDetails,o=f(a),l=L(o),s=typeof a.hasAlreadyProceededToSign=="boolean",u=O({getStorage:n,setStorage:r,nextStepStatus:t.nextStepStatus,nextStatus:t.nextStatus,message:t.message,details:t.details,hasAlreadyProceededToSign:l?void 0:s});w({event:{type:"tx_execution",status:"send_tx"},...u})}i(ie,"onNextStateOk");import{isXrplTransaction as xn}from"rango-types";import{Err as Re,Ok as Pt}from"ts-results";async function ue(e){return e?xn(e)?e.data.TransactionType!=="Payment"?new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: We only support XRPL transactions with payment type",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"}):Pt(e):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: Expected XRPL transaction but it doesn't match with the structure.",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"}):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"Unexpected Error: tx is null!",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"})}i(ue,"ensureXrplTransactionIsValid");async function pe(e,t){let r=e.hubProvider(t).get("xrpl");return r?Pt(r):new Re({nextStatus:"failed",nextStepStatus:"failed",message:"XRPL is not available on your wallet.",details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"})}i(pe,"ensureXrplNamespaceExists");async function Ot(e,t,n){return!!(await n.namespace.accountLines(e,{peer:t.account})).some(a=>a.currency===t.currency&&a.account===t.account&&a.limit!=="0")}i(Ot,"checkTruslineAlreadyOpened");function Dt(e,t){return{TransactionType:"TrustSet",Account:e,LimitAmount:{currency:t.currency,issuer:t.account,value:t.amount}}}i(Dt,"createTrustlineTransaction");async function Ke(e){let t=await ae(e);if(t.err){re(e,t.val);return}let{failed:n,context:r,schedule:a,getStorage:o,next:l}=e,{meta:s,getSigners:u}=r,p=o().swapDetails,c=f(p),S=h(c),d=R(p,c),g=J(p,c),m=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),E=i(()=>{a("EXECUTE_XRPL_TRANSACTION"),l(),m()},"onSuccessfulFinish"),C=i(N=>{se(e,N.val),n(),m()},"handleErr"),_=oe(e);if(_.err){C(_);return}ie(e,_.val);let T=await ue(S);if(T.err){C(T);return}let A=await pe(r,d.walletType);if(A.err){C(A);return}let y=T.val.prerequisites.find(N=>N.type==="XRPL_CHANGE_TRUSTLINE");if(!y){E();return}let v=s.blockchains[T.val.blockChain]?.chainId,x=await u(d.walletType),k={currency:y.currency,account:y.issuer,amount:y.value};if(await Ot(y.wallet,k,{namespace:A.val})){E();return}else{let N=Dt(y.wallet,k),Y=x.getSigner(T.val.type);try{let Q={...T.val,data:N},ce=await Y.signAndSendTx(Q,g,v);Qe(e,ce,{isApproval:!0}),E()}catch(Q){$(e)(Q),m()}}}i(Ke,"checkXrplTrustline");import{warn as An}from"@rango-dev/logging-core";async function Ut(e){let{setStorage:t,getStorage:n,next:r,schedule:a}=e,o=n().swapDetails,l=f(o);if(!h(l)){w({event:{type:"tx_execution",status:"create_tx"},swap:o,step:l});let u={requestId:o.requestId,step:l.id,userSettings:{slippage:o.settings.slippage,infiniteApprove:o.settings.infiniteApprove},validations:{balance:o.validateBalanceOrFee,fee:o.validateBalanceOrFee,approve:!0}};try{let{transaction:p}=await Ct(q().createTransaction(u));p&&ye(l,p),t({...n(),swapDetails:o}),a("SCHEDULE_NEXT_STEP"),r()}catch(p){o.status="failed",o.finishTime=new Date().getTime().toString();let{extraMessage:c,extraMessageDetail:S}=H(p),d=O({getStorage:n,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:c,details:S,errorCode:"FETCH_TX_FAILED"}),g=te(o,c,d.failureType);w({event:g,...d}),p instanceof Error&&An(new Error("create transaction error"),{tags:{message:p.message,requestBody:u,reason:g.reason,reasonCode:g.reasonCode,pendingSwap:o}}),e.failed()}}}i(Ut,"createTransaction");async function Ve(e){let t=await ae(e);if(t.err){re(e,t.val);return}Ae(e);let{failed:n,getStorage:r,context:a}=e,{meta:o,getSigners:l}=a,s=r().swapDetails,u=f(s),p=L(u),c=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),S=oe(e);if(S.err){se(e,S.val),n(),c();return}ie(e,S.val);let d=h(u),g=R(s,u),m=J(s,u),E=o.blockchains?.[d.blockChain]?.chainId,C;try{C=await l(g.walletType)}catch(T){$(e)(T),c();return}await C.getSigner(d.type).signAndSendTx(d,m,E).then(Ce(e,{isApproval:p}),$(e)).finally(()=>{c()})}i(Ve,"executeTransaction");async function $e(e){let t=await ae(e);if(t.err){re(e,t.val);return}let{failed:n,getStorage:r,context:a}=e,{meta:o,getSigners:l}=a,s=r().swapDetails,u=f(s),p=h(u),c=R(s,u),S=J(s,u),d=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),g=i(y=>{se(e,y.val),n(),d()},"handleErr"),m=oe(e);if(m.err){g(m);return}ie(e,m.val);let E=await ue(p);if(E.err){g(E);return}let C=await pe(a,c.walletType);if(C.err){g(C);return}let _=o.blockchains[E.val.blockChain]?.chainId,A=(await l(c.walletType)).getSigner(E.val.type);try{let y=await A.signAndSendTx(E.val,S,_);Ce(e,{isApproval:E.val.data.TransactionType==="TrustSet"})(y)}catch(y){$(e)(y)}d()}i($e,"executeXrplTransaction");import{TransactionType as Cn}from"rango-types";function bt({schedule:e,next:t,failed:n,setStorage:r,getStorage:a}){let o=a().swapDetails,l=f(o),s=o.steps.find(u=>u.status==="failed");if(l&&!s){if(ft(o,l))return l.fromBlockchain===Cn.XRPL?e("CHECK_XRPL_TRUSTLINE"):e("EXECUTE_TRANSACTION"),t();if(l?.executedTransactionId)return e("CHECK_TRANSACTION_STATUS"),t();o.status="running",r({...a(),swapDetails:o}),w({event:{type:"started"},swap:o,step:l}),e("CREATE_TRANSACTION"),t()}else{o.status=s?"failed":"success",o.finishTime=new Date().getTime().toString(),r({...a(),swapDetails:o});let u=M(o),p=X(o);w({...s?{event:{type:"failed",reason:o.extraMessage??void 0,reasonCode:"CALL_OR_SEND_FAILED",inputAmount:u,inputAmountUsd:p}}:{event:{type:"succeeded",inputAmount:u,inputAmountUsd:p,outputAmount:Z(o.steps)?.outputAmount??"",outputAmountUsd:_e(o)}},swap:o,step:null}),s?n():t()}}i(bt,"scheduleNextStep");function Wt({schedule:e,next:t,getStorage:n}){let r=n().swapDetails;w({event:{type:"started"},swap:r,step:null}),e("SCHEDULE_NEXT_STEP"),t()}i(Wt,"start");var Lt={name:"swap",actions:{START:Wt,SCHEDULE_NEXT_STEP:bt,CREATE_TRANSACTION:Ut,EXECUTE_TRANSACTION:Ve,EXECUTE_XRPL_TRANSACTION:$e,CHECK_XRPL_TRUSTLINE:Ke,CHECK_TRANSACTION_STATUS:ht},run:["START"],whenTaskBlocked:(e,t)=>{e.reason.reason==="waiting_for_connecting_wallet"?Et(e,t):e.reason.reason==="waiting_for_network_change"?wt(e,t):e.reason.reason==="depends_on_other_queues"&&yt(e,t)}};import{useManager as Rn}from"@rango-dev/queue-manager-react";import{useEffect as je,useState as Nn}from"react";import{DB_NAME as kn,Persistor as _n,Status as de}from"@rango-dev/queue-manager-core";import{v4 as vn}from"uuid";var Mt="migratedToQueueManager";function Ye(){return!!window.localStorage.getItem(Mt)}i(Ye,"migrated");async function hn(){try{return(await window.indexedDB.databases()).map(e=>e.name).includes(kn)}catch{return!1}}i(hn,"hasQueueManagerOnIDB");async function Ft(){let e=window.localStorage.getItem("pendingSwaps"),t=await hn();if(!e||Ye()||t)return!0;let n=JSON.parse(e),r=[];n.forEach(l=>{if(l.status==="running"){let s=vn(),u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:de.RUNNING,storage:{swapDetails:l},state:{status:de.RUNNING,activeTaskIndex:0,tasks:{[s]:{blockedFor:null,status:de.RUNNING}}},tasks:[{id:s,action:"SCHEDULE_NEXT_STEP"}]};r.push(u)}else{let s=l.status==="success"?de.SUCCESS:de.FAILED,u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:s,storage:{swapDetails:l},state:{status:s,activeTaskIndex:0,tasks:{}},tasks:[]};r.push(u)}});let a=new _n,o=r.map(async l=>a.insertQueue(l));return await Promise.all(o),window.localStorage.setItem(Mt,"1"),!0}i(Ft,"migration");var Bt=0;function In(e){return`${e?.walletType}-${e?.network}-${e?.accounts?.toString()}`}i(In,"getLastConnectedWalletHash");function Pn(){let e=Ye(),[t,n]=Nn(e);return je(()=>{(async()=>Bt||(Bt=1,Ft().finally(()=>{n(!0)})))()},[]),{status:t}}i(Pn,"useMigration");function On(e){let{manager:t}=Rn(),{lastConnectedWallet:n,disconnectedWallet:r,evmChains:a,canSwitchNetworkTo:o,clearDisconnectedWallet:l}=e;je(()=>{n&&(xt({evmChains:a,lastConnectedWallet:n,manager:t}),He(n,t,o))},[In(n)]),je(()=>{r&&(qe(t),l())},[r])}i(On,"useQueueManager");function vo(e){return ze(e),Lt}i(vo,"makeQueueDefinition");export{Ue as EventSeverity,Te as MessageSeverity,D as PrettyError,De as RouteEventType,B as StepEventType,fe as StepExecutionBlockedEventStatus,z as StepExecutionEventStatus,Oe as WidgetEvents,jt as calculatePendingSwap,gn as cancelSwap,qe as checkWaitingForNetworkChange,W as getCurrentNamespaceOfOrNull,f as getCurrentStep,Z as getLastSuccessfulStep,R as getRelatedWallet,Pe as getRelatedWalletOrNull,U as getRequiredWallet,dn as getRunningSwaps,lt as getUsdPrice,mn as isApprovalTX,vo as makeQueueDefinition,H as prettifyErrorMessage,Sn as resetRunningSwapNotifsOnPageLoad,O as updateSwapStatus,Pn as useMigration,On as useQueueManager};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|