@rango-dev/queue-manager-rango-preset 0.29.2-next.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks.d.ts +9 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/types.d.ts +11 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks.ts +18 -8
- package/src/index.ts +2 -0
- package/src/types.ts +5 -2
package/dist/hooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UseQueueManagerParams } from './types';
|
|
1
|
+
import type { UseQueueManagerParams } from './types';
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* Runs a migration (old swaps from localstorage to queue manager's IndexedDB)
|
|
@@ -15,6 +15,13 @@ declare function useMigration(): {
|
|
|
15
15
|
*
|
|
16
16
|
*/
|
|
17
17
|
declare function useQueueManager(params: UseQueueManagerParams): void;
|
|
18
|
-
declare function useEvents():
|
|
18
|
+
declare function useEvents(): {
|
|
19
|
+
on<Key extends keyof import("./types").RouteExecutionEvents>(type: Key, handler: import("mitt").Handler<import("./types").RouteExecutionEvents[Key]>): void;
|
|
20
|
+
on(type: "*", handler: import("mitt").WildcardHandler<import("./types").RouteExecutionEvents>): void;
|
|
21
|
+
off<Key_1 extends keyof import("./types").RouteExecutionEvents>(type: Key_1, handler?: import("mitt").Handler<import("./types").RouteExecutionEvents[Key_1]> | undefined): void;
|
|
22
|
+
off(type: "*", handler: import("mitt").WildcardHandler<import("./types").RouteExecutionEvents>): void;
|
|
23
|
+
emit<Key_2 extends keyof import("./types").RouteExecutionEvents>(type: Key_2, event: import("./types").RouteExecutionEvents[Key_2]): void;
|
|
24
|
+
emit<Key_3 extends keyof import("./types").RouteExecutionEvents>(type: undefined extends import("./types").RouteExecutionEvents[Key_3] ? Key_3 : never): void;
|
|
25
|
+
};
|
|
19
26
|
export { useQueueManager, useMigration, useEvents };
|
|
20
27
|
//# sourceMappingURL=hooks.d.ts.map
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAerD;;;;;GAKG;AACH,iBAAS,YAAY,IAAI;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB,CAqBA;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAyB5D;AAED,iBAAS,SAAS;;;;;;;EAQjB;AAED,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Configs } from './configs';
|
|
2
2
|
import type { SwapQueueDef } from './types';
|
|
3
3
|
export { PrettyError, prettifyErrorMessage } from './shared-errors';
|
|
4
|
-
export type { SwapQueueContext, SwapStorage, RouteExecutionEvents, Route, Step, RouteEvent, StepEvent, RouteStartedEvent, RouteSucceededEvent, RouteFailedEvent, StepStartedEvent, StepSucceededEvent, StepFailedEvent, StepTxExecutionUpdatedEvent, StepTxExecutionBlockedEvent, StepCheckStatusEvent, StepApprovalTxSucceededEvent, StepOutputRevealedEvent, } from './types';
|
|
4
|
+
export type { SwapQueueContext, SwapStorage, RouteExecutionEvents, Route, Step, RouteEvent, StepEvent, RouteEventData, StepEventData, RouteStartedEvent, RouteSucceededEvent, RouteFailedEvent, StepStartedEvent, StepSucceededEvent, StepFailedEvent, StepTxExecutionUpdatedEvent, StepTxExecutionBlockedEvent, StepCheckStatusEvent, StepApprovalTxSucceededEvent, StepOutputRevealedEvent, } from './types';
|
|
5
5
|
export { MainEvents, StepEventType, RouteEventType, StepExecutionEventStatus, StepExecutionBlockedEventStatus, EventSeverity, } from './types';
|
|
6
6
|
export type { PendingSwapWithQueueID, EventType } from './shared';
|
|
7
7
|
export { getCurrentBlockchainOfOrNull, getRelatedWalletOrNull, getRelatedWallet, MessageSeverity, calculatePendingSwap, } from './shared';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,KAAK,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,+BAA+B,EAC/B,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,gCAAgC,EAChC,YAAY,EACZ,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAGlE"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,KAAK,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,+BAA+B,EAC/B,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,gCAAgC,EAChC,YAAY,EACZ,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAGlE"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var ft=Object.defineProperty;var i=(e,t)=>ft(e,"name",{value:t,configurable:!0});var mt="c6381a79-2817-4602-83bf-6a641a409e32",ge={API_KEY:mt};function Te(e){return ge[e]||""}i(Te,"getConfig");function De(e){let t;return typeof structuredClone=="function"?t=structuredClone(e):t=JSON.parse(JSON.stringify(e)),ge=t,ge}i(De,"initConfig");var fe=(n=>(n.RouteEvent="routeEvent",n.StepEvent="stepEvent",n))(fe||{}),me=(r=>(r.STARTED="started",r.FAILED="failed",r.SUCCEEDED="succeeded",r))(me||{}),Y=(r=>(r.CREATE_TX="create_tx",r.SEND_TX="send_tx",r.TX_SENT="tx_sent",r))(Y||{}),ne=(o=>(o.WAITING_FOR_QUEUE="waiting_for_queue",o.WAITING_FOR_WALLET_CONNECT="waiting_for_wallet_connect",o.WAITING_FOR_NETWORK_CHANGE="waiting_for_network_change",o.WAITING_FOR_CHANGE_WALLET_ACCOUNT="waiting_for_change_wallet_account",o))(ne||{}),L=(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))(L||{}),we=(o=>(o.ERROR="error",o.SUCCESS="success",o.WARNING="warning",o.INFO="info",o))(we||{});var Ae="Waiting for other swaps to complete",We="Waiting for connecting wallet",be=i((e,t)=>`Please change your ${e||"wallet"} account to ${t||"proper address"}`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET"),re=i(e=>`Please connect your ${e??""} wallet.`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION"),oe=i(e=>`Please change your network to ${e}.`,"ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK"),k="CLIENT_UNEXPECTED_BEHAVIOUR";import{warn as Mt}from"@rango-dev/logging-core";import{Status as xe}from"@rango-dev/queue-manager-core";import{readAccountAddress as Ft}from"@rango-dev/wallets-core";import{getBlockChainNameFromId as Lt,getEvmProvider as Bt,splitWalletNetwork as Ke}from"@rango-dev/wallets-shared";import{TransactionType as W}from"rango-sdk";import{PendingSwapNetworkStatus as Z}from"rango-types";var ae=class extends Error{static{i(this,"RangoPresetError")}name="RangoPresetError";constructor(t){super(t)}};import{RangoClient as wt}from"rango-sdk";var se,B=i(()=>se||(se=new wt(Te("API_KEY"),Te("BASE_URL")),se),"httpService");import Dt from"mitt";import Be from"bignumber.js";import{isCosmosBlockchain as kt,isEvmBlockchain as Rt,isStarknetBlockchain as vt,isTronBlockchain as ht}from"rango-types";import Ue from"bignumber.js";var Me=i((e,t=null,n=null)=>{if(e===null||e==="")return"";let r=new Ue(e),o=1,a=1e3;for(let l=0;l<60;l++)if(new Ue(r.toFixed(l,o)).eq(r)){a=l;break}if(r.gte(1e4))return r.toFormat(0,o);if(r.gte(1e3)||r.gte(100))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,1))),o);if(r.gte(1))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,2))),o);if(r.gte(.01))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,4))),o);for(let l=t||4;l<17;l++)if(r.gte(Math.pow(10,-l)))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,l))),o);return r.isEqualTo(0)?"0":r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,8))),o)},"numberToString");import{SignerErrorCode as X,SignerError as At,isSignerErrorCode as yt,isAPIErrorCode as Ct}from"rango-types";var _t="Assertion failed (Unexpected behaviour)",xt="Create transaction failed in Rango Server",Fe="Input wallet not found",I=class e extends Error{static{i(this,"PrettyError")}detail;root;code;_isPrettyError=!0;constructor(t,n,r,o){super(n),Object.setPrototypeOf(this,e.prototype),e.prototype._isPrettyError=!0,this.code=t,this.detail=o,this.root=r}static isPrettyError(t){return t instanceof e||Object.prototype.hasOwnProperty.call(t,"_isPrettyError")}getErrorDetail(){let t=typeof this.root=="object"&&this.root&&this.root.error?this.root.error:JSON.stringify(this.root),n=typeof this.root=="string"?this.root:this.root instanceof Error?this.root.message:t;return{extraMessage:this.message,extraMessageDetail:this.detail||n,extraMessageErrorCode:this.code||null}}static AssertionFailed(t){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",_t,null,t)}static BadStatusCode(t,n){return new e("TX_FAIL",t,null,`status code = ${n}`)}static CreateTransaction(t){return new e("FETCH_TX_FAILED",xt,null,t)}static WalletMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Fe,null,"Server requested for a blockchain or address not selected by user")}static BlockchainMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Fe,null,"Server requested for a blockchain or address not selected by user")}};function Le(e){try{return e?Ct(e)?e:yt(e)?{[X.REJECTED_BY_USER]:"USER_REJECT",[X.SIGN_TX_ERROR]:"CALL_WALLET_FAILED",[X.SEND_TX_ERROR]:"SEND_TX_FAILED",[X.TX_FAILED_IN_BLOCKCHAIN]:"TX_FAILED_IN_BLOCKCHAIN",[X.NOT_IMPLEMENTED]:k,[X.OPERATION_UNSUPPORTED]:k,[X.UNEXPECTED_BEHAVIOUR]:k}[e]:k:k}catch{return k}}i(Le,"mapAppErrorCodesToAPIErrorCode");var Q=i(e=>{if(!e)return{extraMessage:"",extraMessageErrorCode:null};if(I.isPrettyError(e))return e.getErrorDetail();if(At.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 ie=(o=>(o.error="error",o.warning="warning",o.info="info",o.success="success",o))(ie||{}),U=i((e,t)=>{try{return M(e,t)}catch{return null}},"getCurrentBlockchainOfOrNull"),M=i((e,t)=>{let n=t.evmTransaction?.blockChain||t.evmApprovalTransaction?.blockChain||t.starknetTransaction?.blockChain||t.starknetApprovalTransaction?.blockChain||t.tronTransaction?.blockChain||t.tronApprovalTransaction?.blockChain||t.cosmosTransaction?.blockChain||t.solanaTransaction?.blockChain||t.tonTransaction?.blockChain;if(n)return n;let r=t.transferTransaction?.fromWalletAddress;if(!r)throw I.BlockchainMissing();let o=Object.keys(e.wallets).find(a=>e.wallets[a]?.address===r)||null;if(o==null)throw I.BlockchainMissing();return o},"getCurrentBlockchainOf"),Nt=i(e=>{if(kt(e))return e.info?.explorerUrlToTx;if(Rt(e)||vt(e)||ht(e))return e.info.transactionUrl},"getBlockchainMetaExplorerBaseUrl"),J=i((e,t,n)=>{let r=n[t],o=Nt(r);if(o)return o.indexOf("/{txHash}")!==-1?o.replace("{txHash}",e?.toLowerCase()):`${o}/${e?.toLowerCase()}`},"getScannerUrl");function Xe(e,t){return e.steps.find(n=>n.status!=="failed"&&n.status!=="success"&&n.id!==t.id)||null}i(Xe,"getNextStep");var ye=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||""]||(t.transferTransaction?.fromWalletAddress?{address:t.transferTransaction?.fromWalletAddress}:null)||null;if(n==null)throw I.WalletMissing();return n.address},"getCurrentAddressOf");function G(e,t){let n=ye(e,t),r=Object.keys(e.wallets).map(c=>({k:c,v:e.wallets[c]})).find(({v:c})=>c.address===n)||null,o=r?.k||null,a=r?.v||null,l=a?.walletType;if(a===null)throw I.AssertionFailed(`Wallet for source ${o} not passed: walletType: ${l}`);return a}i(G,"getRelatedWallet");function Ce(e,t){if(!t)return null;try{return G(e,t)}catch{return null}}i(Ce,"getRelatedWalletOrNull");var It=i((e,t,n,r)=>r?.find(a=>a.blockchain===e&&a.symbol?.toUpperCase()===t?.toUpperCase()&&a.address===n)?.usdPrice||null,"getUsdPrice");function Ot(e,t){let n=new Be(0);for(let r=0;r<e.fee.length;r++){let o=e.fee[r];if(o.expenseType==="DECREASE_FROM_OUTPUT")continue;let a=It(o.asset.blockchain,o.asset.symbol,o.asset.address,t);n=n.plus(new Be(o.amount).multipliedBy(a||0))}return n}i(Ot,"getUsdFeeOfStep");function Qe(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?Me(Ot(e,t?.tokens),null,8):null,estimatedTimeInSeconds:e.estimatedTimeInSeconds||null,internalSteps:null}}i(Qe,"mapSwapStepToPendingSwapStep");function Pt(e,t,n,r,o,a){let l=t.result;if(!l)throw Error("Simulation result should not be null");return{creationTime:new Date().getTime().toString(),finishTime:null,requestId:t.requestId||"",inputAmount:e,wallets:n,status:"running",isPaused:!1,extraMessage:null,extraMessageSeverity:null,extraMessageDetail:null,extraMessageErrorCode:null,networkStatusExtraMessage:null,networkStatusExtraMessageDetail:null,lastNotificationTime:null,settings:r,simulationResult:l,validateBalanceOrFee:o,steps:t.result?.swaps?.map((c,u)=>{let s=Qe(c,a);return{id:u+1,...s,internalSwaps:c?.internalSwaps?.map(d=>Qe(d,a))||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,hasAlreadyProceededToSign:!1}})||[]}}i(Pt,"calculatePendingSwap");function Ge(e){return e.map(t=>{let{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:o,feeInUsd:a,executedTransactionId:l,executedTransactionTime:c,expectedOutputAmountHumanReadable:u,fromBlockchain:s,toBlockchain:d,fromSymbol:p,toSymbol:g,fromSymbolAddress:S,toSymbolAddress:w,swapperType:x,swapperId:E,outputAmount:f,fromAmountMaxValue:m,fromAmountMinValue:C,fromAmountPrecision:A,fromAmountRestrictionType:_,fromDecimals:v,status:R}=t;return{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:o,feeInUsd:a,executedTransactionId:l,executedTransactionTime:c,expectedOutputAmountHumanReadable:u,fromBlockchain:s,toBlockchain:d,fromSymbol:p,toSymbol:g,fromSymbolAddress:S,toSymbolAddress:w,swapperName:E,swapperType:x,outputAmount:f,fromAmountMaxValue:m,fromAmountMinValue:C,fromAmountPrecision:A,fromAmountRestrictionType:_,fromDecimals:v,status:R,transaction:F(t)}})}i(Ge,"createSteps");function Wt(e,t,n){let{creationTime:r,finishTime:o,requestId:a,inputAmount:l,status:c,wallets:u,steps:s,settings:d}=e,p=Ge(s),S={route:{creationTime:r,finishTime:o,requestId:a,inputAmount:l,status:c,wallets:u,steps:p,slippage:d.slippage,infiniteApproval:d.infiniteApprove},step:p[p.length-1]};if(n)S.step=Ge([n])[0];else if(t==="failed"){let w=He(p);w&&(S.step=w)}else{let w=z(p);w&&(S.step=w)}return S}i(Wt,"getEventPayload");var le=Dt();function bt(e,t){let n,{type:r}=e;switch(r){case"started":n={...e,type:"started"};break;case"failed":n={...e,type:"failed"};break;case"succeeded":n={...e,type:"succeeded"};break;default:break}n&&le.emit("routeEvent",{event:n,route:t})}i(bt,"emitRouteEvent");function Ut(e,t,n){le.emit("stepEvent",{event:e,route:t,step:n})}i(Ut,"emitStepEvent");function T(e){let{event:t}=e,{type:n}=t,{route:r,step:o}=Wt(e.swap,n,e.step??void 0),a=`${o.fromBlockchain}.${o.fromSymbol}`,l=`${o.toBlockchain}.${o.toSymbol}`,c=o.outputAmount??"",u=e.step?U(e.swap,e.step):null,s="",d="info";switch(n){case"started":s="Swap process started",d="success";break;case"succeeded":s=`You received ${c} ${l}, hooray!`,d="success";break;case"failed":s=`Swap failed: ${e.swap?.extraMessage??"Reason is unknown"}`,d="error";break;case"tx_execution":t.status==="create_tx"?(s="Please wait while the transaction is created ...",d="info"):t.status==="send_tx"?(e.step&&j(e.step)?s=`Please confirm '${o.swapperName}' smart contract access to ${a}`:s="Please confirm transaction request in your wallet",d="warning"):t.status==="tx_sent"&&(s="Transaction sent successfully",d="info");break;case"check_status":e.step&&j(e.step)?s="Checking approve transaction status ...":s="Checking transaction status ...",d="info";break;case"approval_tx_succeeded":s="Smart contract called successfully",d="success";break;case"output_revealed":s="Transaction output amount revealed",d="success";break;case"tx_execution_blocked":t.status==="waiting_for_wallet_connect"?(s="Please connect your wallet.",d="warning"):t.status==="waiting_for_queue"?(s="Waiting for other swaps to complete",d="warning"):t.status==="waiting_for_change_wallet_account"?(s="Please change your wallet account.",d="warning"):t.status==="waiting_for_network_change"&&(s=`Please change your wallet network to ${u}.`,d="warning");break;default:break}e.step&&Ut({...t,message:s,messageSeverity:d},r,o),(e.event.type==="failed"||!e.step)&&bt({...t,message:s,messageSeverity:d},r)}i(T,"notifier");var _e=null;function ce(){return{claimedBy:()=>_e?.id,setClaimer:e=>{_e={id:e}},reset:()=>{_e=null}}}i(ce,"claimQueue");var H={};function ue(){return{getTransactionDataByHash:e=>H[e]||{},setTransactionDataByHash:(e,t)=>{H[e]||(H[e]={}),H[e].response=t.response||H[e].response,H[e].receiptReceived=t.receiptReceived||H[e].receiptReceived||!1}}}i(ue,"inMemoryTransactionsData");var y=i(e=>e.steps.find(t=>t.status!=="failed"&&t.status!=="success")||null,"getCurrentStep"),F=i(e=>{let{evmTransaction:t,evmApprovalTransaction:n,cosmosTransaction:r,solanaTransaction:o,transferTransaction:a,starknetApprovalTransaction:l,starknetTransaction:c,tronApprovalTransaction:u,tronTransaction:s,tonTransaction:d}=e;return t||n||r||o||a||l||c||u||s||d},"getCurrentStepTx"),pe=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;let n=t.type;switch(n){case W.EVM:t.isApprovalTx?e.evmApprovalTransaction=t:e.evmTransaction=t;break;case W.TRON:t.isApprovalTx?e.tronApprovalTransaction=t:e.tronTransaction=t;break;case W.STARKNET:t.isApprovalTx?e.starknetApprovalTransaction=t:e.starknetTransaction=t;break;case W.COSMOS:e.cosmosTransaction=t;break;case W.SOLANA:e.solanaTransaction=t;break;case W.TRANSFER:e.transferTransaction=t;break;case W.TON:e.tonTransaction=t;break;default:(r=>{throw new Error(`${r} was unhandled!`)})(n)}return e},"setCurrentStepTx"),ke=i(e=>F(e)?.type,"getCurrentStepTxType"),j=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:o,details:a,errorCode:l=null,hasAlreadyProceededToSign:c}){let u=e().swapDetails,s=y(u),d={swap:u,step:s};if(r&&s&&(s.status=r),n&&(u.status=n),u.hasAlreadyProceededToSign=c,n&&["failed","success"].includes(n)&&(u.finishTime=new Date().getTime().toString()),(o||a)&&(u.extraMessage=o||"",u.extraMessageDetail=a||""),r&&["failed"].includes(r)){let p=a&&a.includes("Warning")?"Swap canceled by user.":a,g=Ce(u,s)?.walletType;u.extraMessageSeverity="error";let S=Le(l);d.failureType=S,B().reportFailure({requestId:u.requestId,step:s?.id||1,eventType:S,reason:p||"",tags:g?{wallet:g}:void 0}).then().catch()}else r&&["running"].includes(r)?u.extraMessageSeverity="info":r&&["success","approved"].includes(r)?u.extraMessageSeverity="success":r&&["waitingForApproval"].includes(r)&&(u.extraMessageSeverity="warning");return r==="running"&&s&&(s.startTransactionTime=new Date().getTime()),t({...e(),swapDetails:u}),d}i(O,"updateSwapStatus");function Qt({getStorage:e,setStorage:t},n,r){let o=e().swapDetails;o.hasAlreadyProceededToSign=null;let a=y(o);a.executedTransactionId=n,a.executedTransactionTime=new Date().getTime().toString(),r?.url&&(a.explorerUrl=[...a.explorerUrl||[],{url:r.url,description:r.description||null}]),j(a)?o.extraMessage="Checking approve transaction status ...":o.extraMessage="Checking transaction status ...",o.extraMessageDetail="",o.extraMessageSeverity="info",t({...e(),swapDetails:o}),T({event:{type:"tx_execution",status:"tx_sent"},swap:o,step:a}),T({event:{type:"check_status"},swap:o,step:a})}i(Qt,"setStepTransactionIds");function Xt({getStorage:e,setStorage:t},n,r){let o=e().swapDetails,a=y(o);if(!a)return;let l=new Date;o.lastNotificationTime=l.getTime().toString(),!(a.networkStatus===Z.WaitingForConnectingWallet&&o.networkStatusExtraMessage===n&&o.networkStatusExtraMessageDetail===r)&&(a.networkStatus=Z.WaitingForConnectingWallet,o.networkStatusExtraMessage=n,o.networkStatusExtraMessageDetail=r,t({...e(),swapDetails:o}))}i(Xt,"markRunningSwapAsWaitingForConnectingWallet");function $e({getStorage:e,setStorage:t}){let n=e().swapDetails,r=y(n);if(!r)return;let{type:o}=P(n),a=M(n,r),l=`Change ${o} wallet network to ${a}`,c=`Please change your ${o} wallet network to ${a}.`,u=new Date;return n.lastNotificationTime=u.getTime().toString(),r.networkStatus=Z.WaitingForNetworkChange,n.networkStatusExtraMessage=l,n.networkStatusExtraMessageDetail=c,t({...e(),swapDetails:n}),{swap:n,step:r}}i($e,"markRunningSwapAsSwitchingNetwork");function Ve({getStorage:e,setStorage:t}){let n=e().swapDetails,r=y(n);if(r)return n.networkStatusExtraMessage="",n.networkStatusExtraMessageDetail="",r.networkStatus=Z.WaitingForQueue,T({event:{type:"tx_execution_blocked",status:"waiting_for_queue"},swap:n,step:r}),t({...e(),swapDetails:n}),{swap:n,step:r}}i(Ve,"markRunningSwapAsDependsOnOtherQueues");async function de(e){return new Promise(t=>setTimeout(t,e))}i(de,"delay");var Gt=i((e,t)=>e.wallets[t]?.walletType,"getSwapWalletType");function Re(e){return e===null||e?.blockchains===null||e?.blockchains.length===0}i(Re,"isWalletNull");function P(e){let t=y(e),n=U(e,t);if(!n)return{type:null,network:null,address:null};let r=Gt(e,n),o=e.wallets[n];return{type:r||null,network:n,address:o?o.address:null}}i(P,"getRequiredWallet");async function Ht(e){try{return await e.request({method:"eth_chainId"})||e?.chainId}catch{return e?.chainId}}i(Ht,"getChainId");async function Ye(e,t,n,r,o){if(Re(n))return!1;let a=U(e,t);if(!a)return!1;if(r.evmBasedChains.find(l=>l.name===a)){try{let l=e.wallets[a];if(l){let c=Bt(o,l.walletType),u=await Ht(c);if(u){let s=Lt(u,Object.entries(r.blockchains).map(([,d])=>d));if(s&&s.toLowerCase()===a.toLowerCase())return!0;if(s&&s.toLowerCase()!==a.toLowerCase())return!1}}}catch(l){console.log(l)}return!1}return!0}i(Ye,"isNetworkMatchedForTransaction");var Je=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||""]||t.transferTransaction?.fromWalletAddress||null)!==null,"isTxAlreadyCreated");function Se(e){let{getStorage:t,setStorage:n}=e,r=t().swapDetails,o=y(r);o?.networkStatus&&(o.networkStatus=null,n({...t(),swapDetails:r}))}i(Se,"resetNetworkStatus");function je(e,t={message:"",details:"",status:null}){let{message:n,details:r,status:o}=t,{getStorage:a,setStorage:l}=e,c=a().swapDetails,u=y(c);u?.networkStatus&&(c.networkStatusExtraMessage=n,c.networkStatusExtraMessageDetail=r,u.networkStatus=o,l({...a(),swapDetails:c}))}i(je,"updateNetworkStatus");function ze(e,t){let{context:n,queue:r}=t,o=r.getStorage().swapDetails,{ok:a,reason:l}=ve(o,n.state);if(!a){let c=y(o),{type:u,address:s}=P(o);T({event:{type:"tx_execution_blocked",...l==="account_miss_match"?{status:"waiting_for_change_wallet_account",requiredAccount:s??void 0}:{status:"waiting_for_wallet_connect",requiredWallet:u??void 0,requiredAccount:s??void 0}},swap:o,step:c}),Xt({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},We,e.reason.description);return}r.unblock()}i(ze,"onBlockForConnectWallet");function Ze(e,t){let{context:n,queue:r}=t,o=r.getStorage().swapDetails,a=y(o);if(!a||o.status!=="running")return;let l=$e({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)}),c=U(o,a),u=P(o).type,s=u?n.state(u).network:void 0;l&&T({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",requiredNetwork:c??void 0,currentNetwork:s??void 0},swap:l.swap,step:l.step});let{type:d,network:p}=P(o);if(d&&p&&n.canSwitchNetworkTo(d,p)){let g=n.switchNetwork(d,p);g&&g.then(()=>{r.unblock()}).catch(S=>{console.log({error:S})})}}i(Ze,"onBlockForChangeNetwork");function et(e,t){let{getBlockedTasks:n,forceExecute:r,queue:o,manager:a,context:l}=t,{setClaimer:c,claimedBy:u,reset:s}=ce(),d=n().filter(m=>m.reason.reason==="depends_on_other_queues");if(d.length===0)return;let p=u(),g=!!p;if(p===o.id)return;if(g){Ve({getStorage:o.getStorage.bind(o),setStorage:o.setStorage.bind(o)});return}let S=d.find(m=>m.queue_id===t.queue_id);S||(S=d[0]),c(S.queue_id);let w=S.storage.get(),{type:x,network:E,address:f}=P(w.swapDetails);r(S.queue_id,{claimedBy:u(),resetClaimedBy:()=>{s(),Ne(`${x}-${E}:${f}`,a,l.canSwitchNetworkTo)}})}i(et,"onDependsOnOtherQueues");function ve(e,t){let{type:n,address:r}=P(e);if(!n||!r)return{ok:!1,reason:"not_connected"};let o=t(n),{accounts:a,connected:l}=o,c=a||[];return l?{ok:c.some(s=>{let{address:d}=Ft(s);return r.toLocaleLowerCase()===d.toLocaleLowerCase()}),reason:"account_miss_match"}:{ok:!1,reason:"not_connected"}}i(ve,"isRequiredWalletConnected");function tt(e){let{setTransactionDataByHash:t}=ue(),{getStorage:n,setStorage:r,failed:o,next:a,schedule:l,context:c}=e,{meta:u,getSigners:s,isMobileWallet:d}=c,p=n().swapDetails,g=y(p),S=G(p,g),w=d(S?.walletType),x=ye(p,g),E=s(S.walletType),f=M(p,g),m=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),C=F(g),A=C?.type,_=j(g);if(!C||!A){let h="Unexpected Error: tx is null!",D=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:h,details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"});return T({event:{type:"failed",reason:h,reasonCode:"CLIENT_UNEXPECTED_BEHAVIOUR"},...D}),o(),m()}let v=u.blockchains?.[C.blockChain]?.chainId,R=typeof p.hasAlreadyProceededToSign=="boolean",N,q,b,V,K;_?(b=`Waiting for approval of ${g?.fromSymbol} coin ${w?"on your mobile phone!":""}`,V="Waiting for approve transaction to be mined and confirmed successfully",q="waitingForApproval",N=void 0,K="tx_execution"):R?(b="Transaction is expired. Please try again.",q="failed",N="failed",V="",K="failed"):(b="Executing transaction ...",q="running",N="running",V=`${w?"Check your mobile phone!":""}`,K="tx_execution");let Ee=O({getStorage:n,setStorage:r,nextStepStatus:q,nextStatus:N,message:b,details:V,hasAlreadyProceededToSign:_?void 0:R,errorCode:R?"TX_EXPIRED":void 0});if(K==="failed"?T({event:{type:K,reason:b,reasonCode:Ee.failureType??k},...Ee}):T({event:{type:K,status:"send_tx"},...Ee}),R){o(),m();return}E.getSigner(A).signAndSendTx(C,x,v).then(({hash:h,response:D})=>{let te=J(h,f,u.blockchains);Qt(e,h,te&&(!D||D&&!D.hashRequiringUpdate)?{url:te,description:_?"Approve":"Swap"}:void 0),D&&t(h,{response:D}),l("CHECK_TRANSACTION_STATUS"),a(),m()},h=>{if(p.status==="failed")return;let{extraMessage:D,extraMessageDetail:te,extraMessageErrorCode:gt}=Q(h),Tt=new ae(h?.trace?.stack||h?.trace||h?.root||h);Mt(Tt,{tags:{requestId:p.requestId,rpc:!0,swapper:g?.swapperId||"",walletType:S?.walletType||""}});let Pe=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:D,details:te,errorCode:gt});T({event:{type:"failed",reason:D,reasonCode:Pe.failureType??k},...Pe}),o(),m()})}i(tt,"signTransaction");function nt(e){let{wallet_network:t,evmChains:n,manager:r}=e,[o,a]=Ke(t);n.some(l=>l.name==a)&&r?.getAll().forEach(l=>{let c=l.list.getStorage(),u=c?.swapDetails;if(u&&u.status==="running"){let s=y(u);if(s){let d=c?.swapDetails.wallets[s.fromBlockchain]?.walletType,p=Object.keys(l.list.state.tasks).some(S=>{let w=l.list.state.tasks[S];return w.status===xe.BLOCKED&&["waiting_for_connecting_wallet"].includes(w.blockedFor?.reason)}),g=U(u,s);if(d===o&&p&&g!=a){let S=l.list,{type:w}=P(u),x=oe(w);l.list.block({reason:{reason:"waiting_for_network_change",description:x},silent:!0});let E=$e({getStorage:S.getStorage.bind(S),setStorage:S.setStorage.bind(S)});E&&T({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",currentNetwork:a,requiredNetwork:g??void 0},swap:E.swap,step:E.step})}}}})}i(nt,"checkWaitingForConnectWalletChange");function he(e){e?.getAll().forEach(t=>{if(Object.keys(t.list.state.tasks).some(r=>{let o=t.list.state.tasks[r];return o.status===xe.BLOCKED&&["waiting_for_network_change","depends_on_other_queues"].includes(o.blockedFor?.reason)})){let r=t.list.getStorage()?.swapDetails;if(r.status==="running"){let{type:o}=P(r),a=re(o);t.list.block({reason:{reason:"waiting_for_connecting_wallet",description:a}})}}})}i(he,"checkWaitingForNetworkChange");function qt(e){let t=e?.getAll()||new Map,n=[];return t.forEach(r=>{let a=r.list.getStorage()?.swapDetails;!a||a.status!=="running"||n.push(a)}),n}i(qt,"getRunningSwaps");function Kt(e){e.forEach(t=>{let n=y(t),r="tx_execution_blocked",o;n?.networkStatus===Z.WaitingForQueue?o="waiting_for_queue":t?.status==="running"&&(o="waiting_for_wallet_connect"),r&&T&&T({event:{type:r,status:o??"waiting_for_queue"},swap:t,step:n})})}i(Kt,"resetRunningSwapNotifsOnPageLoad");function Ne(e,t,n,r={fallbackToOnlyWallet:!0}){let[o,a]=Ke(e);if(!o||!a)return;let l=[],c=[];t?.getAll().forEach(s=>{if(s.status===xe.BLOCKED){let d=s.list.getStorage(),p=d?.swapDetails;if(p&&p.status==="running"){let g=y(p);g&&(U(p,g)==a&&d?.swapDetails.wallets[a]?.walletType===o?l.push(s.list):d?.swapDetails.wallets[g.fromBlockchain]?.walletType===o&&c.push(s.list))}}});let u;if(l.length>0){if(u=l[0],l.length>1)for(let s=1;s<l.length;s++){let d=l[s];Ve({getStorage:d.getStorage.bind(d),setStorage:d.setStorage.bind(d)})}}else c.length>0&&r.fallbackToOnlyWallet&&(u=c[0]);n?.(o,a)?u?.checkBlock():u?.unblock()}i(Ne,"retryOn");function rt(e){return!!e.evmTransaction||!!e.evmApprovalTransaction}i(rt,"isNeedBlockQueueForParallel");async function ot(e){let t=await e;if(!t.ok||!t.transaction)throw I.CreateTransaction(t.error||"bad response from create tx endpoint");return t}i(ot,"throwOnOK");function $t(e,t){let{reset:n}=ce();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 T({event:{type:"failed",reasonCode:"USER_CANCEL",reason:r.swap.extraMessage??void 0},swap:r.swap,step:r.step}),n(),t&&t?.retry(),r}i($t,"cancelSwap");function z(e){return e.slice().reverse().find(t=>t.status==="success")}i(z,"getLastSuccessfulStep");function He(e){return e.slice().reverse().find(t=>t.status==="failed")}i(He,"getFailedStep");function Vt(e){let{transaction:t}=e;return t?.type===W.EVM&&t.isApprovalTx||t?.type===W.STARKNET&&t.isApprovalTx||t?.type===W.TRON&&t.isApprovalTx}i(Vt,"isApprovalTX");var at=5e3,Yt=5e3;async function Jt({getStorage:e,setStorage:t,next:n,schedule:r,retry:o,failed:a,context:l}){let c=e().swapDetails,{meta:u}=l,s=y(c);if(!s?.executedTransactionId)return;let d=F(s),p=s.executedTransactionId,g=!1,S=null,w=null,{getTransactionDataByHash:x,setTransactionDataByHash:E}=ue();try{let A=ke(s),_=G(c,s);A&&_&&(w=l.getSigners(_.walletType).getSigner(A))}catch{}try{let{response:A,receiptReceived:_}=x(p);if(w?.wait&&!_){let v=d?.blockChain&&u.blockchains?.[d?.blockChain]?.chainId||void 0,{hash:R,response:N}=await w.wait(p,v,A);if(R!==p){s.executedTransactionId=R||s.executedTransactionId;let q=M(c,s),b;!!Object.keys(u.blockchains).length&&(b=J(s.executedTransactionId,q,u.blockchains)),b&&s.explorerUrl&&s.explorerUrl?.length>=1&&(s.explorerUrl[s.explorerUrl.length-1]={url:b,description:"Replaced Swap"}),p=s.executedTransactionId,R&&N&&E(R,{response:N})}else E(R,{receiptReceived:!0})}}catch(A){let{extraMessage:_,extraMessageDetail:v,extraMessageErrorCode:R}=Q(A),N=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:_,details:v,errorCode:R});T({event:{type:"failed",reason:_,reasonCode:N.failureType??k},...N}),g=!0}try{S=await B().checkStatus({requestId:c.requestId,txId:p,step:s.id})}catch{await de(at),o();return}if(g)return a();if(s?.status==="failed")return;let f=S?.outputAmount||(s.outputAmount?s.outputAmount:null),m=s.outputAmount||null;c.extraMessage=S?.extraMessage||c.extraMessage,c.extraMessageSeverity="info",c.extraMessageDetail="",s.status=S?.status||s.status,s.diagnosisUrl=S?.diagnosisUrl||s.diagnosisUrl||null,s.outputAmount=f||s.outputAmount,s.explorerUrl=S?.explorerUrl||s.explorerUrl,s.internalSteps=S?.steps||null;let C=S?.newTx;if(C&&(s.status="created",s.executedTransactionId=null,s.executedTransactionTime=null,pe(s,C)),m===null&&f!==null?T({event:{type:"output_revealed",outputAmount:f},swap:c,step:s}):m===null&&f===null&&T({event:{type:"check_status"},swap:c,step:s}),s.status==="success"){let A=Xe(c,s);c.extraMessageDetail="",c.extraMessage=A?`starting next step: ${A.swapperId}: ${A.fromBlockchain} -> ${A.toBlockchain}`:"",T({event:{type:"succeeded",outputAmount:s.outputAmount??""},swap:c,step:s})}else s.status==="failed"&&(c.extraMessage="Transaction failed in blockchain",c.extraMessageSeverity="error",c.extraMessageDetail=S?.extraMessage||"",c.status="failed",c.finishTime=new Date().getTime().toString());t({...e(),swapDetails:c}),S?.status==="failed"?a():S?.status==="success"||S?.status==="running"&&S.newTx?(r("SCHEDULE_NEXT_STEP"),n()):(await de(at),o())}i(Jt,"checkTransactionStatus");async function jt({getStorage:e,setStorage:t,next:n,schedule:r,retry:o,failed:a,context:l}){let c=e().swapDetails,{meta:u}=l,{getTransactionDataByHash:s,setTransactionDataByHash:d}=ue(),p=y(c);if(!p){console.log("ignore check status, current step is null");return}let g=F(p);if(!p?.executedTransactionId)return;let S=p.executedTransactionId,w=null;try{let E=ke(p),f=G(c,p);E&&f&&(w=l.getSigners(f.walletType).getSigner(E))}catch{}try{let{response:E,receiptReceived:f}=s(S);if(w?.wait&&!f){let m=g?.blockChain&&u.blockchains?.[g?.blockChain]?.chainId||void 0,{hash:C,response:A}=await w.wait(S,m,E);if(C!==S){p.executedTransactionId=C||p.executedTransactionId;let _=M(c,p),v;!!Object.keys(u.blockchains).length&&(v=J(p.executedTransactionId,_,u.blockchains)),v&&p.explorerUrl&&p.explorerUrl?.length>=1&&(p.explorerUrl[p.explorerUrl.length-1]={url:v,description:"Replaced Approve"}),S=p.executedTransactionId,C&&A&&d(C,{response:A})}else d(C,{receiptReceived:!0})}}catch(E){let{extraMessage:f,extraMessageDetail:m,extraMessageErrorCode:C}=Q(E),A=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:f,details:m,errorCode:C});return T({event:{type:"failed",reason:f,reasonCode:A.failureType??k},...A}),a()}let x=!1;try{let E=await B().checkApproval(c.requestId,p.executedTransactionId);if(p?.status==="failed")return;if(x=E.isApproved,!x&&(E.txStatus==="failed"||E.txStatus==="success")){let f,m;E.txStatus==="failed"?(f="Approve transaction failed",m="Smart contract approval tx failed in blockchain."):(f="Not enough approval",E.requiredApprovedAmount&&E.currentApprovedAmount?m=`Required approval: ${E.requiredApprovedAmount}, current approval: ${E.currentApprovedAmount}`:m="You still don't have enough approval for this swap.");let C=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",errorCode:"INSUFFICIENT_APPROVE",message:f,details:m});T({event:{type:"failed",reason:f,reasonCode:C.failureType??k},...C}),a()}else x||T({event:{type:"check_status"},swap:c,step:p})}catch{x=!1}x?(p.status="approved",c.extraMessage=`Spending ${p.fromSymbol} approved successfully.`,c.extraMessageDetail=null,c.extraMessageSeverity="success",p.evmApprovalTransaction=null,p.executedTransactionId=null,p.executedTransactionTime=null,p.starknetApprovalTransaction=null,p.tronApprovalTransaction=null,t({...e(),swapDetails:c}),T({event:{type:"approval_tx_succeeded"},swap:c,step:p}),r("SCHEDULE_NEXT_STEP"),n()):(await de(Yt),o())}i(jt,"checkApprovalStatus");async function st(e){let t=e.getStorage().swapDetails,n=y(t);if(!n){console.log("ignore check status, current step is null",t.requestId);return}Se(e),n.status==="running"?await Jt(e):n.status==="waitingForApproval"&&await jt(e)}i(st,"checkStatus");async function it(e){let{setStorage:t,getStorage:n,next:r,schedule:o}=e,a=n().swapDetails,l=y(a);if(!F(l)){T({event:{type:"tx_execution",status:"create_tx"},swap:a,step:l});let u={requestId:a.requestId,step:l.id,userSettings:{slippage:a.settings.slippage,infiniteApprove:a.settings.infiniteApprove},validations:{balance:a.validateBalanceOrFee,fee:a.validateBalanceOrFee}};try{let{transaction:s}=await ot(B().createTransaction(u));s&&pe(l,s),t({...n(),swapDetails:a}),o("EXECUTE_TRANSACTION"),r()}catch(s){a.status="failed",a.finishTime=new Date().getTime().toString();let{extraMessage:d,extraMessageDetail:p}=Q(s),g=O({getStorage:n,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:d,details:p,errorCode:"FETCH_TX_FAILED"});T({event:{type:"failed",reason:d,reasonCode:g.failureType??k},...g}),e.failed()}}}i(it,"createTransaction");import{PendingSwapNetworkStatus as zt}from"rango-types";async function lt(e){let{getStorage:t,context:n}=e,{meta:r,wallets:o,providers:a}=n,{claimedBy:l}=ce(),c=n.claimedBy===n._queue?.id,u=i(E=>{e.block(E),c&&e.context.resetClaimedBy&&e.context.resetClaimedBy()},"requestBlock"),s=t().swapDetails,d=y(s);if(Se(e),!ve(s,n.state).ok){let{type:E,address:f}=P(s),m=o?.blockchains?.find(_=>!_.accounts?.find(v=>v.walletType===E)),C=Re(o)||m?re(E):be(E,f),A={reason:"waiting_for_connecting_wallet",description:C};u(A);return}let g=await Ye(s,d,o,r,a);if(!!l()&&!c&&!g){let E=Ae,f={reason:"depends_on_other_queues",details:E};u(f);return}else if(!g){let E=M(s,d),f=oe(E),m={reason:"waiting_for_network_change",details:f};u(m);return}if(je(e,{message:"",details:"Wallet network changed successfully",status:zt.NetworkChanged}),rt(d)&&!c){let E={reason:"depends_on_other_queues",description:Ae,details:{}};u(E);return}tt(e)}i(lt,"executeTransaction");function ct({schedule:e,next:t,failed:n,setStorage:r,getStorage:o}){let a=o().swapDetails,l=y(a),c=a.steps.find(u=>u.status==="failed");if(l&&!c){if(Je(a,l))return e("EXECUTE_TRANSACTION"),t();if(l?.executedTransactionId)return e("CHECK_TRANSACTION_STATUS"),t();a.status="running",r({...o(),swapDetails:a}),T({event:{type:"started"},swap:a,step:l}),e("CREATE_TRANSACTION"),t()}else a.status=c?"failed":"success",a.finishTime=new Date().getTime().toString(),r({...o(),swapDetails:a}),T({...c?{event:{type:"failed",reason:a.extraMessage??void 0,reasonCode:"CALL_OR_SEND_FAILED"}}:{event:{type:"succeeded",outputAmount:z(a.steps)?.outputAmount??""}},swap:a,step:null}),c?n():t()}i(ct,"scheduleNextStep");function ut({schedule:e,next:t,getStorage:n}){let r=n().swapDetails;T({event:{type:"started"},swap:r,step:null}),e("SCHEDULE_NEXT_STEP"),t()}i(ut,"start");var pt={name:"swap",actions:{START:ut,SCHEDULE_NEXT_STEP:ct,CREATE_TRANSACTION:it,EXECUTE_TRANSACTION:lt,CHECK_TRANSACTION_STATUS:st},run:["START"],whenTaskBlocked:(e,t)=>{e.reason.reason==="waiting_for_connecting_wallet"?ze(e,t):e.reason.reason==="waiting_for_network_change"?Ze(e,t):e.reason.reason==="depends_on_other_queues"&&et(e,t)}};import{useManager as rn}from"@rango-dev/queue-manager-react";import{useEffect as Oe,useState as on}from"react";import{DB_NAME as Zt,Persistor as en,Status as ee}from"@rango-dev/queue-manager-core";import{v4 as tn}from"uuid";var dt="migratedToQueueManager";function Ie(){return!!window.localStorage.getItem(dt)}i(Ie,"migrated");async function nn(){try{return(await window.indexedDB.databases()).map(e=>e.name).includes(Zt)}catch{return!1}}i(nn,"hasQueueManagerOnIDB");async function St(){let e=window.localStorage.getItem("pendingSwaps"),t=await nn();if(!e||Ie()||t)return!0;let n=JSON.parse(e),r=[];n.forEach(l=>{if(l.status==="running"){let c=tn(),u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:ee.RUNNING,storage:{swapDetails:l},state:{status:ee.RUNNING,activeTaskIndex:0,tasks:{[c]:{blockedFor:null,status:ee.RUNNING}}},tasks:[{id:c,action:"SCHEDULE_NEXT_STEP"}]};r.push(u)}else{let c=l.status==="success"?ee.SUCCESS:ee.FAILED,u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:c,storage:{swapDetails:l},state:{status:c,activeTaskIndex:0,tasks:{}},tasks:[]};r.push(u)}});let o=new en,a=r.map(async l=>o.insertQueue(l));return await Promise.all(a),window.localStorage.setItem(dt,"1"),!0}i(St,"migration");var Et=0;function an(){let e=Ie(),[t,n]=on(e);return Oe(()=>{(async()=>Et||(Et=1,St().finally(()=>{n(!0)})))()},[]),{status:t}}i(an,"useMigration");function sn(e){let{manager:t}=rn();Oe(()=>{e.lastConnectedWallet&&(nt({evmChains:e.evmChains,wallet_network:e.lastConnectedWallet,manager:t}),Ne(e.lastConnectedWallet,t,e.canSwitchNetworkTo))},[e.lastConnectedWallet]),Oe(()=>{e.disconnectedWallet&&(he(t),e.clearDisconnectedWallet())},[e.disconnectedWallet])}i(sn,"useQueueManager");function ln(){return le}i(ln,"useEvents");function co(e){return De(e),pt}i(co,"makeQueueDefinition");export{we as EventSeverity,fe as MainEvents,ie as MessageSeverity,I as PrettyError,me as RouteEventType,L as StepEventType,ne as StepExecutionBlockedEventStatus,Y as StepExecutionEventStatus,Pt as calculatePendingSwap,$t as cancelSwap,he as checkWaitingForNetworkChange,U as getCurrentBlockchainOfOrNull,y as getCurrentStep,z as getLastSuccessfulStep,G as getRelatedWallet,Ce as getRelatedWalletOrNull,P as getRequiredWallet,qt as getRunningSwaps,Vt as isApprovalTX,co as makeQueueDefinition,Q as prettifyErrorMessage,Kt as resetRunningSwapNotifsOnPageLoad,O as updateSwapStatus,ln as useEvents,an as useMigration,sn as useQueueManager};
|
|
1
|
+
var ft=Object.defineProperty;var i=(e,t)=>ft(e,"name",{value:t,configurable:!0});var mt="c6381a79-2817-4602-83bf-6a641a409e32",ge={API_KEY:mt};function Te(e){return ge[e]||""}i(Te,"getConfig");function Pe(e){let t;return typeof structuredClone=="function"?t=structuredClone(e):t=JSON.parse(JSON.stringify(e)),ge=t,ge}i(Pe,"initConfig");var fe=(n=>(n.RouteEvent="routeEvent",n.StepEvent="stepEvent",n))(fe||{}),me=(r=>(r.STARTED="started",r.FAILED="failed",r.SUCCEEDED="succeeded",r))(me||{}),Y=(r=>(r.CREATE_TX="create_tx",r.SEND_TX="send_tx",r.TX_SENT="tx_sent",r))(Y||{}),ne=(o=>(o.WAITING_FOR_QUEUE="waiting_for_queue",o.WAITING_FOR_WALLET_CONNECT="waiting_for_wallet_connect",o.WAITING_FOR_NETWORK_CHANGE="waiting_for_network_change",o.WAITING_FOR_CHANGE_WALLET_ACCOUNT="waiting_for_change_wallet_account",o))(ne||{}),L=(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))(L||{}),we=(o=>(o.ERROR="error",o.SUCCESS="success",o.WARNING="warning",o.INFO="info",o))(we||{});var Ae="Waiting for other swaps to complete",We="Waiting for connecting wallet",be=i((e,t)=>`Please change your ${e||"wallet"} account to ${t||"proper address"}`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET"),re=i(e=>`Please connect your ${e??""} wallet.`,"ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION"),oe=i(e=>`Please change your network to ${e}.`,"ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK"),k="CLIENT_UNEXPECTED_BEHAVIOUR";import{warn as Mt}from"@rango-dev/logging-core";import{Status as xe}from"@rango-dev/queue-manager-core";import{readAccountAddress as Ft}from"@rango-dev/wallets-core";import{getBlockChainNameFromId as Lt,getEvmProvider as Bt,splitWalletNetwork as Ke}from"@rango-dev/wallets-shared";import{TransactionType as W}from"rango-sdk";import{PendingSwapNetworkStatus as Z}from"rango-types";var ae=class extends Error{static{i(this,"RangoPresetError")}name="RangoPresetError";constructor(t){super(t)}};import{RangoClient as wt}from"rango-sdk";var se,B=i(()=>se||(se=new wt(Te("API_KEY"),Te("BASE_URL")),se),"httpService");import Pt from"mitt";import Be from"bignumber.js";import{isCosmosBlockchain as kt,isEvmBlockchain as Rt,isStarknetBlockchain as vt,isTronBlockchain as ht}from"rango-types";import Ue from"bignumber.js";var Me=i((e,t=null,n=null)=>{if(e===null||e==="")return"";let r=new Ue(e),o=1,a=1e3;for(let l=0;l<60;l++)if(new Ue(r.toFixed(l,o)).eq(r)){a=l;break}if(r.gte(1e4))return r.toFormat(0,o);if(r.gte(1e3)||r.gte(100))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,1))),o);if(r.gte(1))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,2))),o);if(r.gte(.01))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,4))),o);for(let l=t||4;l<17;l++)if(r.gte(Math.pow(10,-l)))return r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,l))),o);return r.isEqualTo(0)?"0":r.toFormat(Math.min(a,Math.min(n||100,Math.max(t||0,8))),o)},"numberToString");import{SignerErrorCode as X,SignerError as At,isSignerErrorCode as yt,isAPIErrorCode as Ct}from"rango-types";var _t="Assertion failed (Unexpected behaviour)",xt="Create transaction failed in Rango Server",Fe="Input wallet not found",I=class e extends Error{static{i(this,"PrettyError")}detail;root;code;_isPrettyError=!0;constructor(t,n,r,o){super(n),Object.setPrototypeOf(this,e.prototype),e.prototype._isPrettyError=!0,this.code=t,this.detail=o,this.root=r}static isPrettyError(t){return t instanceof e||Object.prototype.hasOwnProperty.call(t,"_isPrettyError")}getErrorDetail(){let t=typeof this.root=="object"&&this.root&&this.root.error?this.root.error:JSON.stringify(this.root),n=typeof this.root=="string"?this.root:this.root instanceof Error?this.root.message:t;return{extraMessage:this.message,extraMessageDetail:this.detail||n,extraMessageErrorCode:this.code||null}}static AssertionFailed(t){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",_t,null,t)}static BadStatusCode(t,n){return new e("TX_FAIL",t,null,`status code = ${n}`)}static CreateTransaction(t){return new e("FETCH_TX_FAILED",xt,null,t)}static WalletMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Fe,null,"Server requested for a blockchain or address not selected by user")}static BlockchainMissing(){return new e("CLIENT_UNEXPECTED_BEHAVIOUR",Fe,null,"Server requested for a blockchain or address not selected by user")}};function Le(e){try{return e?Ct(e)?e:yt(e)?{[X.REJECTED_BY_USER]:"USER_REJECT",[X.SIGN_TX_ERROR]:"CALL_WALLET_FAILED",[X.SEND_TX_ERROR]:"SEND_TX_FAILED",[X.TX_FAILED_IN_BLOCKCHAIN]:"TX_FAILED_IN_BLOCKCHAIN",[X.NOT_IMPLEMENTED]:k,[X.OPERATION_UNSUPPORTED]:k,[X.UNEXPECTED_BEHAVIOUR]:k}[e]:k:k}catch{return k}}i(Le,"mapAppErrorCodesToAPIErrorCode");var Q=i(e=>{if(!e)return{extraMessage:"",extraMessageErrorCode:null};if(I.isPrettyError(e))return e.getErrorDetail();if(At.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 ie=(o=>(o.error="error",o.warning="warning",o.info="info",o.success="success",o))(ie||{}),U=i((e,t)=>{try{return M(e,t)}catch{return null}},"getCurrentBlockchainOfOrNull"),M=i((e,t)=>{let n=t.evmTransaction?.blockChain||t.evmApprovalTransaction?.blockChain||t.starknetTransaction?.blockChain||t.starknetApprovalTransaction?.blockChain||t.tronTransaction?.blockChain||t.tronApprovalTransaction?.blockChain||t.cosmosTransaction?.blockChain||t.solanaTransaction?.blockChain||t.tonTransaction?.blockChain;if(n)return n;let r=t.transferTransaction?.fromWalletAddress;if(!r)throw I.BlockchainMissing();let o=Object.keys(e.wallets).find(a=>e.wallets[a]?.address===r)||null;if(o==null)throw I.BlockchainMissing();return o},"getCurrentBlockchainOf"),Nt=i(e=>{if(kt(e))return e.info?.explorerUrlToTx;if(Rt(e)||vt(e)||ht(e))return e.info.transactionUrl},"getBlockchainMetaExplorerBaseUrl"),J=i((e,t,n)=>{let r=n[t],o=Nt(r);if(o)return o.indexOf("/{txHash}")!==-1?o.replace("{txHash}",e?.toLowerCase()):`${o}/${e?.toLowerCase()}`},"getScannerUrl");function Xe(e,t){return e.steps.find(n=>n.status!=="failed"&&n.status!=="success"&&n.id!==t.id)||null}i(Xe,"getNextStep");var ye=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||""]||(t.transferTransaction?.fromWalletAddress?{address:t.transferTransaction?.fromWalletAddress}:null)||null;if(n==null)throw I.WalletMissing();return n.address},"getCurrentAddressOf");function G(e,t){let n=ye(e,t),r=Object.keys(e.wallets).map(c=>({k:c,v:e.wallets[c]})).find(({v:c})=>c.address===n)||null,o=r?.k||null,a=r?.v||null,l=a?.walletType;if(a===null)throw I.AssertionFailed(`Wallet for source ${o} not passed: walletType: ${l}`);return a}i(G,"getRelatedWallet");function Ce(e,t){if(!t)return null;try{return G(e,t)}catch{return null}}i(Ce,"getRelatedWalletOrNull");var It=i((e,t,n,r)=>r?.find(a=>a.blockchain===e&&a.symbol?.toUpperCase()===t?.toUpperCase()&&a.address===n)?.usdPrice||null,"getUsdPrice");function Ot(e,t){let n=new Be(0);for(let r=0;r<e.fee.length;r++){let o=e.fee[r];if(o.expenseType==="DECREASE_FROM_OUTPUT")continue;let a=It(o.asset.blockchain,o.asset.symbol,o.asset.address,t);n=n.plus(new Be(o.amount).multipliedBy(a||0))}return n}i(Ot,"getUsdFeeOfStep");function Qe(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?Me(Ot(e,t?.tokens),null,8):null,estimatedTimeInSeconds:e.estimatedTimeInSeconds||null,internalSteps:null}}i(Qe,"mapSwapStepToPendingSwapStep");function Dt(e,t,n,r,o,a){let l=t.result;if(!l)throw Error("Simulation result should not be null");return{creationTime:new Date().getTime().toString(),finishTime:null,requestId:t.requestId||"",inputAmount:e,wallets:n,status:"running",isPaused:!1,extraMessage:null,extraMessageSeverity:null,extraMessageDetail:null,extraMessageErrorCode:null,networkStatusExtraMessage:null,networkStatusExtraMessageDetail:null,lastNotificationTime:null,settings:r,simulationResult:l,validateBalanceOrFee:o,steps:t.result?.swaps?.map((c,u)=>{let s=Qe(c,a);return{id:u+1,...s,internalSwaps:c?.internalSwaps?.map(d=>Qe(d,a))||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,hasAlreadyProceededToSign:!1}})||[]}}i(Dt,"calculatePendingSwap");function Ge(e){return e.map(t=>{let{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:o,feeInUsd:a,executedTransactionId:l,executedTransactionTime:c,expectedOutputAmountHumanReadable:u,fromBlockchain:s,toBlockchain:d,fromSymbol:p,toSymbol:g,fromSymbolAddress:S,toSymbolAddress:w,swapperType:x,swapperId:E,outputAmount:f,fromAmountMaxValue:m,fromAmountMinValue:C,fromAmountPrecision:A,fromAmountRestrictionType:_,fromDecimals:v,status:R}=t;return{diagnosisUrl:n,estimatedTimeInSeconds:r,explorerUrl:o,feeInUsd:a,executedTransactionId:l,executedTransactionTime:c,expectedOutputAmountHumanReadable:u,fromBlockchain:s,toBlockchain:d,fromSymbol:p,toSymbol:g,fromSymbolAddress:S,toSymbolAddress:w,swapperName:E,swapperType:x,outputAmount:f,fromAmountMaxValue:m,fromAmountMinValue:C,fromAmountPrecision:A,fromAmountRestrictionType:_,fromDecimals:v,status:R,transaction:F(t)}})}i(Ge,"createSteps");function Wt(e,t,n){let{creationTime:r,finishTime:o,requestId:a,inputAmount:l,status:c,wallets:u,steps:s,settings:d}=e,p=Ge(s),S={route:{creationTime:r,finishTime:o,requestId:a,inputAmount:l,status:c,wallets:u,steps:p,slippage:d.slippage,infiniteApproval:d.infiniteApprove},step:p[p.length-1]};if(n)S.step=Ge([n])[0];else if(t==="failed"){let w=He(p);w&&(S.step=w)}else{let w=z(p);w&&(S.step=w)}return S}i(Wt,"getEventPayload");var le=Pt();function bt(e,t){let n,{type:r}=e;switch(r){case"started":n={...e,type:"started"};break;case"failed":n={...e,type:"failed"};break;case"succeeded":n={...e,type:"succeeded"};break;default:break}n&&le.emit("routeEvent",{event:n,route:t})}i(bt,"emitRouteEvent");function Ut(e,t,n){le.emit("stepEvent",{event:e,route:t,step:n})}i(Ut,"emitStepEvent");function T(e){let{event:t}=e,{type:n}=t,{route:r,step:o}=Wt(e.swap,n,e.step??void 0),a=`${o.fromBlockchain}.${o.fromSymbol}`,l=`${o.toBlockchain}.${o.toSymbol}`,c=o.outputAmount??"",u=e.step?U(e.swap,e.step):null,s="",d="info";switch(n){case"started":s="Swap process started",d="success";break;case"succeeded":s=`You received ${c} ${l}, hooray!`,d="success";break;case"failed":s=`Swap failed: ${e.swap?.extraMessage??"Reason is unknown"}`,d="error";break;case"tx_execution":t.status==="create_tx"?(s="Please wait while the transaction is created ...",d="info"):t.status==="send_tx"?(e.step&&j(e.step)?s=`Please confirm '${o.swapperName}' smart contract access to ${a}`:s="Please confirm transaction request in your wallet",d="warning"):t.status==="tx_sent"&&(s="Transaction sent successfully",d="info");break;case"check_status":e.step&&j(e.step)?s="Checking approve transaction status ...":s="Checking transaction status ...",d="info";break;case"approval_tx_succeeded":s="Smart contract called successfully",d="success";break;case"output_revealed":s="Transaction output amount revealed",d="success";break;case"tx_execution_blocked":t.status==="waiting_for_wallet_connect"?(s="Please connect your wallet.",d="warning"):t.status==="waiting_for_queue"?(s="Waiting for other swaps to complete",d="warning"):t.status==="waiting_for_change_wallet_account"?(s="Please change your wallet account.",d="warning"):t.status==="waiting_for_network_change"&&(s=`Please change your wallet network to ${u}.`,d="warning");break;default:break}e.step&&Ut({...t,message:s,messageSeverity:d},r,o),(e.event.type==="failed"||!e.step)&&bt({...t,message:s,messageSeverity:d},r)}i(T,"notifier");var _e=null;function ce(){return{claimedBy:()=>_e?.id,setClaimer:e=>{_e={id:e}},reset:()=>{_e=null}}}i(ce,"claimQueue");var H={};function ue(){return{getTransactionDataByHash:e=>H[e]||{},setTransactionDataByHash:(e,t)=>{H[e]||(H[e]={}),H[e].response=t.response||H[e].response,H[e].receiptReceived=t.receiptReceived||H[e].receiptReceived||!1}}}i(ue,"inMemoryTransactionsData");var y=i(e=>e.steps.find(t=>t.status!=="failed"&&t.status!=="success")||null,"getCurrentStep"),F=i(e=>{let{evmTransaction:t,evmApprovalTransaction:n,cosmosTransaction:r,solanaTransaction:o,transferTransaction:a,starknetApprovalTransaction:l,starknetTransaction:c,tronApprovalTransaction:u,tronTransaction:s,tonTransaction:d}=e;return t||n||r||o||a||l||c||u||s||d},"getCurrentStepTx"),pe=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;let n=t.type;switch(n){case W.EVM:t.isApprovalTx?e.evmApprovalTransaction=t:e.evmTransaction=t;break;case W.TRON:t.isApprovalTx?e.tronApprovalTransaction=t:e.tronTransaction=t;break;case W.STARKNET:t.isApprovalTx?e.starknetApprovalTransaction=t:e.starknetTransaction=t;break;case W.COSMOS:e.cosmosTransaction=t;break;case W.SOLANA:e.solanaTransaction=t;break;case W.TRANSFER:e.transferTransaction=t;break;case W.TON:e.tonTransaction=t;break;default:(r=>{throw new Error(`${r} was unhandled!`)})(n)}return e},"setCurrentStepTx"),ke=i(e=>F(e)?.type,"getCurrentStepTxType"),j=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:o,details:a,errorCode:l=null,hasAlreadyProceededToSign:c}){let u=e().swapDetails,s=y(u),d={swap:u,step:s};if(r&&s&&(s.status=r),n&&(u.status=n),u.hasAlreadyProceededToSign=c,n&&["failed","success"].includes(n)&&(u.finishTime=new Date().getTime().toString()),(o||a)&&(u.extraMessage=o||"",u.extraMessageDetail=a||""),r&&["failed"].includes(r)){let p=a&&a.includes("Warning")?"Swap canceled by user.":a,g=Ce(u,s)?.walletType;u.extraMessageSeverity="error";let S=Le(l);d.failureType=S,B().reportFailure({requestId:u.requestId,step:s?.id||1,eventType:S,reason:p||"",tags:g?{wallet:g}:void 0}).then().catch()}else r&&["running"].includes(r)?u.extraMessageSeverity="info":r&&["success","approved"].includes(r)?u.extraMessageSeverity="success":r&&["waitingForApproval"].includes(r)&&(u.extraMessageSeverity="warning");return r==="running"&&s&&(s.startTransactionTime=new Date().getTime()),t({...e(),swapDetails:u}),d}i(O,"updateSwapStatus");function Qt({getStorage:e,setStorage:t},n,r){let o=e().swapDetails;o.hasAlreadyProceededToSign=null;let a=y(o);a.executedTransactionId=n,a.executedTransactionTime=new Date().getTime().toString(),r?.url&&(a.explorerUrl=[...a.explorerUrl||[],{url:r.url,description:r.description||null}]),j(a)?o.extraMessage="Checking approve transaction status ...":o.extraMessage="Checking transaction status ...",o.extraMessageDetail="",o.extraMessageSeverity="info",t({...e(),swapDetails:o}),T({event:{type:"tx_execution",status:"tx_sent"},swap:o,step:a}),T({event:{type:"check_status"},swap:o,step:a})}i(Qt,"setStepTransactionIds");function Xt({getStorage:e,setStorage:t},n,r){let o=e().swapDetails,a=y(o);if(!a)return;let l=new Date;o.lastNotificationTime=l.getTime().toString(),!(a.networkStatus===Z.WaitingForConnectingWallet&&o.networkStatusExtraMessage===n&&o.networkStatusExtraMessageDetail===r)&&(a.networkStatus=Z.WaitingForConnectingWallet,o.networkStatusExtraMessage=n,o.networkStatusExtraMessageDetail=r,t({...e(),swapDetails:o}))}i(Xt,"markRunningSwapAsWaitingForConnectingWallet");function $e({getStorage:e,setStorage:t}){let n=e().swapDetails,r=y(n);if(!r)return;let{type:o}=D(n),a=M(n,r),l=`Change ${o} wallet network to ${a}`,c=`Please change your ${o} wallet network to ${a}.`,u=new Date;return n.lastNotificationTime=u.getTime().toString(),r.networkStatus=Z.WaitingForNetworkChange,n.networkStatusExtraMessage=l,n.networkStatusExtraMessageDetail=c,t({...e(),swapDetails:n}),{swap:n,step:r}}i($e,"markRunningSwapAsSwitchingNetwork");function Ve({getStorage:e,setStorage:t}){let n=e().swapDetails,r=y(n);if(r)return n.networkStatusExtraMessage="",n.networkStatusExtraMessageDetail="",r.networkStatus=Z.WaitingForQueue,T({event:{type:"tx_execution_blocked",status:"waiting_for_queue"},swap:n,step:r}),t({...e(),swapDetails:n}),{swap:n,step:r}}i(Ve,"markRunningSwapAsDependsOnOtherQueues");async function de(e){return new Promise(t=>setTimeout(t,e))}i(de,"delay");var Gt=i((e,t)=>e.wallets[t]?.walletType,"getSwapWalletType");function Re(e){return e===null||e?.blockchains===null||e?.blockchains.length===0}i(Re,"isWalletNull");function D(e){let t=y(e),n=U(e,t);if(!n)return{type:null,network:null,address:null};let r=Gt(e,n),o=e.wallets[n];return{type:r||null,network:n,address:o?o.address:null}}i(D,"getRequiredWallet");async function Ht(e){try{return await e.request({method:"eth_chainId"})||e?.chainId}catch{return e?.chainId}}i(Ht,"getChainId");async function Ye(e,t,n,r,o){if(Re(n))return!1;let a=U(e,t);if(!a)return!1;if(r.evmBasedChains.find(l=>l.name===a)){try{let l=e.wallets[a];if(l){let c=Bt(o,l.walletType),u=await Ht(c);if(u){let s=Lt(u,Object.entries(r.blockchains).map(([,d])=>d));if(s&&s.toLowerCase()===a.toLowerCase())return!0;if(s&&s.toLowerCase()!==a.toLowerCase())return!1}}}catch(l){console.log(l)}return!1}return!0}i(Ye,"isNetworkMatchedForTransaction");var Je=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||""]||t.transferTransaction?.fromWalletAddress||null)!==null,"isTxAlreadyCreated");function Se(e){let{getStorage:t,setStorage:n}=e,r=t().swapDetails,o=y(r);o?.networkStatus&&(o.networkStatus=null,n({...t(),swapDetails:r}))}i(Se,"resetNetworkStatus");function je(e,t={message:"",details:"",status:null}){let{message:n,details:r,status:o}=t,{getStorage:a,setStorage:l}=e,c=a().swapDetails,u=y(c);u?.networkStatus&&(c.networkStatusExtraMessage=n,c.networkStatusExtraMessageDetail=r,u.networkStatus=o,l({...a(),swapDetails:c}))}i(je,"updateNetworkStatus");function ze(e,t){let{context:n,queue:r}=t,o=r.getStorage().swapDetails,{ok:a,reason:l}=ve(o,n.state);if(!a){let c=y(o),{type:u,address:s}=D(o);T({event:{type:"tx_execution_blocked",...l==="account_miss_match"?{status:"waiting_for_change_wallet_account",requiredAccount:s??void 0}:{status:"waiting_for_wallet_connect",requiredWallet:u??void 0,requiredAccount:s??void 0}},swap:o,step:c}),Xt({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)},We,e.reason.description);return}r.unblock()}i(ze,"onBlockForConnectWallet");function Ze(e,t){let{context:n,queue:r}=t,o=r.getStorage().swapDetails,a=y(o);if(!a||o.status!=="running")return;let l=$e({getStorage:r.getStorage.bind(r),setStorage:r.setStorage.bind(r)}),c=U(o,a),u=D(o).type,s=u?n.state(u).network:void 0;l&&T({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",requiredNetwork:c??void 0,currentNetwork:s??void 0},swap:l.swap,step:l.step});let{type:d,network:p}=D(o);if(d&&p&&n.canSwitchNetworkTo(d,p)){let g=n.switchNetwork(d,p);g&&g.then(()=>{r.unblock()}).catch(S=>{console.log({error:S})})}}i(Ze,"onBlockForChangeNetwork");function et(e,t){let{getBlockedTasks:n,forceExecute:r,queue:o,manager:a,context:l}=t,{setClaimer:c,claimedBy:u,reset:s}=ce(),d=n().filter(m=>m.reason.reason==="depends_on_other_queues");if(d.length===0)return;let p=u(),g=!!p;if(p===o.id)return;if(g){Ve({getStorage:o.getStorage.bind(o),setStorage:o.setStorage.bind(o)});return}let S=d.find(m=>m.queue_id===t.queue_id);S||(S=d[0]),c(S.queue_id);let w=S.storage.get(),{type:x,network:E,address:f}=D(w.swapDetails);r(S.queue_id,{claimedBy:u(),resetClaimedBy:()=>{s(),Ne(`${x}-${E}:${f}`,a,l.canSwitchNetworkTo)}})}i(et,"onDependsOnOtherQueues");function ve(e,t){let{type:n,address:r}=D(e);if(!n||!r)return{ok:!1,reason:"not_connected"};let o=t(n),{accounts:a,connected:l}=o,c=a||[];return l?{ok:c.some(s=>{let{address:d}=Ft(s);return r.toLocaleLowerCase()===d.toLocaleLowerCase()}),reason:"account_miss_match"}:{ok:!1,reason:"not_connected"}}i(ve,"isRequiredWalletConnected");function tt(e){let{setTransactionDataByHash:t}=ue(),{getStorage:n,setStorage:r,failed:o,next:a,schedule:l,context:c}=e,{meta:u,getSigners:s,isMobileWallet:d}=c,p=n().swapDetails,g=y(p),S=G(p,g),w=d(S?.walletType),x=ye(p,g),E=s(S.walletType),f=M(p,g),m=i(()=>{e.context.resetClaimedBy&&e.context.resetClaimedBy()},"onFinish"),C=F(g),A=C?.type,_=j(g);if(!C||!A){let h="Unexpected Error: tx is null!",P=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:h,details:void 0,errorCode:"CLIENT_UNEXPECTED_BEHAVIOUR"});return T({event:{type:"failed",reason:h,reasonCode:"CLIENT_UNEXPECTED_BEHAVIOUR"},...P}),o(),m()}let v=u.blockchains?.[C.blockChain]?.chainId,R=typeof p.hasAlreadyProceededToSign=="boolean",N,q,b,V,K;_?(b=`Waiting for approval of ${g?.fromSymbol} coin ${w?"on your mobile phone!":""}`,V="Waiting for approve transaction to be mined and confirmed successfully",q="waitingForApproval",N=void 0,K="tx_execution"):R?(b="Transaction is expired. Please try again.",q="failed",N="failed",V="",K="failed"):(b="Executing transaction ...",q="running",N="running",V=`${w?"Check your mobile phone!":""}`,K="tx_execution");let Ee=O({getStorage:n,setStorage:r,nextStepStatus:q,nextStatus:N,message:b,details:V,hasAlreadyProceededToSign:_?void 0:R,errorCode:R?"TX_EXPIRED":void 0});if(K==="failed"?T({event:{type:K,reason:b,reasonCode:Ee.failureType??k},...Ee}):T({event:{type:K,status:"send_tx"},...Ee}),R){o(),m();return}E.getSigner(A).signAndSendTx(C,x,v).then(({hash:h,response:P})=>{let te=J(h,f,u.blockchains);Qt(e,h,te&&(!P||P&&!P.hashRequiringUpdate)?{url:te,description:_?"Approve":"Swap"}:void 0),P&&t(h,{response:P}),l("CHECK_TRANSACTION_STATUS"),a(),m()},h=>{if(p.status==="failed")return;let{extraMessage:P,extraMessageDetail:te,extraMessageErrorCode:gt}=Q(h),Tt=new ae(h?.trace?.stack||h?.trace||h?.root||h);Mt(Tt,{tags:{requestId:p.requestId,rpc:!0,swapper:g?.swapperId||"",walletType:S?.walletType||""}});let De=O({getStorage:n,setStorage:r,nextStatus:"failed",nextStepStatus:"failed",message:P,details:te,errorCode:gt});T({event:{type:"failed",reason:P,reasonCode:De.failureType??k},...De}),o(),m()})}i(tt,"signTransaction");function nt(e){let{wallet_network:t,evmChains:n,manager:r}=e,[o,a]=Ke(t);n.some(l=>l.name==a)&&r?.getAll().forEach(l=>{let c=l.list.getStorage(),u=c?.swapDetails;if(u&&u.status==="running"){let s=y(u);if(s){let d=c?.swapDetails.wallets[s.fromBlockchain]?.walletType,p=Object.keys(l.list.state.tasks).some(S=>{let w=l.list.state.tasks[S];return w.status===xe.BLOCKED&&["waiting_for_connecting_wallet"].includes(w.blockedFor?.reason)}),g=U(u,s);if(d===o&&p&&g!=a){let S=l.list,{type:w}=D(u),x=oe(w);l.list.block({reason:{reason:"waiting_for_network_change",description:x},silent:!0});let E=$e({getStorage:S.getStorage.bind(S),setStorage:S.setStorage.bind(S)});E&&T({event:{type:"tx_execution_blocked",status:"waiting_for_network_change",currentNetwork:a,requiredNetwork:g??void 0},swap:E.swap,step:E.step})}}}})}i(nt,"checkWaitingForConnectWalletChange");function he(e){e?.getAll().forEach(t=>{if(Object.keys(t.list.state.tasks).some(r=>{let o=t.list.state.tasks[r];return o.status===xe.BLOCKED&&["waiting_for_network_change","depends_on_other_queues"].includes(o.blockedFor?.reason)})){let r=t.list.getStorage()?.swapDetails;if(r.status==="running"){let{type:o}=D(r),a=re(o);t.list.block({reason:{reason:"waiting_for_connecting_wallet",description:a}})}}})}i(he,"checkWaitingForNetworkChange");function qt(e){let t=e?.getAll()||new Map,n=[];return t.forEach(r=>{let a=r.list.getStorage()?.swapDetails;!a||a.status!=="running"||n.push(a)}),n}i(qt,"getRunningSwaps");function Kt(e){e.forEach(t=>{let n=y(t),r="tx_execution_blocked",o;n?.networkStatus===Z.WaitingForQueue?o="waiting_for_queue":t?.status==="running"&&(o="waiting_for_wallet_connect"),r&&T&&T({event:{type:r,status:o??"waiting_for_queue"},swap:t,step:n})})}i(Kt,"resetRunningSwapNotifsOnPageLoad");function Ne(e,t,n,r={fallbackToOnlyWallet:!0}){let[o,a]=Ke(e);if(!o||!a)return;let l=[],c=[];t?.getAll().forEach(s=>{if(s.status===xe.BLOCKED){let d=s.list.getStorage(),p=d?.swapDetails;if(p&&p.status==="running"){let g=y(p);g&&(U(p,g)==a&&d?.swapDetails.wallets[a]?.walletType===o?l.push(s.list):d?.swapDetails.wallets[g.fromBlockchain]?.walletType===o&&c.push(s.list))}}});let u;if(l.length>0){if(u=l[0],l.length>1)for(let s=1;s<l.length;s++){let d=l[s];Ve({getStorage:d.getStorage.bind(d),setStorage:d.setStorage.bind(d)})}}else c.length>0&&r.fallbackToOnlyWallet&&(u=c[0]);n?.(o,a)?u?.checkBlock():u?.unblock()}i(Ne,"retryOn");function rt(e){return!!e.evmTransaction||!!e.evmApprovalTransaction}i(rt,"isNeedBlockQueueForParallel");async function ot(e){let t=await e;if(!t.ok||!t.transaction)throw I.CreateTransaction(t.error||"bad response from create tx endpoint");return t}i(ot,"throwOnOK");function $t(e,t){let{reset:n}=ce();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 T({event:{type:"failed",reasonCode:"USER_CANCEL",reason:r.swap.extraMessage??void 0},swap:r.swap,step:r.step}),n(),t&&t?.retry(),r}i($t,"cancelSwap");function z(e){return e.slice().reverse().find(t=>t.status==="success")}i(z,"getLastSuccessfulStep");function He(e){return e.slice().reverse().find(t=>t.status==="failed")}i(He,"getFailedStep");function Vt(e){let{transaction:t}=e;return t?.type===W.EVM&&t.isApprovalTx||t?.type===W.STARKNET&&t.isApprovalTx||t?.type===W.TRON&&t.isApprovalTx}i(Vt,"isApprovalTX");var at=5e3,Yt=5e3;async function Jt({getStorage:e,setStorage:t,next:n,schedule:r,retry:o,failed:a,context:l}){let c=e().swapDetails,{meta:u}=l,s=y(c);if(!s?.executedTransactionId)return;let d=F(s),p=s.executedTransactionId,g=!1,S=null,w=null,{getTransactionDataByHash:x,setTransactionDataByHash:E}=ue();try{let A=ke(s),_=G(c,s);A&&_&&(w=l.getSigners(_.walletType).getSigner(A))}catch{}try{let{response:A,receiptReceived:_}=x(p);if(w?.wait&&!_){let v=d?.blockChain&&u.blockchains?.[d?.blockChain]?.chainId||void 0,{hash:R,response:N}=await w.wait(p,v,A);if(R!==p){s.executedTransactionId=R||s.executedTransactionId;let q=M(c,s),b;!!Object.keys(u.blockchains).length&&(b=J(s.executedTransactionId,q,u.blockchains)),b&&s.explorerUrl&&s.explorerUrl?.length>=1&&(s.explorerUrl[s.explorerUrl.length-1]={url:b,description:"Replaced Swap"}),p=s.executedTransactionId,R&&N&&E(R,{response:N})}else E(R,{receiptReceived:!0})}}catch(A){let{extraMessage:_,extraMessageDetail:v,extraMessageErrorCode:R}=Q(A),N=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:_,details:v,errorCode:R});T({event:{type:"failed",reason:_,reasonCode:N.failureType??k},...N}),g=!0}try{S=await B().checkStatus({requestId:c.requestId,txId:p,step:s.id})}catch{await de(at),o();return}if(g)return a();if(s?.status==="failed")return;let f=S?.outputAmount||(s.outputAmount?s.outputAmount:null),m=s.outputAmount||null;c.extraMessage=S?.extraMessage||c.extraMessage,c.extraMessageSeverity="info",c.extraMessageDetail="",s.status=S?.status||s.status,s.diagnosisUrl=S?.diagnosisUrl||s.diagnosisUrl||null,s.outputAmount=f||s.outputAmount,s.explorerUrl=S?.explorerUrl||s.explorerUrl,s.internalSteps=S?.steps||null;let C=S?.newTx;if(C&&(s.status="created",s.executedTransactionId=null,s.executedTransactionTime=null,pe(s,C)),m===null&&f!==null?T({event:{type:"output_revealed",outputAmount:f},swap:c,step:s}):m===null&&f===null&&T({event:{type:"check_status"},swap:c,step:s}),s.status==="success"){let A=Xe(c,s);c.extraMessageDetail="",c.extraMessage=A?`starting next step: ${A.swapperId}: ${A.fromBlockchain} -> ${A.toBlockchain}`:"",T({event:{type:"succeeded",outputAmount:s.outputAmount??""},swap:c,step:s})}else s.status==="failed"&&(c.extraMessage="Transaction failed in blockchain",c.extraMessageSeverity="error",c.extraMessageDetail=S?.extraMessage||"",c.status="failed",c.finishTime=new Date().getTime().toString());t({...e(),swapDetails:c}),S?.status==="failed"?a():S?.status==="success"||S?.status==="running"&&S.newTx?(r("SCHEDULE_NEXT_STEP"),n()):(await de(at),o())}i(Jt,"checkTransactionStatus");async function jt({getStorage:e,setStorage:t,next:n,schedule:r,retry:o,failed:a,context:l}){let c=e().swapDetails,{meta:u}=l,{getTransactionDataByHash:s,setTransactionDataByHash:d}=ue(),p=y(c);if(!p){console.log("ignore check status, current step is null");return}let g=F(p);if(!p?.executedTransactionId)return;let S=p.executedTransactionId,w=null;try{let E=ke(p),f=G(c,p);E&&f&&(w=l.getSigners(f.walletType).getSigner(E))}catch{}try{let{response:E,receiptReceived:f}=s(S);if(w?.wait&&!f){let m=g?.blockChain&&u.blockchains?.[g?.blockChain]?.chainId||void 0,{hash:C,response:A}=await w.wait(S,m,E);if(C!==S){p.executedTransactionId=C||p.executedTransactionId;let _=M(c,p),v;!!Object.keys(u.blockchains).length&&(v=J(p.executedTransactionId,_,u.blockchains)),v&&p.explorerUrl&&p.explorerUrl?.length>=1&&(p.explorerUrl[p.explorerUrl.length-1]={url:v,description:"Replaced Approve"}),S=p.executedTransactionId,C&&A&&d(C,{response:A})}else d(C,{receiptReceived:!0})}}catch(E){let{extraMessage:f,extraMessageDetail:m,extraMessageErrorCode:C}=Q(E),A=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:f,details:m,errorCode:C});return T({event:{type:"failed",reason:f,reasonCode:A.failureType??k},...A}),a()}let x=!1;try{let E=await B().checkApproval(c.requestId,p.executedTransactionId);if(p?.status==="failed")return;if(x=E.isApproved,!x&&(E.txStatus==="failed"||E.txStatus==="success")){let f,m;E.txStatus==="failed"?(f="Approve transaction failed",m="Smart contract approval tx failed in blockchain."):(f="Not enough approval",E.requiredApprovedAmount&&E.currentApprovedAmount?m=`Required approval: ${E.requiredApprovedAmount}, current approval: ${E.currentApprovedAmount}`:m="You still don't have enough approval for this swap.");let C=O({getStorage:e,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",errorCode:"INSUFFICIENT_APPROVE",message:f,details:m});T({event:{type:"failed",reason:f,reasonCode:C.failureType??k},...C}),a()}else x||T({event:{type:"check_status"},swap:c,step:p})}catch{x=!1}x?(p.status="approved",c.extraMessage=`Spending ${p.fromSymbol} approved successfully.`,c.extraMessageDetail=null,c.extraMessageSeverity="success",p.evmApprovalTransaction=null,p.executedTransactionId=null,p.executedTransactionTime=null,p.starknetApprovalTransaction=null,p.tronApprovalTransaction=null,t({...e(),swapDetails:c}),T({event:{type:"approval_tx_succeeded"},swap:c,step:p}),r("SCHEDULE_NEXT_STEP"),n()):(await de(Yt),o())}i(jt,"checkApprovalStatus");async function st(e){let t=e.getStorage().swapDetails,n=y(t);if(!n){console.log("ignore check status, current step is null",t.requestId);return}Se(e),n.status==="running"?await Jt(e):n.status==="waitingForApproval"&&await jt(e)}i(st,"checkStatus");async function it(e){let{setStorage:t,getStorage:n,next:r,schedule:o}=e,a=n().swapDetails,l=y(a);if(!F(l)){T({event:{type:"tx_execution",status:"create_tx"},swap:a,step:l});let u={requestId:a.requestId,step:l.id,userSettings:{slippage:a.settings.slippage,infiniteApprove:a.settings.infiniteApprove},validations:{balance:a.validateBalanceOrFee,fee:a.validateBalanceOrFee}};try{let{transaction:s}=await ot(B().createTransaction(u));s&&pe(l,s),t({...n(),swapDetails:a}),o("EXECUTE_TRANSACTION"),r()}catch(s){a.status="failed",a.finishTime=new Date().getTime().toString();let{extraMessage:d,extraMessageDetail:p}=Q(s),g=O({getStorage:n,setStorage:t,nextStatus:"failed",nextStepStatus:"failed",message:d,details:p,errorCode:"FETCH_TX_FAILED"});T({event:{type:"failed",reason:d,reasonCode:g.failureType??k},...g}),e.failed()}}}i(it,"createTransaction");import{PendingSwapNetworkStatus as zt}from"rango-types";async function lt(e){let{getStorage:t,context:n}=e,{meta:r,wallets:o,providers:a}=n,{claimedBy:l}=ce(),c=n.claimedBy===n._queue?.id,u=i(E=>{e.block(E),c&&e.context.resetClaimedBy&&e.context.resetClaimedBy()},"requestBlock"),s=t().swapDetails,d=y(s);if(Se(e),!ve(s,n.state).ok){let{type:E,address:f}=D(s),m=o?.blockchains?.find(_=>!_.accounts?.find(v=>v.walletType===E)),C=Re(o)||m?re(E):be(E,f),A={reason:"waiting_for_connecting_wallet",description:C};u(A);return}let g=await Ye(s,d,o,r,a);if(!!l()&&!c&&!g){let E=Ae,f={reason:"depends_on_other_queues",details:E};u(f);return}else if(!g){let E=M(s,d),f=oe(E),m={reason:"waiting_for_network_change",details:f};u(m);return}if(je(e,{message:"",details:"Wallet network changed successfully",status:zt.NetworkChanged}),rt(d)&&!c){let E={reason:"depends_on_other_queues",description:Ae,details:{}};u(E);return}tt(e)}i(lt,"executeTransaction");function ct({schedule:e,next:t,failed:n,setStorage:r,getStorage:o}){let a=o().swapDetails,l=y(a),c=a.steps.find(u=>u.status==="failed");if(l&&!c){if(Je(a,l))return e("EXECUTE_TRANSACTION"),t();if(l?.executedTransactionId)return e("CHECK_TRANSACTION_STATUS"),t();a.status="running",r({...o(),swapDetails:a}),T({event:{type:"started"},swap:a,step:l}),e("CREATE_TRANSACTION"),t()}else a.status=c?"failed":"success",a.finishTime=new Date().getTime().toString(),r({...o(),swapDetails:a}),T({...c?{event:{type:"failed",reason:a.extraMessage??void 0,reasonCode:"CALL_OR_SEND_FAILED"}}:{event:{type:"succeeded",outputAmount:z(a.steps)?.outputAmount??""}},swap:a,step:null}),c?n():t()}i(ct,"scheduleNextStep");function ut({schedule:e,next:t,getStorage:n}){let r=n().swapDetails;T({event:{type:"started"},swap:r,step:null}),e("SCHEDULE_NEXT_STEP"),t()}i(ut,"start");var pt={name:"swap",actions:{START:ut,SCHEDULE_NEXT_STEP:ct,CREATE_TRANSACTION:it,EXECUTE_TRANSACTION:lt,CHECK_TRANSACTION_STATUS:st},run:["START"],whenTaskBlocked:(e,t)=>{e.reason.reason==="waiting_for_connecting_wallet"?ze(e,t):e.reason.reason==="waiting_for_network_change"?Ze(e,t):e.reason.reason==="depends_on_other_queues"&&et(e,t)}};import{useManager as rn}from"@rango-dev/queue-manager-react";import{useEffect as Oe,useState as on}from"react";import{DB_NAME as Zt,Persistor as en,Status as ee}from"@rango-dev/queue-manager-core";import{v4 as tn}from"uuid";var dt="migratedToQueueManager";function Ie(){return!!window.localStorage.getItem(dt)}i(Ie,"migrated");async function nn(){try{return(await window.indexedDB.databases()).map(e=>e.name).includes(Zt)}catch{return!1}}i(nn,"hasQueueManagerOnIDB");async function St(){let e=window.localStorage.getItem("pendingSwaps"),t=await nn();if(!e||Ie()||t)return!0;let n=JSON.parse(e),r=[];n.forEach(l=>{if(l.status==="running"){let c=tn(),u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:ee.RUNNING,storage:{swapDetails:l},state:{status:ee.RUNNING,activeTaskIndex:0,tasks:{[c]:{blockedFor:null,status:ee.RUNNING}}},tasks:[{id:c,action:"SCHEDULE_NEXT_STEP"}]};r.push(u)}else{let c=l.status==="success"?ee.SUCCESS:ee.FAILED,u={id:l.requestId,createdAt:Number(l.creationTime),name:"swap",status:c,storage:{swapDetails:l},state:{status:c,activeTaskIndex:0,tasks:{}},tasks:[]};r.push(u)}});let o=new en,a=r.map(async l=>o.insertQueue(l));return await Promise.all(a),window.localStorage.setItem(dt,"1"),!0}i(St,"migration");var Et=0;function an(){let e=Ie(),[t,n]=on(e);return Oe(()=>{(async()=>Et||(Et=1,St().finally(()=>{n(!0)})))()},[]),{status:t}}i(an,"useMigration");function sn(e){let{manager:t}=rn();Oe(()=>{e.lastConnectedWallet&&(nt({evmChains:e.evmChains,wallet_network:e.lastConnectedWallet,manager:t}),Ne(e.lastConnectedWallet,t,e.canSwitchNetworkTo))},[e.lastConnectedWallet]),Oe(()=>{e.disconnectedWallet&&(he(t),e.clearDisconnectedWallet())},[e.disconnectedWallet])}i(sn,"useQueueManager");function ln(){let{all:e,...t}=le;return t}i(ln,"useEvents");function co(e){return Pe(e),pt}i(co,"makeQueueDefinition");export{we as EventSeverity,fe as MainEvents,ie as MessageSeverity,I as PrettyError,me as RouteEventType,L as StepEventType,ne as StepExecutionBlockedEventStatus,Y as StepExecutionEventStatus,Dt as calculatePendingSwap,$t as cancelSwap,he as checkWaitingForNetworkChange,U as getCurrentBlockchainOfOrNull,y as getCurrentStep,z as getLastSuccessfulStep,G as getRelatedWallet,Ce as getRelatedWalletOrNull,D as getRequiredWallet,qt as getRunningSwaps,Vt as isApprovalTX,co as makeQueueDefinition,Q as prettifyErrorMessage,Kt as resetRunningSwapNotifsOnPageLoad,O as updateSwapStatus,ln as useEvents,an as useMigration,sn as useQueueManager};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|