@swapkit/helpers 1.0.0-rc.47 → 1.0.0-rc.49
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 -1
- package/dist/index.es.js +164 -145
- package/package.json +9 -9
- package/src/helpers/memo.ts +15 -3
- package/src/modules/__tests__/assetValue.test.ts +37 -31
- package/src/modules/assetValue.ts +24 -16
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 Be=(s,e,t)=>e in s?D(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var Ie=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Se(e))!Re.call(s,r)&&r!==t&&D(s,r,{get:()=>e[r],enumerable:!(n=ve(e,r))||n.enumerable});return s};var Me=(s,e,t)=>(t=s!=null?Te($e(s)):{},Ie(e||!s||!s.__esModule?D(t,"default",{value:s,enumerable:!0}):t,s));var p=(s,e,t)=>(Be(s,typeof e!="symbol"?e+"":e,t),t),Oe=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var w=(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 d=(s,e,t)=>(Oe(s,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@swapkit/types"),Ee="0x313ce567",re=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:Ee},"latest"]})});return parseInt(BigInt(t).toString())}catch(t){return console.error(t),i.BaseDecimal[s]}},qe=async s=>{if(s===i.Chain.Ethereum)return i.BaseDecimal.ETH;const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?re({chain:i.Chain.Ethereum,to:e}):i.BaseDecimal.ETH},xe=async s=>{const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?re({chain:i.Chain.Avalanche,to:e.toLowerCase()}):i.BaseDecimal.AVAX},Ve=async s=>(s===i.Chain.BinanceSmartChain,i.BaseDecimal.BSC),ie=async({chain:s,symbol:e})=>{switch(s){case i.Chain.Ethereum:return qe(e);case i.Chain.Avalanche:return xe(e);case i.Chain.BinanceSmartChain:return Ve(e);default:return i.BaseDecimal[s]}},ke={[i.FeeOption.Average]:1.2,[i.FeeOption.Fast]:1.5,[i.FeeOption.Fastest]:2},G=({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"}},Pe=s=>{var o;const[e,...t]=s.split("."),n=s.includes("/"),r=t.join("."),a=(o=r==null?void 0:r.split("-"))==null?void 0:o[0];return{chain:e,symbol:r,ticker:a,synth:n}},De=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[,n]=t.split("-");return G({chain:e,symbol:t})||!!n},je=s=>s.filter(e=>{const t=`${e.chain}.${e.symbol}`;return!De.test(t)&&Ne(t)&&e.value!=="0"}),ce=({liquidityUnits:s,poolUnits:e,runeDepth:t})=>{const n=m(s),r=m(e),a=m(t),o=n.mul(a),c=r.mul(r).mul(2),u=r.mul(n).mul(2),h=n.mul(n),l=r.mul(r).mul(r);return o.mul(c.sub(u).add(h)).div(l)},ue=({liquidityUnits:s,poolUnits:e,assetDepth:t})=>{const n=m(s),r=m(e),a=m(t),o=n.mul(a),c=r.mul(r).mul(2),u=r.mul(n).mul(2),h=n.mul(n),l=o.mul(c.sub(u).add(h)),g=r.mul(r).mul(r);return l.div(g)},He=({percent:s,runeDepth:e,liquidityUnits:t,poolUnits:n})=>ce({runeDepth:e,liquidityUnits:t,poolUnits:n}).mul(s),Le=({percent:s,assetDepth:e,liquidityUnits:t,poolUnits:n})=>ue({assetDepth:e,liquidityUnits:t,poolUnits:n}).mul(s),m=s=>f.fromBigInt(BigInt(s),i.BaseDecimal.THOR),le=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n})=>({assetAmount:m(n).mul(s).div(e),runeAmount:m(t).mul(s).div(e)}),Fe=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n,percent:r})=>Object.fromEntries(Object.entries(le({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n})).map(([a,o])=>[a,o.mul(r)])),Ue=({runeDepth:s,poolUnits:e,assetDepth:t,liquidityUnits:n,runeAmount:r,assetAmount:a})=>{const o=new f({value:s,decimal:8}),c=new f({value:t,decimal:8}),u=new f({value:e,decimal:8}),h=new f({value:r,decimal:8}),l=new f({value:a,decimal:8}),g=h.mul(c),k=l.mul(o),ye=h.mul(l),be=o.mul(c),Ce=u.mul(g.add(k.add(ye.mul(2)))),we=g.add(k.add(be.mul(2))),J=Ce.div(we),P=m(n).add(J);if(J.getBaseValue("number")===0)return P.div(u).getBaseValue("number");const Ae=u.add(P);return P.div(Ae).getBaseValue("number")},We=({runeAmount:s,assetAmount:e,runeDepth:t,assetDepth:n})=>{if(s==="0"||e==="0"||t==="0"||n==="0")return 0;const r=m(t),a=m(n),o=m(e),c=m(s),u=o.mul(r).sub(a.mul(c)),h=a.mul(c).add(r.mul(a));return Math.abs(u.div(h).getBaseValue("number"))},Ge=({symbol:s,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${s.slice(-3)}`:s,Ke=(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:n}=e;return`${s}:${t}:${n*10**8}`}case i.MemoType.THORNAME_REGISTER:{const{name:t,chain:n,address:r,owner:a}=e;return`${s}:${t}:${n}:${r}${a?`:${a}`:""}`}case i.MemoType.DEPOSIT:{const{chain:t,symbol:n,address:r,singleSide:a}=e;return a?`${s}:${t}/${n}::t:0`:`${s}:${t}.${n}:${r||""}:t:0`}case i.MemoType.WITHDRAW:{const{chain:t,ticker:n,symbol:r,basisPoints:a,targetAssetString:o,singleSide:c}=e,u=!c&&o?`:${o}`:"",h=Ge({chain:t,symbol:r,ticker:n});return`${s}:${t}${c?"/":"."}${h}:${a}${u}`}case i.MemoType.OPEN_LOAN:case i.MemoType.CLOSE_LOAN:{const{asset:t,address:n}=e;return`${s}:${t}:${n}`}default:return""}},Ye=s=>{if(s<0)throw new Error("Invalid number of year");return 10+s},ze=s=>{if(s.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!s.match(e)},Je=([s,e,t,n,r])=>`${s}'/${e}'/${t}'/${n}${typeof r!="number"?"":`/${r}`}`;class Q extends Error{constructor(e,t,n){const r=e.status||e.status===0?e.status:"",a=e.statusText||"",o=`${r} ${a}`.trim(),c=o?`status code ${o}`:"an unknown error";super(`Request failed with ${c}`),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=n}}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 E=s=>s!==null&&typeof s=="object",M=(...s)=>{for(const e of s)if((!E(e)||Array.isArray(e))&&e!==void 0)throw new TypeError("The `options` argument must be an object");return K({},...s)},de=(s={},e={})=>{const t=new globalThis.Headers(s),n=e instanceof globalThis.Headers,r=new globalThis.Headers(e);for(const[a,o]of r.entries())n&&o==="undefined"||o===void 0?t.delete(a):t.set(a,o);return t},K=(...s)=>{let e={},t={};for(const n of s)if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(E(n)){for(let[r,a]of Object.entries(n))E(a)&&r in e&&(a=K(e[r],a)),e={...e,[r]:a};E(n.headers)&&(t=de(t,n.headers),e.headers=t)}return e},Qe=(()=>{let s=!1,e=!1;const t=typeof globalThis.ReadableStream=="function",n=typeof globalThis.Request=="function";return t&&n&&(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})(),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:"*/*"},N=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},nt={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0},rt=s=>me.includes(s)?s.toUpperCase():s,it=["get","put","head","delete","options","trace"],at=[408,413,429,500,502,503,504],fe=[413,429,503],X={limit:2,methods:it,statusCodes:at,afterStatusCodes:fe,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:s=>.3*2**(s-1)*1e3},ot=(s={})=>{if(typeof s=="number")return{...X,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{...X,...s,afterStatusCodes:fe}};async function ct(s,e,t,n){return new Promise((r,a)=>{const o=setTimeout(()=>{t&&t.abort(),a(new he(s))},n.timeout);n.fetch(s,e).then(r).catch(a).then(()=>{clearTimeout(o)})})}async function ut(s,{signal:e}){return new Promise((t,n)=>{e&&(e.throwIfAborted(),e.addEventListener("abort",r,{once:!0}));function r(){clearTimeout(a),n(e.reason)}const a=setTimeout(()=>{e==null||e.removeEventListener("abort",r),t()},s)})}const lt=(s,e)=>{const t={};for(const n in e)!(n in nt)&&!(n in st)&&!(n in s)&&(t[n]=e[n]);return t};class x{static create(e,t){const n=new x(e,t),r=async()=>{if(typeof n._options.timeout=="number"&&n._options.timeout>N)throw new RangeError(`The \`timeout\` option cannot be greater than ${N}`);await Promise.resolve();let c=await n._fetch();for(const u of n._options.hooks.afterResponse){const h=await u(n.request,n._options,n._decorateResponse(c.clone()));h instanceof globalThis.Response&&(c=h)}if(n._decorateResponse(c),!c.ok&&n._options.throwHttpErrors){let u=new Q(c,n.request,n._options);for(const h of n._options.hooks.beforeError)u=await h(u);throw u}if(n._options.onDownloadProgress){if(typeof n._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 n._stream(c.clone(),n._options.onDownloadProgress)}return c},o=n._options.retry.methods.includes(n.request.method.toLowerCase())?n._retry(r):r();for(const[c,u]of Object.entries(tt))o[c]=async()=>{n.request.headers.set("accept",n.request.headers.get("accept")||u);const l=(await o).clone();if(c==="json"){if(l.status===204||(await l.clone().arrayBuffer()).byteLength===0)return"";if(t.parseJson)return t.parseJson(await l.text())}return l[c]()};return o}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:K({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},t.hooks),method:rt(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 n=this._options.signal;this._options.signal.addEventListener("abort",()=>{this.abortController.abort(n.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 r="?"+(typeof this._options.searchParams=="string"?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString()),a=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,r);(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 Q){if(!this._options.retry.statusCodes.includes(e.response.status))return 0;const n=e.response.headers.get("Retry-After");if(n&&this._options.retry.afterStatusCodes.includes(e.response.status)){let r=Number(n);return Number.isNaN(r)?r=Date.parse(n)-Date.now():r*=1e3,this._options.retry.maxRetryAfter!==void 0&&r>this._options.retry.maxRetryAfter?0:r}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 n=Math.min(this._calculateRetryDelay(t),N);if(n!==0&&this._retryCount>0){await ut(n,{signal:this._options.signal});for(const r of this._options.hooks.beforeRetry)if(await r({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 n=await t(this.request,this._options);if(n instanceof Request){this.request=n;break}if(n instanceof Response)return n}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 n=Number(e.headers.get("content-length"))||0;let r=0;return e.status===204?(t&&t({percent:1,totalBytes:n,transferredBytes:r},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 o=e.body.getReader();t&&t({percent:0,transferredBytes:0,totalBytes:n},new Uint8Array);async function c(){const{done:u,value:h}=await o.read();if(u){a.close();return}if(t){r+=h.byteLength;const l=n===0?0:r/n;t({percent:l,transferredBytes:r,totalBytes:n},h)}a.enqueue(h),await c()}await c()}}),{status:e.status,statusText:e.statusText,headers:e.headers})}}/*! MIT License © Sindre Sorhus */const j=s=>{const e=(t,n)=>x.create(t,M(s,n));for(const t of me)e[t]=(n,r)=>x.create(n,M(s,r,{method:t}));return e.create=t=>j(M(t)),e.extend=t=>j(M(s,t)),e.stop=pe,e},ht=j(),dt=ht,mt=typeof window<"u"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},Z=dt.create({headers:mt}),ge={get:(s,e)=>Z.get(s,e).json(),post:(s,e)=>Z.post(s,e).json()},ee=Object.values(i.Chain),pt=(s="")=>{const e=s.toUpperCase(),[t]=e.split(".");if(ee.includes(t))return!0;const[n]=e.split("/");if(ee.includes(n))return!0;throw new Error(`Invalid identifier: ${s}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},$=8,b=s=>10n**BigInt(s),v=s=>Math.log10(parseFloat(s.toString()));function R({value:s,bigIntDecimal:e=$,decimal:t=$}){const n=s<0n;let r=s.toString().substring(n?1:0);const a=t-(r.length-1);a>0&&(r="0".repeat(a)+r);const o=r.length-t;let c=r.slice(-t);return parseInt(c[e])>=5?c=`${c.substring(0,e-1)}${(parseInt(c[e-1])+1).toString()}`:c=c.substring(0,e),`${n?"-":""}${r.slice(0,o)}.${c}`.replace(/\.?0*$/,"")}var C,S,_,A,V,_e,B,H,I,L;const z=class z{constructor(e){w(this,C);w(this,_);w(this,V);w(this,B);w(this,I);p(this,"decimalMultiplier",10n**8n);p(this,"bigIntValue",0n);p(this,"decimal");const t=F(e),n=typeof e=="object";this.decimal=n?e.decimal:void 0,this.decimalMultiplier=n&&"decimalMultiplier"in e?e.decimalMultiplier:b(Math.max(te(O(t)),this.decimal||0)),d(this,V,_e).call(this,t)}static fromBigInt(e,t){return new z({decimal:t,value:R({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:n}){return this.fromBigInt(e.getBaseValue("bigint")*b(n)/b(t),n)}set(e){return new this.constructor({decimal:this.decimal,value:e,identifier:this.toString()})}add(...e){return d(this,C,S).call(this,"add",...e)}sub(...e){return d(this,C,S).call(this,"sub",...e)}mul(...e){return d(this,C,S).call(this,"mul",...e)}div(...e){return d(this,C,S).call(this,"div",...e)}gt(e){return d(this,_,A).call(this,"gt",e)}gte(e){return d(this,_,A).call(this,"gte",e)}lt(e){return d(this,_,A).call(this,"lt",e)}lte(e){return d(this,_,A).call(this,"lte",e)}eqValue(e){return d(this,_,A).call(this,"eqValue",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;case"bigint":return this.bigIntValue*10n**BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(e){const t=this.decimalMultiplier/b(this.decimal||i.BaseDecimal.THOR),n=this.bigIntValue/t;switch(e){case"number":return Number(n);case"string":return n.toString();case"bigint":return n}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const n=F(e),r=O(n);return r==="0"||r==="undefined"?0n:d(this,I,L).call(this,r,t)}toSignificant(e=6){const[t,n]=this.getValue("string").split("."),r=t||"",a=n||"";if((parseInt(r)?r.length+a.length:a.length)<=e)return this.getValue("string");if(r.length>=e)return r.slice(0,e).padEnd(r.length,"0");if(parseInt(r))return`${r}.${a.slice(0,e-r.length)}`.padEnd(e-r.length,"0");const c=parseInt(a),u=`${c}`.slice(0,e);return`0.${u.padStart(a.length-`${c}`.length+u.length,"0")}`}toFixed(e=6){const[t,n]=this.getValue("string").split("."),r=t||"",a=n||"";if(parseInt(r))return`${r}.${a.slice(0,e)}`.padEnd(e,"0");const o=parseInt(a),c=`${o}`.slice(0,e);return`0.${c.padStart(a.length-`${o}`.length+c.length,"0")}`}toAbbreviation(e=2){const t=this.getValue("number"),n=["","K","M","B","T","Q","Qi","S"],r=Math.floor(Math.log10(Math.abs(t))/3),a=n[r];if(!a)return this.getValue("string");const o=10**(r*3);return`${(t/o).toFixed(e)}${a}`}toCurrency(e="$",{currencyPosition:t="start",decimal:n=2,decimalSeparator:r=".",thousandSeparator:a=","}={}){const o=this.getValue("number"),[c,u=""]=o.toFixed(6).split("."),h=c.replace(/\B(?=(\d{3})+(?!\d))/g,a),l=!c&&!u?"0.00":c==="0"?`${parseFloat(`0.${u}`)}`.replace(".",r):`${h}${parseInt(u)?`${r}${u.slice(0,n)}`:""}`;return`${t==="start"?e:""}${l}${t==="end"?e:""}`}formatBigIntToSafeValue(e,t){const n=t||this.decimal||$,r=Math.max(n,v(this.decimalMultiplier)),a=e<0n,o=e.toString().substring(a?1:0),c=r-(o.length-1),u=c>0?"0".repeat(c)+o:o,h=u.length-r;let l=u.slice(-r);return parseInt(l[n])>=5?l=`${l.substring(0,n-1)}${(parseInt(l[n-1])+1).toString()}`:l=l.substring(0,n),`${a?"-":""}${u.slice(0,h)}.${l}`.replace(/\.?0*$/,"")}};C=new WeakSet,S=function(e,...t){const n=d(this,B,H).call(this,this,...t),r=Math.max(n,v(this.decimalMultiplier)),a=b(r),o=t.reduce((u,h)=>{const l=this.getBigIntValue(h,r);switch(e){case"add":return u+l;case"sub":return u-l;case"mul":return u*l/a;case"div":{if(l===0n)throw new RangeError("Division by zero");return u*a/l}default:return u}},this.bigIntValue*a/this.decimalMultiplier),c=R({bigIntDecimal:r,decimal:r,value:o});return new this.constructor({decimalMultiplier:b(r),decimal:this.decimal,value:c,identifier:this.toString()})},_=new WeakSet,A=function(e,...t){const n=d(this,B,H).call(this,this,...t),r=this.getBigIntValue(t[0],n),a=this.getBigIntValue(this,n);switch(e){case"gt":return a>r;case"gte":return a>=r;case"lt":return a<r;case"lte":return a<=r;case"eqValue":return a===r}},V=new WeakSet,_e=function(e){const t=O(e)||"0";this.bigIntValue=d(this,I,L).call(this,t)},B=new WeakSet,H=function(...e){const t=e.map(n=>typeof n=="object"?n.decimal||v(n.decimalMultiplier):te(O(n))).filter(Boolean);return Math.max(...t,$)},I=new WeakSet,L=function(e,t){const n=t?b(t):this.decimalMultiplier,r=v(n),[a="",o=""]=e.split(".");return BigInt(`${a}${o.padEnd(r,"0")}`)};let T=z;const ft=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function O(s){const t=`${typeof s=="number"?ft.format(s):F(s)}`.replaceAll(",",".").split(".");return t.length>1?`${t.slice(0,-1).join("")}.${t.at(-1)}`:t[0]}function te(s){var t;const e=((t=s.split(".")[1])==null?void 0:t.length)||0;return Math.max(e,$)}function F(s){return typeof s=="object"?"getValue"in s?s.getValue("string"):s.value:s}const q=(s,e)=>typeof s=="bigint"?R({value:s,bigIntDecimal:e,decimal:e}):s;let U;const se=s=>{if(!U)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return U.get(s.toUpperCase())||{decimal:i.BaseDecimal.THOR,identifier:""}},ne=async(s,e=0)=>{pt(s);const t=await ie(W(s)),n=q(e,t);return new y({decimal:t,value:n,identifier:s})};class y extends T{constructor(t){const n="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,"isGasAsset",!1);p(this,"isSynthetic",!1);p(this,"symbol");p(this,"tax");p(this,"ticker");p(this,"type");const r=W(n);this.type=oe(r),this.chain=r.chain,this.ticker=r.ticker,this.symbol=r.symbol,this.address=r.address,this.isSynthetic=r.isSynthetic,this.isGasAsset=r.isGasAsset,this.tax=t.tax}toString(t=!1){const n=this.isSynthetic?this.symbol:this.ticker;return t?n:`${this.chain}.${this.symbol}`}toUrl(){return this.isSynthetic?`${this.chain}.${this.symbol.replace("/",".")}`:this.toString()}eq({chain:t,symbol:n}){return this.chain===t&&this.symbol===n}static async fromString(t,n=0){return ne(t,n)}static fromStringSync(t,n=0){const{isSynthetic:r}=W(t),{tax:a,decimal:o,identifier:c}=se(t),u=q(n,o);return c?new y({tax:a,decimal:o,identifier:c,value:u}):r?new y({tax:a,decimal:8,identifier:t,value:u}):void 0}static async fromIdentifier(t,n=0){return ne(t,n)}static fromIdentifierSync(t,n=0){const{decimal:r,identifier:a}=se(t),o=q(n,r);return new y({decimal:r,identifier:a,value:o})}static fromChainOrSignature(t,n=0){const{decimal:r,identifier:a}=ae(t),o=q(n,r);return new y({value:o,decimal:r,identifier:a})}static async loadStaticAssets(){return new Promise(async(t,n)=>{try{const r=await import("@swapkit/tokens");U=Object.values(r).reduce((o,{tokens:c})=>(c.forEach(({identifier:u,chain:h,...l})=>{const g="decimals"in l?l.decimals:i.BaseDecimal[h];o.set(u,{identifier:u,decimal:g})}),o),new Map),t({ok:!0})}catch(r){console.error(r),n({ok:!1,error:r,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const gt=s=>{const e=y.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)}},W=s=>{const e=s.slice(0,14).includes("/"),[t,n]=s.split(".").pop().split("/"),r=s.includes(".")&&!e?s:`${i.Chain.THORChain}.${n}`,[a,o]=r.split("."),[c,u]=(e?n:o).split("-");return{address:u==null?void 0:u.toLowerCase(),chain:a,isGasAsset:G({chain:a,symbol:o}),isSynthetic:e,symbol:(e?`${t}/`:"")+(u?`${c}-${(u==null?void 0:u.toLowerCase())??""}`:o),ticker:c}},_t={core_wallet_connection_not_found:10001,core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_chain_halted:10099,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_rune_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_no_rune_address:10306,core_transaction_add_liquidity_rune_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_invalid_sender_address:10313,core_transaction_deposit_server_error:10313,wallet_ledger_connection_error:20001,helpers_number_different_decimals:99101};class Y extends Error{constructor(e,t){console.error(t,{stack:t==null?void 0:t.stack,message:t==null?void 0:t.message}),super(e,{cause:{code:_t[e],message:e}}),Object.setPrototypeOf(this,Y.prototype)}}class f extends T{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=y;exports.BigIntArithmetics=T;exports.RequestClient=ge;exports.SwapKitError=Y;exports.SwapKitNumber=f;exports.assetFromString=Pe;exports.derivationPathToString=Je;exports.filterAssets=je;exports.formatBigIntToSafeValue=R;exports.gasFeeMultiplier=ke;exports.getAssetType=oe;exports.getAsymmetricAssetShare=ue;exports.getAsymmetricAssetWithdrawAmount=Le;exports.getAsymmetricRuneShare=ce;exports.getAsymmetricRuneWithdrawAmount=He;exports.getCommonAssetInfo=ae;exports.getDecimal=ie;exports.getEstimatedPoolShare=Ue;exports.getLiquiditySlippage=We;exports.getMemoFor=Ke;exports.getMinAmountByChain=gt;exports.getSymmetricPoolShare=le;exports.getSymmetricWithdraw=Fe;exports.getTHORNameCost=Ye;exports.isGasAsset=G;exports.validateTHORName=ze;
|
|
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=(s,e,t)=>e in s?D(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var Be=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Se(e))!Re.call(s,r)&&r!==t&&D(s,r,{get:()=>e[r],enumerable:!(n=ve(e,r))||n.enumerable});return s};var Me=(s,e,t)=>(t=s!=null?Te($e(s)):{},Be(e||!s||!s.__esModule?D(t,"default",{value:s,enumerable:!0}):t,s));var p=(s,e,t)=>(Ie(s,typeof e!="symbol"?e+"":e,t),t),Oe=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var w=(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 d=(s,e,t)=>(Oe(s,e,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@swapkit/types"),Ee="0x313ce567",re=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:Ee},"latest"]})});return parseInt(BigInt(t).toString())}catch(t){return console.error(t),i.BaseDecimal[s]}},qe=async s=>{if(s===i.Chain.Ethereum)return i.BaseDecimal.ETH;const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?re({chain:i.Chain.Ethereum,to:e}):i.BaseDecimal.ETH},xe=async s=>{const[,e]=s.split("-");return e!=null&&e.startsWith("0x")?re({chain:i.Chain.Avalanche,to:e.toLowerCase()}):i.BaseDecimal.AVAX},Pe=async s=>(s===i.Chain.BinanceSmartChain,i.BaseDecimal.BSC),ie=async({chain:s,symbol:e})=>{switch(s){case i.Chain.Ethereum:return qe(e);case i.Chain.Avalanche:return xe(e);case i.Chain.BinanceSmartChain:return Pe(e);default:return i.BaseDecimal[s]}},Ve={[i.FeeOption.Average]:1.2,[i.FeeOption.Fast]:1.5,[i.FeeOption.Fastest]:2},K=({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("."),n=s.includes("/"),r=t.join("."),a=(c=r==null?void 0:r.split("-"))==null?void 0:c[0];return{chain:e,symbol:r,ticker:a,synth:n}},De=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[,n]=t.split("-");return K({chain:e,symbol:t})||!!n},je=s=>s.filter(e=>{const t=`${e.chain}.${e.symbol}`;return!De.test(t)&&Ne(t)&&e.value!=="0"}),ce=({liquidityUnits:s,poolUnits:e,runeDepth:t})=>{const n=m(s),r=m(e),a=m(t),c=n.mul(a),o=r.mul(r).mul(2),u=r.mul(n).mul(2),h=n.mul(n),l=r.mul(r).mul(r);return c.mul(o.sub(u).add(h)).div(l)},ue=({liquidityUnits:s,poolUnits:e,assetDepth:t})=>{const n=m(s),r=m(e),a=m(t),c=n.mul(a),o=r.mul(r).mul(2),u=r.mul(n).mul(2),h=n.mul(n),l=c.mul(o.sub(u).add(h)),f=r.mul(r).mul(r);return l.div(f)},He=({percent:s,runeDepth:e,liquidityUnits:t,poolUnits:n})=>ce({runeDepth:e,liquidityUnits:t,poolUnits:n}).mul(s),Le=({percent:s,assetDepth:e,liquidityUnits:t,poolUnits:n})=>ue({assetDepth:e,liquidityUnits:t,poolUnits:n}).mul(s),m=s=>g.fromBigInt(BigInt(s),i.BaseDecimal.THOR),le=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n})=>({assetAmount:m(n).mul(s).div(e),runeAmount:m(t).mul(s).div(e)}),Fe=({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n,percent:r})=>Object.fromEntries(Object.entries(le({liquidityUnits:s,poolUnits:e,runeDepth:t,assetDepth:n})).map(([a,c])=>[a,c.mul(r)])),Ue=({runeDepth:s,poolUnits:e,assetDepth:t,liquidityUnits:n,runeAmount:r,assetAmount:a})=>{const c=new g({value:s,decimal:8}),o=new g({value:t,decimal:8}),u=new g({value:e,decimal:8}),h=new g({value:r,decimal:8}),l=new g({value:a,decimal:8}),f=h.mul(o),V=l.mul(c),ye=h.mul(l),be=c.mul(o),Ce=u.mul(f.add(V.add(ye.mul(2)))),we=f.add(V.add(be.mul(2))),Q=Ce.div(we),k=m(n).add(Q);if(Q.getBaseValue("number")===0)return k.div(u).getBaseValue("number");const Ae=u.add(k);return k.div(Ae).getBaseValue("number")},We=({runeAmount:s,assetAmount:e,runeDepth:t,assetDepth:n})=>{if(s==="0"||e==="0"||t==="0"||n==="0")return 0;const r=m(t),a=m(n),c=m(e),o=m(s),u=c.mul(r).sub(a.mul(o)),h=a.mul(o).add(r.mul(a));return Math.abs(u.div(h).getBaseValue("number"))},Ge=({symbol:s,ticker:e,chain:t})=>t==="ETH"&&e!=="ETH"?`${e}-${s.slice(-3)}`:s,Ke=(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:n}=e;return`${s}:${t}:${n*10**8}`}case i.MemoType.THORNAME_REGISTER:{const{name:t,chain:n,address:r,owner:a}=e;return`${s}:${t}:${n}:${r}${a?`:${a}`:""}`}case i.MemoType.DEPOSIT:{const{chain:t,symbol:n,address:r,singleSide:a}=e;return a?`${s}:${t}/${n}::t:0`:`${s}:${((o,u)=>{switch(o){case i.Chain.Litecoin:return"l";case i.Chain.Dogecoin:return"d";case i.Chain.BitcoinCash:return"c";default:return`${o}.${u}`}})(t,n)}:${r||""}:t:0`}case i.MemoType.WITHDRAW:{const{chain:t,ticker:n,symbol:r,basisPoints:a,targetAssetString:c,singleSide:o}=e,u=!o&&c?`:${c}`:"",h=Ge({chain:t,symbol:r,ticker:n});return`${s}:${t}${o?"/":"."}${h}:${a}${u}`}case i.MemoType.OPEN_LOAN:case i.MemoType.CLOSE_LOAN:{const{asset:t,address:n}=e;return`${s}:${t}:${n}`}default:return""}},Ye=s=>{if(s<0)throw new Error("Invalid number of year");return 10+s},ze=s=>{if(s.length>30)return!1;const e=/^[a-zA-Z0-9+_-]+$/g;return!!s.match(e)},Je=([s,e,t,n,r])=>`${s}'/${e}'/${t}'/${n}${typeof r!="number"?"":`/${r}`}`;class X extends Error{constructor(e,t,n){const r=e.status||e.status===0?e.status:"",a=e.statusText||"",c=`${r} ${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=n}}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 E=s=>s!==null&&typeof s=="object",M=(...s)=>{for(const e of s)if((!E(e)||Array.isArray(e))&&e!==void 0)throw new TypeError("The `options` argument must be an object");return Y({},...s)},de=(s={},e={})=>{const t=new globalThis.Headers(s),n=e instanceof globalThis.Headers,r=new globalThis.Headers(e);for(const[a,c]of r.entries())n&&c==="undefined"||c===void 0?t.delete(a):t.set(a,c);return t},Y=(...s)=>{let e={},t={};for(const n of s)if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(E(n)){for(let[r,a]of Object.entries(n))E(a)&&r in e&&(a=Y(e[r],a)),e={...e,[r]:a};E(n.headers)&&(t=de(t,n.headers),e.headers=t)}return e},Qe=(()=>{let s=!1,e=!1;const t=typeof globalThis.ReadableStream=="function",n=typeof globalThis.Request=="function";return t&&n&&(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})(),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:"*/*"},N=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},nt={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0},rt=s=>me.includes(s)?s.toUpperCase():s,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:s=>.3*2**(s-1)*1e3},ot=(s={})=>{if(typeof s=="number")return{...Z,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{...Z,...s,afterStatusCodes:fe}};async function ct(s,e,t,n){return new Promise((r,a)=>{const c=setTimeout(()=>{t&&t.abort(),a(new he(s))},n.timeout);n.fetch(s,e).then(r).catch(a).then(()=>{clearTimeout(c)})})}async function ut(s,{signal:e}){return new Promise((t,n)=>{e&&(e.throwIfAborted(),e.addEventListener("abort",r,{once:!0}));function r(){clearTimeout(a),n(e.reason)}const a=setTimeout(()=>{e==null||e.removeEventListener("abort",r),t()},s)})}const lt=(s,e)=>{const t={};for(const n in e)!(n in nt)&&!(n in st)&&!(n in s)&&(t[n]=e[n]);return t};class x{static create(e,t){const n=new x(e,t),r=async()=>{if(typeof n._options.timeout=="number"&&n._options.timeout>N)throw new RangeError(`The \`timeout\` option cannot be greater than ${N}`);await Promise.resolve();let o=await n._fetch();for(const u of n._options.hooks.afterResponse){const h=await u(n.request,n._options,n._decorateResponse(o.clone()));h instanceof globalThis.Response&&(o=h)}if(n._decorateResponse(o),!o.ok&&n._options.throwHttpErrors){let u=new X(o,n.request,n._options);for(const h of n._options.hooks.beforeError)u=await h(u);throw u}if(n._options.onDownloadProgress){if(typeof n._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 n._stream(o.clone(),n._options.onDownloadProgress)}return o},c=n._options.retry.methods.includes(n.request.method.toLowerCase())?n._retry(r):r();for(const[o,u]of Object.entries(tt))c[o]=async()=>{n.request.headers.set("accept",n.request.headers.get("accept")||u);const l=(await c).clone();if(o==="json"){if(l.status===204||(await l.clone().arrayBuffer()).byteLength===0)return"";if(t.parseJson)return t.parseJson(await l.text())}return l[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:rt(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 n=this._options.signal;this._options.signal.addEventListener("abort",()=>{this.abortController.abort(n.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 r="?"+(typeof this._options.searchParams=="string"?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString()),a=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,r);(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 n=e.response.headers.get("Retry-After");if(n&&this._options.retry.afterStatusCodes.includes(e.response.status)){let r=Number(n);return Number.isNaN(r)?r=Date.parse(n)-Date.now():r*=1e3,this._options.retry.maxRetryAfter!==void 0&&r>this._options.retry.maxRetryAfter?0:r}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 n=Math.min(this._calculateRetryDelay(t),N);if(n!==0&&this._retryCount>0){await ut(n,{signal:this._options.signal});for(const r of this._options.hooks.beforeRetry)if(await r({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 n=await t(this.request,this._options);if(n instanceof Request){this.request=n;break}if(n instanceof Response)return n}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 n=Number(e.headers.get("content-length"))||0;let r=0;return e.status===204?(t&&t({percent:1,totalBytes:n,transferredBytes:r},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:n},new Uint8Array);async function o(){const{done:u,value:h}=await c.read();if(u){a.close();return}if(t){r+=h.byteLength;const l=n===0?0:r/n;t({percent:l,transferredBytes:r,totalBytes:n},h)}a.enqueue(h),await o()}await o()}}),{status:e.status,statusText:e.statusText,headers:e.headers})}}/*! MIT License © Sindre Sorhus */const H=s=>{const e=(t,n)=>x.create(t,M(s,n));for(const t of me)e[t]=(n,r)=>x.create(n,M(s,r,{method:t}));return e.create=t=>H(M(t)),e.extend=t=>H(M(s,t)),e.stop=pe,e},ht=H(),dt=ht,mt=typeof window<"u"?{}:{referrer:"https://sk.thorswap.net",referer:"https://sk.thorswap.net"},ee=dt.create({headers:mt}),ge={get:(s,e)=>ee.get(s,e).json(),post:(s,e)=>ee.post(s,e).json()},te=Object.values(i.Chain),pt=(s="")=>{const e=s.toUpperCase(),[t]=e.split(".");if(te.includes(t))return!0;const[n]=e.split("/");if(te.includes(n))return!0;throw new Error(`Invalid identifier: ${s}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`)},$=8,b=s=>10n**BigInt(s),v=s=>Math.log10(parseFloat(s.toString()));function R({value:s,bigIntDecimal:e=$,decimal:t=$}){const n=s<0n;let r=s.toString().substring(n?1:0);const a=t-(r.length-1);a>0&&(r="0".repeat(a)+r);const c=r.length-t;let o=r.slice(-t);return parseInt(o[e])>=5?o=`${o.substring(0,e-1)}${(parseInt(o[e-1])+1).toString()}`:o=o.substring(0,e),`${n?"-":""}${r.slice(0,c)}.${o}`.replace(/\.?0*$/,"")}var C,S,_,A,P,_e,I,L,B,F;const J=class J{constructor(e){w(this,C);w(this,_);w(this,P);w(this,I);w(this,B);p(this,"decimalMultiplier",10n**8n);p(this,"bigIntValue",0n);p(this,"decimal");const t=U(e),n=typeof e=="object";this.decimal=n?e.decimal:void 0,this.decimalMultiplier=n&&"decimalMultiplier"in e?e.decimalMultiplier:b(Math.max(se(O(t)),this.decimal||0)),d(this,P,_e).call(this,t)}static fromBigInt(e,t){return new J({decimal:t,value:R({value:e,bigIntDecimal:t,decimal:t})})}static shiftDecimals({value:e,from:t,to:n}){return this.fromBigInt(e.getBaseValue("bigint")*b(n)/b(t),n)}set(e){return new this.constructor({decimal:this.decimal,value:e,identifier:this.toString()})}add(...e){return d(this,C,S).call(this,"add",...e)}sub(...e){return d(this,C,S).call(this,"sub",...e)}mul(...e){return d(this,C,S).call(this,"mul",...e)}div(...e){return d(this,C,S).call(this,"div",...e)}gt(e){return d(this,_,A).call(this,"gt",e)}gte(e){return d(this,_,A).call(this,"gte",e)}lt(e){return d(this,_,A).call(this,"lt",e)}lte(e){return d(this,_,A).call(this,"lte",e)}eqValue(e){return d(this,_,A).call(this,"eqValue",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;case"bigint":return this.bigIntValue*10n**BigInt(this.decimal||8n)/this.decimalMultiplier}}getBaseValue(e){const t=this.decimalMultiplier/b(this.decimal||i.BaseDecimal.THOR),n=this.bigIntValue/t;switch(e){case"number":return Number(n);case"string":return n.toString();case"bigint":return n}}getBigIntValue(e,t){if(!t&&typeof e=="object")return e.bigIntValue;const n=U(e),r=O(n);return r==="0"||r==="undefined"?0n:d(this,B,F).call(this,r,t)}toSignificant(e=6){const[t,n]=this.getValue("string").split("."),r=t||"",a=n||"";if((parseInt(r)?r.length+a.length:a.length)<=e)return this.getValue("string");if(r.length>=e)return r.slice(0,e).padEnd(r.length,"0");if(parseInt(r))return`${r}.${a.slice(0,e-r.length)}`.padEnd(e-r.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,n]=this.getValue("string").split("."),r=t||"",a=n||"";if(parseInt(r))return`${r}.${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"),n=["","K","M","B","T","Q","Qi","S"],r=Math.floor(Math.log10(Math.abs(t))/3),a=n[r];if(!a)return this.getValue("string");const c=10**(r*3);return`${(t/c).toFixed(e)}${a}`}toCurrency(e="$",{currencyPosition:t="start",decimal:n=2,decimalSeparator:r=".",thousandSeparator:a=","}={}){const c=this.getValue("number"),[o,u=""]=c.toFixed(6).split("."),h=o.replace(/\B(?=(\d{3})+(?!\d))/g,a),l=!o&&!u?"0.00":o==="0"?`${parseFloat(`0.${u}`)}`.replace(".",r):`${h}${parseInt(u)?`${r}${u.slice(0,n)}`:""}`;return`${t==="start"?e:""}${l}${t==="end"?e:""}`}formatBigIntToSafeValue(e,t){const n=t||this.decimal||$,r=Math.max(n,v(this.decimalMultiplier)),a=e<0n,c=e.toString().substring(a?1:0),o=r-(c.length-1),u=o>0?"0".repeat(o)+c:c,h=u.length-r;let l=u.slice(-r);return parseInt(l[n])>=5?l=`${l.substring(0,n-1)}${(parseInt(l[n-1])+1).toString()}`:l=l.substring(0,n),`${a?"-":""}${u.slice(0,h)}.${l}`.replace(/\.?0*$/,"")}};C=new WeakSet,S=function(e,...t){const n=d(this,I,L).call(this,this,...t),r=Math.max(n,v(this.decimalMultiplier)),a=b(r),c=t.reduce((u,h)=>{const l=this.getBigIntValue(h,r);switch(e){case"add":return u+l;case"sub":return u-l;case"mul":return u*l/a;case"div":{if(l===0n)throw new RangeError("Division by zero");return u*a/l}default:return u}},this.bigIntValue*a/this.decimalMultiplier),o=R({bigIntDecimal:r,decimal:r,value:c});return new this.constructor({decimalMultiplier:b(r),decimal:this.decimal,value:o,identifier:this.toString()})},_=new WeakSet,A=function(e,...t){const n=d(this,I,L).call(this,this,...t),r=this.getBigIntValue(t[0],n),a=this.getBigIntValue(this,n);switch(e){case"gt":return a>r;case"gte":return a>=r;case"lt":return a<r;case"lte":return a<=r;case"eqValue":return a===r}},P=new WeakSet,_e=function(e){const t=O(e)||"0";this.bigIntValue=d(this,B,F).call(this,t)},I=new WeakSet,L=function(...e){const t=e.map(n=>typeof n=="object"?n.decimal||v(n.decimalMultiplier):se(O(n))).filter(Boolean);return Math.max(...t,$)},B=new WeakSet,F=function(e,t){const n=t?b(t):this.decimalMultiplier,r=v(n),[a="",c=""]=e.split(".");return BigInt(`${a}${c.padEnd(r,"0")}`)};let T=J;const ft=Intl.NumberFormat("fullwide",{useGrouping:!1,maximumFractionDigits:20});function O(s){const t=`${typeof s=="number"?ft.format(s):U(s)}`.replaceAll(",",".").split(".");return t.length>1?`${t.slice(0,-1).join("")}.${t.at(-1)}`:t[0]}function se(s){var t;const e=((t=s.split(".")[1])==null?void 0:t.length)||0;return Math.max(e,$)}function U(s){return typeof s=="object"?"getValue"in s?s.getValue("string"):s.value:s}const q=(s,e)=>typeof s=="bigint"?R({value:s,bigIntDecimal:e,decimal:e}):s;let W;const ne=s=>{if(!W)throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");return W.get(s.toUpperCase())||{decimal:i.BaseDecimal.THOR,identifier:""}},j=async(s,e=0)=>{pt(s);const t=await ie(G(s)),n=q(e,t);return new y({decimal:t,value:n,identifier:s})};class y extends T{constructor(t){const n="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,"isGasAsset",!1);p(this,"isSynthetic",!1);p(this,"symbol");p(this,"tax");p(this,"ticker");p(this,"type");const r=G(n);this.type=oe(r),this.chain=r.chain,this.ticker=r.ticker,this.symbol=r.symbol,this.address=r.address,this.isSynthetic=r.isSynthetic,this.isGasAsset=r.isGasAsset,this.tax=t.tax}toString(){return this.isSynthetic?this.symbol:`${this.chain}.${this.symbol}`}toUrl(){return this.isSynthetic?`${this.chain}.${this.symbol.replace("/",".")}`:this.toString()}eq({chain:t,symbol:n}){return this.chain===t&&this.symbol===n}static fromUrl(t,n=0){const[r,a,c]=t.split(".");if(!r||!a)throw new Error("Invalid asset url");const o=r===i.Chain.THORChain&&c?`${r}.${a}/${c}`:t;return j(o,n)}static fromString(t,n=0){return j(t,n)}static fromStringSync(t,n=0){const{isSynthetic:r}=G(t),{tax:a,decimal:c,identifier:o}=ne(t),u=q(n,c);return o?new y({tax:a,decimal:c,identifier:o,value:u}):r?new y({tax:a,decimal:8,identifier:t,value:u}):void 0}static fromIdentifier(t,n=0){return j(t,n)}static fromIdentifierSync(t,n=0){const{decimal:r,identifier:a}=ne(t),c=q(n,r);return new y({decimal:r,identifier:a,value:c})}static fromChainOrSignature(t,n=0){const{decimal:r,identifier:a}=ae(t),c=q(n,r);return new y({value:c,decimal:r,identifier:a})}static loadStaticAssets(){return new Promise(async(t,n)=>{try{const r=await import("@swapkit/tokens");W=Object.values(r).reduce((c,o)=>{var u;return(u=o==null?void 0:o.tokens)==null||u.forEach(({identifier:h,chain:l,...f})=>{c.set(h,{identifier:h,decimal:"decimals"in f?f.decimals:i.BaseDecimal[l]})}),c},new Map),t({ok:!0})}catch(r){console.error(r),n({ok:!1,error:r,message:"Couldn't load static assets. Ensure you have installed @swapkit/tokens package"})}})}}const gt=s=>{const e=y.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)}},G=s=>{const e=s.slice(0,14).includes("/"),[t,n]=s.split(".").pop().split("/"),r=s.includes(".")&&!e?s:`${i.Chain.THORChain}.${n}`,[a,c]=r.split("."),[o,u]=(e?n: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}},_t={core_wallet_connection_not_found:10001,core_estimated_max_spendable_chain_not_supported:10002,core_extend_error:10003,core_inbound_data_not_found:10004,core_approve_asset_address_or_from_not_found:10005,core_chain_halted:10099,core_wallet_xdefi_not_installed:10101,core_wallet_evmwallet_not_installed:10102,core_wallet_walletconnect_not_installed:10103,core_wallet_keystore_not_installed:10104,core_wallet_ledger_not_installed:10105,core_wallet_trezor_not_installed:10106,core_wallet_keplr_not_installed:10107,core_wallet_okx_not_installed:10108,core_swap_invalid_params:10200,core_swap_route_not_complete:10201,core_swap_asset_not_recognized:10202,core_swap_contract_not_found:10203,core_swap_route_transaction_not_found:10204,core_swap_contract_not_supported:10205,core_swap_transaction_error:10206,core_swap_quote_mode_not_supported:10207,core_transaction_deposit_error:10301,core_transaction_create_liquidity_rune_error:10302,core_transaction_create_liquidity_asset_error:10303,core_transaction_create_liquidity_invalid_params:10304,core_transaction_add_liquidity_invalid_params:10305,core_transaction_add_liquidity_no_rune_address:10306,core_transaction_add_liquidity_rune_error:10307,core_transaction_add_liquidity_asset_error:10308,core_transaction_withdraw_error:10309,core_transaction_deposit_to_pool_error:10310,core_transaction_deposit_insufficient_funds_error:10311,core_transaction_deposit_gas_error:10312,core_transaction_invalid_sender_address:10313,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,{stack:t==null?void 0:t.stack,message:t==null?void 0:t.message}),super(e,{cause:{code:_t[e],message:e}}),Object.setPrototypeOf(this,z.prototype)}}class g extends T{eq(e){return this.eqValue(e)}static fromBigInt(e,t){return new g({decimal:t,value:R({value:e,bigIntDecimal:t,decimal:t})})}}exports.AssetValue=y;exports.BigIntArithmetics=T;exports.RequestClient=ge;exports.SwapKitError=z;exports.SwapKitNumber=g;exports.assetFromString=ke;exports.derivationPathToString=Je;exports.filterAssets=je;exports.formatBigIntToSafeValue=R;exports.gasFeeMultiplier=Ve;exports.getAssetType=oe;exports.getAsymmetricAssetShare=ue;exports.getAsymmetricAssetWithdrawAmount=Le;exports.getAsymmetricRuneShare=ce;exports.getAsymmetricRuneWithdrawAmount=He;exports.getCommonAssetInfo=ae;exports.getDecimal=ie;exports.getEstimatedPoolShare=Ue;exports.getLiquiditySlippage=We;exports.getMemoFor=Ke;exports.getMinAmountByChain=gt;exports.getSymmetricPoolShare=le;exports.getSymmetricWithdraw=Fe;exports.getTHORNameCost=Ye;exports.isGasAsset=K;exports.validateTHORName=ze;
|
package/dist/index.d.ts
CHANGED
|
@@ -33,12 +33,13 @@ export declare class AssetValue extends BigIntArithmetics {
|
|
|
33
33
|
ticker: string;
|
|
34
34
|
type: ReturnType<typeof getAssetType>;
|
|
35
35
|
constructor(params: AssetValueParams);
|
|
36
|
-
toString(
|
|
36
|
+
toString(): string;
|
|
37
37
|
toUrl(): string;
|
|
38
38
|
eq({ chain, symbol }: {
|
|
39
39
|
chain: Chain;
|
|
40
40
|
symbol: string;
|
|
41
41
|
}): boolean;
|
|
42
|
+
static fromUrl(urlAsset: string, value?: NumberPrimitives): Promise<AssetValue>;
|
|
42
43
|
static fromString(assetString: string, value?: NumberPrimitives): Promise<AssetValue>;
|
|
43
44
|
static fromStringSync(assetString: string, value?: NumberPrimitives): AssetValue | undefined;
|
|
44
45
|
static fromIdentifier(assetString: `${Chain}.${string}` | `${Chain}/${string}` | `${Chain}.${string}-${string}`, value?: NumberPrimitives): Promise<AssetValue>;
|
package/dist/index.es.js
CHANGED
|
@@ -139,8 +139,8 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
139
139
|
return [o.Ethereum, o.Optimism].includes(t) ? "Native" : "OPTIMISM";
|
|
140
140
|
}
|
|
141
141
|
}, oe = (r) => {
|
|
142
|
-
var
|
|
143
|
-
const [t, ...e] = r.split("."), s = r.includes("/"), n = e.join("."), i = (
|
|
142
|
+
var c;
|
|
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$%:[\]]/,
|
|
@@ -159,14 +159,14 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
159
159
|
poolUnits: t,
|
|
160
160
|
runeDepth: e
|
|
161
161
|
}) => {
|
|
162
|
-
const s = p(r), n = p(t), i = p(e),
|
|
163
|
-
return
|
|
162
|
+
const s = p(r), n = p(t), i = p(e), c = s.mul(i), a = n.mul(n).mul(2), u = n.mul(s).mul(2), d = s.mul(s), l = n.mul(n).mul(n);
|
|
163
|
+
return c.mul(a.sub(u).add(d)).div(l);
|
|
164
164
|
}, xt = ({
|
|
165
165
|
liquidityUnits: r,
|
|
166
166
|
poolUnits: t,
|
|
167
167
|
assetDepth: e
|
|
168
168
|
}) => {
|
|
169
|
-
const s = p(r), n = p(t), i = p(e),
|
|
169
|
+
const s = p(r), n = p(t), i = p(e), c = s.mul(i), a = n.mul(n).mul(2), u = n.mul(s).mul(2), d = s.mul(s), l = c.mul(a.sub(u).add(d)), _ = n.mul(n).mul(n);
|
|
170
170
|
return l.div(_);
|
|
171
171
|
}, ce = ({
|
|
172
172
|
percent: r,
|
|
@@ -194,7 +194,7 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
194
194
|
percent: n
|
|
195
195
|
}) => Object.fromEntries(
|
|
196
196
|
Object.entries(qt({ liquidityUnits: r, poolUnits: t, runeDepth: e, assetDepth: s })).map(
|
|
197
|
-
([i,
|
|
197
|
+
([i, c]) => [i, c.mul(n)]
|
|
198
198
|
)
|
|
199
199
|
), de = ({
|
|
200
200
|
runeDepth: r,
|
|
@@ -204,8 +204,8 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
204
204
|
runeAmount: n,
|
|
205
205
|
assetAmount: i
|
|
206
206
|
}) => {
|
|
207
|
-
const
|
|
208
|
-
if (
|
|
207
|
+
const c = new b({ value: r, decimal: 8 }), a = new b({ value: e, decimal: 8 }), u = new b({ value: t, decimal: 8 }), d = new b({ value: n, decimal: 8 }), l = new b({ value: i, decimal: 8 }), _ = d.mul(a), N = l.mul(c), mt = d.mul(l), pt = c.mul(a), ft = u.mul(_.add(N.add(mt.mul(2)))), _t = _.add(N.add(pt.mul(2))), Q = ft.div(_t), j = p(s).add(Q);
|
|
208
|
+
if (Q.getBaseValue("number") === 0)
|
|
209
209
|
return j.div(u).getBaseValue("number");
|
|
210
210
|
const gt = u.add(j);
|
|
211
211
|
return j.div(gt).getBaseValue("number");
|
|
@@ -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 = p(e), i = p(s),
|
|
220
|
+
const n = p(e), i = p(s), c = p(t), a = p(r), u = c.mul(n).sub(i.mul(a)), d = i.mul(a).add(n.mul(i));
|
|
221
221
|
return Math.abs(u.div(d).getBaseValue("number"));
|
|
222
|
-
},
|
|
222
|
+
}, Vt = ({
|
|
223
223
|
symbol: r,
|
|
224
224
|
ticker: t,
|
|
225
225
|
chain: e
|
|
@@ -240,11 +240,22 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
240
240
|
}
|
|
241
241
|
case g.DEPOSIT: {
|
|
242
242
|
const { chain: e, symbol: s, address: n, singleSide: i } = t;
|
|
243
|
-
return i ? `${r}:${e}/${s}::t:0` : `${r}:${
|
|
243
|
+
return i ? `${r}:${e}/${s}::t:0` : `${r}:${((a, u) => {
|
|
244
|
+
switch (a) {
|
|
245
|
+
case o.Litecoin:
|
|
246
|
+
return "l";
|
|
247
|
+
case o.Dogecoin:
|
|
248
|
+
return "d";
|
|
249
|
+
case o.BitcoinCash:
|
|
250
|
+
return "c";
|
|
251
|
+
default:
|
|
252
|
+
return `${a}.${u}`;
|
|
253
|
+
}
|
|
254
|
+
})(e, s)}:${n || ""}:t:0`;
|
|
244
255
|
}
|
|
245
256
|
case g.WITHDRAW: {
|
|
246
|
-
const { chain: e, ticker: s, symbol: n, basisPoints: i, targetAssetString:
|
|
247
|
-
return `${r}:${e}${
|
|
257
|
+
const { chain: e, ticker: s, symbol: n, basisPoints: i, targetAssetString: c, singleSide: a } = t, u = !a && c ? `:${c}` : "", d = Vt({ chain: e, symbol: n, ticker: s });
|
|
258
|
+
return `${r}:${e}${a ? "/" : "."}${d}:${i}${u}`;
|
|
248
259
|
}
|
|
249
260
|
case g.OPEN_LOAN:
|
|
250
261
|
case g.CLOSE_LOAN: {
|
|
@@ -264,10 +275,10 @@ const Tt = "0x313ce567", nt = async ({ chain: r, to: t }) => {
|
|
|
264
275
|
const t = /^[a-zA-Z0-9+_-]+$/g;
|
|
265
276
|
return !!r.match(t);
|
|
266
277
|
}, _e = ([r, t, e, s, n]) => `${r}'/${t}'/${e}'/${s}${typeof n != "number" ? "" : `/${n}`}`;
|
|
267
|
-
class
|
|
278
|
+
class X extends Error {
|
|
268
279
|
constructor(t, e, s) {
|
|
269
|
-
const n = t.status || t.status === 0 ? t.status : "", i = t.statusText || "",
|
|
270
|
-
super(`Request failed with ${
|
|
280
|
+
const n = t.status || t.status === 0 ? t.status : "", i = t.statusText || "", c = `${n} ${i}`.trim(), a = c ? `status code ${c}` : "an unknown error";
|
|
281
|
+
super(`Request failed with ${a}`), Object.defineProperty(this, "response", {
|
|
271
282
|
enumerable: !0,
|
|
272
283
|
configurable: !0,
|
|
273
284
|
writable: !0,
|
|
@@ -299,24 +310,24 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
299
310
|
for (const t of r)
|
|
300
311
|
if ((!x(t) || Array.isArray(t)) && t !== void 0)
|
|
301
312
|
throw new TypeError("The `options` argument must be an object");
|
|
302
|
-
return
|
|
313
|
+
return J({}, ...r);
|
|
303
314
|
}, at = (r = {}, t = {}) => {
|
|
304
315
|
const e = new globalThis.Headers(r), s = t instanceof globalThis.Headers, n = new globalThis.Headers(t);
|
|
305
|
-
for (const [i,
|
|
306
|
-
s &&
|
|
316
|
+
for (const [i, c] of n.entries())
|
|
317
|
+
s && c === "undefined" || c === void 0 ? e.delete(i) : e.set(i, c);
|
|
307
318
|
return e;
|
|
308
|
-
},
|
|
319
|
+
}, J = (...r) => {
|
|
309
320
|
let t = {}, e = {};
|
|
310
321
|
for (const s of r)
|
|
311
322
|
if (Array.isArray(s))
|
|
312
323
|
Array.isArray(t) || (t = []), t = [...t, ...s];
|
|
313
324
|
else if (x(s)) {
|
|
314
325
|
for (let [n, i] of Object.entries(s))
|
|
315
|
-
x(i) && n in t && (i =
|
|
326
|
+
x(i) && n in t && (i = J(t[n], i)), t = { ...t, [n]: i };
|
|
316
327
|
x(s.headers) && (e = at(e, s.headers), t.headers = e);
|
|
317
328
|
}
|
|
318
329
|
return t;
|
|
319
|
-
},
|
|
330
|
+
}, kt = (() => {
|
|
320
331
|
let r = !1, t = !1;
|
|
321
332
|
const e = typeof globalThis.ReadableStream == "function", s = typeof globalThis.Request == "function";
|
|
322
333
|
return e && s && (t = new globalThis.Request("https://empty.invalid", {
|
|
@@ -333,7 +344,7 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
333
344
|
formData: "multipart/form-data",
|
|
334
345
|
arrayBuffer: "*/*",
|
|
335
346
|
blob: "*/*"
|
|
336
|
-
},
|
|
347
|
+
}, D = 2147483647, ut = Symbol("stop"), Dt = {
|
|
337
348
|
json: !0,
|
|
338
349
|
parseJson: !0,
|
|
339
350
|
searchParams: !0,
|
|
@@ -344,7 +355,7 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
344
355
|
throwHttpErrors: !0,
|
|
345
356
|
onDownloadProgress: !0,
|
|
346
357
|
fetch: !0
|
|
347
|
-
},
|
|
358
|
+
}, Lt = {
|
|
348
359
|
method: !0,
|
|
349
360
|
headers: !0,
|
|
350
361
|
body: !0,
|
|
@@ -360,7 +371,7 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
360
371
|
window: !0,
|
|
361
372
|
dispatcher: !0,
|
|
362
373
|
duplex: !0
|
|
363
|
-
}, Ut = (r) => ct.includes(r) ? r.toUpperCase() : r, Ft = ["get", "put", "head", "delete", "options", "trace"], Wt = [408, 413, 429, 500, 502, 503, 504], lt = [413, 429, 503],
|
|
374
|
+
}, Ut = (r) => ct.includes(r) ? r.toUpperCase() : r, Ft = ["get", "put", "head", "delete", "options", "trace"], Wt = [408, 413, 429, 500, 502, 503, 504], lt = [413, 429, 503], Z = {
|
|
364
375
|
limit: 2,
|
|
365
376
|
methods: Ft,
|
|
366
377
|
statusCodes: Wt,
|
|
@@ -371,7 +382,7 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
371
382
|
}, Gt = (r = {}) => {
|
|
372
383
|
if (typeof r == "number")
|
|
373
384
|
return {
|
|
374
|
-
...
|
|
385
|
+
...Z,
|
|
375
386
|
limit: r
|
|
376
387
|
};
|
|
377
388
|
if (r.methods && !Array.isArray(r.methods))
|
|
@@ -379,18 +390,18 @@ const x = (r) => r !== null && typeof r == "object", M = (...r) => {
|
|
|
379
390
|
if (r.statusCodes && !Array.isArray(r.statusCodes))
|
|
380
391
|
throw new Error("retry.statusCodes must be an array");
|
|
381
392
|
return {
|
|
382
|
-
...
|
|
393
|
+
...Z,
|
|
383
394
|
...r,
|
|
384
395
|
afterStatusCodes: lt
|
|
385
396
|
};
|
|
386
397
|
};
|
|
387
398
|
async function Yt(r, t, e, s) {
|
|
388
399
|
return new Promise((n, i) => {
|
|
389
|
-
const
|
|
400
|
+
const c = setTimeout(() => {
|
|
390
401
|
e && e.abort(), i(new ot(r));
|
|
391
402
|
}, s.timeout);
|
|
392
403
|
s.fetch(r, t).then(n).catch(i).then(() => {
|
|
393
|
-
clearTimeout(
|
|
404
|
+
clearTimeout(c);
|
|
394
405
|
});
|
|
395
406
|
});
|
|
396
407
|
}
|
|
@@ -408,22 +419,22 @@ async function zt(r, { signal: t }) {
|
|
|
408
419
|
const Jt = (r, t) => {
|
|
409
420
|
const e = {};
|
|
410
421
|
for (const s in t)
|
|
411
|
-
!(s in
|
|
422
|
+
!(s in Lt) && !(s in Dt) && !(s in r) && (e[s] = t[s]);
|
|
412
423
|
return e;
|
|
413
424
|
};
|
|
414
|
-
class
|
|
425
|
+
class V {
|
|
415
426
|
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 ${
|
|
427
|
+
const s = new V(t, e), n = async () => {
|
|
428
|
+
if (typeof s._options.timeout == "number" && s._options.timeout > D)
|
|
429
|
+
throw new RangeError(`The \`timeout\` option cannot be greater than ${D}`);
|
|
419
430
|
await Promise.resolve();
|
|
420
|
-
let
|
|
431
|
+
let a = await s._fetch();
|
|
421
432
|
for (const u of s._options.hooks.afterResponse) {
|
|
422
|
-
const d = await u(s.request, s._options, s._decorateResponse(
|
|
423
|
-
d instanceof globalThis.Response && (
|
|
433
|
+
const d = await u(s.request, s._options, s._decorateResponse(a.clone()));
|
|
434
|
+
d instanceof globalThis.Response && (a = d);
|
|
424
435
|
}
|
|
425
|
-
if (s._decorateResponse(
|
|
426
|
-
let u = new
|
|
436
|
+
if (s._decorateResponse(a), !a.ok && s._options.throwHttpErrors) {
|
|
437
|
+
let u = new X(a, s.request, s._options);
|
|
427
438
|
for (const d of s._options.hooks.beforeError)
|
|
428
439
|
u = await d(u);
|
|
429
440
|
throw u;
|
|
@@ -433,23 +444,23 @@ class k {
|
|
|
433
444
|
throw new TypeError("The `onDownloadProgress` option must be a function");
|
|
434
445
|
if (!Nt)
|
|
435
446
|
throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");
|
|
436
|
-
return s._stream(
|
|
447
|
+
return s._stream(a.clone(), s._options.onDownloadProgress);
|
|
437
448
|
}
|
|
438
|
-
return
|
|
439
|
-
},
|
|
440
|
-
for (const [
|
|
441
|
-
a
|
|
449
|
+
return a;
|
|
450
|
+
}, c = s._options.retry.methods.includes(s.request.method.toLowerCase()) ? s._retry(n) : n();
|
|
451
|
+
for (const [a, u] of Object.entries(Ht))
|
|
452
|
+
c[a] = async () => {
|
|
442
453
|
s.request.headers.set("accept", s.request.headers.get("accept") || u);
|
|
443
|
-
const l = (await
|
|
444
|
-
if (
|
|
454
|
+
const l = (await c).clone();
|
|
455
|
+
if (a === "json") {
|
|
445
456
|
if (l.status === 204 || (await l.clone().arrayBuffer()).byteLength === 0)
|
|
446
457
|
return "";
|
|
447
458
|
if (e.parseJson)
|
|
448
459
|
return e.parseJson(await l.text());
|
|
449
460
|
}
|
|
450
|
-
return l[
|
|
461
|
+
return l[a]();
|
|
451
462
|
};
|
|
452
|
-
return
|
|
463
|
+
return c;
|
|
453
464
|
}
|
|
454
465
|
// eslint-disable-next-line complexity
|
|
455
466
|
constructor(t, e = {}) {
|
|
@@ -483,7 +494,7 @@ class k {
|
|
|
483
494
|
credentials: this._input.credentials || "same-origin",
|
|
484
495
|
...e,
|
|
485
496
|
headers: at(this._input.headers, e.headers),
|
|
486
|
-
hooks:
|
|
497
|
+
hooks: J({
|
|
487
498
|
beforeRequest: [],
|
|
488
499
|
beforeRetry: [],
|
|
489
500
|
beforeError: [],
|
|
@@ -512,7 +523,7 @@ class k {
|
|
|
512
523
|
}
|
|
513
524
|
this._options.signal = this.abortController.signal;
|
|
514
525
|
}
|
|
515
|
-
if (
|
|
526
|
+
if (kt && (this._options.duplex = "half"), this.request = new globalThis.Request(this._input, this._options), this._options.searchParams) {
|
|
516
527
|
const n = "?" + (typeof this._options.searchParams == "string" ? this._options.searchParams.replace(/^\?/, "") : new URLSearchParams(this._options.searchParams).toString()), i = this.request.url.replace(/(?:\?.*?)?(?=#|$)/, n);
|
|
517
528
|
(jt && 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
529
|
}
|
|
@@ -520,7 +531,7 @@ class k {
|
|
|
520
531
|
}
|
|
521
532
|
_calculateRetryDelay(t) {
|
|
522
533
|
if (this._retryCount++, this._retryCount < this._options.retry.limit && !(t instanceof ot)) {
|
|
523
|
-
if (t instanceof
|
|
534
|
+
if (t instanceof X) {
|
|
524
535
|
if (!this._options.retry.statusCodes.includes(t.response.status))
|
|
525
536
|
return 0;
|
|
526
537
|
const s = t.response.headers.get("Retry-After");
|
|
@@ -543,7 +554,7 @@ class k {
|
|
|
543
554
|
try {
|
|
544
555
|
return await t();
|
|
545
556
|
} catch (e) {
|
|
546
|
-
const s = Math.min(this._calculateRetryDelay(e),
|
|
557
|
+
const s = Math.min(this._calculateRetryDelay(e), D);
|
|
547
558
|
if (s !== 0 && this._retryCount > 0) {
|
|
548
559
|
await zt(s, { signal: this._options.signal });
|
|
549
560
|
for (const n of this._options.hooks.beforeRetry)
|
|
@@ -582,10 +593,10 @@ class k {
|
|
|
582
593
|
headers: t.headers
|
|
583
594
|
})) : new globalThis.Response(new globalThis.ReadableStream({
|
|
584
595
|
async start(i) {
|
|
585
|
-
const
|
|
596
|
+
const c = t.body.getReader();
|
|
586
597
|
e && e({ percent: 0, transferredBytes: 0, totalBytes: s }, new Uint8Array());
|
|
587
|
-
async function
|
|
588
|
-
const { done: u, value: d } = await
|
|
598
|
+
async function a() {
|
|
599
|
+
const { done: u, value: d } = await c.read();
|
|
589
600
|
if (u) {
|
|
590
601
|
i.close();
|
|
591
602
|
return;
|
|
@@ -595,9 +606,9 @@ class k {
|
|
|
595
606
|
const l = s === 0 ? 0 : n / s;
|
|
596
607
|
e({ percent: l, transferredBytes: n, totalBytes: s }, d);
|
|
597
608
|
}
|
|
598
|
-
i.enqueue(d), await
|
|
609
|
+
i.enqueue(d), await a();
|
|
599
610
|
}
|
|
600
|
-
await
|
|
611
|
+
await a();
|
|
601
612
|
}
|
|
602
613
|
}), {
|
|
603
614
|
status: t.status,
|
|
@@ -607,26 +618,26 @@ class k {
|
|
|
607
618
|
}
|
|
608
619
|
}
|
|
609
620
|
/*! MIT License © Sindre Sorhus */
|
|
610
|
-
const
|
|
611
|
-
const t = (e, s) =>
|
|
621
|
+
const U = (r) => {
|
|
622
|
+
const t = (e, s) => V.create(e, M(r, s));
|
|
612
623
|
for (const e of ct)
|
|
613
|
-
t[e] = (s, n) =>
|
|
614
|
-
return t.create = (e) =>
|
|
615
|
-
}, Kt =
|
|
616
|
-
get: (r, t) =>
|
|
617
|
-
post: (r, t) =>
|
|
618
|
-
},
|
|
624
|
+
t[e] = (s, n) => V.create(s, M(r, n, { method: e }));
|
|
625
|
+
return t.create = (e) => U(M(e)), t.extend = (e) => U(M(r, e)), t.stop = ut, t;
|
|
626
|
+
}, Kt = U(), Qt = Kt, Xt = typeof window < "u" ? {} : { referrer: "https://sk.thorswap.net", referer: "https://sk.thorswap.net" }, tt = Qt.create({ headers: Xt }), Zt = {
|
|
627
|
+
get: (r, t) => tt.get(r, t).json(),
|
|
628
|
+
post: (r, t) => tt.post(r, t).json()
|
|
629
|
+
}, et = Object.values(o), te = (r = "") => {
|
|
619
630
|
const t = r.toUpperCase(), [e] = t.split(".");
|
|
620
|
-
if (
|
|
631
|
+
if (et.includes(e))
|
|
621
632
|
return !0;
|
|
622
633
|
const [s] = t.split("/");
|
|
623
|
-
if (
|
|
634
|
+
if (et.includes(s))
|
|
624
635
|
return !0;
|
|
625
636
|
throw new Error(
|
|
626
637
|
`Invalid identifier: ${r}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`
|
|
627
638
|
);
|
|
628
639
|
}, C = 8, w = (r) => 10n ** BigInt(r), R = (r) => Math.log10(parseFloat(r.toString()));
|
|
629
|
-
function
|
|
640
|
+
function k({
|
|
630
641
|
value: r,
|
|
631
642
|
bigIntDecimal: t = C,
|
|
632
643
|
decimal: e = C
|
|
@@ -635,15 +646,15 @@ function V({
|
|
|
635
646
|
let n = r.toString().substring(s ? 1 : 0);
|
|
636
647
|
const i = e - (n.length - 1);
|
|
637
648
|
i > 0 && (n = "0".repeat(i) + n);
|
|
638
|
-
const
|
|
639
|
-
let
|
|
640
|
-
return parseInt(
|
|
649
|
+
const c = n.length - e;
|
|
650
|
+
let a = n.slice(-e);
|
|
651
|
+
return parseInt(a[t]) >= 5 ? a = `${a.substring(0, t - 1)}${(parseInt(a[t - 1]) + 1).toString()}` : a = a.substring(0, t), `${s ? "-" : ""}${n.slice(0, c)}.${a}`.replace(
|
|
641
652
|
/\.?0*$/,
|
|
642
653
|
""
|
|
643
654
|
);
|
|
644
655
|
}
|
|
645
|
-
var v, S, y, $, P, dt, O,
|
|
646
|
-
const
|
|
656
|
+
var v, S, y, $, P, dt, O, F, E, W;
|
|
657
|
+
const K = class K {
|
|
647
658
|
constructor(t) {
|
|
648
659
|
T(this, v);
|
|
649
660
|
T(this, y);
|
|
@@ -653,13 +664,13 @@ const J = class J {
|
|
|
653
664
|
f(this, "decimalMultiplier", 10n ** 8n);
|
|
654
665
|
f(this, "bigIntValue", 0n);
|
|
655
666
|
f(this, "decimal");
|
|
656
|
-
const e =
|
|
657
|
-
this.decimal = s ? t.decimal : void 0, this.decimalMultiplier = s && "decimalMultiplier" in t ? t.decimalMultiplier : w(Math.max(
|
|
667
|
+
const e = G(t), s = typeof t == "object";
|
|
668
|
+
this.decimal = s ? t.decimal : void 0, this.decimalMultiplier = s && "decimalMultiplier" in t ? t.decimalMultiplier : w(Math.max(st(B(e)), this.decimal || 0)), m(this, P, dt).call(this, e);
|
|
658
669
|
}
|
|
659
670
|
static fromBigInt(t, e) {
|
|
660
|
-
return new
|
|
671
|
+
return new K({
|
|
661
672
|
decimal: e,
|
|
662
|
-
value:
|
|
673
|
+
value: k({ value: t, bigIntDecimal: e, decimal: e })
|
|
663
674
|
});
|
|
664
675
|
}
|
|
665
676
|
static shiftDecimals({
|
|
@@ -732,8 +743,8 @@ const J = class J {
|
|
|
732
743
|
getBigIntValue(t, e) {
|
|
733
744
|
if (!e && typeof t == "object")
|
|
734
745
|
return t.bigIntValue;
|
|
735
|
-
const s =
|
|
736
|
-
return n === "0" || n === "undefined" ? 0n : m(this, E,
|
|
746
|
+
const s = G(t), n = B(s);
|
|
747
|
+
return n === "0" || n === "undefined" ? 0n : m(this, E, W).call(this, n, e);
|
|
737
748
|
}
|
|
738
749
|
toSignificant(t = 6) {
|
|
739
750
|
const [e, s] = this.getValue("string").split("."), n = e || "", i = s || "";
|
|
@@ -746,9 +757,9 @@ const J = class J {
|
|
|
746
757
|
t - n.length,
|
|
747
758
|
"0"
|
|
748
759
|
);
|
|
749
|
-
const
|
|
760
|
+
const a = parseInt(i), u = `${a}`.slice(0, t);
|
|
750
761
|
return `0.${u.padStart(
|
|
751
|
-
i.length - `${
|
|
762
|
+
i.length - `${a}`.length + u.length,
|
|
752
763
|
"0"
|
|
753
764
|
)}`;
|
|
754
765
|
}
|
|
@@ -756,9 +767,9 @@ const J = class J {
|
|
|
756
767
|
const [e, s] = this.getValue("string").split("."), n = e || "", i = s || "";
|
|
757
768
|
if (parseInt(n))
|
|
758
769
|
return `${n}.${i.slice(0, t)}`.padEnd(t, "0");
|
|
759
|
-
const
|
|
760
|
-
return `0.${
|
|
761
|
-
i.length - `${
|
|
770
|
+
const c = parseInt(i), a = `${c}`.slice(0, t);
|
|
771
|
+
return `0.${a.padStart(
|
|
772
|
+
i.length - `${c}`.length + a.length,
|
|
762
773
|
"0"
|
|
763
774
|
)}`;
|
|
764
775
|
}
|
|
@@ -766,8 +777,8 @@ const J = class J {
|
|
|
766
777
|
const e = this.getValue("number"), s = ["", "K", "M", "B", "T", "Q", "Qi", "S"], n = Math.floor(Math.log10(Math.abs(e)) / 3), i = s[n];
|
|
767
778
|
if (!i)
|
|
768
779
|
return this.getValue("string");
|
|
769
|
-
const
|
|
770
|
-
return `${(e /
|
|
780
|
+
const c = 10 ** (n * 3);
|
|
781
|
+
return `${(e / c).toFixed(t)}${i}`;
|
|
771
782
|
}
|
|
772
783
|
toCurrency(t = "$", {
|
|
773
784
|
currencyPosition: e = "start",
|
|
@@ -775,14 +786,14 @@ const J = class J {
|
|
|
775
786
|
decimalSeparator: n = ".",
|
|
776
787
|
thousandSeparator: i = ","
|
|
777
788
|
} = {}) {
|
|
778
|
-
const
|
|
789
|
+
const c = this.getValue("number"), [a, u = ""] = c.toFixed(6).split("."), d = a.replace(/\B(?=(\d{3})+(?!\d))/g, i), l = !a && !u ? "0.00" : a === "0" ? `${parseFloat(`0.${u}`)}`.replace(".", n) : `${d}${parseInt(u) ? `${n}${u.slice(0, s)}` : ""}`;
|
|
779
790
|
return `${e === "start" ? t : ""}${l}${e === "end" ? t : ""}`;
|
|
780
791
|
}
|
|
781
792
|
formatBigIntToSafeValue(t, e) {
|
|
782
793
|
const s = e || this.decimal || C, n = Math.max(
|
|
783
794
|
s,
|
|
784
795
|
R(this.decimalMultiplier)
|
|
785
|
-
), i = t < 0n,
|
|
796
|
+
), i = t < 0n, c = t.toString().substring(i ? 1 : 0), a = n - (c.length - 1), u = a > 0 ? "0".repeat(a) + c : c, d = u.length - n;
|
|
786
797
|
let l = u.slice(-n);
|
|
787
798
|
return parseInt(l[s]) >= 5 ? l = `${l.substring(0, s - 1)}${(parseInt(l[s - 1]) + 1).toString()}` : l = l.substring(0, s), `${i ? "-" : ""}${u.slice(
|
|
788
799
|
0,
|
|
@@ -791,7 +802,7 @@ const J = class J {
|
|
|
791
802
|
}
|
|
792
803
|
};
|
|
793
804
|
v = new WeakSet(), S = function(t, ...e) {
|
|
794
|
-
const s = m(this, O,
|
|
805
|
+
const s = m(this, O, F).call(this, this, ...e), n = Math.max(s, R(this.decimalMultiplier)), i = w(n), c = e.reduce(
|
|
795
806
|
(u, d) => {
|
|
796
807
|
const l = this.getBigIntValue(d, n);
|
|
797
808
|
switch (t) {
|
|
@@ -812,19 +823,19 @@ v = new WeakSet(), S = function(t, ...e) {
|
|
|
812
823
|
},
|
|
813
824
|
//normalize is to precision multiplier base
|
|
814
825
|
this.bigIntValue * i / this.decimalMultiplier
|
|
815
|
-
),
|
|
826
|
+
), a = k({
|
|
816
827
|
bigIntDecimal: n,
|
|
817
828
|
decimal: n,
|
|
818
|
-
value:
|
|
829
|
+
value: c
|
|
819
830
|
});
|
|
820
831
|
return new this.constructor({
|
|
821
832
|
decimalMultiplier: w(n),
|
|
822
833
|
decimal: this.decimal,
|
|
823
|
-
value:
|
|
834
|
+
value: a,
|
|
824
835
|
identifier: this.toString()
|
|
825
836
|
});
|
|
826
837
|
}, y = new WeakSet(), $ = function(t, ...e) {
|
|
827
|
-
const s = m(this, O,
|
|
838
|
+
const s = m(this, O, F).call(this, this, ...e), n = this.getBigIntValue(e[0], s), i = this.getBigIntValue(this, s);
|
|
828
839
|
switch (t) {
|
|
829
840
|
case "gt":
|
|
830
841
|
return i > n;
|
|
@@ -839,40 +850,40 @@ v = new WeakSet(), S = function(t, ...e) {
|
|
|
839
850
|
}
|
|
840
851
|
}, P = new WeakSet(), dt = function(t) {
|
|
841
852
|
const e = B(t) || "0";
|
|
842
|
-
this.bigIntValue = m(this, E,
|
|
843
|
-
}, O = new WeakSet(),
|
|
844
|
-
const e = t.map((s) => typeof s == "object" ? s.decimal || R(s.decimalMultiplier) :
|
|
853
|
+
this.bigIntValue = m(this, E, W).call(this, e);
|
|
854
|
+
}, O = new WeakSet(), F = function(...t) {
|
|
855
|
+
const e = t.map((s) => typeof s == "object" ? s.decimal || R(s.decimalMultiplier) : st(B(s))).filter(Boolean);
|
|
845
856
|
return Math.max(...e, C);
|
|
846
|
-
}, E = new WeakSet(),
|
|
847
|
-
const s = e ? w(e) : this.decimalMultiplier, n = R(s), [i = "",
|
|
848
|
-
return BigInt(`${i}${
|
|
857
|
+
}, E = new WeakSet(), W = function(t, e) {
|
|
858
|
+
const s = e ? w(e) : this.decimalMultiplier, n = R(s), [i = "", c = ""] = t.split(".");
|
|
859
|
+
return BigInt(`${i}${c.padEnd(n, "0")}`);
|
|
849
860
|
};
|
|
850
|
-
let I =
|
|
861
|
+
let I = K;
|
|
851
862
|
const ee = Intl.NumberFormat("fullwide", {
|
|
852
863
|
useGrouping: !1,
|
|
853
864
|
maximumFractionDigits: 20
|
|
854
865
|
});
|
|
855
866
|
function B(r) {
|
|
856
|
-
const e = `${typeof r == "number" ? ee.format(r) :
|
|
867
|
+
const e = `${typeof r == "number" ? ee.format(r) : G(r)}`.replaceAll(",", ".").split(".");
|
|
857
868
|
return e.length > 1 ? `${e.slice(0, -1).join("")}.${e.at(-1)}` : e[0];
|
|
858
869
|
}
|
|
859
|
-
function
|
|
870
|
+
function st(r) {
|
|
860
871
|
var e;
|
|
861
872
|
const t = ((e = r.split(".")[1]) == null ? void 0 : e.length) || 0;
|
|
862
873
|
return Math.max(t, C);
|
|
863
874
|
}
|
|
864
|
-
function
|
|
875
|
+
function G(r) {
|
|
865
876
|
return typeof r == "object" ? "getValue" in r ? r.getValue("string") : r.value : r;
|
|
866
877
|
}
|
|
867
|
-
const q = (r, t) => typeof r == "bigint" ?
|
|
868
|
-
let
|
|
869
|
-
const
|
|
870
|
-
if (!
|
|
878
|
+
const q = (r, t) => typeof r == "bigint" ? k({ value: r, bigIntDecimal: t, decimal: t }) : r;
|
|
879
|
+
let Y;
|
|
880
|
+
const rt = (r) => {
|
|
881
|
+
if (!Y)
|
|
871
882
|
throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");
|
|
872
|
-
return
|
|
873
|
-
},
|
|
883
|
+
return Y.get(r.toUpperCase()) || { decimal: h.THOR, identifier: "" };
|
|
884
|
+
}, L = async (r, t = 0) => {
|
|
874
885
|
te(r);
|
|
875
|
-
const e = await Ct(
|
|
886
|
+
const e = await Ct(z(r)), s = q(t, e);
|
|
876
887
|
return new A({ decimal: e, value: s, identifier: r });
|
|
877
888
|
};
|
|
878
889
|
class A extends I {
|
|
@@ -889,18 +900,11 @@ class A extends I {
|
|
|
889
900
|
f(this, "tax");
|
|
890
901
|
f(this, "ticker");
|
|
891
902
|
f(this, "type");
|
|
892
|
-
const n =
|
|
903
|
+
const n = z(s);
|
|
893
904
|
this.type = Ot(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, this.tax = e.tax;
|
|
894
905
|
}
|
|
895
|
-
toString(
|
|
896
|
-
|
|
897
|
-
return e ? (
|
|
898
|
-
// ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044 | USDT
|
|
899
|
-
s
|
|
900
|
-
) : (
|
|
901
|
-
// THOR.ETH/ETH | ETH.USDT-0x1234567890
|
|
902
|
-
`${this.chain}.${this.symbol}`
|
|
903
|
-
);
|
|
906
|
+
toString() {
|
|
907
|
+
return this.isSynthetic ? this.symbol : `${this.chain}.${this.symbol}`;
|
|
904
908
|
}
|
|
905
909
|
toUrl() {
|
|
906
910
|
return this.isSynthetic ? `${this.chain}.${this.symbol.replace("/", ".")}` : this.toString();
|
|
@@ -908,37 +912,52 @@ class A extends I {
|
|
|
908
912
|
eq({ chain: e, symbol: s }) {
|
|
909
913
|
return this.chain === e && this.symbol === s;
|
|
910
914
|
}
|
|
911
|
-
|
|
912
|
-
|
|
915
|
+
// THOR.RUNE
|
|
916
|
+
// THOR.ETH.ETH
|
|
917
|
+
// ETH.THOR-0x1234567890
|
|
918
|
+
static fromUrl(e, s = 0) {
|
|
919
|
+
const [n, i, c] = e.split(".");
|
|
920
|
+
if (!n || !i)
|
|
921
|
+
throw new Error("Invalid asset url");
|
|
922
|
+
const a = n === o.THORChain && c ? `${n}.${i}/${c}` : e;
|
|
923
|
+
return L(a, s);
|
|
924
|
+
}
|
|
925
|
+
static fromString(e, s = 0) {
|
|
926
|
+
return L(e, s);
|
|
913
927
|
}
|
|
914
928
|
static fromStringSync(e, s = 0) {
|
|
915
|
-
const { isSynthetic: n } =
|
|
929
|
+
const { isSynthetic: n } = z(e), {
|
|
916
930
|
tax: i,
|
|
917
|
-
decimal:
|
|
918
|
-
identifier:
|
|
919
|
-
} =
|
|
920
|
-
return
|
|
931
|
+
decimal: c,
|
|
932
|
+
identifier: a
|
|
933
|
+
} = rt(e), u = q(s, c);
|
|
934
|
+
return a ? new A({ tax: i, decimal: c, identifier: a, value: u }) : n ? new A({ tax: i, decimal: 8, identifier: e, value: u }) : void 0;
|
|
921
935
|
}
|
|
922
|
-
static
|
|
923
|
-
return
|
|
936
|
+
static fromIdentifier(e, s = 0) {
|
|
937
|
+
return L(e, s);
|
|
924
938
|
}
|
|
925
939
|
static fromIdentifierSync(e, s = 0) {
|
|
926
|
-
const { decimal: n, identifier: i } =
|
|
927
|
-
return new A({ decimal: n, identifier: i, value:
|
|
940
|
+
const { decimal: n, identifier: i } = rt(e), c = q(s, n);
|
|
941
|
+
return new A({ decimal: n, identifier: i, value: c });
|
|
928
942
|
}
|
|
929
943
|
static fromChainOrSignature(e, s = 0) {
|
|
930
|
-
const { decimal: n, identifier: i } = It(e),
|
|
931
|
-
return new A({ value:
|
|
944
|
+
const { decimal: n, identifier: i } = It(e), c = q(s, n);
|
|
945
|
+
return new A({ value: c, decimal: n, identifier: i });
|
|
932
946
|
}
|
|
933
|
-
static
|
|
947
|
+
static loadStaticAssets() {
|
|
934
948
|
return new Promise(
|
|
935
949
|
async (e, s) => {
|
|
936
950
|
try {
|
|
937
951
|
const n = await import("@swapkit/tokens");
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
a.
|
|
941
|
-
|
|
952
|
+
Y = Object.values(n).reduce((c, a) => {
|
|
953
|
+
var u;
|
|
954
|
+
return (u = a == null ? void 0 : a.tokens) == null || u.forEach(({ identifier: d, chain: l, ..._ }) => {
|
|
955
|
+
c.set(d, {
|
|
956
|
+
identifier: d,
|
|
957
|
+
decimal: "decimals" in _ ? _.decimals : h[l]
|
|
958
|
+
});
|
|
959
|
+
}), c;
|
|
960
|
+
}, /* @__PURE__ */ new Map()), e({ ok: !0 });
|
|
942
961
|
} catch (n) {
|
|
943
962
|
console.error(n), s({
|
|
944
963
|
ok: !1,
|
|
@@ -968,15 +987,15 @@ const ge = (r) => {
|
|
|
968
987
|
default:
|
|
969
988
|
return t.set(1e-8);
|
|
970
989
|
}
|
|
971
|
-
},
|
|
972
|
-
const t = r.slice(0, 14).includes("/"), [e, s] = r.split(".").pop().split("/"), n = r.includes(".") && !t ? r : `${o.THORChain}.${s}`, [i,
|
|
990
|
+
}, z = (r) => {
|
|
991
|
+
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("-");
|
|
973
992
|
return {
|
|
974
993
|
address: u == null ? void 0 : u.toLowerCase(),
|
|
975
994
|
chain: i,
|
|
976
|
-
isGasAsset: it({ chain: i, symbol:
|
|
995
|
+
isGasAsset: it({ chain: i, symbol: c }),
|
|
977
996
|
isSynthetic: t,
|
|
978
|
-
symbol: (t ? `${e}/` : "") + (u ? `${
|
|
979
|
-
ticker:
|
|
997
|
+
symbol: (t ? `${e}/` : "") + (u ? `${a}-${(u == null ? void 0 : u.toLowerCase()) ?? ""}` : c),
|
|
998
|
+
ticker: a
|
|
980
999
|
};
|
|
981
1000
|
}, se = {
|
|
982
1001
|
/**
|
|
@@ -1048,7 +1067,7 @@ class b extends I {
|
|
|
1048
1067
|
static fromBigInt(t, e) {
|
|
1049
1068
|
return new b({
|
|
1050
1069
|
decimal: e,
|
|
1051
|
-
value:
|
|
1070
|
+
value: k({ value: t, bigIntDecimal: e, decimal: e })
|
|
1052
1071
|
});
|
|
1053
1072
|
}
|
|
1054
1073
|
}
|
|
@@ -1061,7 +1080,7 @@ export {
|
|
|
1061
1080
|
oe as assetFromString,
|
|
1062
1081
|
_e as derivationPathToString,
|
|
1063
1082
|
ae as filterAssets,
|
|
1064
|
-
|
|
1083
|
+
k as formatBigIntToSafeValue,
|
|
1065
1084
|
ie as gasFeeMultiplier,
|
|
1066
1085
|
Ot as getAssetType,
|
|
1067
1086
|
xt as getAsymmetricAssetShare,
|
package/package.json
CHANGED
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
"ky": "1.1.3"
|
|
6
6
|
},
|
|
7
7
|
"devDependencies": {
|
|
8
|
-
"@vitest/coverage-istanbul": "0.
|
|
9
|
-
"vite": "
|
|
10
|
-
"vitest": "0.
|
|
11
|
-
"@internal/config": "0.0.0-rc.
|
|
12
|
-
"@swapkit/tokens": "1.0.0-rc.
|
|
13
|
-
"@swapkit/types": "1.0.0-rc.
|
|
8
|
+
"@vitest/coverage-istanbul": "1.0.1",
|
|
9
|
+
"vite": "5.0.6",
|
|
10
|
+
"vitest": "1.0.1",
|
|
11
|
+
"@internal/config": "0.0.0-rc.12",
|
|
12
|
+
"@swapkit/tokens": "1.0.0-rc.28",
|
|
13
|
+
"@swapkit/types": "1.0.0-rc.26"
|
|
14
14
|
},
|
|
15
15
|
"eslintConfig": {
|
|
16
16
|
"extends": "../../../internal/eslint-config"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@swapkit/tokens": "1.0.0-rc.
|
|
20
|
-
"@swapkit/types": "1.0.0-rc.
|
|
19
|
+
"@swapkit/tokens": "1.0.0-rc.28",
|
|
20
|
+
"@swapkit/types": "1.0.0-rc.26"
|
|
21
21
|
},
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
@@ -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.49",
|
|
46
46
|
"scripts": {
|
|
47
47
|
"build": "vite build",
|
|
48
48
|
"clean": "rm -rf dist vite.config.ts.* .turbo node_modules",
|
package/src/helpers/memo.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MemoType } from '@swapkit/types';
|
|
1
|
+
import { Chain, MemoType } from '@swapkit/types';
|
|
3
2
|
|
|
4
3
|
export type ThornameRegisterParam = {
|
|
5
4
|
name: string;
|
|
@@ -61,9 +60,22 @@ export const getMemoFor = <T extends MemoType>(memoType: T, options: MemoOptions
|
|
|
61
60
|
case MemoType.DEPOSIT: {
|
|
62
61
|
const { chain, symbol, address, singleSide } = options as MemoOptions<MemoType.DEPOSIT>;
|
|
63
62
|
|
|
63
|
+
const getPoolIdentifier = (chain: Chain, symbol: string): string => {
|
|
64
|
+
switch (chain) {
|
|
65
|
+
case Chain.Litecoin:
|
|
66
|
+
return 'l';
|
|
67
|
+
case Chain.Dogecoin:
|
|
68
|
+
return 'd';
|
|
69
|
+
case Chain.BitcoinCash:
|
|
70
|
+
return 'c';
|
|
71
|
+
default:
|
|
72
|
+
return `${chain}.${symbol}`;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
64
76
|
return singleSide
|
|
65
77
|
? `${memoType}:${chain}/${symbol}::t:0`
|
|
66
|
-
: `${memoType}:${chain
|
|
78
|
+
: `${memoType}:${getPoolIdentifier(chain, symbol)}:${address || ''}:t:0`;
|
|
67
79
|
}
|
|
68
80
|
|
|
69
81
|
case MemoType.WITHDRAW: {
|
|
@@ -12,14 +12,10 @@ describe('AssetValue', () => {
|
|
|
12
12
|
chain: Chain.Avalanche,
|
|
13
13
|
symbol: 'USDC-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
|
|
14
14
|
});
|
|
15
|
-
expect(fakeAvaxUSDCAsset.toString(true)).toBe('USDC');
|
|
16
15
|
expect(fakeAvaxUSDCAsset.toString()).toBe(
|
|
17
16
|
'AVAX.USDC-0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',
|
|
18
17
|
);
|
|
19
18
|
|
|
20
|
-
const thor = AssetValue.fromChainOrSignature('ETH.THOR');
|
|
21
|
-
expect(thor.toString(true)).toBe('THOR');
|
|
22
|
-
|
|
23
19
|
const ethSynth = new AssetValue({
|
|
24
20
|
chain: Chain.THORChain,
|
|
25
21
|
symbol: 'ETH/ETH',
|
|
@@ -27,8 +23,7 @@ describe('AssetValue', () => {
|
|
|
27
23
|
value: 1234567890,
|
|
28
24
|
});
|
|
29
25
|
|
|
30
|
-
expect(ethSynth.toString()).toBe('
|
|
31
|
-
expect(ethSynth.toString(true)).toBe('ETH/ETH');
|
|
26
|
+
expect(ethSynth.toString()).toBe('ETH/ETH');
|
|
32
27
|
expect(ethSynth.mul(21.37).getValue('string')).toBe('26382715809.3');
|
|
33
28
|
|
|
34
29
|
const ethThorSynth = new AssetValue({
|
|
@@ -37,12 +32,7 @@ describe('AssetValue', () => {
|
|
|
37
32
|
decimal: 8,
|
|
38
33
|
value: 1234567890,
|
|
39
34
|
});
|
|
40
|
-
expect(ethThorSynth.toString()).toBe(
|
|
41
|
-
'THOR.ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044',
|
|
42
|
-
);
|
|
43
|
-
expect(ethThorSynth.toString(true)).toBe(
|
|
44
|
-
'ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044',
|
|
45
|
-
);
|
|
35
|
+
expect(ethThorSynth.toString()).toBe('ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044');
|
|
46
36
|
|
|
47
37
|
const atomDerived = new AssetValue({
|
|
48
38
|
identifier: 'THOR.ATOM',
|
|
@@ -50,7 +40,6 @@ describe('AssetValue', () => {
|
|
|
50
40
|
value: 123456789,
|
|
51
41
|
});
|
|
52
42
|
|
|
53
|
-
expect(atomDerived.toString(true)).toBe('ATOM');
|
|
54
43
|
expect(atomDerived.toString()).toBe('THOR.ATOM');
|
|
55
44
|
});
|
|
56
45
|
});
|
|
@@ -144,7 +133,7 @@ describe('AssetValue', () => {
|
|
|
144
133
|
expect(thor.toString()).toBe('ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044');
|
|
145
134
|
|
|
146
135
|
const ethSynth = await AssetValue.fromIdentifier('ETH/ETH');
|
|
147
|
-
expect(ethSynth.toString()).toBe('
|
|
136
|
+
expect(ethSynth.toString()).toBe('ETH/ETH');
|
|
148
137
|
});
|
|
149
138
|
});
|
|
150
139
|
|
|
@@ -169,23 +158,40 @@ describe('AssetValue', () => {
|
|
|
169
158
|
});
|
|
170
159
|
|
|
171
160
|
describe('fromString', () => {
|
|
172
|
-
test('creates AssetValue from string', () => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
expect
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
161
|
+
test('creates AssetValue from string', async () => {
|
|
162
|
+
const fakeAvaxAssetString = 'AVAX.ASDF-1234';
|
|
163
|
+
const fakeAvaxAsset = await AssetValue.fromString(fakeAvaxAssetString);
|
|
164
|
+
|
|
165
|
+
expect(fakeAvaxAsset).toEqual(
|
|
166
|
+
expect.objectContaining({
|
|
167
|
+
address: '1234',
|
|
168
|
+
chain: Chain.Avalanche,
|
|
169
|
+
decimal: 18,
|
|
170
|
+
isGasAsset: false,
|
|
171
|
+
isSynthetic: false,
|
|
172
|
+
symbol: 'ASDF-1234',
|
|
173
|
+
ticker: 'ASDF',
|
|
174
|
+
}),
|
|
175
|
+
);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
describe('fromUrl', () => {
|
|
180
|
+
test('creates AssetValue from url like format', async () => {
|
|
181
|
+
const synthETHString = 'THOR.ETH.ETH';
|
|
182
|
+
const ethString = 'ETH.ETH';
|
|
183
|
+
const thorString = 'ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044';
|
|
184
|
+
const synthThorString = 'THOR.ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044';
|
|
185
|
+
|
|
186
|
+
const synthETH = await AssetValue.fromUrl(synthETHString);
|
|
187
|
+
const eth = await AssetValue.fromUrl(ethString);
|
|
188
|
+
const thor = await AssetValue.fromUrl(thorString);
|
|
189
|
+
const synthThor = await AssetValue.fromUrl(synthThorString);
|
|
190
|
+
|
|
191
|
+
expect(synthETH.toString()).toBe('ETH/ETH');
|
|
192
|
+
expect(eth.toString()).toBe('ETH.ETH');
|
|
193
|
+
expect(thor.toString()).toBe('ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044');
|
|
194
|
+
expect(synthThor.toString()).toBe('ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044');
|
|
189
195
|
});
|
|
190
196
|
});
|
|
191
197
|
|
|
@@ -103,14 +103,8 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
103
103
|
this.tax = params.tax;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
toString(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return short
|
|
110
|
-
? // ETH/THOR-0xa5f2211b9b8170f694421f2046281775e8468044 | USDT
|
|
111
|
-
shortFormat
|
|
112
|
-
: // THOR.ETH/ETH | ETH.USDT-0x1234567890
|
|
113
|
-
`${this.chain}.${this.symbol}`;
|
|
106
|
+
toString() {
|
|
107
|
+
return this.isSynthetic ? this.symbol : `${this.chain}.${this.symbol}`;
|
|
114
108
|
}
|
|
115
109
|
|
|
116
110
|
toUrl() {
|
|
@@ -121,7 +115,20 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
121
115
|
return this.chain === chain && this.symbol === symbol;
|
|
122
116
|
}
|
|
123
117
|
|
|
124
|
-
|
|
118
|
+
// THOR.RUNE
|
|
119
|
+
// THOR.ETH.ETH
|
|
120
|
+
// ETH.THOR-0x1234567890
|
|
121
|
+
static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {
|
|
122
|
+
const [chain, ticker, symbol] = urlAsset.split('.');
|
|
123
|
+
if (!chain || !ticker) throw new Error('Invalid asset url');
|
|
124
|
+
|
|
125
|
+
const assetString =
|
|
126
|
+
chain === Chain.THORChain && symbol ? `${chain}.${ticker}/${symbol}` : urlAsset;
|
|
127
|
+
|
|
128
|
+
return createAssetValue(assetString, value);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static fromString(assetString: string, value: NumberPrimitives = 0) {
|
|
125
132
|
return createAssetValue(assetString, value);
|
|
126
133
|
}
|
|
127
134
|
|
|
@@ -144,7 +151,7 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
144
151
|
return asset;
|
|
145
152
|
}
|
|
146
153
|
|
|
147
|
-
static
|
|
154
|
+
static fromIdentifier(
|
|
148
155
|
assetString: `${Chain}.${string}` | `${Chain}/${string}` | `${Chain}.${string}-${string}`,
|
|
149
156
|
value: NumberPrimitives = 0,
|
|
150
157
|
) {
|
|
@@ -165,16 +172,17 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
165
172
|
return new AssetValue({ value: parsedValue, decimal, identifier });
|
|
166
173
|
}
|
|
167
174
|
|
|
168
|
-
static
|
|
175
|
+
static loadStaticAssets() {
|
|
169
176
|
return new Promise<{ ok: true } | { ok: false; message: string; error: any }>(
|
|
170
177
|
async (resolve, reject) => {
|
|
171
178
|
try {
|
|
172
179
|
const tokenPackages = await import('@swapkit/tokens');
|
|
173
|
-
const tokensMap = Object.values(tokenPackages).reduce((acc,
|
|
174
|
-
tokens
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
180
|
+
const tokensMap = Object.values(tokenPackages).reduce((acc, tokenList) => {
|
|
181
|
+
tokenList?.tokens?.forEach(({ identifier, chain, ...rest }) => {
|
|
182
|
+
acc.set(identifier as TokenNames, {
|
|
183
|
+
identifier,
|
|
184
|
+
decimal: 'decimals' in rest ? rest.decimals : BaseDecimal[chain as Chain],
|
|
185
|
+
});
|
|
178
186
|
});
|
|
179
187
|
|
|
180
188
|
return acc;
|