@swapkit/helpers 1.0.0-rc.24 → 1.0.0-rc.26
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 -201
- 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 +30 -31
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 Ae=Object.create;var N=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var ve=Object.getOwnPropertyNames;var Se=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var $e=(s,e,t)=>e in s?N(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var Ie=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ve(e))!Re.call(s,n)&&n!==t&&N(s,n,{get:()=>e[n],enumerable:!(r=Te(e,n))||r.enumerable});return s};var Be=(s,e,t)=>(t=s!=null?Ae(Se(s)):{},Ie(e||!s||!s.__esModule?N(t,"default",{value:s,enumerable:!0}):t,s));var m=(s,e,t)=>($e(s,typeof e!="symbol"?e+"":e,t),t),Ee=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var A=(s,e,t)=>{if(e.has(s))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(s):e.set(s,t)};var p=(s,e,t)=>(Ee(s,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@swapkit/types"),Me="0x313ce567",ne=async({chain:s,to:e})=>{try{const{result:t}=await ge.post(i.ChainToRPC[s],{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:Me},"latest"]})});return parseInt(BigInt(t).toString())}catch(t){return console.error(t),i.BaseDecimal[s]}},Oe=async s=>{if(s===i.Chain.Ethereum)return i.BaseDecimal.ETH;const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?ne({chain:i.Chain.Ethereum,to:e}):i.BaseDecimal.ETH},Ve=async s=>{const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?ne({chain:i.Chain.Avalanche,to:e.toLowerCase()}):i.BaseDecimal.AVAX},qe=async s=>(s===i.Chain.BinanceSmartChain,i.BaseDecimal.BSC),ie=async({chain:s,symbol:e})=>{switch(s){case i.Chain.Ethereum:return Oe(e);case i.Chain.Avalanche:return Ve(e);case i.Chain.BinanceSmartChain:return qe(e);default:return i.BaseDecimal[s]}},Pe={[i.FeeOption.Average]:1.2,[i.FeeOption.Fast]:1.5,[i.FeeOption.Fastest]:2},W=({chain:s,symbol:e})=>{switch(s){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===s;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=s=>{switch(s){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[s]};case i.Chain.THORChain:return{identifier:"THOR.RUNE",decimal:i.BaseDecimal[s]};case i.Chain.BinanceSmartChain:return{identifier:"BSC.BNB",decimal:i.BaseDecimal[s]};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:`${s}.${s}`,decimal:i.BaseDecimal[s]}}},oe=({chain:s,symbol:e})=>{if(e.includes("/"))return"Synth";switch(s){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"}},ke=s=>{var c;const[e,...t]=s.split("."),r=s.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:r}},xe=new RegExp(/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,"gmi"),Ne=s=>{const[e,t]=s.split(".");if(!i.EVMChainList.includes(e))return!0;const[,r]=t.split("-");return W({chain:e,symbol:t})||!!r},De=s=>s.filter(e=>{const t=`${e.chain}.${e.symbol}`;return!xe.test(t)&&Ne(t)&&e.value!=="0"}),ce=({liquidityUnits:s,poolUnits:e,runeDepth:t})=>{const r=d(s),n=d(e),a=d(t),c=r.mul(a),o=n.mul(n).mul(2),u=n.mul(r).mul(2),l=r.mul(r),h=n.mul(n).mul(n);return c.mul(o.sub(u).add(l)).div(h)},ue=({liquidityUnits:s,poolUnits:e,assetDepth:t})=>{const r=d(s),n=d(e),a=d(t),c=r.mul(a),o=n.mul(n).mul(2),u=n.mul(r).mul(2),l=r.mul(r),h=c.mul(o.sub(u).add(l)),g=n.mul(n).mul(n);return h.div(g)},He=({percent:s,runeDepth:e,liquidityUnits:t,poolUnits:r})=>ce({runeDepth:e,liquidityUnits:t,poolUnits:r}).mul(s),je=({percent:s,assetDepth:e,liquidityUnits:t,poolUnits:r})=>ue({assetDepth:e,liquidityUnits:t,poolUnits:r}).mul(s),d=s=>f.fromBigInt(BigInt(s),i.BaseDecimal.THOR),le=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:r})=>({assetAmount:d(r).mul(s).div(e),runeAmount:d(t).mul(s).div(e)}),Le=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:r,percent:n})=>Object.fromEntries(Object.entries(le({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:r})).map(([a,c])=>[a,c.mul(n)])),Fe=({runeDepth:s,poolUnits:e,assetDepth:t,liquidityUnits:r,runeAmount:n,assetAmount:a})=>{const c=new f({value:s,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),b=h.mul(c),k=l.mul(h),ye=c.mul(o),be=u.mul(g.add(b.add(k.mul(2)))),Ce=g.add(b.add(ye.mul(2))),z=be.div(Ce),x=d(r).add(z);if(z.getBaseValue("number")===0)return x.div(u).getBaseValue("number");const we=u.add(x);return x.div(we).getBaseValue("number")},Ue=({runeAmount:s,assetAmount:e,runeDepth:t,assetDepth:r})=>{if(s==="0"||e==="0"||t==="0"||r==="0")return 0;const n=d(t),a=d(r),c=d(e),o=d(s),u=c.mul(n).sub(a.mul(o)),l=a.mul(o).add(n.mul(a));return Math.abs(u.div(l).getBaseValue("number"))},We=({symbol:s,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${s.slice(-3)}`:s,Ge=(s,e)=>{switch(s){case i.MemoType.LEAVE:case i.MemoType.BOND:{const{address:t}=e;return`${s}:${t}`}case i.MemoType.UNBOND:{const{address:t,unbondAmount:r}=e;return`${s}:${t}:${r*10**8}`}case i.MemoType.THORNAME_REGISTER:{const{name:t,chain:r,address:n,owner:a}=e;return`${s}:${t}:${r}:${n}${a?`:${a}`:""}`}case i.MemoType.DEPOSIT:{const{chain:t,symbol:r,address:n,singleSide:a}=e;return a?`${s}:${t}/${r}::t:0`:`${s}:${t}.${r}:${n||""}:t:0`}case i.MemoType.WITHDRAW:{const{chain:t,ticker:r,symbol:n,basisPoints:a,targetAssetString:c,singleSide:o}=e,u=!o&&c?`:${c}`:"",l=We({chain:t,symbol:n,ticker:r});return`${s}:${t}${o?"/":"."}${l}:${a}${u}`}case i.MemoType.OPEN_LOAN:case i.MemoType.CLOSE_LOAN:{const{asset:t,address:r}=e;return`${s}:${t}:${r}`}default:return""}},Ke=s=>{if(s<0)throw new Error("Invalid number of year");return 10+s},Ye=s=>{if(s.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!s.match(e)},ze=([s,e,t,r,n])=>`${s}'/${e}'/${t}'/${r}${typeof n!="number"?"":`/${n}`}`;class J extends Error{constructor(e,t,r){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=r}}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 M=s=>s!==null&&typeof s=="object",B=(...s)=>{for(const e of s)if((!M(e)||Array.isArray(e))&&e!==void 0)throw new TypeError("The `options` argument must be an object");return G({},...s)},de=(s={},e={})=>{const t=new globalThis.Headers(s),r=e instanceof globalThis.Headers,n=new globalThis.Headers(e);for(const[a,c]of n.entries())r&&c==="undefined"||c===void 0?t.delete(a):t.set(a,c);return t},G=(...s)=>{let e={},t={};for(const r of s)if(Array.isArray(r))Array.isArray(e)||(e=[]),e=[...e,...r];else if(M(r)){for(let[n,a]of Object.entries(r))M(a)&&n in e&&(a=G(e[n],a)),e={...e,[n]:a};M(r.headers)&&(t=de(t,r.headers),e.headers=t)}return e},Je=(()=>{let s=!1,e=!1;const t=typeof globalThis.ReadableStream=="function",r=typeof globalThis.Request=="function";return t&&r&&(e=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return s=!0,"half"}}).headers.has("Content-Type")),s&&!e})(),Qe=typeof globalThis.AbortController=="function",Xe=typeof globalThis.ReadableStream=="function",Ze=typeof globalThis.FormData=="function",me=["get","post","put","patch","head","delete"],et={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},D=2147483647,pe=Symbol("stop"),tt={json:!0,parseJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,fetch:!0},st={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},rt=s=>me.includes(s)?s.toUpperCase():s,nt=["get","put","head","delete","options","trace"],it=[408,413,429,500,502,503,504],fe=[413,429,503],Q={limit:2,methods:nt,statusCodes:it,afterStatusCodes:fe,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:s=>.3*2**(s-1)*1e3},at=(s={})=>{if(typeof s=="number")return{...Q,limit:s};if(s.methods&&!Array.isArray(s.methods))throw new Error("retry.methods must be an array");if(s.statusCodes&&!Array.isArray(s.statusCodes))throw new Error("retry.statusCodes must be an array");return{...Q,...s,afterStatusCodes:fe}};async function ot(s,e,t,r){return new Promise((n,a)=>{const c=setTimeout(()=>{t&&t.abort(),a(new he(s))},r.timeout);r.fetch(s,e).then(n).catch(a).then(()=>{clearTimeout(c)})})}async function ct(s,{signal:e}){return new Promise((t,r)=>{e&&(e.throwIfAborted(),e.addEventListener("abort",n,{once:!0}));function n(){clearTimeout(a),r(e.reason)}const a=setTimeout(()=>{e==null||e.removeEventListener("abort",n),t()},s)})}const ut=(s,e)=>{const t={};for(const r in e)!(r in st)&&!(r in tt)&&!(r in s)&&(t[r]=e[r]);return t};class q{static create(e,t){const r=new q(e,t),n=async()=>{if(typeof r._options.timeout=="number"&&r._options.timeout>D)throw new RangeError(`The \`timeout\` option cannot be greater than ${D}`);await Promise.resolve();let o=await r._fetch();for(const u of r._options.hooks.afterResponse){const l=await u(r.request,r._options,r._decorateResponse(o.clone()));l instanceof globalThis.Response&&(o=l)}if(r._decorateResponse(o),!o.ok&&r._options.throwHttpErrors){let u=new J(o,r.request,r._options);for(const l of r._options.hooks.beforeError)u=await l(u);throw u}if(r._options.onDownloadProgress){if(typeof r._options.onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!Xe)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return r._stream(o.clone(),r._options.onDownloadProgress)}return o},c=r._options.retry.methods.includes(r.request.method.toLowerCase())?r._retry(n):n();for(const[o,u]of Object.entries(et))c[o]=async()=>{r.request.headers.set("accept",r.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:G({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},t.hooks),method:rt(t.method??this._input.method),prefixUrl:String(t.prefixUrl||""),retry:at(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(Qe){if(this.abortController=new globalThis.AbortController,this._options.signal){const r=this._options.signal;this._options.signal.addEventListener("abort",()=>{this.abortController.abort(r.reason)})}this._options.signal=this.abortController.signal}if(Je&&(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);(Ze&&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 J){if(!this._options.retry.statusCodes.includes(e.response.status))return 0;const r=e.response.headers.get("Retry-After");if(r&&this._options.retry.afterStatusCodes.includes(e.response.status)){let n=Number(r);return Number.isNaN(n)?n=Date.parse(r)-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 r=Math.min(this._calculateRetryDelay(t),D);if(r!==0&&this._retryCount>0){await ct(r,{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 r=await t(this.request,this._options);if(r instanceof Request){this.request=r;break}if(r instanceof Response)return r}const e=ut(this.request,this._options);return this._options.timeout===!1?this._options.fetch(this.request.clone(),e):ot(this.request.clone(),e,this.abortController,this._options)}_stream(e,t){const r=Number(e.headers.get("content-length"))||0;let n=0;return e.status===204?(t&&t({percent:1,totalBytes:r,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:r},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=r===0?0:n/r;t({percent:h,transferredBytes:n,totalBytes:r},l)}a.enqueue(l),await o()}await o()}}),{status:e.status,statusText:e.statusText,headers:e.headers})}}/*! MIT License © Sindre Sorhus */const H=s=>{const e=(t,r)=>q.create(t,B(s,r));for(const t of me)e[t]=(r,n)=>q.create(r,B(s,n,{method:t}));return e.create=t=>H(B(t)),e.extend=t=>H(B(s,t)),e.stop=pe,e},lt=H(),ht=lt,dt=typeof window<"u"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},X=ht.create({headers:dt}),ge={get:(s,e)=>X.get(s,e).json(),post:(s,e)=>X.post(s,e).json()},Z=Object.values(i.Chain),mt=(s="")=>{const e=s.toUpperCase(),[t]=e.split(".");if(Z.includes(t))return!0;const[r]=e.split("/");if(Z.includes(r))return!0;throw new Error(`Invalid identifier: ${s}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},S=8,C=s=>10n**BigInt(s),T=s=>Math.log10(parseFloat(s.toString()));function R({value:s,bigIntDecimal:e=S,decimal:t=S}){const r=s<0n;let n=s.toString().substring(r?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),`${r?"-":""}${n.slice(0,c)}.${o}`.replace(/\.?0*$/,"")}var y,v,$,j,P,_e,I,L;const Y=class Y{constructor(e){A(this,y);A(this,$);A(this,P);A(this,I);m(this,"decimalMultiplier",10n**8n);m(this,"bigIntValue",0n);m(this,"decimal");const t=O(e);this.decimal=typeof e=="object"?e.decimal:void 0,this.decimalMultiplier=C(Math.max(ee(E(t)),this.decimal||0)),p(this,$,j).call(this,t)}static fromBigInt(e,t){return new Y({decimal:t,value:R({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:r}){return this.fromBigInt(e.getBaseValue("bigint")*C(r)/C(t),r)}set(e){return p(this,$,j).call(this,O(e)),this}add(...e){return p(this,y,v).call(this,"add",...e)}sub(...e){return p(this,y,v).call(this,"sub",...e)}mul(...e){return p(this,y,v).call(this,"mul",...e)}div(...e){return p(this,y,v).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||T(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/C(this.decimal||i.BaseDecimal.THOR),r=this.bigIntValue/t;switch(e){case"number":return Number(r);case"string":return r.toString();default:return r}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const r=O(e),n=E(r);return n==="0"||n==="undefined"?0n:p(this,I,L).call(this,n,t)}formatBigIntToSafeValue(e,t){const r=t||this.decimal||S,n=Math.max(r,T(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[r])>=5?h=`${h.substring(0,r-1)}${(parseInt(h[r-1])+1).toString()}`:h=h.substring(0,r),`${a?"-":""}${u.slice(0,l)}.${h}`.replace(/\.?0*$/,"")}toSignificant(e=6){const[t,r]=this.getValue("string").split("."),n=t||"",a=r||"";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,r]=this.getValue("string").split("."),n=t||"",a=r||"";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"),r=["","K","M","B","T","Q","Qi","S"],n=Math.floor(Math.log10(Math.abs(t))/3),a=r[n];if(!a)return this.getValue("string");const c=10**(n*3);return`${(t/c).toFixed(e)}${a}`}toCurrency(e="$",{currencyPosition:t="start",decimal:r=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,r)}`:""}`;return`${t==="start"?e:""}${h}${t==="end"?e:""}`}};y=new WeakSet,v=function(e,...t){const r=p(this,P,_e).call(this,this,...t),n=C(r),a=t.reduce((o,u)=>{const l=this.getBigIntValue(u,r);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=R({bigIntDecimal:r,decimal:Math.max(r,T(this.decimalMultiplier)),value:a});return new this.constructor({decimal:this.decimal,value:c,identifier:this.toString()})},$=new WeakSet,j=function(e){const t=E(e)||"0";this.bigIntValue=p(this,I,L).call(this,t)},P=new WeakSet,_e=function(...e){const t=e.map(r=>typeof r=="object"?r.decimal||T(r.decimalMultiplier):ee(E(r))).filter(Boolean);return Math.max(...t,S)},I=new WeakSet,L=function(e,t){const r=t?C(t):this.decimalMultiplier,n=T(r),[a="",c=""]=e.split(".");return BigInt(`${a}${c.padEnd(n,"0")}`)};let w=Y;const pt=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function E(s){const t=`${typeof s=="number"?pt.format(s):O(s)}`.replaceAll(",",".").split(".");return t.length>1?`${t.slice(0,-1).join("")}.${t.at(-1)}`:t[0]}function ee(s){var t;const e=((t=s.split(".")[1])==null?void 0:t.length)||0;return Math.max(e,S)}function O(s){return typeof s=="object"?"getValue"in s?s.getValue("string"):s.value:s}const V=(s,e)=>typeof s=="bigint"?R({value:s,bigIntDecimal:e,decimal:e}):s;let F;const te=s=>{if(!F)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return F.get(s.toUpperCase())||{decimal:i.BaseDecimal.THOR,identifier:""}},se=async(s,e=0)=>{mt(s);const t=await ie(U(s)),r=V(e,t);return new _({decimal:t,value:r,identifier:s})},re=new Map;class _ extends w{constructor(t){const r="identifier"in t?t.identifier:`${t.chain}.${t.symbol}`,n=re.get(r);if(n)return n.set(t.value);super(t.value instanceof w?t.value:{decimal:t.decimal,value:t.value});m(this,"address");m(this,"isSynthetic",!1);m(this,"isGasAsset",!1);m(this,"chain");m(this,"symbol");m(this,"ticker");m(this,"type");const a=U(r);this.type=oe(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,re.set(r,this)}toString(t=!1){const r=this.isSynthetic?this.symbol.split("-")[0]:this.ticker;return t?r:`${this.chain}.${this.symbol}`}eq({chain:t,symbol:r}){return this.chain===t&&this.symbol===r}static async fromString(t,r=0){return se(t,r)}static fromStringSync(t,r=0){const{isSynthetic:n}=U(t),{decimal:a,identifier:c}=te(t),o=V(r,a);return c?new _({decimal:a,identifier:c,value:o}):n?new _({decimal:8,identifier:t,value:o}):void 0}static async fromIdentifier(t,r=0){return se(t,r)}static fromIdentifierSync(t,r=0){const{decimal:n,identifier:a}=te(t),c=V(r,n);return new _({decimal:n,identifier:a,value:c})}static fromChainOrSignature(t,r=0){const{decimal:n,identifier:a}=ae(t),c=V(r,n);return new _({value:c,decimal:n,identifier:a})}static async loadStaticAssets(){return new Promise(async(t,r)=>{try{const{ThorchainList:n,NativeList:a,...c}=await import("@swapkit/tokens");F=[a,...Object.values(c)].reduce((u,{tokens:l})=>(l.forEach(({identifier:h,chain:g,...b})=>{const k="decimals"in b?b.decimals:i.BaseDecimal[g];u.set(h,{identifier:h,decimal:k})}),u),new Map),t({ok:!0})}catch(n){console.error(n),r({ok:!1,error:n,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const ft=s=>{const e=_.fromChainOrSignature(s);switch(s){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)}},U=s=>{const e=s.slice(0,14).includes("/"),[t,r]=s.split(".").pop().split("/"),n=s.includes(".")&&!e?s:`${i.Chain.THORChain}.${r}`,[a,c]=n.split("."),[o,u]=(e?r:c).split("-");return{address:u==null?void 0:u.toLowerCase(),chain:a,isGasAsset:W({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 K extends Error{constructor(e,t){console.error(t),super(e,{cause:{code:gt[e],message:e}}),Object.setPrototypeOf(this,K.prototype)}}class f extends w{eq(e){return this.eqValue(e)}static fromBigInt(e,t){return new f({decimal:t,value:R({value:e,bigIntDecimal:t,decimal:t})})}}exports.AssetValue=_;exports.BigIntArithmetics=w;exports.RequestClient=ge;exports.SwapKitError=K;exports.SwapKitNumber=f;exports.assetFromString=ke;exports.derivationPathToString=ze;exports.filterAssets=De;exports.formatBigIntToSafeValue=R;exports.gasFeeMultiplier=Pe;exports.getAssetType=oe;exports.getAsymmetricAssetShare=ue;exports.getAsymmetricAssetWithdrawAmount=je;exports.getAsymmetricRuneShare=ce;exports.getAsymmetricRuneWithdrawAmount=He;exports.getCommonAssetInfo=ae;exports.getDecimal=ie;exports.getEstimatedPoolShare=Fe;exports.getLiquiditySlippage=Ue;exports.getMemoFor=Ge;exports.getMinAmountByChain=ft;exports.getSymmetricPoolShare=le;exports.getSymmetricWithdraw=Le;exports.getTHORNameCost=Ke;exports.isGasAsset=W;exports.validateTHORName=Ye;
|
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,19 +1,19 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
1
|
+
var gt = Object.defineProperty;
|
|
2
|
+
var bt = (r, t, e) => t in r ? gt(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
3
|
+
var p = (r, t, e) => (bt(r, typeof t != "symbol" ? t + "" : t, e), e), yt = (r, t, e) => {
|
|
4
4
|
if (!t.has(r))
|
|
5
5
|
throw TypeError("Cannot " + e);
|
|
6
6
|
};
|
|
7
|
-
var
|
|
7
|
+
var T = (r, t, e) => {
|
|
8
8
|
if (t.has(r))
|
|
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 f = (r, t, e) => (yt(r, t, "access private method"), e);
|
|
13
|
+
import { FeeOption as H, BaseDecimal as d, Chain as o, EVMChainList as wt, ChainToRPC as At, MemoType as g } from "@swapkit/types";
|
|
14
|
+
const vt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
15
15
|
try {
|
|
16
|
-
const { result: e } = await
|
|
16
|
+
const { result: e } = await Xt.post(At[r], {
|
|
17
17
|
headers: {
|
|
18
18
|
accept: "*/*",
|
|
19
19
|
"content-type": "application/json",
|
|
@@ -23,36 +23,36 @@ 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: vt }, "latest"]
|
|
27
27
|
})
|
|
28
28
|
});
|
|
29
29
|
return parseInt(BigInt(e).toString());
|
|
30
30
|
} catch (e) {
|
|
31
31
|
return console.error(e), d[r];
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, Tt = async (r) => {
|
|
34
34
|
if (r === o.Ethereum)
|
|
35
35
|
return d.ETH;
|
|
36
36
|
const [, t] = r.split("-");
|
|
37
37
|
return t != null && t.startsWith("0x") ? nt({ chain: o.Ethereum, to: t }) : d.ETH;
|
|
38
|
-
},
|
|
38
|
+
}, $t = async (r) => {
|
|
39
39
|
const [, t] = r.split("-");
|
|
40
40
|
return t != null && t.startsWith("0x") ? nt({ chain: o.Avalanche, to: t.toLowerCase() }) : d.AVAX;
|
|
41
|
-
},
|
|
41
|
+
}, Rt = async (r) => r === o.BinanceSmartChain ? d.BSC : d.BSC, St = async ({ chain: r, symbol: t }) => {
|
|
42
42
|
switch (r) {
|
|
43
43
|
case o.Ethereum:
|
|
44
|
-
return
|
|
44
|
+
return Tt(t);
|
|
45
45
|
case o.Avalanche:
|
|
46
|
-
return
|
|
46
|
+
return $t(t);
|
|
47
47
|
case o.BinanceSmartChain:
|
|
48
|
-
return
|
|
48
|
+
return Rt(t);
|
|
49
49
|
default:
|
|
50
50
|
return d[r];
|
|
51
51
|
}
|
|
52
52
|
}, ne = {
|
|
53
|
-
[
|
|
54
|
-
[
|
|
55
|
-
[
|
|
53
|
+
[H.Average]: 1.2,
|
|
54
|
+
[H.Fast]: 1.5,
|
|
55
|
+
[H.Fastest]: 2
|
|
56
56
|
}, it = ({ chain: r, symbol: t }) => {
|
|
57
57
|
switch (r) {
|
|
58
58
|
case o.Bitcoin:
|
|
@@ -79,7 +79,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
79
79
|
case o.THORChain:
|
|
80
80
|
return t === "RUNE";
|
|
81
81
|
}
|
|
82
|
-
},
|
|
82
|
+
}, Ct = (r) => {
|
|
83
83
|
switch (r) {
|
|
84
84
|
case "ETH.THOR":
|
|
85
85
|
return { identifier: "ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044", decimal: 18 };
|
|
@@ -108,7 +108,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
108
108
|
case o.Ethereum:
|
|
109
109
|
return { identifier: `${r}.${r}`, decimal: d[r] };
|
|
110
110
|
}
|
|
111
|
-
},
|
|
111
|
+
}, It = ({ chain: r, symbol: t }) => {
|
|
112
112
|
if (t.includes("/"))
|
|
113
113
|
return "Synth";
|
|
114
114
|
switch (r) {
|
|
@@ -142,50 +142,50 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
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
|
+
}, Et = new RegExp(
|
|
146
146
|
/(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,
|
|
147
147
|
"gmi"
|
|
148
|
-
),
|
|
148
|
+
), Ot = (r) => {
|
|
149
149
|
const [t, e] = r.split(".");
|
|
150
|
-
if (!
|
|
150
|
+
if (!wt.includes(t))
|
|
151
151
|
return !0;
|
|
152
152
|
const [, s] = e.split("-");
|
|
153
153
|
return it({ chain: t, symbol: e }) || !!s;
|
|
154
154
|
}, oe = (r) => r.filter((t) => {
|
|
155
155
|
const e = `${t.chain}.${t.symbol}`;
|
|
156
|
-
return !
|
|
157
|
-
}),
|
|
156
|
+
return !Et.test(e) && Ot(e) && t.value !== "0";
|
|
157
|
+
}), Bt = ({
|
|
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
|
+
}, Mt = ({
|
|
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
|
}, ae = ({
|
|
172
172
|
percent: r,
|
|
173
173
|
runeDepth: t,
|
|
174
174
|
liquidityUnits: e,
|
|
175
175
|
poolUnits: s
|
|
176
|
-
}) =>
|
|
176
|
+
}) => Bt({ runeDepth: t, liquidityUnits: e, poolUnits: s }).mul(r), ce = ({
|
|
177
177
|
percent: r,
|
|
178
178
|
assetDepth: t,
|
|
179
179
|
liquidityUnits: e,
|
|
180
180
|
poolUnits: s
|
|
181
|
-
}) =>
|
|
181
|
+
}) => Mt({ assetDepth: t, liquidityUnits: e, poolUnits: s }).mul(r), m = (r) => b.fromBigInt(BigInt(r), d.THOR), Vt = ({
|
|
182
182
|
liquidityUnits: r,
|
|
183
183
|
poolUnits: t,
|
|
184
184
|
runeDepth: e,
|
|
185
185
|
assetDepth: s
|
|
186
186
|
}) => ({
|
|
187
|
-
assetAmount:
|
|
188
|
-
runeAmount:
|
|
187
|
+
assetAmount: m(s).mul(r).div(t),
|
|
188
|
+
runeAmount: m(e).mul(r).div(t)
|
|
189
189
|
}), ue = ({
|
|
190
190
|
liquidityUnits: r,
|
|
191
191
|
poolUnits: t,
|
|
@@ -193,7 +193,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
193
193
|
assetDepth: s,
|
|
194
194
|
percent: n
|
|
195
195
|
}) => Object.fromEntries(
|
|
196
|
-
Object.entries(
|
|
196
|
+
Object.entries(Vt({ liquidityUnits: r, poolUnits: t, runeDepth: e, assetDepth: s })).map(
|
|
197
197
|
([i, c]) => [i, c.mul(n)]
|
|
198
198
|
)
|
|
199
199
|
), le = ({
|
|
@@ -204,11 +204,11 @@ 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),
|
|
208
|
-
if (
|
|
209
|
-
return
|
|
210
|
-
const
|
|
211
|
-
return
|
|
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), A = h.mul(c), N = l.mul(h), mt = c.mul(a), pt = u.mul(_.add(A.add(N.mul(2)))), ft = _.add(A.add(mt.mul(2))), J = pt.div(ft), j = m(s).add(J);
|
|
208
|
+
if (J.getBaseValue("number") === 0)
|
|
209
|
+
return j.div(u).getBaseValue("number");
|
|
210
|
+
const _t = u.add(j);
|
|
211
|
+
return j.div(_t).getBaseValue("number");
|
|
212
212
|
}, he = ({
|
|
213
213
|
runeAmount: r,
|
|
214
214
|
assetAmount: t,
|
|
@@ -217,9 +217,9 @@ 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
|
+
}, qt = ({
|
|
223
223
|
symbol: r,
|
|
224
224
|
ticker: t,
|
|
225
225
|
chain: e
|
|
@@ -243,7 +243,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
243
243
|
return i ? `${r}:${e}/${s}::t:0` : `${r}:${e}.${s}:${n || ""}:t:0`;
|
|
244
244
|
}
|
|
245
245
|
case g.WITHDRAW: {
|
|
246
|
-
const { chain: e, ticker: s, symbol: n, basisPoints: i, targetAssetString: c, singleSide: a } = t, u = !a && c ? `:${c}` : "", l =
|
|
246
|
+
const { chain: e, ticker: s, symbol: n, basisPoints: i, targetAssetString: c, singleSide: a } = t, u = !a && c ? `:${c}` : "", l = qt({ chain: e, symbol: n, ticker: s });
|
|
247
247
|
return `${r}:${e}${a ? "/" : "."}${l}:${i}${u}`;
|
|
248
248
|
}
|
|
249
249
|
case g.OPEN_LOAN:
|
|
@@ -264,7 +264,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
264
264
|
const t = /^[a-zA-Z0-9+_-]+$/g;
|
|
265
265
|
return !!r.match(t);
|
|
266
266
|
}, fe = ([r, t, e, s, n]) => `${r}'/${t}'/${e}'/${s}${typeof n != "number" ? "" : `/${n}`}`;
|
|
267
|
-
class
|
|
267
|
+
class K 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", {
|
|
@@ -295,25 +295,25 @@ class ot extends Error {
|
|
|
295
295
|
}), this.name = "TimeoutError", this.request = t;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
const
|
|
298
|
+
const M = (r) => r !== null && typeof r == "object", O = (...r) => {
|
|
299
299
|
for (const t of r)
|
|
300
|
-
if ((!
|
|
300
|
+
if ((!M(t) || Array.isArray(t)) && t !== void 0)
|
|
301
301
|
throw new TypeError("The `options` argument must be an object");
|
|
302
|
-
return
|
|
302
|
+
return Y({}, ...r);
|
|
303
303
|
}, at = (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
|
+
}, Y = (...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 (M(s)) {
|
|
314
314
|
for (let [n, i] of Object.entries(s))
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
M(i) && n in t && (i = Y(t[n], i)), t = { ...t, [n]: i };
|
|
316
|
+
M(s.headers) && (e = at(e, s.headers), t.headers = e);
|
|
317
317
|
}
|
|
318
318
|
return t;
|
|
319
319
|
}, xt = (() => {
|
|
@@ -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
|
+
})(), kt = typeof globalThis.AbortController == "function", Pt = typeof globalThis.ReadableStream == "function", Nt = typeof globalThis.FormData == "function", ct = ["get", "post", "put", "patch", "head", "delete"], jt = {
|
|
331
331
|
json: "application/json",
|
|
332
332
|
text: "text/*",
|
|
333
333
|
formData: "multipart/form-data",
|
|
334
334
|
arrayBuffer: "*/*",
|
|
335
335
|
blob: "*/*"
|
|
336
|
-
},
|
|
336
|
+
}, L = 2147483647, ut = Symbol("stop"), Ht = {
|
|
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
|
+
}, Lt = {
|
|
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
|
+
}, Dt = (r) => ct.includes(r) ? r.toUpperCase() : r, Ut = ["get", "put", "head", "delete", "options", "trace"], Ft = [408, 413, 429, 500, 502, 503, 504], lt = [413, 429, 503], Q = {
|
|
364
364
|
limit: 2,
|
|
365
|
-
methods:
|
|
366
|
-
statusCodes:
|
|
365
|
+
methods: Ut,
|
|
366
|
+
statusCodes: Ft,
|
|
367
367
|
afterStatusCodes: lt,
|
|
368
368
|
maxRetryAfter: Number.POSITIVE_INFINITY,
|
|
369
369
|
backoffLimit: Number.POSITIVE_INFINITY,
|
|
370
370
|
delay: (r) => 0.3 * 2 ** (r - 1) * 1e3
|
|
371
|
-
},
|
|
371
|
+
}, Wt = (r = {}) => {
|
|
372
372
|
if (typeof r == "number")
|
|
373
373
|
return {
|
|
374
|
-
...
|
|
374
|
+
...Q,
|
|
375
375
|
limit: r
|
|
376
376
|
};
|
|
377
377
|
if (r.methods && !Array.isArray(r.methods))
|
|
@@ -379,12 +379,12 @@ 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
|
+
...Q,
|
|
383
383
|
...r,
|
|
384
384
|
afterStatusCodes: lt
|
|
385
385
|
};
|
|
386
386
|
};
|
|
387
|
-
async function
|
|
387
|
+
async function Gt(r, t, e, s) {
|
|
388
388
|
return new Promise((n, i) => {
|
|
389
389
|
const c = setTimeout(() => {
|
|
390
390
|
e && e.abort(), i(new ot(r));
|
|
@@ -394,7 +394,7 @@ async function Yt(r, t, e, s) {
|
|
|
394
394
|
});
|
|
395
395
|
});
|
|
396
396
|
}
|
|
397
|
-
async function
|
|
397
|
+
async function Yt(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 zt = (r, t) => {
|
|
409
409
|
const e = {};
|
|
410
410
|
for (const s in t)
|
|
411
|
-
!(s in
|
|
411
|
+
!(s in Lt) && !(s in Ht) && !(s in r) && (e[s] = t[s]);
|
|
412
412
|
return e;
|
|
413
413
|
};
|
|
414
|
-
class
|
|
414
|
+
class x {
|
|
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 x(t, e), n = async () => {
|
|
417
|
+
if (typeof s._options.timeout == "number" && s._options.timeout > L)
|
|
418
|
+
throw new RangeError(`The \`timeout\` option cannot be greater than ${L}`);
|
|
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 K(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 (!Pt)
|
|
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(jt))
|
|
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();
|
|
@@ -483,16 +483,16 @@ class k {
|
|
|
483
483
|
credentials: this._input.credentials || "same-origin",
|
|
484
484
|
...e,
|
|
485
485
|
headers: at(this._input.headers, e.headers),
|
|
486
|
-
hooks:
|
|
486
|
+
hooks: Y({
|
|
487
487
|
beforeRequest: [],
|
|
488
488
|
beforeRetry: [],
|
|
489
489
|
beforeError: [],
|
|
490
490
|
afterResponse: []
|
|
491
491
|
}, e.hooks),
|
|
492
|
-
method:
|
|
492
|
+
method: Dt(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: Wt(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 (kt) {
|
|
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", () => {
|
|
@@ -514,13 +514,13 @@ class k {
|
|
|
514
514
|
}
|
|
515
515
|
if (xt && (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
|
+
(Nt && 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
522
|
if (this._retryCount++, this._retryCount < this._options.retry.limit && !(t instanceof ot)) {
|
|
523
|
-
if (t instanceof
|
|
523
|
+
if (t instanceof K) {
|
|
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,9 +543,9 @@ 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), L);
|
|
547
547
|
if (s !== 0 && this._retryCount > 0) {
|
|
548
|
-
await
|
|
548
|
+
await Yt(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,
|
|
@@ -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 = zt(this.request, this._options);
|
|
573
|
+
return this._options.timeout === !1 ? this._options.fetch(this.request.clone(), t) : Gt(this.request.clone(), t, this.abortController, this._options);
|
|
574
574
|
}
|
|
575
575
|
/* istanbul ignore next */
|
|
576
576
|
_stream(t, e) {
|
|
@@ -607,29 +607,29 @@ class k {
|
|
|
607
607
|
}
|
|
608
608
|
}
|
|
609
609
|
/*! MIT License © Sindre Sorhus */
|
|
610
|
-
const
|
|
611
|
-
const t = (e, s) =>
|
|
610
|
+
const D = (r) => {
|
|
611
|
+
const t = (e, s) => x.create(e, O(r, s));
|
|
612
612
|
for (const e of ct)
|
|
613
|
-
t[e] = (s, n) =>
|
|
614
|
-
return t.create = (e) =>
|
|
615
|
-
},
|
|
616
|
-
get: (r, t) =>
|
|
617
|
-
post: (r, t) =>
|
|
618
|
-
},
|
|
613
|
+
t[e] = (s, n) => x.create(s, O(r, n, { method: e }));
|
|
614
|
+
return t.create = (e) => D(O(e)), t.extend = (e) => D(O(r, e)), t.stop = ut, t;
|
|
615
|
+
}, Jt = D(), Kt = Jt, Qt = typeof window < "u" ? {} : { referrer: "https://sk.thorswap.net", referer: "https://sk.thorswap.net" }, X = Kt.create({ headers: Qt }), Xt = {
|
|
616
|
+
get: (r, t) => X.get(r, t).json(),
|
|
617
|
+
post: (r, t) => X.post(r, t).json()
|
|
618
|
+
}, Z = Object.values(o), Zt = (r = "") => {
|
|
619
619
|
const t = r.toUpperCase(), [e] = t.split(".");
|
|
620
|
-
if (
|
|
620
|
+
if (Z.includes(e))
|
|
621
621
|
return !0;
|
|
622
622
|
const [s] = t.split("/");
|
|
623
|
-
if (
|
|
623
|
+
if (Z.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
|
-
},
|
|
629
|
-
function
|
|
628
|
+
}, S = 8, v = (r) => 10n ** BigInt(r), $ = (r) => Math.log10(parseFloat(r.toString()));
|
|
629
|
+
function k({
|
|
630
630
|
value: r,
|
|
631
|
-
bigIntDecimal: t =
|
|
632
|
-
decimal: e =
|
|
631
|
+
bigIntDecimal: t = S,
|
|
632
|
+
decimal: e = S
|
|
633
633
|
}) {
|
|
634
634
|
const s = r < 0n;
|
|
635
635
|
let n = r.toString().substring(s ? 1 : 0);
|
|
@@ -642,27 +642,25 @@ function x({
|
|
|
642
642
|
""
|
|
643
643
|
);
|
|
644
644
|
}
|
|
645
|
-
var
|
|
646
|
-
const
|
|
645
|
+
var w, R, I, U, P, ht, E, F;
|
|
646
|
+
const z = class z {
|
|
647
647
|
constructor(t) {
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
this
|
|
659
|
-
Math.max(m(this, B, G).call(this, m(this, v, C).call(this, e)), this.decimal || 0)
|
|
660
|
-
), m(this, P, ht).call(this, e);
|
|
648
|
+
T(this, w);
|
|
649
|
+
T(this, I);
|
|
650
|
+
T(this, P);
|
|
651
|
+
T(this, E);
|
|
652
|
+
p(this, "decimalMultiplier", 10n ** 8n);
|
|
653
|
+
p(this, "bigIntValue", 0n);
|
|
654
|
+
p(this, "decimal");
|
|
655
|
+
const e = V(t);
|
|
656
|
+
this.decimal = typeof t == "object" ? t.decimal : void 0, this.decimalMultiplier = v(
|
|
657
|
+
Math.max(tt(B(e)), this.decimal || 0)
|
|
658
|
+
), f(this, I, U).call(this, e);
|
|
661
659
|
}
|
|
662
660
|
static fromBigInt(t, e) {
|
|
663
|
-
return new
|
|
661
|
+
return new z({
|
|
664
662
|
decimal: e,
|
|
665
|
-
value:
|
|
663
|
+
value: k({ value: t, bigIntDecimal: e, decimal: e })
|
|
666
664
|
});
|
|
667
665
|
}
|
|
668
666
|
static shiftDecimals({
|
|
@@ -671,24 +669,24 @@ const K = class K {
|
|
|
671
669
|
to: s
|
|
672
670
|
}) {
|
|
673
671
|
return this.fromBigInt(
|
|
674
|
-
t.getBaseValue("bigint") *
|
|
672
|
+
t.getBaseValue("bigint") * v(s) / v(e),
|
|
675
673
|
s
|
|
676
674
|
);
|
|
677
675
|
}
|
|
678
676
|
set(t) {
|
|
679
|
-
return
|
|
677
|
+
return f(this, I, U).call(this, V(t)), this;
|
|
680
678
|
}
|
|
681
679
|
add(...t) {
|
|
682
|
-
return
|
|
680
|
+
return f(this, w, R).call(this, "add", ...t);
|
|
683
681
|
}
|
|
684
682
|
sub(...t) {
|
|
685
|
-
return
|
|
683
|
+
return f(this, w, R).call(this, "sub", ...t);
|
|
686
684
|
}
|
|
687
685
|
mul(...t) {
|
|
688
|
-
return
|
|
686
|
+
return f(this, w, R).call(this, "mul", ...t);
|
|
689
687
|
}
|
|
690
688
|
div(...t) {
|
|
691
|
-
return
|
|
689
|
+
return f(this, w, R).call(this, "div", ...t);
|
|
692
690
|
}
|
|
693
691
|
gt(t) {
|
|
694
692
|
return this.bigIntValue > this.getBigIntValue(t);
|
|
@@ -708,7 +706,7 @@ const K = class K {
|
|
|
708
706
|
getValue(t) {
|
|
709
707
|
const e = this.formatBigIntToSafeValue(
|
|
710
708
|
this.bigIntValue,
|
|
711
|
-
this.decimal ||
|
|
709
|
+
this.decimal || $(this.decimalMultiplier)
|
|
712
710
|
);
|
|
713
711
|
switch (t) {
|
|
714
712
|
case "number":
|
|
@@ -720,7 +718,7 @@ const K = class K {
|
|
|
720
718
|
}
|
|
721
719
|
}
|
|
722
720
|
getBaseValue(t) {
|
|
723
|
-
const e = this.decimalMultiplier /
|
|
721
|
+
const e = this.decimalMultiplier / v(this.decimal || d.THOR), s = this.bigIntValue / e;
|
|
724
722
|
switch (t) {
|
|
725
723
|
case "number":
|
|
726
724
|
return Number(s);
|
|
@@ -733,13 +731,13 @@ const K = class K {
|
|
|
733
731
|
getBigIntValue(t, e) {
|
|
734
732
|
if (!e && typeof t == "object")
|
|
735
733
|
return t.bigIntValue;
|
|
736
|
-
const s =
|
|
737
|
-
return n === "0" || n === "undefined" ? 0n :
|
|
734
|
+
const s = V(t), n = B(s);
|
|
735
|
+
return n === "0" || n === "undefined" ? 0n : f(this, E, F).call(this, n, e);
|
|
738
736
|
}
|
|
739
737
|
formatBigIntToSafeValue(t, e) {
|
|
740
|
-
const s = e || this.decimal ||
|
|
738
|
+
const s = e || this.decimal || S, n = Math.max(
|
|
741
739
|
s,
|
|
742
|
-
|
|
740
|
+
$(this.decimalMultiplier)
|
|
743
741
|
), i = t < 0n, c = t.toString().substring(i ? 1 : 0), a = n - (c.length - 1), u = a > 0 ? "0".repeat(a) + c : c, l = u.length - n;
|
|
744
742
|
let h = u.slice(-n);
|
|
745
743
|
return parseInt(h[s]) >= 5 ? h = `${h.substring(0, s - 1)}${(parseInt(h[s - 1]) + 1).toString()}` : h = h.substring(0, s), `${i ? "-" : ""}${u.slice(
|
|
@@ -791,8 +789,8 @@ const K = class K {
|
|
|
791
789
|
return `${e === "start" ? t : ""}${h}${e === "end" ? t : ""}`;
|
|
792
790
|
}
|
|
793
791
|
};
|
|
794
|
-
|
|
795
|
-
const s =
|
|
792
|
+
w = new WeakSet(), R = function(t, ...e) {
|
|
793
|
+
const s = f(this, P, ht).call(this, this, ...e), n = v(s), i = e.reduce(
|
|
796
794
|
(a, u) => {
|
|
797
795
|
const l = this.getBigIntValue(u, s);
|
|
798
796
|
switch (t) {
|
|
@@ -813,70 +811,76 @@ A = new WeakSet(), S = function(t, ...e) {
|
|
|
813
811
|
},
|
|
814
812
|
//normalize is to precision multiplier base
|
|
815
813
|
this.bigIntValue * n / this.decimalMultiplier
|
|
816
|
-
), c =
|
|
814
|
+
), c = k({
|
|
817
815
|
bigIntDecimal: s,
|
|
818
|
-
decimal: Math.max(s,
|
|
816
|
+
decimal: Math.max(s, $(this.decimalMultiplier)),
|
|
819
817
|
value: i
|
|
820
818
|
});
|
|
821
819
|
return new this.constructor({ decimal: this.decimal, value: c, identifier: this.toString() });
|
|
822
|
-
},
|
|
823
|
-
const e =
|
|
824
|
-
this.bigIntValue =
|
|
825
|
-
},
|
|
820
|
+
}, I = new WeakSet(), U = function(t) {
|
|
821
|
+
const e = B(t) || "0";
|
|
822
|
+
this.bigIntValue = f(this, E, F).call(this, e);
|
|
823
|
+
}, P = new WeakSet(), ht = function(...t) {
|
|
826
824
|
const e = t.map(
|
|
827
|
-
(s) => typeof s == "object" ? s.decimal ||
|
|
825
|
+
(s) => typeof s == "object" ? s.decimal || $(s.decimalMultiplier) : tt(B(s))
|
|
828
826
|
).filter(Boolean);
|
|
829
|
-
return Math.max(...e,
|
|
830
|
-
},
|
|
831
|
-
const s = e ?
|
|
827
|
+
return Math.max(...e, S);
|
|
828
|
+
}, E = new WeakSet(), F = function(t, e) {
|
|
829
|
+
const s = e ? v(e) : this.decimalMultiplier, n = $(s), [i = "", c = ""] = t.split(".");
|
|
832
830
|
return BigInt(`${i}${c.padEnd(n, "0")}`);
|
|
833
|
-
}, v = new WeakSet(), C = function(t) {
|
|
834
|
-
const s = `${typeof t == "number" ? Number(t).toLocaleString("fullwide", {
|
|
835
|
-
useGrouping: !1,
|
|
836
|
-
maximumFractionDigits: 20
|
|
837
|
-
}) : U(t)}`.replaceAll(",", ".").split(".");
|
|
838
|
-
return s.length > 1 ? `${s.slice(0, -1).join("")}.${s.at(-1)}` : s[0];
|
|
839
|
-
}, B = new WeakSet(), G = function(t) {
|
|
840
|
-
var s;
|
|
841
|
-
const e = ((s = t.split(".")[1]) == null ? void 0 : s.length) || 0;
|
|
842
|
-
return Math.max(e, I);
|
|
843
831
|
};
|
|
844
|
-
let
|
|
845
|
-
|
|
832
|
+
let C = z;
|
|
833
|
+
const te = Intl.NumberFormat("fullwide", {
|
|
834
|
+
useGrouping: !1,
|
|
835
|
+
maximumFractionDigits: 20
|
|
836
|
+
});
|
|
837
|
+
function B(r) {
|
|
838
|
+
const e = `${typeof r == "number" ? te.format(r) : V(r)}`.replaceAll(",", ".").split(".");
|
|
839
|
+
return e.length > 1 ? `${e.slice(0, -1).join("")}.${e.at(-1)}` : e[0];
|
|
840
|
+
}
|
|
841
|
+
function tt(r) {
|
|
842
|
+
var e;
|
|
843
|
+
const t = ((e = r.split(".")[1]) == null ? void 0 : e.length) || 0;
|
|
844
|
+
return Math.max(t, S);
|
|
845
|
+
}
|
|
846
|
+
function V(r) {
|
|
846
847
|
return typeof r == "object" ? "getValue" in r ? r.getValue("string") : r.value : r;
|
|
847
848
|
}
|
|
848
|
-
const q = (r, t) => typeof r == "bigint" ?
|
|
849
|
-
let
|
|
850
|
-
const
|
|
851
|
-
if (!
|
|
849
|
+
const q = (r, t) => typeof r == "bigint" ? k({ value: r, bigIntDecimal: t, decimal: t }) : r;
|
|
850
|
+
let W;
|
|
851
|
+
const et = (r) => {
|
|
852
|
+
if (!W)
|
|
852
853
|
throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");
|
|
853
|
-
return
|
|
854
|
-
},
|
|
855
|
-
|
|
856
|
-
const e = await
|
|
857
|
-
return new
|
|
858
|
-
};
|
|
859
|
-
class
|
|
854
|
+
return W.get(r.toUpperCase()) || { decimal: d.THOR, identifier: "" };
|
|
855
|
+
}, st = async (r, t = 0) => {
|
|
856
|
+
Zt(r);
|
|
857
|
+
const e = await St(G(r)), s = q(t, e);
|
|
858
|
+
return new y({ decimal: e, value: s, identifier: r });
|
|
859
|
+
}, rt = /* @__PURE__ */ new Map();
|
|
860
|
+
class y extends C {
|
|
860
861
|
constructor(e) {
|
|
861
|
-
const s = "identifier" in e ? e.identifier : `${e.chain}.${e.symbol}
|
|
862
|
+
const s = "identifier" in e ? e.identifier : `${e.chain}.${e.symbol}`, n = rt.get(s);
|
|
863
|
+
if (n)
|
|
864
|
+
return n.set(e.value);
|
|
862
865
|
super(
|
|
863
|
-
e.value instanceof
|
|
866
|
+
e.value instanceof C ? e.value : { decimal: e.decimal, value: e.value }
|
|
864
867
|
);
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
868
|
+
p(this, "address");
|
|
869
|
+
p(this, "isSynthetic", !1);
|
|
870
|
+
p(this, "isGasAsset", !1);
|
|
871
|
+
// @ts-expect-error cache is false positive on that case
|
|
872
|
+
p(this, "chain");
|
|
873
|
+
// @ts-expect-error cache is false positive on that case
|
|
874
|
+
p(this, "symbol");
|
|
875
|
+
// @ts-expect-error cache is false positive on that case
|
|
876
|
+
p(this, "ticker");
|
|
877
|
+
// @ts-expect-error cache is false positive on that case
|
|
878
|
+
p(this, "type");
|
|
879
|
+
const i = G(s);
|
|
880
|
+
this.type = It(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, rt.set(s, this);
|
|
877
881
|
}
|
|
878
882
|
toString(e = !1) {
|
|
879
|
-
const s = this.isSynthetic ? this.symbol.split("-")[0] :
|
|
883
|
+
const s = this.isSynthetic ? this.symbol.split("-")[0] : this.ticker;
|
|
880
884
|
return e ? s : (
|
|
881
885
|
// THOR.ETH/ETH | ETH.USDT-0x1234567890
|
|
882
886
|
`${this.chain}.${this.symbol}`
|
|
@@ -886,24 +890,24 @@ class w extends E {
|
|
|
886
890
|
return this.chain === e && this.symbol === s;
|
|
887
891
|
}
|
|
888
892
|
static async fromString(e, s = 0) {
|
|
889
|
-
return
|
|
893
|
+
return st(e, s);
|
|
890
894
|
}
|
|
891
895
|
static fromStringSync(e, s = 0) {
|
|
892
|
-
const { isSynthetic: n } =
|
|
896
|
+
const { isSynthetic: n } = G(e), { decimal: i, identifier: c } = et(
|
|
893
897
|
e
|
|
894
898
|
), a = q(s, i);
|
|
895
|
-
return c ? new
|
|
899
|
+
return c ? new y({ decimal: i, identifier: c, value: a }) : n ? new y({ decimal: 8, identifier: e, value: a }) : void 0;
|
|
896
900
|
}
|
|
897
901
|
static async fromIdentifier(e, s = 0) {
|
|
898
|
-
return
|
|
902
|
+
return st(e, s);
|
|
899
903
|
}
|
|
900
904
|
static fromIdentifierSync(e, s = 0) {
|
|
901
|
-
const { decimal: n, identifier: i } =
|
|
902
|
-
return new
|
|
905
|
+
const { decimal: n, identifier: i } = et(e), c = q(s, n);
|
|
906
|
+
return new y({ decimal: n, identifier: i, value: c });
|
|
903
907
|
}
|
|
904
908
|
static fromChainOrSignature(e, s = 0) {
|
|
905
|
-
const { decimal: n, identifier: i } =
|
|
906
|
-
return new
|
|
909
|
+
const { decimal: n, identifier: i } = Ct(e), c = q(s, n);
|
|
910
|
+
return new y({ value: c, decimal: n, identifier: i });
|
|
907
911
|
}
|
|
908
912
|
static async loadStaticAssets() {
|
|
909
913
|
return new Promise(
|
|
@@ -916,10 +920,10 @@ class w extends E {
|
|
|
916
920
|
NativeList: i,
|
|
917
921
|
...c
|
|
918
922
|
} = await import("@swapkit/tokens");
|
|
919
|
-
|
|
920
|
-
(u, { tokens: l }) => (l.forEach(({ identifier: h, chain: _, ...
|
|
921
|
-
const
|
|
922
|
-
u.set(h, { identifier: h, decimal:
|
|
923
|
+
W = [i, ...Object.values(c)].reduce(
|
|
924
|
+
(u, { tokens: l }) => (l.forEach(({ identifier: h, chain: _, ...A }) => {
|
|
925
|
+
const N = "decimals" in A ? A.decimals : d[_];
|
|
926
|
+
u.set(h, { identifier: h, decimal: N });
|
|
923
927
|
}), u),
|
|
924
928
|
/* @__PURE__ */ new Map()
|
|
925
929
|
), e({ ok: !0 });
|
|
@@ -935,7 +939,7 @@ class w extends E {
|
|
|
935
939
|
}
|
|
936
940
|
}
|
|
937
941
|
const _e = (r) => {
|
|
938
|
-
const t =
|
|
942
|
+
const t = y.fromChainOrSignature(r);
|
|
939
943
|
switch (r) {
|
|
940
944
|
case o.Bitcoin:
|
|
941
945
|
case o.Litecoin:
|
|
@@ -952,7 +956,7 @@ const _e = (r) => {
|
|
|
952
956
|
default:
|
|
953
957
|
return t.set(1e-8);
|
|
954
958
|
}
|
|
955
|
-
},
|
|
959
|
+
}, G = (r) => {
|
|
956
960
|
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
961
|
return {
|
|
958
962
|
address: u == null ? void 0 : u.toLowerCase(),
|
|
@@ -1019,45 +1023,45 @@ const _e = (r) => {
|
|
|
1019
1023
|
*/
|
|
1020
1024
|
helpers_number_different_decimals: 99101
|
|
1021
1025
|
};
|
|
1022
|
-
class
|
|
1026
|
+
class dt extends Error {
|
|
1023
1027
|
constructor(t, e) {
|
|
1024
|
-
console.error(e), super(t, { cause: { code: ee[t], message: t } }), Object.setPrototypeOf(this,
|
|
1028
|
+
console.error(e), super(t, { cause: { code: ee[t], message: t } }), Object.setPrototypeOf(this, dt.prototype);
|
|
1025
1029
|
}
|
|
1026
1030
|
}
|
|
1027
|
-
class b extends
|
|
1031
|
+
class b extends C {
|
|
1028
1032
|
eq(t) {
|
|
1029
1033
|
return this.eqValue(t);
|
|
1030
1034
|
}
|
|
1031
1035
|
static fromBigInt(t, e) {
|
|
1032
1036
|
return new b({
|
|
1033
1037
|
decimal: e,
|
|
1034
|
-
value:
|
|
1038
|
+
value: k({ value: t, bigIntDecimal: e, decimal: e })
|
|
1035
1039
|
});
|
|
1036
1040
|
}
|
|
1037
1041
|
}
|
|
1038
1042
|
export {
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
+
y as AssetValue,
|
|
1044
|
+
C as BigIntArithmetics,
|
|
1045
|
+
Xt as RequestClient,
|
|
1046
|
+
dt as SwapKitError,
|
|
1043
1047
|
b as SwapKitNumber,
|
|
1044
1048
|
ie as assetFromString,
|
|
1045
1049
|
fe as derivationPathToString,
|
|
1046
1050
|
oe as filterAssets,
|
|
1047
|
-
|
|
1051
|
+
k as formatBigIntToSafeValue,
|
|
1048
1052
|
ne as gasFeeMultiplier,
|
|
1049
|
-
|
|
1050
|
-
|
|
1053
|
+
It as getAssetType,
|
|
1054
|
+
Mt as getAsymmetricAssetShare,
|
|
1051
1055
|
ce as getAsymmetricAssetWithdrawAmount,
|
|
1052
|
-
|
|
1056
|
+
Bt as getAsymmetricRuneShare,
|
|
1053
1057
|
ae as getAsymmetricRuneWithdrawAmount,
|
|
1054
|
-
|
|
1055
|
-
|
|
1058
|
+
Ct as getCommonAssetInfo,
|
|
1059
|
+
St as getDecimal,
|
|
1056
1060
|
le as getEstimatedPoolShare,
|
|
1057
1061
|
he as getLiquiditySlippage,
|
|
1058
1062
|
de as getMemoFor,
|
|
1059
1063
|
_e as getMinAmountByChain,
|
|
1060
|
-
|
|
1064
|
+
Vt as getSymmetricPoolShare,
|
|
1061
1065
|
ue as getSymmetricWithdraw,
|
|
1062
1066
|
me as getTHORNameCost,
|
|
1063
1067
|
it as isGasAsset,
|
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.26",
|
|
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
|
|
@@ -87,14 +87,14 @@ export class BigIntArithmetics {
|
|
|
87
87
|
|
|
88
88
|
// use the multiplier to keep track of decimal point - defaults to 8 if lower than 8
|
|
89
89
|
this.decimalMultiplier = toMultiplier(
|
|
90
|
-
Math.max(
|
|
90
|
+
Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0),
|
|
91
91
|
);
|
|
92
92
|
this.#setValue(value);
|
|
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);
|
|
@@ -164,7 +164,7 @@ export class BigIntArithmetics {
|
|
|
164
164
|
if (!decimal && typeof value === 'object') return value.bigIntValue;
|
|
165
165
|
|
|
166
166
|
const stringValue = getStringValue(value);
|
|
167
|
-
const safeValue =
|
|
167
|
+
const safeValue = toSafeValue(stringValue);
|
|
168
168
|
|
|
169
169
|
if (safeValue === '0' || safeValue === 'undefined') return 0n;
|
|
170
170
|
return this.#toBigInt(safeValue, decimal);
|
|
@@ -336,7 +336,7 @@ export class BigIntArithmetics {
|
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
#setValue(value: InitialisationValueType) {
|
|
339
|
-
const safeValue =
|
|
339
|
+
const safeValue = toSafeValue(value) || '0';
|
|
340
340
|
this.bigIntValue = this.#toBigInt(safeValue);
|
|
341
341
|
}
|
|
342
342
|
|
|
@@ -345,7 +345,7 @@ export class BigIntArithmetics {
|
|
|
345
345
|
.map((arg) =>
|
|
346
346
|
typeof arg === 'object'
|
|
347
347
|
? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)
|
|
348
|
-
:
|
|
348
|
+
: getFloatDecimals(toSafeValue(arg)),
|
|
349
349
|
)
|
|
350
350
|
.filter(Boolean) as number[];
|
|
351
351
|
return Math.max(...decimals, DEFAULT_DECIMAL);
|
|
@@ -358,33 +358,32 @@ export class BigIntArithmetics {
|
|
|
358
358
|
|
|
359
359
|
return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, '0')}`);
|
|
360
360
|
}
|
|
361
|
+
}
|
|
361
362
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
useGrouping: false,
|
|
367
|
-
maximumFractionDigits: 20,
|
|
368
|
-
})
|
|
369
|
-
: getStringValue(value);
|
|
370
|
-
|
|
371
|
-
const splitValue = `${parsedValue}`.replaceAll(',', '.').split('.');
|
|
372
|
-
|
|
373
|
-
return splitValue.length > 1
|
|
374
|
-
? `${splitValue.slice(0, -1).join('')}.${splitValue.at(-1)}`
|
|
375
|
-
: splitValue[0];
|
|
376
|
-
}
|
|
363
|
+
const numberFormatter = Intl.NumberFormat('fullwide', {
|
|
364
|
+
useGrouping: false,
|
|
365
|
+
maximumFractionDigits: 20,
|
|
366
|
+
});
|
|
377
367
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
}
|
|
368
|
+
function toSafeValue(value: InitialisationValueType) {
|
|
369
|
+
const parsedValue =
|
|
370
|
+
typeof value === 'number' ? numberFormatter.format(value) : getStringValue(value);
|
|
371
|
+
const splitValue = `${parsedValue}`.replaceAll(',', '.').split('.');
|
|
372
|
+
|
|
373
|
+
return splitValue.length > 1
|
|
374
|
+
? `${splitValue.slice(0, -1).join('')}.${splitValue.at(-1)}`
|
|
375
|
+
: splitValue[0];
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
function getFloatDecimals(value: string) {
|
|
379
|
+
const decimals = value.split('.')[1]?.length || 0;
|
|
380
|
+
return Math.max(decimals, DEFAULT_DECIMAL);
|
|
382
381
|
}
|
|
383
382
|
|
|
384
|
-
function getStringValue(
|
|
385
|
-
return typeof
|
|
386
|
-
? 'getValue' in
|
|
387
|
-
?
|
|
388
|
-
:
|
|
389
|
-
:
|
|
383
|
+
function getStringValue(param: SKBigIntParams) {
|
|
384
|
+
return typeof param === 'object'
|
|
385
|
+
? 'getValue' in param
|
|
386
|
+
? param.getValue('string')
|
|
387
|
+
: param.value
|
|
388
|
+
: param;
|
|
390
389
|
}
|