@swapkit/helpers 1.0.0-rc.24 → 1.0.0-rc.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.es.js +205 -202
- package/package.json +1 -1
- package/src/helpers/asset.ts +5 -1
- package/src/modules/__tests__/assetValue.test.ts +3 -6
- package/src/modules/assetValue.ts +20 -14
- package/src/modules/bigIntArithmetics.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Te=Object.create;var D=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var $e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Ie=(r,e,t)=>e in r?D(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Be=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Se(e))!Re.call(r,n)&&n!==t&&D(r,n,{get:()=>e[n],enumerable:!(s=ve(e,n))||s.enumerable});return r};var Ee=(r,e,t)=>(t=r!=null?Te($e(r)):{},Be(e||!r||!r.__esModule?D(t,"default",{value:r,enumerable:!0}):t,r));var p=(r,e,t)=>(Ie(r,typeof e!="symbol"?e+"":e,t),t),Me=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var y=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)};var d=(r,e,t)=>(Me(r,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@swapkit/types"),Oe="0x313ce567",ne=async({chain:r,to:e})=>{try{const{result:t}=await ge.post(i.ChainToRPC[r],{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:Oe},"latest"]})});return parseInt(BigInt(t).toString())}catch(t){return console.error(t),i.BaseDecimal[r]}},Ve=async r=>{if(r===i.Chain.Ethereum)return i.BaseDecimal.ETH;const[,e]=r.split("-");return e!=null&&e.startsWith("0x")?ne({chain:i.Chain.Ethereum,to:e}):i.BaseDecimal.ETH},qe=async r=>{const[,e]=r.split("-");return e!=null&&e.startsWith("0x")?ne({chain:i.Chain.Avalanche,to:e.toLowerCase()}):i.BaseDecimal.AVAX},ke=async r=>(r===i.Chain.BinanceSmartChain,i.BaseDecimal.BSC),ie=async({chain:r,symbol:e})=>{switch(r){case i.Chain.Ethereum:return Ve(e);case i.Chain.Avalanche:return qe(e);case i.Chain.BinanceSmartChain:return ke(e);default:return i.BaseDecimal[r]}},Pe={[i.FeeOption.Average]:1.2,[i.FeeOption.Fast]:1.5,[i.FeeOption.Fastest]:2},K=({chain:r,symbol:e})=>{switch(r){case i.Chain.Bitcoin:case i.Chain.BitcoinCash:case i.Chain.Litecoin:case i.Chain.Dogecoin:case i.Chain.Binance:case i.Chain.Ethereum:case i.Chain.Avalanche:return e===r;case i.Chain.Arbitrum:case i.Chain.Optimism:return e==="ETH";case i.Chain.Maya:return e==="CACAO";case i.Chain.Kujira:return e==="KUJI";case i.Chain.Cosmos:return e==="ATOM";case i.Chain.Polygon:return e==="MATIC";case i.Chain.BinanceSmartChain:return e==="BNB";case i.Chain.THORChain:return e==="RUNE"}},ae=r=>{switch(r){case"ETH.THOR":return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case"ETH.vTHOR":return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case i.Chain.Cosmos:return{identifier:"GAIA.ATOM",decimal:i.BaseDecimal[r]};case i.Chain.THORChain:return{identifier:"THOR.RUNE",decimal:i.BaseDecimal[r]};case i.Chain.BinanceSmartChain:return{identifier:"BSC.BNB",decimal:i.BaseDecimal[r]};case i.Chain.Maya:return{identifier:"MAYA.CACAO",decimal:i.BaseDecimal.MAYA};case"MAYA.MAYA":return{identifier:"MAYA.MAYA",decimal:4};case i.Chain.Kujira:case i.Chain.Arbitrum:case i.Chain.Optimism:case i.Chain.BitcoinCash:case i.Chain.Litecoin:case i.Chain.Dogecoin:case i.Chain.Binance:case i.Chain.Avalanche:case i.Chain.Polygon:case i.Chain.Bitcoin:case i.Chain.Ethereum:return{identifier:`${r}.${r}`,decimal:i.BaseDecimal[r]}}},oe=({chain:r,symbol:e})=>{if(e.includes("/"))return"Synth";switch(r){case i.Chain.Bitcoin:case i.Chain.BitcoinCash:case i.Chain.Dogecoin:case i.Chain.Litecoin:case i.Chain.Maya:case i.Chain.THORChain:return"Native";case i.Chain.Cosmos:return e==="ATOM"?"Native":i.Chain.Cosmos;case i.Chain.Kujira:return e===i.Chain.Kujira?"Native":i.Chain.Kujira;case i.Chain.Binance:return e===i.Chain.Binance?"Native":"BEP2";case i.Chain.BinanceSmartChain:return e===i.Chain.Binance?"Native":"BEP20";case i.Chain.Ethereum:return e===i.Chain.Ethereum?"Native":"ERC20";case i.Chain.Avalanche:return e===i.Chain.Avalanche?"Native":i.Chain.Avalanche;case i.Chain.Polygon:return e===i.Chain.Polygon?"Native":"POLYGON";case i.Chain.Arbitrum:return[i.Chain.Ethereum,i.Chain.Arbitrum].includes(e)?"Native":"ARBITRUM";case i.Chain.Optimism:return[i.Chain.Ethereum,i.Chain.Optimism].includes(e)?"Native":"OPTIMISM"}},xe=r=>{var c;const[e,...t]=r.split("."),s=r.includes("/"),n=t.join("."),a=(c=n==null?void 0:n.split("-"))==null?void 0:c[0];return{chain:e,symbol:n,ticker:a,synth:s}},Ne=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),De=r=>{const[e,t]=r.split(".");if(!i.EVMChainList.includes(e))return!0;const[,s]=t.split("-");return K({chain:e,symbol:t})||!!s},He=r=>r.filter(e=>{const t=`${e.chain}.${e.symbol}`;return!Ne.test(t)&&De(t)}),ce=({liquidityUnits:r,poolUnits:e,runeDepth:t})=>{const s=m(r),n=m(e),a=m(t),c=s.mul(a),o=n.mul(n).mul(2),u=n.mul(s).mul(2),l=s.mul(s),h=n.mul(n).mul(n);return c.mul(o.sub(u).add(l)).div(h)},ue=({liquidityUnits:r,poolUnits:e,assetDepth:t})=>{const s=m(r),n=m(e),a=m(t),c=s.mul(a),o=n.mul(n).mul(2),u=n.mul(s).mul(2),l=s.mul(s),h=c.mul(o.sub(u).add(l)),g=n.mul(n).mul(n);return h.div(g)},je=({percent:r,runeDepth:e,liquidityUnits:t,poolUnits:s})=>ce({runeDepth:e,liquidityUnits:t,poolUnits:s}).mul(r),Le=({percent:r,assetDepth:e,liquidityUnits:t,poolUnits:s})=>ue({assetDepth:e,liquidityUnits:t,poolUnits:s}).mul(r),m=r=>f.fromBigInt(BigInt(r),i.BaseDecimal.THOR),le=({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s})=>({assetAmount:m(s).mul(r).div(e),runeAmount:m(t).mul(r).div(e)}),Fe=({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s,percent:n})=>Object.fromEntries(Object.entries(le({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s})).map(([a,c])=>[a,c.mul(n)])),Ue=({runeDepth:r,poolUnits:e,assetDepth:t,liquidityUnits:s,runeAmount:n,assetAmount:a})=>{const c=new f({value:r,decimal:8}),o=new f({value:t,decimal:8}),u=new f({value:e,decimal:8}),l=new f({value:n,decimal:8}),h=new f({value:a,decimal:8}),g=l.mul(o),w=h.mul(c),x=l.mul(h),be=c.mul(o),Ce=u.mul(g.add(w.add(x.mul(2)))),we=g.add(w.add(be.mul(2))),Q=Ce.div(we),N=m(s).add(Q);if(Q.getBaseValue("number")===0)return N.div(u).getBaseValue("number");const Ae=u.add(N);return N.div(Ae).getBaseValue("number")},We=({runeAmount:r,assetAmount:e,runeDepth:t,assetDepth:s})=>{if(r==="0"||e==="0"||t==="0"||s==="0")return 0;const n=m(t),a=m(s),c=m(e),o=m(r),u=c.mul(n).sub(a.mul(o)),l=a.mul(o).add(n.mul(a));return Math.abs(u.div(l).getBaseValue("number"))},Ge=({symbol:r,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${r.slice(-3)}`:r,Ke=(r,e)=>{switch(r){case i.MemoType.LEAVE:case i.MemoType.BOND:{const{address:t}=e;return`${r}:${t}`}case i.MemoType.UNBOND:{const{address:t,unbondAmount:s}=e;return`${r}:${t}:${s*10**8}`}case i.MemoType.THORNAME_REGISTER:{const{name:t,chain:s,address:n,owner:a}=e;return`${r}:${t}:${s}:${n}${a?`:${a}`:""}`}case i.MemoType.DEPOSIT:{const{chain:t,symbol:s,address:n,singleSide:a}=e;return a?`${r}:${t}/${s}::t:0`:`${r}:${t}.${s}:${n||""}:t:0`}case i.MemoType.WITHDRAW:{const{chain:t,ticker:s,symbol:n,basisPoints:a,targetAssetString:c,singleSide:o}=e,u=!o&&c?`:${c}`:"",l=Ge({chain:t,symbol:n,ticker:s});return`${r}:${t}${o?"/":"."}${l}:${a}${u}`}case i.MemoType.OPEN_LOAN:case i.MemoType.CLOSE_LOAN:{const{asset:t,address:s}=e;return`${r}:${t}:${s}`}default:return""}},Ye=r=>{if(r<0)throw new Error("Invalid number of year");return 10+r},ze=r=>{if(r.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!r.match(e)},Je=([r,e,t,s,n])=>`${r}'/${e}'/${t}'/${s}${typeof n!="number"?"":`/${n}`}`;class X extends Error{constructor(e,t,s){const n=e.status||e.status===0?e.status:"",a=e.statusText||"",c=`${n} ${a}`.trim(),o=c?`status code ${c}`:"an unknown error";super(`Request failed with ${o}`),Object.defineProperty(this,"response",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="HTTPError",this.response=e,this.request=t,this.options=s}}class he extends Error{constructor(e){super("Request timed out"),Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="TimeoutError",this.request=e}}const O=r=>r!==null&&typeof r=="object",M=(...r)=>{for(const e of r)if((!O(e)||Array.isArray(e))&&e!==void 0)throw new TypeError("The `options` argument must be an object");return Y({},...r)},de=(r={},e={})=>{const t=new globalThis.Headers(r),s=e instanceof globalThis.Headers,n=new globalThis.Headers(e);for(const[a,c]of n.entries())s&&c==="undefined"||c===void 0?t.delete(a):t.set(a,c);return t},Y=(...r)=>{let e={},t={};for(const s of r)if(Array.isArray(s))Array.isArray(e)||(e=[]),e=[...e,...s];else if(O(s)){for(let[n,a]of Object.entries(s))O(a)&&n in e&&(a=Y(e[n],a)),e={...e,[n]:a};O(s.headers)&&(t=de(t,s.headers),e.headers=t)}return e},Qe=(()=>{let r=!1,e=!1;const t=typeof globalThis.ReadableStream=="function",s=typeof globalThis.Request=="function";return t&&s&&(e=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type")),r&&!e})(),Xe=typeof globalThis.AbortController=="function",Ze=typeof globalThis.ReadableStream=="function",et=typeof globalThis.FormData=="function",me=["get","post","put","patch","head","delete"],tt={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},H=2147483647,pe=Symbol("stop"),st={json:!0,parseJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,fetch:!0},rt={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0},nt=r=>me.includes(r)?r.toUpperCase():r,it=["get","put","head","delete","options","trace"],at=[408,413,429,500,502,503,504],fe=[413,429,503],Z={limit:2,methods:it,statusCodes:at,afterStatusCodes:fe,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:r=>.3*2**(r-1)*1e3},ot=(r={})=>{if(typeof r=="number")return{...Z,limit:r};if(r.methods&&!Array.isArray(r.methods))throw new Error("retry.methods must be an array");if(r.statusCodes&&!Array.isArray(r.statusCodes))throw new Error("retry.statusCodes must be an array");return{...Z,...r,afterStatusCodes:fe}};async function ct(r,e,t,s){return new Promise((n,a)=>{const c=setTimeout(()=>{t&&t.abort(),a(new he(r))},s.timeout);s.fetch(r,e).then(n).catch(a).then(()=>{clearTimeout(c)})})}async function ut(r,{signal:e}){return new Promise((t,s)=>{e&&(e.throwIfAborted(),e.addEventListener("abort",n,{once:!0}));function n(){clearTimeout(a),s(e.reason)}const a=setTimeout(()=>{e==null||e.removeEventListener("abort",n),t()},r)})}const lt=(r,e)=>{const t={};for(const s in e)!(s in rt)&&!(s in st)&&!(s in r)&&(t[s]=e[s]);return t};class q{static create(e,t){const s=new q(e,t),n=async()=>{if(typeof s._options.timeout=="number"&&s._options.timeout>H)throw new RangeError(`The \`timeout\` option cannot be greater than ${H}`);await Promise.resolve();let o=await s._fetch();for(const u of s._options.hooks.afterResponse){const l=await u(s.request,s._options,s._decorateResponse(o.clone()));l instanceof globalThis.Response&&(o=l)}if(s._decorateResponse(o),!o.ok&&s._options.throwHttpErrors){let u=new X(o,s.request,s._options);for(const l of s._options.hooks.beforeError)u=await l(u);throw u}if(s._options.onDownloadProgress){if(typeof s._options.onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!Ze)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return s._stream(o.clone(),s._options.onDownloadProgress)}return o},c=s._options.retry.methods.includes(s.request.method.toLowerCase())?s._retry(n):n();for(const[o,u]of Object.entries(tt))c[o]=async()=>{s.request.headers.set("accept",s.request.headers.get("accept")||u);const h=(await c).clone();if(o==="json"){if(h.status===204||(await h.clone().arrayBuffer()).byteLength===0)return"";if(t.parseJson)return t.parseJson(await h.text())}return h[o]()};return c}constructor(e,t={}){if(Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"abortController",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_retryCount",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_options",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._input=e,this._options={credentials:this._input.credentials||"same-origin",...t,headers:de(this._input.headers,t.headers),hooks:Y({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},t.hooks),method:nt(t.method??this._input.method),prefixUrl:String(t.prefixUrl||""),retry:ot(t.retry),throwHttpErrors:t.throwHttpErrors!==!1,timeout:t.timeout??1e4,fetch:t.fetch??globalThis.fetch.bind(globalThis)},typeof this._input!="string"&&!(this._input instanceof URL||this._input instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&typeof this._input=="string"){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(Xe){if(this.abortController=new globalThis.AbortController,this._options.signal){const s=this._options.signal;this._options.signal.addEventListener("abort",()=>{this.abortController.abort(s.reason)})}this._options.signal=this.abortController.signal}if(Qe&&(this._options.duplex="half"),this.request=new globalThis.Request(this._input,this._options),this._options.searchParams){const n="?"+(typeof this._options.searchParams=="string"?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString()),a=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,n);(et&&this._options.body instanceof globalThis.FormData||this._options.body instanceof URLSearchParams)&&!(this._options.headers&&this._options.headers["content-type"])&&this.request.headers.delete("content-type"),this.request=new globalThis.Request(new globalThis.Request(a,{...this.request}),this._options)}this._options.json!==void 0&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type",this._options.headers.get("content-type")??"application/json"),this.request=new globalThis.Request(this.request,{body:this._options.body}))}_calculateRetryDelay(e){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(e instanceof he)){if(e instanceof X){if(!this._options.retry.statusCodes.includes(e.response.status))return 0;const s=e.response.headers.get("Retry-After");if(s&&this._options.retry.afterStatusCodes.includes(e.response.status)){let n=Number(s);return Number.isNaN(n)?n=Date.parse(s)-Date.now():n*=1e3,this._options.retry.maxRetryAfter!==void 0&&n>this._options.retry.maxRetryAfter?0:n}if(e.response.status===413)return 0}const t=this._options.retry.delay(this._retryCount);return Math.min(this._options.retry.backoffLimit,t)}return 0}_decorateResponse(e){return this._options.parseJson&&(e.json=async()=>this._options.parseJson(await e.text())),e}async _retry(e){try{return await e()}catch(t){const s=Math.min(this._calculateRetryDelay(t),H);if(s!==0&&this._retryCount>0){await ut(s,{signal:this._options.signal});for(const n of this._options.hooks.beforeRetry)if(await n({request:this.request,options:this._options,error:t,retryCount:this._retryCount})===pe)return;return this._retry(e)}throw t}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const s=await t(this.request,this._options);if(s instanceof Request){this.request=s;break}if(s instanceof Response)return s}const e=lt(this.request,this._options);return this._options.timeout===!1?this._options.fetch(this.request.clone(),e):ct(this.request.clone(),e,this.abortController,this._options)}_stream(e,t){const s=Number(e.headers.get("content-length"))||0;let n=0;return e.status===204?(t&&t({percent:1,totalBytes:s,transferredBytes:n},new Uint8Array),new globalThis.Response(null,{status:e.status,statusText:e.statusText,headers:e.headers})):new globalThis.Response(new globalThis.ReadableStream({async start(a){const c=e.body.getReader();t&&t({percent:0,transferredBytes:0,totalBytes:s},new Uint8Array);async function o(){const{done:u,value:l}=await c.read();if(u){a.close();return}if(t){n+=l.byteLength;const h=s===0?0:n/s;t({percent:h,transferredBytes:n,totalBytes:s},l)}a.enqueue(l),await o()}await o()}}),{status:e.status,statusText:e.statusText,headers:e.headers})}}/*! MIT License © Sindre Sorhus */const L=r=>{const e=(t,s)=>q.create(t,M(r,s));for(const t of me)e[t]=(s,n)=>q.create(s,M(r,n,{method:t}));return e.create=t=>L(M(t)),e.extend=t=>L(M(r,t)),e.stop=pe,e},ht=L(),dt=ht,mt=typeof window<"u"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},ee=dt.create({headers:mt}),ge={get:(r,e)=>ee.get(r,e).json(),post:(r,e)=>ee.post(r,e).json()},te=Object.values(i.Chain),pt=(r="")=>{const e=r.toUpperCase(),[t]=e.split(".");if(te.includes(t))return!0;const[s]=e.split("/");if(te.includes(s))return!0;throw new Error(`Invalid identifier: ${r}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},R=8,A=r=>10n**BigInt(r),v=r=>Math.log10(parseFloat(r.toString()));function I({value:r,bigIntDecimal:e=R,decimal:t=R}){const s=r<0n;let n=r.toString().substring(s?1:0);const a=t-(n.length-1);a>0&&(n="0".repeat(a)+n);const c=n.length-t;let o=n.slice(-t);return parseInt(o[e])>=5?o=`${o.substring(0,e-1)}${(parseInt(o[e-1])+1).toString()}`:o=o.substring(0,e),`${s?"-":""}${n.slice(0,c)}.${o}`.replace(/\.?0*$/,"")}var b,S,k,_e,P,ye,B,F,C,$,E,U;const J=class J{constructor(e){y(this,b);y(this,k);y(this,P);y(this,B);y(this,C);y(this,E);p(this,"decimalMultiplier",10n**8n);p(this,"bigIntValue",0n);p(this,"decimal");const t=j(e);this.decimal=typeof e=="object"?e.decimal:void 0,this.decimalMultiplier=A(Math.max(d(this,E,U).call(this,d(this,C,$).call(this,t)),this.decimal||0)),d(this,k,_e).call(this,t)}static fromBigInt(e,t){return new J({decimal:t,value:I({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:s}){return this.fromBigInt(e.getBaseValue("bigint")*A(s)/A(t),s)}set(e){return new this.constructor({decimal:this.decimal,value:e,identifier:this.toString()})}add(...e){return d(this,b,S).call(this,"add",...e)}sub(...e){return d(this,b,S).call(this,"sub",...e)}mul(...e){return d(this,b,S).call(this,"mul",...e)}div(...e){return d(this,b,S).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||v(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/A(this.decimal||i.BaseDecimal.THOR),s=this.bigIntValue/t;switch(e){case"number":return Number(s);case"string":return s.toString();default:return s}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const s=j(e),n=d(this,C,$).call(this,s);return n==="0"||n==="undefined"?0n:d(this,B,F).call(this,n,t)}formatBigIntToSafeValue(e,t){const s=t||this.decimal||R,n=Math.max(s,v(this.decimalMultiplier)),a=e<0n,c=e.toString().substring(a?1:0),o=n-(c.length-1),u=o>0?"0".repeat(o)+c:c,l=u.length-n;let h=u.slice(-n);return parseInt(h[s])>=5?h=`${h.substring(0,s-1)}${(parseInt(h[s-1])+1).toString()}`:h=h.substring(0,s),`${a?"-":""}${u.slice(0,l)}.${h}`.replace(/\.?0*$/,"")}toSignificant(e=6){const[t,s]=this.getValue("string").split("."),n=t||"",a=s||"";if((parseInt(n)?n.length+a.length:a.length)<=e)return this.getValue("string");if(n.length>=e)return n.slice(0,e).padEnd(n.length,"0");if(parseInt(n))return`${n}.${a.slice(0,e-n.length)}`.padEnd(e-n.length,"0");const o=parseInt(a),u=`${o}`.slice(0,e);return`0.${u.padStart(a.length-`${o}`.length+u.length,"0")}`}toFixed(e=6){const[t,s]=this.getValue("string").split("."),n=t||"",a=s||"";if(parseInt(n))return`${n}.${a.slice(0,e)}`.padEnd(e,"0");const c=parseInt(a),o=`${c}`.slice(0,e);return`0.${o.padStart(a.length-`${c}`.length+o.length,"0")}`}toAbbreviation(e=2){const t=this.getValue("number"),s=["","K","M","B","T","Q","Qi","S"],n=Math.floor(Math.log10(Math.abs(t))/3),a=s[n];if(!a)return this.getValue("string");const c=10**(n*3);return`${(t/c).toFixed(e)}${a}`}toCurrency(e="$",{currencyPosition:t="start",decimal:s=2,decimalSeparator:n=".",thousandSeparator:a=","}={}){const c=this.getValue("number"),[o,u=""]=c.toFixed(6).split("."),l=o.replace(/\B(?=(\d{3})+(?!\d))/g,a),h=!o&&!u?"0.00":o==="0"?`${parseFloat(`0.${u}`)}`.replace(".",n):`${l}${u?`${n}${u.slice(0,s)}`:""}`;return`${t==="start"?e:""}${h}${t==="end"?e:""}`}};b=new WeakSet,S=function(e,...t){const s=d(this,P,ye).call(this,this,...t),n=A(s),a=t.reduce((o,u)=>{const l=this.getBigIntValue(u,s);switch(e){case"add":return o+l;case"sub":return o-l;case"mul":return o*l/n;case"div":{if(l===0n)throw new RangeError("Division by zero");return o*n/l}default:return o}},this.bigIntValue*n/this.decimalMultiplier),c=I({bigIntDecimal:s,decimal:Math.max(s,v(this.decimalMultiplier)),value:a});return new this.constructor({decimal:this.decimal,value:c,identifier:this.toString()})},k=new WeakSet,_e=function(e){const t=d(this,C,$).call(this,e)||"0";this.bigIntValue=d(this,B,F).call(this,t)},P=new WeakSet,ye=function(...e){const t=e.map(s=>typeof s=="object"?s.decimal||v(s.decimalMultiplier):d(this,E,U).call(this,d(this,C,$).call(this,s))).filter(Boolean);return Math.max(...t,R)},B=new WeakSet,F=function(e,t){const s=t?A(t):this.decimalMultiplier,n=v(s),[a="",c=""]=e.split(".");return BigInt(`${a}${c.padEnd(n,"0")}`)},C=new WeakSet,$=function(e){const s=`${typeof e=="number"?Number(e).toLocaleString("fullwide",{useGrouping:!1,maximumFractionDigits:20}):j(e)}`.replaceAll(",",".").split(".");return s.length>1?`${s.slice(0,-1).join("")}.${s.at(-1)}`:s[0]},E=new WeakSet,U=function(e){var s;const t=((s=e.split(".")[1])==null?void 0:s.length)||0;return Math.max(t,R)};let T=J;function j(r){return typeof r=="object"?"getValue"in r?r.getValue("string"):r.value:r}const V=(r,e)=>typeof r=="bigint"?I({value:r,bigIntDecimal:e,decimal:e}):r;let W;const se=r=>{if(!W)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return W.get(r.toUpperCase())||{decimal:i.BaseDecimal.THOR,identifier:""}},re=async(r,e=0)=>{pt(r);const t=await ie(G(r)),s=V(e,t);return new _({decimal:t,value:s,identifier:r})};class _ extends T{constructor(t){const s="identifier"in t?t.identifier:`${t.chain}.${t.symbol}`;super(t.value instanceof T?t.value:{decimal:t.decimal,value:t.value});p(this,"address");p(this,"chain");p(this,"isSynthetic",!1);p(this,"isGasAsset",!1);p(this,"symbol");p(this,"ticker");p(this,"type");const n=G(s);this.type=oe(n),this.chain=n.chain,this.ticker=n.ticker,this.symbol=n.symbol,this.address=n.address,this.isSynthetic=n.isSynthetic,this.isGasAsset=n.isGasAsset}get assetValue(){return`${this.getValue("string")} ${this.ticker}`}toString(t=!1){const s=this.isSynthetic?this.symbol.split("-")[0]:`${this.chain}.${this.ticker}`;return t?s:`${this.chain}.${this.symbol}`}eq({chain:t,symbol:s}){return this.chain===t&&this.symbol===s}static async fromString(t,s=0){return re(t,s)}static fromStringSync(t,s=0){const{isSynthetic:n}=G(t),{decimal:a,identifier:c}=se(t),o=V(s,a);return c?new _({decimal:a,identifier:c,value:o}):n?new _({decimal:8,identifier:t,value:o}):void 0}static async fromIdentifier(t,s=0){return re(t,s)}static fromIdentifierSync(t,s=0){const{decimal:n,identifier:a}=se(t),c=V(s,n);return new _({decimal:n,identifier:a,value:c})}static fromChainOrSignature(t,s=0){const{decimal:n,identifier:a}=ae(t),c=V(s,n);return new _({value:c,decimal:n,identifier:a})}static async loadStaticAssets(){return new Promise(async(t,s)=>{try{const{ThorchainList:n,NativeList:a,...c}=await import("@swapkit/tokens");W=[a,...Object.values(c)].reduce((u,{tokens:l})=>(l.forEach(({identifier:h,chain:g,...w})=>{const x="decimals"in w?w.decimals:i.BaseDecimal[g];u.set(h,{identifier:h,decimal:x})}),u),new Map),t({ok:!0})}catch(n){console.error(n),s({ok:!1,error:n,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const ft=r=>{const e=_.fromChainOrSignature(r);switch(r){case i.Chain.Bitcoin:case i.Chain.Litecoin:case i.Chain.BitcoinCash:return e.set(10001e-8);case i.Chain.Dogecoin:return e.set(1.00000001);case i.Chain.Avalanche:case i.Chain.Ethereum:return e.set(1e-8);case i.Chain.THORChain:case i.Chain.Maya:return e.set(0);default:return e.set(1e-8)}},G=r=>{const e=r.slice(0,14).includes("/"),[t,s]=r.split(".").pop().split("/"),n=r.includes(".")&&!e?r:`${i.Chain.THORChain}.${s}`,[a,c]=n.split("."),[o,u]=(e?s:c).split("-");return{address:u==null?void 0:u.toLowerCase(),chain:a,isGasAsset:K({chain:a,symbol:c}),isSynthetic:e,symbol:(e?`${t}/`:"")+(u?`${o}-${(u==null?void 0:u.toLowerCase())??""}`:c),ticker:o}},gt={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 z extends Error{constructor(e,t){console.error(t),super(e,{cause:{code:gt[e],message:e}}),Object.setPrototypeOf(this,z.prototype)}}class f extends T{eq(e){return this.eqValue(e)}static fromBigInt(e,t){return new f({decimal:t,value:I({value:e,bigIntDecimal:t,decimal:t})})}}exports.AssetValue=_;exports.BigIntArithmetics=T;exports.RequestClient=ge;exports.SwapKitError=z;exports.SwapKitNumber=f;exports.assetFromString=xe;exports.derivationPathToString=Je;exports.filterAssets=He;exports.formatBigIntToSafeValue=I;exports.gasFeeMultiplier=Pe;exports.getAssetType=oe;exports.getAsymmetricAssetShare=ue;exports.getAsymmetricAssetWithdrawAmount=Le;exports.getAsymmetricRuneShare=ce;exports.getAsymmetricRuneWithdrawAmount=je;exports.getCommonAssetInfo=ae;exports.getDecimal=ie;exports.getEstimatedPoolShare=Ue;exports.getLiquiditySlippage=We;exports.getMemoFor=Ke;exports.getMinAmountByChain=ft;exports.getSymmetricPoolShare=le;exports.getSymmetricWithdraw=Fe;exports.getTHORNameCost=Ye;exports.isGasAsset=K;exports.validateTHORName=ze;
|
|
1
|
+
"use strict";var ve=Object.create;var H=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var $e=Object.getPrototypeOf,Ie=Object.prototype.hasOwnProperty;var Be=(r,e,t)=>e in r?H(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Ee=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Re(e))!Ie.call(r,n)&&n!==t&&H(r,n,{get:()=>e[n],enumerable:!(s=Se(e,n))||s.enumerable});return r};var Me=(r,e,t)=>(t=r!=null?ve($e(r)):{},Ee(e||!r||!r.__esModule?H(t,"default",{value:r,enumerable:!0}):t,r));var p=(r,e,t)=>(Be(r,typeof e!="symbol"?e+"":e,t),t),Oe=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var y=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)};var d=(r,e,t)=>(Oe(r,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@swapkit/types"),Ve="0x313ce567",ae=async({chain:r,to:e})=>{try{const{result:t}=await ye.post(i.ChainToRPC[r],{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:Ve},"latest"]})});return parseInt(BigInt(t).toString())}catch(t){return console.error(t),i.BaseDecimal[r]}},qe=async r=>{if(r===i.Chain.Ethereum)return i.BaseDecimal.ETH;const[,e]=r.split("-");return e!=null&&e.startsWith("0x")?ae({chain:i.Chain.Ethereum,to:e}):i.BaseDecimal.ETH},Pe=async r=>{const[,e]=r.split("-");return e!=null&&e.startsWith("0x")?ae({chain:i.Chain.Avalanche,to:e.toLowerCase()}):i.BaseDecimal.AVAX},ke=async r=>(r===i.Chain.BinanceSmartChain,i.BaseDecimal.BSC),oe=async({chain:r,symbol:e})=>{switch(r){case i.Chain.Ethereum:return qe(e);case i.Chain.Avalanche:return Pe(e);case i.Chain.BinanceSmartChain:return ke(e);default:return i.BaseDecimal[r]}},xe={[i.FeeOption.Average]:1.2,[i.FeeOption.Fast]:1.5,[i.FeeOption.Fastest]:2},Y=({chain:r,symbol:e})=>{switch(r){case i.Chain.Bitcoin:case i.Chain.BitcoinCash:case i.Chain.Litecoin:case i.Chain.Dogecoin:case i.Chain.Binance:case i.Chain.Ethereum:case i.Chain.Avalanche:return e===r;case i.Chain.Arbitrum:case i.Chain.Optimism:return e==="ETH";case i.Chain.Maya:return e==="CACAO";case i.Chain.Kujira:return e==="KUJI";case i.Chain.Cosmos:return e==="ATOM";case i.Chain.Polygon:return e==="MATIC";case i.Chain.BinanceSmartChain:return e==="BNB";case i.Chain.THORChain:return e==="RUNE"}},ce=r=>{switch(r){case"ETH.THOR":return{identifier:"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044",decimal:18};case"ETH.vTHOR":return{identifier:"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d",decimal:18};case i.Chain.Cosmos:return{identifier:"GAIA.ATOM",decimal:i.BaseDecimal[r]};case i.Chain.THORChain:return{identifier:"THOR.RUNE",decimal:i.BaseDecimal[r]};case i.Chain.BinanceSmartChain:return{identifier:"BSC.BNB",decimal:i.BaseDecimal[r]};case i.Chain.Maya:return{identifier:"MAYA.CACAO",decimal:i.BaseDecimal.MAYA};case"MAYA.MAYA":return{identifier:"MAYA.MAYA",decimal:4};case i.Chain.Kujira:case i.Chain.Arbitrum:case i.Chain.Optimism:case i.Chain.BitcoinCash:case i.Chain.Litecoin:case i.Chain.Dogecoin:case i.Chain.Binance:case i.Chain.Avalanche:case i.Chain.Polygon:case i.Chain.Bitcoin:case i.Chain.Ethereum:return{identifier:`${r}.${r}`,decimal:i.BaseDecimal[r]}}},ue=({chain:r,symbol:e})=>{if(e.includes("/"))return"Synth";switch(r){case i.Chain.Bitcoin:case i.Chain.BitcoinCash:case i.Chain.Dogecoin:case i.Chain.Litecoin:case i.Chain.Maya:case i.Chain.THORChain:return"Native";case i.Chain.Cosmos:return e==="ATOM"?"Native":i.Chain.Cosmos;case i.Chain.Kujira:return e===i.Chain.Kujira?"Native":i.Chain.Kujira;case i.Chain.Binance:return e===i.Chain.Binance?"Native":"BEP2";case i.Chain.BinanceSmartChain:return e===i.Chain.Binance?"Native":"BEP20";case i.Chain.Ethereum:return e===i.Chain.Ethereum?"Native":"ERC20";case i.Chain.Avalanche:return e===i.Chain.Avalanche?"Native":i.Chain.Avalanche;case i.Chain.Polygon:return e===i.Chain.Polygon?"Native":"POLYGON";case i.Chain.Arbitrum:return[i.Chain.Ethereum,i.Chain.Arbitrum].includes(e)?"Native":"ARBITRUM";case i.Chain.Optimism:return[i.Chain.Ethereum,i.Chain.Optimism].includes(e)?"Native":"OPTIMISM"}},Ne=r=>{var c;const[e,...t]=r.split("."),s=r.includes("/"),n=t.join("."),a=(c=n==null?void 0:n.split("-"))==null?void 0:c[0];return{chain:e,symbol:n,ticker:a,synth:s}},De=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),He=r=>{const[e,t]=r.split(".");if(!i.EVMChainList.includes(e))return!0;const[,s]=t.split("-");return Y({chain:e,symbol:t})||!!s},je=r=>r.filter(e=>{const t=`${e.chain}.${e.symbol}`;return!De.test(t)&&He(t)&&e.value!=="0"}),le=({liquidityUnits:r,poolUnits:e,runeDepth:t})=>{const s=m(r),n=m(e),a=m(t),c=s.mul(a),o=n.mul(n).mul(2),u=n.mul(s).mul(2),l=s.mul(s),h=n.mul(n).mul(n);return c.mul(o.sub(u).add(l)).div(h)},he=({liquidityUnits:r,poolUnits:e,assetDepth:t})=>{const s=m(r),n=m(e),a=m(t),c=s.mul(a),o=n.mul(n).mul(2),u=n.mul(s).mul(2),l=s.mul(s),h=c.mul(o.sub(u).add(l)),g=n.mul(n).mul(n);return h.div(g)},Le=({percent:r,runeDepth:e,liquidityUnits:t,poolUnits:s})=>le({runeDepth:e,liquidityUnits:t,poolUnits:s}).mul(r),Fe=({percent:r,assetDepth:e,liquidityUnits:t,poolUnits:s})=>he({assetDepth:e,liquidityUnits:t,poolUnits:s}).mul(r),m=r=>f.fromBigInt(BigInt(r),i.BaseDecimal.THOR),de=({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s})=>({assetAmount:m(s).mul(r).div(e),runeAmount:m(t).mul(r).div(e)}),Ue=({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s,percent:n})=>Object.fromEntries(Object.entries(de({liquidityUnits:r,poolUnits:e,runeDepth:t,assetDepth:s})).map(([a,c])=>[a,c.mul(n)])),We=({runeDepth:r,poolUnits:e,assetDepth:t,liquidityUnits:s,runeAmount:n,assetAmount:a})=>{const c=new f({value:r,decimal:8}),o=new f({value:t,decimal:8}),u=new f({value:e,decimal:8}),l=new f({value:n,decimal:8}),h=new f({value:a,decimal:8}),g=l.mul(o),w=h.mul(c),N=l.mul(h),Ce=c.mul(o),we=u.mul(g.add(w.add(N.mul(2)))),Ae=g.add(w.add(Ce.mul(2))),X=we.div(Ae),D=m(s).add(X);if(X.getBaseValue("number")===0)return D.div(u).getBaseValue("number");const Te=u.add(D);return D.div(Te).getBaseValue("number")},Ge=({runeAmount:r,assetAmount:e,runeDepth:t,assetDepth:s})=>{if(r==="0"||e==="0"||t==="0"||s==="0")return 0;const n=m(t),a=m(s),c=m(e),o=m(r),u=c.mul(n).sub(a.mul(o)),l=a.mul(o).add(n.mul(a));return Math.abs(u.div(l).getBaseValue("number"))},Ke=({symbol:r,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${r.slice(-3)}`:r,Ye=(r,e)=>{switch(r){case i.MemoType.LEAVE:case i.MemoType.BOND:{const{address:t}=e;return`${r}:${t}`}case i.MemoType.UNBOND:{const{address:t,unbondAmount:s}=e;return`${r}:${t}:${s*10**8}`}case i.MemoType.THORNAME_REGISTER:{const{name:t,chain:s,address:n,owner:a}=e;return`${r}:${t}:${s}:${n}${a?`:${a}`:""}`}case i.MemoType.DEPOSIT:{const{chain:t,symbol:s,address:n,singleSide:a}=e;return a?`${r}:${t}/${s}::t:0`:`${r}:${t}.${s}:${n||""}:t:0`}case i.MemoType.WITHDRAW:{const{chain:t,ticker:s,symbol:n,basisPoints:a,targetAssetString:c,singleSide:o}=e,u=!o&&c?`:${c}`:"",l=Ke({chain:t,symbol:n,ticker:s});return`${r}:${t}${o?"/":"."}${l}:${a}${u}`}case i.MemoType.OPEN_LOAN:case i.MemoType.CLOSE_LOAN:{const{asset:t,address:s}=e;return`${r}:${t}:${s}`}default:return""}},ze=r=>{if(r<0)throw new Error("Invalid number of year");return 10+r},Je=r=>{if(r.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!r.match(e)},Qe=([r,e,t,s,n])=>`${r}'/${e}'/${t}'/${s}${typeof n!="number"?"":`/${n}`}`;class Z extends Error{constructor(e,t,s){const n=e.status||e.status===0?e.status:"",a=e.statusText||"",c=`${n} ${a}`.trim(),o=c?`status code ${c}`:"an unknown error";super(`Request failed with ${o}`),Object.defineProperty(this,"response",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="HTTPError",this.response=e,this.request=t,this.options=s}}class me extends Error{constructor(e){super("Request timed out"),Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name="TimeoutError",this.request=e}}const q=r=>r!==null&&typeof r=="object",O=(...r)=>{for(const e of r)if((!q(e)||Array.isArray(e))&&e!==void 0)throw new TypeError("The `options` argument must be an object");return z({},...r)},pe=(r={},e={})=>{const t=new globalThis.Headers(r),s=e instanceof globalThis.Headers,n=new globalThis.Headers(e);for(const[a,c]of n.entries())s&&c==="undefined"||c===void 0?t.delete(a):t.set(a,c);return t},z=(...r)=>{let e={},t={};for(const s of r)if(Array.isArray(s))Array.isArray(e)||(e=[]),e=[...e,...s];else if(q(s)){for(let[n,a]of Object.entries(s))q(a)&&n in e&&(a=z(e[n],a)),e={...e,[n]:a};q(s.headers)&&(t=pe(t,s.headers),e.headers=t)}return e},Xe=(()=>{let r=!1,e=!1;const t=typeof globalThis.ReadableStream=="function",s=typeof globalThis.Request=="function";return t&&s&&(e=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type")),r&&!e})(),Ze=typeof globalThis.AbortController=="function",et=typeof globalThis.ReadableStream=="function",tt=typeof globalThis.FormData=="function",fe=["get","post","put","patch","head","delete"],st={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},j=2147483647,ge=Symbol("stop"),rt={json:!0,parseJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,fetch:!0},nt={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0},it=r=>fe.includes(r)?r.toUpperCase():r,at=["get","put","head","delete","options","trace"],ot=[408,413,429,500,502,503,504],_e=[413,429,503],ee={limit:2,methods:at,statusCodes:ot,afterStatusCodes:_e,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:r=>.3*2**(r-1)*1e3},ct=(r={})=>{if(typeof r=="number")return{...ee,limit:r};if(r.methods&&!Array.isArray(r.methods))throw new Error("retry.methods must be an array");if(r.statusCodes&&!Array.isArray(r.statusCodes))throw new Error("retry.statusCodes must be an array");return{...ee,...r,afterStatusCodes:_e}};async function ut(r,e,t,s){return new Promise((n,a)=>{const c=setTimeout(()=>{t&&t.abort(),a(new me(r))},s.timeout);s.fetch(r,e).then(n).catch(a).then(()=>{clearTimeout(c)})})}async function lt(r,{signal:e}){return new Promise((t,s)=>{e&&(e.throwIfAborted(),e.addEventListener("abort",n,{once:!0}));function n(){clearTimeout(a),s(e.reason)}const a=setTimeout(()=>{e==null||e.removeEventListener("abort",n),t()},r)})}const ht=(r,e)=>{const t={};for(const s in e)!(s in nt)&&!(s in rt)&&!(s in r)&&(t[s]=e[s]);return t};class k{static create(e,t){const s=new k(e,t),n=async()=>{if(typeof s._options.timeout=="number"&&s._options.timeout>j)throw new RangeError(`The \`timeout\` option cannot be greater than ${j}`);await Promise.resolve();let o=await s._fetch();for(const u of s._options.hooks.afterResponse){const l=await u(s.request,s._options,s._decorateResponse(o.clone()));l instanceof globalThis.Response&&(o=l)}if(s._decorateResponse(o),!o.ok&&s._options.throwHttpErrors){let u=new Z(o,s.request,s._options);for(const l of s._options.hooks.beforeError)u=await l(u);throw u}if(s._options.onDownloadProgress){if(typeof s._options.onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!et)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return s._stream(o.clone(),s._options.onDownloadProgress)}return o},c=s._options.retry.methods.includes(s.request.method.toLowerCase())?s._retry(n):n();for(const[o,u]of Object.entries(st))c[o]=async()=>{s.request.headers.set("accept",s.request.headers.get("accept")||u);const h=(await c).clone();if(o==="json"){if(h.status===204||(await h.clone().arrayBuffer()).byteLength===0)return"";if(t.parseJson)return t.parseJson(await h.text())}return h[o]()};return c}constructor(e,t={}){if(Object.defineProperty(this,"request",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"abortController",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_retryCount",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_input",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_options",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this._input=e,this._options={credentials:this._input.credentials||"same-origin",...t,headers:pe(this._input.headers,t.headers),hooks:z({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},t.hooks),method:it(t.method??this._input.method),prefixUrl:String(t.prefixUrl||""),retry:ct(t.retry),throwHttpErrors:t.throwHttpErrors!==!1,timeout:t.timeout??1e4,fetch:t.fetch??globalThis.fetch.bind(globalThis)},typeof this._input!="string"&&!(this._input instanceof URL||this._input instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&typeof this._input=="string"){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(Ze){if(this.abortController=new globalThis.AbortController,this._options.signal){const s=this._options.signal;this._options.signal.addEventListener("abort",()=>{this.abortController.abort(s.reason)})}this._options.signal=this.abortController.signal}if(Xe&&(this._options.duplex="half"),this.request=new globalThis.Request(this._input,this._options),this._options.searchParams){const n="?"+(typeof this._options.searchParams=="string"?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString()),a=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,n);(tt&&this._options.body instanceof globalThis.FormData||this._options.body instanceof URLSearchParams)&&!(this._options.headers&&this._options.headers["content-type"])&&this.request.headers.delete("content-type"),this.request=new globalThis.Request(new globalThis.Request(a,{...this.request}),this._options)}this._options.json!==void 0&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type",this._options.headers.get("content-type")??"application/json"),this.request=new globalThis.Request(this.request,{body:this._options.body}))}_calculateRetryDelay(e){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(e instanceof me)){if(e instanceof Z){if(!this._options.retry.statusCodes.includes(e.response.status))return 0;const s=e.response.headers.get("Retry-After");if(s&&this._options.retry.afterStatusCodes.includes(e.response.status)){let n=Number(s);return Number.isNaN(n)?n=Date.parse(s)-Date.now():n*=1e3,this._options.retry.maxRetryAfter!==void 0&&n>this._options.retry.maxRetryAfter?0:n}if(e.response.status===413)return 0}const t=this._options.retry.delay(this._retryCount);return Math.min(this._options.retry.backoffLimit,t)}return 0}_decorateResponse(e){return this._options.parseJson&&(e.json=async()=>this._options.parseJson(await e.text())),e}async _retry(e){try{return await e()}catch(t){const s=Math.min(this._calculateRetryDelay(t),j);if(s!==0&&this._retryCount>0){await lt(s,{signal:this._options.signal});for(const n of this._options.hooks.beforeRetry)if(await n({request:this.request,options:this._options,error:t,retryCount:this._retryCount})===ge)return;return this._retry(e)}throw t}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const s=await t(this.request,this._options);if(s instanceof Request){this.request=s;break}if(s instanceof Response)return s}const e=ht(this.request,this._options);return this._options.timeout===!1?this._options.fetch(this.request.clone(),e):ut(this.request.clone(),e,this.abortController,this._options)}_stream(e,t){const s=Number(e.headers.get("content-length"))||0;let n=0;return e.status===204?(t&&t({percent:1,totalBytes:s,transferredBytes:n},new Uint8Array),new globalThis.Response(null,{status:e.status,statusText:e.statusText,headers:e.headers})):new globalThis.Response(new globalThis.ReadableStream({async start(a){const c=e.body.getReader();t&&t({percent:0,transferredBytes:0,totalBytes:s},new Uint8Array);async function o(){const{done:u,value:l}=await c.read();if(u){a.close();return}if(t){n+=l.byteLength;const h=s===0?0:n/s;t({percent:h,transferredBytes:n,totalBytes:s},l)}a.enqueue(l),await o()}await o()}}),{status:e.status,statusText:e.statusText,headers:e.headers})}}/*! MIT License © Sindre Sorhus */const L=r=>{const e=(t,s)=>k.create(t,O(r,s));for(const t of fe)e[t]=(s,n)=>k.create(s,O(r,n,{method:t}));return e.create=t=>L(O(t)),e.extend=t=>L(O(r,t)),e.stop=ge,e},dt=L(),mt=dt,pt=typeof window<"u"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},te=mt.create({headers:pt}),ye={get:(r,e)=>te.get(r,e).json(),post:(r,e)=>te.post(r,e).json()},se=Object.values(i.Chain),ft=(r="")=>{const e=r.toUpperCase(),[t]=e.split(".");if(se.includes(t))return!0;const[s]=e.split("/");if(se.includes(s))return!0;throw new Error(`Invalid identifier: ${r}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},$=8,A=r=>10n**BigInt(r),v=r=>Math.log10(parseFloat(r.toString()));function I({value:r,bigIntDecimal:e=$,decimal:t=$}){const s=r<0n;let n=r.toString().substring(s?1:0);const a=t-(n.length-1);a>0&&(n="0".repeat(a)+n);const c=n.length-t;let o=n.slice(-t);return parseInt(o[e])>=5?o=`${o.substring(0,e-1)}${(parseInt(o[e-1])+1).toString()}`:o=o.substring(0,e),`${s?"-":""}${n.slice(0,c)}.${o}`.replace(/\.?0*$/,"")}var b,S,B,F,x,be,E,U,C,R,M,W;const Q=class Q{constructor(e){y(this,b);y(this,B);y(this,x);y(this,E);y(this,C);y(this,M);p(this,"decimalMultiplier",10n**8n);p(this,"bigIntValue",0n);p(this,"decimal");const t=V(e);this.decimal=typeof e=="object"?e.decimal:void 0,this.decimalMultiplier=A(Math.max(d(this,M,W).call(this,d(this,C,R).call(this,t)),this.decimal||0)),d(this,B,F).call(this,t)}static fromBigInt(e,t){return new Q({decimal:t,value:I({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:s}){return this.fromBigInt(e.getBaseValue("bigint")*A(s)/A(t),s)}set(e){return d(this,B,F).call(this,V(e)),this}add(...e){return d(this,b,S).call(this,"add",...e)}sub(...e){return d(this,b,S).call(this,"sub",...e)}mul(...e){return d(this,b,S).call(this,"mul",...e)}div(...e){return d(this,b,S).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||v(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/A(this.decimal||i.BaseDecimal.THOR),s=this.bigIntValue/t;switch(e){case"number":return Number(s);case"string":return s.toString();default:return s}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const s=V(e),n=d(this,C,R).call(this,s);return n==="0"||n==="undefined"?0n:d(this,E,U).call(this,n,t)}formatBigIntToSafeValue(e,t){const s=t||this.decimal||$,n=Math.max(s,v(this.decimalMultiplier)),a=e<0n,c=e.toString().substring(a?1:0),o=n-(c.length-1),u=o>0?"0".repeat(o)+c:c,l=u.length-n;let h=u.slice(-n);return parseInt(h[s])>=5?h=`${h.substring(0,s-1)}${(parseInt(h[s-1])+1).toString()}`:h=h.substring(0,s),`${a?"-":""}${u.slice(0,l)}.${h}`.replace(/\.?0*$/,"")}toSignificant(e=6){const[t,s]=this.getValue("string").split("."),n=t||"",a=s||"";if((parseInt(n)?n.length+a.length:a.length)<=e)return this.getValue("string");if(n.length>=e)return n.slice(0,e).padEnd(n.length,"0");if(parseInt(n))return`${n}.${a.slice(0,e-n.length)}`.padEnd(e-n.length,"0");const o=parseInt(a),u=`${o}`.slice(0,e);return`0.${u.padStart(a.length-`${o}`.length+u.length,"0")}`}toFixed(e=6){const[t,s]=this.getValue("string").split("."),n=t||"",a=s||"";if(parseInt(n))return`${n}.${a.slice(0,e)}`.padEnd(e,"0");const c=parseInt(a),o=`${c}`.slice(0,e);return`0.${o.padStart(a.length-`${c}`.length+o.length,"0")}`}toAbbreviation(e=2){const t=this.getValue("number"),s=["","K","M","B","T","Q","Qi","S"],n=Math.floor(Math.log10(Math.abs(t))/3),a=s[n];if(!a)return this.getValue("string");const c=10**(n*3);return`${(t/c).toFixed(e)}${a}`}toCurrency(e="$",{currencyPosition:t="start",decimal:s=2,decimalSeparator:n=".",thousandSeparator:a=","}={}){const c=this.getValue("number"),[o,u=""]=c.toFixed(6).split("."),l=o.replace(/\B(?=(\d{3})+(?!\d))/g,a),h=!o&&!u?"0.00":o==="0"?`${parseFloat(`0.${u}`)}`.replace(".",n):`${l}${u?`${n}${u.slice(0,s)}`:""}`;return`${t==="start"?e:""}${h}${t==="end"?e:""}`}};b=new WeakSet,S=function(e,...t){const s=d(this,x,be).call(this,this,...t),n=A(s),a=t.reduce((o,u)=>{const l=this.getBigIntValue(u,s);switch(e){case"add":return o+l;case"sub":return o-l;case"mul":return o*l/n;case"div":{if(l===0n)throw new RangeError("Division by zero");return o*n/l}default:return o}},this.bigIntValue*n/this.decimalMultiplier),c=I({bigIntDecimal:s,decimal:Math.max(s,v(this.decimalMultiplier)),value:a});return new this.constructor({decimal:this.decimal,value:c,identifier:this.toString()})},B=new WeakSet,F=function(e){const t=d(this,C,R).call(this,e)||"0";this.bigIntValue=d(this,E,U).call(this,t)},x=new WeakSet,be=function(...e){const t=e.map(s=>typeof s=="object"?s.decimal||v(s.decimalMultiplier):d(this,M,W).call(this,d(this,C,R).call(this,s))).filter(Boolean);return Math.max(...t,$)},E=new WeakSet,U=function(e,t){const s=t?A(t):this.decimalMultiplier,n=v(s),[a="",c=""]=e.split(".");return BigInt(`${a}${c.padEnd(n,"0")}`)},C=new WeakSet,R=function(e){const s=`${typeof e=="number"?Number(e).toLocaleString("fullwide",{useGrouping:!1,maximumFractionDigits:20}):V(e)}`.replaceAll(",",".").split(".");return s.length>1?`${s.slice(0,-1).join("")}.${s.at(-1)}`:s[0]},M=new WeakSet,W=function(e){var s;const t=((s=e.split(".")[1])==null?void 0:s.length)||0;return Math.max(t,$)};let T=Q;function V(r){return typeof r=="object"?"getValue"in r?r.getValue("string"):r.value:r}const P=(r,e)=>typeof r=="bigint"?I({value:r,bigIntDecimal:e,decimal:e}):r;let G;const re=r=>{if(!G)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return G.get(r.toUpperCase())||{decimal:i.BaseDecimal.THOR,identifier:""}},ne=async(r,e=0)=>{ft(r);const t=await oe(K(r)),s=P(e,t);return new _({decimal:t,value:s,identifier:r})},ie=new Map;class _ extends T{constructor(t){const s="identifier"in t?t.identifier:`${t.chain}.${t.symbol}`,n=ie.get(s);if(n)return n.set(t.value);super(t.value instanceof T?t.value:{decimal:t.decimal,value:t.value});p(this,"address");p(this,"isSynthetic",!1);p(this,"isGasAsset",!1);p(this,"chain");p(this,"symbol");p(this,"ticker");p(this,"type");const a=K(s);this.type=ue(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,ie.set(s,this)}toString(t=!1){const s=this.isSynthetic?this.symbol.split("-")[0]:this.ticker;return t?s:`${this.chain}.${this.symbol}`}eq({chain:t,symbol:s}){return this.chain===t&&this.symbol===s}static async fromString(t,s=0){return ne(t,s)}static fromStringSync(t,s=0){const{isSynthetic:n}=K(t),{decimal:a,identifier:c}=re(t),o=P(s,a);return c?new _({decimal:a,identifier:c,value:o}):n?new _({decimal:8,identifier:t,value:o}):void 0}static async fromIdentifier(t,s=0){return ne(t,s)}static fromIdentifierSync(t,s=0){const{decimal:n,identifier:a}=re(t),c=P(s,n);return new _({decimal:n,identifier:a,value:c})}static fromChainOrSignature(t,s=0){const{decimal:n,identifier:a}=ce(t),c=P(s,n);return new _({value:c,decimal:n,identifier:a})}static async loadStaticAssets(){return new Promise(async(t,s)=>{try{const{ThorchainList:n,NativeList:a,...c}=await import("@swapkit/tokens");G=[a,...Object.values(c)].reduce((u,{tokens:l})=>(l.forEach(({identifier:h,chain:g,...w})=>{const N="decimals"in w?w.decimals:i.BaseDecimal[g];u.set(h,{identifier:h,decimal:N})}),u),new Map),t({ok:!0})}catch(n){console.error(n),s({ok:!1,error:n,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const gt=r=>{const e=_.fromChainOrSignature(r);switch(r){case i.Chain.Bitcoin:case i.Chain.Litecoin:case i.Chain.BitcoinCash:return e.set(10001e-8);case i.Chain.Dogecoin:return e.set(1.00000001);case i.Chain.Avalanche:case i.Chain.Ethereum:return e.set(1e-8);case i.Chain.THORChain:case i.Chain.Maya:return e.set(0);default:return e.set(1e-8)}},K=r=>{const e=r.slice(0,14).includes("/"),[t,s]=r.split(".").pop().split("/"),n=r.includes(".")&&!e?r:`${i.Chain.THORChain}.${s}`,[a,c]=n.split("."),[o,u]=(e?s:c).split("-");return{address:u==null?void 0:u.toLowerCase(),chain:a,isGasAsset:Y({chain:a,symbol:c}),isSynthetic:e,symbol:(e?`${t}/`:"")+(u?`${o}-${(u==null?void 0:u.toLowerCase())??""}`:c),ticker:o}},_t={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 J extends Error{constructor(e,t){console.error(t),super(e,{cause:{code:_t[e],message:e}}),Object.setPrototypeOf(this,J.prototype)}}class f extends T{eq(e){return this.eqValue(e)}static fromBigInt(e,t){return new f({decimal:t,value:I({value:e,bigIntDecimal:t,decimal:t})})}}exports.AssetValue=_;exports.BigIntArithmetics=T;exports.RequestClient=ye;exports.SwapKitError=J;exports.SwapKitNumber=f;exports.assetFromString=Ne;exports.derivationPathToString=Qe;exports.filterAssets=je;exports.formatBigIntToSafeValue=I;exports.gasFeeMultiplier=xe;exports.getAssetType=ue;exports.getAsymmetricAssetShare=he;exports.getAsymmetricAssetWithdrawAmount=Fe;exports.getAsymmetricRuneShare=le;exports.getAsymmetricRuneWithdrawAmount=Le;exports.getCommonAssetInfo=ce;exports.getDecimal=oe;exports.getEstimatedPoolShare=We;exports.getLiquiditySlippage=Ge;exports.getMemoFor=Ye;exports.getMinAmountByChain=gt;exports.getSymmetricPoolShare=de;exports.getSymmetricWithdraw=Ue;exports.getTHORNameCost=ze;exports.isGasAsset=Y;exports.validateTHORName=Je;
|
package/dist/index.d.ts
CHANGED
|
@@ -22,15 +22,14 @@ export declare const assetFromString: (assetString: string) => {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export declare class AssetValue extends BigIntArithmetics {
|
|
25
|
+
constructor(params: AssetValueParams);
|
|
25
26
|
address?: string;
|
|
26
|
-
chain: Chain;
|
|
27
27
|
isSynthetic: boolean;
|
|
28
28
|
isGasAsset: boolean;
|
|
29
|
+
chain: Chain;
|
|
29
30
|
symbol: string;
|
|
30
31
|
ticker: string;
|
|
31
32
|
type: ReturnType<typeof getAssetType>;
|
|
32
|
-
constructor(params: AssetValueParams);
|
|
33
|
-
get assetValue(): string;
|
|
34
33
|
toString(short?: boolean): string;
|
|
35
34
|
eq({ chain, symbol }: {
|
|
36
35
|
chain: Chain;
|
package/dist/index.es.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var f = (r, t, e) => (
|
|
1
|
+
var yt = Object.defineProperty;
|
|
2
|
+
var wt = (r, t, e) => t in r ? yt(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
3
|
+
var f = (r, t, e) => (wt(r, typeof t != "symbol" ? t + "" : t, e), e), At = (r, t, e) => {
|
|
4
4
|
if (!t.has(r))
|
|
5
5
|
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
@@ -9,11 +9,11 @@ var y = (r, t, e) => {
|
|
|
9
9
|
throw TypeError("Cannot add the same private member more than once");
|
|
10
10
|
t instanceof WeakSet ? t.add(r) : t.set(r, e);
|
|
11
11
|
};
|
|
12
|
-
var
|
|
13
|
-
import { FeeOption as
|
|
14
|
-
const
|
|
12
|
+
var d = (r, t, e) => (At(r, t, "access private method"), e);
|
|
13
|
+
import { FeeOption as D, BaseDecimal as p, Chain as o, EVMChainList as vt, ChainToRPC as Tt, MemoType as g } from "@swapkit/types";
|
|
14
|
+
const $t = "0x313ce567", ot = async ({ chain: r, to: t }) => {
|
|
15
15
|
try {
|
|
16
|
-
const { result: e } = await
|
|
16
|
+
const { result: e } = await te.post(Tt[r], {
|
|
17
17
|
headers: {
|
|
18
18
|
accept: "*/*",
|
|
19
19
|
"content-type": "application/json",
|
|
@@ -23,37 +23,37 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
23
23
|
id: 44,
|
|
24
24
|
jsonrpc: "2.0",
|
|
25
25
|
method: "eth_call",
|
|
26
|
-
params: [{ to: t.toLowerCase(), data:
|
|
26
|
+
params: [{ to: t.toLowerCase(), data: $t }, "latest"]
|
|
27
27
|
})
|
|
28
28
|
});
|
|
29
29
|
return parseInt(BigInt(e).toString());
|
|
30
30
|
} catch (e) {
|
|
31
|
-
return console.error(e),
|
|
31
|
+
return console.error(e), p[r];
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, Rt = async (r) => {
|
|
34
34
|
if (r === o.Ethereum)
|
|
35
|
-
return
|
|
35
|
+
return p.ETH;
|
|
36
36
|
const [, t] = r.split("-");
|
|
37
|
-
return t != null && t.startsWith("0x") ?
|
|
38
|
-
},
|
|
37
|
+
return t != null && t.startsWith("0x") ? ot({ chain: o.Ethereum, to: t }) : p.ETH;
|
|
38
|
+
}, St = async (r) => {
|
|
39
39
|
const [, t] = r.split("-");
|
|
40
|
-
return t != null && t.startsWith("0x") ?
|
|
41
|
-
},
|
|
40
|
+
return t != null && t.startsWith("0x") ? ot({ chain: o.Avalanche, to: t.toLowerCase() }) : p.AVAX;
|
|
41
|
+
}, Ct = async (r) => r === o.BinanceSmartChain ? p.BSC : p.BSC, It = async ({ chain: r, symbol: t }) => {
|
|
42
42
|
switch (r) {
|
|
43
43
|
case o.Ethereum:
|
|
44
|
-
return $t(t);
|
|
45
|
-
case o.Avalanche:
|
|
46
44
|
return Rt(t);
|
|
47
|
-
case o.
|
|
45
|
+
case o.Avalanche:
|
|
48
46
|
return St(t);
|
|
47
|
+
case o.BinanceSmartChain:
|
|
48
|
+
return Ct(t);
|
|
49
49
|
default:
|
|
50
|
-
return
|
|
50
|
+
return p[r];
|
|
51
51
|
}
|
|
52
|
-
},
|
|
53
|
-
[
|
|
54
|
-
[
|
|
55
|
-
[
|
|
56
|
-
},
|
|
52
|
+
}, ie = {
|
|
53
|
+
[D.Average]: 1.2,
|
|
54
|
+
[D.Fast]: 1.5,
|
|
55
|
+
[D.Fastest]: 2
|
|
56
|
+
}, at = ({ chain: r, symbol: t }) => {
|
|
57
57
|
switch (r) {
|
|
58
58
|
case o.Bitcoin:
|
|
59
59
|
case o.BitcoinCash:
|
|
@@ -79,20 +79,20 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
79
79
|
case o.THORChain:
|
|
80
80
|
return t === "RUNE";
|
|
81
81
|
}
|
|
82
|
-
},
|
|
82
|
+
}, Et = (r) => {
|
|
83
83
|
switch (r) {
|
|
84
84
|
case "ETH.THOR":
|
|
85
85
|
return { identifier: "ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044", decimal: 18 };
|
|
86
86
|
case "ETH.vTHOR":
|
|
87
87
|
return { identifier: "ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d", decimal: 18 };
|
|
88
88
|
case o.Cosmos:
|
|
89
|
-
return { identifier: "GAIA.ATOM", decimal:
|
|
89
|
+
return { identifier: "GAIA.ATOM", decimal: p[r] };
|
|
90
90
|
case o.THORChain:
|
|
91
|
-
return { identifier: "THOR.RUNE", decimal:
|
|
91
|
+
return { identifier: "THOR.RUNE", decimal: p[r] };
|
|
92
92
|
case o.BinanceSmartChain:
|
|
93
|
-
return { identifier: "BSC.BNB", decimal:
|
|
93
|
+
return { identifier: "BSC.BNB", decimal: p[r] };
|
|
94
94
|
case o.Maya:
|
|
95
|
-
return { identifier: "MAYA.CACAO", decimal:
|
|
95
|
+
return { identifier: "MAYA.CACAO", decimal: p.MAYA };
|
|
96
96
|
case "MAYA.MAYA":
|
|
97
97
|
return { identifier: "MAYA.MAYA", decimal: 4 };
|
|
98
98
|
case o.Kujira:
|
|
@@ -106,9 +106,9 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
106
106
|
case o.Polygon:
|
|
107
107
|
case o.Bitcoin:
|
|
108
108
|
case o.Ethereum:
|
|
109
|
-
return { identifier: `${r}.${r}`, decimal:
|
|
109
|
+
return { identifier: `${r}.${r}`, decimal: p[r] };
|
|
110
110
|
}
|
|
111
|
-
},
|
|
111
|
+
}, Ot = ({ chain: r, symbol: t }) => {
|
|
112
112
|
if (t.includes("/"))
|
|
113
113
|
return "Synth";
|
|
114
114
|
switch (r) {
|
|
@@ -138,65 +138,65 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
138
138
|
case o.Optimism:
|
|
139
139
|
return [o.Ethereum, o.Optimism].includes(t) ? "Native" : "OPTIMISM";
|
|
140
140
|
}
|
|
141
|
-
},
|
|
141
|
+
}, oe = (r) => {
|
|
142
142
|
var c;
|
|
143
143
|
const [t, ...e] = r.split("."), s = r.includes("/"), n = e.join("."), i = (c = n == null ? void 0 : n.split("-")) == null ? void 0 : c[0];
|
|
144
144
|
return { chain: t, symbol: n, ticker: i, synth: s };
|
|
145
|
-
},
|
|
145
|
+
}, Bt = new RegExp(
|
|
146
146
|
/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,
|
|
147
147
|
"gmi"
|
|
148
|
-
),
|
|
148
|
+
), Mt = (r) => {
|
|
149
149
|
const [t, e] = r.split(".");
|
|
150
|
-
if (!
|
|
150
|
+
if (!vt.includes(t))
|
|
151
151
|
return !0;
|
|
152
152
|
const [, s] = e.split("-");
|
|
153
|
-
return
|
|
154
|
-
},
|
|
153
|
+
return at({ chain: t, symbol: e }) || !!s;
|
|
154
|
+
}, ae = (r) => r.filter((t) => {
|
|
155
155
|
const e = `${t.chain}.${t.symbol}`;
|
|
156
|
-
return !
|
|
157
|
-
}),
|
|
156
|
+
return !Bt.test(e) && Mt(e) && t.value !== "0";
|
|
157
|
+
}), Vt = ({
|
|
158
158
|
liquidityUnits: r,
|
|
159
159
|
poolUnits: t,
|
|
160
160
|
runeDepth: e
|
|
161
161
|
}) => {
|
|
162
|
-
const s =
|
|
162
|
+
const s = m(r), n = m(t), i = m(e), c = s.mul(i), a = n.mul(n).mul(2), u = n.mul(s).mul(2), l = s.mul(s), h = n.mul(n).mul(n);
|
|
163
163
|
return c.mul(a.sub(u).add(l)).div(h);
|
|
164
|
-
},
|
|
164
|
+
}, qt = ({
|
|
165
165
|
liquidityUnits: r,
|
|
166
166
|
poolUnits: t,
|
|
167
167
|
assetDepth: e
|
|
168
168
|
}) => {
|
|
169
|
-
const s =
|
|
169
|
+
const s = m(r), n = m(t), i = m(e), c = s.mul(i), a = n.mul(n).mul(2), u = n.mul(s).mul(2), l = s.mul(s), h = c.mul(a.sub(u).add(l)), _ = n.mul(n).mul(n);
|
|
170
170
|
return h.div(_);
|
|
171
|
-
},
|
|
171
|
+
}, ce = ({
|
|
172
172
|
percent: r,
|
|
173
173
|
runeDepth: t,
|
|
174
174
|
liquidityUnits: e,
|
|
175
175
|
poolUnits: s
|
|
176
|
-
}) =>
|
|
176
|
+
}) => Vt({ runeDepth: t, liquidityUnits: e, poolUnits: s }).mul(r), ue = ({
|
|
177
177
|
percent: r,
|
|
178
178
|
assetDepth: t,
|
|
179
179
|
liquidityUnits: e,
|
|
180
180
|
poolUnits: s
|
|
181
|
-
}) =>
|
|
181
|
+
}) => qt({ assetDepth: t, liquidityUnits: e, poolUnits: s }).mul(r), m = (r) => b.fromBigInt(BigInt(r), p.THOR), xt = ({
|
|
182
182
|
liquidityUnits: r,
|
|
183
183
|
poolUnits: t,
|
|
184
184
|
runeDepth: e,
|
|
185
185
|
assetDepth: s
|
|
186
186
|
}) => ({
|
|
187
|
-
assetAmount:
|
|
188
|
-
runeAmount:
|
|
189
|
-
}),
|
|
187
|
+
assetAmount: m(s).mul(r).div(t),
|
|
188
|
+
runeAmount: m(e).mul(r).div(t)
|
|
189
|
+
}), le = ({
|
|
190
190
|
liquidityUnits: r,
|
|
191
191
|
poolUnits: t,
|
|
192
192
|
runeDepth: e,
|
|
193
193
|
assetDepth: s,
|
|
194
194
|
percent: n
|
|
195
195
|
}) => Object.fromEntries(
|
|
196
|
-
Object.entries(
|
|
196
|
+
Object.entries(xt({ liquidityUnits: r, poolUnits: t, runeDepth: e, assetDepth: s })).map(
|
|
197
197
|
([i, c]) => [i, c.mul(n)]
|
|
198
198
|
)
|
|
199
|
-
),
|
|
199
|
+
), he = ({
|
|
200
200
|
runeDepth: r,
|
|
201
201
|
poolUnits: t,
|
|
202
202
|
assetDepth: e,
|
|
@@ -204,12 +204,12 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
204
204
|
runeAmount: n,
|
|
205
205
|
assetAmount: i
|
|
206
206
|
}) => {
|
|
207
|
-
const c = new b({ value: r, decimal: 8 }), a = new b({ value: e, decimal: 8 }), u = new b({ value: t, decimal: 8 }), l = new b({ value: n, decimal: 8 }), h = new b({ value: i, decimal: 8 }), _ = l.mul(a), T = h.mul(c),
|
|
208
|
-
if (
|
|
209
|
-
return
|
|
210
|
-
const
|
|
211
|
-
return
|
|
212
|
-
},
|
|
207
|
+
const c = new b({ value: r, decimal: 8 }), a = new b({ value: e, decimal: 8 }), u = new b({ value: t, decimal: 8 }), l = new b({ value: n, decimal: 8 }), h = new b({ value: i, decimal: 8 }), _ = l.mul(a), T = h.mul(c), H = l.mul(h), ft = c.mul(a), _t = u.mul(_.add(T.add(H.mul(2)))), gt = _.add(T.add(ft.mul(2))), X = _t.div(gt), L = m(s).add(X);
|
|
208
|
+
if (X.getBaseValue("number") === 0)
|
|
209
|
+
return L.div(u).getBaseValue("number");
|
|
210
|
+
const bt = u.add(L);
|
|
211
|
+
return L.div(bt).getBaseValue("number");
|
|
212
|
+
}, de = ({
|
|
213
213
|
runeAmount: r,
|
|
214
214
|
assetAmount: t,
|
|
215
215
|
runeDepth: e,
|
|
@@ -217,13 +217,13 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
217
217
|
}) => {
|
|
218
218
|
if (r === "0" || t === "0" || e === "0" || s === "0")
|
|
219
219
|
return 0;
|
|
220
|
-
const n =
|
|
220
|
+
const n = m(e), i = m(s), c = m(t), a = m(r), u = c.mul(n).sub(i.mul(a)), l = i.mul(a).add(n.mul(i));
|
|
221
221
|
return Math.abs(u.div(l).getBaseValue("number"));
|
|
222
222
|
}, kt = ({
|
|
223
223
|
symbol: r,
|
|
224
224
|
ticker: t,
|
|
225
225
|
chain: e
|
|
226
|
-
}) => e === "ETH" && t !== "ETH" ? `${t}-${r.slice(-3)}` : r,
|
|
226
|
+
}) => e === "ETH" && t !== "ETH" ? `${t}-${r.slice(-3)}` : r, pe = (r, t) => {
|
|
227
227
|
switch (r) {
|
|
228
228
|
case g.LEAVE:
|
|
229
229
|
case g.BOND: {
|
|
@@ -258,13 +258,13 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
258
258
|
if (r < 0)
|
|
259
259
|
throw new Error("Invalid number of year");
|
|
260
260
|
return 10 + r;
|
|
261
|
-
},
|
|
261
|
+
}, fe = (r) => {
|
|
262
262
|
if (r.length > 30)
|
|
263
263
|
return !1;
|
|
264
264
|
const t = /^[a-zA-Z0-9+_-]+$/g;
|
|
265
265
|
return !!r.match(t);
|
|
266
|
-
},
|
|
267
|
-
class
|
|
266
|
+
}, _e = ([r, t, e, s, n]) => `${r}'/${t}'/${e}'/${s}${typeof n != "number" ? "" : `/${n}`}`;
|
|
267
|
+
class Z extends Error {
|
|
268
268
|
constructor(t, e, s) {
|
|
269
269
|
const n = t.status || t.status === 0 ? t.status : "", i = t.statusText || "", c = `${n} ${i}`.trim(), a = c ? `status code ${c}` : "an unknown error";
|
|
270
270
|
super(`Request failed with ${a}`), Object.defineProperty(this, "response", {
|
|
@@ -285,7 +285,7 @@ class X extends Error {
|
|
|
285
285
|
}), this.name = "HTTPError", this.response = t, this.request = e, this.options = s;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
class
|
|
288
|
+
class ct extends Error {
|
|
289
289
|
constructor(t) {
|
|
290
290
|
super("Request timed out"), Object.defineProperty(this, "request", {
|
|
291
291
|
enumerable: !0,
|
|
@@ -295,28 +295,28 @@ class ot extends Error {
|
|
|
295
295
|
}), this.name = "TimeoutError", this.request = t;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
const
|
|
298
|
+
const x = (r) => r !== null && typeof r == "object", V = (...r) => {
|
|
299
299
|
for (const t of r)
|
|
300
|
-
if ((!
|
|
300
|
+
if ((!x(t) || Array.isArray(t)) && t !== void 0)
|
|
301
301
|
throw new TypeError("The `options` argument must be an object");
|
|
302
|
-
return
|
|
303
|
-
},
|
|
302
|
+
return K({}, ...r);
|
|
303
|
+
}, ut = (r = {}, t = {}) => {
|
|
304
304
|
const e = new globalThis.Headers(r), s = t instanceof globalThis.Headers, n = new globalThis.Headers(t);
|
|
305
305
|
for (const [i, c] of n.entries())
|
|
306
306
|
s && c === "undefined" || c === void 0 ? e.delete(i) : e.set(i, c);
|
|
307
307
|
return e;
|
|
308
|
-
},
|
|
308
|
+
}, K = (...r) => {
|
|
309
309
|
let t = {}, e = {};
|
|
310
310
|
for (const s of r)
|
|
311
311
|
if (Array.isArray(s))
|
|
312
312
|
Array.isArray(t) || (t = []), t = [...t, ...s];
|
|
313
|
-
else if (
|
|
313
|
+
else if (x(s)) {
|
|
314
314
|
for (let [n, i] of Object.entries(s))
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
x(i) && n in t && (i = K(t[n], i)), t = { ...t, [n]: i };
|
|
316
|
+
x(s.headers) && (e = ut(e, s.headers), t.headers = e);
|
|
317
317
|
}
|
|
318
318
|
return t;
|
|
319
|
-
},
|
|
319
|
+
}, Pt = (() => {
|
|
320
320
|
let r = !1, t = !1;
|
|
321
321
|
const e = typeof globalThis.ReadableStream == "function", s = typeof globalThis.Request == "function";
|
|
322
322
|
return e && s && (t = new globalThis.Request("https://empty.invalid", {
|
|
@@ -327,13 +327,13 @@ const V = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
327
327
|
return r = !0, "half";
|
|
328
328
|
}
|
|
329
329
|
}).headers.has("Content-Type")), r && !t;
|
|
330
|
-
})(),
|
|
330
|
+
})(), Nt = typeof globalThis.AbortController == "function", jt = typeof globalThis.ReadableStream == "function", Ht = typeof globalThis.FormData == "function", lt = ["get", "post", "put", "patch", "head", "delete"], Lt = {
|
|
331
331
|
json: "application/json",
|
|
332
332
|
text: "text/*",
|
|
333
333
|
formData: "multipart/form-data",
|
|
334
334
|
arrayBuffer: "*/*",
|
|
335
335
|
blob: "*/*"
|
|
336
|
-
},
|
|
336
|
+
}, U = 2147483647, ht = Symbol("stop"), Dt = {
|
|
337
337
|
json: !0,
|
|
338
338
|
parseJson: !0,
|
|
339
339
|
searchParams: !0,
|
|
@@ -344,7 +344,7 @@ const V = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
344
344
|
throwHttpErrors: !0,
|
|
345
345
|
onDownloadProgress: !0,
|
|
346
346
|
fetch: !0
|
|
347
|
-
},
|
|
347
|
+
}, Ut = {
|
|
348
348
|
method: !0,
|
|
349
349
|
headers: !0,
|
|
350
350
|
body: !0,
|
|
@@ -360,18 +360,18 @@ const V = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
360
360
|
window: !0,
|
|
361
361
|
dispatcher: !0,
|
|
362
362
|
duplex: !0
|
|
363
|
-
},
|
|
363
|
+
}, Ft = (r) => lt.includes(r) ? r.toUpperCase() : r, Wt = ["get", "put", "head", "delete", "options", "trace"], Gt = [408, 413, 429, 500, 502, 503, 504], dt = [413, 429, 503], tt = {
|
|
364
364
|
limit: 2,
|
|
365
|
-
methods:
|
|
366
|
-
statusCodes:
|
|
367
|
-
afterStatusCodes:
|
|
365
|
+
methods: Wt,
|
|
366
|
+
statusCodes: Gt,
|
|
367
|
+
afterStatusCodes: dt,
|
|
368
368
|
maxRetryAfter: Number.POSITIVE_INFINITY,
|
|
369
369
|
backoffLimit: Number.POSITIVE_INFINITY,
|
|
370
370
|
delay: (r) => 0.3 * 2 ** (r - 1) * 1e3
|
|
371
|
-
},
|
|
371
|
+
}, Yt = (r = {}) => {
|
|
372
372
|
if (typeof r == "number")
|
|
373
373
|
return {
|
|
374
|
-
...
|
|
374
|
+
...tt,
|
|
375
375
|
limit: r
|
|
376
376
|
};
|
|
377
377
|
if (r.methods && !Array.isArray(r.methods))
|
|
@@ -379,22 +379,22 @@ const V = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
379
379
|
if (r.statusCodes && !Array.isArray(r.statusCodes))
|
|
380
380
|
throw new Error("retry.statusCodes must be an array");
|
|
381
381
|
return {
|
|
382
|
-
...
|
|
382
|
+
...tt,
|
|
383
383
|
...r,
|
|
384
|
-
afterStatusCodes:
|
|
384
|
+
afterStatusCodes: dt
|
|
385
385
|
};
|
|
386
386
|
};
|
|
387
|
-
async function
|
|
387
|
+
async function zt(r, t, e, s) {
|
|
388
388
|
return new Promise((n, i) => {
|
|
389
389
|
const c = setTimeout(() => {
|
|
390
|
-
e && e.abort(), i(new
|
|
390
|
+
e && e.abort(), i(new ct(r));
|
|
391
391
|
}, s.timeout);
|
|
392
392
|
s.fetch(r, t).then(n).catch(i).then(() => {
|
|
393
393
|
clearTimeout(c);
|
|
394
394
|
});
|
|
395
395
|
});
|
|
396
396
|
}
|
|
397
|
-
async function
|
|
397
|
+
async function Jt(r, { signal: t }) {
|
|
398
398
|
return new Promise((e, s) => {
|
|
399
399
|
t && (t.throwIfAborted(), t.addEventListener("abort", n, { once: !0 }));
|
|
400
400
|
function n() {
|
|
@@ -405,17 +405,17 @@ async function zt(r, { signal: t }) {
|
|
|
405
405
|
}, r);
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
|
-
const
|
|
408
|
+
const Kt = (r, t) => {
|
|
409
409
|
const e = {};
|
|
410
410
|
for (const s in t)
|
|
411
|
-
!(s in
|
|
411
|
+
!(s in Ut) && !(s in Dt) && !(s in r) && (e[s] = t[s]);
|
|
412
412
|
return e;
|
|
413
413
|
};
|
|
414
|
-
class
|
|
414
|
+
class P {
|
|
415
415
|
static create(t, e) {
|
|
416
|
-
const s = new
|
|
417
|
-
if (typeof s._options.timeout == "number" && s._options.timeout >
|
|
418
|
-
throw new RangeError(`The \`timeout\` option cannot be greater than ${
|
|
416
|
+
const s = new P(t, e), n = async () => {
|
|
417
|
+
if (typeof s._options.timeout == "number" && s._options.timeout > U)
|
|
418
|
+
throw new RangeError(`The \`timeout\` option cannot be greater than ${U}`);
|
|
419
419
|
await Promise.resolve();
|
|
420
420
|
let a = await s._fetch();
|
|
421
421
|
for (const u of s._options.hooks.afterResponse) {
|
|
@@ -423,7 +423,7 @@ class k {
|
|
|
423
423
|
l instanceof globalThis.Response && (a = l);
|
|
424
424
|
}
|
|
425
425
|
if (s._decorateResponse(a), !a.ok && s._options.throwHttpErrors) {
|
|
426
|
-
let u = new
|
|
426
|
+
let u = new Z(a, s.request, s._options);
|
|
427
427
|
for (const l of s._options.hooks.beforeError)
|
|
428
428
|
u = await l(u);
|
|
429
429
|
throw u;
|
|
@@ -431,13 +431,13 @@ class k {
|
|
|
431
431
|
if (s._options.onDownloadProgress) {
|
|
432
432
|
if (typeof s._options.onDownloadProgress != "function")
|
|
433
433
|
throw new TypeError("The `onDownloadProgress` option must be a function");
|
|
434
|
-
if (!
|
|
434
|
+
if (!jt)
|
|
435
435
|
throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");
|
|
436
436
|
return s._stream(a.clone(), s._options.onDownloadProgress);
|
|
437
437
|
}
|
|
438
438
|
return a;
|
|
439
439
|
}, c = s._options.retry.methods.includes(s.request.method.toLowerCase()) ? s._retry(n) : n();
|
|
440
|
-
for (const [a, u] of Object.entries(
|
|
440
|
+
for (const [a, u] of Object.entries(Lt))
|
|
441
441
|
c[a] = async () => {
|
|
442
442
|
s.request.headers.set("accept", s.request.headers.get("accept") || u);
|
|
443
443
|
const h = (await c).clone();
|
|
@@ -482,17 +482,17 @@ class k {
|
|
|
482
482
|
// TODO: credentials can be removed when the spec change is implemented in all browsers. Context: https://www.chromestatus.com/feature/4539473312350208
|
|
483
483
|
credentials: this._input.credentials || "same-origin",
|
|
484
484
|
...e,
|
|
485
|
-
headers:
|
|
486
|
-
hooks:
|
|
485
|
+
headers: ut(this._input.headers, e.headers),
|
|
486
|
+
hooks: K({
|
|
487
487
|
beforeRequest: [],
|
|
488
488
|
beforeRetry: [],
|
|
489
489
|
beforeError: [],
|
|
490
490
|
afterResponse: []
|
|
491
491
|
}, e.hooks),
|
|
492
|
-
method:
|
|
492
|
+
method: Ft(e.method ?? this._input.method),
|
|
493
493
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
494
494
|
prefixUrl: String(e.prefixUrl || ""),
|
|
495
|
-
retry:
|
|
495
|
+
retry: Yt(e.retry),
|
|
496
496
|
throwHttpErrors: e.throwHttpErrors !== !1,
|
|
497
497
|
timeout: e.timeout ?? 1e4,
|
|
498
498
|
fetch: e.fetch ?? globalThis.fetch.bind(globalThis)
|
|
@@ -503,7 +503,7 @@ class k {
|
|
|
503
503
|
throw new Error("`input` must not begin with a slash when using `prefixUrl`");
|
|
504
504
|
this._options.prefixUrl.endsWith("/") || (this._options.prefixUrl += "/"), this._input = this._options.prefixUrl + this._input;
|
|
505
505
|
}
|
|
506
|
-
if (
|
|
506
|
+
if (Nt) {
|
|
507
507
|
if (this.abortController = new globalThis.AbortController(), this._options.signal) {
|
|
508
508
|
const s = this._options.signal;
|
|
509
509
|
this._options.signal.addEventListener("abort", () => {
|
|
@@ -512,15 +512,15 @@ class k {
|
|
|
512
512
|
}
|
|
513
513
|
this._options.signal = this.abortController.signal;
|
|
514
514
|
}
|
|
515
|
-
if (
|
|
515
|
+
if (Pt && (this._options.duplex = "half"), this.request = new globalThis.Request(this._input, this._options), this._options.searchParams) {
|
|
516
516
|
const n = "?" + (typeof this._options.searchParams == "string" ? this._options.searchParams.replace(/^\?/, "") : new URLSearchParams(this._options.searchParams).toString()), i = this.request.url.replace(/(?:\?.*?)?(?=#|$)/, n);
|
|
517
|
-
(
|
|
517
|
+
(Ht && this._options.body instanceof globalThis.FormData || this._options.body instanceof URLSearchParams) && !(this._options.headers && this._options.headers["content-type"]) && this.request.headers.delete("content-type"), this.request = new globalThis.Request(new globalThis.Request(i, { ...this.request }), this._options);
|
|
518
518
|
}
|
|
519
519
|
this._options.json !== void 0 && (this._options.body = JSON.stringify(this._options.json), this.request.headers.set("content-type", this._options.headers.get("content-type") ?? "application/json"), this.request = new globalThis.Request(this.request, { body: this._options.body }));
|
|
520
520
|
}
|
|
521
521
|
_calculateRetryDelay(t) {
|
|
522
|
-
if (this._retryCount++, this._retryCount < this._options.retry.limit && !(t instanceof
|
|
523
|
-
if (t instanceof
|
|
522
|
+
if (this._retryCount++, this._retryCount < this._options.retry.limit && !(t instanceof ct)) {
|
|
523
|
+
if (t instanceof Z) {
|
|
524
524
|
if (!this._options.retry.statusCodes.includes(t.response.status))
|
|
525
525
|
return 0;
|
|
526
526
|
const s = t.response.headers.get("Retry-After");
|
|
@@ -543,16 +543,16 @@ class k {
|
|
|
543
543
|
try {
|
|
544
544
|
return await t();
|
|
545
545
|
} catch (e) {
|
|
546
|
-
const s = Math.min(this._calculateRetryDelay(e),
|
|
546
|
+
const s = Math.min(this._calculateRetryDelay(e), U);
|
|
547
547
|
if (s !== 0 && this._retryCount > 0) {
|
|
548
|
-
await
|
|
548
|
+
await Jt(s, { signal: this._options.signal });
|
|
549
549
|
for (const n of this._options.hooks.beforeRetry)
|
|
550
550
|
if (await n({
|
|
551
551
|
request: this.request,
|
|
552
552
|
options: this._options,
|
|
553
553
|
error: e,
|
|
554
554
|
retryCount: this._retryCount
|
|
555
|
-
}) ===
|
|
555
|
+
}) === ht)
|
|
556
556
|
return;
|
|
557
557
|
return this._retry(t);
|
|
558
558
|
}
|
|
@@ -569,8 +569,8 @@ class k {
|
|
|
569
569
|
if (s instanceof Response)
|
|
570
570
|
return s;
|
|
571
571
|
}
|
|
572
|
-
const t =
|
|
573
|
-
return this._options.timeout === !1 ? this._options.fetch(this.request.clone(), t) :
|
|
572
|
+
const t = Kt(this.request, this._options);
|
|
573
|
+
return this._options.timeout === !1 ? this._options.fetch(this.request.clone(), t) : zt(this.request.clone(), t, this.abortController, this._options);
|
|
574
574
|
}
|
|
575
575
|
/* istanbul ignore next */
|
|
576
576
|
_stream(t, e) {
|
|
@@ -608,25 +608,25 @@ class k {
|
|
|
608
608
|
}
|
|
609
609
|
/*! MIT License © Sindre Sorhus */
|
|
610
610
|
const F = (r) => {
|
|
611
|
-
const t = (e, s) =>
|
|
612
|
-
for (const e of
|
|
613
|
-
t[e] = (s, n) =>
|
|
614
|
-
return t.create = (e) => F(
|
|
615
|
-
},
|
|
616
|
-
get: (r, t) =>
|
|
617
|
-
post: (r, t) =>
|
|
618
|
-
},
|
|
611
|
+
const t = (e, s) => P.create(e, V(r, s));
|
|
612
|
+
for (const e of lt)
|
|
613
|
+
t[e] = (s, n) => P.create(s, V(r, n, { method: e }));
|
|
614
|
+
return t.create = (e) => F(V(e)), t.extend = (e) => F(V(r, e)), t.stop = ht, t;
|
|
615
|
+
}, Qt = F(), Xt = Qt, Zt = typeof window < "u" ? {} : { referrer: "https://sk.thorswap.net", referer: "https://sk.thorswap.net" }, et = Xt.create({ headers: Zt }), te = {
|
|
616
|
+
get: (r, t) => et.get(r, t).json(),
|
|
617
|
+
post: (r, t) => et.post(r, t).json()
|
|
618
|
+
}, st = Object.values(o), ee = (r = "") => {
|
|
619
619
|
const t = r.toUpperCase(), [e] = t.split(".");
|
|
620
|
-
if (
|
|
620
|
+
if (st.includes(e))
|
|
621
621
|
return !0;
|
|
622
622
|
const [s] = t.split("/");
|
|
623
|
-
if (
|
|
623
|
+
if (st.includes(s))
|
|
624
624
|
return !0;
|
|
625
625
|
throw new Error(
|
|
626
626
|
`Invalid identifier: ${r}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`
|
|
627
627
|
);
|
|
628
628
|
}, I = 8, $ = (r) => 10n ** BigInt(r), R = (r) => Math.log10(parseFloat(r.toString()));
|
|
629
|
-
function
|
|
629
|
+
function N({
|
|
630
630
|
value: r,
|
|
631
631
|
bigIntDecimal: t = I,
|
|
632
632
|
decimal: e = I
|
|
@@ -642,27 +642,27 @@ function x({
|
|
|
642
642
|
""
|
|
643
643
|
);
|
|
644
644
|
}
|
|
645
|
-
var A, S,
|
|
646
|
-
const
|
|
645
|
+
var A, S, O, W, j, pt, B, G, v, C, M, Y;
|
|
646
|
+
const Q = class Q {
|
|
647
647
|
constructor(t) {
|
|
648
648
|
y(this, A);
|
|
649
|
-
y(this, P);
|
|
650
|
-
y(this, N);
|
|
651
649
|
y(this, O);
|
|
652
|
-
y(this,
|
|
650
|
+
y(this, j);
|
|
653
651
|
y(this, B);
|
|
652
|
+
y(this, v);
|
|
653
|
+
y(this, M);
|
|
654
654
|
f(this, "decimalMultiplier", 10n ** 8n);
|
|
655
655
|
f(this, "bigIntValue", 0n);
|
|
656
656
|
f(this, "decimal");
|
|
657
|
-
const e =
|
|
657
|
+
const e = q(t);
|
|
658
658
|
this.decimal = typeof t == "object" ? t.decimal : void 0, this.decimalMultiplier = $(
|
|
659
|
-
Math.max(
|
|
660
|
-
),
|
|
659
|
+
Math.max(d(this, M, Y).call(this, d(this, v, C).call(this, e)), this.decimal || 0)
|
|
660
|
+
), d(this, O, W).call(this, e);
|
|
661
661
|
}
|
|
662
662
|
static fromBigInt(t, e) {
|
|
663
|
-
return new
|
|
663
|
+
return new Q({
|
|
664
664
|
decimal: e,
|
|
665
|
-
value:
|
|
665
|
+
value: N({ value: t, bigIntDecimal: e, decimal: e })
|
|
666
666
|
});
|
|
667
667
|
}
|
|
668
668
|
static shiftDecimals({
|
|
@@ -676,19 +676,19 @@ const K = class K {
|
|
|
676
676
|
);
|
|
677
677
|
}
|
|
678
678
|
set(t) {
|
|
679
|
-
return
|
|
679
|
+
return d(this, O, W).call(this, q(t)), this;
|
|
680
680
|
}
|
|
681
681
|
add(...t) {
|
|
682
|
-
return
|
|
682
|
+
return d(this, A, S).call(this, "add", ...t);
|
|
683
683
|
}
|
|
684
684
|
sub(...t) {
|
|
685
|
-
return
|
|
685
|
+
return d(this, A, S).call(this, "sub", ...t);
|
|
686
686
|
}
|
|
687
687
|
mul(...t) {
|
|
688
|
-
return
|
|
688
|
+
return d(this, A, S).call(this, "mul", ...t);
|
|
689
689
|
}
|
|
690
690
|
div(...t) {
|
|
691
|
-
return
|
|
691
|
+
return d(this, A, S).call(this, "div", ...t);
|
|
692
692
|
}
|
|
693
693
|
gt(t) {
|
|
694
694
|
return this.bigIntValue > this.getBigIntValue(t);
|
|
@@ -720,7 +720,7 @@ const K = class K {
|
|
|
720
720
|
}
|
|
721
721
|
}
|
|
722
722
|
getBaseValue(t) {
|
|
723
|
-
const e = this.decimalMultiplier / $(this.decimal ||
|
|
723
|
+
const e = this.decimalMultiplier / $(this.decimal || p.THOR), s = this.bigIntValue / e;
|
|
724
724
|
switch (t) {
|
|
725
725
|
case "number":
|
|
726
726
|
return Number(s);
|
|
@@ -733,8 +733,8 @@ const K = class K {
|
|
|
733
733
|
getBigIntValue(t, e) {
|
|
734
734
|
if (!e && typeof t == "object")
|
|
735
735
|
return t.bigIntValue;
|
|
736
|
-
const s =
|
|
737
|
-
return n === "0" || n === "undefined" ? 0n :
|
|
736
|
+
const s = q(t), n = d(this, v, C).call(this, s);
|
|
737
|
+
return n === "0" || n === "undefined" ? 0n : d(this, B, G).call(this, n, e);
|
|
738
738
|
}
|
|
739
739
|
formatBigIntToSafeValue(t, e) {
|
|
740
740
|
const s = e || this.decimal || I, n = Math.max(
|
|
@@ -792,7 +792,7 @@ const K = class K {
|
|
|
792
792
|
}
|
|
793
793
|
};
|
|
794
794
|
A = new WeakSet(), S = function(t, ...e) {
|
|
795
|
-
const s =
|
|
795
|
+
const s = d(this, j, pt).call(this, this, ...e), n = $(s), i = e.reduce(
|
|
796
796
|
(a, u) => {
|
|
797
797
|
const l = this.getBigIntValue(u, s);
|
|
798
798
|
switch (t) {
|
|
@@ -813,70 +813,73 @@ A = new WeakSet(), S = function(t, ...e) {
|
|
|
813
813
|
},
|
|
814
814
|
//normalize is to precision multiplier base
|
|
815
815
|
this.bigIntValue * n / this.decimalMultiplier
|
|
816
|
-
), c =
|
|
816
|
+
), c = N({
|
|
817
817
|
bigIntDecimal: s,
|
|
818
818
|
decimal: Math.max(s, R(this.decimalMultiplier)),
|
|
819
819
|
value: i
|
|
820
820
|
});
|
|
821
821
|
return new this.constructor({ decimal: this.decimal, value: c, identifier: this.toString() });
|
|
822
|
-
},
|
|
823
|
-
const e =
|
|
824
|
-
this.bigIntValue =
|
|
825
|
-
},
|
|
822
|
+
}, O = new WeakSet(), W = function(t) {
|
|
823
|
+
const e = d(this, v, C).call(this, t) || "0";
|
|
824
|
+
this.bigIntValue = d(this, B, G).call(this, e);
|
|
825
|
+
}, j = new WeakSet(), pt = function(...t) {
|
|
826
826
|
const e = t.map(
|
|
827
|
-
(s) => typeof s == "object" ? s.decimal || R(s.decimalMultiplier) :
|
|
827
|
+
(s) => typeof s == "object" ? s.decimal || R(s.decimalMultiplier) : d(this, M, Y).call(this, d(this, v, C).call(this, s))
|
|
828
828
|
).filter(Boolean);
|
|
829
829
|
return Math.max(...e, I);
|
|
830
|
-
},
|
|
830
|
+
}, B = new WeakSet(), G = function(t, e) {
|
|
831
831
|
const s = e ? $(e) : this.decimalMultiplier, n = R(s), [i = "", c = ""] = t.split(".");
|
|
832
832
|
return BigInt(`${i}${c.padEnd(n, "0")}`);
|
|
833
833
|
}, v = new WeakSet(), C = function(t) {
|
|
834
834
|
const s = `${typeof t == "number" ? Number(t).toLocaleString("fullwide", {
|
|
835
835
|
useGrouping: !1,
|
|
836
836
|
maximumFractionDigits: 20
|
|
837
|
-
}) :
|
|
837
|
+
}) : q(t)}`.replaceAll(",", ".").split(".");
|
|
838
838
|
return s.length > 1 ? `${s.slice(0, -1).join("")}.${s.at(-1)}` : s[0];
|
|
839
|
-
},
|
|
839
|
+
}, M = new WeakSet(), Y = function(t) {
|
|
840
840
|
var s;
|
|
841
841
|
const e = ((s = t.split(".")[1]) == null ? void 0 : s.length) || 0;
|
|
842
842
|
return Math.max(e, I);
|
|
843
843
|
};
|
|
844
|
-
let E =
|
|
845
|
-
function
|
|
844
|
+
let E = Q;
|
|
845
|
+
function q(r) {
|
|
846
846
|
return typeof r == "object" ? "getValue" in r ? r.getValue("string") : r.value : r;
|
|
847
847
|
}
|
|
848
|
-
const
|
|
849
|
-
let
|
|
850
|
-
const
|
|
851
|
-
if (!
|
|
848
|
+
const k = (r, t) => typeof r == "bigint" ? N({ value: r, bigIntDecimal: t, decimal: t }) : r;
|
|
849
|
+
let z;
|
|
850
|
+
const rt = (r) => {
|
|
851
|
+
if (!z)
|
|
852
852
|
throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");
|
|
853
|
-
return
|
|
854
|
-
},
|
|
855
|
-
|
|
856
|
-
const e = await
|
|
853
|
+
return z.get(r.toUpperCase()) || { decimal: p.THOR, identifier: "" };
|
|
854
|
+
}, nt = async (r, t = 0) => {
|
|
855
|
+
ee(r);
|
|
856
|
+
const e = await It(J(r)), s = k(t, e);
|
|
857
857
|
return new w({ decimal: e, value: s, identifier: r });
|
|
858
|
-
};
|
|
858
|
+
}, it = /* @__PURE__ */ new Map();
|
|
859
859
|
class w extends E {
|
|
860
860
|
constructor(e) {
|
|
861
|
-
const s = "identifier" in e ? e.identifier : `${e.chain}.${e.symbol}
|
|
861
|
+
const s = "identifier" in e ? e.identifier : `${e.chain}.${e.symbol}`, n = it.get(s);
|
|
862
|
+
if (n)
|
|
863
|
+
return n.set(e.value);
|
|
862
864
|
super(
|
|
863
865
|
e.value instanceof E ? e.value : { decimal: e.decimal, value: e.value }
|
|
864
866
|
);
|
|
865
867
|
f(this, "address");
|
|
866
|
-
f(this, "chain");
|
|
867
868
|
f(this, "isSynthetic", !1);
|
|
868
869
|
f(this, "isGasAsset", !1);
|
|
870
|
+
// @ts-expect-error cache is false positive on that case
|
|
871
|
+
f(this, "chain");
|
|
872
|
+
// @ts-expect-error cache is false positive on that case
|
|
869
873
|
f(this, "symbol");
|
|
874
|
+
// @ts-expect-error cache is false positive on that case
|
|
870
875
|
f(this, "ticker");
|
|
876
|
+
// @ts-expect-error cache is false positive on that case
|
|
871
877
|
f(this, "type");
|
|
872
|
-
const
|
|
873
|
-
this.type =
|
|
874
|
-
}
|
|
875
|
-
get assetValue() {
|
|
876
|
-
return `${this.getValue("string")} ${this.ticker}`;
|
|
878
|
+
const i = J(s);
|
|
879
|
+
this.type = Ot(i), this.chain = i.chain, this.ticker = i.ticker, this.symbol = i.symbol, this.address = i.address, this.isSynthetic = i.isSynthetic, this.isGasAsset = i.isGasAsset, it.set(s, this);
|
|
877
880
|
}
|
|
878
881
|
toString(e = !1) {
|
|
879
|
-
const s = this.isSynthetic ? this.symbol.split("-")[0] :
|
|
882
|
+
const s = this.isSynthetic ? this.symbol.split("-")[0] : this.ticker;
|
|
880
883
|
return e ? s : (
|
|
881
884
|
// THOR.ETH/ETH | ETH.USDT-0x1234567890
|
|
882
885
|
`${this.chain}.${this.symbol}`
|
|
@@ -886,23 +889,23 @@ class w extends E {
|
|
|
886
889
|
return this.chain === e && this.symbol === s;
|
|
887
890
|
}
|
|
888
891
|
static async fromString(e, s = 0) {
|
|
889
|
-
return
|
|
892
|
+
return nt(e, s);
|
|
890
893
|
}
|
|
891
894
|
static fromStringSync(e, s = 0) {
|
|
892
|
-
const { isSynthetic: n } =
|
|
895
|
+
const { isSynthetic: n } = J(e), { decimal: i, identifier: c } = rt(
|
|
893
896
|
e
|
|
894
|
-
), a =
|
|
897
|
+
), a = k(s, i);
|
|
895
898
|
return c ? new w({ decimal: i, identifier: c, value: a }) : n ? new w({ decimal: 8, identifier: e, value: a }) : void 0;
|
|
896
899
|
}
|
|
897
900
|
static async fromIdentifier(e, s = 0) {
|
|
898
|
-
return
|
|
901
|
+
return nt(e, s);
|
|
899
902
|
}
|
|
900
903
|
static fromIdentifierSync(e, s = 0) {
|
|
901
|
-
const { decimal: n, identifier: i } =
|
|
904
|
+
const { decimal: n, identifier: i } = rt(e), c = k(s, n);
|
|
902
905
|
return new w({ decimal: n, identifier: i, value: c });
|
|
903
906
|
}
|
|
904
907
|
static fromChainOrSignature(e, s = 0) {
|
|
905
|
-
const { decimal: n, identifier: i } =
|
|
908
|
+
const { decimal: n, identifier: i } = Et(e), c = k(s, n);
|
|
906
909
|
return new w({ value: c, decimal: n, identifier: i });
|
|
907
910
|
}
|
|
908
911
|
static async loadStaticAssets() {
|
|
@@ -916,10 +919,10 @@ class w extends E {
|
|
|
916
919
|
NativeList: i,
|
|
917
920
|
...c
|
|
918
921
|
} = await import("@swapkit/tokens");
|
|
919
|
-
|
|
922
|
+
z = [i, ...Object.values(c)].reduce(
|
|
920
923
|
(u, { tokens: l }) => (l.forEach(({ identifier: h, chain: _, ...T }) => {
|
|
921
|
-
const
|
|
922
|
-
u.set(h, { identifier: h, decimal:
|
|
924
|
+
const H = "decimals" in T ? T.decimals : p[_];
|
|
925
|
+
u.set(h, { identifier: h, decimal: H });
|
|
923
926
|
}), u),
|
|
924
927
|
/* @__PURE__ */ new Map()
|
|
925
928
|
), e({ ok: !0 });
|
|
@@ -934,7 +937,7 @@ class w extends E {
|
|
|
934
937
|
);
|
|
935
938
|
}
|
|
936
939
|
}
|
|
937
|
-
const
|
|
940
|
+
const ge = (r) => {
|
|
938
941
|
const t = w.fromChainOrSignature(r);
|
|
939
942
|
switch (r) {
|
|
940
943
|
case o.Bitcoin:
|
|
@@ -952,17 +955,17 @@ const _e = (r) => {
|
|
|
952
955
|
default:
|
|
953
956
|
return t.set(1e-8);
|
|
954
957
|
}
|
|
955
|
-
},
|
|
958
|
+
}, J = (r) => {
|
|
956
959
|
const t = r.slice(0, 14).includes("/"), [e, s] = r.split(".").pop().split("/"), n = r.includes(".") && !t ? r : `${o.THORChain}.${s}`, [i, c] = n.split("."), [a, u] = (t ? s : c).split("-");
|
|
957
960
|
return {
|
|
958
961
|
address: u == null ? void 0 : u.toLowerCase(),
|
|
959
962
|
chain: i,
|
|
960
|
-
isGasAsset:
|
|
963
|
+
isGasAsset: at({ chain: i, symbol: c }),
|
|
961
964
|
isSynthetic: t,
|
|
962
965
|
symbol: (t ? `${e}/` : "") + (u ? `${a}-${(u == null ? void 0 : u.toLowerCase()) ?? ""}` : c),
|
|
963
966
|
ticker: a
|
|
964
967
|
};
|
|
965
|
-
},
|
|
968
|
+
}, se = {
|
|
966
969
|
/**
|
|
967
970
|
* Core
|
|
968
971
|
*/
|
|
@@ -1021,7 +1024,7 @@ const _e = (r) => {
|
|
|
1021
1024
|
};
|
|
1022
1025
|
class mt extends Error {
|
|
1023
1026
|
constructor(t, e) {
|
|
1024
|
-
console.error(e), super(t, { cause: { code:
|
|
1027
|
+
console.error(e), super(t, { cause: { code: se[t], message: t } }), Object.setPrototypeOf(this, mt.prototype);
|
|
1025
1028
|
}
|
|
1026
1029
|
}
|
|
1027
1030
|
class b extends E {
|
|
@@ -1031,35 +1034,35 @@ class b extends E {
|
|
|
1031
1034
|
static fromBigInt(t, e) {
|
|
1032
1035
|
return new b({
|
|
1033
1036
|
decimal: e,
|
|
1034
|
-
value:
|
|
1037
|
+
value: N({ value: t, bigIntDecimal: e, decimal: e })
|
|
1035
1038
|
});
|
|
1036
1039
|
}
|
|
1037
1040
|
}
|
|
1038
1041
|
export {
|
|
1039
1042
|
w as AssetValue,
|
|
1040
1043
|
E as BigIntArithmetics,
|
|
1041
|
-
|
|
1044
|
+
te as RequestClient,
|
|
1042
1045
|
mt as SwapKitError,
|
|
1043
1046
|
b as SwapKitNumber,
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1047
|
+
oe as assetFromString,
|
|
1048
|
+
_e as derivationPathToString,
|
|
1049
|
+
ae as filterAssets,
|
|
1050
|
+
N as formatBigIntToSafeValue,
|
|
1051
|
+
ie as gasFeeMultiplier,
|
|
1052
|
+
Ot as getAssetType,
|
|
1053
|
+
qt as getAsymmetricAssetShare,
|
|
1054
|
+
ue as getAsymmetricAssetWithdrawAmount,
|
|
1055
|
+
Vt as getAsymmetricRuneShare,
|
|
1056
|
+
ce as getAsymmetricRuneWithdrawAmount,
|
|
1057
|
+
Et as getCommonAssetInfo,
|
|
1058
|
+
It as getDecimal,
|
|
1059
|
+
he as getEstimatedPoolShare,
|
|
1060
|
+
de as getLiquiditySlippage,
|
|
1061
|
+
pe as getMemoFor,
|
|
1062
|
+
ge as getMinAmountByChain,
|
|
1063
|
+
xt as getSymmetricPoolShare,
|
|
1064
|
+
le as getSymmetricWithdraw,
|
|
1062
1065
|
me as getTHORNameCost,
|
|
1063
|
-
|
|
1064
|
-
|
|
1066
|
+
at as isGasAsset,
|
|
1067
|
+
fe as validateTHORName
|
|
1065
1068
|
};
|
package/package.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"repository": "https://github.com/thorswap/SwapKit.git",
|
|
43
43
|
"type": "module",
|
|
44
44
|
"types": "./dist/index.d.ts",
|
|
45
|
-
"version": "1.0.0-rc.
|
|
45
|
+
"version": "1.0.0-rc.25",
|
|
46
46
|
"scripts": {
|
|
47
47
|
"build": "vite build",
|
|
48
48
|
"clean": "rm -rf dist vite.config.ts.* .turbo node_modules",
|
package/src/helpers/asset.ts
CHANGED
|
@@ -206,5 +206,9 @@ export const filterAssets = (
|
|
|
206
206
|
tokens.filter((token) => {
|
|
207
207
|
const assetString = `${token.chain}.${token.symbol}`;
|
|
208
208
|
|
|
209
|
-
return
|
|
209
|
+
return (
|
|
210
|
+
!potentialScamRegex.test(assetString) &&
|
|
211
|
+
evmAssetHasAddress(assetString) &&
|
|
212
|
+
token.value !== '0'
|
|
213
|
+
);
|
|
210
214
|
});
|
|
@@ -12,14 +12,13 @@ describe('AssetValue', () => {
|
|
|
12
12
|
chain: Chain.Avalanche,
|
|
13
13
|
symbol: 'USDC-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
|
|
14
14
|
});
|
|
15
|
-
expect(fakeAvaxUSDCAsset.
|
|
15
|
+
expect(fakeAvaxUSDCAsset.toString(true)).toBe('USDC');
|
|
16
16
|
expect(fakeAvaxUSDCAsset.toString()).toBe(
|
|
17
17
|
'AVAX.USDC-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
|
|
18
18
|
);
|
|
19
|
-
expect(fakeAvaxUSDCAsset.toString(true)).toBe('AVAX.USDC');
|
|
20
19
|
|
|
21
20
|
const thor = AssetValue.fromChainOrSignature('ETH.THOR');
|
|
22
|
-
expect(thor.
|
|
21
|
+
expect(thor.toString(true)).toBe('THOR');
|
|
23
22
|
|
|
24
23
|
const ethSynth = new AssetValue({
|
|
25
24
|
chain: Chain.THORChain,
|
|
@@ -28,7 +27,6 @@ describe('AssetValue', () => {
|
|
|
28
27
|
value: 1234567890,
|
|
29
28
|
});
|
|
30
29
|
|
|
31
|
-
expect(ethSynth.assetValue).toBe('1234567890 ETH');
|
|
32
30
|
expect(ethSynth.toString()).toBe('THOR.ETH/ETH');
|
|
33
31
|
expect(ethSynth.toString(true)).toBe('ETH/ETH');
|
|
34
32
|
expect(ethSynth.mul(21.37).getValue('string')).toBe('26382715809.3');
|
|
@@ -39,9 +37,8 @@ describe('AssetValue', () => {
|
|
|
39
37
|
value: 123456789,
|
|
40
38
|
});
|
|
41
39
|
|
|
42
|
-
expect(atomDerived.
|
|
40
|
+
expect(atomDerived.toString(true)).toBe('ATOM');
|
|
43
41
|
expect(atomDerived.toString()).toBe('THOR.ATOM');
|
|
44
|
-
expect(atomDerived.toString(true)).toBe('THOR.ATOM');
|
|
45
42
|
});
|
|
46
43
|
});
|
|
47
44
|
|
|
@@ -66,18 +66,16 @@ const createAssetValue = async (assetString: string, value: NumberPrimitives = 0
|
|
|
66
66
|
return new AssetValue({ decimal, value: parsedValue, identifier: assetString });
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
address?: string;
|
|
71
|
-
chain: Chain;
|
|
72
|
-
isSynthetic = false;
|
|
73
|
-
isGasAsset = false;
|
|
74
|
-
symbol: string;
|
|
75
|
-
ticker: string;
|
|
76
|
-
type: ReturnType<typeof getAssetType>;
|
|
69
|
+
const cacheAssetValue = new Map<string, AssetValue>();
|
|
77
70
|
|
|
71
|
+
export class AssetValue extends BigIntArithmetics {
|
|
78
72
|
constructor(params: AssetValueParams) {
|
|
79
73
|
const identifier =
|
|
80
74
|
'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
|
|
75
|
+
|
|
76
|
+
const cachedAsset = cacheAssetValue.get(identifier);
|
|
77
|
+
if (cachedAsset) return cachedAsset.set(params.value);
|
|
78
|
+
|
|
81
79
|
super(
|
|
82
80
|
params.value instanceof BigIntArithmetics
|
|
83
81
|
? params.value
|
|
@@ -92,17 +90,25 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
92
90
|
this.address = assetInfo.address;
|
|
93
91
|
this.isSynthetic = assetInfo.isSynthetic;
|
|
94
92
|
this.isGasAsset = assetInfo.isGasAsset;
|
|
95
|
-
}
|
|
96
93
|
|
|
97
|
-
|
|
98
|
-
return `${this.getValue('string')} ${this.ticker}`;
|
|
94
|
+
cacheAssetValue.set(identifier, this);
|
|
99
95
|
}
|
|
100
96
|
|
|
97
|
+
address?: string;
|
|
98
|
+
isSynthetic = false;
|
|
99
|
+
isGasAsset = false;
|
|
100
|
+
// @ts-expect-error cache is false positive on that case
|
|
101
|
+
chain: Chain;
|
|
102
|
+
// @ts-expect-error cache is false positive on that case
|
|
103
|
+
symbol: string;
|
|
104
|
+
// @ts-expect-error cache is false positive on that case
|
|
105
|
+
ticker: string;
|
|
106
|
+
// @ts-expect-error cache is false positive on that case
|
|
107
|
+
type: ReturnType<typeof getAssetType>;
|
|
108
|
+
|
|
101
109
|
toString(short = false) {
|
|
102
110
|
// THOR.RUNE | ETH/ETH
|
|
103
|
-
const shortFormat = this.isSynthetic
|
|
104
|
-
? this.symbol.split('-')[0]
|
|
105
|
-
: `${this.chain}.${this.ticker}`;
|
|
111
|
+
const shortFormat = this.isSynthetic ? this.symbol.split('-')[0] : this.ticker;
|
|
106
112
|
|
|
107
113
|
return short
|
|
108
114
|
? shortFormat
|
|
@@ -93,8 +93,8 @@ export class BigIntArithmetics {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
set(value: SKBigIntParams): this {
|
|
96
|
-
|
|
97
|
-
return
|
|
96
|
+
this.#setValue(getStringValue(value));
|
|
97
|
+
return this;
|
|
98
98
|
}
|
|
99
99
|
add(...args: InitialisationValueType[]) {
|
|
100
100
|
return this.#arithmetics('add', ...args);
|