@swapkit/helpers 1.0.0-rc.8 → 1.0.0-rc.81

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/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2023 THORSwap
189
+ Copyright THORSwap
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
package/dist/index.cjs CHANGED
@@ -1 +1,2 @@
1
- "use strict";var oe=Object.create;var N=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var me=(n,e,t)=>e in n?N(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var ge=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of ue(e))!de.call(n,a)&&a!==t&&N(n,a,{get:()=>e[a],enumerable:!(i=le(e,a))||i.enumerable});return n};var _e=(n,e,t)=>(t=n!=null?oe(he(n)):{},ge(e||!n||!n.__esModule?N(t,"default",{value:n,enumerable:!0}):t,n));var g=(n,e,t)=>(me(n,typeof e!="symbol"?e+"":e,t),t),pe=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var C=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)};var m=(n,e,t)=>(pe(n,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@swapkit/types"),Ce=n=>{if(n<0)throw new Error("Invalid number of year");return 10+n},fe=n=>{if(n.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!n.match(e)},Ae=([n,e,t,i,a])=>`${n}'/${e}'/${t}'/${i}${typeof a!="number"?"":`/${a}`}`,Se=async(n,e)=>{try{const t=Object.entries(e||{}).reduce((a,[s,c])=>(c&&(a[s]=c),a),{});return(await fetch(`${n}${e?`?${new URLSearchParams(t).toString()}`:""}`,{method:"GET",mode:"cors",credentials:"omit",referrer:"https://sk.thorswap.net"})).json()}catch(t){return console.error(t),{}}},K=async(n,e,t,i=!1)=>{try{const a=await fetch(`${n}`,{body:e,headers:t,method:"POST",referrer:"https://sk.thorswap.net"});return i?a.text():a.json()}catch{return{}}},we="0x313ce567",Y=async({chain:n,to:e})=>{try{const t=await K(r.ChainToRPC[n],JSON.stringify({method:"eth_call",params:[{to:e.toLowerCase(),data:we},"latest"],id:44,jsonrpc:"2.0"}),{accept:"*/*","cache-control":"no-cache","content-type":"application/json"},!0),{result:i}=JSON.parse(t);return parseInt(BigInt(i).toString())}catch(t){return console.error(t),r.BaseDecimal[n]}},$e=async n=>{if(n===r.Chain.Ethereum)return r.BaseDecimal.ETH;const[,e]=n.split("-");return e!=null&&e.startsWith("0x")?Y({chain:r.Chain.Ethereum,to:e}):r.BaseDecimal.ETH},Be=async n=>{const[,e]=n.split("-");return e!=null&&e.startsWith("0x")?Y({chain:r.Chain.Avalanche,to:e.toLowerCase()}):r.BaseDecimal.AVAX},be=async n=>(n===r.Chain.BinanceSmartChain,r.BaseDecimal.BSC),q=async({chain:n,symbol:e})=>{switch(n){case r.Chain.Ethereum:return $e(e);case r.Chain.Avalanche:return Be(e);case r.Chain.BinanceSmartChain:return be(e);default:return r.BaseDecimal[n]}},ye={[r.FeeOption.Average]:1.2,[r.FeeOption.Fast]:1.5,[r.FeeOption.Fastest]:2},z=({chain:n,symbol:e})=>{switch(n){case r.Chain.Bitcoin:case r.Chain.BitcoinCash:case r.Chain.Litecoin:case r.Chain.Dogecoin:case r.Chain.Binance:case r.Chain.Ethereum:case r.Chain.Avalanche:return e===n;case r.Chain.Arbitrum:case r.Chain.Optimism:return e==="ETH";case r.Chain.Maya:return e==="CACAO";case r.Chain.Kujira:return e==="KUJI";case r.Chain.Cosmos:return e==="ATOM";case r.Chain.Polygon:return e==="MATIC";case r.Chain.BinanceSmartChain:return e==="BNB";case r.Chain.THORChain:return e==="RUNE"}},J=n=>{switch(n){case"ETH.THOR":return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case"ETH.vTHOR":return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case r.Chain.Cosmos:return{identifier:"GAIA.ATOM",decimal:r.BaseDecimal[n]};case r.Chain.THORChain:return{identifier:"THOR.RUNE",decimal:r.BaseDecimal[n]};case r.Chain.BinanceSmartChain:return{identifier:"BSC.BNB",decimal:r.BaseDecimal[n]};case r.Chain.Maya:return{identifier:"MAYA.CACAO",decimal:r.BaseDecimal.MAYA};case"MAYA.MAYA":return{identifier:"MAYA.MAYA",decimal:4};case r.Chain.Kujira:case r.Chain.Arbitrum:case r.Chain.Optimism:case r.Chain.BitcoinCash:case r.Chain.Litecoin:case r.Chain.Dogecoin:case r.Chain.Binance:case r.Chain.Avalanche:case r.Chain.Polygon:case r.Chain.Bitcoin:case r.Chain.Ethereum:return{identifier:`${n}.${n}`,decimal:r.BaseDecimal[n]}}},Q=({chain:n,symbol:e})=>{if(e.includes("/"))return"Synth";switch(n){case r.Chain.Bitcoin:case r.Chain.BitcoinCash:case r.Chain.Dogecoin:case r.Chain.Litecoin:case r.Chain.Maya:case r.Chain.THORChain:return"Native";case r.Chain.Cosmos:return e==="ATOM"?"Native":r.Chain.Cosmos;case r.Chain.Kujira:return e===r.Chain.Kujira?"Native":r.Chain.Kujira;case r.Chain.Binance:return e===r.Chain.Binance?"Native":"BEP2";case r.Chain.BinanceSmartChain:return e===r.Chain.Binance?"Native":"BEP20";case r.Chain.Ethereum:return e===r.Chain.Ethereum?"Native":"ERC20";case r.Chain.Avalanche:return e===r.Chain.Avalanche?"Native":r.Chain.Avalanche;case r.Chain.Polygon:return e===r.Chain.Polygon?"Native":"POLYGON";case r.Chain.Arbitrum:return[r.Chain.Ethereum,r.Chain.Arbitrum].includes(e)?"Native":"ARBITRUM";case r.Chain.Optimism:return[r.Chain.Ethereum,r.Chain.Optimism].includes(e)?"Native":"OPTIMISM"}},Ie=n=>{var c;const[e,...t]=n.split("."),i=n.includes("/"),a=t.join("."),s=(c=a==null?void 0:a.split("-"))==null?void 0:c[0];return{chain:e,symbol:a,ticker:s,synth:i}},Te=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),ve=n=>n.filter(e=>!Te.test(e.toString())&&!e.toString().includes("undefined")),X=({liquidityUnits:n,poolUnits:e,runeDepth:t})=>{const i=d(n),a=d(e),s=d(t),c=i.mul(s),o=a.mul(a).mul(2),l=a.mul(i).mul(2),u=i.mul(i),h=a.mul(a).mul(a);return c.mul(o.sub(l).add(u)).div(h)},Z=({liquidityUnits:n,poolUnits:e,assetDepth:t})=>{const i=d(n),a=d(e),s=d(t),c=i.mul(s),o=a.mul(a).mul(2),l=a.mul(i).mul(2),u=i.mul(i),h=c.mul(o.sub(l).add(u)),p=a.mul(a).mul(a);return h.div(p)},Me=({percent:n,runeDepth:e,liquidityUnits:t,poolUnits:i})=>X({runeDepth:e,liquidityUnits:t,poolUnits:i}).mul(n),Ve=({percent:n,assetDepth:e,liquidityUnits:t,poolUnits:i})=>Z({assetDepth:e,liquidityUnits:t,poolUnits:i}).mul(n),d=n=>new ie({value:n,decimal:r.BaseDecimal.THOR}),ee=({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i})=>({assetAmount:d(i).mul(n).div(e),runeAmount:d(t).mul(n).div(e)}),Oe=({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i,percent:a})=>Object.fromEntries(Object.entries(ee({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i})).map(([s,c])=>[s,c.mul(a)])),Ee=({runeDepth:n,poolUnits:e,assetDepth:t,liquidityUnits:i,runeAmount:a,assetAmount:s})=>{const c=d(n),o=d(t),l=d(e),u=d(a),h=d(s),p=u.mul(o),$=h.mul(c),E=u.mul(h),ae=c.mul(o),re=l.mul(p.add($.add(E.mul(2)))),se=p.add($.add(ae.mul(2))),W=re.div(se),R=d(i).add(W);if(W.baseValueNumber===0)return R.div(l).baseValueNumber;const ce=l.add(R);return R.div(ce).baseValueNumber},Re=({runeAmount:n,assetAmount:e,runeDepth:t,assetDepth:i})=>{const a=d(t),s=d(i),c=d(e),o=d(n),l=c.mul(a).sub(s.mul(o)),u=s.mul(o).add(a.mul(s));return Math.abs(l.div(u).baseValueNumber)},Ne=({symbol:n,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${n.slice(-3)}`:n,De=(n,e)=>{switch(n){case r.MemoType.LEAVE:case r.MemoType.BOND:{const{address:t}=e;return`${n}:${t}`}case r.MemoType.UNBOND:{const{address:t,unbondAmount:i}=e;return`${n}:${t}:${i*10**8}`}case r.MemoType.THORNAME_REGISTER:{const{name:t,chain:i,address:a,owner:s}=e;return`${n}:${t}:${i}:${a}${s?`:${s}`:""}`}case r.MemoType.DEPOSIT:{const{chain:t,symbol:i,address:a,singleSide:s}=e;return s?`${n}:${t}/${i}::t:0`:`${n}:${t}.${i}:${a||""}:t:0`}case r.MemoType.WITHDRAW:{const{chain:t,ticker:i,symbol:a,basisPoints:s,targetAssetString:c,singleSide:o}=e,l=!o&&c?`:${c}`:"",u=Ne({chain:t,symbol:a,ticker:i});return`${n}:${t}${o?"/":"."}${u}:${s}${l}`}case r.MemoType.OPEN_LOAN:case r.MemoType.CLOSE_LOAN:{const{asset:t,address:i}=e;return`${n}:${t}:${i}`}default:return""}},G=Object.values(r.Chain),He=(n="")=>{const e=n.toUpperCase(),[t]=e.split(".");if(G.includes(t))return!0;const[i]=e.split("/");if(G.includes(i))return!0;throw new Error(`Invalid identifier: ${n}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},I=8,S=n=>10n**BigInt(n),B=n=>Math.log10(parseFloat(n.toString()));function P({value:n,bigIntDecimal:e=I,decimal:t=I}){const i=n<0n;let a=n.toString().substring(i?1:0);const s=t-(a.length-1);s>0&&(a="0".repeat(s)+a);const c=a.length-t;let o=a.slice(-t);return parseInt(o[e])>=5?o=`${o.substring(0,e-1)}${(parseInt(o[e-1])+1).toString()}`:o=o.substring(0,e),`${i?"-":""}${a.slice(0,c)}.${o}`.replace(/\.?0*$/,"")}var f,b,V,te,O,ne,v,k,A,y,M,L;const T=class T{constructor(e){C(this,f);C(this,V);C(this,O);C(this,v);C(this,A);C(this,M);g(this,"decimalMultiplier",10n**8n);g(this,"bigIntValue",0n);g(this,"decimal");const t=D(e);this.decimal=typeof e=="object"?e.decimal:void 0,this.decimalMultiplier=S(Math.max(m(this,M,L).call(this,m(this,A,y).call(this,t)),this.decimal||0)),m(this,V,te).call(this,t)}static fromBigInt(e,t){return new T({decimal:t,value:P({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:i}){return T.fromBigInt(new T(e).bigIntValue*S(i)/S(t),i)}get baseValue(){return this.getBaseValue("string")}get baseValueNumber(){return this.getBaseValue("number")}get baseValueBigInt(){return this.getBaseValue("bigint")}set(e){return new this.constructor({decimal:this.decimal,value:e,identifier:this.toString()})}add(...e){return m(this,f,b).call(this,"add",...e)}sub(...e){return m(this,f,b).call(this,"sub",...e)}mul(...e){return m(this,f,b).call(this,"mul",...e)}div(...e){return m(this,f,b).call(this,"div",...e)}gt(e){return this.bigIntValue>this.getBigIntValue(e)}gte(e){return this.bigIntValue>=this.getBigIntValue(e)}lt(e){return this.bigIntValue<this.getBigIntValue(e)}lte(e){return this.bigIntValue<=this.getBigIntValue(e)}eqValue(e){return this.bigIntValue===this.getBigIntValue(e)}getValue(e){const t=this.formatBigIntToSafeValue(this.bigIntValue,this.decimal||B(this.decimalMultiplier));switch(e){case"number":return Number(t);case"string":return t;default:return this.bigIntValue*BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(e){const t=this.decimalMultiplier/S(this.decimal||r.BaseDecimal.THOR),i=this.bigIntValue/t;switch(e){case"number":return Number(i);case"string":return i.toString();default:return i}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const i=D(e),a=m(this,A,y).call(this,i);return a==="0"||a==="undefined"?0n:m(this,v,k).call(this,a,t)}formatBigIntToSafeValue(e,t){const i=t||this.decimal||I,a=Math.max(i,B(this.decimalMultiplier)),s=e<0n,c=e.toString().substring(s?1:0),o=a-(c.length-1),l=o>0?"0".repeat(o)+c:c,u=l.length-a;let h=l.slice(-a);return parseInt(h[i])>=5?h=`${h.substring(0,i-1)}${(parseInt(h[i-1])+1).toString()}`:h=h.substring(0,i),`${s?"-":""}${l.slice(0,u)}.${h}`.replace(/\.?0*$/,"")}toSignificant(e=6){const[t,i]=this.getValue("string").split("."),a=t||"",s=i||"",c=parseInt(a)?a.length+s.length:s.length;if(c<=e)return this.getValue("string");if(a.length>=e)return a.slice(0,e).padEnd(a.length,"0");if(parseInt(a))return`${a}.${s.slice(0,e-a.length)}`.padEnd(c-e,"0");const o=parseInt(s),l=`${o}`.slice(0,e);return`0.${l.padStart(s.length-`${o}`.length+l.length,"0")}`}};f=new WeakSet,b=function(e,...t){const i=m(this,O,ne).call(this,this,...t),a=S(i),s=t.reduce((o,l)=>{const u=this.getBigIntValue(l,i);switch(e){case"add":return o+u;case"sub":return o-u;case"mul":return o*u/a;case"div":{if(u===0n)throw new RangeError("Division by zero");return o*a/u}default:return o}},this.bigIntValue*a/this.decimalMultiplier),c=P({bigIntDecimal:i,decimal:Math.max(i,B(this.decimalMultiplier)),value:s});return new this.constructor({decimal:this.decimal,value:c,identifier:this.toString()})},V=new WeakSet,te=function(e){const t=m(this,A,y).call(this,e)||"0";this.bigIntValue=m(this,v,k).call(this,t)},O=new WeakSet,ne=function(...e){const t=e.map(i=>typeof i=="object"?i.decimal||B(i.decimalMultiplier):m(this,M,L).call(this,m(this,A,y).call(this,i))).filter(Boolean);return Math.max(...t,I)},v=new WeakSet,k=function(e,t){const i=t?S(t):this.decimalMultiplier,a=B(i),[s="",c=""]=e.split(".");return BigInt(`${s}${c.padEnd(a,"0")}`)},A=new WeakSet,y=function(e){const i=`${typeof e=="number"?Number(e).toLocaleString("fullwide",{useGrouping:!1,maximumFractionDigits:20}):D(e)}`.replaceAll(",",".").split(".");return i.length>1?`${i.slice(0,-1).join("")}.${i.at(-1)}`:i[0]},M=new WeakSet,L=function(e){var i;const t=((i=e.split(".")[1])==null?void 0:i.length)||0;return Math.max(t,I)};let w=T;function D(n){return typeof n=="object"?"getValue"in n?n.getValue("string"):n.value:n}let x;const H=n=>{if(!x)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return x.get(n.toUpperCase())||{decimal:r.BaseDecimal.THOR,identifier:""}},U=async(n,e=0)=>{He(n);const t=await q(j(n));return new _({decimal:t,value:e,identifier:n})};class _ extends w{constructor(t){super(t.value instanceof w?t.value:{decimal:t.decimal,value:t.value});g(this,"address");g(this,"chain");g(this,"isSynthetic",!1);g(this,"isGasAsset",!1);g(this,"symbol");g(this,"ticker");g(this,"type");const i="identifier"in t?t.identifier:`${t.chain}.${t.symbol}`,a=j(i);this.type=Q(a),this.chain=a.chain,this.ticker=a.ticker,this.symbol=a.symbol,this.address=a.address,this.isSynthetic=a.isSynthetic,this.isGasAsset=a.isGasAsset}get assetValue(){return`${this.getValue("string")} ${this.ticker}`}toString(t=!1){const i=this.isSynthetic?this.ticker:`${this.chain}.${this.ticker}`;return t?i:`${this.chain}.${this.symbol}`}eq({chain:t,symbol:i}){return this.chain===t&&this.symbol===i}static async fromString(t,i=0){return U(t,i)}static fromStringSync(t,i=0){const{decimal:a,identifier:s}=H(t);return s?new _({decimal:a,identifier:s,value:i}):void 0}static async fromIdentifier(t,i=0){return U(t,i)}static fromIdentifierSync(t,i=0){const{decimal:a,identifier:s}=H(t);return new _({decimal:a,identifier:s,value:i})}static fromChainOrSignature(t,i=0){const{decimal:a,identifier:s}=J(t);return new _({value:i,decimal:a,identifier:s})}static async fromTCQuote(t,i=0){const a=await q(j(t)),s=this.shiftDecimals({value:i,from:r.BaseDecimal.THOR,to:a});return new _({value:s,identifier:t,decimal:a})}static fromTCQuoteStatic(t,i=0){const a=H(t),s=this.shiftDecimals({value:i,from:r.BaseDecimal.THOR,to:a.decimal});return new _({...a,value:s})}static async loadStaticAssets(){return new Promise(async(t,i)=>{try{const{ThorchainList:a,NativeList:s,...c}=await import("@swapkit/tokens");x=[s,...Object.values(c)].reduce((l,{tokens:u})=>(u.forEach(({identifier:h,chain:p,...$})=>{const E="decimals"in $?$.decimals:r.BaseDecimal[p];l.set(h,{identifier:h,decimal:E})}),l),new Map),t({ok:!0})}catch(a){console.error(a),i({ok:!1,error:a,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const Pe=n=>{const e=_.fromChainOrSignature(n);switch(n){case r.Chain.Bitcoin:case r.Chain.Litecoin:case r.Chain.BitcoinCash:return e.add(10001);case r.Chain.Dogecoin:return e.add(100000001);case r.Chain.Avalanche:case r.Chain.Ethereum:return e.add(10*10**9);case r.Chain.THORChain:case r.Chain.Maya:return e.add(0);default:return e.add(1)}},j=n=>{const e=n.slice(0,14).includes("/"),t=n.includes(".")?n:`${r.Chain.THORChain}.${n}`,[i,a]=t.split("."),[s,c]=a.split("-");return{address:c==null?void 0:c.toLowerCase(),chain:i,isGasAsset:z({chain:i,symbol:a}),isSynthetic:e,symbol:c?`${s}-${(c==null?void 0:c.toLowerCase())??""}`:a,ticker:e?a:s}},ke={core_wallet_connection_not_found:10001,core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_chain_halted:10099,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_rune_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_no_rune_address:10306,core_transaction_add_liquidity_rune_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_deposit_server_error:10313,wallet_ledger_connection_error:20001,helpers_number_different_decimals:99101};class F extends Error{constructor(e,t){console.error(t),super(e,{cause:{code:ke[e],message:e}}),Object.setPrototypeOf(this,F.prototype)}}class ie extends w{eq(e){return this.eqValue(e)}}exports.AssetValue=_;exports.BigIntArithmetics=w;exports.SwapKitError=F;exports.SwapKitNumber=ie;exports.assetFromString=Ie;exports.derivationPathToString=Ae;exports.filterAssets=ve;exports.formatBigIntToSafeValue=P;exports.gasFeeMultiplier=ye;exports.getAssetType=Q;exports.getAsymmetricAssetShare=Z;exports.getAsymmetricAssetWithdrawAmount=Ve;exports.getAsymmetricRuneShare=X;exports.getAsymmetricRuneWithdrawAmount=Me;exports.getCommonAssetInfo=J;exports.getDecimal=q;exports.getEstimatedPoolShare=Ee;exports.getLiquiditySlippage=Re;exports.getMemoFor=De;exports.getMinAmountByChain=Pe;exports.getRequest=Se;exports.getSymmetricPoolShare=ee;exports.getSymmetricWithdraw=Oe;exports.getTHORNameCost=Ce;exports.isGasAsset=z;exports.postRequest=K;exports.validateTHORName=fe;
1
+ "use strict";var ue=Object.create;var j=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var _e=(n,e,t)=>e in n?j(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var fe=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of he(e))!ge.call(n,r)&&r!==t&&j(n,r,{get:()=>e[r],enumerable:!(i=de(e,r))||i.enumerable});return n};var Y=(n,e,t)=>(t=n!=null?ue(me(n)):{},fe(e||!n||!n.__esModule?j(t,"default",{value:n,enumerable:!0}):t,n));var g=(n,e,t)=>(_e(n,typeof e!="symbol"?e+"":e,t),t),pe=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var $=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)};var h=(n,e,t)=>(pe(n,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("@swapkit/api"),a=require("@swapkit/types"),Ce="0x313ce567",Q=async({chain:n,to:e})=>{try{const{result:t}=await k.RequestClient.post(a.ChainToRPC[n],{headers:{accept:"*/*","content-type":"application/json","cache-control":"no-cache"},body:JSON.stringify({id:44,jsonrpc:"2.0",method:"eth_call",params:[{to:e.toLowerCase(),data:Ce},"latest"]})});return Number.parseInt(BigInt(t).toString())}catch(t){return console.error(t),a.BaseDecimal[n]}},Ae=n=>{if(n===a.Chain.Ethereum)return a.BaseDecimal.ETH;const[,e]=n.split("-");return e!=null&&e.startsWith("0x")?Q({chain:a.Chain.Ethereum,to:e}):a.BaseDecimal.ETH},$e=n=>{const[,e]=n.split("-");return e!=null&&e.startsWith("0x")?Q({chain:a.Chain.Avalanche,to:e.toLowerCase()}):a.BaseDecimal.AVAX},be=n=>(n===a.Chain.BinanceSmartChain,a.BaseDecimal.BSC),X=({chain:n,symbol:e})=>{switch(n){case a.Chain.Ethereum:return Ae(e);case a.Chain.Avalanche:return $e(e);case a.Chain.BinanceSmartChain:return be(e);default:return a.BaseDecimal[n]}},we={[a.FeeOption.Average]:1.2,[a.FeeOption.Fast]:1.5,[a.FeeOption.Fastest]:2},U=({chain:n,symbol:e})=>{switch(n){case a.Chain.Arbitrum:case a.Chain.Optimism:return e==="ETH";case a.Chain.Maya:return e==="CACAO";case a.Chain.Kujira:return e==="KUJI";case a.Chain.Cosmos:return e==="ATOM";case a.Chain.Polygon:return e==="MATIC";case a.Chain.BinanceSmartChain:return e==="BNB";case a.Chain.THORChain:return e==="RUNE";default:return e===n}},Z=n=>{switch(n){case`${a.Chain.Ethereum}.THOR`:return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case`${a.Chain.Ethereum}.vTHOR`:return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case a.Chain.Cosmos:return{identifier:"GAIA.ATOM",decimal:a.BaseDecimal[n]};case a.Chain.THORChain:return{identifier:"THOR.RUNE",decimal:a.BaseDecimal[n]};case a.Chain.BinanceSmartChain:return{identifier:"BSC.BNB",decimal:a.BaseDecimal[n]};case a.Chain.Maya:return{identifier:"MAYA.CACAO",decimal:a.BaseDecimal.MAYA};case`${a.Chain.Maya}.MAYA`:return{identifier:"MAYA.MAYA",decimal:4};case`${a.Chain.Kujira}.USK`:return{identifier:`${a.Chain.Kujira}.USK`,decimal:6};default:return{identifier:`${n}.${n}`,decimal:a.BaseDecimal[n]}}},ee=({chain:n,symbol:e})=>{if(e.includes("/"))return"Synth";switch(n){case a.Chain.Cosmos:return e==="ATOM"?"Native":a.Chain.Cosmos;case a.Chain.Kujira:return e===a.Chain.Kujira?"Native":a.Chain.Kujira;case a.Chain.Binance:return e===a.Chain.Binance?"Native":"BEP2";case a.Chain.BinanceSmartChain:return e===a.Chain.Binance?"Native":"BEP20";case a.Chain.Ethereum:return e===a.Chain.Ethereum?"Native":"ERC20";case a.Chain.Avalanche:return e===a.Chain.Avalanche?"Native":a.Chain.Avalanche;case a.Chain.Polygon:return e===a.Chain.Polygon?"Native":"POLYGON";case a.Chain.Arbitrum:return[a.Chain.Ethereum,a.Chain.Arbitrum].includes(e)?"Native":"ARBITRUM";case a.Chain.Optimism:return[a.Chain.Ethereum,a.Chain.Optimism].includes(e)?"Native":"OPTIMISM";default:return"Native"}},ve=n=>{var l;const[e,...t]=n.split("."),i=n.includes("/"),r=t.join("."),s=(l=r==null?void 0:r.split("-"))==null?void 0:l[0];return{chain:e,symbol:r,ticker:s,synth:i}},ye=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),Be=n=>{const[e,t]=n.split(".");if(!a.EVMChains.includes(e))return!0;const[,i]=t.split("-");return U({chain:e,symbol:t})||!!i},Se=n=>n.filter(({chain:e,value:t,symbol:i})=>{const r=`${e}.${i}`;return!ye.test(r)&&Be(r)&&t!=="0"});async function Ie(n){const e=await import("@swapkit/tokens");for(const t of Object.values(e))for(const{identifier:i,chain:r,...s}of t.tokens)if("identifier"in n&&i===n.identifier||"address"in s&&"chain"in n&&r===n.chain&&s.address.toLowerCase()===n.contract.toLowerCase())return i}function te({liquidityUnits:n,poolUnits:e,runeDepth:t}){const i=m(n),r=m(e),s=m(t),l=i.mul(s),o=r.mul(r).mul(2),c=r.mul(i).mul(2),u=i.mul(i),d=r.mul(r).mul(r);return l.mul(o.sub(c).add(u)).div(d)}function ne({liquidityUnits:n,poolUnits:e,assetDepth:t}){const i=m(n),r=m(e),s=m(t),l=i.mul(s),o=r.mul(r).mul(2),c=r.mul(i).mul(2),u=i.mul(i),d=l.mul(o.sub(c).add(u)),B=r.mul(r).mul(r);return d.div(B)}function Me({percent:n,runeDepth:e,liquidityUnits:t,poolUnits:i}){return te({runeDepth:e,liquidityUnits:t,poolUnits:i}).mul(n)}function Te({percent:n,assetDepth:e,liquidityUnits:t,poolUnits:i}){return ne({assetDepth:e,liquidityUnits:t,poolUnits:i}).mul(n)}function m(n){return _.fromBigInt(BigInt(n),a.BaseDecimal.THOR)}function ie({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i}){return{assetAmount:m(i).mul(n).div(e),runeAmount:m(t).mul(n).div(e)}}function Oe({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i,percent:r}){return Object.fromEntries(Object.entries(ie({liquidityUnits:n,poolUnits:e,runeDepth:t,assetDepth:i})).map(([s,l])=>[s,l.mul(r)]))}function Ne({runeDepth:n,poolUnits:e,assetDepth:t,liquidityUnits:i,runeAmount:r,assetAmount:s}){const l=new _({value:n,decimal:8}),o=new _({value:t,decimal:8}),c=new _({value:e,decimal:8}),u=new _({value:r,decimal:8}),d=new _({value:s,decimal:8}),B=u.mul(o),G=d.mul(l),ae=u.mul(d),se=l.mul(o),ce=c.mul(B.add(G.add(ae.mul(2)))),oe=B.add(G.add(se.mul(2))),K=ce.div(oe),H=m(i).add(K);if(K.getBaseValue("number")===0)return H.div(c).getBaseValue("number");const le=c.add(H);return H.div(le).getBaseValue("number")}function Ve({runeAmount:n,assetAmount:e,runeDepth:t,assetDepth:i}){if(n==="0"||e==="0"||t==="0"||i==="0")return 0;const r=m(t),s=m(i),l=m(e),o=m(n),c=l.mul(r).sub(s.mul(o)),u=s.mul(o).add(r.mul(s));return Math.abs(c.div(u).getBaseValue("number"))}const Ee=(n,e)=>{switch(n){case a.MemoType.LEAVE:case a.MemoType.BOND:{const{address:t}=e;return`${n}:${t}`}case a.MemoType.UNBOND:{const{address:t,unbondAmount:i}=e;return`${n}:${t}:${i}`}case a.MemoType.THORNAME_REGISTER:{const{name:t,chain:i,address:r,owner:s}=e;return`${n}:${t}:${i}:${r}${s?`:${s}`:""}`}case a.MemoType.DEPOSIT:{const{chain:t,symbol:i,address:r,singleSide:s}=e;return s?`${n}:${t}/${i}`:`${n}:${((o,c)=>{switch(o){case a.Chain.Litecoin:return"l";case a.Chain.Dogecoin:return"d";case a.Chain.BitcoinCash:return"c";default:return`${o}.${c}`}})(t,i)}:${r||""}`}case a.MemoType.WITHDRAW:{const{chain:t,ticker:i,symbol:r,basisPoints:s,targetAssetString:l,singleSide:o}=e,c=t==="ETH"&&i!=="ETH"?`${i}-${r.slice(-3)}`:r,u=!o&&l?`:${l}`:"";return`${n}:${t}${o?"/":"."}${c}:${s}${u}`}case a.MemoType.OPEN_LOAN:case a.MemoType.CLOSE_LOAN:{const{asset:t,address:i}=e;return`${n}:${t}:${i}`}default:return""}};function Re(n){if(n<0)throw new Error("Invalid number of year");return 10+n}function De(n){if(n<0)throw new Error("Invalid number of year");return Math.round((10+n*1.0512)*1e10)/1e10}function He(n){if(n.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!n.match(e)}function je(n){if(n.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!n.match(e)}function xe([n,e,t,i,r]){return`${n}'/${e}'/${t}'/${i}${typeof r!="number"?"":`/${r}`}`}const z=[...Object.values(a.Chain),"TERRA"];function Pe(n=""){const e=n.toUpperCase(),[t]=e.split(".");if(z.includes(t))return!0;const[i]=e.split("/");if(z.includes(i))return!0;throw new Error(`Invalid identifier: ${n}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)}const T=8,C=n=>10n**BigInt(n),S=n=>Math.log10(Number.parseFloat(n.toString()));function O({value:n,bigIntDecimal:e=T,decimal:t=T}){if(t===0)return n.toString();const i=n<0n;let r=n.toString().substring(i?1:0);const s=t-(r.length-1);s>0&&(r="0".repeat(s)+r);const l=r.length-t;let o=r.slice(-t);return Number.parseInt(o[e])>=5?o=`${o.substring(0,e-1)}${(Number.parseInt(o[e-1])+1).toString()}`:o=o.substring(0,e),`${i?"-":""}${r.slice(0,l)}.${o}`.replace(/\.?0*$/,"")}var A,I,p,b,R,re,N,F,V,L;const D=class D{constructor(e){$(this,A);$(this,p);$(this,R);$(this,N);$(this,V);g(this,"decimalMultiplier",10n**8n);g(this,"bigIntValue",0n);g(this,"decimal");const t=q(e),i=typeof e=="object";this.decimal=i?e.decimal:void 0,this.decimalMultiplier=i&&"decimalMultiplier"in e?e.decimalMultiplier:C(Math.max(J(E(t)),this.decimal||0)),h(this,R,re).call(this,t)}static fromBigInt(e,t){return new D({decimal:t,value:O({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:i}){return D.fromBigInt(e.getBaseValue("bigint")*C(i)/C(t),i)}set(e){return new this.constructor({decimal:this.decimal,value:e,identifier:this.toString()})}add(...e){return h(this,A,I).call(this,"add",...e)}sub(...e){return h(this,A,I).call(this,"sub",...e)}mul(...e){return h(this,A,I).call(this,"mul",...e)}div(...e){return h(this,A,I).call(this,"div",...e)}gt(e){return h(this,p,b).call(this,"gt",e)}gte(e){return h(this,p,b).call(this,"gte",e)}lt(e){return h(this,p,b).call(this,"lt",e)}lte(e){return h(this,p,b).call(this,"lte",e)}eqValue(e){return h(this,p,b).call(this,"eqValue",e)}getValue(e){const t=this.formatBigIntToSafeValue(this.bigIntValue,this.decimal||S(this.decimalMultiplier));switch(e){case"number":return Number(t);case"string":return t;case"bigint":return this.bigIntValue*10n**BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(e){const t=this.decimalMultiplier/C(this.decimal||a.BaseDecimal.THOR),i=this.bigIntValue/t;switch(e){case"number":return Number(i);case"string":return i.toString();case"bigint":return i}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const i=q(e),r=E(i);return r==="0"||r==="undefined"?0n:h(this,V,L).call(this,r,t)}toSignificant(e=6){const[t,i]=this.getValue("string").split("."),r=t||"",s=i||"";if((Number.parseInt(r)?r.length+s.length:s.length)<=e)return this.getValue("string");if(r.length>=e)return r.slice(0,e).padEnd(r.length,"0");if(Number.parseInt(r))return`${r}.${s.slice(0,e-r.length)}`.padEnd(e-r.length,"0");const o=Number.parseInt(s),c=`${o}`.slice(0,e);return`0.${c.padStart(s.length-`${o}`.length+c.length,"0")}`}toFixed(e=6){const[t,i]=this.getValue("string").split("."),r=t||"",s=i||"";if(Number.parseInt(r))return`${r}.${s.slice(0,e)}`.padEnd(e,"0");const l=Number.parseInt(s),o=`${l}`.slice(0,e);return`0.${o.padStart(s.length-`${l}`.length+o.length,"0")}`}toAbbreviation(e=2){const t=this.getValue("number"),i=["","K","M","B","T","Q","Qi","S"],r=Math.floor(Math.log10(Math.abs(t))/3),s=i[r];if(!s)return this.getValue("string");const l=10**(r*3);return`${(t/l).toFixed(e)}${s}`}toCurrency(e="$",{currencyPosition:t="start",decimal:i=2,decimalSeparator:r=".",thousandSeparator:s=","}={}){const l=this.getValue("number"),[o,c=""]=l.toFixed(6).split("."),u=o.replace(/\B(?=(\d{3})+(?!\d))/g,s),d=o||c?o==="0"?`${Number.parseFloat(`0.${c}`)}`.replace(".",r):`${u}${Number.parseInt(c)?`${r}${c.slice(0,i)}`:""}`:"0.00";return`${t==="start"?e:""}${d}${t==="end"?e:""}`}formatBigIntToSafeValue(e,t){const i=t||this.decimal||T,r=Math.max(i,S(this.decimalMultiplier)),s=e<0n,l=e.toString().substring(s?1:0),o=r-(l.length-1),c=o>0?"0".repeat(o)+l:l,u=c.length-r;let d=c.slice(-r);return Number.parseInt(d[i])>=5?d=`${d.substring(0,i-1)}${(Number.parseInt(d[i-1])+1).toString()}`:d=d.substring(0,i),`${s?"-":""}${c.slice(0,u)}.${d}`.replace(/\.?0*$/,"")}};A=new WeakSet,I=function(e,...t){const i=h(this,N,F).call(this,this,...t),r=Math.max(i,S(this.decimalMultiplier)),s=C(r),l=t.reduce((c,u)=>{const d=this.getBigIntValue(u,r);switch(e){case"add":return c+d;case"sub":return c-d;case"mul":return c*d/s;case"div":{if(d===0n)throw new RangeError("Division by zero");return c*s/d}default:return c}},this.bigIntValue*s/this.decimalMultiplier),o=O({bigIntDecimal:r,decimal:r,value:l});return new this.constructor({decimalMultiplier:C(r),decimal:this.decimal,value:o,identifier:this.toString()})},p=new WeakSet,b=function(e,...t){const i=h(this,N,F).call(this,this,...t),r=this.getBigIntValue(t[0],i),s=this.getBigIntValue(this,i);switch(e){case"gt":return s>r;case"gte":return s>=r;case"lt":return s<r;case"lte":return s<=r;case"eqValue":return s===r}},R=new WeakSet,re=function(e){const t=E(e)||"0";this.bigIntValue=h(this,V,L).call(this,t)},N=new WeakSet,F=function(...e){const t=e.map(i=>typeof i=="object"?i.decimal||S(i.decimalMultiplier):J(E(i))).filter(Boolean);return Math.max(...t,T)},V=new WeakSet,L=function(e,t){const i=t?C(t):this.decimalMultiplier,r=S(i),[s="",l=""]=e.split(".");return BigInt(`${s}${l.padEnd(r,"0")}`)};let y=D;const ke=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function E(n){const t=`${typeof n=="number"?ke.format(n):q(n)}`.replaceAll(",",".").split(".");return t.length>1?`${t.slice(0,-1).join("")}.${t.at(-1)}`:t[0]}function J(n){var t;const e=((t=n.split(".")[1])==null?void 0:t.length)||0;return Math.max(e,T)}function q(n){return typeof n=="object"?"getValue"in n?n.getValue("string"):n.value:n}class _ extends y{eq(e){return this.eqValue(e)}static fromBigInt(e,t){return new _({decimal:t,value:O({value:e,bigIntDecimal:t,decimal:t})})}}const w=new Map;class f extends y{constructor({value:t,decimal:i,tax:r,chain:s,symbol:l,identifier:o}){super(typeof t=="object"?t:{decimal:i,value:t});g(this,"address");g(this,"chain");g(this,"isGasAsset",!1);g(this,"isSynthetic",!1);g(this,"symbol");g(this,"tax");g(this,"ticker");g(this,"type");const c=M(o||`${s}.${l}`);this.type=ee(c),this.tax=r,this.chain=c.chain,this.ticker=c.ticker,this.symbol=c.symbol,this.address=c.address,this.isSynthetic=c.isSynthetic,this.isGasAsset=c.isGasAsset}toString(){return this.isSynthetic?this.symbol:`${this.chain}.${this.symbol}`}toUrl(){return this.isSynthetic?`${this.chain}.${this.symbol.replace("/",".")}`:this.toString()}eq({chain:t,symbol:i}){return this.chain===t&&this.symbol===i}chainId(){return a.ChainToChainId[this.chain]}static fromUrl(t,i=0){const[r,s,l]=t.split(".");if(!(r&&s))throw new Error("Invalid asset url");const o=r===a.Chain.THORChain&&l?`${r}.${s}/${l}`:t;return x(o,i)}static fromString(t,i=0){return x(t,i)}static fromIdentifier(t,i=0){return x(t,i)}static fromStringSync(t,i=0){const{chain:r,isSynthetic:s}=M(t),l=w.get(t.toUpperCase());if(s)return P(t,i);const{tax:o,decimal:c,identifier:u}=l||{decimal:a.BaseDecimal[r],identifier:t};return new f({tax:o,value:v(i,c),identifier:s?t:u,decimal:s?8:c})}static async fromStringWithBase(t,i=0,r=a.BaseDecimal.THOR){const s=y.shiftDecimals({value:_.fromBigInt(BigInt(i)),from:0,to:r}).getBaseValue("string");return(await f.fromString(t,i)).set(s)}static fromStringWithBaseSync(t,i=0,r=a.BaseDecimal.THOR){const{chain:s,isSynthetic:l}=M(t),o=w.get(t.toUpperCase());if(l)return P(t,i);const{tax:c,decimal:u,identifier:d}=o||{decimal:a.BaseDecimal[s],identifier:t};return new f({tax:c,value:v(BigInt(i),r),identifier:d,decimal:u})}static fromIdentifierSync(t,i=0){const{chain:r,isSynthetic:s}=M(t),l=w.get(t);if(s)return P(t,i);const{tax:o,decimal:c,identifier:u}=l||{decimal:a.BaseDecimal[r],identifier:t};return new f({tax:o,decimal:c,identifier:u,value:v(i,c)})}static fromChainOrSignature(t,i=0){const{decimal:r,identifier:s}=Z(t);return new f({value:v(i,r),decimal:r,identifier:s})}static loadStaticAssets(){return new Promise((t,i)=>{try{import("@swapkit/tokens").then(r=>{for(const s of Object.values(r))for(const{identifier:l,chain:o,...c}of s.tokens)w.set(l.toUpperCase(),{identifier:l,decimal:"decimals"in c?c.decimals:a.BaseDecimal[o]});t({ok:!0})})}catch(r){console.error(r),i({ok:!1,error:r,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}function Fe(n){const e=f.fromChainOrSignature(n);switch(n){case a.Chain.Bitcoin:case a.Chain.Litecoin:case a.Chain.BitcoinCash:return e.set(10001e-8);case a.Chain.Dogecoin:return e.set(1.00000001);case a.Chain.Avalanche:case a.Chain.Ethereum:return e.set(1e-8);case a.Chain.THORChain:case a.Chain.Maya:return e.set(0);case a.Chain.Cosmos:return e.set(1e-6);default:return e.set(1e-8)}}async function x(n,e=0){Pe(n);const t=w.get(n.toUpperCase()),i=(t==null?void 0:t.decimal)||await X(M(n));return t||w.set(n.toUpperCase(),{identifier:n,decimal:i}),new f({decimal:i,value:v(e,i),identifier:n})}function P(n,e=0){const[t,i]=n.split(".")[0].toUpperCase()===a.Chain.THORChain?n.split(".").slice(1).join().split("/"):n.split("/");if(!(t&&i))throw new Error("Invalid asset identifier");return new f({decimal:8,value:v(e,8),identifier:`${a.Chain.THORChain}.${t}/${i}`})}function v(n,e){return typeof n=="bigint"?O({value:n,bigIntDecimal:e,decimal:e}):n}function M(n){const e=n.slice(0,14).includes("/"),[t,i]=n.split(".")[0].toUpperCase()===a.Chain.THORChain?n.split(".").slice(1).join().split("/"):n.split("/");if(e&&!(t&&i))throw new Error("Invalid asset identifier");const r=n.includes(".")&&!e?n:`${a.Chain.THORChain}.${i}`,[s,...l]=r.split("."),[o,c]=(e?i:l.join(".")).split("-"),u=e?i:l.join(".");return{address:c==null?void 0:c.toLowerCase(),chain:s,isGasAsset:U({chain:s,symbol:u}),isSynthetic:e,symbol:(e?`${t}/`:"")+(c?`${o}-${(c==null?void 0:c.toLowerCase())??""}`:u),ticker:o}}const Le={core_wallet_connection_not_found:10001,core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_plugin_not_found:10006,core_chain_halted:10099,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_wallet_keepkey_not_installed:10109,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_rune_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_no_rune_address:10306,core_transaction_add_liquidity_rune_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_invalid_sender_address:10313,core_transaction_deposit_server_error:10314,core_transaction_user_rejected:10315,wallet_ledger_connection_error:20001,wallet_ledger_connection_claimed:20002,wallet_ledger_get_address_error:20003,wallet_ledger_device_not_found:20004,wallet_ledger_device_locked:20005,chainflip_channel_error:30001,chainflip_broker_recipient_error:30002,helpers_number_different_decimals:99101};class W extends Error{constructor(e,t){t&&console.error(t,{stack:t==null?void 0:t.stack,message:t==null?void 0:t.message}),super(e,{cause:{code:Le[e],message:e}}),Object.setPrototypeOf(this,W.prototype)}}exports.AssetValue=f;exports.BigIntArithmetics=y;exports.SwapKitError=W;exports.SwapKitNumber=_;exports.assetFromString=ve;exports.derivationPathToString=xe;exports.filterAssets=Se;exports.findAssetBy=Ie;exports.formatBigIntToSafeValue=O;exports.gasFeeMultiplier=we;exports.getAssetType=ee;exports.getAsymmetricAssetShare=ne;exports.getAsymmetricAssetWithdrawAmount=Te;exports.getAsymmetricRuneShare=te;exports.getAsymmetricRuneWithdrawAmount=Me;exports.getCommonAssetInfo=Z;exports.getDecimal=X;exports.getEstimatedPoolShare=Ne;exports.getLiquiditySlippage=Ve;exports.getMAYANameCost=De;exports.getMemoFor=Ee;exports.getMinAmountByChain=Fe;exports.getSymmetricPoolShare=ie;exports.getSymmetricWithdraw=Oe;exports.getTHORNameCost=Re;exports.isGasAsset=U;exports.validateMAYAName=je;exports.validateTHORName=He;Object.keys(k).forEach(n=>{n!=="default"&&!Object.prototype.hasOwnProperty.call(exports,n)&&Object.defineProperty(exports,n,{enumerable:!0,get:()=>k[n]})});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/helpers/asset.ts","../src/helpers/liquidity.ts","../src/helpers/memo.ts","../src/helpers/others.ts","../src/helpers/validators.ts","../src/modules/bigIntArithmetics.ts","../src/modules/swapKitNumber.ts","../src/modules/assetValue.ts","../src/modules/swapKitError.ts"],"sourcesContent":["import { RequestClient } from \"@swapkit/api\";\nimport type { EVMChain } from \"@swapkit/types\";\nimport { BaseDecimal, Chain, ChainToRPC, EVMChains, FeeOption } from \"@swapkit/types\";\nimport type { TokenNames } from \"../types.ts\";\n\nconst getDecimalMethodHex = \"0x313ce567\";\n\nexport type CommonAssetString =\n | `${Chain.Maya}.MAYA`\n | `${Chain.Ethereum}.THOR`\n | `${Chain.Ethereum}.vTHOR`\n | `${Chain.Kujira}.USK`\n | Chain;\n\nconst getContractDecimals = async ({ chain, to }: { chain: EVMChain; to: string }) => {\n try {\n const { result } = await RequestClient.post<{ result: string }>(ChainToRPC[chain], {\n headers: {\n accept: \"*/*\",\n \"content-type\": \"application/json\",\n \"cache-control\": \"no-cache\",\n },\n body: JSON.stringify({\n id: 44,\n jsonrpc: \"2.0\",\n method: \"eth_call\",\n params: [{ to: to.toLowerCase(), data: getDecimalMethodHex }, \"latest\"],\n }),\n });\n\n return Number.parseInt(BigInt(result).toString());\n } catch (error) {\n console.error(error);\n return BaseDecimal[chain];\n }\n};\n\nconst getETHAssetDecimal = (symbol: string) => {\n if (symbol === Chain.Ethereum) return BaseDecimal.ETH;\n const [, address] = symbol.split(\"-\");\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Ethereum, to: address })\n : BaseDecimal.ETH;\n};\n\nconst getAVAXAssetDecimal = (symbol: string) => {\n const [, address] = symbol.split(\"-\");\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Avalanche, to: address.toLowerCase() })\n : BaseDecimal.AVAX;\n};\n\nconst getBSCAssetDecimal = (symbol: string) => {\n if (symbol === Chain.BinanceSmartChain) return BaseDecimal.BSC;\n\n return BaseDecimal.BSC;\n};\n\nexport const getDecimal = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Ethereum:\n return getETHAssetDecimal(symbol);\n case Chain.Avalanche:\n return getAVAXAssetDecimal(symbol);\n case Chain.BinanceSmartChain:\n return getBSCAssetDecimal(symbol);\n default:\n return BaseDecimal[chain];\n }\n};\n\nexport const gasFeeMultiplier: Record<FeeOption, number> = {\n [FeeOption.Average]: 1.2,\n [FeeOption.Fast]: 1.5,\n [FeeOption.Fastest]: 2,\n};\n\nexport const isGasAsset = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Optimism:\n return symbol === \"ETH\";\n case Chain.Maya:\n return symbol === \"CACAO\";\n case Chain.Kujira:\n return symbol === \"KUJI\";\n case Chain.Cosmos:\n return symbol === \"ATOM\";\n case Chain.Polygon:\n return symbol === \"MATIC\";\n case Chain.BinanceSmartChain:\n return symbol === \"BNB\";\n case Chain.THORChain:\n return symbol === \"RUNE\";\n\n default:\n return symbol === chain;\n }\n};\n\nexport const getCommonAssetInfo = (\n assetString: CommonAssetString,\n): { identifier: string; decimal: number } => {\n switch (assetString) {\n case `${Chain.Ethereum}.THOR`:\n return { identifier: \"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044\", decimal: 18 };\n case `${Chain.Ethereum}.vTHOR`:\n return { identifier: \"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d\", decimal: 18 };\n\n case Chain.Cosmos:\n return { identifier: \"GAIA.ATOM\", decimal: BaseDecimal[assetString] };\n case Chain.THORChain:\n return { identifier: \"THOR.RUNE\", decimal: BaseDecimal[assetString] };\n case Chain.BinanceSmartChain:\n return { identifier: \"BSC.BNB\", decimal: BaseDecimal[assetString] };\n case Chain.Maya:\n return { identifier: \"MAYA.CACAO\", decimal: BaseDecimal.MAYA };\n case `${Chain.Maya}.MAYA`:\n return { identifier: \"MAYA.MAYA\", decimal: 4 };\n\n case `${Chain.Kujira}.USK`:\n return { identifier: `${Chain.Kujira}.USK`, decimal: 6 };\n\n default:\n return { identifier: `${assetString}.${assetString}`, decimal: BaseDecimal[assetString] };\n }\n};\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor\nexport const getAssetType = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n if (symbol.includes(\"/\")) return \"Synth\";\n\n switch (chain) {\n case Chain.Cosmos:\n return symbol === \"ATOM\" ? \"Native\" : Chain.Cosmos;\n case Chain.Kujira:\n return symbol === Chain.Kujira ? \"Native\" : Chain.Kujira;\n case Chain.Binance:\n return symbol === Chain.Binance ? \"Native\" : \"BEP2\";\n case Chain.BinanceSmartChain:\n return symbol === Chain.Binance ? \"Native\" : \"BEP20\";\n case Chain.Ethereum:\n return symbol === Chain.Ethereum ? \"Native\" : \"ERC20\";\n case Chain.Avalanche:\n return symbol === Chain.Avalanche ? \"Native\" : Chain.Avalanche;\n case Chain.Polygon:\n return symbol === Chain.Polygon ? \"Native\" : \"POLYGON\";\n\n case Chain.Arbitrum:\n return [Chain.Ethereum, Chain.Arbitrum].includes(symbol as Chain) ? \"Native\" : \"ARBITRUM\";\n case Chain.Optimism:\n return [Chain.Ethereum, Chain.Optimism].includes(symbol as Chain) ? \"Native\" : \"OPTIMISM\";\n\n default:\n return \"Native\";\n }\n};\n\nexport const assetFromString = (assetString: string) => {\n const [chain, ...symbolArray] = assetString.split(\".\") as [Chain, ...(string | undefined)[]];\n const synth = assetString.includes(\"/\");\n const symbol = symbolArray.join(\".\");\n const ticker = symbol?.split(\"-\")?.[0];\n\n return { chain, symbol, ticker, synth };\n};\n\nconst potentialScamRegex = new RegExp(\n /(.)\\1{6}|\\.ORG|\\.NET|\\.FINANCE|\\.COM|WWW|HTTP|\\\\\\\\|\\/\\/|[\\s$%:[\\]]/,\n \"gmi\",\n);\n\nconst evmAssetHasAddress = (assetString: string) => {\n const [chain, symbol] = assetString.split(\".\") as [EVMChain, string];\n if (!EVMChains.includes(chain as EVMChain)) return true;\n const [, address] = symbol.split(\"-\") as [string, string?];\n\n return isGasAsset({ chain: chain as Chain, symbol }) || !!address;\n};\n\nexport const filterAssets = (\n tokens: {\n value: string;\n decimal: number;\n chain: Chain;\n symbol: string;\n }[],\n) =>\n tokens.filter(({ chain, value, symbol }) => {\n const assetString = `${chain}.${symbol}`;\n\n return (\n !potentialScamRegex.test(assetString) && evmAssetHasAddress(assetString) && value !== \"0\"\n );\n });\n\nexport async function findAssetBy(\n params: { chain: EVMChain; contract: string } | { identifier: `${Chain}.${string}` },\n) {\n const tokenPackages = await import(\"@swapkit/tokens\");\n\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain: tokenChain, ...rest } of tokenList.tokens) {\n if (\"identifier\" in params && identifier === params.identifier) {\n return identifier as TokenNames;\n }\n\n if (\n \"address\" in rest &&\n \"chain\" in params &&\n tokenChain === params.chain &&\n rest.address.toLowerCase() === params.contract.toLowerCase()\n )\n return identifier as TokenNames;\n }\n }\n\n return;\n}\n","import { BaseDecimal } from \"@swapkit/types\";\n\nimport { SwapKitNumber } from \"../index.ts\";\n\ntype ShareParams<T extends {}> = T & {\n liquidityUnits: string;\n poolUnits: string;\n};\n\ntype PoolParams = {\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n};\n\n/**\n * Ref: https://gitlab.com/thorchain/thornode/-/issues/657\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * s = stakeUnits for member (after factoring in withdrawBasisPoints)\n * T = totalPoolUnits for pool\n * A = assetDepth to be withdrawn\n *\n * Formula:\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * (part1 * (part2 - part3 + part4)) / part5\n */\nexport function getAsymmetricRuneShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n}: ShareParams<{ runeDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(runeDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const part5 = T.mul(T).mul(T);\n\n const numerator = part1.mul(part2.sub(part3).add(part4));\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricAssetShare({\n liquidityUnits,\n poolUnits,\n assetDepth,\n}: ShareParams<{ assetDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(assetDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const numerator = part1.mul(part2.sub(part3).add(part4));\n const part5 = T.mul(T).mul(T);\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricRuneWithdrawAmount({\n percent,\n runeDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; runeDepth: string }>) {\n return getAsymmetricRuneShare({ runeDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nexport function getAsymmetricAssetWithdrawAmount({\n percent,\n assetDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; assetDepth: string }>) {\n return getAsymmetricAssetShare({ assetDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nfunction toTCSwapKitNumber(value: string) {\n return SwapKitNumber.fromBigInt(BigInt(value), BaseDecimal.THOR);\n}\n\nexport function getSymmetricPoolShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n}>) {\n return {\n assetAmount: toTCSwapKitNumber(assetDepth).mul(liquidityUnits).div(poolUnits),\n runeAmount: toTCSwapKitNumber(runeDepth).mul(liquidityUnits).div(poolUnits),\n };\n}\n\nexport function getSymmetricWithdraw({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n percent,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n percent: number;\n}>) {\n return Object.fromEntries(\n Object.entries(getSymmetricPoolShare({ liquidityUnits, poolUnits, runeDepth, assetDepth })).map(\n ([name, value]) => [name, value.mul(percent)],\n ),\n );\n}\n\nexport function getEstimatedPoolShare({\n runeDepth,\n poolUnits,\n assetDepth,\n liquidityUnits,\n runeAmount,\n assetAmount,\n}: ShareParams<{\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n}>) {\n const R = new SwapKitNumber({ value: runeDepth, decimal: 8 });\n const A = new SwapKitNumber({ value: assetDepth, decimal: 8 });\n const P = new SwapKitNumber({ value: poolUnits, decimal: 8 });\n const runeAddAmount = new SwapKitNumber({ value: runeAmount, decimal: 8 });\n const assetAddAmount = new SwapKitNumber({ value: assetAmount, decimal: 8 });\n\n // liquidityUnits = P * (r*A + a*R + 2*r*a) / (r*A + a*R + 2*R*A)\n const rA = runeAddAmount.mul(A);\n const aR = assetAddAmount.mul(R);\n const ra = runeAddAmount.mul(assetAddAmount);\n const RA = R.mul(A);\n const numerator = P.mul(rA.add(aR.add(ra.mul(2))));\n const denominator = rA.add(aR.add(RA.mul(2)));\n const liquidityUnitsAfterAdd = numerator.div(denominator);\n const estimatedLiquidityUnits = toTCSwapKitNumber(liquidityUnits).add(liquidityUnitsAfterAdd);\n\n if (liquidityUnitsAfterAdd.getBaseValue(\"number\") === 0) {\n return estimatedLiquidityUnits.div(P).getBaseValue(\"number\");\n }\n\n // get pool units after add\n const newPoolUnits = P.add(estimatedLiquidityUnits);\n\n return estimatedLiquidityUnits.div(newPoolUnits).getBaseValue(\"number\");\n}\n\nexport function getLiquiditySlippage({\n runeAmount,\n assetAmount,\n runeDepth,\n assetDepth,\n}: PoolParams) {\n if (runeAmount === \"0\" || assetAmount === \"0\" || runeDepth === \"0\" || assetDepth === \"0\")\n return 0;\n // formula: (t * R - T * r)/ (T*r + R*T)\n const R = toTCSwapKitNumber(runeDepth);\n const T = toTCSwapKitNumber(assetDepth);\n const assetAddAmount = toTCSwapKitNumber(assetAmount);\n const runeAddAmount = toTCSwapKitNumber(runeAmount);\n\n const numerator = assetAddAmount.mul(R).sub(T.mul(runeAddAmount));\n const denominator = T.mul(runeAddAmount).add(R.mul(T));\n\n // set absolute value of percent, no negative allowed\n return Math.abs(numerator.div(denominator).getBaseValue(\"number\"));\n}\n","import { Chain, MemoType } from \"@swapkit/types\";\n\nexport type ThornameRegisterParam = {\n name: string;\n chain: string;\n address: string;\n owner?: string;\n preferredAsset?: string;\n expiryBlock?: string;\n};\n\ntype WithChain<T extends {}> = T & { chain: Chain };\n\nexport type MemoOptions<T extends MemoType> = {\n [MemoType.BOND]: { address: string };\n [MemoType.LEAVE]: { address: string };\n [MemoType.CLOSE_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.OPEN_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.UNBOND]: { address: string; unbondAmount: number };\n [MemoType.DEPOSIT]: WithChain<{ symbol: string; address?: string; singleSide?: boolean }>;\n [MemoType.WITHDRAW]: WithChain<{\n ticker: string;\n symbol: string;\n basisPoints: number;\n targetAssetString?: string;\n singleSide?: boolean;\n }>;\n [MemoType.THORNAME_REGISTER]: Omit<ThornameRegisterParam, \"preferredAsset\" | \"expiryBlock\">;\n}[T];\n\nexport const getMemoFor = <T extends MemoType>(memoType: T, options: MemoOptions<T>) => {\n switch (memoType) {\n case MemoType.LEAVE:\n case MemoType.BOND: {\n const { address } = options as MemoOptions<MemoType.BOND>;\n return `${memoType}:${address}`;\n }\n\n case MemoType.UNBOND: {\n const { address, unbondAmount } = options as MemoOptions<MemoType.UNBOND>;\n return `${memoType}:${address}:${unbondAmount}`;\n }\n\n case MemoType.THORNAME_REGISTER: {\n const { name, chain, address, owner } = options as MemoOptions<MemoType.THORNAME_REGISTER>;\n return `${memoType}:${name}:${chain}:${address}${owner ? `:${owner}` : \"\"}`;\n }\n\n case MemoType.DEPOSIT: {\n const { chain, symbol, address, singleSide } = options as MemoOptions<MemoType.DEPOSIT>;\n\n const getPoolIdentifier = (chain: Chain, symbol: string): string => {\n switch (chain) {\n case Chain.Litecoin:\n return \"l\";\n case Chain.Dogecoin:\n return \"d\";\n case Chain.BitcoinCash:\n return \"c\";\n default:\n return `${chain}.${symbol}`;\n }\n };\n\n return singleSide\n ? `${memoType}:${chain}/${symbol}`\n : `${memoType}:${getPoolIdentifier(chain, symbol)}:${address || \"\"}`;\n }\n\n case MemoType.WITHDRAW: {\n const { chain, ticker, symbol, basisPoints, targetAssetString, singleSide } =\n options as MemoOptions<MemoType.WITHDRAW>;\n\n const shortenedSymbol =\n chain === \"ETH\" && ticker !== \"ETH\" ? `${ticker}-${symbol.slice(-3)}` : symbol;\n const target = !singleSide && targetAssetString ? `:${targetAssetString}` : \"\";\n const assetDivider = singleSide ? \"/\" : \".\";\n\n return `${memoType}:${chain}${assetDivider}${shortenedSymbol}:${basisPoints}${target}`;\n }\n\n case MemoType.OPEN_LOAN:\n case MemoType.CLOSE_LOAN: {\n const { asset, address } = options as MemoOptions<MemoType.OPEN_LOAN>;\n\n return `${memoType}:${asset}:${address}`; //:${minAmount ? `${minAmount}` : ''}:t:0`;\n }\n\n default:\n return \"\";\n }\n};\n","// 10 rune for register, 1 rune per year\n// MINIMUM_REGISTRATION_FEE = 11\nexport function getTHORNameCost(year: number) {\n if (year < 0) throw new Error(\"Invalid number of year\");\n return 10 + year;\n}\n\n// 10 CACAO for register\n// 1.0512 CACAO per year\nexport function getMAYANameCost(year: number) {\n if (year < 0) throw new Error(\"Invalid number of year\");\n // round to max 10 decimals\n return Math.round((10 + year * 1.0512) * 1e10) / 1e10;\n}\n\nexport function validateTHORName(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n\nexport function validateMAYAName(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n\nexport function derivationPathToString([network, chainId, account, change, index]: [\n number,\n number,\n number,\n number,\n number | undefined,\n]) {\n const shortPath = typeof index !== \"number\";\n\n return `${network}'/${chainId}'/${account}'/${change}${shortPath ? \"\" : `/${index}`}`;\n}\n","import { Chain } from \"@swapkit/types\";\n\n// Backward compatibility\nconst supportedChains = [...Object.values(Chain), \"TERRA\"];\n\nexport function validateIdentifier(identifier = \"\") {\n const uppercasedIdentifier = identifier.toUpperCase();\n\n const [chain] = uppercasedIdentifier.split(\".\") as [Chain, string];\n if (supportedChains.includes(chain)) return true;\n\n const [synthChain] = uppercasedIdentifier.split(\"/\") as [Chain, string];\n if (supportedChains.includes(synthChain)) return true;\n\n throw new Error(\n `Invalid identifier: ${identifier}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,\n );\n}\n","import { BaseDecimal } from \"@swapkit/types\";\n\nimport type { SwapKitNumber } from \"./swapKitNumber.ts\";\n\ntype NumberPrimitivesType = {\n bigint: bigint;\n number: number;\n string: string;\n};\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | SwapKitNumber;\n\ntype SKBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst toMultiplier = (decimal: number) => 10n ** BigInt(decimal);\nconst decimalFromMultiplier = (multiplier: bigint) =>\n Math.log10(Number.parseFloat(multiplier.toString()));\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal]) >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(\n Number.parseInt(decimalString[bigIntDecimal - 1]) + 1\n ).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(\n /\\.?0*$/,\n \"\",\n );\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n\n static shiftDecimals({\n value,\n from,\n to,\n }: {\n value: InstanceType<typeof SwapKitNumber>;\n from: number;\n to: number;\n }) {\n return BigIntArithmetics.fromBigInt(\n (value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from),\n to,\n );\n }\n\n constructor(params: SKBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n // use the multiplier to keep track of decimal point - defaults to 8 if lower than 8\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n this.#setValue(value);\n }\n\n set(value: SKBigIntParams): this {\n // @ts-expect-error False positive\n return new this.constructor({ decimal: this.decimal, value, identifier: this.toString() });\n }\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n // @ts-expect-error False positive\n getValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const value = this.formatBigIntToSafeValue(\n this.bigIntValue,\n this.decimal || decimalFromMultiplier(this.decimalMultiplier),\n );\n\n switch (type) {\n case \"number\":\n return Number(value) as NumberPrimitivesType[T];\n case \"string\":\n return value as NumberPrimitivesType[T];\n case \"bigint\":\n return ((this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) /\n this.decimalMultiplier) as NumberPrimitivesType[T];\n }\n }\n\n // @ts-expect-error\n getBaseValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const divisor = this.decimalMultiplier / toMultiplier(this.decimal || BaseDecimal.THOR);\n const baseValue = this.bigIntValue / divisor;\n\n switch (type) {\n case \"number\":\n return Number(baseValue) as NumberPrimitivesType[T];\n case \"string\":\n return baseValue.toString() as NumberPrimitivesType[T];\n case \"bigint\":\n return baseValue as NumberPrimitivesType[T];\n }\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n const valueLength = Number.parseInt(integer) ? integer.length + decimal.length : decimal.length;\n\n if (valueLength <= significantDigits) {\n return this.getValue(\"string\");\n }\n\n if (integer.length >= significantDigits) {\n return integer.slice(0, significantDigits).padEnd(integer.length, \"0\");\n }\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, significantDigits - integer.length)}`.padEnd(\n significantDigits - integer.length,\n \"0\",\n );\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, significantDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toFixed(fixedDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, fixedDigits)}`.padEnd(fixedDigits, \"0\");\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, fixedDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toAbbreviation(digits = 2) {\n const value = this.getValue(\"number\");\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"];\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n const suffix = abbreviations[tier];\n\n if (!suffix) return this.getValue(\"string\");\n\n const scale = 10 ** (tier * 3);\n const scaled = value / scale;\n\n return `${scaled.toFixed(digits)}${suffix}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n } = {},\n ) {\n const value = this.getValue(\"number\");\n const [int, dec = \"\"] = value.toFixed(6).split(\".\");\n const integer = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n const parsedValue =\n int || dec\n ? int === \"0\"\n ? `${Number.parseFloat(`0.${dec}`)}`.replace(\".\", decimalSeparator)\n : `${integer}${Number.parseInt(dec) ? `${decimalSeparator}${dec.slice(0, decimal)}` : \"\"}`\n : \"0.00\";\n\n return `${currencyPosition === \"start\" ? currency : \"\"}${parsedValue}${\n currencyPosition === \"end\" ? currency : \"\"\n }`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(\n bigIntDecimal,\n decimalFromMultiplier(this.decimalMultiplier),\n );\n const isNegative = value < 0n;\n\n const valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimalToUseForConversion - (valueString.length - 1);\n\n const parsedValueString = padLength > 0 ? \"0\".repeat(padLength) + valueString : valueString;\n\n const decimalIndex = parsedValueString.length - decimalToUseForConversion;\n let decimalString = parsedValueString.slice(-decimalToUseForConversion);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal]) >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(\n Number.parseInt(decimalString[bigIntDecimal - 1]) + 1\n ).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${parsedValueString.slice(\n 0,\n decimalIndex,\n )}.${decimalString}`.replace(/\\.?0*$/, \"\");\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const decimal = Math.max(precisionDecimal, decimalFromMultiplier(this.decimalMultiplier));\n const precisionDecimalMultiplier = toMultiplier(decimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, decimal);\n\n switch (method) {\n case \"add\":\n return acc + value;\n case \"sub\":\n return acc - value;\n /**\n * Multiplication & division would end up with wrong result if we don't adjust the value\n * 200000000n * 200000000n => 40000000000000000n\n * 200000000n / 200000000n => 1n\n * So we do the following:\n * 200000000n * 200000000n = 40000000000000000n / 100000000n (decimals) => 400000000n\n * (200000000n * 100000000n (decimals)) / 200000000n => 100000000n\n */\n case \"mul\":\n return (acc * value) / precisionDecimalMultiplier;\n case \"div\": {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * precisionDecimalMultiplier) / value;\n }\n default:\n return acc;\n }\n },\n //normalize is to precision multiplier base\n (this.bigIntValue * precisionDecimalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({\n bigIntDecimal: decimal,\n decimal,\n value: result,\n });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimalMultiplier: toMultiplier(decimal),\n decimal: this.decimal,\n value,\n identifier: this.toString(),\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0], decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n switch (method) {\n case \"gt\":\n return compareToValue > value;\n case \"gte\":\n return compareToValue >= value;\n case \"lt\":\n return compareToValue < value;\n case \"lte\":\n return compareToValue <= value;\n case \"eqValue\":\n return compareToValue === value;\n }\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue =\n typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1\n ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}`\n : splitValue[0];\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: SKBigIntParams) {\n return typeof param === \"object\"\n ? \"getValue\" in param\n ? param.getValue(\"string\")\n : param.value\n : param;\n}\n","import { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics.ts\";\n\nexport type SwapKitValueType = BigIntArithmetics | string | number;\n\nexport class SwapKitNumber extends BigIntArithmetics {\n eq(value: SwapKitValueType) {\n return this.eqValue(value);\n }\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new SwapKitNumber({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n}\n","import { BaseDecimal, Chain, ChainToChainId } from \"@swapkit/types\";\n\nimport type { CommonAssetString } from \"../helpers/asset.ts\";\nimport { getAssetType, getCommonAssetInfo, getDecimal, isGasAsset } from \"../helpers/asset.ts\";\nimport { validateIdentifier } from \"../helpers/validators.ts\";\nimport type { TokenNames, TokenTax } from \"../types.ts\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics.ts\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics.ts\";\nimport { SwapKitNumber, type SwapKitValueType } from \"./swapKitNumber.ts\";\n\nconst staticTokensMap = new Map<\n TokenNames,\n { tax?: TokenTax; decimal: number; identifier: string }\n>();\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSynthetic = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isGasAsset = assetInfo.isGasAsset;\n }\n\n toString() {\n return this.isSynthetic ? this.symbol : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n return this.isSynthetic ? `${this.chain}.${this.symbol.replace(\"/\", \".\")}` : this.toString();\n }\n\n eq({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n chainId() {\n return ChainToChainId[this.chain];\n }\n\n // THOR.RUNE\n // THOR.ETH.ETH\n // ETH.THOR-0x1234567890\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const [chain, ticker, symbol] = urlAsset.split(\".\");\n if (!(chain && ticker)) throw new Error(\"Invalid asset url\");\n\n const assetString =\n chain === Chain.THORChain && symbol ? `${chain}.${ticker}/${symbol}` : urlAsset;\n\n return createAssetValue(assetString, value);\n }\n\n static fromString(assetString: string, value: NumberPrimitives = 0) {\n return createAssetValue(assetString, value);\n }\n static fromIdentifier(\n assetString:\n | `${Chain}.${string}`\n | `${Chain}/${string}`\n | `${Chain}.${string}-${string}`\n | TokenNames,\n value: NumberPrimitives = 0,\n ) {\n return createAssetValue(assetString, value);\n }\n\n static fromStringSync(assetString: string, value: NumberPrimitives = 0) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString.toUpperCase() as TokenNames);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n // TODO: write logger that will only run in dev mode with some flag\n // if (!tokenInfo) {\n // console.error(\n // `Asset ${assetString} is not loaded. Use AssetValue.loadStaticAssets() to load it`,\n // );\n // }\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n\n return new AssetValue({\n tax,\n value: safeValue(value, decimal),\n identifier: isSynthetic ? assetString : identifier,\n decimal: isSynthetic ? 8 : decimal,\n });\n }\n\n static async fromStringWithBase(\n assetString: string,\n value: NumberPrimitives = 0,\n baseDecimal: number = BaseDecimal.THOR,\n ) {\n const shiftedAmount = BigIntArithmetics.shiftDecimals({\n value: SwapKitNumber.fromBigInt(BigInt(value)),\n from: 0,\n to: baseDecimal,\n }).getBaseValue(\"string\");\n const assetValue = await AssetValue.fromString(assetString, value);\n\n return assetValue.set(shiftedAmount);\n }\n\n static fromStringWithBaseSync(\n assetString: string,\n value: NumberPrimitives = 0,\n baseDecimal: number = BaseDecimal.THOR,\n ) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString.toUpperCase() as TokenNames);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n\n return new AssetValue({\n tax,\n value: safeValue(BigInt(value), baseDecimal),\n identifier,\n decimal,\n });\n }\n\n static fromIdentifierSync(assetString: TokenNames, value: NumberPrimitives = 0) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n // TODO: write logger that will only run in dev mode with some flag\n // if (!tokenInfo) {\n // console.error(\n // `Asset ${assetString} is not loaded. - Loading with base Chain. Use AssetValue.loadStaticAssets() to load it`,\n // );\n // }\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n return new AssetValue({ tax, decimal, identifier, value: safeValue(value, decimal) });\n }\n\n static fromChainOrSignature(assetString: CommonAssetString, value: NumberPrimitives = 0) {\n const { decimal, identifier } = getCommonAssetInfo(assetString);\n return new AssetValue({ value: safeValue(value, decimal), decimal, identifier });\n }\n\n static loadStaticAssets() {\n return new Promise<{ ok: true } | { ok: false; message: string; error: any }>(\n (resolve, reject) => {\n try {\n import(\"@swapkit/tokens\").then((tokenPackages) => {\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain, ...rest } of tokenList.tokens) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, {\n identifier,\n decimal: \"decimals\" in rest ? rest.decimals : BaseDecimal[chain as Chain],\n });\n }\n }\n\n resolve({ ok: true });\n });\n } catch (error) {\n console.error(error);\n reject({\n ok: false,\n error,\n message:\n \"Couldn't load static assets. Ensure you have installed @swapkit/tokens package\",\n });\n }\n },\n );\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.fromChainOrSignature(chain);\n\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Litecoin:\n case Chain.BitcoinCash:\n return asset.set(0.00010001);\n\n case Chain.Dogecoin:\n return asset.set(1.00000001);\n\n case Chain.Avalanche:\n case Chain.Ethereum:\n return asset.set(0.00000001);\n\n case Chain.THORChain:\n case Chain.Maya:\n return asset.set(0);\n\n case Chain.Cosmos:\n return asset.set(0.000001);\n\n default:\n return asset.set(0.00000001);\n }\n}\n\nasync function createAssetValue(identifier: string, value: NumberPrimitives = 0) {\n validateIdentifier(identifier);\n\n const staticToken = staticTokensMap.get(identifier.toUpperCase() as TokenNames);\n const decimal = staticToken?.decimal || (await getDecimal(getAssetInfo(identifier)));\n if (!staticToken) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, { identifier, decimal });\n }\n\n return new AssetValue({ decimal, value: safeValue(value, decimal), identifier });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const [synthChain, symbol] =\n identifier.split(\".\")[0].toUpperCase() === Chain.THORChain\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (!(synthChain && symbol)) throw new Error(\"Invalid asset identifier\");\n\n return new AssetValue({\n decimal: 8,\n value: safeValue(value, 8),\n identifier: `${Chain.THORChain}.${synthChain}/${symbol}`,\n });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\"\n ? formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal })\n : value;\n}\n\n// TODO refactor & split into smaller functions\nfunction getAssetInfo(identifier: string) {\n const isSynthetic = identifier.slice(0, 14).includes(\"/\");\n\n const [synthChain, synthSymbol] =\n identifier.split(\".\")[0].toUpperCase() === Chain.THORChain\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (isSynthetic && !(synthChain && synthSymbol)) throw new Error(\"Invalid asset identifier\");\n\n const adjustedIdentifier =\n identifier.includes(\".\") && !isSynthetic ? identifier : `${Chain.THORChain}.${synthSymbol}`;\n\n const [chain, ...rest] = adjustedIdentifier.split(\".\") as [Chain, string];\n const [ticker, address] = (isSynthetic ? synthSymbol : rest.join(\".\")).split(\"-\") as [\n string,\n string?,\n ];\n const symbol = isSynthetic ? synthSymbol : rest.join(\".\");\n\n return {\n address: address?.toLowerCase(),\n chain,\n isGasAsset: isGasAsset({ chain, symbol }),\n isSynthetic,\n symbol:\n (isSynthetic ? `${synthChain}/` : \"\") +\n (address ? `${ticker}-${address?.toLowerCase() ?? \"\"}` : symbol),\n ticker,\n };\n}\n","const errorMessages = {\n /**\n * Core\n */\n core_wallet_connection_not_found: 10001,\n core_estimated_max_spendable_chain_not_supported: 10002,\n core_extend_error: 10003,\n core_inbound_data_not_found: 10004,\n core_approve_asset_address_or_from_not_found: 10005,\n core_plugin_not_found: 10006,\n core_chain_halted: 10099,\n /**\n * Core - Wallet Connection\n */\n core_wallet_xdefi_not_installed: 10101,\n core_wallet_evmwallet_not_installed: 10102,\n core_wallet_walletconnect_not_installed: 10103,\n core_wallet_keystore_not_installed: 10104,\n core_wallet_ledger_not_installed: 10105,\n core_wallet_trezor_not_installed: 10106,\n core_wallet_keplr_not_installed: 10107,\n core_wallet_okx_not_installed: 10108,\n core_wallet_keepkey_not_installed: 10109,\n /**\n * Core - Swap\n */\n core_swap_invalid_params: 10200,\n core_swap_route_not_complete: 10201,\n core_swap_asset_not_recognized: 10202,\n core_swap_contract_not_found: 10203,\n core_swap_route_transaction_not_found: 10204,\n core_swap_contract_not_supported: 10205,\n core_swap_transaction_error: 10206,\n core_swap_quote_mode_not_supported: 10207,\n /**\n * Core - Transaction\n */\n core_transaction_deposit_error: 10301,\n core_transaction_create_liquidity_rune_error: 10302,\n core_transaction_create_liquidity_asset_error: 10303,\n core_transaction_create_liquidity_invalid_params: 10304,\n core_transaction_add_liquidity_invalid_params: 10305,\n core_transaction_add_liquidity_no_rune_address: 10306,\n core_transaction_add_liquidity_rune_error: 10307,\n core_transaction_add_liquidity_asset_error: 10308,\n core_transaction_withdraw_error: 10309,\n core_transaction_deposit_to_pool_error: 10310,\n core_transaction_deposit_insufficient_funds_error: 10311,\n core_transaction_deposit_gas_error: 10312,\n core_transaction_invalid_sender_address: 10313,\n core_transaction_deposit_server_error: 10314,\n core_transaction_user_rejected: 10315,\n\n /**\n * Wallets\n */\n wallet_ledger_connection_error: 20001,\n wallet_ledger_connection_claimed: 20002,\n wallet_ledger_get_address_error: 20003,\n wallet_ledger_device_not_found: 20004,\n wallet_ledger_device_locked: 20005,\n\n /**\n * Chainflip\n */\n chainflip_channel_error: 30001,\n chainflip_broker_recipient_error: 30002,\n\n /**\n * THORChain\n */\n\n /**\n * Helpers\n */\n helpers_number_different_decimals: 99101,\n} as const;\n\nexport type ErrorKeys = keyof typeof errorMessages;\n\nexport class SwapKitError extends Error {\n constructor(errorKey: ErrorKeys, sourceError?: any) {\n if (sourceError) {\n console.error(sourceError, {\n stack: sourceError?.stack,\n message: sourceError?.message,\n });\n }\n\n super(errorKey, {\n cause: { code: errorMessages[errorKey], message: errorKey },\n });\n Object.setPrototypeOf(this, SwapKitError.prototype);\n }\n}\n"],"names":["getDecimalMethodHex","getContractDecimals","chain","to","result","RequestClient","ChainToRPC","error","BaseDecimal","getETHAssetDecimal","symbol","Chain","address","getAVAXAssetDecimal","getBSCAssetDecimal","getDecimal","gasFeeMultiplier","FeeOption","isGasAsset","getCommonAssetInfo","assetString","getAssetType","assetFromString","symbolArray","synth","ticker","_a","potentialScamRegex","evmAssetHasAddress","EVMChains","filterAssets","tokens","value","findAssetBy","params","tokenPackages","tokenList","identifier","tokenChain","rest","getAsymmetricRuneShare","liquidityUnits","poolUnits","runeDepth","s","toTCSwapKitNumber","T","A","part1","part2","part3","part4","part5","getAsymmetricAssetShare","assetDepth","numerator","getAsymmetricRuneWithdrawAmount","percent","getAsymmetricAssetWithdrawAmount","SwapKitNumber","getSymmetricPoolShare","getSymmetricWithdraw","name","getEstimatedPoolShare","runeAmount","assetAmount","R","P","runeAddAmount","assetAddAmount","rA","aR","ra","RA","denominator","liquidityUnitsAfterAdd","estimatedLiquidityUnits","newPoolUnits","getLiquiditySlippage","getMemoFor","memoType","options","MemoType","unbondAmount","owner","singleSide","basisPoints","targetAssetString","shortenedSymbol","target","asset","getTHORNameCost","year","getMAYANameCost","validateTHORName","regex","validateMAYAName","derivationPathToString","network","chainId","account","change","index","supportedChains","validateIdentifier","uppercasedIdentifier","synthChain","DEFAULT_DECIMAL","toMultiplier","decimal","decimalFromMultiplier","multiplier","formatBigIntToSafeValue","bigIntDecimal","isNegative","valueString","padLength","decimalIndex","decimalString","_BigIntArithmetics","__privateAdd","_arithmetics","_comparison","_setValue","_retrievePrecisionDecimal","_toBigInt","__publicField","getStringValue","isComplex","getFloatDecimals","toSafeValue","__privateMethod","setValue_fn","from","args","arithmetics_fn","comparison_fn","type","divisor","baseValue","stringValue","safeValue","toBigInt_fn","significantDigits","int","dec","integer","trimmedDecimal","slicedDecimal","fixedDigits","digits","abbreviations","tier","suffix","scale","currency","currencyPosition","decimalSeparator","thousandSeparator","parsedValue","decimalToUseForConversion","parsedValueString","method","precisionDecimal","retrievePrecisionDecimal_fn","precisionDecimalMultiplier","acc","arg","compareToValue","decimals","padDecimal","integerPart","decimalPart","BigIntArithmetics","numberFormatter","splitValue","param","staticTokensMap","AssetValue","tax","assetInfo","getAssetInfo","ChainToChainId","urlAsset","createAssetValue","isSynthetic","tokenInfo","createSyntheticAssetValue","baseDecimal","shiftedAmount","resolve","reject","getMinAmountByChain","staticToken","synthSymbol","adjustedIdentifier","errorMessages","SwapKitError","errorKey","sourceError"],"mappings":"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"}