@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 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(short?: boolean): string;
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 a;
143
- const [t, ...e] = r.split("."), s = r.includes("/"), n = e.join("."), i = (a = n == null ? void 0 : n.split("-")) == null ? void 0 : a[0];
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), a = s.mul(i), c = n.mul(n).mul(2), u = n.mul(s).mul(2), d = s.mul(s), l = n.mul(n).mul(n);
163
- return a.mul(c.sub(u).add(d)).div(l);
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), a = s.mul(i), c = n.mul(n).mul(2), u = n.mul(s).mul(2), d = s.mul(s), l = a.mul(c.sub(u).add(d)), _ = n.mul(n).mul(n);
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, a]) => [i, a.mul(n)]
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 a = new b({ value: r, decimal: 8 }), c = 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(c), N = l.mul(a), mt = d.mul(l), pt = a.mul(c), ft = u.mul(_.add(N.add(mt.mul(2)))), _t = _.add(N.add(pt.mul(2))), K = ft.div(_t), j = p(s).add(K);
208
- if (K.getBaseValue("number") === 0)
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), a = p(t), c = p(r), u = a.mul(n).sub(i.mul(c)), d = i.mul(c).add(n.mul(i));
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
- }, kt = ({
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}:${e}.${s}:${n || ""}:t:0`;
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: a, singleSide: c } = t, u = !c && a ? `:${a}` : "", d = kt({ chain: e, symbol: n, ticker: s });
247
- return `${r}:${e}${c ? "/" : "."}${d}:${i}${u}`;
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 Q extends Error {
278
+ class X extends Error {
268
279
  constructor(t, e, s) {
269
- const n = t.status || t.status === 0 ? t.status : "", i = t.statusText || "", a = `${n} ${i}`.trim(), c = a ? `status code ${a}` : "an unknown error";
270
- super(`Request failed with ${c}`), Object.defineProperty(this, "response", {
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 z({}, ...r);
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, a] of n.entries())
306
- s && a === "undefined" || a === void 0 ? e.delete(i) : e.set(i, a);
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
- }, z = (...r) => {
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 = z(t[n], i)), t = { ...t, [n]: 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
- }, Vt = (() => {
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
- }, L = 2147483647, ut = Symbol("stop"), Lt = {
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
- }, Dt = {
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], X = {
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
- ...X,
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
- ...X,
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 a = setTimeout(() => {
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(a);
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 Dt) && !(s in Lt) && !(s in r) && (e[s] = t[s]);
422
+ !(s in Lt) && !(s in Dt) && !(s in r) && (e[s] = t[s]);
412
423
  return e;
413
424
  };
414
- class k {
425
+ class V {
415
426
  static create(t, e) {
416
- const s = new k(t, e), n = async () => {
417
- if (typeof s._options.timeout == "number" && s._options.timeout > L)
418
- throw new RangeError(`The \`timeout\` option cannot be greater than ${L}`);
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 c = await s._fetch();
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(c.clone()));
423
- d instanceof globalThis.Response && (c = d);
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(c), !c.ok && s._options.throwHttpErrors) {
426
- let u = new Q(c, s.request, s._options);
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(c.clone(), s._options.onDownloadProgress);
447
+ return s._stream(a.clone(), s._options.onDownloadProgress);
437
448
  }
438
- return c;
439
- }, a = s._options.retry.methods.includes(s.request.method.toLowerCase()) ? s._retry(n) : n();
440
- for (const [c, u] of Object.entries(Ht))
441
- a[c] = async () => {
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 a).clone();
444
- if (c === "json") {
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[c]();
461
+ return l[a]();
451
462
  };
452
- return a;
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: z({
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 (Vt && (this._options.duplex = "half"), this.request = new globalThis.Request(this._input, this._options), this._options.searchParams) {
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 Q) {
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), L);
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 a = t.body.getReader();
596
+ const c = t.body.getReader();
586
597
  e && e({ percent: 0, transferredBytes: 0, totalBytes: s }, new Uint8Array());
587
- async function c() {
588
- const { done: u, value: d } = await a.read();
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 c();
609
+ i.enqueue(d), await a();
599
610
  }
600
- await c();
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 D = (r) => {
611
- const t = (e, s) => k.create(e, M(r, 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) => k.create(s, M(r, n, { method: e }));
614
- return t.create = (e) => D(M(e)), t.extend = (e) => D(M(r, e)), t.stop = ut, t;
615
- }, Kt = D(), Qt = Kt, Xt = typeof window < "u" ? {} : { referrer: "https://sk.thorswap.net", referer: "https://sk.thorswap.net" }, Z = Qt.create({ headers: Xt }), Zt = {
616
- get: (r, t) => Z.get(r, t).json(),
617
- post: (r, t) => Z.post(r, t).json()
618
- }, tt = Object.values(o), te = (r = "") => {
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 (tt.includes(e))
631
+ if (et.includes(e))
621
632
  return !0;
622
633
  const [s] = t.split("/");
623
- if (tt.includes(s))
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 V({
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 a = n.length - e;
639
- let c = n.slice(-e);
640
- return parseInt(c[t]) >= 5 ? c = `${c.substring(0, t - 1)}${(parseInt(c[t - 1]) + 1).toString()}` : c = c.substring(0, t), `${s ? "-" : ""}${n.slice(0, a)}.${c}`.replace(
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, U, E, F;
646
- const J = class J {
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 = W(t), s = typeof t == "object";
657
- this.decimal = s ? t.decimal : void 0, this.decimalMultiplier = s && "decimalMultiplier" in t ? t.decimalMultiplier : w(Math.max(et(B(e)), this.decimal || 0)), m(this, P, dt).call(this, e);
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 J({
671
+ return new K({
661
672
  decimal: e,
662
- value: V({ value: t, bigIntDecimal: e, decimal: e })
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 = W(t), n = B(s);
736
- return n === "0" || n === "undefined" ? 0n : m(this, E, F).call(this, n, 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 c = parseInt(i), u = `${c}`.slice(0, t);
760
+ const a = parseInt(i), u = `${a}`.slice(0, t);
750
761
  return `0.${u.padStart(
751
- i.length - `${c}`.length + u.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 a = parseInt(i), c = `${a}`.slice(0, t);
760
- return `0.${c.padStart(
761
- i.length - `${a}`.length + c.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 a = 10 ** (n * 3);
770
- return `${(e / a).toFixed(t)}${i}`;
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 a = this.getValue("number"), [c, u = ""] = a.toFixed(6).split("."), d = c.replace(/\B(?=(\d{3})+(?!\d))/g, i), l = !c && !u ? "0.00" : c === "0" ? `${parseFloat(`0.${u}`)}`.replace(".", n) : `${d}${parseInt(u) ? `${n}${u.slice(0, s)}` : ""}`;
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, a = t.toString().substring(i ? 1 : 0), c = n - (a.length - 1), u = c > 0 ? "0".repeat(c) + a : a, d = u.length - n;
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, U).call(this, this, ...e), n = Math.max(s, R(this.decimalMultiplier)), i = w(n), a = e.reduce(
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
- ), c = V({
826
+ ), a = k({
816
827
  bigIntDecimal: n,
817
828
  decimal: n,
818
- value: a
829
+ value: c
819
830
  });
820
831
  return new this.constructor({
821
832
  decimalMultiplier: w(n),
822
833
  decimal: this.decimal,
823
- value: c,
834
+ value: a,
824
835
  identifier: this.toString()
825
836
  });
826
837
  }, y = new WeakSet(), $ = function(t, ...e) {
827
- const s = m(this, O, U).call(this, this, ...e), n = this.getBigIntValue(e[0], s), i = this.getBigIntValue(this, s);
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, F).call(this, e);
843
- }, O = new WeakSet(), U = function(...t) {
844
- const e = t.map((s) => typeof s == "object" ? s.decimal || R(s.decimalMultiplier) : et(B(s))).filter(Boolean);
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(), F = function(t, e) {
847
- const s = e ? w(e) : this.decimalMultiplier, n = R(s), [i = "", a = ""] = t.split(".");
848
- return BigInt(`${i}${a.padEnd(n, "0")}`);
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 = J;
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) : W(r)}`.replaceAll(",", ".").split(".");
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 et(r) {
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 W(r) {
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" ? V({ value: r, bigIntDecimal: t, decimal: t }) : r;
868
- let G;
869
- const st = (r) => {
870
- if (!G)
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 G.get(r.toUpperCase()) || { decimal: h.THOR, identifier: "" };
873
- }, rt = async (r, t = 0) => {
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(Y(r)), s = q(t, e);
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 = Y(s);
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(e = !1) {
896
- const s = this.isSynthetic ? this.symbol : this.ticker;
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
- static async fromString(e, s = 0) {
912
- return rt(e, s);
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 } = Y(e), {
929
+ const { isSynthetic: n } = z(e), {
916
930
  tax: i,
917
- decimal: a,
918
- identifier: c
919
- } = st(e), u = q(s, a);
920
- return c ? new A({ tax: i, decimal: a, identifier: c, value: u }) : n ? new A({ tax: i, decimal: 8, identifier: e, value: u }) : void 0;
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 async fromIdentifier(e, s = 0) {
923
- return rt(e, s);
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 } = st(e), a = q(s, n);
927
- return new A({ decimal: n, identifier: i, value: a });
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), a = q(s, n);
931
- return new A({ value: a, decimal: n, identifier: i });
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 async loadStaticAssets() {
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
- G = Object.values(n).reduce((a, { tokens: c }) => (c.forEach(({ identifier: u, chain: d, ...l }) => {
939
- const _ = "decimals" in l ? l.decimals : h[d];
940
- a.set(u, { identifier: u, decimal: _ });
941
- }), a), /* @__PURE__ */ new Map()), e({ ok: !0 });
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
- }, Y = (r) => {
972
- const t = r.slice(0, 14).includes("/"), [e, s] = r.split(".").pop().split("/"), n = r.includes(".") && !t ? r : `${o.THORChain}.${s}`, [i, a] = n.split("."), [c, u] = (t ? s : a).split("-");
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: a }),
995
+ isGasAsset: it({ chain: i, symbol: c }),
977
996
  isSynthetic: t,
978
- symbol: (t ? `${e}/` : "") + (u ? `${c}-${(u == null ? void 0 : u.toLowerCase()) ?? ""}` : a),
979
- ticker: c
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: V({ value: t, bigIntDecimal: e, decimal: e })
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
- V as formatBigIntToSafeValue,
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.34.6",
9
- "vite": "4.5.0",
10
- "vitest": "0.34.6",
11
- "@internal/config": "0.0.0-rc.11",
12
- "@swapkit/tokens": "1.0.0-rc.27",
13
- "@swapkit/types": "1.0.0-rc.25"
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.27",
20
- "@swapkit/types": "1.0.0-rc.25"
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.47",
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",
@@ -1,5 +1,4 @@
1
- import type { Chain } from '@swapkit/types';
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}.${symbol}:${address || ''}:t:0`;
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('THOR.ETH/ETH');
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('THOR.ETH/ETH');
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
- test('creates AssetValue from string', async () => {
174
- const fakeAvaxAssetString = 'AVAX.ASDF-1234';
175
- const fakeAvaxAsset = await AssetValue.fromString(fakeAvaxAssetString);
176
-
177
- expect(fakeAvaxAsset).toEqual(
178
- expect.objectContaining({
179
- address: '1234',
180
- chain: Chain.Avalanche,
181
- decimal: 10,
182
- isGasAsset: false,
183
- isSynthetic: false,
184
- symbol: 'ASDF-1234',
185
- ticker: 'ASDF',
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(short = false) {
107
- const shortFormat = this.isSynthetic ? this.symbol : this.ticker;
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
- static async fromString(assetString: string, value: NumberPrimitives = 0) {
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 async fromIdentifier(
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 async loadStaticAssets() {
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, { tokens }) => {
174
- tokens.forEach(({ identifier, chain, ...rest }) => {
175
- const decimal = 'decimals' in rest ? rest.decimals : BaseDecimal[chain as Chain];
176
-
177
- acc.set(identifier as TokenNames, { identifier, decimal });
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;