@liberfi.io/utils 0.1.1 → 0.1.5
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.d.mts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Chain, TokenProtocol } from '@liberfi.io/types';
|
|
2
2
|
import BigNumber from 'bignumber.js';
|
|
3
|
+
export { debounce, throttle } from 'lodash-es';
|
|
3
4
|
|
|
4
5
|
declare global {
|
|
5
6
|
interface Window {
|
|
@@ -8,7 +9,7 @@ declare global {
|
|
|
8
9
|
};
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
|
-
declare const _default: "0.1.
|
|
12
|
+
declare const _default: "0.1.4";
|
|
12
13
|
|
|
13
14
|
declare const hex2int: (chainId: string) => number;
|
|
14
15
|
declare const int2hex: (chainId: number) => string;
|
|
@@ -63,6 +64,13 @@ declare function formatAge(age: number, options?: FormatReadableTimeOptions): st
|
|
|
63
64
|
*/
|
|
64
65
|
declare function formatAgeInSeconds(age: number, options?: FormatReadableTimeOptions): string;
|
|
65
66
|
|
|
67
|
+
declare function request<R = any>(url: string, options: RequestInit): Promise<R>;
|
|
68
|
+
declare function get<R = any>(url: string, options?: RequestInit): Promise<R>;
|
|
69
|
+
declare function post<R = any, P = any>(url: string, data: P, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
70
|
+
declare function put<R = any, P = any>(url: string, data: P, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
71
|
+
declare function del<R = any>(url: string, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
72
|
+
declare function mutate<R = any>(url: string, init: RequestInit): Promise<R>;
|
|
73
|
+
|
|
66
74
|
declare class SafeBigNumber extends BigNumber {
|
|
67
75
|
constructor(num?: BigNumber.Value, base?: number);
|
|
68
76
|
}
|
|
@@ -152,4 +160,4 @@ declare const windowGuard: (cb: Function) => void;
|
|
|
152
160
|
declare const getGlobalObject: () => typeof globalThis;
|
|
153
161
|
declare const getTimestamp: () => number;
|
|
154
162
|
|
|
155
|
-
export { type FormatAmountOptions, type FormatMultiplierOptions, type FormatPercentOptions, type FormatPriceOptions, type FormatReadableTimeOptions, SafeBigNumber, accountExplorerUrl, camelCaseToSnakeCase, canConvertToNumber, capitalizeString, chainIcon, chainIdBySlug, chainSlug, displayCount3, displayCount4, findLongestCommonSubString, formatAge, formatAgeInSeconds, formatAmount, formatAmount2, formatAmount3, formatAmountUSD, formatAmountUSD2, formatAmountUSD3, formatAmountUSD4, formatAmountUSD5, formatCount, formatCount2, formatCount3, formatMultiplier, formatPercent, formatPrice, formatPriceUSD, formatReadableTime, formatSymbol, formatTimeAgo, formatTokenProtocolName, getGlobalObject, getTimestamp, hex2int, int2hex, isHex, isHexString, isSolana, isTestnet, isValidNumber, isValidTimeframe, millisecondsToHMS, parseChainId, parseTokenProtocolFamily, searchImageUrl, searchTwitterUrl, secondsSince, subtractDaysFromCurrentDate, timestampToString, twitterMediaUrl, twitterTweetUrl, twitterUserUrl, txExplorerUrl, _default as version, windowGuard };
|
|
163
|
+
export { type FormatAmountOptions, type FormatMultiplierOptions, type FormatPercentOptions, type FormatPriceOptions, type FormatReadableTimeOptions, SafeBigNumber, accountExplorerUrl, camelCaseToSnakeCase, canConvertToNumber, capitalizeString, chainIcon, chainIdBySlug, chainSlug, del, displayCount3, displayCount4, findLongestCommonSubString, formatAge, formatAgeInSeconds, formatAmount, formatAmount2, formatAmount3, formatAmountUSD, formatAmountUSD2, formatAmountUSD3, formatAmountUSD4, formatAmountUSD5, formatCount, formatCount2, formatCount3, formatMultiplier, formatPercent, formatPrice, formatPriceUSD, formatReadableTime, formatSymbol, formatTimeAgo, formatTokenProtocolName, get, getGlobalObject, getTimestamp, hex2int, int2hex, isHex, isHexString, isSolana, isTestnet, isValidNumber, isValidTimeframe, millisecondsToHMS, mutate, parseChainId, parseTokenProtocolFamily, post, put, request, searchImageUrl, searchTwitterUrl, secondsSince, subtractDaysFromCurrentDate, timestampToString, twitterMediaUrl, twitterTweetUrl, twitterUserUrl, txExplorerUrl, _default as version, windowGuard };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Chain, TokenProtocol } from '@liberfi.io/types';
|
|
2
2
|
import BigNumber from 'bignumber.js';
|
|
3
|
+
export { debounce, throttle } from 'lodash-es';
|
|
3
4
|
|
|
4
5
|
declare global {
|
|
5
6
|
interface Window {
|
|
@@ -8,7 +9,7 @@ declare global {
|
|
|
8
9
|
};
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
|
-
declare const _default: "0.1.
|
|
12
|
+
declare const _default: "0.1.4";
|
|
12
13
|
|
|
13
14
|
declare const hex2int: (chainId: string) => number;
|
|
14
15
|
declare const int2hex: (chainId: number) => string;
|
|
@@ -63,6 +64,13 @@ declare function formatAge(age: number, options?: FormatReadableTimeOptions): st
|
|
|
63
64
|
*/
|
|
64
65
|
declare function formatAgeInSeconds(age: number, options?: FormatReadableTimeOptions): string;
|
|
65
66
|
|
|
67
|
+
declare function request<R = any>(url: string, options: RequestInit): Promise<R>;
|
|
68
|
+
declare function get<R = any>(url: string, options?: RequestInit): Promise<R>;
|
|
69
|
+
declare function post<R = any, P = any>(url: string, data: P, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
70
|
+
declare function put<R = any, P = any>(url: string, data: P, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
71
|
+
declare function del<R = any>(url: string, options?: Omit<RequestInit, "method">): Promise<R>;
|
|
72
|
+
declare function mutate<R = any>(url: string, init: RequestInit): Promise<R>;
|
|
73
|
+
|
|
66
74
|
declare class SafeBigNumber extends BigNumber {
|
|
67
75
|
constructor(num?: BigNumber.Value, base?: number);
|
|
68
76
|
}
|
|
@@ -152,4 +160,4 @@ declare const windowGuard: (cb: Function) => void;
|
|
|
152
160
|
declare const getGlobalObject: () => typeof globalThis;
|
|
153
161
|
declare const getTimestamp: () => number;
|
|
154
162
|
|
|
155
|
-
export { type FormatAmountOptions, type FormatMultiplierOptions, type FormatPercentOptions, type FormatPriceOptions, type FormatReadableTimeOptions, SafeBigNumber, accountExplorerUrl, camelCaseToSnakeCase, canConvertToNumber, capitalizeString, chainIcon, chainIdBySlug, chainSlug, displayCount3, displayCount4, findLongestCommonSubString, formatAge, formatAgeInSeconds, formatAmount, formatAmount2, formatAmount3, formatAmountUSD, formatAmountUSD2, formatAmountUSD3, formatAmountUSD4, formatAmountUSD5, formatCount, formatCount2, formatCount3, formatMultiplier, formatPercent, formatPrice, formatPriceUSD, formatReadableTime, formatSymbol, formatTimeAgo, formatTokenProtocolName, getGlobalObject, getTimestamp, hex2int, int2hex, isHex, isHexString, isSolana, isTestnet, isValidNumber, isValidTimeframe, millisecondsToHMS, parseChainId, parseTokenProtocolFamily, searchImageUrl, searchTwitterUrl, secondsSince, subtractDaysFromCurrentDate, timestampToString, twitterMediaUrl, twitterTweetUrl, twitterUserUrl, txExplorerUrl, _default as version, windowGuard };
|
|
163
|
+
export { type FormatAmountOptions, type FormatMultiplierOptions, type FormatPercentOptions, type FormatPriceOptions, type FormatReadableTimeOptions, SafeBigNumber, accountExplorerUrl, camelCaseToSnakeCase, canConvertToNumber, capitalizeString, chainIcon, chainIdBySlug, chainSlug, del, displayCount3, displayCount4, findLongestCommonSubString, formatAge, formatAgeInSeconds, formatAmount, formatAmount2, formatAmount3, formatAmountUSD, formatAmountUSD2, formatAmountUSD3, formatAmountUSD4, formatAmountUSD5, formatCount, formatCount2, formatCount3, formatMultiplier, formatPercent, formatPrice, formatPriceUSD, formatReadableTime, formatSymbol, formatTimeAgo, formatTokenProtocolName, get, getGlobalObject, getTimestamp, hex2int, int2hex, isHex, isHexString, isSolana, isTestnet, isValidNumber, isValidTimeframe, millisecondsToHMS, mutate, parseChainId, parseTokenProtocolFamily, post, put, request, searchImageUrl, searchTwitterUrl, secondsSince, subtractDaysFromCurrentDate, timestampToString, twitterMediaUrl, twitterTweetUrl, twitterUserUrl, txExplorerUrl, _default as version, windowGuard };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var G=Object.create;var p=Object.defineProperty,Z=Object.defineProperties,K=Object.getOwnPropertyDescriptor,Y=Object.getOwnPropertyDescriptors,z=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols,X=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var C=(t,e,n)=>e in t?p(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,S=(t,e)=>{for(var n in e||(e={}))w.call(e,n)&&C(t,n,e[n]);if(y)for(var n of y(e))j.call(e,n)&&C(t,n,e[n]);return t},T=(t,e)=>Z(t,Y(e));var q=(t,e)=>{for(var n in e)p(t,n,{get:e[n],enumerable:!0})},_=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of z(e))!w.call(t,o)&&o!==n&&p(t,o,{get:()=>e[o],enumerable:!(s=K(e,o))||s.enumerable});return t};var Q=(t,e,n)=>(n=t!=null?G(X(t)):{},_(e||!t||!t.__esModule?p(n,"default",{value:t,enumerable:!0}):n,t)),J=t=>_(p({},"__esModule",{value:!0}),t);var Jt={};q(Jt,{SafeBigNumber:()=>l,accountExplorerUrl:()=>Zt,camelCaseToSnakeCase:()=>Mt,canConvertToNumber:()=>Nt,capitalizeString:()=>Bt,chainIcon:()=>ot,chainIdBySlug:()=>it,chainSlug:()=>st,displayCount3:()=>_t,displayCount4:()=>wt,findLongestCommonSubString:()=>Lt,formatAge:()=>gt,formatAgeInSeconds:()=>H,formatAmount:()=>dt,formatAmount2:()=>bt,formatAmount3:()=>Ot,formatAmountUSD:()=>ht,formatAmountUSD2:()=>pt,formatAmountUSD3:()=>St,formatAmountUSD4:()=>Tt,formatAmountUSD5:()=>Et,formatCount:()=>Dt,formatCount2:()=>yt,formatCount3:()=>Ct,formatMultiplier:()=>It,formatPercent:()=>xt,formatPrice:()=>Rt,formatPriceUSD:()=>$t,formatReadableTime:()=>ft,formatSymbol:()=>Vt,formatTimeAgo:()=>mt,formatTokenProtocolName:()=>kt,getGlobalObject:()=>F,getTimestamp:()=>Qt,hex2int:()=>U,int2hex:()=>tt,isHex:()=>v,isHexString:()=>Ht,isSolana:()=>nt,isTestnet:()=>rt,isValidNumber:()=>m,isValidTimeframe:()=>At,millisecondsToHMS:()=>at,parseChainId:()=>et,parseTokenProtocolFamily:()=>Wt,searchImageUrl:()=>Kt,searchTwitterUrl:()=>Yt,secondsSince:()=>L,subtractDaysFromCurrentDate:()=>ut,timestampToString:()=>ct,twitterMediaUrl:()=>jt,twitterTweetUrl:()=>Xt,twitterUserUrl:()=>zt,txExplorerUrl:()=>Ft,version:()=>P,windowGuard:()=>qt});module.exports=J(Jt);typeof window!="undefined"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/utils"]="0.1.0");var P="0.1.0";var r=require("@liberfi.io/types"),U=t=>parseInt(t),tt=t=>`0x${t.toString(16)}`,et=t=>typeof t=="string"&&t.startsWith("0x")&&/^[a-f0-9]+$/iu.test(t.slice(2))?U(t):t,rt=t=>[r.Chain.ARBITRUM_TESTNET_GOERLI,r.Chain.ARBITRUM_TESTNET_SEPOLIA,r.Chain.SOLANA_DEVNET,r.Chain.SOLANA_TESTNET,r.Chain.ABSTRACT_TESTNET,r.Chain.BINANCE_TESTNET].includes(`${t}`),nt=t=>[r.Chain.SOLANA,r.Chain.SOLANA_DEVNET,r.Chain.SOLANA_TESTNET].includes(`${t}`),E={[r.Chain.ETHEREUM]:"ethereum",[r.Chain.UBIQ]:"ubiq",[r.Chain.OPTIMISM]:"optimism",[r.Chain.FLARE]:"flare",[r.Chain.SONGBIRD]:"songbird",[r.Chain.ELASTOS]:"elastos",[r.Chain.KARDIA]:"kardia",[r.Chain.CRONOS]:"cronos",[r.Chain.RSK]:"rsk",[r.Chain.TELOS]:"telos",[r.Chain.LUKSO]:"lukso",[r.Chain.CRAB]:"crab",[r.Chain.DARWINIA]:"darwinia",[r.Chain.XDC]:"xdc",[r.Chain.CSC]:"csc",[r.Chain.ZYX]:"zyx",[r.Chain.BINANCE]:"binance",[r.Chain.SYSCOIN]:"syscoin",[r.Chain.GOCHAIN]:"gochain",[r.Chain.ETHEREUMCLASSIC]:"ethereumclassic",[r.Chain.OKEXCHAIN]:"okexchain",[r.Chain.HOO]:"hoo",[r.Chain.METER]:"meter",[r.Chain.NOVA_NETWORK]:"nova network",[r.Chain.TOMOCHAIN]:"tomochain",[r.Chain.BITKUB]:"bitkub",[r.Chain.XDAI]:"xdai",[r.Chain.SOLANA]:"solana",[r.Chain.VELAS]:"velas",[r.Chain.THUNDERCORE]:"thundercore",[r.Chain.ENULS]:"enuls",[r.Chain.FUSE]:"fuse",[r.Chain.HECO]:"heco",[r.Chain.UNICHAIN]:"unichain",[r.Chain.POLYGON]:"polygon",[r.Chain.SONIC]:"sonic",[r.Chain.SHIMMER_EVM]:"shimmer_evm",[r.Chain.RBN]:"rbn",[r.Chain.OMNI]:"omni",[r.Chain.MANTA]:"manta",[r.Chain.HSK]:"hsk",[r.Chain.WATER]:"water",[r.Chain.XLAYER]:"xlayer",[r.Chain.XDAIARB]:"xdaiarb",[r.Chain.OP_BNB]:"op_bnb",[r.Chain.VINUCHAIN]:"vinuchain",[r.Chain.ENERGYWEB]:"energyweb",[r.Chain.OASYS]:"oasys",[r.Chain.FANTOM]:"fantom",[r.Chain.FRAXTAL]:"fraxtal",[r.Chain.HPB]:"hpb",[r.Chain.BOBA]:"boba",[r.Chain.OMAX]:"omax",[r.Chain.FILECOIN]:"filecoin",[r.Chain.KUCOIN]:"kucoin",[r.Chain.ZKSYNC_ERA]:"zksync era",[r.Chain.SHIDEN]:"shiden",[r.Chain.THETA]:"theta",[r.Chain.PULSE]:"pulse",[r.Chain.CRONOS_ZKEVM]:"cronos zkevm",[r.Chain.SX]:"sx",[r.Chain.AREON]:"areon",[r.Chain.WC]:"wc",[r.Chain.CANDLE]:"candle",[r.Chain.ROLLUX]:"rollux",[r.Chain.ASTAR]:"astar",[r.Chain.REDSTONE]:"redstone",[r.Chain.MATCHAIN]:"matchain",[r.Chain.CALLISTO]:"callisto",[r.Chain.TARA]:"tara",[r.Chain.WANCHAIN]:"wanchain",[r.Chain.LYRA_CHAIN]:"lyra chain",[r.Chain.BIFROST]:"bifrost",[r.Chain.CONFLUX]:"conflux",[r.Chain.METIS]:"metis",[r.Chain.DYMENSION]:"dymension",[r.Chain.POLYGON_ZKEVM]:"polygon zkevm",[r.Chain.CORE]:"core",[r.Chain.LISK]:"lisk",[r.Chain.ULTRON]:"ultron",[r.Chain.STEP]:"step",[r.Chain.MOONBEAM]:"moonbeam",[r.Chain.MOONRIVER]:"moonriver",[r.Chain.SEI]:"sei",[r.Chain.LIVING_ASSETS_MAINNET]:"living assets mainnet",[r.Chain.STY]:"sty",[r.Chain.TENET]:"tenet",[r.Chain.GRAVITY]:"gravity",[r.Chain.REYA_NETWORK]:"reya network",[r.Chain.SONEIUM]:"soneium",[r.Chain.SWELLCHAIN]:"swellchain",[r.Chain.ONUS]:"onus",[r.Chain.HUBBLENET]:"hubblenet",[r.Chain.SANKO]:"sanko",[r.Chain.DOGECHAIN]:"dogechain",[r.Chain.MILKOMEDA]:"milkomeda",[r.Chain.MILKOMEDA_A1]:"milkomeda_a1",[r.Chain.KAVA]:"kava",[r.Chain.SOMA]:"soma",[r.Chain.KARAK]:"karak",[r.Chain.ABSTRACT]:"abstract",[r.Chain.MORPH]:"morph",[r.Chain.CROSSFI]:"crossfi",[r.Chain.BEAM]:"beam",[r.Chain.IOTEX]:"iotex",[r.Chain.MANTLE]:"mantle",[r.Chain.XLC]:"xlc",[r.Chain.NAHMII]:"nahmii",[r.Chain.BOUNCEBIT]:"bouncebit",[r.Chain.TOMBCHAIN]:"tombchain",[r.Chain.ZETACHAIN]:"zetachain",[r.Chain.PLANQ]:"planq",[r.Chain.BITROCK]:"bitrock",[r.Chain.XSAT]:"xsat",[r.Chain.CYETH]:"cyeth",[r.Chain.CANTO]:"canto",[r.Chain.KLAYTN]:"klaytn",[r.Chain.THAT]:"that",[r.Chain.BASE]:"base",[r.Chain.HELA]:"hela",[r.Chain.IOTAEVM]:"iotaevm",[r.Chain.JBC]:"jbc",[r.Chain.EVMOS]:"evmos",[r.Chain.CARBON]:"carbon",[r.Chain.SMARTBCH]:"smartbch",[r.Chain.ARTELA]:"artela",[r.Chain.IMMUTABLE_ZKEVM]:"immutable zkevm",[r.Chain.LOOP]:"loop",[r.Chain.GENESYS]:"genesys",[r.Chain.EOS_EVM]:"eos evm",[r.Chain.MAP_PROTOCOL]:"map protocol",[r.Chain.SAPPHIRE]:"sapphire",[r.Chain.BITGERT]:"bitgert",[r.Chain.FUSION]:"fusion",[r.Chain.ZILLIQA]:"zilliqa",[r.Chain.APECHAIN]:"apechain",[r.Chain.EDU_CHAIN]:"edu chain",[r.Chain.ARBITRUM]:"arbitrum",[r.Chain.ARBITRUM_NOVA]:"arbitrum nova",[r.Chain.CELO]:"celo",[r.Chain.OASIS]:"oasis",[r.Chain.ASSETCHAIN]:"assetchain",[r.Chain.ETHERLINK]:"etherlink",[r.Chain.AVALANCHE]:"avalanche",[r.Chain.REI]:"rei",[r.Chain.ZIRCUIT]:"zircuit",[r.Chain.SOPHON]:"sophon",[r.Chain.ETN]:"etn",[r.Chain.SUPERPOSITION]:"superposition",[r.Chain.REICHAIN]:"reichain",[r.Chain.BOBA_BNB]:"boba_bnb",[r.Chain.INK]:"ink",[r.Chain.LINEA]:"linea",[r.Chain.BOB]:"bob",[r.Chain.GODWOKEN]:"godwoken",[r.Chain.BERACHAIN]:"berachain",[r.Chain.BLAST]:"blast",[r.Chain.CHILIZ]:"chiliz",[r.Chain.STRATIS]:"stratis",[r.Chain.REAL]:"real",[r.Chain.ODYSSEY]:"odyssey",[r.Chain.TAIKO]:"taiko",[r.Chain.BITLAYER]:"bitlayer",[r.Chain.HYDRATION]:"hydration",[r.Chain.PAREX]:"parex",[r.Chain.POLIS]:"polis",[r.Chain.KEKCHAIN]:"kekchain",[r.Chain.SCROLL]:"scroll",[r.Chain.ZERO_NETWORK]:"zero_network",[r.Chain.ZKLINK_NOVA]:"zklink nova",[r.Chain.VISION]:"vision",[r.Chain.SAAKURU]:"saakuru",[r.Chain.ZORA]:"zora",[r.Chain.CORN]:"corn",[r.Chain.NEON]:"neon",[r.Chain.LUMIA]:"lumia",[r.Chain.AURORA]:"aurora",[r.Chain.HARMONY]:"harmony",[r.Chain.PALM]:"palm",[r.Chain.ZENIQ]:"zeniq",[r.Chain.CURIO]:"curio",[r.Chain.MODE]:"mode"};function ot(t){let e=E[t];return e?`https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(e)}.jpg`:void 0}function st(t){return E[t]}function it(t){let e=Object.keys(E).find(n=>E[n]===t);return e||void 0}var $=Date.now(),x=60,I=60*x,D=24*I,B=365*D,at=t=>{let e=Math.floor(t/1e3),n=Math.floor(e/3600),s=Math.floor(e%3600/60),o=e%60;return[n,s,o]},ct=t=>{let e=t instanceof Date?t:new Date(t),n=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0"),g=String(e.getSeconds()).padStart(2,"0");return`${n}-${s}-${o} ${i}:${a}:${g}`};function ut(t,e){let n=e||new Date,s=new Date(n);return s.setDate(n.getDate()-t),s}function M(t){return!t||Number.isNaN(t)||t<=0?$:t<1e10?t*1e3:t}function lt(t){if(!t)return $;if(typeof t=="number")return M(t);if(typeof t=="string"){let e=Date.parse(t);return M(e)}return t instanceof Date?t.getTime():$}function mt(t){let e=Math.floor((Date.now()-lt(t))/1e3);return e>=B?`${Math.floor(e/B)}Y`:e>=D?`${Math.floor(e/D)}D`:e>=I?`${Math.floor(e/I)}h`:e>=x?`${Math.floor(e/x)}m`:`${e}s`}function L(t,e){let n=e?e instanceof Date?e.getTime():e:Date.now(),s=t instanceof Date?t.getTime():t,o=n-s;return Math.floor(o/1e3)}var d={justNow:"just now",secondsAgo:"{n}s",minutesAgo:"{n}m",hoursAgo:"{n}h",daysAgo:"{n}d",yearsAgo:"{n}y"};function ft(t,e={}){let n=L(t),s={justNow:e.justNow||d.justNow,secondsAgo:e.secondsAgo||d.secondsAgo,minutesAgo:e.minutesAgo||d.minutesAgo,hoursAgo:e.hoursAgo||d.hoursAgo,daysAgo:e.daysAgo||d.daysAgo,yearsAgo:e.yearsAgo||d.yearsAgo},o=60,i=60*o,a=24*i,g=365*a;if(n<10)return s.justNow;if(n<o)return s.secondsAgo.replace("{n}",n.toString());if(n<i){let b=Math.floor(n/o);return s.minutesAgo.replace("{n}",b.toString())}if(n<a){let b=Math.floor(n/i);return s.hoursAgo.replace("{n}",b.toString())}if(n<g){let b=Math.floor(n/a);return s.daysAgo.replace("{n}",b.toString())}let A=Math.floor(n/g);return s.yearsAgo.replace("{n}",A.toString())}function gt(t,e={}){let n=Math.floor(t/1e3);return H(n,e)}function H(t,e={}){let n={justNow:e.justNow||d.justNow,secondsAgo:e.secondsAgo||d.secondsAgo,minutesAgo:e.minutesAgo||d.minutesAgo,hoursAgo:e.hoursAgo||d.hoursAgo,daysAgo:e.daysAgo||d.daysAgo,yearsAgo:e.yearsAgo||d.yearsAgo},s=60,o=60*s,i=24*o,a=365*i;if(t<10)return n.justNow;if(t<s)return n.secondsAgo.replace("{n}",t.toString());if(t<o){let A=Math.floor(t/s);return n.minutesAgo.replace("{n}",A.toString())}if(t<i){let A=Math.floor(t/o);return n.hoursAgo.replace("{n}",A.toString())}if(t<a){let A=Math.floor(t/i);return n.daysAgo.replace("{n}",A.toString())}let g=Math.floor(t/a);return n.yearsAgo.replace("{n}",g.toString())}var c=Q(require("bignumber.js"));var l=class extends c.default{constructor(e,n){try{super(e!=null?e:0,n)}catch(s){console.error("SafeBigNumber constructor error",s),super(0,n)}}},m=t=>{if(typeof t=="number"&&!isNaN(t)||t instanceof l||t instanceof c.default)return!0;if(typeof t!="string")return!1;let e=Number.parseFloat(t);return!isNaN(e)},Nt=t=>(typeof t=="number"||!!t)&&m(typeof t=="string"?Number(t):t),At=(t="")=>/^(\d+\.?\d*|\.\d+)([hm]?)$$/.test(t),dt=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(2,c.default.ROUND_DOWN).toString():o.lt(1e5)?u(o,2):N(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},bt=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.default.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):N(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},Ot=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.default.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):N(o,0);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},ht=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e4)?`$${u(o,2)}`:`$${N(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},pt=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.default.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(1,c.default.ROUND_DOWN)}`:o.lt(1e15)?`$${N(i)}`:`$${Ut(o,{acronymMin:1e5,groupingSeparator:!0})}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},St=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.default.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(0,c.default.ROUND_DOWN)}`:`$${N(i,0)}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},Tt=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,2)}`:`$${N(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Et=(t="",e={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(100)?`$${o.decimalPlaces(0,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,0)}`:`$${N(o,0)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Rt=(t="",e={isHighPrecise:!0})=>{if(!m(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`${s.lt(1e-4)?W(s,o?4:2):s.lt(1)?o?u(s,4):k(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):N(s)}`},$t=(t="",e={isHighPrecise:!0})=>{if(!m(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`$${s.lt(1e-4)?W(s,o?4:2):s.lt(1)?o?u(s,4):k(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):N(s)}`},xt=(t="",e={})=>{var a,g;if(!m(t))return"-- %";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(1e-4)?"0%":o.lt(100)?`${i}${V(o,(a=e==null?void 0:e.precision)!=null?a:2)}`:o.lt(1e3)?`${i}${V(o,(g=e==null?void 0:e.precision)!=null?g:1)}`:`${i}> 99,999%`},V=(t,e)=>`${t.times(100).decimalPlaces(e,c.default.ROUND_HALF_UP).toString()}%`,It=(t="",e={showPlusGtThanZero:!0})=>{if(!m(t))return"0%";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(.01)?"0%":o.lt(10)?`${i}${u(o,2)}X`:o.lt(100)?`${i}${u(o,1)}X`:o.lt(1e5)?`${i}${u(o,0)}X`:`${i}>99,999%`},Dt=(t="")=>{if(!m(t))return"--";let e=new l(t);return e.lt(1e5)?u(e,0):N(e)},yt=(t="")=>{if(!m(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):N(e.div(1e3).integerValue(c.default.ROUND_DOWN).times(1e3),0)},Ct=(t="")=>{if(!m(t))return"--";let e=new l(t);return u(e,0)},wt=(t="")=>m(t)?u(t,0):"--",_t=(t="")=>{if(!m(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):N(e.div(100).integerValue(c.default.ROUND_DOWN).times(100))},Pt=["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089","\u2081\u2080","\u2081\u2081","\u2081\u2082","\u2081\u2083","\u2081\u2084","\u2081\u2085","\u2081\u2086","\u2081\u2087","\u2081\u2088","\u2081\u2089","\u2082\u2080","\u2082\u2081","\u2082\u2082","\u2082\u2083","\u2082\u2084","\u2082\u2085","\u2082\u2086","\u2082\u2087","\u2082\u2088","\u2082\u2089","\u2083\u2080","\u2083\u2081","\u2083\u2082","\u2083\u2083","\u2083\u2084","\u2083\u2085","\u2083\u2086","\u2083\u2087","\u2083\u2088","\u2083\u2089","\u2084\u2080"],u=(t,e=0,n=c.default.ROUND_DOWN)=>{let o=new l(t).decimalPlaces(e,n).toString().split(".");return o[0]=o[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),o.join(".")},N=(t,e=1)=>{let n=new l(t);return n.lt(1e3)?n.toNumber():n.lt(1e6)?`${u(n.div(1e3),e)}K`:n.lt(1e9)?`${u(n.div(1e6),e)}M`:n.lt(1e12)?`${u(n.dividedBy(1e9),e)}B`:`${u(n.dividedBy(1e12),e)}T`},W=(t,e=5)=>{let n=new l(t);if(n.eq(0))return"0";let[s,o]=n.toFixed().split("."),i=o.split(""),a=i.findIndex(A=>A!=="0"),g=Math.min(i.length-a,e);return`${u(s)}.0`.concat(Pt[a]).concat(i.slice(a,a+g).join("").replace(/\.?0+$/,""))},k=(t,e)=>{let n=t.toString().match(/\.0*/),s=(n?n[0].length-1:0)+e;return u(t,s)},O=(t,e={})=>{let{precision:n=4,min:s,max:o,groupingSeparator:i,rounding:a,zeroDisplay:g}=e,A={up:c.default.ROUND_UP,down:c.default.ROUND_DOWN,ceil:c.default.ROUND_CEIL,floor:c.default.ROUND_FLOOR},b=new l(t);if(b.eq(0))return g||"0";let h=b.abs();return s&&h.lt(s)?`<${s}`:o&&h.gt(o)?`>${o}`:i?u(h,n,a?A[a]:void 0):(a?h.decimalPlaces(n,A[a]):h.decimalPlaces(n)).toString()},Ut=(t,e={})=>{let n=new l(t);if(n.eq(0))return e.zeroDisplay?e.zeroDisplay:"";let{acronymMin:s=1e4}=e,o=n.abs();return o.lt(s)?O(n,e):o.gte(1e15)?n.toExponential(2):o.gte(1e12)?`${O(n.div(1e12),T(S({},e),{precision:0}))}T`:o.gte(1e9)?`${O(n.div(1e9),T(S({},e),{precision:0}))}B`:o.gte(1e6)?`${O(n.div(1e6),T(S({},e),{precision:1}))}M`:o.gte(1e4)?`${O(n.div(1e3),T(S({},e),{precision:1}))}K`:O(n,e)};function Bt(t){let e=t.toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)}function Mt(t){return t.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var Lt=(t,e)=>{for(let n=0;n<t.length;n++){let s=t.at(n),o=e.at(n);if(s!==o)return n}return-1};function v(t){return/^[a-f0-9]+$/iu.test(t)}function Ht(t){return typeof t=="string"&&t.startsWith("0x")&&v(t)}function Vt(t,e="base-type"){if(!t)return"";let n=t.split("_"),s=n[0],o=n[1],i=n[2];return e.replace("type",s).replace("base",o).replace("quote",i)}var R=require("@liberfi.io/types"),Wt=(t,e)=>{switch(t){case R.Chain.SOLANA:return R.SOLANA_TOKEN_PROTOCOLS.find(n=>new RegExp(n,"i").test(e));default:return}},kt=t=>t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");var f=require("@liberfi.io/types"),vt={[f.Chain.SOLANA]:"https://solscan.io/tx/${txHash}",[f.Chain.ETHEREUM]:"https://etherscan.io/tx/${txHash}",[f.Chain.POLYGON]:"https://polygonscan.com/tx/${txHash}",[f.Chain.BINANCE]:"https://bscscan.com/tx/${txHash}",[f.Chain.BINANCE_TESTNET]:"https://testnet.bscscan.com/tx/${txHash}",[f.Chain.AVALANCHE]:"https://snowtrace.io/tx/${txHash}",[f.Chain.BASE]:"https://basescan.org/tx/${txHash}",[f.Chain.BLAST]:"https://blastracker.xyz/tx/${txHash}",[f.Chain.ARBITRUM]:"https://arbiscan.io/tx/${txHash}",[f.Chain.ARBITRUM_NOVA]:"https://nova.arbiscan.io/tx/${txHash}",[f.Chain.ARBITRUM_TESTNET_GOERLI]:"https://goerli.arbiscan.io/tx/${txHash}",[f.Chain.ARBITRUM_TESTNET_SEPOLIA]:"https://sepolia.arbiscan.io/tx/${txHash}"};function Ft(t,e){var n;return(n=vt[t])==null?void 0:n.replace("${txHash}",e)}var Gt={[f.Chain.SOLANA]:"https://solscan.io/account/${account}",[f.Chain.ETHEREUM]:"https://etherscan.io/address/${account}",[f.Chain.POLYGON]:"https://polygonscan.com/address/${account}",[f.Chain.BINANCE]:"https://bscscan.com/address/${account}"},Zt=(t,e)=>{var n;return(n=Gt[t])==null?void 0:n.replace("${account}",e)};function Kt(t){return`https://lens.google.com/uploadbyurl?url=${encodeURIComponent(t)}`}function Yt(t){return`https://x.com/search?q=${encodeURIComponent(t)}`}function zt(t){return`https://x.com/${t}`}function Xt(t){return`https://x.com/${t}`}function jt(t){return`https://x.com/${t}`}var qt=t=>{typeof window!="undefined"&&t()},F=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},Qt=()=>{var t;if(typeof window!="undefined"){let e=(t=F())==null?void 0:t.__LIBERFI_timestamp_offset;if(typeof e=="number")return Date.now()+(e||0)}return Date.now()};0&&(module.exports={SafeBigNumber,accountExplorerUrl,camelCaseToSnakeCase,canConvertToNumber,capitalizeString,chainIcon,chainIdBySlug,chainSlug,displayCount3,displayCount4,findLongestCommonSubString,formatAge,formatAgeInSeconds,formatAmount,formatAmount2,formatAmount3,formatAmountUSD,formatAmountUSD2,formatAmountUSD3,formatAmountUSD4,formatAmountUSD5,formatCount,formatCount2,formatCount3,formatMultiplier,formatPercent,formatPrice,formatPriceUSD,formatReadableTime,formatSymbol,formatTimeAgo,formatTokenProtocolName,getGlobalObject,getTimestamp,hex2int,int2hex,isHex,isHexString,isSolana,isTestnet,isValidNumber,isValidTimeframe,millisecondsToHMS,parseChainId,parseTokenProtocolFamily,searchImageUrl,searchTwitterUrl,secondsSince,subtractDaysFromCurrentDate,timestampToString,twitterMediaUrl,twitterTweetUrl,twitterUserUrl,txExplorerUrl,version,windowGuard});
|
|
1
|
+
"use strict";var z=Object.create;var E=Object.defineProperty,j=Object.defineProperties,X=Object.getOwnPropertyDescriptor,q=Object.getOwnPropertyDescriptors,Q=Object.getOwnPropertyNames,C=Object.getOwnPropertySymbols,J=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty,tt=Object.prototype.propertyIsEnumerable;var _=(t,e,n)=>e in t?E(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,O=(t,e)=>{for(var n in e||(e={}))U.call(e,n)&&_(t,n,e[n]);if(C)for(var n of C(e))tt.call(e,n)&&_(t,n,e[n]);return t},b=(t,e)=>j(t,q(e));var et=(t,e)=>{for(var n in e)E(t,n,{get:e[n],enumerable:!0})},M=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Q(e))!U.call(t,o)&&o!==n&&E(t,o,{get:()=>e[o],enumerable:!(s=X(e,o))||s.enumerable});return t};var rt=(t,e,n)=>(n=t!=null?z(J(t)):{},M(e||!t||!t.__esModule?E(n,"default",{value:t,enumerable:!0}):n,t)),nt=t=>M(E({},"__esModule",{value:!0}),t);var p=(t,e,n)=>new Promise((s,o)=>{var i=m=>{try{g(n.next(m))}catch(d){o(d)}},a=m=>{try{g(n.throw(m))}catch(d){o(d)}},g=m=>m.done?s(m.value):Promise.resolve(m.value).then(i,a);g((n=n.apply(t,e)).next())});var ue={};et(ue,{SafeBigNumber:()=>l,accountExplorerUrl:()=>ee,camelCaseToSnakeCase:()=>Kt,canConvertToNumber:()=>Et,capitalizeString:()=>Zt,chainIcon:()=>ct,chainIdBySlug:()=>lt,chainSlug:()=>ut,debounce:()=>I.debounce,del:()=>Tt,displayCount3:()=>vt,displayCount4:()=>kt,findLongestCommonSubString:()=>Yt,formatAge:()=>ht,formatAgeInSeconds:()=>k,formatAmount:()=>$t,formatAmount2:()=>It,formatAmount3:()=>yt,formatAmountUSD:()=>wt,formatAmountUSD2:()=>Dt,formatAmountUSD3:()=>Pt,formatAmountUSD4:()=>Ct,formatAmountUSD5:()=>_t,formatCount:()=>Ht,formatCount2:()=>Vt,formatCount3:()=>Wt,formatMultiplier:()=>Lt,formatPercent:()=>Bt,formatPrice:()=>Ut,formatPriceUSD:()=>Mt,formatReadableTime:()=>dt,formatSymbol:()=>jt,formatTimeAgo:()=>At,formatTokenProtocolName:()=>qt,get:()=>bt,getGlobalObject:()=>Y,getTimestamp:()=>ce,hex2int:()=>L,int2hex:()=>ot,isHex:()=>K,isHexString:()=>zt,isSolana:()=>at,isTestnet:()=>it,isValidNumber:()=>f,isValidTimeframe:()=>xt,millisecondsToHMS:()=>mt,mutate:()=>St,parseChainId:()=>st,parseTokenProtocolFamily:()=>Xt,post:()=>pt,put:()=>Rt,request:()=>R,searchImageUrl:()=>re,searchTwitterUrl:()=>ne,secondsSince:()=>W,subtractDaysFromCurrentDate:()=>gt,throttle:()=>I.throttle,timestampToString:()=>ft,twitterMediaUrl:()=>ie,twitterTweetUrl:()=>se,twitterUserUrl:()=>oe,txExplorerUrl:()=>Jt,version:()=>B,windowGuard:()=>ae});module.exports=nt(ue);typeof window!="undefined"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/utils"]="0.1.4");var B="0.1.4";var r=require("@liberfi.io/types"),L=t=>parseInt(t),ot=t=>`0x${t.toString(16)}`,st=t=>typeof t=="string"&&t.startsWith("0x")&&/^[a-f0-9]+$/iu.test(t.slice(2))?L(t):t,it=t=>[r.Chain.ARBITRUM_TESTNET_GOERLI,r.Chain.ARBITRUM_TESTNET_SEPOLIA,r.Chain.SOLANA_DEVNET,r.Chain.SOLANA_TESTNET,r.Chain.ABSTRACT_TESTNET,r.Chain.BINANCE_TESTNET].includes(`${t}`),at=t=>[r.Chain.SOLANA,r.Chain.SOLANA_DEVNET,r.Chain.SOLANA_TESTNET].includes(`${t}`),x={[r.Chain.ETHEREUM]:"ethereum",[r.Chain.UBIQ]:"ubiq",[r.Chain.OPTIMISM]:"optimism",[r.Chain.FLARE]:"flare",[r.Chain.SONGBIRD]:"songbird",[r.Chain.ELASTOS]:"elastos",[r.Chain.KARDIA]:"kardia",[r.Chain.CRONOS]:"cronos",[r.Chain.RSK]:"rsk",[r.Chain.TELOS]:"telos",[r.Chain.LUKSO]:"lukso",[r.Chain.CRAB]:"crab",[r.Chain.DARWINIA]:"darwinia",[r.Chain.XDC]:"xdc",[r.Chain.CSC]:"csc",[r.Chain.ZYX]:"zyx",[r.Chain.BINANCE]:"binance",[r.Chain.SYSCOIN]:"syscoin",[r.Chain.GOCHAIN]:"gochain",[r.Chain.ETHEREUMCLASSIC]:"ethereumclassic",[r.Chain.OKEXCHAIN]:"okexchain",[r.Chain.HOO]:"hoo",[r.Chain.METER]:"meter",[r.Chain.NOVA_NETWORK]:"nova network",[r.Chain.TOMOCHAIN]:"tomochain",[r.Chain.BITKUB]:"bitkub",[r.Chain.XDAI]:"xdai",[r.Chain.SOLANA]:"solana",[r.Chain.VELAS]:"velas",[r.Chain.THUNDERCORE]:"thundercore",[r.Chain.ENULS]:"enuls",[r.Chain.FUSE]:"fuse",[r.Chain.HECO]:"heco",[r.Chain.UNICHAIN]:"unichain",[r.Chain.POLYGON]:"polygon",[r.Chain.SONIC]:"sonic",[r.Chain.SHIMMER_EVM]:"shimmer_evm",[r.Chain.RBN]:"rbn",[r.Chain.OMNI]:"omni",[r.Chain.MANTA]:"manta",[r.Chain.HSK]:"hsk",[r.Chain.WATER]:"water",[r.Chain.XLAYER]:"xlayer",[r.Chain.XDAIARB]:"xdaiarb",[r.Chain.OP_BNB]:"op_bnb",[r.Chain.VINUCHAIN]:"vinuchain",[r.Chain.ENERGYWEB]:"energyweb",[r.Chain.OASYS]:"oasys",[r.Chain.FANTOM]:"fantom",[r.Chain.FRAXTAL]:"fraxtal",[r.Chain.HPB]:"hpb",[r.Chain.BOBA]:"boba",[r.Chain.OMAX]:"omax",[r.Chain.FILECOIN]:"filecoin",[r.Chain.KUCOIN]:"kucoin",[r.Chain.ZKSYNC_ERA]:"zksync era",[r.Chain.SHIDEN]:"shiden",[r.Chain.THETA]:"theta",[r.Chain.PULSE]:"pulse",[r.Chain.CRONOS_ZKEVM]:"cronos zkevm",[r.Chain.SX]:"sx",[r.Chain.AREON]:"areon",[r.Chain.WC]:"wc",[r.Chain.CANDLE]:"candle",[r.Chain.ROLLUX]:"rollux",[r.Chain.ASTAR]:"astar",[r.Chain.REDSTONE]:"redstone",[r.Chain.MATCHAIN]:"matchain",[r.Chain.CALLISTO]:"callisto",[r.Chain.TARA]:"tara",[r.Chain.WANCHAIN]:"wanchain",[r.Chain.LYRA_CHAIN]:"lyra chain",[r.Chain.BIFROST]:"bifrost",[r.Chain.CONFLUX]:"conflux",[r.Chain.METIS]:"metis",[r.Chain.DYMENSION]:"dymension",[r.Chain.POLYGON_ZKEVM]:"polygon zkevm",[r.Chain.CORE]:"core",[r.Chain.LISK]:"lisk",[r.Chain.ULTRON]:"ultron",[r.Chain.STEP]:"step",[r.Chain.MOONBEAM]:"moonbeam",[r.Chain.MOONRIVER]:"moonriver",[r.Chain.SEI]:"sei",[r.Chain.LIVING_ASSETS_MAINNET]:"living assets mainnet",[r.Chain.STY]:"sty",[r.Chain.TENET]:"tenet",[r.Chain.GRAVITY]:"gravity",[r.Chain.REYA_NETWORK]:"reya network",[r.Chain.SONEIUM]:"soneium",[r.Chain.SWELLCHAIN]:"swellchain",[r.Chain.ONUS]:"onus",[r.Chain.HUBBLENET]:"hubblenet",[r.Chain.SANKO]:"sanko",[r.Chain.DOGECHAIN]:"dogechain",[r.Chain.MILKOMEDA]:"milkomeda",[r.Chain.MILKOMEDA_A1]:"milkomeda_a1",[r.Chain.KAVA]:"kava",[r.Chain.SOMA]:"soma",[r.Chain.KARAK]:"karak",[r.Chain.ABSTRACT]:"abstract",[r.Chain.MORPH]:"morph",[r.Chain.CROSSFI]:"crossfi",[r.Chain.BEAM]:"beam",[r.Chain.IOTEX]:"iotex",[r.Chain.MANTLE]:"mantle",[r.Chain.XLC]:"xlc",[r.Chain.NAHMII]:"nahmii",[r.Chain.BOUNCEBIT]:"bouncebit",[r.Chain.TOMBCHAIN]:"tombchain",[r.Chain.ZETACHAIN]:"zetachain",[r.Chain.PLANQ]:"planq",[r.Chain.BITROCK]:"bitrock",[r.Chain.XSAT]:"xsat",[r.Chain.CYETH]:"cyeth",[r.Chain.CANTO]:"canto",[r.Chain.KLAYTN]:"klaytn",[r.Chain.THAT]:"that",[r.Chain.BASE]:"base",[r.Chain.HELA]:"hela",[r.Chain.IOTAEVM]:"iotaevm",[r.Chain.JBC]:"jbc",[r.Chain.EVMOS]:"evmos",[r.Chain.CARBON]:"carbon",[r.Chain.SMARTBCH]:"smartbch",[r.Chain.ARTELA]:"artela",[r.Chain.IMMUTABLE_ZKEVM]:"immutable zkevm",[r.Chain.LOOP]:"loop",[r.Chain.GENESYS]:"genesys",[r.Chain.EOS_EVM]:"eos evm",[r.Chain.MAP_PROTOCOL]:"map protocol",[r.Chain.SAPPHIRE]:"sapphire",[r.Chain.BITGERT]:"bitgert",[r.Chain.FUSION]:"fusion",[r.Chain.ZILLIQA]:"zilliqa",[r.Chain.APECHAIN]:"apechain",[r.Chain.EDU_CHAIN]:"edu chain",[r.Chain.ARBITRUM]:"arbitrum",[r.Chain.ARBITRUM_NOVA]:"arbitrum nova",[r.Chain.CELO]:"celo",[r.Chain.OASIS]:"oasis",[r.Chain.ASSETCHAIN]:"assetchain",[r.Chain.ETHERLINK]:"etherlink",[r.Chain.AVALANCHE]:"avalanche",[r.Chain.REI]:"rei",[r.Chain.ZIRCUIT]:"zircuit",[r.Chain.SOPHON]:"sophon",[r.Chain.ETN]:"etn",[r.Chain.SUPERPOSITION]:"superposition",[r.Chain.REICHAIN]:"reichain",[r.Chain.BOBA_BNB]:"boba_bnb",[r.Chain.INK]:"ink",[r.Chain.LINEA]:"linea",[r.Chain.BOB]:"bob",[r.Chain.GODWOKEN]:"godwoken",[r.Chain.BERACHAIN]:"berachain",[r.Chain.BLAST]:"blast",[r.Chain.CHILIZ]:"chiliz",[r.Chain.STRATIS]:"stratis",[r.Chain.REAL]:"real",[r.Chain.ODYSSEY]:"odyssey",[r.Chain.TAIKO]:"taiko",[r.Chain.BITLAYER]:"bitlayer",[r.Chain.HYDRATION]:"hydration",[r.Chain.PAREX]:"parex",[r.Chain.POLIS]:"polis",[r.Chain.KEKCHAIN]:"kekchain",[r.Chain.SCROLL]:"scroll",[r.Chain.ZERO_NETWORK]:"zero_network",[r.Chain.ZKLINK_NOVA]:"zklink nova",[r.Chain.VISION]:"vision",[r.Chain.SAAKURU]:"saakuru",[r.Chain.ZORA]:"zora",[r.Chain.CORN]:"corn",[r.Chain.NEON]:"neon",[r.Chain.LUMIA]:"lumia",[r.Chain.AURORA]:"aurora",[r.Chain.HARMONY]:"harmony",[r.Chain.PALM]:"palm",[r.Chain.ZENIQ]:"zeniq",[r.Chain.CURIO]:"curio",[r.Chain.MODE]:"mode"};function ct(t){let e=x[t];return e?`https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(e)}.jpg`:void 0}function ut(t){return x[t]}function lt(t){let e=Object.keys(x).find(n=>x[n]===t);return e||void 0}var y=Date.now(),w=60,D=60*w,P=24*D,H=365*P,mt=t=>{let e=Math.floor(t/1e3),n=Math.floor(e/3600),s=Math.floor(e%3600/60),o=e%60;return[n,s,o]},ft=t=>{let e=t instanceof Date?t:new Date(t),n=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0"),g=String(e.getSeconds()).padStart(2,"0");return`${n}-${s}-${o} ${i}:${a}:${g}`};function gt(t,e){let n=e||new Date,s=new Date(n);return s.setDate(n.getDate()-t),s}function V(t){return!t||Number.isNaN(t)||t<=0?y:t<1e10?t*1e3:t}function Nt(t){if(!t)return y;if(typeof t=="number")return V(t);if(typeof t=="string"){let e=Date.parse(t);return V(e)}return t instanceof Date?t.getTime():y}function At(t){let e=Math.floor((Date.now()-Nt(t))/1e3);return e>=H?`${Math.floor(e/H)}Y`:e>=P?`${Math.floor(e/P)}D`:e>=D?`${Math.floor(e/D)}h`:e>=w?`${Math.floor(e/w)}m`:`${e}s`}function W(t,e){let n=e?e instanceof Date?e.getTime():e:Date.now(),s=t instanceof Date?t.getTime():t,o=n-s;return Math.floor(o/1e3)}var h={justNow:"just now",secondsAgo:"{n}s",minutesAgo:"{n}m",hoursAgo:"{n}h",daysAgo:"{n}d",yearsAgo:"{n}y"};function dt(t,e={}){let n=W(t),s={justNow:e.justNow||h.justNow,secondsAgo:e.secondsAgo||h.secondsAgo,minutesAgo:e.minutesAgo||h.minutesAgo,hoursAgo:e.hoursAgo||h.hoursAgo,daysAgo:e.daysAgo||h.daysAgo,yearsAgo:e.yearsAgo||h.yearsAgo},o=60,i=60*o,a=24*i,g=365*a;if(n<10)return s.justNow;if(n<o)return s.secondsAgo.replace("{n}",n.toString());if(n<i){let d=Math.floor(n/o);return s.minutesAgo.replace("{n}",d.toString())}if(n<a){let d=Math.floor(n/i);return s.hoursAgo.replace("{n}",d.toString())}if(n<g){let d=Math.floor(n/a);return s.daysAgo.replace("{n}",d.toString())}let m=Math.floor(n/g);return s.yearsAgo.replace("{n}",m.toString())}function ht(t,e={}){let n=Math.floor(t/1e3);return k(n,e)}function k(t,e={}){let n={justNow:e.justNow||h.justNow,secondsAgo:e.secondsAgo||h.secondsAgo,minutesAgo:e.minutesAgo||h.minutesAgo,hoursAgo:e.hoursAgo||h.hoursAgo,daysAgo:e.daysAgo||h.daysAgo,yearsAgo:e.yearsAgo||h.yearsAgo},s=60,o=60*s,i=24*o,a=365*i;if(t<10)return n.justNow;if(t<s)return n.secondsAgo.replace("{n}",t.toString());if(t<o){let m=Math.floor(t/s);return n.minutesAgo.replace("{n}",m.toString())}if(t<i){let m=Math.floor(t/o);return n.hoursAgo.replace("{n}",m.toString())}if(t<a){let m=Math.floor(t/i);return n.daysAgo.replace("{n}",m.toString())}let g=Math.floor(t/a);return n.yearsAgo.replace("{n}",g.toString())}var v=require("@liberfi.io/types");function R(t,e){return p(this,null,function*(){if(!t.startsWith("http"))throw new Error("url must start with http(s)");let n=yield fetch(t,b(O({},e),{headers:Ot(e.headers,e.method)}));if(n.ok)return yield n.json();try{let s=yield n.json();throw n.status===400?new v.ApiError(s.message||s.code||n.statusText,s.code):new Error(s.message||s.code||n.statusText)}catch(s){throw s}})}function Ot(t={},e){let n=new Headers(t);return n.has("Content-Type")||(e!=="DELETE"?n.append("Content-Type","application/json;charset=utf-8"):n.append("Content-Type","application/x-www-form-urlencoded")),n}function bt(t,e){return p(this,null,function*(){return yield R(t,O({method:"GET"},e))})}function pt(t,e,n){return p(this,null,function*(){return yield R(t,O({method:"POST",body:JSON.stringify(e)},n))})}function Rt(t,e,n){return p(this,null,function*(){return yield R(t,O({method:"PUT",body:JSON.stringify(e)},n))})}function Tt(t,e){return p(this,null,function*(){return yield R(t,O({method:"DELETE"},e))})}function St(t,e){return p(this,null,function*(){return yield R(t,e)})}var c=rt(require("bignumber.js"));var l=class extends c.default{constructor(e,n){try{super(e!=null?e:0,n)}catch(s){console.error("SafeBigNumber constructor error",s),super(0,n)}}},f=t=>{if(typeof t=="number"&&!isNaN(t)||t instanceof l||t instanceof c.default)return!0;if(typeof t!="string")return!1;let e=Number.parseFloat(t);return!isNaN(e)},Et=t=>(typeof t=="number"||!!t)&&f(typeof t=="string"?Number(t):t),xt=(t="")=>/^(\d+\.?\d*|\.\d+)([hm]?)$$/.test(t),$t=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(2,c.default.ROUND_DOWN).toString():o.lt(1e5)?u(o,2):A(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},It=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.default.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):A(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},yt=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.default.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.default.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.default.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):A(o,0);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},wt=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e4)?`$${u(o,2)}`:`$${A(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Dt=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.default.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(1,c.default.ROUND_DOWN)}`:o.lt(1e15)?`$${A(i)}`:`$${Gt(o,{acronymMin:1e5,groupingSeparator:!0})}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},Pt=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.default.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(0,c.default.ROUND_DOWN)}`:`$${A(i,0)}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},Ct=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.default.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,2)}`:`$${A(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},_t=(t="",e={showPlusGtThanZero:!1})=>{if(!f(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(100)?`$${o.decimalPlaces(0,c.default.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,0)}`:`$${A(o,0)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Ut=(t="",e={isHighPrecise:!0})=>{if(!f(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`${s.lt(1e-4)?G(s,o?4:2):s.lt(1)?o?u(s,4):Z(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):A(s)}`},Mt=(t="",e={isHighPrecise:!0})=>{if(!f(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`$${s.lt(1e-4)?G(s,o?4:2):s.lt(1)?o?u(s,4):Z(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):A(s)}`},Bt=(t="",e={})=>{var a,g;if(!f(t))return"-- %";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(1e-4)?"0%":o.lt(100)?`${i}${F(o,(a=e==null?void 0:e.precision)!=null?a:2)}`:o.lt(1e3)?`${i}${F(o,(g=e==null?void 0:e.precision)!=null?g:1)}`:`${i}> 99,999%`},F=(t,e)=>`${t.times(100).decimalPlaces(e,c.default.ROUND_HALF_UP).toString()}%`,Lt=(t="",e={showPlusGtThanZero:!0})=>{if(!f(t))return"0%";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(.01)?"0%":o.lt(10)?`${i}${u(o,2)}X`:o.lt(100)?`${i}${u(o,1)}X`:o.lt(1e5)?`${i}${u(o,0)}X`:`${i}>99,999%`},Ht=(t="")=>{if(!f(t))return"--";let e=new l(t);return e.lt(1e5)?u(e,0):A(e)},Vt=(t="")=>{if(!f(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):A(e.div(1e3).integerValue(c.default.ROUND_DOWN).times(1e3),0)},Wt=(t="")=>{if(!f(t))return"--";let e=new l(t);return u(e,0)},kt=(t="")=>f(t)?u(t,0):"--",vt=(t="")=>{if(!f(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):A(e.div(100).integerValue(c.default.ROUND_DOWN).times(100))},Ft=["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089","\u2081\u2080","\u2081\u2081","\u2081\u2082","\u2081\u2083","\u2081\u2084","\u2081\u2085","\u2081\u2086","\u2081\u2087","\u2081\u2088","\u2081\u2089","\u2082\u2080","\u2082\u2081","\u2082\u2082","\u2082\u2083","\u2082\u2084","\u2082\u2085","\u2082\u2086","\u2082\u2087","\u2082\u2088","\u2082\u2089","\u2083\u2080","\u2083\u2081","\u2083\u2082","\u2083\u2083","\u2083\u2084","\u2083\u2085","\u2083\u2086","\u2083\u2087","\u2083\u2088","\u2083\u2089","\u2084\u2080"],u=(t,e=0,n=c.default.ROUND_DOWN)=>{let o=new l(t).decimalPlaces(e,n).toString().split(".");return o[0]=o[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),o.join(".")},A=(t,e=1)=>{let n=new l(t);return n.lt(1e3)?n.toNumber():n.lt(1e6)?`${u(n.div(1e3),e)}K`:n.lt(1e9)?`${u(n.div(1e6),e)}M`:n.lt(1e12)?`${u(n.dividedBy(1e9),e)}B`:`${u(n.dividedBy(1e12),e)}T`},G=(t,e=5)=>{let n=new l(t);if(n.eq(0))return"0";let[s,o]=n.toFixed().split("."),i=o.split(""),a=i.findIndex(m=>m!=="0"),g=Math.min(i.length-a,e);return`${u(s)}.0`.concat(Ft[a]).concat(i.slice(a,a+g).join("").replace(/\.?0+$/,""))},Z=(t,e)=>{let n=t.toString().match(/\.0*/),s=(n?n[0].length-1:0)+e;return u(t,s)},T=(t,e={})=>{let{precision:n=4,min:s,max:o,groupingSeparator:i,rounding:a,zeroDisplay:g}=e,m={up:c.default.ROUND_UP,down:c.default.ROUND_DOWN,ceil:c.default.ROUND_CEIL,floor:c.default.ROUND_FLOOR},d=new l(t);if(d.eq(0))return g||"0";let S=d.abs();return s&&S.lt(s)?`<${s}`:o&&S.gt(o)?`>${o}`:i?u(S,n,a?m[a]:void 0):(a?S.decimalPlaces(n,m[a]):S.decimalPlaces(n)).toString()},Gt=(t,e={})=>{let n=new l(t);if(n.eq(0))return e.zeroDisplay?e.zeroDisplay:"";let{acronymMin:s=1e4}=e,o=n.abs();return o.lt(s)?T(n,e):o.gte(1e15)?n.toExponential(2):o.gte(1e12)?`${T(n.div(1e12),b(O({},e),{precision:0}))}T`:o.gte(1e9)?`${T(n.div(1e9),b(O({},e),{precision:0}))}B`:o.gte(1e6)?`${T(n.div(1e6),b(O({},e),{precision:1}))}M`:o.gte(1e4)?`${T(n.div(1e3),b(O({},e),{precision:1}))}K`:T(n,e)};function Zt(t){let e=t.toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)}function Kt(t){return t.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var Yt=(t,e)=>{for(let n=0;n<t.length;n++){let s=t.at(n),o=e.at(n);if(s!==o)return n}return-1};function K(t){return/^[a-f0-9]+$/iu.test(t)}function zt(t){return typeof t=="string"&&t.startsWith("0x")&&K(t)}function jt(t,e="base-type"){if(!t)return"";let n=t.split("_"),s=n[0],o=n[1],i=n[2];return e.replace("type",s).replace("base",o).replace("quote",i)}var $=require("@liberfi.io/types"),Xt=(t,e)=>{switch(t){case $.Chain.SOLANA:return $.SOLANA_TOKEN_PROTOCOLS.find(n=>new RegExp(n,"i").test(e));default:return}},qt=t=>t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");var N=require("@liberfi.io/types"),Qt={[N.Chain.SOLANA]:"https://solscan.io/tx/${txHash}",[N.Chain.ETHEREUM]:"https://etherscan.io/tx/${txHash}",[N.Chain.POLYGON]:"https://polygonscan.com/tx/${txHash}",[N.Chain.BINANCE]:"https://bscscan.com/tx/${txHash}",[N.Chain.BINANCE_TESTNET]:"https://testnet.bscscan.com/tx/${txHash}",[N.Chain.AVALANCHE]:"https://snowtrace.io/tx/${txHash}",[N.Chain.BASE]:"https://basescan.org/tx/${txHash}",[N.Chain.BLAST]:"https://blastracker.xyz/tx/${txHash}",[N.Chain.ARBITRUM]:"https://arbiscan.io/tx/${txHash}",[N.Chain.ARBITRUM_NOVA]:"https://nova.arbiscan.io/tx/${txHash}",[N.Chain.ARBITRUM_TESTNET_GOERLI]:"https://goerli.arbiscan.io/tx/${txHash}",[N.Chain.ARBITRUM_TESTNET_SEPOLIA]:"https://sepolia.arbiscan.io/tx/${txHash}"};function Jt(t,e){var n;return(n=Qt[t])==null?void 0:n.replace("${txHash}",e)}var te={[N.Chain.SOLANA]:"https://solscan.io/account/${account}",[N.Chain.ETHEREUM]:"https://etherscan.io/address/${account}",[N.Chain.POLYGON]:"https://polygonscan.com/address/${account}",[N.Chain.BINANCE]:"https://bscscan.com/address/${account}"},ee=(t,e)=>{var n;return(n=te[t])==null?void 0:n.replace("${account}",e)};function re(t){return`https://lens.google.com/uploadbyurl?url=${encodeURIComponent(t)}`}function ne(t){return`https://x.com/search?q=${encodeURIComponent(t)}`}function oe(t){return`https://x.com/${t}`}function se(t){return`https://x.com/${t}`}function ie(t){return`https://x.com/${t}`}var ae=t=>{typeof window!="undefined"&&t()},Y=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},ce=()=>{var t;if(typeof window!="undefined"){let e=(t=Y())==null?void 0:t.__LIBERFI_timestamp_offset;if(typeof e=="number")return Date.now()+(e||0)}return Date.now()};var I=require("lodash-es");0&&(module.exports={SafeBigNumber,accountExplorerUrl,camelCaseToSnakeCase,canConvertToNumber,capitalizeString,chainIcon,chainIdBySlug,chainSlug,debounce,del,displayCount3,displayCount4,findLongestCommonSubString,formatAge,formatAgeInSeconds,formatAmount,formatAmount2,formatAmount3,formatAmountUSD,formatAmountUSD2,formatAmountUSD3,formatAmountUSD4,formatAmountUSD5,formatCount,formatCount2,formatCount3,formatMultiplier,formatPercent,formatPrice,formatPriceUSD,formatReadableTime,formatSymbol,formatTimeAgo,formatTokenProtocolName,get,getGlobalObject,getTimestamp,hex2int,int2hex,isHex,isHexString,isSolana,isTestnet,isValidNumber,isValidTimeframe,millisecondsToHMS,mutate,parseChainId,parseTokenProtocolFamily,post,put,request,searchImageUrl,searchTwitterUrl,secondsSince,subtractDaysFromCurrentDate,throttle,timestampToString,twitterMediaUrl,twitterTweetUrl,twitterUserUrl,txExplorerUrl,version,windowGuard});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/chain.ts","../src/dateTime.ts","../src/number.ts","../src/string.ts","../src/symbol.ts","../src/tokenProtocols.ts","../src/urls.ts","../src/window.ts"],"sourcesContent":["export { default as version } from \"./version\";\nexport * from \"./chain\";\nexport * from \"./dateTime\";\nexport * from \"./number\";\nexport * from \"./string\";\nexport * from \"./symbol\";\nexport * from \"./tokenProtocols\";\nexport * from \"./urls\";\nexport * from \"./window\";\n","declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/utils\"] = \"0.1.0\";\n}\n\nexport default \"0.1.0\";\n","import { Chain } from \"@liberfi.io/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\n\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\n\nexport const parseChainId = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const isTestnet = (chainId: string | number | Chain) => {\n const testnetIds = [\n Chain.ARBITRUM_TESTNET_GOERLI,\n Chain.ARBITRUM_TESTNET_SEPOLIA,\n Chain.SOLANA_DEVNET,\n Chain.SOLANA_TESTNET,\n Chain.ABSTRACT_TESTNET,\n Chain.BINANCE_TESTNET,\n ];\n return testnetIds.includes(`${chainId}` as Chain);\n};\n\nexport const isSolana = (chainId: string | number | Chain) => {\n return [Chain.SOLANA, Chain.SOLANA_DEVNET, Chain.SOLANA_TESTNET].includes(\n `${chainId}` as Chain,\n );\n};\n\nconst chainSlugs: Partial<Record<Chain, string>> = {\n [Chain.ETHEREUM]: \"ethereum\",\n [Chain.UBIQ]: \"ubiq\",\n [Chain.OPTIMISM]: \"optimism\",\n [Chain.FLARE]: \"flare\",\n [Chain.SONGBIRD]: \"songbird\",\n [Chain.ELASTOS]: \"elastos\",\n [Chain.KARDIA]: \"kardia\",\n [Chain.CRONOS]: \"cronos\",\n [Chain.RSK]: \"rsk\",\n [Chain.TELOS]: \"telos\",\n [Chain.LUKSO]: \"lukso\",\n [Chain.CRAB]: \"crab\",\n [Chain.DARWINIA]: \"darwinia\",\n [Chain.XDC]: \"xdc\",\n [Chain.CSC]: \"csc\",\n [Chain.ZYX]: \"zyx\",\n [Chain.BINANCE]: \"binance\",\n [Chain.SYSCOIN]: \"syscoin\",\n [Chain.GOCHAIN]: \"gochain\",\n [Chain.ETHEREUMCLASSIC]: \"ethereumclassic\",\n [Chain.OKEXCHAIN]: \"okexchain\",\n [Chain.HOO]: \"hoo\",\n [Chain.METER]: \"meter\",\n [Chain.NOVA_NETWORK]: \"nova network\",\n [Chain.TOMOCHAIN]: \"tomochain\",\n [Chain.BITKUB]: \"bitkub\",\n [Chain.XDAI]: \"xdai\",\n [Chain.SOLANA]: \"solana\",\n [Chain.VELAS]: \"velas\",\n [Chain.THUNDERCORE]: \"thundercore\",\n [Chain.ENULS]: \"enuls\",\n [Chain.FUSE]: \"fuse\",\n [Chain.HECO]: \"heco\",\n [Chain.UNICHAIN]: \"unichain\",\n [Chain.POLYGON]: \"polygon\",\n [Chain.SONIC]: \"sonic\",\n [Chain.SHIMMER_EVM]: \"shimmer_evm\",\n [Chain.RBN]: \"rbn\",\n [Chain.OMNI]: \"omni\",\n [Chain.MANTA]: \"manta\",\n [Chain.HSK]: \"hsk\",\n [Chain.WATER]: \"water\",\n [Chain.XLAYER]: \"xlayer\",\n [Chain.XDAIARB]: \"xdaiarb\",\n [Chain.OP_BNB]: \"op_bnb\",\n [Chain.VINUCHAIN]: \"vinuchain\",\n [Chain.ENERGYWEB]: \"energyweb\",\n [Chain.OASYS]: \"oasys\",\n [Chain.FANTOM]: \"fantom\",\n [Chain.FRAXTAL]: \"fraxtal\",\n [Chain.HPB]: \"hpb\",\n [Chain.BOBA]: \"boba\",\n [Chain.OMAX]: \"omax\",\n [Chain.FILECOIN]: \"filecoin\",\n [Chain.KUCOIN]: \"kucoin\",\n [Chain.ZKSYNC_ERA]: \"zksync era\",\n [Chain.SHIDEN]: \"shiden\",\n [Chain.THETA]: \"theta\",\n [Chain.PULSE]: \"pulse\",\n [Chain.CRONOS_ZKEVM]: \"cronos zkevm\",\n [Chain.SX]: \"sx\",\n [Chain.AREON]: \"areon\",\n [Chain.WC]: \"wc\",\n [Chain.CANDLE]: \"candle\",\n [Chain.ROLLUX]: \"rollux\",\n [Chain.ASTAR]: \"astar\",\n [Chain.REDSTONE]: \"redstone\",\n [Chain.MATCHAIN]: \"matchain\",\n [Chain.CALLISTO]: \"callisto\",\n [Chain.TARA]: \"tara\",\n [Chain.WANCHAIN]: \"wanchain\",\n [Chain.LYRA_CHAIN]: \"lyra chain\",\n [Chain.BIFROST]: \"bifrost\",\n [Chain.CONFLUX]: \"conflux\",\n [Chain.METIS]: \"metis\",\n [Chain.DYMENSION]: \"dymension\",\n [Chain.POLYGON_ZKEVM]: \"polygon zkevm\",\n [Chain.CORE]: \"core\",\n [Chain.LISK]: \"lisk\",\n [Chain.ULTRON]: \"ultron\",\n [Chain.STEP]: \"step\",\n [Chain.MOONBEAM]: \"moonbeam\",\n [Chain.MOONRIVER]: \"moonriver\",\n [Chain.SEI]: \"sei\",\n [Chain.LIVING_ASSETS_MAINNET]: \"living assets mainnet\",\n [Chain.STY]: \"sty\",\n [Chain.TENET]: \"tenet\",\n [Chain.GRAVITY]: \"gravity\",\n [Chain.REYA_NETWORK]: \"reya network\",\n [Chain.SONEIUM]: \"soneium\",\n [Chain.SWELLCHAIN]: \"swellchain\",\n [Chain.ONUS]: \"onus\",\n [Chain.HUBBLENET]: \"hubblenet\",\n [Chain.SANKO]: \"sanko\",\n [Chain.DOGECHAIN]: \"dogechain\",\n [Chain.MILKOMEDA]: \"milkomeda\",\n [Chain.MILKOMEDA_A1]: \"milkomeda_a1\",\n [Chain.KAVA]: \"kava\",\n [Chain.SOMA]: \"soma\",\n [Chain.KARAK]: \"karak\",\n [Chain.ABSTRACT]: \"abstract\",\n [Chain.MORPH]: \"morph\",\n [Chain.CROSSFI]: \"crossfi\",\n [Chain.BEAM]: \"beam\",\n [Chain.IOTEX]: \"iotex\",\n [Chain.MANTLE]: \"mantle\",\n [Chain.XLC]: \"xlc\",\n [Chain.NAHMII]: \"nahmii\",\n [Chain.BOUNCEBIT]: \"bouncebit\",\n [Chain.TOMBCHAIN]: \"tombchain\",\n [Chain.ZETACHAIN]: \"zetachain\",\n [Chain.PLANQ]: \"planq\",\n [Chain.BITROCK]: \"bitrock\",\n [Chain.XSAT]: \"xsat\",\n [Chain.CYETH]: \"cyeth\",\n [Chain.CANTO]: \"canto\",\n [Chain.KLAYTN]: \"klaytn\",\n [Chain.THAT]: \"that\",\n [Chain.BASE]: \"base\",\n [Chain.HELA]: \"hela\",\n [Chain.IOTAEVM]: \"iotaevm\",\n [Chain.JBC]: \"jbc\",\n [Chain.EVMOS]: \"evmos\",\n [Chain.CARBON]: \"carbon\",\n [Chain.SMARTBCH]: \"smartbch\",\n [Chain.ARTELA]: \"artela\",\n [Chain.IMMUTABLE_ZKEVM]: \"immutable zkevm\",\n [Chain.LOOP]: \"loop\",\n [Chain.GENESYS]: \"genesys\",\n [Chain.EOS_EVM]: \"eos evm\",\n [Chain.MAP_PROTOCOL]: \"map protocol\",\n [Chain.SAPPHIRE]: \"sapphire\",\n [Chain.BITGERT]: \"bitgert\",\n [Chain.FUSION]: \"fusion\",\n [Chain.ZILLIQA]: \"zilliqa\",\n [Chain.APECHAIN]: \"apechain\",\n [Chain.EDU_CHAIN]: \"edu chain\",\n [Chain.ARBITRUM]: \"arbitrum\",\n [Chain.ARBITRUM_NOVA]: \"arbitrum nova\",\n [Chain.CELO]: \"celo\",\n [Chain.OASIS]: \"oasis\",\n [Chain.ASSETCHAIN]: \"assetchain\",\n [Chain.ETHERLINK]: \"etherlink\",\n [Chain.AVALANCHE]: \"avalanche\",\n [Chain.REI]: \"rei\",\n [Chain.ZIRCUIT]: \"zircuit\",\n [Chain.SOPHON]: \"sophon\",\n [Chain.ETN]: \"etn\",\n [Chain.SUPERPOSITION]: \"superposition\",\n [Chain.REICHAIN]: \"reichain\",\n [Chain.BOBA_BNB]: \"boba_bnb\",\n [Chain.INK]: \"ink\",\n [Chain.LINEA]: \"linea\",\n [Chain.BOB]: \"bob\",\n [Chain.GODWOKEN]: \"godwoken\",\n [Chain.BERACHAIN]: \"berachain\",\n [Chain.BLAST]: \"blast\",\n [Chain.CHILIZ]: \"chiliz\",\n [Chain.STRATIS]: \"stratis\",\n [Chain.REAL]: \"real\",\n [Chain.ODYSSEY]: \"odyssey\",\n [Chain.TAIKO]: \"taiko\",\n [Chain.BITLAYER]: \"bitlayer\",\n [Chain.HYDRATION]: \"hydration\",\n [Chain.PAREX]: \"parex\",\n [Chain.POLIS]: \"polis\",\n [Chain.KEKCHAIN]: \"kekchain\",\n [Chain.SCROLL]: \"scroll\",\n [Chain.ZERO_NETWORK]: \"zero_network\",\n [Chain.ZKLINK_NOVA]: \"zklink nova\",\n [Chain.VISION]: \"vision\",\n [Chain.SAAKURU]: \"saakuru\",\n [Chain.ZORA]: \"zora\",\n [Chain.CORN]: \"corn\",\n [Chain.NEON]: \"neon\",\n [Chain.LUMIA]: \"lumia\",\n [Chain.AURORA]: \"aurora\",\n [Chain.HARMONY]: \"harmony\",\n [Chain.PALM]: \"palm\",\n [Chain.ZENIQ]: \"zeniq\",\n [Chain.CURIO]: \"curio\",\n [Chain.MODE]: \"mode\",\n};\n\nexport function chainIcon(chainId: Chain): string | undefined {\n const slug = chainSlugs[chainId];\n return slug\n ? `https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(slug)}.jpg`\n : undefined;\n}\n\nexport function chainSlug(chainId: Chain): string | undefined {\n return chainSlugs[chainId];\n}\n\nexport function chainIdBySlug(slug: string): Chain | undefined {\n const foundKey = Object.keys(chainSlugs).find(\n (key) => chainSlugs[key as Chain] === slug,\n );\n return foundKey ? (foundKey as Chain) : undefined;\n}\n","const NOW = Date.now();\n\nconst MINUTE = 60;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst YEAR = 365 * DAY;\n\nexport const millisecondsToHMS = (\n milliseconds: number,\n): [number, number, number] => {\n const totalSeconds = Math.floor(milliseconds / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return [hours, minutes, seconds];\n};\n\n/// will return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number | Date): string => {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date,\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n\nfunction maybeSecondsToMilliseconds(date: number): number {\n if (!date || Number.isNaN(date) || date <= 0) {\n return NOW;\n }\n if (date < 1e10) {\n return date * 1000;\n }\n return date;\n}\n\nfunction formatToMilliseconds(date?: number | string | Date | null): number {\n if (!date) {\n return NOW;\n }\n if (typeof date === \"number\") {\n return maybeSecondsToMilliseconds(date);\n }\n if (typeof date === \"string\") {\n const parsed = Date.parse(date);\n return maybeSecondsToMilliseconds(parsed);\n }\n if (date instanceof Date) {\n return date.getTime();\n }\n return NOW;\n}\n\nexport function formatTimeAgo(\n date: number | string | Date | null | undefined,\n): string {\n const diffSeconds = Math.floor(\n (Date.now() - formatToMilliseconds(date)) / 1000,\n );\n if (diffSeconds >= YEAR) {\n const years = Math.floor(diffSeconds / YEAR);\n return `${years}Y`;\n }\n if (diffSeconds >= DAY) {\n const days = Math.floor(diffSeconds / DAY);\n return `${days}D`;\n }\n if (diffSeconds >= HOUR) {\n const hours = Math.floor(diffSeconds / HOUR);\n return `${hours}h`;\n }\n if (diffSeconds >= MINUTE) {\n const minutes = Math.floor(diffSeconds / MINUTE);\n return `${minutes}m`;\n }\n return `${diffSeconds}s`;\n}\n\nexport function secondsSince(\n timestamp: number | Date,\n now?: number | Date,\n): number {\n const currentTime = now\n ? now instanceof Date\n ? now.getTime()\n : now\n : Date.now();\n const targetTime =\n timestamp instanceof Date ? timestamp.getTime() : timestamp;\n const diffInMilliseconds = currentTime - targetTime;\n return Math.floor(diffInMilliseconds / 1000);\n}\n\nexport interface FormatReadableTimeOptions {\n justNow?: string;\n secondsAgo?: string;\n minutesAgo?: string;\n hoursAgo?: string;\n daysAgo?: string;\n yearsAgo?: string;\n}\n\nconst defaultTranslations = {\n justNow: \"just now\",\n secondsAgo: \"{n}s\",\n minutesAgo: \"{n}m\",\n hoursAgo: \"{n}h\",\n daysAgo: \"{n}d\",\n yearsAgo: \"{n}y\",\n};\n\n/**\n * Formats a timestamp into a human-readable time ago string.\n\n *\n * @param timestamp - The timestamp (number) or Date object to format\n * @param options - Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatReadableTime(\n timestamp: number | Date,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = secondsSince(timestamp);\n\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (seconds < 10) {\n return translations.justNow;\n }\n if (seconds < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", seconds.toString());\n }\n if (seconds < HOUR) {\n const minutes = Math.floor(seconds / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (seconds < DAY) {\n const hours = Math.floor(seconds / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (seconds < YEAR) {\n const days = Math.floor(seconds / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(seconds / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n\n/**\n * Formats an age in milliseconds into a human-readable time ago string.\n * @param timestamp Age in milliseconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatAge(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = Math.floor(age / 1000);\n return formatAgeInSeconds(seconds, options);\n}\n\n/**\n * Formats an age in seconds into a human-readable time ago string.\n * @param timestamp Age in seconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n * @examples\n * formatAgeInSeconds(0) // \"just now\"\n * formatAgeInSeconds(10) // \"10s\"\n * formatAgeInSeconds(60) // \"1m\"\n * formatAgeInSeconds(3600) // \"1h\"\n * formatAgeInSeconds(86400) // \"1d\"\n * formatAgeInSeconds(31536000) // \"1y\"\n */\nexport function formatAgeInSeconds(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (age < 10) {\n return translations.justNow;\n }\n if (age < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", age.toString());\n }\n if (age < HOUR) {\n const minutes = Math.floor(age / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (age < DAY) {\n const hours = Math.floor(age / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (age < YEAR) {\n const days = Math.floor(age / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(age / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n","import BigNumber from \"bignumber.js\";\n\nexport class SafeBigNumber extends BigNumber {\n constructor(num?: BigNumber.Value, base?: number) {\n try {\n super(num ?? 0, base);\n } catch (e) {\n console.error(\"SafeBigNumber constructor error\", e);\n super(0, base);\n }\n }\n}\n\ndeclare namespace SafeBigNumber {\n type Value = BigNumber.Value;\n}\n\nexport const isValidNumber = (num: unknown) => {\n if (\n (\"number\" === typeof num && !isNaN(num)) ||\n num instanceof SafeBigNumber ||\n num instanceof BigNumber\n ) {\n return true;\n }\n if (\"string\" !== typeof num) {\n return false;\n }\n const floatNum = Number.parseFloat(num);\n return !isNaN(floatNum);\n};\n\nexport const canConvertToNumber = (num: unknown) =>\n (\"number\" === typeof num || !!num) &&\n isValidNumber(\"string\" === typeof num ? Number(num) : num);\n\nexport const isValidTimeframe = (timeframe: string = \"\") =>\n /^(\\d+\\.?\\d*|\\.\\d+)([hm]?)$$/.test(timeframe);\n\nexport type FormatAmountOptions = {\n showPlusGtThanZero: boolean;\n};\n\nexport const formatAmount = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(2, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs, 0);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e4)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(1, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e15)\n ? `$${stringifyNumberWithAbbreviation(roundedAbs)}`\n : `$${stringifyAmount(abs, {\n acronymMin: 1e5,\n groupingSeparator: true,\n })}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : `$${stringifyNumberWithAbbreviation(roundedAbs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD4 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD5 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(100)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 0)}`\n : `$${stringifyNumberWithAbbreviation(abs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport type FormatPriceOptions = {\n isHighPrecise: boolean;\n};\n\nexport const formatPrice = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `${formatted}`;\n};\n\nexport const formatPriceUSD = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `$${formatted}`;\n};\n\nexport type FormatPercentOptions = {\n showPlusGtThanZero?: boolean;\n precision?: number;\n};\n\n/**\n * Format a number as a percentage.\n * @param num - The number to format, 0.3 means 30%.\n * @param options - The options to format the number.\n * @param options.showPlusGtThanZero - Whether to show the plus sign if the number is greater than zero.\n * @param options.precision - The precision to format the number.\n * @returns\n */\nexport const formatPercent = (\n num: BigNumber.Value = \"\",\n options: FormatPercentOptions = {},\n) => {\n if (!isValidNumber(num)) return \"-- %\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(1e-4)) return \"0%\";\n if (abs.lt(100))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 2)}`;\n if (abs.lt(1e3))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 1)}`;\n return `${sign}> 99,999%`;\n};\n\nconst stringifyPercent = (bn: BigNumber, precision: number) =>\n `${bn.times(100).decimalPlaces(precision, BigNumber.ROUND_HALF_UP).toString()}%`;\n\nexport type FormatMultiplierOptions = {\n showPlusGtThanZero?: boolean;\n};\n\nexport const formatMultiplier = (\n num: BigNumber.Value = \"\",\n options: FormatMultiplierOptions = { showPlusGtThanZero: true },\n) => {\n if (!isValidNumber(num)) return \"0%\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(0.01)) return \"0%\";\n if (abs.lt(10))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 2)}X`;\n if (abs.lt(100))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 1)}X`;\n if (abs.lt(1e5))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 0)}X`;\n return `${sign}>99,999%`;\n};\n\nexport const formatCount = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(bn);\n};\n\nexport const formatCount2 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(1e3).integerValue(BigNumber.ROUND_DOWN).times(1e3),\n 0,\n );\n};\n\nexport const formatCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return stringifyNumberWithGroupingSeparator(bn, 0);\n};\n\nexport const displayCount4 = (num: BigNumber.Value = \"\") =>\n isValidNumber(num) ? stringifyNumberWithGroupingSeparator(num, 0) : \"--\";\n\nexport const displayCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(100).integerValue(BigNumber.ROUND_DOWN).times(100),\n );\n};\n\nconst subscriptDigits = [\n \"₀\",\n \"₁\",\n \"₂\",\n \"₃\",\n \"₄\",\n \"₅\",\n \"₆\",\n \"₇\",\n \"₈\",\n \"₉\",\n \"₁₀\",\n \"₁₁\",\n \"₁₂\",\n \"₁₃\",\n \"₁₄\",\n \"₁₅\",\n \"₁₆\",\n \"₁₇\",\n \"₁₈\",\n \"₁₉\",\n \"₂₀\",\n \"₂₁\",\n \"₂₂\",\n \"₂₃\",\n \"₂₄\",\n \"₂₅\",\n \"₂₆\",\n \"₂₇\",\n \"₂₈\",\n \"₂₉\",\n \"₃₀\",\n \"₃₁\",\n \"₃₂\",\n \"₃₃\",\n \"₃₄\",\n \"₃₅\",\n \"₃₆\",\n \"₃₇\",\n \"₃₈\",\n \"₃₉\",\n \"₄₀\",\n];\n\nconst stringifyNumberWithGroupingSeparator = (\n num: BigNumber.Value,\n precision: number = 0,\n rounding: BigNumber.RoundingMode = BigNumber.ROUND_DOWN,\n) => {\n const bn = new SafeBigNumber(num);\n const parts = bn.decimalPlaces(precision, rounding).toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return parts.join(\".\");\n};\n\nconst stringifyNumberWithAbbreviation = (\n num: BigNumber.Value,\n precision: number = 1,\n) => {\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? bn.toNumber()\n : bn.lt(1e6)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e3), precision)}K`\n : bn.lt(1e9)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e6), precision)}M`\n : bn.lt(1e12)\n ? `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e9), precision)}B`\n : `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e12), precision)}T`;\n};\n\nconst stringifyNumberWithLeadingZeroSubscripts = (\n num: BigNumber.Value,\n precision: number = 5,\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return \"0\";\n const [integerPart, decimalPart] = bn.toFixed().split(\".\");\n const digits = decimalPart.split(\"\");\n const firstNonZeroIndex = digits.findIndex((num) => \"0\" !== num);\n const precisionDigitsCount = Math.min(\n digits.length - firstNonZeroIndex,\n precision,\n );\n return `${stringifyNumberWithGroupingSeparator(integerPart)}.0`\n .concat(subscriptDigits[firstNonZeroIndex])\n .concat(\n digits\n .slice(firstNonZeroIndex, firstNonZeroIndex + precisionDigitsCount)\n .join(\"\")\n .replace(/\\.?0+$/, \"\"), // trim trailing zeros\n );\n};\n\nconst stringifyNumberWithSignificantPrecision = (\n num: BigNumber,\n precision: number,\n) => {\n const matched = num.toString().match(/\\.0*/); // has leading zeros\n const significantPrecision =\n (matched ? matched[0].length - 1 : 0) + precision;\n return stringifyNumberWithGroupingSeparator(num, significantPrecision);\n};\n\ntype StringifyAmountOptions = {\n precision?: number;\n groupingSeparator?: boolean;\n rounding?: \"up\" | \"down\" | \"ceil\" | \"floor\";\n // abbreviation if number is greater than this value\n acronymMin?: number;\n // display <min if number is less than this value\n min?: number;\n // display >max if number is greater than this value\n max?: number;\n // display this string if number is 0\n zeroDisplay?: string;\n};\n\nconst stringifyAmountWithClippingAndCapping = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const {\n precision = 4,\n min,\n max,\n groupingSeparator,\n rounding,\n zeroDisplay,\n } = options;\n\n const roundingMap = {\n up: BigNumber.ROUND_UP,\n down: BigNumber.ROUND_DOWN,\n ceil: BigNumber.ROUND_CEIL,\n floor: BigNumber.ROUND_FLOOR,\n };\n\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return zeroDisplay ? zeroDisplay : \"0\";\n\n const abs = bn.abs();\n\n if (min && abs.lt(min)) return `<${min}`;\n if (max && abs.gt(max)) return `>${max}`;\n\n if (groupingSeparator) {\n return stringifyNumberWithGroupingSeparator(\n abs,\n precision,\n rounding ? roundingMap[rounding] : undefined,\n );\n }\n\n const rounded = rounding\n ? abs.decimalPlaces(precision, roundingMap[rounding])\n : abs.decimalPlaces(precision);\n return rounded.toString();\n};\n\nconst stringifyAmount = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return options.zeroDisplay ? options.zeroDisplay : \"\";\n\n const { acronymMin = 1e4 } = options;\n const abs = bn.abs();\n if (abs.lt(acronymMin))\n return stringifyAmountWithClippingAndCapping(bn, options);\n\n if (abs.gte(1e15)) {\n return bn.toExponential(2);\n }\n if (abs.gte(1e12)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e12), { ...options, precision: 0 })}T`;\n }\n if (abs.gte(1e9)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e9), { ...options, precision: 0 })}B`;\n }\n if (abs.gte(1e6)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e6), { ...options, precision: 1 })}M`;\n }\n if (abs.gte(1e4)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e3), { ...options, precision: 1 })}K`;\n }\n return stringifyAmountWithClippingAndCapping(bn, options);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToSnakeCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n return index;\n }\n return -1;\n};\n\nexport function isHex(value: string): boolean {\n const hexRegex = /^[a-f0-9]+$/iu;\n return hexRegex.test(value);\n}\n\nexport function isHexString(value: string): boolean {\n return typeof value === \"string\" && value.startsWith(\"0x\") && isHex(value);\n}\n","/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import {\n Chain,\n SOLANA_TOKEN_PROTOCOLS,\n TokenProtocol,\n} from \"@liberfi.io/types\";\n\nexport const parseTokenProtocolFamily = (\n chain: Chain,\n protocolFamily: string,\n): TokenProtocol | undefined => {\n switch (chain) {\n case Chain.SOLANA:\n return SOLANA_TOKEN_PROTOCOLS.find((p) =>\n new RegExp(p, \"i\").test(protocolFamily),\n );\n default:\n return undefined;\n }\n};\n\nexport const formatTokenProtocolName = (protocol: TokenProtocol) => {\n return protocol\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n","import { Chain } from \"@liberfi.io/types\";\n\nconst TX_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/tx/${txHash}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/tx/${txHash}\",\n [Chain.POLYGON]: \"https://polygonscan.com/tx/${txHash}\",\n [Chain.BINANCE]: \"https://bscscan.com/tx/${txHash}\",\n [Chain.BINANCE_TESTNET]: \"https://testnet.bscscan.com/tx/${txHash}\",\n [Chain.AVALANCHE]: \"https://snowtrace.io/tx/${txHash}\",\n [Chain.BASE]: \"https://basescan.org/tx/${txHash}\",\n [Chain.BLAST]: \"https://blastracker.xyz/tx/${txHash}\",\n [Chain.ARBITRUM]: \"https://arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_NOVA]: \"https://nova.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_GOERLI]: \"https://goerli.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_SEPOLIA]: \"https://sepolia.arbiscan.io/tx/${txHash}\",\n};\n\nexport function txExplorerUrl(chainId: Chain, txHash: string) {\n return TX_EXPLORER_URLS[chainId]?.replace(\"${txHash}\", txHash);\n}\n\nconst ACCOUNT_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/account/${account}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/address/${account}\",\n [Chain.POLYGON]: \"https://polygonscan.com/address/${account}\",\n [Chain.BINANCE]: \"https://bscscan.com/address/${account}\",\n};\n\nexport const accountExplorerUrl = (chainId: Chain, account: string) => {\n return ACCOUNT_EXPLORER_URLS[chainId]?.replace(\"${account}\", account);\n};\n\nexport function searchImageUrl(image: string) {\n return `https://lens.google.com/uploadbyurl?url=${encodeURIComponent(image)}`;\n}\n\nexport function searchTwitterUrl(q: string) {\n return `https://x.com/search?q=${encodeURIComponent(q)}`;\n}\n\nexport function twitterUserUrl(username: string) {\n return `https://x.com/${username}`;\n}\n\nexport function twitterTweetUrl(id: string) {\n return `https://x.com/${id}`;\n}\n\nexport function twitterMediaUrl(id: string) {\n return `https://x.com/${id}`;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__LIBERFI_timestamp_offset;\n if (typeof timeOffset === \"number\") {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n};\n"],"mappings":"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","names":["index_exports","__export","SafeBigNumber","accountExplorerUrl","camelCaseToSnakeCase","canConvertToNumber","capitalizeString","chainIcon","chainIdBySlug","chainSlug","displayCount3","displayCount4","findLongestCommonSubString","formatAge","formatAgeInSeconds","formatAmount","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatCount","formatCount2","formatCount3","formatMultiplier","formatPercent","formatPrice","formatPriceUSD","formatReadableTime","formatSymbol","formatTimeAgo","formatTokenProtocolName","getGlobalObject","getTimestamp","hex2int","int2hex","isHex","isHexString","isSolana","isTestnet","isValidNumber","isValidTimeframe","millisecondsToHMS","parseChainId","parseTokenProtocolFamily","searchImageUrl","searchTwitterUrl","secondsSince","subtractDaysFromCurrentDate","timestampToString","twitterMediaUrl","twitterTweetUrl","twitterUserUrl","txExplorerUrl","version_default","windowGuard","__toCommonJS","version_default","import_types","hex2int","chainId","int2hex","parseChainId","isTestnet","isSolana","chainSlugs","chainIcon","slug","chainSlug","chainIdBySlug","foundKey","key","NOW","MINUTE","HOUR","DAY","YEAR","millisecondsToHMS","milliseconds","totalSeconds","hours","minutes","seconds","timestampToString","timestamp","date","year","month","day","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","maybeSecondsToMilliseconds","formatToMilliseconds","parsed","formatTimeAgo","diffSeconds","secondsSince","now","currentTime","targetTime","diffInMilliseconds","defaultTranslations","formatReadableTime","options","translations","years","formatAge","age","formatAgeInSeconds","import_bignumber","SafeBigNumber","BigNumber","num","base","e","isValidNumber","floatNum","canConvertToNumber","isValidTimeframe","timeframe","formatAmount","options","bn","negative","abs","formatted","stringifyNumberWithGroupingSeparator","stringifyNumberWithAbbreviation","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","roundedAbs","stringifyAmount","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatPrice","isHighPrecise","stringifyNumberWithLeadingZeroSubscripts","stringifyNumberWithSignificantPrecision","formatPriceUSD","formatPercent","_a","_b","sign","stringifyPercent","precision","formatMultiplier","formatCount","formatCount2","formatCount3","displayCount4","displayCount3","subscriptDigits","rounding","parts","integerPart","decimalPart","digits","firstNonZeroIndex","precisionDigitsCount","matched","significantPrecision","stringifyAmountWithClippingAndCapping","min","max","groupingSeparator","zeroDisplay","roundingMap","acronymMin","__spreadProps","__spreadValues","capitalizeString","str","lowercaseStr","camelCaseToSnakeCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","isHex","value","isHexString","formatSymbol","symbol","formatString","arr","type","base","quote","import_types","parseTokenProtocolFamily","chain","protocolFamily","p","formatTokenProtocolName","protocol","word","import_types","TX_EXPLORER_URLS","txExplorerUrl","chainId","txHash","_a","ACCOUNT_EXPLORER_URLS","accountExplorerUrl","account","searchImageUrl","image","searchTwitterUrl","q","twitterUserUrl","username","twitterTweetUrl","id","twitterMediaUrl","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/chain.ts","../src/dateTime.ts","../src/fetch.ts","../src/number.ts","../src/string.ts","../src/symbol.ts","../src/tokenProtocols.ts","../src/urls.ts","../src/window.ts"],"sourcesContent":["export { default as version } from \"./version\";\nexport * from \"./chain\";\nexport * from \"./dateTime\";\nexport * from \"./fetch\";\nexport * from \"./number\";\nexport * from \"./string\";\nexport * from \"./symbol\";\nexport * from \"./tokenProtocols\";\nexport * from \"./urls\";\nexport * from \"./window\";\n\nexport { throttle, debounce } from \"lodash-es\";\n","declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/utils\"] = \"0.1.4\";\n}\n\nexport default \"0.1.4\";\n","import { Chain } from \"@liberfi.io/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\n\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\n\nexport const parseChainId = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const isTestnet = (chainId: string | number | Chain) => {\n const testnetIds = [\n Chain.ARBITRUM_TESTNET_GOERLI,\n Chain.ARBITRUM_TESTNET_SEPOLIA,\n Chain.SOLANA_DEVNET,\n Chain.SOLANA_TESTNET,\n Chain.ABSTRACT_TESTNET,\n Chain.BINANCE_TESTNET,\n ];\n return testnetIds.includes(`${chainId}` as Chain);\n};\n\nexport const isSolana = (chainId: string | number | Chain) => {\n return [Chain.SOLANA, Chain.SOLANA_DEVNET, Chain.SOLANA_TESTNET].includes(\n `${chainId}` as Chain,\n );\n};\n\nconst chainSlugs: Partial<Record<Chain, string>> = {\n [Chain.ETHEREUM]: \"ethereum\",\n [Chain.UBIQ]: \"ubiq\",\n [Chain.OPTIMISM]: \"optimism\",\n [Chain.FLARE]: \"flare\",\n [Chain.SONGBIRD]: \"songbird\",\n [Chain.ELASTOS]: \"elastos\",\n [Chain.KARDIA]: \"kardia\",\n [Chain.CRONOS]: \"cronos\",\n [Chain.RSK]: \"rsk\",\n [Chain.TELOS]: \"telos\",\n [Chain.LUKSO]: \"lukso\",\n [Chain.CRAB]: \"crab\",\n [Chain.DARWINIA]: \"darwinia\",\n [Chain.XDC]: \"xdc\",\n [Chain.CSC]: \"csc\",\n [Chain.ZYX]: \"zyx\",\n [Chain.BINANCE]: \"binance\",\n [Chain.SYSCOIN]: \"syscoin\",\n [Chain.GOCHAIN]: \"gochain\",\n [Chain.ETHEREUMCLASSIC]: \"ethereumclassic\",\n [Chain.OKEXCHAIN]: \"okexchain\",\n [Chain.HOO]: \"hoo\",\n [Chain.METER]: \"meter\",\n [Chain.NOVA_NETWORK]: \"nova network\",\n [Chain.TOMOCHAIN]: \"tomochain\",\n [Chain.BITKUB]: \"bitkub\",\n [Chain.XDAI]: \"xdai\",\n [Chain.SOLANA]: \"solana\",\n [Chain.VELAS]: \"velas\",\n [Chain.THUNDERCORE]: \"thundercore\",\n [Chain.ENULS]: \"enuls\",\n [Chain.FUSE]: \"fuse\",\n [Chain.HECO]: \"heco\",\n [Chain.UNICHAIN]: \"unichain\",\n [Chain.POLYGON]: \"polygon\",\n [Chain.SONIC]: \"sonic\",\n [Chain.SHIMMER_EVM]: \"shimmer_evm\",\n [Chain.RBN]: \"rbn\",\n [Chain.OMNI]: \"omni\",\n [Chain.MANTA]: \"manta\",\n [Chain.HSK]: \"hsk\",\n [Chain.WATER]: \"water\",\n [Chain.XLAYER]: \"xlayer\",\n [Chain.XDAIARB]: \"xdaiarb\",\n [Chain.OP_BNB]: \"op_bnb\",\n [Chain.VINUCHAIN]: \"vinuchain\",\n [Chain.ENERGYWEB]: \"energyweb\",\n [Chain.OASYS]: \"oasys\",\n [Chain.FANTOM]: \"fantom\",\n [Chain.FRAXTAL]: \"fraxtal\",\n [Chain.HPB]: \"hpb\",\n [Chain.BOBA]: \"boba\",\n [Chain.OMAX]: \"omax\",\n [Chain.FILECOIN]: \"filecoin\",\n [Chain.KUCOIN]: \"kucoin\",\n [Chain.ZKSYNC_ERA]: \"zksync era\",\n [Chain.SHIDEN]: \"shiden\",\n [Chain.THETA]: \"theta\",\n [Chain.PULSE]: \"pulse\",\n [Chain.CRONOS_ZKEVM]: \"cronos zkevm\",\n [Chain.SX]: \"sx\",\n [Chain.AREON]: \"areon\",\n [Chain.WC]: \"wc\",\n [Chain.CANDLE]: \"candle\",\n [Chain.ROLLUX]: \"rollux\",\n [Chain.ASTAR]: \"astar\",\n [Chain.REDSTONE]: \"redstone\",\n [Chain.MATCHAIN]: \"matchain\",\n [Chain.CALLISTO]: \"callisto\",\n [Chain.TARA]: \"tara\",\n [Chain.WANCHAIN]: \"wanchain\",\n [Chain.LYRA_CHAIN]: \"lyra chain\",\n [Chain.BIFROST]: \"bifrost\",\n [Chain.CONFLUX]: \"conflux\",\n [Chain.METIS]: \"metis\",\n [Chain.DYMENSION]: \"dymension\",\n [Chain.POLYGON_ZKEVM]: \"polygon zkevm\",\n [Chain.CORE]: \"core\",\n [Chain.LISK]: \"lisk\",\n [Chain.ULTRON]: \"ultron\",\n [Chain.STEP]: \"step\",\n [Chain.MOONBEAM]: \"moonbeam\",\n [Chain.MOONRIVER]: \"moonriver\",\n [Chain.SEI]: \"sei\",\n [Chain.LIVING_ASSETS_MAINNET]: \"living assets mainnet\",\n [Chain.STY]: \"sty\",\n [Chain.TENET]: \"tenet\",\n [Chain.GRAVITY]: \"gravity\",\n [Chain.REYA_NETWORK]: \"reya network\",\n [Chain.SONEIUM]: \"soneium\",\n [Chain.SWELLCHAIN]: \"swellchain\",\n [Chain.ONUS]: \"onus\",\n [Chain.HUBBLENET]: \"hubblenet\",\n [Chain.SANKO]: \"sanko\",\n [Chain.DOGECHAIN]: \"dogechain\",\n [Chain.MILKOMEDA]: \"milkomeda\",\n [Chain.MILKOMEDA_A1]: \"milkomeda_a1\",\n [Chain.KAVA]: \"kava\",\n [Chain.SOMA]: \"soma\",\n [Chain.KARAK]: \"karak\",\n [Chain.ABSTRACT]: \"abstract\",\n [Chain.MORPH]: \"morph\",\n [Chain.CROSSFI]: \"crossfi\",\n [Chain.BEAM]: \"beam\",\n [Chain.IOTEX]: \"iotex\",\n [Chain.MANTLE]: \"mantle\",\n [Chain.XLC]: \"xlc\",\n [Chain.NAHMII]: \"nahmii\",\n [Chain.BOUNCEBIT]: \"bouncebit\",\n [Chain.TOMBCHAIN]: \"tombchain\",\n [Chain.ZETACHAIN]: \"zetachain\",\n [Chain.PLANQ]: \"planq\",\n [Chain.BITROCK]: \"bitrock\",\n [Chain.XSAT]: \"xsat\",\n [Chain.CYETH]: \"cyeth\",\n [Chain.CANTO]: \"canto\",\n [Chain.KLAYTN]: \"klaytn\",\n [Chain.THAT]: \"that\",\n [Chain.BASE]: \"base\",\n [Chain.HELA]: \"hela\",\n [Chain.IOTAEVM]: \"iotaevm\",\n [Chain.JBC]: \"jbc\",\n [Chain.EVMOS]: \"evmos\",\n [Chain.CARBON]: \"carbon\",\n [Chain.SMARTBCH]: \"smartbch\",\n [Chain.ARTELA]: \"artela\",\n [Chain.IMMUTABLE_ZKEVM]: \"immutable zkevm\",\n [Chain.LOOP]: \"loop\",\n [Chain.GENESYS]: \"genesys\",\n [Chain.EOS_EVM]: \"eos evm\",\n [Chain.MAP_PROTOCOL]: \"map protocol\",\n [Chain.SAPPHIRE]: \"sapphire\",\n [Chain.BITGERT]: \"bitgert\",\n [Chain.FUSION]: \"fusion\",\n [Chain.ZILLIQA]: \"zilliqa\",\n [Chain.APECHAIN]: \"apechain\",\n [Chain.EDU_CHAIN]: \"edu chain\",\n [Chain.ARBITRUM]: \"arbitrum\",\n [Chain.ARBITRUM_NOVA]: \"arbitrum nova\",\n [Chain.CELO]: \"celo\",\n [Chain.OASIS]: \"oasis\",\n [Chain.ASSETCHAIN]: \"assetchain\",\n [Chain.ETHERLINK]: \"etherlink\",\n [Chain.AVALANCHE]: \"avalanche\",\n [Chain.REI]: \"rei\",\n [Chain.ZIRCUIT]: \"zircuit\",\n [Chain.SOPHON]: \"sophon\",\n [Chain.ETN]: \"etn\",\n [Chain.SUPERPOSITION]: \"superposition\",\n [Chain.REICHAIN]: \"reichain\",\n [Chain.BOBA_BNB]: \"boba_bnb\",\n [Chain.INK]: \"ink\",\n [Chain.LINEA]: \"linea\",\n [Chain.BOB]: \"bob\",\n [Chain.GODWOKEN]: \"godwoken\",\n [Chain.BERACHAIN]: \"berachain\",\n [Chain.BLAST]: \"blast\",\n [Chain.CHILIZ]: \"chiliz\",\n [Chain.STRATIS]: \"stratis\",\n [Chain.REAL]: \"real\",\n [Chain.ODYSSEY]: \"odyssey\",\n [Chain.TAIKO]: \"taiko\",\n [Chain.BITLAYER]: \"bitlayer\",\n [Chain.HYDRATION]: \"hydration\",\n [Chain.PAREX]: \"parex\",\n [Chain.POLIS]: \"polis\",\n [Chain.KEKCHAIN]: \"kekchain\",\n [Chain.SCROLL]: \"scroll\",\n [Chain.ZERO_NETWORK]: \"zero_network\",\n [Chain.ZKLINK_NOVA]: \"zklink nova\",\n [Chain.VISION]: \"vision\",\n [Chain.SAAKURU]: \"saakuru\",\n [Chain.ZORA]: \"zora\",\n [Chain.CORN]: \"corn\",\n [Chain.NEON]: \"neon\",\n [Chain.LUMIA]: \"lumia\",\n [Chain.AURORA]: \"aurora\",\n [Chain.HARMONY]: \"harmony\",\n [Chain.PALM]: \"palm\",\n [Chain.ZENIQ]: \"zeniq\",\n [Chain.CURIO]: \"curio\",\n [Chain.MODE]: \"mode\",\n};\n\nexport function chainIcon(chainId: Chain): string | undefined {\n const slug = chainSlugs[chainId];\n return slug\n ? `https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(slug)}.jpg`\n : undefined;\n}\n\nexport function chainSlug(chainId: Chain): string | undefined {\n return chainSlugs[chainId];\n}\n\nexport function chainIdBySlug(slug: string): Chain | undefined {\n const foundKey = Object.keys(chainSlugs).find(\n (key) => chainSlugs[key as Chain] === slug,\n );\n return foundKey ? (foundKey as Chain) : undefined;\n}\n","const NOW = Date.now();\n\nconst MINUTE = 60;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst YEAR = 365 * DAY;\n\nexport const millisecondsToHMS = (\n milliseconds: number,\n): [number, number, number] => {\n const totalSeconds = Math.floor(milliseconds / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return [hours, minutes, seconds];\n};\n\n/// will return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number | Date): string => {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date,\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n\nfunction maybeSecondsToMilliseconds(date: number): number {\n if (!date || Number.isNaN(date) || date <= 0) {\n return NOW;\n }\n if (date < 1e10) {\n return date * 1000;\n }\n return date;\n}\n\nfunction formatToMilliseconds(date?: number | string | Date | null): number {\n if (!date) {\n return NOW;\n }\n if (typeof date === \"number\") {\n return maybeSecondsToMilliseconds(date);\n }\n if (typeof date === \"string\") {\n const parsed = Date.parse(date);\n return maybeSecondsToMilliseconds(parsed);\n }\n if (date instanceof Date) {\n return date.getTime();\n }\n return NOW;\n}\n\nexport function formatTimeAgo(\n date: number | string | Date | null | undefined,\n): string {\n const diffSeconds = Math.floor(\n (Date.now() - formatToMilliseconds(date)) / 1000,\n );\n if (diffSeconds >= YEAR) {\n const years = Math.floor(diffSeconds / YEAR);\n return `${years}Y`;\n }\n if (diffSeconds >= DAY) {\n const days = Math.floor(diffSeconds / DAY);\n return `${days}D`;\n }\n if (diffSeconds >= HOUR) {\n const hours = Math.floor(diffSeconds / HOUR);\n return `${hours}h`;\n }\n if (diffSeconds >= MINUTE) {\n const minutes = Math.floor(diffSeconds / MINUTE);\n return `${minutes}m`;\n }\n return `${diffSeconds}s`;\n}\n\nexport function secondsSince(\n timestamp: number | Date,\n now?: number | Date,\n): number {\n const currentTime = now\n ? now instanceof Date\n ? now.getTime()\n : now\n : Date.now();\n const targetTime =\n timestamp instanceof Date ? timestamp.getTime() : timestamp;\n const diffInMilliseconds = currentTime - targetTime;\n return Math.floor(diffInMilliseconds / 1000);\n}\n\nexport interface FormatReadableTimeOptions {\n justNow?: string;\n secondsAgo?: string;\n minutesAgo?: string;\n hoursAgo?: string;\n daysAgo?: string;\n yearsAgo?: string;\n}\n\nconst defaultTranslations = {\n justNow: \"just now\",\n secondsAgo: \"{n}s\",\n minutesAgo: \"{n}m\",\n hoursAgo: \"{n}h\",\n daysAgo: \"{n}d\",\n yearsAgo: \"{n}y\",\n};\n\n/**\n * Formats a timestamp into a human-readable time ago string.\n\n *\n * @param timestamp - The timestamp (number) or Date object to format\n * @param options - Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatReadableTime(\n timestamp: number | Date,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = secondsSince(timestamp);\n\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (seconds < 10) {\n return translations.justNow;\n }\n if (seconds < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", seconds.toString());\n }\n if (seconds < HOUR) {\n const minutes = Math.floor(seconds / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (seconds < DAY) {\n const hours = Math.floor(seconds / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (seconds < YEAR) {\n const days = Math.floor(seconds / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(seconds / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n\n/**\n * Formats an age in milliseconds into a human-readable time ago string.\n * @param timestamp Age in milliseconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatAge(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = Math.floor(age / 1000);\n return formatAgeInSeconds(seconds, options);\n}\n\n/**\n * Formats an age in seconds into a human-readable time ago string.\n * @param timestamp Age in seconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n * @examples\n * formatAgeInSeconds(0) // \"just now\"\n * formatAgeInSeconds(10) // \"10s\"\n * formatAgeInSeconds(60) // \"1m\"\n * formatAgeInSeconds(3600) // \"1h\"\n * formatAgeInSeconds(86400) // \"1d\"\n * formatAgeInSeconds(31536000) // \"1y\"\n */\nexport function formatAgeInSeconds(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (age < 10) {\n return translations.justNow;\n }\n if (age < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", age.toString());\n }\n if (age < HOUR) {\n const minutes = Math.floor(age / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (age < DAY) {\n const hours = Math.floor(age / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (age < YEAR) {\n const days = Math.floor(age / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(age / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApiError } from \"@liberfi.io/types\";\n\nexport async function request<R = any>(\n url: string,\n options: RequestInit,\n): Promise<R> {\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n } else {\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nexport async function get<R = any>(\n url: string,\n options?: RequestInit,\n): Promise<R> {\n return await request<R>(url, {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function post<R = any, P = any>(\n url: string,\n data: P,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n}\n\nexport async function put<R = any, P = any>(\n url: string,\n data: P,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n}\n\nexport async function del<R = any>(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"DELETE\",\n ...options,\n });\n}\n\nexport async function mutate<R = any>(\n url: string,\n init: RequestInit,\n): Promise<R> {\n return await request<R>(url, init);\n}\n","import BigNumber from \"bignumber.js\";\n\nexport class SafeBigNumber extends BigNumber {\n constructor(num?: BigNumber.Value, base?: number) {\n try {\n super(num ?? 0, base);\n } catch (e) {\n console.error(\"SafeBigNumber constructor error\", e);\n super(0, base);\n }\n }\n}\n\ndeclare namespace SafeBigNumber {\n type Value = BigNumber.Value;\n}\n\nexport const isValidNumber = (num: unknown) => {\n if (\n (\"number\" === typeof num && !isNaN(num)) ||\n num instanceof SafeBigNumber ||\n num instanceof BigNumber\n ) {\n return true;\n }\n if (\"string\" !== typeof num) {\n return false;\n }\n const floatNum = Number.parseFloat(num);\n return !isNaN(floatNum);\n};\n\nexport const canConvertToNumber = (num: unknown) =>\n (\"number\" === typeof num || !!num) &&\n isValidNumber(\"string\" === typeof num ? Number(num) : num);\n\nexport const isValidTimeframe = (timeframe: string = \"\") =>\n /^(\\d+\\.?\\d*|\\.\\d+)([hm]?)$$/.test(timeframe);\n\nexport type FormatAmountOptions = {\n showPlusGtThanZero: boolean;\n};\n\nexport const formatAmount = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(2, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs, 0);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e4)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(1, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e15)\n ? `$${stringifyNumberWithAbbreviation(roundedAbs)}`\n : `$${stringifyAmount(abs, {\n acronymMin: 1e5,\n groupingSeparator: true,\n })}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : `$${stringifyNumberWithAbbreviation(roundedAbs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD4 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD5 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(100)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 0)}`\n : `$${stringifyNumberWithAbbreviation(abs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport type FormatPriceOptions = {\n isHighPrecise: boolean;\n};\n\nexport const formatPrice = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `${formatted}`;\n};\n\nexport const formatPriceUSD = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `$${formatted}`;\n};\n\nexport type FormatPercentOptions = {\n showPlusGtThanZero?: boolean;\n precision?: number;\n};\n\n/**\n * Format a number as a percentage.\n * @param num - The number to format, 0.3 means 30%.\n * @param options - The options to format the number.\n * @param options.showPlusGtThanZero - Whether to show the plus sign if the number is greater than zero.\n * @param options.precision - The precision to format the number.\n * @returns\n */\nexport const formatPercent = (\n num: BigNumber.Value = \"\",\n options: FormatPercentOptions = {},\n) => {\n if (!isValidNumber(num)) return \"-- %\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(1e-4)) return \"0%\";\n if (abs.lt(100))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 2)}`;\n if (abs.lt(1e3))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 1)}`;\n return `${sign}> 99,999%`;\n};\n\nconst stringifyPercent = (bn: BigNumber, precision: number) =>\n `${bn.times(100).decimalPlaces(precision, BigNumber.ROUND_HALF_UP).toString()}%`;\n\nexport type FormatMultiplierOptions = {\n showPlusGtThanZero?: boolean;\n};\n\nexport const formatMultiplier = (\n num: BigNumber.Value = \"\",\n options: FormatMultiplierOptions = { showPlusGtThanZero: true },\n) => {\n if (!isValidNumber(num)) return \"0%\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(0.01)) return \"0%\";\n if (abs.lt(10))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 2)}X`;\n if (abs.lt(100))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 1)}X`;\n if (abs.lt(1e5))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 0)}X`;\n return `${sign}>99,999%`;\n};\n\nexport const formatCount = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(bn);\n};\n\nexport const formatCount2 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(1e3).integerValue(BigNumber.ROUND_DOWN).times(1e3),\n 0,\n );\n};\n\nexport const formatCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return stringifyNumberWithGroupingSeparator(bn, 0);\n};\n\nexport const displayCount4 = (num: BigNumber.Value = \"\") =>\n isValidNumber(num) ? stringifyNumberWithGroupingSeparator(num, 0) : \"--\";\n\nexport const displayCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(100).integerValue(BigNumber.ROUND_DOWN).times(100),\n );\n};\n\nconst subscriptDigits = [\n \"₀\",\n \"₁\",\n \"₂\",\n \"₃\",\n \"₄\",\n \"₅\",\n \"₆\",\n \"₇\",\n \"₈\",\n \"₉\",\n \"₁₀\",\n \"₁₁\",\n \"₁₂\",\n \"₁₃\",\n \"₁₄\",\n \"₁₅\",\n \"₁₆\",\n \"₁₇\",\n \"₁₈\",\n \"₁₉\",\n \"₂₀\",\n \"₂₁\",\n \"₂₂\",\n \"₂₃\",\n \"₂₄\",\n \"₂₅\",\n \"₂₆\",\n \"₂₇\",\n \"₂₈\",\n \"₂₉\",\n \"₃₀\",\n \"₃₁\",\n \"₃₂\",\n \"₃₃\",\n \"₃₄\",\n \"₃₅\",\n \"₃₆\",\n \"₃₇\",\n \"₃₈\",\n \"₃₉\",\n \"₄₀\",\n];\n\nconst stringifyNumberWithGroupingSeparator = (\n num: BigNumber.Value,\n precision: number = 0,\n rounding: BigNumber.RoundingMode = BigNumber.ROUND_DOWN,\n) => {\n const bn = new SafeBigNumber(num);\n const parts = bn.decimalPlaces(precision, rounding).toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return parts.join(\".\");\n};\n\nconst stringifyNumberWithAbbreviation = (\n num: BigNumber.Value,\n precision: number = 1,\n) => {\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? bn.toNumber()\n : bn.lt(1e6)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e3), precision)}K`\n : bn.lt(1e9)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e6), precision)}M`\n : bn.lt(1e12)\n ? `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e9), precision)}B`\n : `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e12), precision)}T`;\n};\n\nconst stringifyNumberWithLeadingZeroSubscripts = (\n num: BigNumber.Value,\n precision: number = 5,\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return \"0\";\n const [integerPart, decimalPart] = bn.toFixed().split(\".\");\n const digits = decimalPart.split(\"\");\n const firstNonZeroIndex = digits.findIndex((num) => \"0\" !== num);\n const precisionDigitsCount = Math.min(\n digits.length - firstNonZeroIndex,\n precision,\n );\n return `${stringifyNumberWithGroupingSeparator(integerPart)}.0`\n .concat(subscriptDigits[firstNonZeroIndex])\n .concat(\n digits\n .slice(firstNonZeroIndex, firstNonZeroIndex + precisionDigitsCount)\n .join(\"\")\n .replace(/\\.?0+$/, \"\"), // trim trailing zeros\n );\n};\n\nconst stringifyNumberWithSignificantPrecision = (\n num: BigNumber,\n precision: number,\n) => {\n const matched = num.toString().match(/\\.0*/); // has leading zeros\n const significantPrecision =\n (matched ? matched[0].length - 1 : 0) + precision;\n return stringifyNumberWithGroupingSeparator(num, significantPrecision);\n};\n\ntype StringifyAmountOptions = {\n precision?: number;\n groupingSeparator?: boolean;\n rounding?: \"up\" | \"down\" | \"ceil\" | \"floor\";\n // abbreviation if number is greater than this value\n acronymMin?: number;\n // display <min if number is less than this value\n min?: number;\n // display >max if number is greater than this value\n max?: number;\n // display this string if number is 0\n zeroDisplay?: string;\n};\n\nconst stringifyAmountWithClippingAndCapping = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const {\n precision = 4,\n min,\n max,\n groupingSeparator,\n rounding,\n zeroDisplay,\n } = options;\n\n const roundingMap = {\n up: BigNumber.ROUND_UP,\n down: BigNumber.ROUND_DOWN,\n ceil: BigNumber.ROUND_CEIL,\n floor: BigNumber.ROUND_FLOOR,\n };\n\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return zeroDisplay ? zeroDisplay : \"0\";\n\n const abs = bn.abs();\n\n if (min && abs.lt(min)) return `<${min}`;\n if (max && abs.gt(max)) return `>${max}`;\n\n if (groupingSeparator) {\n return stringifyNumberWithGroupingSeparator(\n abs,\n precision,\n rounding ? roundingMap[rounding] : undefined,\n );\n }\n\n const rounded = rounding\n ? abs.decimalPlaces(precision, roundingMap[rounding])\n : abs.decimalPlaces(precision);\n return rounded.toString();\n};\n\nconst stringifyAmount = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return options.zeroDisplay ? options.zeroDisplay : \"\";\n\n const { acronymMin = 1e4 } = options;\n const abs = bn.abs();\n if (abs.lt(acronymMin))\n return stringifyAmountWithClippingAndCapping(bn, options);\n\n if (abs.gte(1e15)) {\n return bn.toExponential(2);\n }\n if (abs.gte(1e12)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e12), { ...options, precision: 0 })}T`;\n }\n if (abs.gte(1e9)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e9), { ...options, precision: 0 })}B`;\n }\n if (abs.gte(1e6)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e6), { ...options, precision: 1 })}M`;\n }\n if (abs.gte(1e4)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e3), { ...options, precision: 1 })}K`;\n }\n return stringifyAmountWithClippingAndCapping(bn, options);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToSnakeCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n return index;\n }\n return -1;\n};\n\nexport function isHex(value: string): boolean {\n const hexRegex = /^[a-f0-9]+$/iu;\n return hexRegex.test(value);\n}\n\nexport function isHexString(value: string): boolean {\n return typeof value === \"string\" && value.startsWith(\"0x\") && isHex(value);\n}\n","/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import {\n Chain,\n SOLANA_TOKEN_PROTOCOLS,\n TokenProtocol,\n} from \"@liberfi.io/types\";\n\nexport const parseTokenProtocolFamily = (\n chain: Chain,\n protocolFamily: string,\n): TokenProtocol | undefined => {\n switch (chain) {\n case Chain.SOLANA:\n return SOLANA_TOKEN_PROTOCOLS.find((p) =>\n new RegExp(p, \"i\").test(protocolFamily),\n );\n default:\n return undefined;\n }\n};\n\nexport const formatTokenProtocolName = (protocol: TokenProtocol) => {\n return protocol\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n","import { Chain } from \"@liberfi.io/types\";\n\nconst TX_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/tx/${txHash}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/tx/${txHash}\",\n [Chain.POLYGON]: \"https://polygonscan.com/tx/${txHash}\",\n [Chain.BINANCE]: \"https://bscscan.com/tx/${txHash}\",\n [Chain.BINANCE_TESTNET]: \"https://testnet.bscscan.com/tx/${txHash}\",\n [Chain.AVALANCHE]: \"https://snowtrace.io/tx/${txHash}\",\n [Chain.BASE]: \"https://basescan.org/tx/${txHash}\",\n [Chain.BLAST]: \"https://blastracker.xyz/tx/${txHash}\",\n [Chain.ARBITRUM]: \"https://arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_NOVA]: \"https://nova.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_GOERLI]: \"https://goerli.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_SEPOLIA]: \"https://sepolia.arbiscan.io/tx/${txHash}\",\n};\n\nexport function txExplorerUrl(chainId: Chain, txHash: string) {\n return TX_EXPLORER_URLS[chainId]?.replace(\"${txHash}\", txHash);\n}\n\nconst ACCOUNT_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/account/${account}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/address/${account}\",\n [Chain.POLYGON]: \"https://polygonscan.com/address/${account}\",\n [Chain.BINANCE]: \"https://bscscan.com/address/${account}\",\n};\n\nexport const accountExplorerUrl = (chainId: Chain, account: string) => {\n return ACCOUNT_EXPLORER_URLS[chainId]?.replace(\"${account}\", account);\n};\n\nexport function searchImageUrl(image: string) {\n return `https://lens.google.com/uploadbyurl?url=${encodeURIComponent(image)}`;\n}\n\nexport function searchTwitterUrl(q: string) {\n return `https://x.com/search?q=${encodeURIComponent(q)}`;\n}\n\nexport function twitterUserUrl(username: string) {\n return `https://x.com/${username}`;\n}\n\nexport function twitterTweetUrl(id: string) {\n return `https://x.com/${id}`;\n}\n\nexport function twitterMediaUrl(id: string) {\n return `https://x.com/${id}`;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__LIBERFI_timestamp_offset;\n if (typeof timeOffset === \"number\") {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n};\n"],"mappings":"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","names":["index_exports","__export","SafeBigNumber","accountExplorerUrl","camelCaseToSnakeCase","canConvertToNumber","capitalizeString","chainIcon","chainIdBySlug","chainSlug","del","displayCount3","displayCount4","findLongestCommonSubString","formatAge","formatAgeInSeconds","formatAmount","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatCount","formatCount2","formatCount3","formatMultiplier","formatPercent","formatPrice","formatPriceUSD","formatReadableTime","formatSymbol","formatTimeAgo","formatTokenProtocolName","get","getGlobalObject","getTimestamp","hex2int","int2hex","isHex","isHexString","isSolana","isTestnet","isValidNumber","isValidTimeframe","millisecondsToHMS","mutate","parseChainId","parseTokenProtocolFamily","post","put","request","searchImageUrl","searchTwitterUrl","secondsSince","subtractDaysFromCurrentDate","timestampToString","twitterMediaUrl","twitterTweetUrl","twitterUserUrl","txExplorerUrl","version_default","windowGuard","__toCommonJS","version_default","import_types","hex2int","chainId","int2hex","parseChainId","isTestnet","isSolana","chainSlugs","chainIcon","slug","chainSlug","chainIdBySlug","foundKey","key","NOW","MINUTE","HOUR","DAY","YEAR","millisecondsToHMS","milliseconds","totalSeconds","hours","minutes","seconds","timestampToString","timestamp","date","year","month","day","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","maybeSecondsToMilliseconds","formatToMilliseconds","parsed","formatTimeAgo","diffSeconds","secondsSince","now","currentTime","targetTime","diffInMilliseconds","defaultTranslations","formatReadableTime","options","translations","years","formatAge","age","formatAgeInSeconds","import_types","request","url","options","__async","response","__spreadProps","__spreadValues","_createHeaders","errorMsg","e","headers","method","_headers","get","post","data","put","del","mutate","init","import_bignumber","SafeBigNumber","BigNumber","num","base","e","isValidNumber","floatNum","canConvertToNumber","isValidTimeframe","timeframe","formatAmount","options","bn","negative","abs","formatted","stringifyNumberWithGroupingSeparator","stringifyNumberWithAbbreviation","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","roundedAbs","stringifyAmount","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatPrice","isHighPrecise","stringifyNumberWithLeadingZeroSubscripts","stringifyNumberWithSignificantPrecision","formatPriceUSD","formatPercent","_a","_b","sign","stringifyPercent","precision","formatMultiplier","formatCount","formatCount2","formatCount3","displayCount4","displayCount3","subscriptDigits","rounding","parts","integerPart","decimalPart","digits","firstNonZeroIndex","precisionDigitsCount","matched","significantPrecision","stringifyAmountWithClippingAndCapping","min","max","groupingSeparator","zeroDisplay","roundingMap","acronymMin","__spreadProps","__spreadValues","capitalizeString","str","lowercaseStr","camelCaseToSnakeCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","isHex","value","isHexString","formatSymbol","symbol","formatString","arr","type","base","quote","import_types","parseTokenProtocolFamily","chain","protocolFamily","p","formatTokenProtocolName","protocol","word","import_types","TX_EXPLORER_URLS","txExplorerUrl","chainId","txHash","_a","ACCOUNT_EXPLORER_URLS","accountExplorerUrl","account","searchImageUrl","image","searchTwitterUrl","q","twitterUserUrl","username","twitterTweetUrl","id","twitterMediaUrl","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","import_lodash_es"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var U=Object.defineProperty,B=Object.defineProperties;var M=Object.getOwnPropertyDescriptors;var I=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var D=(t,r,n)=>r in t?U(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,p=(t,r)=>{for(var n in r||(r={}))L.call(r,n)&&D(t,n,r[n]);if(I)for(var n of I(r))H.call(r,n)&&D(t,n,r[n]);return t},S=(t,r)=>B(t,M(r));typeof window!="undefined"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/utils"]="0.1.0");var V="0.1.0";import{Chain as e}from"@liberfi.io/types";var W=t=>parseInt(t),rt=t=>`0x${t.toString(16)}`,nt=t=>typeof t=="string"&&t.startsWith("0x")&&/^[a-f0-9]+$/iu.test(t.slice(2))?W(t):t,ot=t=>[e.ARBITRUM_TESTNET_GOERLI,e.ARBITRUM_TESTNET_SEPOLIA,e.SOLANA_DEVNET,e.SOLANA_TESTNET,e.ABSTRACT_TESTNET,e.BINANCE_TESTNET].includes(`${t}`),st=t=>[e.SOLANA,e.SOLANA_DEVNET,e.SOLANA_TESTNET].includes(`${t}`),T={[e.ETHEREUM]:"ethereum",[e.UBIQ]:"ubiq",[e.OPTIMISM]:"optimism",[e.FLARE]:"flare",[e.SONGBIRD]:"songbird",[e.ELASTOS]:"elastos",[e.KARDIA]:"kardia",[e.CRONOS]:"cronos",[e.RSK]:"rsk",[e.TELOS]:"telos",[e.LUKSO]:"lukso",[e.CRAB]:"crab",[e.DARWINIA]:"darwinia",[e.XDC]:"xdc",[e.CSC]:"csc",[e.ZYX]:"zyx",[e.BINANCE]:"binance",[e.SYSCOIN]:"syscoin",[e.GOCHAIN]:"gochain",[e.ETHEREUMCLASSIC]:"ethereumclassic",[e.OKEXCHAIN]:"okexchain",[e.HOO]:"hoo",[e.METER]:"meter",[e.NOVA_NETWORK]:"nova network",[e.TOMOCHAIN]:"tomochain",[e.BITKUB]:"bitkub",[e.XDAI]:"xdai",[e.SOLANA]:"solana",[e.VELAS]:"velas",[e.THUNDERCORE]:"thundercore",[e.ENULS]:"enuls",[e.FUSE]:"fuse",[e.HECO]:"heco",[e.UNICHAIN]:"unichain",[e.POLYGON]:"polygon",[e.SONIC]:"sonic",[e.SHIMMER_EVM]:"shimmer_evm",[e.RBN]:"rbn",[e.OMNI]:"omni",[e.MANTA]:"manta",[e.HSK]:"hsk",[e.WATER]:"water",[e.XLAYER]:"xlayer",[e.XDAIARB]:"xdaiarb",[e.OP_BNB]:"op_bnb",[e.VINUCHAIN]:"vinuchain",[e.ENERGYWEB]:"energyweb",[e.OASYS]:"oasys",[e.FANTOM]:"fantom",[e.FRAXTAL]:"fraxtal",[e.HPB]:"hpb",[e.BOBA]:"boba",[e.OMAX]:"omax",[e.FILECOIN]:"filecoin",[e.KUCOIN]:"kucoin",[e.ZKSYNC_ERA]:"zksync era",[e.SHIDEN]:"shiden",[e.THETA]:"theta",[e.PULSE]:"pulse",[e.CRONOS_ZKEVM]:"cronos zkevm",[e.SX]:"sx",[e.AREON]:"areon",[e.WC]:"wc",[e.CANDLE]:"candle",[e.ROLLUX]:"rollux",[e.ASTAR]:"astar",[e.REDSTONE]:"redstone",[e.MATCHAIN]:"matchain",[e.CALLISTO]:"callisto",[e.TARA]:"tara",[e.WANCHAIN]:"wanchain",[e.LYRA_CHAIN]:"lyra chain",[e.BIFROST]:"bifrost",[e.CONFLUX]:"conflux",[e.METIS]:"metis",[e.DYMENSION]:"dymension",[e.POLYGON_ZKEVM]:"polygon zkevm",[e.CORE]:"core",[e.LISK]:"lisk",[e.ULTRON]:"ultron",[e.STEP]:"step",[e.MOONBEAM]:"moonbeam",[e.MOONRIVER]:"moonriver",[e.SEI]:"sei",[e.LIVING_ASSETS_MAINNET]:"living assets mainnet",[e.STY]:"sty",[e.TENET]:"tenet",[e.GRAVITY]:"gravity",[e.REYA_NETWORK]:"reya network",[e.SONEIUM]:"soneium",[e.SWELLCHAIN]:"swellchain",[e.ONUS]:"onus",[e.HUBBLENET]:"hubblenet",[e.SANKO]:"sanko",[e.DOGECHAIN]:"dogechain",[e.MILKOMEDA]:"milkomeda",[e.MILKOMEDA_A1]:"milkomeda_a1",[e.KAVA]:"kava",[e.SOMA]:"soma",[e.KARAK]:"karak",[e.ABSTRACT]:"abstract",[e.MORPH]:"morph",[e.CROSSFI]:"crossfi",[e.BEAM]:"beam",[e.IOTEX]:"iotex",[e.MANTLE]:"mantle",[e.XLC]:"xlc",[e.NAHMII]:"nahmii",[e.BOUNCEBIT]:"bouncebit",[e.TOMBCHAIN]:"tombchain",[e.ZETACHAIN]:"zetachain",[e.PLANQ]:"planq",[e.BITROCK]:"bitrock",[e.XSAT]:"xsat",[e.CYETH]:"cyeth",[e.CANTO]:"canto",[e.KLAYTN]:"klaytn",[e.THAT]:"that",[e.BASE]:"base",[e.HELA]:"hela",[e.IOTAEVM]:"iotaevm",[e.JBC]:"jbc",[e.EVMOS]:"evmos",[e.CARBON]:"carbon",[e.SMARTBCH]:"smartbch",[e.ARTELA]:"artela",[e.IMMUTABLE_ZKEVM]:"immutable zkevm",[e.LOOP]:"loop",[e.GENESYS]:"genesys",[e.EOS_EVM]:"eos evm",[e.MAP_PROTOCOL]:"map protocol",[e.SAPPHIRE]:"sapphire",[e.BITGERT]:"bitgert",[e.FUSION]:"fusion",[e.ZILLIQA]:"zilliqa",[e.APECHAIN]:"apechain",[e.EDU_CHAIN]:"edu chain",[e.ARBITRUM]:"arbitrum",[e.ARBITRUM_NOVA]:"arbitrum nova",[e.CELO]:"celo",[e.OASIS]:"oasis",[e.ASSETCHAIN]:"assetchain",[e.ETHERLINK]:"etherlink",[e.AVALANCHE]:"avalanche",[e.REI]:"rei",[e.ZIRCUIT]:"zircuit",[e.SOPHON]:"sophon",[e.ETN]:"etn",[e.SUPERPOSITION]:"superposition",[e.REICHAIN]:"reichain",[e.BOBA_BNB]:"boba_bnb",[e.INK]:"ink",[e.LINEA]:"linea",[e.BOB]:"bob",[e.GODWOKEN]:"godwoken",[e.BERACHAIN]:"berachain",[e.BLAST]:"blast",[e.CHILIZ]:"chiliz",[e.STRATIS]:"stratis",[e.REAL]:"real",[e.ODYSSEY]:"odyssey",[e.TAIKO]:"taiko",[e.BITLAYER]:"bitlayer",[e.HYDRATION]:"hydration",[e.PAREX]:"parex",[e.POLIS]:"polis",[e.KEKCHAIN]:"kekchain",[e.SCROLL]:"scroll",[e.ZERO_NETWORK]:"zero_network",[e.ZKLINK_NOVA]:"zklink nova",[e.VISION]:"vision",[e.SAAKURU]:"saakuru",[e.ZORA]:"zora",[e.CORN]:"corn",[e.NEON]:"neon",[e.LUMIA]:"lumia",[e.AURORA]:"aurora",[e.HARMONY]:"harmony",[e.PALM]:"palm",[e.ZENIQ]:"zeniq",[e.CURIO]:"curio",[e.MODE]:"mode"};function it(t){let r=T[t];return r?`https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(r)}.jpg`:void 0}function at(t){return T[t]}function ct(t){let r=Object.keys(T).find(n=>T[n]===t);return r||void 0}var E=Date.now(),R=60,$=60*R,x=24*$,y=365*x,lt=t=>{let r=Math.floor(t/1e3),n=Math.floor(r/3600),s=Math.floor(r%3600/60),o=r%60;return[n,s,o]},mt=t=>{let r=t instanceof Date?t:new Date(t),n=r.getFullYear(),s=String(r.getMonth()+1).padStart(2,"0"),o=String(r.getDate()).padStart(2,"0"),i=String(r.getHours()).padStart(2,"0"),a=String(r.getMinutes()).padStart(2,"0"),g=String(r.getSeconds()).padStart(2,"0");return`${n}-${s}-${o} ${i}:${a}:${g}`};function ft(t,r){let n=r||new Date,s=new Date(n);return s.setDate(n.getDate()-t),s}function C(t){return!t||Number.isNaN(t)||t<=0?E:t<1e10?t*1e3:t}function k(t){if(!t)return E;if(typeof t=="number")return C(t);if(typeof t=="string"){let r=Date.parse(t);return C(r)}return t instanceof Date?t.getTime():E}function gt(t){let r=Math.floor((Date.now()-k(t))/1e3);return r>=y?`${Math.floor(r/y)}Y`:r>=x?`${Math.floor(r/x)}D`:r>=$?`${Math.floor(r/$)}h`:r>=R?`${Math.floor(r/R)}m`:`${r}s`}function v(t,r){let n=r?r instanceof Date?r.getTime():r:Date.now(),s=t instanceof Date?t.getTime():t,o=n-s;return Math.floor(o/1e3)}var d={justNow:"just now",secondsAgo:"{n}s",minutesAgo:"{n}m",hoursAgo:"{n}h",daysAgo:"{n}d",yearsAgo:"{n}y"};function Nt(t,r={}){let n=v(t),s={justNow:r.justNow||d.justNow,secondsAgo:r.secondsAgo||d.secondsAgo,minutesAgo:r.minutesAgo||d.minutesAgo,hoursAgo:r.hoursAgo||d.hoursAgo,daysAgo:r.daysAgo||d.daysAgo,yearsAgo:r.yearsAgo||d.yearsAgo},o=60,i=60*o,a=24*i,g=365*a;if(n<10)return s.justNow;if(n<o)return s.secondsAgo.replace("{n}",n.toString());if(n<i){let b=Math.floor(n/o);return s.minutesAgo.replace("{n}",b.toString())}if(n<a){let b=Math.floor(n/i);return s.hoursAgo.replace("{n}",b.toString())}if(n<g){let b=Math.floor(n/a);return s.daysAgo.replace("{n}",b.toString())}let A=Math.floor(n/g);return s.yearsAgo.replace("{n}",A.toString())}function At(t,r={}){let n=Math.floor(t/1e3);return F(n,r)}function F(t,r={}){let n={justNow:r.justNow||d.justNow,secondsAgo:r.secondsAgo||d.secondsAgo,minutesAgo:r.minutesAgo||d.minutesAgo,hoursAgo:r.hoursAgo||d.hoursAgo,daysAgo:r.daysAgo||d.daysAgo,yearsAgo:r.yearsAgo||d.yearsAgo},s=60,o=60*s,i=24*o,a=365*i;if(t<10)return n.justNow;if(t<s)return n.secondsAgo.replace("{n}",t.toString());if(t<o){let A=Math.floor(t/s);return n.minutesAgo.replace("{n}",A.toString())}if(t<i){let A=Math.floor(t/o);return n.hoursAgo.replace("{n}",A.toString())}if(t<a){let A=Math.floor(t/i);return n.daysAgo.replace("{n}",A.toString())}let g=Math.floor(t/a);return n.yearsAgo.replace("{n}",g.toString())}import c from"bignumber.js";var l=class extends c{constructor(r,n){try{super(r!=null?r:0,n)}catch(s){console.error("SafeBigNumber constructor error",s),super(0,n)}}},m=t=>{if(typeof t=="number"&&!isNaN(t)||t instanceof l||t instanceof c)return!0;if(typeof t!="string")return!1;let r=Number.parseFloat(t);return!isNaN(r)},Ot=t=>(typeof t=="number"||!!t)&&m(typeof t=="string"?Number(t):t),ht=(t="")=>/^(\d+\.?\d*|\.\d+)([hm]?)$$/.test(t),pt=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(2,c.ROUND_DOWN).toString():o.lt(1e5)?u(o,2):N(o);return Number(i)===0?`${i}`:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:`${i}`},St=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):N(o);return Number(i)===0?`${i}`:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:`${i}`},Tt=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):N(o,0);return Number(i)===0?`${i}`:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:`${i}`},Et=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e4)?`$${u(o,2)}`:`$${N(o)}`;return i==="$0"?i:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:i},Rt=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(1,c.ROUND_DOWN)}`:o.lt(1e15)?`$${N(i)}`:`$${Z(o,{acronymMin:1e5,groupingSeparator:!0})}`;return a==="$0"?a:s?`-${a}`:r!=null&&r.showPlusGtThanZero?`+${a}`:a},$t=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(0,c.ROUND_DOWN)}`:`$${N(i,0)}`;return a==="$0"?a:s?`-${a}`:r!=null&&r.showPlusGtThanZero?`+${a}`:a},xt=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,2)}`:`$${N(o)}`;return i==="$0"?i:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:i},It=(t="",r={showPlusGtThanZero:!1})=>{if(!m(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(100)?`$${o.decimalPlaces(0,c.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,0)}`:`$${N(o,0)}`;return i==="$0"?i:s?`-${i}`:r!=null&&r.showPlusGtThanZero?`+${i}`:i},Dt=(t="",r={isHighPrecise:!0})=>{if(!m(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=r;return`${s.lt(1e-4)?_(s,o?4:2):s.lt(1)?o?u(s,4):P(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):N(s)}`},yt=(t="",r={isHighPrecise:!0})=>{if(!m(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=r;return`$${s.lt(1e-4)?_(s,o?4:2):s.lt(1)?o?u(s,4):P(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):N(s)}`},Ct=(t="",r={})=>{var a,g;if(!m(t))return"-- %";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":r!=null&&r.showPlusGtThanZero?"+":"";return o.lt(1e-4)?"0%":o.lt(100)?`${i}${w(o,(a=r==null?void 0:r.precision)!=null?a:2)}`:o.lt(1e3)?`${i}${w(o,(g=r==null?void 0:r.precision)!=null?g:1)}`:`${i}> 99,999%`},w=(t,r)=>`${t.times(100).decimalPlaces(r,c.ROUND_HALF_UP).toString()}%`,wt=(t="",r={showPlusGtThanZero:!0})=>{if(!m(t))return"0%";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":r!=null&&r.showPlusGtThanZero?"+":"";return o.lt(.01)?"0%":o.lt(10)?`${i}${u(o,2)}X`:o.lt(100)?`${i}${u(o,1)}X`:o.lt(1e5)?`${i}${u(o,0)}X`:`${i}>99,999%`},_t=(t="")=>{if(!m(t))return"--";let r=new l(t);return r.lt(1e5)?u(r,0):N(r)},Pt=(t="")=>{if(!m(t))return"--";let r=new l(t);return r.lt(1e3)?u(r,0):N(r.div(1e3).integerValue(c.ROUND_DOWN).times(1e3),0)},Ut=(t="")=>{if(!m(t))return"--";let r=new l(t);return u(r,0)},Bt=(t="")=>m(t)?u(t,0):"--",Mt=(t="")=>{if(!m(t))return"--";let r=new l(t);return r.lt(1e3)?u(r,0):N(r.div(100).integerValue(c.ROUND_DOWN).times(100))},G=["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089","\u2081\u2080","\u2081\u2081","\u2081\u2082","\u2081\u2083","\u2081\u2084","\u2081\u2085","\u2081\u2086","\u2081\u2087","\u2081\u2088","\u2081\u2089","\u2082\u2080","\u2082\u2081","\u2082\u2082","\u2082\u2083","\u2082\u2084","\u2082\u2085","\u2082\u2086","\u2082\u2087","\u2082\u2088","\u2082\u2089","\u2083\u2080","\u2083\u2081","\u2083\u2082","\u2083\u2083","\u2083\u2084","\u2083\u2085","\u2083\u2086","\u2083\u2087","\u2083\u2088","\u2083\u2089","\u2084\u2080"],u=(t,r=0,n=c.ROUND_DOWN)=>{let o=new l(t).decimalPlaces(r,n).toString().split(".");return o[0]=o[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),o.join(".")},N=(t,r=1)=>{let n=new l(t);return n.lt(1e3)?n.toNumber():n.lt(1e6)?`${u(n.div(1e3),r)}K`:n.lt(1e9)?`${u(n.div(1e6),r)}M`:n.lt(1e12)?`${u(n.dividedBy(1e9),r)}B`:`${u(n.dividedBy(1e12),r)}T`},_=(t,r=5)=>{let n=new l(t);if(n.eq(0))return"0";let[s,o]=n.toFixed().split("."),i=o.split(""),a=i.findIndex(A=>A!=="0"),g=Math.min(i.length-a,r);return`${u(s)}.0`.concat(G[a]).concat(i.slice(a,a+g).join("").replace(/\.?0+$/,""))},P=(t,r)=>{let n=t.toString().match(/\.0*/),s=(n?n[0].length-1:0)+r;return u(t,s)},O=(t,r={})=>{let{precision:n=4,min:s,max:o,groupingSeparator:i,rounding:a,zeroDisplay:g}=r,A={up:c.ROUND_UP,down:c.ROUND_DOWN,ceil:c.ROUND_CEIL,floor:c.ROUND_FLOOR},b=new l(t);if(b.eq(0))return g||"0";let h=b.abs();return s&&h.lt(s)?`<${s}`:o&&h.gt(o)?`>${o}`:i?u(h,n,a?A[a]:void 0):(a?h.decimalPlaces(n,A[a]):h.decimalPlaces(n)).toString()},Z=(t,r={})=>{let n=new l(t);if(n.eq(0))return r.zeroDisplay?r.zeroDisplay:"";let{acronymMin:s=1e4}=r,o=n.abs();return o.lt(s)?O(n,r):o.gte(1e15)?n.toExponential(2):o.gte(1e12)?`${O(n.div(1e12),S(p({},r),{precision:0}))}T`:o.gte(1e9)?`${O(n.div(1e9),S(p({},r),{precision:0}))}B`:o.gte(1e6)?`${O(n.div(1e6),S(p({},r),{precision:1}))}M`:o.gte(1e4)?`${O(n.div(1e3),S(p({},r),{precision:1}))}K`:O(n,r)};function Vt(t){let r=t.toLowerCase();return r.charAt(0).toUpperCase()+r.slice(1)}function Wt(t){return t.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var kt=(t,r)=>{for(let n=0;n<t.length;n++){let s=t.at(n),o=r.at(n);if(s!==o)return n}return-1};function K(t){return/^[a-f0-9]+$/iu.test(t)}function vt(t){return typeof t=="string"&&t.startsWith("0x")&&K(t)}function Gt(t,r="base-type"){if(!t)return"";let n=t.split("_"),s=n[0],o=n[1],i=n[2];return r.replace("type",s).replace("base",o).replace("quote",i)}import{Chain as Y,SOLANA_TOKEN_PROTOCOLS as z}from"@liberfi.io/types";var zt=(t,r)=>{switch(t){case Y.SOLANA:return z.find(n=>new RegExp(n,"i").test(r));default:return}},Xt=t=>t.split("-").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ");import{Chain as f}from"@liberfi.io/types";var X={[f.SOLANA]:"https://solscan.io/tx/${txHash}",[f.ETHEREUM]:"https://etherscan.io/tx/${txHash}",[f.POLYGON]:"https://polygonscan.com/tx/${txHash}",[f.BINANCE]:"https://bscscan.com/tx/${txHash}",[f.BINANCE_TESTNET]:"https://testnet.bscscan.com/tx/${txHash}",[f.AVALANCHE]:"https://snowtrace.io/tx/${txHash}",[f.BASE]:"https://basescan.org/tx/${txHash}",[f.BLAST]:"https://blastracker.xyz/tx/${txHash}",[f.ARBITRUM]:"https://arbiscan.io/tx/${txHash}",[f.ARBITRUM_NOVA]:"https://nova.arbiscan.io/tx/${txHash}",[f.ARBITRUM_TESTNET_GOERLI]:"https://goerli.arbiscan.io/tx/${txHash}",[f.ARBITRUM_TESTNET_SEPOLIA]:"https://sepolia.arbiscan.io/tx/${txHash}"};function Qt(t,r){var n;return(n=X[t])==null?void 0:n.replace("${txHash}",r)}var j={[f.SOLANA]:"https://solscan.io/account/${account}",[f.ETHEREUM]:"https://etherscan.io/address/${account}",[f.POLYGON]:"https://polygonscan.com/address/${account}",[f.BINANCE]:"https://bscscan.com/address/${account}"},Jt=(t,r)=>{var n;return(n=j[t])==null?void 0:n.replace("${account}",r)};function te(t){return`https://lens.google.com/uploadbyurl?url=${encodeURIComponent(t)}`}function ee(t){return`https://x.com/search?q=${encodeURIComponent(t)}`}function re(t){return`https://x.com/${t}`}function ne(t){return`https://x.com/${t}`}function oe(t){return`https://x.com/${t}`}var ie=t=>{typeof window!="undefined"&&t()},q=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},ae=()=>{var t;if(typeof window!="undefined"){let r=(t=q())==null?void 0:t.__LIBERFI_timestamp_offset;if(typeof r=="number")return Date.now()+(r||0)}return Date.now()};export{l as SafeBigNumber,Jt as accountExplorerUrl,Wt as camelCaseToSnakeCase,Ot as canConvertToNumber,Vt as capitalizeString,it as chainIcon,ct as chainIdBySlug,at as chainSlug,Mt as displayCount3,Bt as displayCount4,kt as findLongestCommonSubString,At as formatAge,F as formatAgeInSeconds,pt as formatAmount,St as formatAmount2,Tt as formatAmount3,Et as formatAmountUSD,Rt as formatAmountUSD2,$t as formatAmountUSD3,xt as formatAmountUSD4,It as formatAmountUSD5,_t as formatCount,Pt as formatCount2,Ut as formatCount3,wt as formatMultiplier,Ct as formatPercent,Dt as formatPrice,yt as formatPriceUSD,Nt as formatReadableTime,Gt as formatSymbol,gt as formatTimeAgo,Xt as formatTokenProtocolName,q as getGlobalObject,ae as getTimestamp,W as hex2int,rt as int2hex,K as isHex,vt as isHexString,st as isSolana,ot as isTestnet,m as isValidNumber,ht as isValidTimeframe,lt as millisecondsToHMS,nt as parseChainId,zt as parseTokenProtocolFamily,te as searchImageUrl,ee as searchTwitterUrl,v as secondsSince,ft as subtractDaysFromCurrentDate,mt as timestampToString,oe as twitterMediaUrl,ne as twitterTweetUrl,re as twitterUserUrl,Qt as txExplorerUrl,V as version,ie as windowGuard};
|
|
1
|
+
var B=Object.defineProperty,L=Object.defineProperties;var H=Object.getOwnPropertyDescriptors;var w=Object.getOwnPropertySymbols;var V=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var D=(t,e,n)=>e in t?B(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,O=(t,e)=>{for(var n in e||(e={}))V.call(e,n)&&D(t,n,e[n]);if(w)for(var n of w(e))W.call(e,n)&&D(t,n,e[n]);return t},b=(t,e)=>L(t,H(e));var p=(t,e,n)=>new Promise((s,o)=>{var i=m=>{try{f(n.next(m))}catch(d){o(d)}},a=m=>{try{f(n.throw(m))}catch(d){o(d)}},f=m=>m.done?s(m.value):Promise.resolve(m.value).then(i,a);f((n=n.apply(t,e)).next())});typeof window!="undefined"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/utils"]="0.1.4");var k="0.1.4";import{Chain as r}from"@liberfi.io/types";var v=t=>parseInt(t),it=t=>`0x${t.toString(16)}`,at=t=>typeof t=="string"&&t.startsWith("0x")&&/^[a-f0-9]+$/iu.test(t.slice(2))?v(t):t,ct=t=>[r.ARBITRUM_TESTNET_GOERLI,r.ARBITRUM_TESTNET_SEPOLIA,r.SOLANA_DEVNET,r.SOLANA_TESTNET,r.ABSTRACT_TESTNET,r.BINANCE_TESTNET].includes(`${t}`),ut=t=>[r.SOLANA,r.SOLANA_DEVNET,r.SOLANA_TESTNET].includes(`${t}`),E={[r.ETHEREUM]:"ethereum",[r.UBIQ]:"ubiq",[r.OPTIMISM]:"optimism",[r.FLARE]:"flare",[r.SONGBIRD]:"songbird",[r.ELASTOS]:"elastos",[r.KARDIA]:"kardia",[r.CRONOS]:"cronos",[r.RSK]:"rsk",[r.TELOS]:"telos",[r.LUKSO]:"lukso",[r.CRAB]:"crab",[r.DARWINIA]:"darwinia",[r.XDC]:"xdc",[r.CSC]:"csc",[r.ZYX]:"zyx",[r.BINANCE]:"binance",[r.SYSCOIN]:"syscoin",[r.GOCHAIN]:"gochain",[r.ETHEREUMCLASSIC]:"ethereumclassic",[r.OKEXCHAIN]:"okexchain",[r.HOO]:"hoo",[r.METER]:"meter",[r.NOVA_NETWORK]:"nova network",[r.TOMOCHAIN]:"tomochain",[r.BITKUB]:"bitkub",[r.XDAI]:"xdai",[r.SOLANA]:"solana",[r.VELAS]:"velas",[r.THUNDERCORE]:"thundercore",[r.ENULS]:"enuls",[r.FUSE]:"fuse",[r.HECO]:"heco",[r.UNICHAIN]:"unichain",[r.POLYGON]:"polygon",[r.SONIC]:"sonic",[r.SHIMMER_EVM]:"shimmer_evm",[r.RBN]:"rbn",[r.OMNI]:"omni",[r.MANTA]:"manta",[r.HSK]:"hsk",[r.WATER]:"water",[r.XLAYER]:"xlayer",[r.XDAIARB]:"xdaiarb",[r.OP_BNB]:"op_bnb",[r.VINUCHAIN]:"vinuchain",[r.ENERGYWEB]:"energyweb",[r.OASYS]:"oasys",[r.FANTOM]:"fantom",[r.FRAXTAL]:"fraxtal",[r.HPB]:"hpb",[r.BOBA]:"boba",[r.OMAX]:"omax",[r.FILECOIN]:"filecoin",[r.KUCOIN]:"kucoin",[r.ZKSYNC_ERA]:"zksync era",[r.SHIDEN]:"shiden",[r.THETA]:"theta",[r.PULSE]:"pulse",[r.CRONOS_ZKEVM]:"cronos zkevm",[r.SX]:"sx",[r.AREON]:"areon",[r.WC]:"wc",[r.CANDLE]:"candle",[r.ROLLUX]:"rollux",[r.ASTAR]:"astar",[r.REDSTONE]:"redstone",[r.MATCHAIN]:"matchain",[r.CALLISTO]:"callisto",[r.TARA]:"tara",[r.WANCHAIN]:"wanchain",[r.LYRA_CHAIN]:"lyra chain",[r.BIFROST]:"bifrost",[r.CONFLUX]:"conflux",[r.METIS]:"metis",[r.DYMENSION]:"dymension",[r.POLYGON_ZKEVM]:"polygon zkevm",[r.CORE]:"core",[r.LISK]:"lisk",[r.ULTRON]:"ultron",[r.STEP]:"step",[r.MOONBEAM]:"moonbeam",[r.MOONRIVER]:"moonriver",[r.SEI]:"sei",[r.LIVING_ASSETS_MAINNET]:"living assets mainnet",[r.STY]:"sty",[r.TENET]:"tenet",[r.GRAVITY]:"gravity",[r.REYA_NETWORK]:"reya network",[r.SONEIUM]:"soneium",[r.SWELLCHAIN]:"swellchain",[r.ONUS]:"onus",[r.HUBBLENET]:"hubblenet",[r.SANKO]:"sanko",[r.DOGECHAIN]:"dogechain",[r.MILKOMEDA]:"milkomeda",[r.MILKOMEDA_A1]:"milkomeda_a1",[r.KAVA]:"kava",[r.SOMA]:"soma",[r.KARAK]:"karak",[r.ABSTRACT]:"abstract",[r.MORPH]:"morph",[r.CROSSFI]:"crossfi",[r.BEAM]:"beam",[r.IOTEX]:"iotex",[r.MANTLE]:"mantle",[r.XLC]:"xlc",[r.NAHMII]:"nahmii",[r.BOUNCEBIT]:"bouncebit",[r.TOMBCHAIN]:"tombchain",[r.ZETACHAIN]:"zetachain",[r.PLANQ]:"planq",[r.BITROCK]:"bitrock",[r.XSAT]:"xsat",[r.CYETH]:"cyeth",[r.CANTO]:"canto",[r.KLAYTN]:"klaytn",[r.THAT]:"that",[r.BASE]:"base",[r.HELA]:"hela",[r.IOTAEVM]:"iotaevm",[r.JBC]:"jbc",[r.EVMOS]:"evmos",[r.CARBON]:"carbon",[r.SMARTBCH]:"smartbch",[r.ARTELA]:"artela",[r.IMMUTABLE_ZKEVM]:"immutable zkevm",[r.LOOP]:"loop",[r.GENESYS]:"genesys",[r.EOS_EVM]:"eos evm",[r.MAP_PROTOCOL]:"map protocol",[r.SAPPHIRE]:"sapphire",[r.BITGERT]:"bitgert",[r.FUSION]:"fusion",[r.ZILLIQA]:"zilliqa",[r.APECHAIN]:"apechain",[r.EDU_CHAIN]:"edu chain",[r.ARBITRUM]:"arbitrum",[r.ARBITRUM_NOVA]:"arbitrum nova",[r.CELO]:"celo",[r.OASIS]:"oasis",[r.ASSETCHAIN]:"assetchain",[r.ETHERLINK]:"etherlink",[r.AVALANCHE]:"avalanche",[r.REI]:"rei",[r.ZIRCUIT]:"zircuit",[r.SOPHON]:"sophon",[r.ETN]:"etn",[r.SUPERPOSITION]:"superposition",[r.REICHAIN]:"reichain",[r.BOBA_BNB]:"boba_bnb",[r.INK]:"ink",[r.LINEA]:"linea",[r.BOB]:"bob",[r.GODWOKEN]:"godwoken",[r.BERACHAIN]:"berachain",[r.BLAST]:"blast",[r.CHILIZ]:"chiliz",[r.STRATIS]:"stratis",[r.REAL]:"real",[r.ODYSSEY]:"odyssey",[r.TAIKO]:"taiko",[r.BITLAYER]:"bitlayer",[r.HYDRATION]:"hydration",[r.PAREX]:"parex",[r.POLIS]:"polis",[r.KEKCHAIN]:"kekchain",[r.SCROLL]:"scroll",[r.ZERO_NETWORK]:"zero_network",[r.ZKLINK_NOVA]:"zklink nova",[r.VISION]:"vision",[r.SAAKURU]:"saakuru",[r.ZORA]:"zora",[r.CORN]:"corn",[r.NEON]:"neon",[r.LUMIA]:"lumia",[r.AURORA]:"aurora",[r.HARMONY]:"harmony",[r.PALM]:"palm",[r.ZENIQ]:"zeniq",[r.CURIO]:"curio",[r.MODE]:"mode"};function lt(t){let e=E[t];return e?`https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(e)}.jpg`:void 0}function mt(t){return E[t]}function ft(t){let e=Object.keys(E).find(n=>E[n]===t);return e||void 0}var x=Date.now(),$=60,I=60*$,y=24*I,P=365*y,Nt=t=>{let e=Math.floor(t/1e3),n=Math.floor(e/3600),s=Math.floor(e%3600/60),o=e%60;return[n,s,o]},At=t=>{let e=t instanceof Date?t:new Date(t),n=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),a=String(e.getMinutes()).padStart(2,"0"),f=String(e.getSeconds()).padStart(2,"0");return`${n}-${s}-${o} ${i}:${a}:${f}`};function dt(t,e){let n=e||new Date,s=new Date(n);return s.setDate(n.getDate()-t),s}function C(t){return!t||Number.isNaN(t)||t<=0?x:t<1e10?t*1e3:t}function F(t){if(!t)return x;if(typeof t=="number")return C(t);if(typeof t=="string"){let e=Date.parse(t);return C(e)}return t instanceof Date?t.getTime():x}function ht(t){let e=Math.floor((Date.now()-F(t))/1e3);return e>=P?`${Math.floor(e/P)}Y`:e>=y?`${Math.floor(e/y)}D`:e>=I?`${Math.floor(e/I)}h`:e>=$?`${Math.floor(e/$)}m`:`${e}s`}function G(t,e){let n=e?e instanceof Date?e.getTime():e:Date.now(),s=t instanceof Date?t.getTime():t,o=n-s;return Math.floor(o/1e3)}var h={justNow:"just now",secondsAgo:"{n}s",minutesAgo:"{n}m",hoursAgo:"{n}h",daysAgo:"{n}d",yearsAgo:"{n}y"};function Ot(t,e={}){let n=G(t),s={justNow:e.justNow||h.justNow,secondsAgo:e.secondsAgo||h.secondsAgo,minutesAgo:e.minutesAgo||h.minutesAgo,hoursAgo:e.hoursAgo||h.hoursAgo,daysAgo:e.daysAgo||h.daysAgo,yearsAgo:e.yearsAgo||h.yearsAgo},o=60,i=60*o,a=24*i,f=365*a;if(n<10)return s.justNow;if(n<o)return s.secondsAgo.replace("{n}",n.toString());if(n<i){let d=Math.floor(n/o);return s.minutesAgo.replace("{n}",d.toString())}if(n<a){let d=Math.floor(n/i);return s.hoursAgo.replace("{n}",d.toString())}if(n<f){let d=Math.floor(n/a);return s.daysAgo.replace("{n}",d.toString())}let m=Math.floor(n/f);return s.yearsAgo.replace("{n}",m.toString())}function bt(t,e={}){let n=Math.floor(t/1e3);return Z(n,e)}function Z(t,e={}){let n={justNow:e.justNow||h.justNow,secondsAgo:e.secondsAgo||h.secondsAgo,minutesAgo:e.minutesAgo||h.minutesAgo,hoursAgo:e.hoursAgo||h.hoursAgo,daysAgo:e.daysAgo||h.daysAgo,yearsAgo:e.yearsAgo||h.yearsAgo},s=60,o=60*s,i=24*o,a=365*i;if(t<10)return n.justNow;if(t<s)return n.secondsAgo.replace("{n}",t.toString());if(t<o){let m=Math.floor(t/s);return n.minutesAgo.replace("{n}",m.toString())}if(t<i){let m=Math.floor(t/o);return n.hoursAgo.replace("{n}",m.toString())}if(t<a){let m=Math.floor(t/i);return n.daysAgo.replace("{n}",m.toString())}let f=Math.floor(t/a);return n.yearsAgo.replace("{n}",f.toString())}import{ApiError as K}from"@liberfi.io/types";function S(t,e){return p(this,null,function*(){if(!t.startsWith("http"))throw new Error("url must start with http(s)");let n=yield fetch(t,b(O({},e),{headers:Y(e.headers,e.method)}));if(n.ok)return yield n.json();try{let s=yield n.json();throw n.status===400?new K(s.message||s.code||n.statusText,s.code):new Error(s.message||s.code||n.statusText)}catch(s){throw s}})}function Y(t={},e){let n=new Headers(t);return n.has("Content-Type")||(e!=="DELETE"?n.append("Content-Type","application/json;charset=utf-8"):n.append("Content-Type","application/x-www-form-urlencoded")),n}function Tt(t,e){return p(this,null,function*(){return yield S(t,O({method:"GET"},e))})}function St(t,e,n){return p(this,null,function*(){return yield S(t,O({method:"POST",body:JSON.stringify(e)},n))})}function Et(t,e,n){return p(this,null,function*(){return yield S(t,O({method:"PUT",body:JSON.stringify(e)},n))})}function xt(t,e){return p(this,null,function*(){return yield S(t,O({method:"DELETE"},e))})}function $t(t,e){return p(this,null,function*(){return yield S(t,e)})}import c from"bignumber.js";var l=class extends c{constructor(e,n){try{super(e!=null?e:0,n)}catch(s){console.error("SafeBigNumber constructor error",s),super(0,n)}}},g=t=>{if(typeof t=="number"&&!isNaN(t)||t instanceof l||t instanceof c)return!0;if(typeof t!="string")return!1;let e=Number.parseFloat(t);return!isNaN(e)},Dt=t=>(typeof t=="number"||!!t)&&g(typeof t=="string"?Number(t):t),Pt=(t="")=>/^(\d+\.?\d*|\.\d+)([hm]?)$$/.test(t),Ct=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(2,c.ROUND_DOWN).toString():o.lt(1e5)?u(o,2):A(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},_t=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):A(o);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},Ut=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?o.decimalPlaces(5,c.ROUND_DOWN).toString():o.lt(1)?o.decimalPlaces(3,c.ROUND_DOWN).toString():o.lt(100)?o.decimalPlaces(1,c.ROUND_DOWN).toString():o.lt(1e3)?u(o,1):A(o,0);return Number(i)===0?`${i}`:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:`${i}`},Mt=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e4)?`$${u(o,2)}`:`$${A(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Bt=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(1,c.ROUND_DOWN)}`:o.lt(1e15)?`$${A(i)}`:`$${j(o,{acronymMin:1e5,groupingSeparator:!0})}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},Lt=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.div(100).integerValue(c.ROUND_DOWN).times(100),a=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${o.decimalPlaces(0,c.ROUND_DOWN)}`:`$${A(i,0)}`;return a==="$0"?a:s?`-${a}`:e!=null&&e.showPlusGtThanZero?`+${a}`:a},Ht=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(1)?`$${o.decimalPlaces(3,c.ROUND_DOWN)}`:o.lt(100)?`$${o.decimalPlaces(2,c.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,2)}`:`$${A(o)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Vt=(t="",e={showPlusGtThanZero:!1})=>{if(!g(t))return"--";let n=new l(t),s=n.lt(0),o=n.abs(),i=o.lt(1e-4)||o.lt(.001)?"$0":o.lt(100)?`$${o.decimalPlaces(0,c.ROUND_DOWN)}`:o.lt(1e3)?`$${u(o,0)}`:`$${A(o,0)}`;return i==="$0"?i:s?`-${i}`:e!=null&&e.showPlusGtThanZero?`+${i}`:i},Wt=(t="",e={isHighPrecise:!0})=>{if(!g(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`${s.lt(1e-4)?U(s,o?4:2):s.lt(1)?o?u(s,4):M(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):A(s)}`},kt=(t="",e={isHighPrecise:!0})=>{if(!g(t))return"--";let n=new l(t);if(n.lt(0))return"--";let s=n.abs(),{isHighPrecise:o}=e;return`$${s.lt(1e-4)?U(s,o?4:2):s.lt(1)?o?u(s,4):M(s,2):s.lt(100)||s.lt(1e4)?u(s,o?4:2):s.lt(1e5)?u(s,2):A(s)}`},vt=(t="",e={})=>{var a,f;if(!g(t))return"-- %";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(1e-4)?"0%":o.lt(100)?`${i}${_(o,(a=e==null?void 0:e.precision)!=null?a:2)}`:o.lt(1e3)?`${i}${_(o,(f=e==null?void 0:e.precision)!=null?f:1)}`:`${i}> 99,999%`},_=(t,e)=>`${t.times(100).decimalPlaces(e,c.ROUND_HALF_UP).toString()}%`,Ft=(t="",e={showPlusGtThanZero:!0})=>{if(!g(t))return"0%";let n=new l(t),s=n.lt(0),o=n.abs(),i=s?"-":e!=null&&e.showPlusGtThanZero?"+":"";return o.lt(.01)?"0%":o.lt(10)?`${i}${u(o,2)}X`:o.lt(100)?`${i}${u(o,1)}X`:o.lt(1e5)?`${i}${u(o,0)}X`:`${i}>99,999%`},Gt=(t="")=>{if(!g(t))return"--";let e=new l(t);return e.lt(1e5)?u(e,0):A(e)},Zt=(t="")=>{if(!g(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):A(e.div(1e3).integerValue(c.ROUND_DOWN).times(1e3),0)},Kt=(t="")=>{if(!g(t))return"--";let e=new l(t);return u(e,0)},Yt=(t="")=>g(t)?u(t,0):"--",zt=(t="")=>{if(!g(t))return"--";let e=new l(t);return e.lt(1e3)?u(e,0):A(e.div(100).integerValue(c.ROUND_DOWN).times(100))},z=["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089","\u2081\u2080","\u2081\u2081","\u2081\u2082","\u2081\u2083","\u2081\u2084","\u2081\u2085","\u2081\u2086","\u2081\u2087","\u2081\u2088","\u2081\u2089","\u2082\u2080","\u2082\u2081","\u2082\u2082","\u2082\u2083","\u2082\u2084","\u2082\u2085","\u2082\u2086","\u2082\u2087","\u2082\u2088","\u2082\u2089","\u2083\u2080","\u2083\u2081","\u2083\u2082","\u2083\u2083","\u2083\u2084","\u2083\u2085","\u2083\u2086","\u2083\u2087","\u2083\u2088","\u2083\u2089","\u2084\u2080"],u=(t,e=0,n=c.ROUND_DOWN)=>{let o=new l(t).decimalPlaces(e,n).toString().split(".");return o[0]=o[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),o.join(".")},A=(t,e=1)=>{let n=new l(t);return n.lt(1e3)?n.toNumber():n.lt(1e6)?`${u(n.div(1e3),e)}K`:n.lt(1e9)?`${u(n.div(1e6),e)}M`:n.lt(1e12)?`${u(n.dividedBy(1e9),e)}B`:`${u(n.dividedBy(1e12),e)}T`},U=(t,e=5)=>{let n=new l(t);if(n.eq(0))return"0";let[s,o]=n.toFixed().split("."),i=o.split(""),a=i.findIndex(m=>m!=="0"),f=Math.min(i.length-a,e);return`${u(s)}.0`.concat(z[a]).concat(i.slice(a,a+f).join("").replace(/\.?0+$/,""))},M=(t,e)=>{let n=t.toString().match(/\.0*/),s=(n?n[0].length-1:0)+e;return u(t,s)},R=(t,e={})=>{let{precision:n=4,min:s,max:o,groupingSeparator:i,rounding:a,zeroDisplay:f}=e,m={up:c.ROUND_UP,down:c.ROUND_DOWN,ceil:c.ROUND_CEIL,floor:c.ROUND_FLOOR},d=new l(t);if(d.eq(0))return f||"0";let T=d.abs();return s&&T.lt(s)?`<${s}`:o&&T.gt(o)?`>${o}`:i?u(T,n,a?m[a]:void 0):(a?T.decimalPlaces(n,m[a]):T.decimalPlaces(n)).toString()},j=(t,e={})=>{let n=new l(t);if(n.eq(0))return e.zeroDisplay?e.zeroDisplay:"";let{acronymMin:s=1e4}=e,o=n.abs();return o.lt(s)?R(n,e):o.gte(1e15)?n.toExponential(2):o.gte(1e12)?`${R(n.div(1e12),b(O({},e),{precision:0}))}T`:o.gte(1e9)?`${R(n.div(1e9),b(O({},e),{precision:0}))}B`:o.gte(1e6)?`${R(n.div(1e6),b(O({},e),{precision:1}))}M`:o.gte(1e4)?`${R(n.div(1e3),b(O({},e),{precision:1}))}K`:R(n,e)};function qt(t){let e=t.toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)}function Qt(t){return t.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}var Jt=(t,e)=>{for(let n=0;n<t.length;n++){let s=t.at(n),o=e.at(n);if(s!==o)return n}return-1};function X(t){return/^[a-f0-9]+$/iu.test(t)}function te(t){return typeof t=="string"&&t.startsWith("0x")&&X(t)}function re(t,e="base-type"){if(!t)return"";let n=t.split("_"),s=n[0],o=n[1],i=n[2];return e.replace("type",s).replace("base",o).replace("quote",i)}import{Chain as q,SOLANA_TOKEN_PROTOCOLS as Q}from"@liberfi.io/types";var ie=(t,e)=>{switch(t){case q.SOLANA:return Q.find(n=>new RegExp(n,"i").test(e));default:return}},ae=t=>t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");import{Chain as N}from"@liberfi.io/types";var J={[N.SOLANA]:"https://solscan.io/tx/${txHash}",[N.ETHEREUM]:"https://etherscan.io/tx/${txHash}",[N.POLYGON]:"https://polygonscan.com/tx/${txHash}",[N.BINANCE]:"https://bscscan.com/tx/${txHash}",[N.BINANCE_TESTNET]:"https://testnet.bscscan.com/tx/${txHash}",[N.AVALANCHE]:"https://snowtrace.io/tx/${txHash}",[N.BASE]:"https://basescan.org/tx/${txHash}",[N.BLAST]:"https://blastracker.xyz/tx/${txHash}",[N.ARBITRUM]:"https://arbiscan.io/tx/${txHash}",[N.ARBITRUM_NOVA]:"https://nova.arbiscan.io/tx/${txHash}",[N.ARBITRUM_TESTNET_GOERLI]:"https://goerli.arbiscan.io/tx/${txHash}",[N.ARBITRUM_TESTNET_SEPOLIA]:"https://sepolia.arbiscan.io/tx/${txHash}"};function le(t,e){var n;return(n=J[t])==null?void 0:n.replace("${txHash}",e)}var tt={[N.SOLANA]:"https://solscan.io/account/${account}",[N.ETHEREUM]:"https://etherscan.io/address/${account}",[N.POLYGON]:"https://polygonscan.com/address/${account}",[N.BINANCE]:"https://bscscan.com/address/${account}"},me=(t,e)=>{var n;return(n=tt[t])==null?void 0:n.replace("${account}",e)};function fe(t){return`https://lens.google.com/uploadbyurl?url=${encodeURIComponent(t)}`}function ge(t){return`https://x.com/search?q=${encodeURIComponent(t)}`}function Ne(t){return`https://x.com/${t}`}function Ae(t){return`https://x.com/${t}`}function de(t){return`https://x.com/${t}`}var Oe=t=>{typeof window!="undefined"&&t()},et=()=>{if(typeof globalThis!="undefined")return globalThis;if(typeof self!="undefined")return self;if(typeof window!="undefined")return window;if(typeof global!="undefined")return global;throw new Error("cannot find the global object")},be=()=>{var t;if(typeof window!="undefined"){let e=(t=et())==null?void 0:t.__LIBERFI_timestamp_offset;if(typeof e=="number")return Date.now()+(e||0)}return Date.now()};import{throttle as _e,debounce as Ue}from"lodash-es";export{l as SafeBigNumber,me as accountExplorerUrl,Qt as camelCaseToSnakeCase,Dt as canConvertToNumber,qt as capitalizeString,lt as chainIcon,ft as chainIdBySlug,mt as chainSlug,Ue as debounce,xt as del,zt as displayCount3,Yt as displayCount4,Jt as findLongestCommonSubString,bt as formatAge,Z as formatAgeInSeconds,Ct as formatAmount,_t as formatAmount2,Ut as formatAmount3,Mt as formatAmountUSD,Bt as formatAmountUSD2,Lt as formatAmountUSD3,Ht as formatAmountUSD4,Vt as formatAmountUSD5,Gt as formatCount,Zt as formatCount2,Kt as formatCount3,Ft as formatMultiplier,vt as formatPercent,Wt as formatPrice,kt as formatPriceUSD,Ot as formatReadableTime,re as formatSymbol,ht as formatTimeAgo,ae as formatTokenProtocolName,Tt as get,et as getGlobalObject,be as getTimestamp,v as hex2int,it as int2hex,X as isHex,te as isHexString,ut as isSolana,ct as isTestnet,g as isValidNumber,Pt as isValidTimeframe,Nt as millisecondsToHMS,$t as mutate,at as parseChainId,ie as parseTokenProtocolFamily,St as post,Et as put,S as request,fe as searchImageUrl,ge as searchTwitterUrl,G as secondsSince,dt as subtractDaysFromCurrentDate,_e as throttle,At as timestampToString,de as twitterMediaUrl,Ae as twitterTweetUrl,Ne as twitterUserUrl,le as txExplorerUrl,k as version,Oe as windowGuard};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/chain.ts","../src/dateTime.ts","../src/number.ts","../src/string.ts","../src/symbol.ts","../src/tokenProtocols.ts","../src/urls.ts","../src/window.ts"],"sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/utils\"] = \"0.1.0\";\n}\n\nexport default \"0.1.0\";\n","import { Chain } from \"@liberfi.io/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\n\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\n\nexport const parseChainId = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const isTestnet = (chainId: string | number | Chain) => {\n const testnetIds = [\n Chain.ARBITRUM_TESTNET_GOERLI,\n Chain.ARBITRUM_TESTNET_SEPOLIA,\n Chain.SOLANA_DEVNET,\n Chain.SOLANA_TESTNET,\n Chain.ABSTRACT_TESTNET,\n Chain.BINANCE_TESTNET,\n ];\n return testnetIds.includes(`${chainId}` as Chain);\n};\n\nexport const isSolana = (chainId: string | number | Chain) => {\n return [Chain.SOLANA, Chain.SOLANA_DEVNET, Chain.SOLANA_TESTNET].includes(\n `${chainId}` as Chain,\n );\n};\n\nconst chainSlugs: Partial<Record<Chain, string>> = {\n [Chain.ETHEREUM]: \"ethereum\",\n [Chain.UBIQ]: \"ubiq\",\n [Chain.OPTIMISM]: \"optimism\",\n [Chain.FLARE]: \"flare\",\n [Chain.SONGBIRD]: \"songbird\",\n [Chain.ELASTOS]: \"elastos\",\n [Chain.KARDIA]: \"kardia\",\n [Chain.CRONOS]: \"cronos\",\n [Chain.RSK]: \"rsk\",\n [Chain.TELOS]: \"telos\",\n [Chain.LUKSO]: \"lukso\",\n [Chain.CRAB]: \"crab\",\n [Chain.DARWINIA]: \"darwinia\",\n [Chain.XDC]: \"xdc\",\n [Chain.CSC]: \"csc\",\n [Chain.ZYX]: \"zyx\",\n [Chain.BINANCE]: \"binance\",\n [Chain.SYSCOIN]: \"syscoin\",\n [Chain.GOCHAIN]: \"gochain\",\n [Chain.ETHEREUMCLASSIC]: \"ethereumclassic\",\n [Chain.OKEXCHAIN]: \"okexchain\",\n [Chain.HOO]: \"hoo\",\n [Chain.METER]: \"meter\",\n [Chain.NOVA_NETWORK]: \"nova network\",\n [Chain.TOMOCHAIN]: \"tomochain\",\n [Chain.BITKUB]: \"bitkub\",\n [Chain.XDAI]: \"xdai\",\n [Chain.SOLANA]: \"solana\",\n [Chain.VELAS]: \"velas\",\n [Chain.THUNDERCORE]: \"thundercore\",\n [Chain.ENULS]: \"enuls\",\n [Chain.FUSE]: \"fuse\",\n [Chain.HECO]: \"heco\",\n [Chain.UNICHAIN]: \"unichain\",\n [Chain.POLYGON]: \"polygon\",\n [Chain.SONIC]: \"sonic\",\n [Chain.SHIMMER_EVM]: \"shimmer_evm\",\n [Chain.RBN]: \"rbn\",\n [Chain.OMNI]: \"omni\",\n [Chain.MANTA]: \"manta\",\n [Chain.HSK]: \"hsk\",\n [Chain.WATER]: \"water\",\n [Chain.XLAYER]: \"xlayer\",\n [Chain.XDAIARB]: \"xdaiarb\",\n [Chain.OP_BNB]: \"op_bnb\",\n [Chain.VINUCHAIN]: \"vinuchain\",\n [Chain.ENERGYWEB]: \"energyweb\",\n [Chain.OASYS]: \"oasys\",\n [Chain.FANTOM]: \"fantom\",\n [Chain.FRAXTAL]: \"fraxtal\",\n [Chain.HPB]: \"hpb\",\n [Chain.BOBA]: \"boba\",\n [Chain.OMAX]: \"omax\",\n [Chain.FILECOIN]: \"filecoin\",\n [Chain.KUCOIN]: \"kucoin\",\n [Chain.ZKSYNC_ERA]: \"zksync era\",\n [Chain.SHIDEN]: \"shiden\",\n [Chain.THETA]: \"theta\",\n [Chain.PULSE]: \"pulse\",\n [Chain.CRONOS_ZKEVM]: \"cronos zkevm\",\n [Chain.SX]: \"sx\",\n [Chain.AREON]: \"areon\",\n [Chain.WC]: \"wc\",\n [Chain.CANDLE]: \"candle\",\n [Chain.ROLLUX]: \"rollux\",\n [Chain.ASTAR]: \"astar\",\n [Chain.REDSTONE]: \"redstone\",\n [Chain.MATCHAIN]: \"matchain\",\n [Chain.CALLISTO]: \"callisto\",\n [Chain.TARA]: \"tara\",\n [Chain.WANCHAIN]: \"wanchain\",\n [Chain.LYRA_CHAIN]: \"lyra chain\",\n [Chain.BIFROST]: \"bifrost\",\n [Chain.CONFLUX]: \"conflux\",\n [Chain.METIS]: \"metis\",\n [Chain.DYMENSION]: \"dymension\",\n [Chain.POLYGON_ZKEVM]: \"polygon zkevm\",\n [Chain.CORE]: \"core\",\n [Chain.LISK]: \"lisk\",\n [Chain.ULTRON]: \"ultron\",\n [Chain.STEP]: \"step\",\n [Chain.MOONBEAM]: \"moonbeam\",\n [Chain.MOONRIVER]: \"moonriver\",\n [Chain.SEI]: \"sei\",\n [Chain.LIVING_ASSETS_MAINNET]: \"living assets mainnet\",\n [Chain.STY]: \"sty\",\n [Chain.TENET]: \"tenet\",\n [Chain.GRAVITY]: \"gravity\",\n [Chain.REYA_NETWORK]: \"reya network\",\n [Chain.SONEIUM]: \"soneium\",\n [Chain.SWELLCHAIN]: \"swellchain\",\n [Chain.ONUS]: \"onus\",\n [Chain.HUBBLENET]: \"hubblenet\",\n [Chain.SANKO]: \"sanko\",\n [Chain.DOGECHAIN]: \"dogechain\",\n [Chain.MILKOMEDA]: \"milkomeda\",\n [Chain.MILKOMEDA_A1]: \"milkomeda_a1\",\n [Chain.KAVA]: \"kava\",\n [Chain.SOMA]: \"soma\",\n [Chain.KARAK]: \"karak\",\n [Chain.ABSTRACT]: \"abstract\",\n [Chain.MORPH]: \"morph\",\n [Chain.CROSSFI]: \"crossfi\",\n [Chain.BEAM]: \"beam\",\n [Chain.IOTEX]: \"iotex\",\n [Chain.MANTLE]: \"mantle\",\n [Chain.XLC]: \"xlc\",\n [Chain.NAHMII]: \"nahmii\",\n [Chain.BOUNCEBIT]: \"bouncebit\",\n [Chain.TOMBCHAIN]: \"tombchain\",\n [Chain.ZETACHAIN]: \"zetachain\",\n [Chain.PLANQ]: \"planq\",\n [Chain.BITROCK]: \"bitrock\",\n [Chain.XSAT]: \"xsat\",\n [Chain.CYETH]: \"cyeth\",\n [Chain.CANTO]: \"canto\",\n [Chain.KLAYTN]: \"klaytn\",\n [Chain.THAT]: \"that\",\n [Chain.BASE]: \"base\",\n [Chain.HELA]: \"hela\",\n [Chain.IOTAEVM]: \"iotaevm\",\n [Chain.JBC]: \"jbc\",\n [Chain.EVMOS]: \"evmos\",\n [Chain.CARBON]: \"carbon\",\n [Chain.SMARTBCH]: \"smartbch\",\n [Chain.ARTELA]: \"artela\",\n [Chain.IMMUTABLE_ZKEVM]: \"immutable zkevm\",\n [Chain.LOOP]: \"loop\",\n [Chain.GENESYS]: \"genesys\",\n [Chain.EOS_EVM]: \"eos evm\",\n [Chain.MAP_PROTOCOL]: \"map protocol\",\n [Chain.SAPPHIRE]: \"sapphire\",\n [Chain.BITGERT]: \"bitgert\",\n [Chain.FUSION]: \"fusion\",\n [Chain.ZILLIQA]: \"zilliqa\",\n [Chain.APECHAIN]: \"apechain\",\n [Chain.EDU_CHAIN]: \"edu chain\",\n [Chain.ARBITRUM]: \"arbitrum\",\n [Chain.ARBITRUM_NOVA]: \"arbitrum nova\",\n [Chain.CELO]: \"celo\",\n [Chain.OASIS]: \"oasis\",\n [Chain.ASSETCHAIN]: \"assetchain\",\n [Chain.ETHERLINK]: \"etherlink\",\n [Chain.AVALANCHE]: \"avalanche\",\n [Chain.REI]: \"rei\",\n [Chain.ZIRCUIT]: \"zircuit\",\n [Chain.SOPHON]: \"sophon\",\n [Chain.ETN]: \"etn\",\n [Chain.SUPERPOSITION]: \"superposition\",\n [Chain.REICHAIN]: \"reichain\",\n [Chain.BOBA_BNB]: \"boba_bnb\",\n [Chain.INK]: \"ink\",\n [Chain.LINEA]: \"linea\",\n [Chain.BOB]: \"bob\",\n [Chain.GODWOKEN]: \"godwoken\",\n [Chain.BERACHAIN]: \"berachain\",\n [Chain.BLAST]: \"blast\",\n [Chain.CHILIZ]: \"chiliz\",\n [Chain.STRATIS]: \"stratis\",\n [Chain.REAL]: \"real\",\n [Chain.ODYSSEY]: \"odyssey\",\n [Chain.TAIKO]: \"taiko\",\n [Chain.BITLAYER]: \"bitlayer\",\n [Chain.HYDRATION]: \"hydration\",\n [Chain.PAREX]: \"parex\",\n [Chain.POLIS]: \"polis\",\n [Chain.KEKCHAIN]: \"kekchain\",\n [Chain.SCROLL]: \"scroll\",\n [Chain.ZERO_NETWORK]: \"zero_network\",\n [Chain.ZKLINK_NOVA]: \"zklink nova\",\n [Chain.VISION]: \"vision\",\n [Chain.SAAKURU]: \"saakuru\",\n [Chain.ZORA]: \"zora\",\n [Chain.CORN]: \"corn\",\n [Chain.NEON]: \"neon\",\n [Chain.LUMIA]: \"lumia\",\n [Chain.AURORA]: \"aurora\",\n [Chain.HARMONY]: \"harmony\",\n [Chain.PALM]: \"palm\",\n [Chain.ZENIQ]: \"zeniq\",\n [Chain.CURIO]: \"curio\",\n [Chain.MODE]: \"mode\",\n};\n\nexport function chainIcon(chainId: Chain): string | undefined {\n const slug = chainSlugs[chainId];\n return slug\n ? `https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(slug)}.jpg`\n : undefined;\n}\n\nexport function chainSlug(chainId: Chain): string | undefined {\n return chainSlugs[chainId];\n}\n\nexport function chainIdBySlug(slug: string): Chain | undefined {\n const foundKey = Object.keys(chainSlugs).find(\n (key) => chainSlugs[key as Chain] === slug,\n );\n return foundKey ? (foundKey as Chain) : undefined;\n}\n","const NOW = Date.now();\n\nconst MINUTE = 60;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst YEAR = 365 * DAY;\n\nexport const millisecondsToHMS = (\n milliseconds: number,\n): [number, number, number] => {\n const totalSeconds = Math.floor(milliseconds / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return [hours, minutes, seconds];\n};\n\n/// will return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number | Date): string => {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date,\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n\nfunction maybeSecondsToMilliseconds(date: number): number {\n if (!date || Number.isNaN(date) || date <= 0) {\n return NOW;\n }\n if (date < 1e10) {\n return date * 1000;\n }\n return date;\n}\n\nfunction formatToMilliseconds(date?: number | string | Date | null): number {\n if (!date) {\n return NOW;\n }\n if (typeof date === \"number\") {\n return maybeSecondsToMilliseconds(date);\n }\n if (typeof date === \"string\") {\n const parsed = Date.parse(date);\n return maybeSecondsToMilliseconds(parsed);\n }\n if (date instanceof Date) {\n return date.getTime();\n }\n return NOW;\n}\n\nexport function formatTimeAgo(\n date: number | string | Date | null | undefined,\n): string {\n const diffSeconds = Math.floor(\n (Date.now() - formatToMilliseconds(date)) / 1000,\n );\n if (diffSeconds >= YEAR) {\n const years = Math.floor(diffSeconds / YEAR);\n return `${years}Y`;\n }\n if (diffSeconds >= DAY) {\n const days = Math.floor(diffSeconds / DAY);\n return `${days}D`;\n }\n if (diffSeconds >= HOUR) {\n const hours = Math.floor(diffSeconds / HOUR);\n return `${hours}h`;\n }\n if (diffSeconds >= MINUTE) {\n const minutes = Math.floor(diffSeconds / MINUTE);\n return `${minutes}m`;\n }\n return `${diffSeconds}s`;\n}\n\nexport function secondsSince(\n timestamp: number | Date,\n now?: number | Date,\n): number {\n const currentTime = now\n ? now instanceof Date\n ? now.getTime()\n : now\n : Date.now();\n const targetTime =\n timestamp instanceof Date ? timestamp.getTime() : timestamp;\n const diffInMilliseconds = currentTime - targetTime;\n return Math.floor(diffInMilliseconds / 1000);\n}\n\nexport interface FormatReadableTimeOptions {\n justNow?: string;\n secondsAgo?: string;\n minutesAgo?: string;\n hoursAgo?: string;\n daysAgo?: string;\n yearsAgo?: string;\n}\n\nconst defaultTranslations = {\n justNow: \"just now\",\n secondsAgo: \"{n}s\",\n minutesAgo: \"{n}m\",\n hoursAgo: \"{n}h\",\n daysAgo: \"{n}d\",\n yearsAgo: \"{n}y\",\n};\n\n/**\n * Formats a timestamp into a human-readable time ago string.\n\n *\n * @param timestamp - The timestamp (number) or Date object to format\n * @param options - Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatReadableTime(\n timestamp: number | Date,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = secondsSince(timestamp);\n\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (seconds < 10) {\n return translations.justNow;\n }\n if (seconds < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", seconds.toString());\n }\n if (seconds < HOUR) {\n const minutes = Math.floor(seconds / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (seconds < DAY) {\n const hours = Math.floor(seconds / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (seconds < YEAR) {\n const days = Math.floor(seconds / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(seconds / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n\n/**\n * Formats an age in milliseconds into a human-readable time ago string.\n * @param timestamp Age in milliseconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatAge(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = Math.floor(age / 1000);\n return formatAgeInSeconds(seconds, options);\n}\n\n/**\n * Formats an age in seconds into a human-readable time ago string.\n * @param timestamp Age in seconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n * @examples\n * formatAgeInSeconds(0) // \"just now\"\n * formatAgeInSeconds(10) // \"10s\"\n * formatAgeInSeconds(60) // \"1m\"\n * formatAgeInSeconds(3600) // \"1h\"\n * formatAgeInSeconds(86400) // \"1d\"\n * formatAgeInSeconds(31536000) // \"1y\"\n */\nexport function formatAgeInSeconds(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (age < 10) {\n return translations.justNow;\n }\n if (age < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", age.toString());\n }\n if (age < HOUR) {\n const minutes = Math.floor(age / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (age < DAY) {\n const hours = Math.floor(age / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (age < YEAR) {\n const days = Math.floor(age / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(age / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n","import BigNumber from \"bignumber.js\";\n\nexport class SafeBigNumber extends BigNumber {\n constructor(num?: BigNumber.Value, base?: number) {\n try {\n super(num ?? 0, base);\n } catch (e) {\n console.error(\"SafeBigNumber constructor error\", e);\n super(0, base);\n }\n }\n}\n\ndeclare namespace SafeBigNumber {\n type Value = BigNumber.Value;\n}\n\nexport const isValidNumber = (num: unknown) => {\n if (\n (\"number\" === typeof num && !isNaN(num)) ||\n num instanceof SafeBigNumber ||\n num instanceof BigNumber\n ) {\n return true;\n }\n if (\"string\" !== typeof num) {\n return false;\n }\n const floatNum = Number.parseFloat(num);\n return !isNaN(floatNum);\n};\n\nexport const canConvertToNumber = (num: unknown) =>\n (\"number\" === typeof num || !!num) &&\n isValidNumber(\"string\" === typeof num ? Number(num) : num);\n\nexport const isValidTimeframe = (timeframe: string = \"\") =>\n /^(\\d+\\.?\\d*|\\.\\d+)([hm]?)$$/.test(timeframe);\n\nexport type FormatAmountOptions = {\n showPlusGtThanZero: boolean;\n};\n\nexport const formatAmount = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(2, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs, 0);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e4)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(1, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e15)\n ? `$${stringifyNumberWithAbbreviation(roundedAbs)}`\n : `$${stringifyAmount(abs, {\n acronymMin: 1e5,\n groupingSeparator: true,\n })}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : `$${stringifyNumberWithAbbreviation(roundedAbs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD4 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD5 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(100)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 0)}`\n : `$${stringifyNumberWithAbbreviation(abs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport type FormatPriceOptions = {\n isHighPrecise: boolean;\n};\n\nexport const formatPrice = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `${formatted}`;\n};\n\nexport const formatPriceUSD = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `$${formatted}`;\n};\n\nexport type FormatPercentOptions = {\n showPlusGtThanZero?: boolean;\n precision?: number;\n};\n\n/**\n * Format a number as a percentage.\n * @param num - The number to format, 0.3 means 30%.\n * @param options - The options to format the number.\n * @param options.showPlusGtThanZero - Whether to show the plus sign if the number is greater than zero.\n * @param options.precision - The precision to format the number.\n * @returns\n */\nexport const formatPercent = (\n num: BigNumber.Value = \"\",\n options: FormatPercentOptions = {},\n) => {\n if (!isValidNumber(num)) return \"-- %\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(1e-4)) return \"0%\";\n if (abs.lt(100))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 2)}`;\n if (abs.lt(1e3))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 1)}`;\n return `${sign}> 99,999%`;\n};\n\nconst stringifyPercent = (bn: BigNumber, precision: number) =>\n `${bn.times(100).decimalPlaces(precision, BigNumber.ROUND_HALF_UP).toString()}%`;\n\nexport type FormatMultiplierOptions = {\n showPlusGtThanZero?: boolean;\n};\n\nexport const formatMultiplier = (\n num: BigNumber.Value = \"\",\n options: FormatMultiplierOptions = { showPlusGtThanZero: true },\n) => {\n if (!isValidNumber(num)) return \"0%\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(0.01)) return \"0%\";\n if (abs.lt(10))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 2)}X`;\n if (abs.lt(100))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 1)}X`;\n if (abs.lt(1e5))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 0)}X`;\n return `${sign}>99,999%`;\n};\n\nexport const formatCount = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(bn);\n};\n\nexport const formatCount2 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(1e3).integerValue(BigNumber.ROUND_DOWN).times(1e3),\n 0,\n );\n};\n\nexport const formatCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return stringifyNumberWithGroupingSeparator(bn, 0);\n};\n\nexport const displayCount4 = (num: BigNumber.Value = \"\") =>\n isValidNumber(num) ? stringifyNumberWithGroupingSeparator(num, 0) : \"--\";\n\nexport const displayCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(100).integerValue(BigNumber.ROUND_DOWN).times(100),\n );\n};\n\nconst subscriptDigits = [\n \"₀\",\n \"₁\",\n \"₂\",\n \"₃\",\n \"₄\",\n \"₅\",\n \"₆\",\n \"₇\",\n \"₈\",\n \"₉\",\n \"₁₀\",\n \"₁₁\",\n \"₁₂\",\n \"₁₃\",\n \"₁₄\",\n \"₁₅\",\n \"₁₆\",\n \"₁₇\",\n \"₁₈\",\n \"₁₉\",\n \"₂₀\",\n \"₂₁\",\n \"₂₂\",\n \"₂₃\",\n \"₂₄\",\n \"₂₅\",\n \"₂₆\",\n \"₂₇\",\n \"₂₈\",\n \"₂₉\",\n \"₃₀\",\n \"₃₁\",\n \"₃₂\",\n \"₃₃\",\n \"₃₄\",\n \"₃₅\",\n \"₃₆\",\n \"₃₇\",\n \"₃₈\",\n \"₃₉\",\n \"₄₀\",\n];\n\nconst stringifyNumberWithGroupingSeparator = (\n num: BigNumber.Value,\n precision: number = 0,\n rounding: BigNumber.RoundingMode = BigNumber.ROUND_DOWN,\n) => {\n const bn = new SafeBigNumber(num);\n const parts = bn.decimalPlaces(precision, rounding).toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return parts.join(\".\");\n};\n\nconst stringifyNumberWithAbbreviation = (\n num: BigNumber.Value,\n precision: number = 1,\n) => {\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? bn.toNumber()\n : bn.lt(1e6)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e3), precision)}K`\n : bn.lt(1e9)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e6), precision)}M`\n : bn.lt(1e12)\n ? `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e9), precision)}B`\n : `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e12), precision)}T`;\n};\n\nconst stringifyNumberWithLeadingZeroSubscripts = (\n num: BigNumber.Value,\n precision: number = 5,\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return \"0\";\n const [integerPart, decimalPart] = bn.toFixed().split(\".\");\n const digits = decimalPart.split(\"\");\n const firstNonZeroIndex = digits.findIndex((num) => \"0\" !== num);\n const precisionDigitsCount = Math.min(\n digits.length - firstNonZeroIndex,\n precision,\n );\n return `${stringifyNumberWithGroupingSeparator(integerPart)}.0`\n .concat(subscriptDigits[firstNonZeroIndex])\n .concat(\n digits\n .slice(firstNonZeroIndex, firstNonZeroIndex + precisionDigitsCount)\n .join(\"\")\n .replace(/\\.?0+$/, \"\"), // trim trailing zeros\n );\n};\n\nconst stringifyNumberWithSignificantPrecision = (\n num: BigNumber,\n precision: number,\n) => {\n const matched = num.toString().match(/\\.0*/); // has leading zeros\n const significantPrecision =\n (matched ? matched[0].length - 1 : 0) + precision;\n return stringifyNumberWithGroupingSeparator(num, significantPrecision);\n};\n\ntype StringifyAmountOptions = {\n precision?: number;\n groupingSeparator?: boolean;\n rounding?: \"up\" | \"down\" | \"ceil\" | \"floor\";\n // abbreviation if number is greater than this value\n acronymMin?: number;\n // display <min if number is less than this value\n min?: number;\n // display >max if number is greater than this value\n max?: number;\n // display this string if number is 0\n zeroDisplay?: string;\n};\n\nconst stringifyAmountWithClippingAndCapping = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const {\n precision = 4,\n min,\n max,\n groupingSeparator,\n rounding,\n zeroDisplay,\n } = options;\n\n const roundingMap = {\n up: BigNumber.ROUND_UP,\n down: BigNumber.ROUND_DOWN,\n ceil: BigNumber.ROUND_CEIL,\n floor: BigNumber.ROUND_FLOOR,\n };\n\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return zeroDisplay ? zeroDisplay : \"0\";\n\n const abs = bn.abs();\n\n if (min && abs.lt(min)) return `<${min}`;\n if (max && abs.gt(max)) return `>${max}`;\n\n if (groupingSeparator) {\n return stringifyNumberWithGroupingSeparator(\n abs,\n precision,\n rounding ? roundingMap[rounding] : undefined,\n );\n }\n\n const rounded = rounding\n ? abs.decimalPlaces(precision, roundingMap[rounding])\n : abs.decimalPlaces(precision);\n return rounded.toString();\n};\n\nconst stringifyAmount = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return options.zeroDisplay ? options.zeroDisplay : \"\";\n\n const { acronymMin = 1e4 } = options;\n const abs = bn.abs();\n if (abs.lt(acronymMin))\n return stringifyAmountWithClippingAndCapping(bn, options);\n\n if (abs.gte(1e15)) {\n return bn.toExponential(2);\n }\n if (abs.gte(1e12)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e12), { ...options, precision: 0 })}T`;\n }\n if (abs.gte(1e9)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e9), { ...options, precision: 0 })}B`;\n }\n if (abs.gte(1e6)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e6), { ...options, precision: 1 })}M`;\n }\n if (abs.gte(1e4)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e3), { ...options, precision: 1 })}K`;\n }\n return stringifyAmountWithClippingAndCapping(bn, options);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToSnakeCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n return index;\n }\n return -1;\n};\n\nexport function isHex(value: string): boolean {\n const hexRegex = /^[a-f0-9]+$/iu;\n return hexRegex.test(value);\n}\n\nexport function isHexString(value: string): boolean {\n return typeof value === \"string\" && value.startsWith(\"0x\") && isHex(value);\n}\n","/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import {\n Chain,\n SOLANA_TOKEN_PROTOCOLS,\n TokenProtocol,\n} from \"@liberfi.io/types\";\n\nexport const parseTokenProtocolFamily = (\n chain: Chain,\n protocolFamily: string,\n): TokenProtocol | undefined => {\n switch (chain) {\n case Chain.SOLANA:\n return SOLANA_TOKEN_PROTOCOLS.find((p) =>\n new RegExp(p, \"i\").test(protocolFamily),\n );\n default:\n return undefined;\n }\n};\n\nexport const formatTokenProtocolName = (protocol: TokenProtocol) => {\n return protocol\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n","import { Chain } from \"@liberfi.io/types\";\n\nconst TX_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/tx/${txHash}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/tx/${txHash}\",\n [Chain.POLYGON]: \"https://polygonscan.com/tx/${txHash}\",\n [Chain.BINANCE]: \"https://bscscan.com/tx/${txHash}\",\n [Chain.BINANCE_TESTNET]: \"https://testnet.bscscan.com/tx/${txHash}\",\n [Chain.AVALANCHE]: \"https://snowtrace.io/tx/${txHash}\",\n [Chain.BASE]: \"https://basescan.org/tx/${txHash}\",\n [Chain.BLAST]: \"https://blastracker.xyz/tx/${txHash}\",\n [Chain.ARBITRUM]: \"https://arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_NOVA]: \"https://nova.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_GOERLI]: \"https://goerli.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_SEPOLIA]: \"https://sepolia.arbiscan.io/tx/${txHash}\",\n};\n\nexport function txExplorerUrl(chainId: Chain, txHash: string) {\n return TX_EXPLORER_URLS[chainId]?.replace(\"${txHash}\", txHash);\n}\n\nconst ACCOUNT_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/account/${account}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/address/${account}\",\n [Chain.POLYGON]: \"https://polygonscan.com/address/${account}\",\n [Chain.BINANCE]: \"https://bscscan.com/address/${account}\",\n};\n\nexport const accountExplorerUrl = (chainId: Chain, account: string) => {\n return ACCOUNT_EXPLORER_URLS[chainId]?.replace(\"${account}\", account);\n};\n\nexport function searchImageUrl(image: string) {\n return `https://lens.google.com/uploadbyurl?url=${encodeURIComponent(image)}`;\n}\n\nexport function searchTwitterUrl(q: string) {\n return `https://x.com/search?q=${encodeURIComponent(q)}`;\n}\n\nexport function twitterUserUrl(username: string) {\n return `https://x.com/${username}`;\n}\n\nexport function twitterTweetUrl(id: string) {\n return `https://x.com/${id}`;\n}\n\nexport function twitterMediaUrl(id: string) {\n return `https://x.com/${id}`;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__LIBERFI_timestamp_offset;\n if (typeof timeOffset === \"number\") {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n};\n"],"mappings":"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","names":["version_default","Chain","hex2int","chainId","int2hex","parseChainId","isTestnet","isSolana","chainSlugs","chainIcon","slug","chainSlug","chainIdBySlug","foundKey","key","NOW","MINUTE","HOUR","DAY","YEAR","millisecondsToHMS","milliseconds","totalSeconds","hours","minutes","seconds","timestampToString","timestamp","date","year","month","day","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","maybeSecondsToMilliseconds","formatToMilliseconds","parsed","formatTimeAgo","diffSeconds","secondsSince","now","currentTime","targetTime","diffInMilliseconds","defaultTranslations","formatReadableTime","options","translations","years","formatAge","age","formatAgeInSeconds","BigNumber","SafeBigNumber","BigNumber","num","base","e","isValidNumber","floatNum","canConvertToNumber","isValidTimeframe","timeframe","formatAmount","options","bn","negative","abs","formatted","stringifyNumberWithGroupingSeparator","stringifyNumberWithAbbreviation","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","roundedAbs","stringifyAmount","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatPrice","isHighPrecise","stringifyNumberWithLeadingZeroSubscripts","stringifyNumberWithSignificantPrecision","formatPriceUSD","formatPercent","_a","_b","sign","stringifyPercent","precision","formatMultiplier","formatCount","formatCount2","formatCount3","displayCount4","displayCount3","subscriptDigits","rounding","parts","integerPart","decimalPart","digits","firstNonZeroIndex","precisionDigitsCount","matched","significantPrecision","stringifyAmountWithClippingAndCapping","min","max","groupingSeparator","zeroDisplay","roundingMap","acronymMin","__spreadProps","__spreadValues","capitalizeString","str","lowercaseStr","camelCaseToSnakeCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","isHex","value","isHexString","formatSymbol","symbol","formatString","arr","type","base","quote","Chain","SOLANA_TOKEN_PROTOCOLS","parseTokenProtocolFamily","chain","protocolFamily","p","formatTokenProtocolName","protocol","word","Chain","TX_EXPLORER_URLS","txExplorerUrl","chainId","txHash","_a","ACCOUNT_EXPLORER_URLS","accountExplorerUrl","account","searchImageUrl","image","searchTwitterUrl","q","twitterUserUrl","username","twitterTweetUrl","id","twitterMediaUrl","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/chain.ts","../src/dateTime.ts","../src/fetch.ts","../src/number.ts","../src/string.ts","../src/symbol.ts","../src/tokenProtocols.ts","../src/urls.ts","../src/window.ts","../src/index.ts"],"sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/utils\"] = \"0.1.4\";\n}\n\nexport default \"0.1.4\";\n","import { Chain } from \"@liberfi.io/types\";\n\nexport const hex2int = (chainId: string): number => parseInt(chainId);\n\nexport const int2hex = (chainId: number): string => `0x${chainId.toString(16)}`;\n\nexport const parseChainId = (chainId: string | number): number => {\n if (\n typeof chainId === \"string\" &&\n chainId.startsWith(\"0x\") &&\n /^[a-f0-9]+$/iu.test(chainId.slice(2))\n )\n return hex2int(chainId);\n return chainId as number;\n};\n\nexport const isTestnet = (chainId: string | number | Chain) => {\n const testnetIds = [\n Chain.ARBITRUM_TESTNET_GOERLI,\n Chain.ARBITRUM_TESTNET_SEPOLIA,\n Chain.SOLANA_DEVNET,\n Chain.SOLANA_TESTNET,\n Chain.ABSTRACT_TESTNET,\n Chain.BINANCE_TESTNET,\n ];\n return testnetIds.includes(`${chainId}` as Chain);\n};\n\nexport const isSolana = (chainId: string | number | Chain) => {\n return [Chain.SOLANA, Chain.SOLANA_DEVNET, Chain.SOLANA_TESTNET].includes(\n `${chainId}` as Chain,\n );\n};\n\nconst chainSlugs: Partial<Record<Chain, string>> = {\n [Chain.ETHEREUM]: \"ethereum\",\n [Chain.UBIQ]: \"ubiq\",\n [Chain.OPTIMISM]: \"optimism\",\n [Chain.FLARE]: \"flare\",\n [Chain.SONGBIRD]: \"songbird\",\n [Chain.ELASTOS]: \"elastos\",\n [Chain.KARDIA]: \"kardia\",\n [Chain.CRONOS]: \"cronos\",\n [Chain.RSK]: \"rsk\",\n [Chain.TELOS]: \"telos\",\n [Chain.LUKSO]: \"lukso\",\n [Chain.CRAB]: \"crab\",\n [Chain.DARWINIA]: \"darwinia\",\n [Chain.XDC]: \"xdc\",\n [Chain.CSC]: \"csc\",\n [Chain.ZYX]: \"zyx\",\n [Chain.BINANCE]: \"binance\",\n [Chain.SYSCOIN]: \"syscoin\",\n [Chain.GOCHAIN]: \"gochain\",\n [Chain.ETHEREUMCLASSIC]: \"ethereumclassic\",\n [Chain.OKEXCHAIN]: \"okexchain\",\n [Chain.HOO]: \"hoo\",\n [Chain.METER]: \"meter\",\n [Chain.NOVA_NETWORK]: \"nova network\",\n [Chain.TOMOCHAIN]: \"tomochain\",\n [Chain.BITKUB]: \"bitkub\",\n [Chain.XDAI]: \"xdai\",\n [Chain.SOLANA]: \"solana\",\n [Chain.VELAS]: \"velas\",\n [Chain.THUNDERCORE]: \"thundercore\",\n [Chain.ENULS]: \"enuls\",\n [Chain.FUSE]: \"fuse\",\n [Chain.HECO]: \"heco\",\n [Chain.UNICHAIN]: \"unichain\",\n [Chain.POLYGON]: \"polygon\",\n [Chain.SONIC]: \"sonic\",\n [Chain.SHIMMER_EVM]: \"shimmer_evm\",\n [Chain.RBN]: \"rbn\",\n [Chain.OMNI]: \"omni\",\n [Chain.MANTA]: \"manta\",\n [Chain.HSK]: \"hsk\",\n [Chain.WATER]: \"water\",\n [Chain.XLAYER]: \"xlayer\",\n [Chain.XDAIARB]: \"xdaiarb\",\n [Chain.OP_BNB]: \"op_bnb\",\n [Chain.VINUCHAIN]: \"vinuchain\",\n [Chain.ENERGYWEB]: \"energyweb\",\n [Chain.OASYS]: \"oasys\",\n [Chain.FANTOM]: \"fantom\",\n [Chain.FRAXTAL]: \"fraxtal\",\n [Chain.HPB]: \"hpb\",\n [Chain.BOBA]: \"boba\",\n [Chain.OMAX]: \"omax\",\n [Chain.FILECOIN]: \"filecoin\",\n [Chain.KUCOIN]: \"kucoin\",\n [Chain.ZKSYNC_ERA]: \"zksync era\",\n [Chain.SHIDEN]: \"shiden\",\n [Chain.THETA]: \"theta\",\n [Chain.PULSE]: \"pulse\",\n [Chain.CRONOS_ZKEVM]: \"cronos zkevm\",\n [Chain.SX]: \"sx\",\n [Chain.AREON]: \"areon\",\n [Chain.WC]: \"wc\",\n [Chain.CANDLE]: \"candle\",\n [Chain.ROLLUX]: \"rollux\",\n [Chain.ASTAR]: \"astar\",\n [Chain.REDSTONE]: \"redstone\",\n [Chain.MATCHAIN]: \"matchain\",\n [Chain.CALLISTO]: \"callisto\",\n [Chain.TARA]: \"tara\",\n [Chain.WANCHAIN]: \"wanchain\",\n [Chain.LYRA_CHAIN]: \"lyra chain\",\n [Chain.BIFROST]: \"bifrost\",\n [Chain.CONFLUX]: \"conflux\",\n [Chain.METIS]: \"metis\",\n [Chain.DYMENSION]: \"dymension\",\n [Chain.POLYGON_ZKEVM]: \"polygon zkevm\",\n [Chain.CORE]: \"core\",\n [Chain.LISK]: \"lisk\",\n [Chain.ULTRON]: \"ultron\",\n [Chain.STEP]: \"step\",\n [Chain.MOONBEAM]: \"moonbeam\",\n [Chain.MOONRIVER]: \"moonriver\",\n [Chain.SEI]: \"sei\",\n [Chain.LIVING_ASSETS_MAINNET]: \"living assets mainnet\",\n [Chain.STY]: \"sty\",\n [Chain.TENET]: \"tenet\",\n [Chain.GRAVITY]: \"gravity\",\n [Chain.REYA_NETWORK]: \"reya network\",\n [Chain.SONEIUM]: \"soneium\",\n [Chain.SWELLCHAIN]: \"swellchain\",\n [Chain.ONUS]: \"onus\",\n [Chain.HUBBLENET]: \"hubblenet\",\n [Chain.SANKO]: \"sanko\",\n [Chain.DOGECHAIN]: \"dogechain\",\n [Chain.MILKOMEDA]: \"milkomeda\",\n [Chain.MILKOMEDA_A1]: \"milkomeda_a1\",\n [Chain.KAVA]: \"kava\",\n [Chain.SOMA]: \"soma\",\n [Chain.KARAK]: \"karak\",\n [Chain.ABSTRACT]: \"abstract\",\n [Chain.MORPH]: \"morph\",\n [Chain.CROSSFI]: \"crossfi\",\n [Chain.BEAM]: \"beam\",\n [Chain.IOTEX]: \"iotex\",\n [Chain.MANTLE]: \"mantle\",\n [Chain.XLC]: \"xlc\",\n [Chain.NAHMII]: \"nahmii\",\n [Chain.BOUNCEBIT]: \"bouncebit\",\n [Chain.TOMBCHAIN]: \"tombchain\",\n [Chain.ZETACHAIN]: \"zetachain\",\n [Chain.PLANQ]: \"planq\",\n [Chain.BITROCK]: \"bitrock\",\n [Chain.XSAT]: \"xsat\",\n [Chain.CYETH]: \"cyeth\",\n [Chain.CANTO]: \"canto\",\n [Chain.KLAYTN]: \"klaytn\",\n [Chain.THAT]: \"that\",\n [Chain.BASE]: \"base\",\n [Chain.HELA]: \"hela\",\n [Chain.IOTAEVM]: \"iotaevm\",\n [Chain.JBC]: \"jbc\",\n [Chain.EVMOS]: \"evmos\",\n [Chain.CARBON]: \"carbon\",\n [Chain.SMARTBCH]: \"smartbch\",\n [Chain.ARTELA]: \"artela\",\n [Chain.IMMUTABLE_ZKEVM]: \"immutable zkevm\",\n [Chain.LOOP]: \"loop\",\n [Chain.GENESYS]: \"genesys\",\n [Chain.EOS_EVM]: \"eos evm\",\n [Chain.MAP_PROTOCOL]: \"map protocol\",\n [Chain.SAPPHIRE]: \"sapphire\",\n [Chain.BITGERT]: \"bitgert\",\n [Chain.FUSION]: \"fusion\",\n [Chain.ZILLIQA]: \"zilliqa\",\n [Chain.APECHAIN]: \"apechain\",\n [Chain.EDU_CHAIN]: \"edu chain\",\n [Chain.ARBITRUM]: \"arbitrum\",\n [Chain.ARBITRUM_NOVA]: \"arbitrum nova\",\n [Chain.CELO]: \"celo\",\n [Chain.OASIS]: \"oasis\",\n [Chain.ASSETCHAIN]: \"assetchain\",\n [Chain.ETHERLINK]: \"etherlink\",\n [Chain.AVALANCHE]: \"avalanche\",\n [Chain.REI]: \"rei\",\n [Chain.ZIRCUIT]: \"zircuit\",\n [Chain.SOPHON]: \"sophon\",\n [Chain.ETN]: \"etn\",\n [Chain.SUPERPOSITION]: \"superposition\",\n [Chain.REICHAIN]: \"reichain\",\n [Chain.BOBA_BNB]: \"boba_bnb\",\n [Chain.INK]: \"ink\",\n [Chain.LINEA]: \"linea\",\n [Chain.BOB]: \"bob\",\n [Chain.GODWOKEN]: \"godwoken\",\n [Chain.BERACHAIN]: \"berachain\",\n [Chain.BLAST]: \"blast\",\n [Chain.CHILIZ]: \"chiliz\",\n [Chain.STRATIS]: \"stratis\",\n [Chain.REAL]: \"real\",\n [Chain.ODYSSEY]: \"odyssey\",\n [Chain.TAIKO]: \"taiko\",\n [Chain.BITLAYER]: \"bitlayer\",\n [Chain.HYDRATION]: \"hydration\",\n [Chain.PAREX]: \"parex\",\n [Chain.POLIS]: \"polis\",\n [Chain.KEKCHAIN]: \"kekchain\",\n [Chain.SCROLL]: \"scroll\",\n [Chain.ZERO_NETWORK]: \"zero_network\",\n [Chain.ZKLINK_NOVA]: \"zklink nova\",\n [Chain.VISION]: \"vision\",\n [Chain.SAAKURU]: \"saakuru\",\n [Chain.ZORA]: \"zora\",\n [Chain.CORN]: \"corn\",\n [Chain.NEON]: \"neon\",\n [Chain.LUMIA]: \"lumia\",\n [Chain.AURORA]: \"aurora\",\n [Chain.HARMONY]: \"harmony\",\n [Chain.PALM]: \"palm\",\n [Chain.ZENIQ]: \"zeniq\",\n [Chain.CURIO]: \"curio\",\n [Chain.MODE]: \"mode\",\n};\n\nexport function chainIcon(chainId: Chain): string | undefined {\n const slug = chainSlugs[chainId];\n return slug\n ? `https://icons.llamao.fi/icons/chains/rsz_${encodeURIComponent(slug)}.jpg`\n : undefined;\n}\n\nexport function chainSlug(chainId: Chain): string | undefined {\n return chainSlugs[chainId];\n}\n\nexport function chainIdBySlug(slug: string): Chain | undefined {\n const foundKey = Object.keys(chainSlugs).find(\n (key) => chainSlugs[key as Chain] === slug,\n );\n return foundKey ? (foundKey as Chain) : undefined;\n}\n","const NOW = Date.now();\n\nconst MINUTE = 60;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst YEAR = 365 * DAY;\n\nexport const millisecondsToHMS = (\n milliseconds: number,\n): [number, number, number] => {\n const totalSeconds = Math.floor(milliseconds / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n return [hours, minutes, seconds];\n};\n\n/// will return 'yyyy-mm-dd hh:MM:ss'\nexport const timestampToString = (timestamp: number | Date): string => {\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n};\n\nexport function subtractDaysFromCurrentDate(\n days: number,\n startDate?: Date,\n): Date {\n const currentDate = startDate || new Date();\n const resultDate = new Date(currentDate);\n resultDate.setDate(currentDate.getDate() - days);\n return resultDate;\n}\n\nfunction maybeSecondsToMilliseconds(date: number): number {\n if (!date || Number.isNaN(date) || date <= 0) {\n return NOW;\n }\n if (date < 1e10) {\n return date * 1000;\n }\n return date;\n}\n\nfunction formatToMilliseconds(date?: number | string | Date | null): number {\n if (!date) {\n return NOW;\n }\n if (typeof date === \"number\") {\n return maybeSecondsToMilliseconds(date);\n }\n if (typeof date === \"string\") {\n const parsed = Date.parse(date);\n return maybeSecondsToMilliseconds(parsed);\n }\n if (date instanceof Date) {\n return date.getTime();\n }\n return NOW;\n}\n\nexport function formatTimeAgo(\n date: number | string | Date | null | undefined,\n): string {\n const diffSeconds = Math.floor(\n (Date.now() - formatToMilliseconds(date)) / 1000,\n );\n if (diffSeconds >= YEAR) {\n const years = Math.floor(diffSeconds / YEAR);\n return `${years}Y`;\n }\n if (diffSeconds >= DAY) {\n const days = Math.floor(diffSeconds / DAY);\n return `${days}D`;\n }\n if (diffSeconds >= HOUR) {\n const hours = Math.floor(diffSeconds / HOUR);\n return `${hours}h`;\n }\n if (diffSeconds >= MINUTE) {\n const minutes = Math.floor(diffSeconds / MINUTE);\n return `${minutes}m`;\n }\n return `${diffSeconds}s`;\n}\n\nexport function secondsSince(\n timestamp: number | Date,\n now?: number | Date,\n): number {\n const currentTime = now\n ? now instanceof Date\n ? now.getTime()\n : now\n : Date.now();\n const targetTime =\n timestamp instanceof Date ? timestamp.getTime() : timestamp;\n const diffInMilliseconds = currentTime - targetTime;\n return Math.floor(diffInMilliseconds / 1000);\n}\n\nexport interface FormatReadableTimeOptions {\n justNow?: string;\n secondsAgo?: string;\n minutesAgo?: string;\n hoursAgo?: string;\n daysAgo?: string;\n yearsAgo?: string;\n}\n\nconst defaultTranslations = {\n justNow: \"just now\",\n secondsAgo: \"{n}s\",\n minutesAgo: \"{n}m\",\n hoursAgo: \"{n}h\",\n daysAgo: \"{n}d\",\n yearsAgo: \"{n}y\",\n};\n\n/**\n * Formats a timestamp into a human-readable time ago string.\n\n *\n * @param timestamp - The timestamp (number) or Date object to format\n * @param options - Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatReadableTime(\n timestamp: number | Date,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = secondsSince(timestamp);\n\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (seconds < 10) {\n return translations.justNow;\n }\n if (seconds < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", seconds.toString());\n }\n if (seconds < HOUR) {\n const minutes = Math.floor(seconds / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (seconds < DAY) {\n const hours = Math.floor(seconds / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (seconds < YEAR) {\n const days = Math.floor(seconds / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(seconds / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n\n/**\n * Formats an age in milliseconds into a human-readable time ago string.\n * @param timestamp Age in milliseconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n */\nexport function formatAge(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const seconds = Math.floor(age / 1000);\n return formatAgeInSeconds(seconds, options);\n}\n\n/**\n * Formats an age in seconds into a human-readable time ago string.\n * @param timestamp Age in seconds\n * @param options Optional custom text translations\n * @returns Formatted time ago string\n * @examples\n * formatAgeInSeconds(0) // \"just now\"\n * formatAgeInSeconds(10) // \"10s\"\n * formatAgeInSeconds(60) // \"1m\"\n * formatAgeInSeconds(3600) // \"1h\"\n * formatAgeInSeconds(86400) // \"1d\"\n * formatAgeInSeconds(31536000) // \"1y\"\n */\nexport function formatAgeInSeconds(\n age: number,\n options: FormatReadableTimeOptions = {},\n): string {\n const translations = {\n justNow: options.justNow || defaultTranslations.justNow,\n secondsAgo: options.secondsAgo || defaultTranslations.secondsAgo,\n minutesAgo: options.minutesAgo || defaultTranslations.minutesAgo,\n hoursAgo: options.hoursAgo || defaultTranslations.hoursAgo,\n daysAgo: options.daysAgo || defaultTranslations.daysAgo,\n yearsAgo: options.yearsAgo || defaultTranslations.yearsAgo,\n };\n\n const MINUTE = 60;\n const HOUR = 60 * MINUTE;\n const DAY = 24 * HOUR;\n const YEAR = 365 * DAY;\n\n if (age < 10) {\n return translations.justNow;\n }\n if (age < MINUTE) {\n return translations.secondsAgo.replace(\"{n}\", age.toString());\n }\n if (age < HOUR) {\n const minutes = Math.floor(age / MINUTE);\n return translations.minutesAgo.replace(\"{n}\", minutes.toString());\n }\n if (age < DAY) {\n const hours = Math.floor(age / HOUR);\n return translations.hoursAgo.replace(\"{n}\", hours.toString());\n }\n if (age < YEAR) {\n const days = Math.floor(age / DAY);\n return translations.daysAgo.replace(\"{n}\", days.toString());\n }\n const years = Math.floor(age / YEAR);\n return translations.yearsAgo.replace(\"{n}\", years.toString());\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApiError } from \"@liberfi.io/types\";\n\nexport async function request<R = any>(\n url: string,\n options: RequestInit,\n): Promise<R> {\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n } else {\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nexport async function get<R = any>(\n url: string,\n options?: RequestInit,\n): Promise<R> {\n return await request<R>(url, {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function post<R = any, P = any>(\n url: string,\n data: P,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n}\n\nexport async function put<R = any, P = any>(\n url: string,\n data: P,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n}\n\nexport async function del<R = any>(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<R> {\n return await request<R>(url, {\n method: \"DELETE\",\n ...options,\n });\n}\n\nexport async function mutate<R = any>(\n url: string,\n init: RequestInit,\n): Promise<R> {\n return await request<R>(url, init);\n}\n","import BigNumber from \"bignumber.js\";\n\nexport class SafeBigNumber extends BigNumber {\n constructor(num?: BigNumber.Value, base?: number) {\n try {\n super(num ?? 0, base);\n } catch (e) {\n console.error(\"SafeBigNumber constructor error\", e);\n super(0, base);\n }\n }\n}\n\ndeclare namespace SafeBigNumber {\n type Value = BigNumber.Value;\n}\n\nexport const isValidNumber = (num: unknown) => {\n if (\n (\"number\" === typeof num && !isNaN(num)) ||\n num instanceof SafeBigNumber ||\n num instanceof BigNumber\n ) {\n return true;\n }\n if (\"string\" !== typeof num) {\n return false;\n }\n const floatNum = Number.parseFloat(num);\n return !isNaN(floatNum);\n};\n\nexport const canConvertToNumber = (num: unknown) =>\n (\"number\" === typeof num || !!num) &&\n isValidNumber(\"string\" === typeof num ? Number(num) : num);\n\nexport const isValidTimeframe = (timeframe: string = \"\") =>\n /^(\\d+\\.?\\d*|\\.\\d+)([hm]?)$$/.test(timeframe);\n\nexport type FormatAmountOptions = {\n showPlusGtThanZero: boolean;\n};\n\nexport const formatAmount = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(2, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmount3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? abs.decimalPlaces(5, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1)\n ? abs.decimalPlaces(3, BigNumber.ROUND_DOWN).toString()\n : abs.lt(100)\n ? abs.decimalPlaces(1, BigNumber.ROUND_DOWN).toString()\n : abs.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(abs, 1)\n : stringifyNumberWithAbbreviation(abs, 0);\n\n if (Number(formatted) === 0) return `${formatted}`;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return `${formatted}`;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted = abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e4)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD2 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(1, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e15)\n ? `$${stringifyNumberWithAbbreviation(roundedAbs)}`\n : `$${stringifyAmount(abs, {\n acronymMin: 1e5,\n groupingSeparator: true,\n })}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD3 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const roundedAbs = abs.div(100).integerValue(BigNumber.ROUND_DOWN).times(100);\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : `$${stringifyNumberWithAbbreviation(roundedAbs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD4 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(1)\n ? `$${abs.decimalPlaces(3, BigNumber.ROUND_DOWN)}`\n : abs.lt(100)\n ? `$${abs.decimalPlaces(2, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 2)}`\n : `$${stringifyNumberWithAbbreviation(abs)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport const formatAmountUSD5 = (\n num: BigNumber.Value = \"\",\n options: FormatAmountOptions = { showPlusGtThanZero: false },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n\n const formatted =\n abs.lt(1e-4) || abs.lt(0.001)\n ? \"$0\"\n : abs.lt(100)\n ? `$${abs.decimalPlaces(0, BigNumber.ROUND_DOWN)}`\n : abs.lt(1e3)\n ? `$${stringifyNumberWithGroupingSeparator(abs, 0)}`\n : `$${stringifyNumberWithAbbreviation(abs, 0)}`;\n\n if (\"$0\" === formatted) return formatted;\n if (negative) return `-${formatted}`;\n if (!options?.showPlusGtThanZero) return formatted;\n return `+${formatted}`;\n};\n\nexport type FormatPriceOptions = {\n isHighPrecise: boolean;\n};\n\nexport const formatPrice = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `${formatted}`;\n};\n\nexport const formatPriceUSD = (\n num: BigNumber.Value = \"\",\n options: FormatPriceOptions = { isHighPrecise: true },\n) => {\n if (!isValidNumber(num)) return \"--\";\n\n const bn = new SafeBigNumber(num);\n if (bn.lt(0)) return \"--\";\n\n const abs = bn.abs();\n const { isHighPrecise } = options;\n\n const formatted = abs.lt(1e-4)\n ? stringifyNumberWithLeadingZeroSubscripts(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1)\n ? isHighPrecise\n ? stringifyNumberWithGroupingSeparator(abs, 4)\n : stringifyNumberWithSignificantPrecision(abs, 2)\n : abs.lt(100) || abs.lt(1e4)\n ? stringifyNumberWithGroupingSeparator(abs, isHighPrecise ? 4 : 2)\n : abs.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(abs, 2)\n : stringifyNumberWithAbbreviation(abs);\n\n return `$${formatted}`;\n};\n\nexport type FormatPercentOptions = {\n showPlusGtThanZero?: boolean;\n precision?: number;\n};\n\n/**\n * Format a number as a percentage.\n * @param num - The number to format, 0.3 means 30%.\n * @param options - The options to format the number.\n * @param options.showPlusGtThanZero - Whether to show the plus sign if the number is greater than zero.\n * @param options.precision - The precision to format the number.\n * @returns\n */\nexport const formatPercent = (\n num: BigNumber.Value = \"\",\n options: FormatPercentOptions = {},\n) => {\n if (!isValidNumber(num)) return \"-- %\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(1e-4)) return \"0%\";\n if (abs.lt(100))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 2)}`;\n if (abs.lt(1e3))\n return `${sign}${stringifyPercent(abs, options?.precision ?? 1)}`;\n return `${sign}> 99,999%`;\n};\n\nconst stringifyPercent = (bn: BigNumber, precision: number) =>\n `${bn.times(100).decimalPlaces(precision, BigNumber.ROUND_HALF_UP).toString()}%`;\n\nexport type FormatMultiplierOptions = {\n showPlusGtThanZero?: boolean;\n};\n\nexport const formatMultiplier = (\n num: BigNumber.Value = \"\",\n options: FormatMultiplierOptions = { showPlusGtThanZero: true },\n) => {\n if (!isValidNumber(num)) return \"0%\";\n\n const bn = new SafeBigNumber(num);\n const negative = bn.lt(0);\n const abs = bn.abs();\n const sign = negative ? \"-\" : options?.showPlusGtThanZero ? \"+\" : \"\";\n\n if (abs.lt(0.01)) return \"0%\";\n if (abs.lt(10))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 2)}X`;\n if (abs.lt(100))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 1)}X`;\n if (abs.lt(1e5))\n return `${sign}${stringifyNumberWithGroupingSeparator(abs, 0)}X`;\n return `${sign}>99,999%`;\n};\n\nexport const formatCount = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e5)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(bn);\n};\n\nexport const formatCount2 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(1e3).integerValue(BigNumber.ROUND_DOWN).times(1e3),\n 0,\n );\n};\n\nexport const formatCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return stringifyNumberWithGroupingSeparator(bn, 0);\n};\n\nexport const displayCount4 = (num: BigNumber.Value = \"\") =>\n isValidNumber(num) ? stringifyNumberWithGroupingSeparator(num, 0) : \"--\";\n\nexport const displayCount3 = (num: BigNumber.Value = \"\") => {\n if (!isValidNumber(num)) return \"--\";\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? stringifyNumberWithGroupingSeparator(bn, 0)\n : stringifyNumberWithAbbreviation(\n bn.div(100).integerValue(BigNumber.ROUND_DOWN).times(100),\n );\n};\n\nconst subscriptDigits = [\n \"₀\",\n \"₁\",\n \"₂\",\n \"₃\",\n \"₄\",\n \"₅\",\n \"₆\",\n \"₇\",\n \"₈\",\n \"₉\",\n \"₁₀\",\n \"₁₁\",\n \"₁₂\",\n \"₁₃\",\n \"₁₄\",\n \"₁₅\",\n \"₁₆\",\n \"₁₇\",\n \"₁₈\",\n \"₁₉\",\n \"₂₀\",\n \"₂₁\",\n \"₂₂\",\n \"₂₃\",\n \"₂₄\",\n \"₂₅\",\n \"₂₆\",\n \"₂₇\",\n \"₂₈\",\n \"₂₉\",\n \"₃₀\",\n \"₃₁\",\n \"₃₂\",\n \"₃₃\",\n \"₃₄\",\n \"₃₅\",\n \"₃₆\",\n \"₃₇\",\n \"₃₈\",\n \"₃₉\",\n \"₄₀\",\n];\n\nconst stringifyNumberWithGroupingSeparator = (\n num: BigNumber.Value,\n precision: number = 0,\n rounding: BigNumber.RoundingMode = BigNumber.ROUND_DOWN,\n) => {\n const bn = new SafeBigNumber(num);\n const parts = bn.decimalPlaces(precision, rounding).toString().split(\".\");\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return parts.join(\".\");\n};\n\nconst stringifyNumberWithAbbreviation = (\n num: BigNumber.Value,\n precision: number = 1,\n) => {\n const bn = new SafeBigNumber(num);\n return bn.lt(1e3)\n ? bn.toNumber()\n : bn.lt(1e6)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e3), precision)}K`\n : bn.lt(1e9)\n ? `${stringifyNumberWithGroupingSeparator(bn.div(1e6), precision)}M`\n : bn.lt(1e12)\n ? `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e9), precision)}B`\n : `${stringifyNumberWithGroupingSeparator(bn.dividedBy(1e12), precision)}T`;\n};\n\nconst stringifyNumberWithLeadingZeroSubscripts = (\n num: BigNumber.Value,\n precision: number = 5,\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return \"0\";\n const [integerPart, decimalPart] = bn.toFixed().split(\".\");\n const digits = decimalPart.split(\"\");\n const firstNonZeroIndex = digits.findIndex((num) => \"0\" !== num);\n const precisionDigitsCount = Math.min(\n digits.length - firstNonZeroIndex,\n precision,\n );\n return `${stringifyNumberWithGroupingSeparator(integerPart)}.0`\n .concat(subscriptDigits[firstNonZeroIndex])\n .concat(\n digits\n .slice(firstNonZeroIndex, firstNonZeroIndex + precisionDigitsCount)\n .join(\"\")\n .replace(/\\.?0+$/, \"\"), // trim trailing zeros\n );\n};\n\nconst stringifyNumberWithSignificantPrecision = (\n num: BigNumber,\n precision: number,\n) => {\n const matched = num.toString().match(/\\.0*/); // has leading zeros\n const significantPrecision =\n (matched ? matched[0].length - 1 : 0) + precision;\n return stringifyNumberWithGroupingSeparator(num, significantPrecision);\n};\n\ntype StringifyAmountOptions = {\n precision?: number;\n groupingSeparator?: boolean;\n rounding?: \"up\" | \"down\" | \"ceil\" | \"floor\";\n // abbreviation if number is greater than this value\n acronymMin?: number;\n // display <min if number is less than this value\n min?: number;\n // display >max if number is greater than this value\n max?: number;\n // display this string if number is 0\n zeroDisplay?: string;\n};\n\nconst stringifyAmountWithClippingAndCapping = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const {\n precision = 4,\n min,\n max,\n groupingSeparator,\n rounding,\n zeroDisplay,\n } = options;\n\n const roundingMap = {\n up: BigNumber.ROUND_UP,\n down: BigNumber.ROUND_DOWN,\n ceil: BigNumber.ROUND_CEIL,\n floor: BigNumber.ROUND_FLOOR,\n };\n\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return zeroDisplay ? zeroDisplay : \"0\";\n\n const abs = bn.abs();\n\n if (min && abs.lt(min)) return `<${min}`;\n if (max && abs.gt(max)) return `>${max}`;\n\n if (groupingSeparator) {\n return stringifyNumberWithGroupingSeparator(\n abs,\n precision,\n rounding ? roundingMap[rounding] : undefined,\n );\n }\n\n const rounded = rounding\n ? abs.decimalPlaces(precision, roundingMap[rounding])\n : abs.decimalPlaces(precision);\n return rounded.toString();\n};\n\nconst stringifyAmount = (\n num: BigNumber.Value,\n options: StringifyAmountOptions = {},\n) => {\n const bn = new SafeBigNumber(num);\n if (bn.eq(0)) return options.zeroDisplay ? options.zeroDisplay : \"\";\n\n const { acronymMin = 1e4 } = options;\n const abs = bn.abs();\n if (abs.lt(acronymMin))\n return stringifyAmountWithClippingAndCapping(bn, options);\n\n if (abs.gte(1e15)) {\n return bn.toExponential(2);\n }\n if (abs.gte(1e12)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e12), { ...options, precision: 0 })}T`;\n }\n if (abs.gte(1e9)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e9), { ...options, precision: 0 })}B`;\n }\n if (abs.gte(1e6)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e6), { ...options, precision: 1 })}M`;\n }\n if (abs.gte(1e4)) {\n return `${stringifyAmountWithClippingAndCapping(bn.div(1e3), { ...options, precision: 1 })}K`;\n }\n return stringifyAmountWithClippingAndCapping(bn, options);\n};\n","export function capitalizeString(str: string): string {\n // Convert the string to lowercase\n const lowercaseStr: string = str.toLowerCase();\n // Capitalize the first letter\n const capitalizedStr: string =\n lowercaseStr.charAt(0).toUpperCase() + lowercaseStr.slice(1);\n return capitalizedStr;\n}\n\nexport function camelCaseToSnakeCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase();\n}\n\nexport const findLongestCommonSubString = (str1: string, str2: string) => {\n for (let index = 0; index < str1.length; index++) {\n const ele1 = str1.at(index);\n const ele2 = str2.at(index);\n if (ele1 === ele2) {\n continue;\n }\n return index;\n }\n return -1;\n};\n\nexport function isHex(value: string): boolean {\n const hexRegex = /^[a-f0-9]+$/iu;\n return hexRegex.test(value);\n}\n\nexport function isHexString(value: string): boolean {\n return typeof value === \"string\" && value.startsWith(\"0x\") && isHex(value);\n}\n","/**\n * Format trading pair symbol *\n * Format symbols like \"PERP_BTC_USDT\" according to the specified format\n *\n * @param symbol - Original trading pair symbol in format \"type_base_quote\" (e.g., \"PERP_BTC_USDT\")\n * @param formatString - Format string template, defaults to \"base\"\n * - Supports the following placeholders:\n * - \"type\": Trading type (e.g., \"PERP\")\n * - \"base\": Base currency (e.g., \"BTC\")\n * - \"quote\": Quote currency (e.g., \"USDT\")\n *\n * @returns Formatted string, returns empty string if input is empty\n *\n * @example\n * ```typescript\n * formatSymbol(\"PERP_BTC_USDT\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base\") // \"BTC\"\n * formatSymbol(\"PERP_BTC_USDT\", \"base-type\") // \"BTC-PERP\"\n * formatSymbol(\"SPOT_ETH_USDC\", \"base-quote\") // \"ETH-USDC\"\n * ```\n */\nexport function formatSymbol(\n symbol: string,\n formatString: string = \"base-type\",\n) {\n if (!symbol) {\n return \"\";\n }\n\n // Split symbol by \"_\" to get each component\n const arr = symbol.split(\"_\");\n const type = arr[0]; // Trading type (e.g., PERP, SPOT)\n const base = arr[1]; // Base currency (e.g., BTC, ETH)\n const quote = arr[2]; // Quote currency (e.g., USDT, USDC)\n\n // Use template string to replace placeholders and return formatted result\n return formatString\n .replace(\"type\", type)\n .replace(\"base\", base)\n .replace(\"quote\", quote);\n}\n","import {\n Chain,\n SOLANA_TOKEN_PROTOCOLS,\n TokenProtocol,\n} from \"@liberfi.io/types\";\n\nexport const parseTokenProtocolFamily = (\n chain: Chain,\n protocolFamily: string,\n): TokenProtocol | undefined => {\n switch (chain) {\n case Chain.SOLANA:\n return SOLANA_TOKEN_PROTOCOLS.find((p) =>\n new RegExp(p, \"i\").test(protocolFamily),\n );\n default:\n return undefined;\n }\n};\n\nexport const formatTokenProtocolName = (protocol: TokenProtocol) => {\n return protocol\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n","import { Chain } from \"@liberfi.io/types\";\n\nconst TX_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/tx/${txHash}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/tx/${txHash}\",\n [Chain.POLYGON]: \"https://polygonscan.com/tx/${txHash}\",\n [Chain.BINANCE]: \"https://bscscan.com/tx/${txHash}\",\n [Chain.BINANCE_TESTNET]: \"https://testnet.bscscan.com/tx/${txHash}\",\n [Chain.AVALANCHE]: \"https://snowtrace.io/tx/${txHash}\",\n [Chain.BASE]: \"https://basescan.org/tx/${txHash}\",\n [Chain.BLAST]: \"https://blastracker.xyz/tx/${txHash}\",\n [Chain.ARBITRUM]: \"https://arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_NOVA]: \"https://nova.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_GOERLI]: \"https://goerli.arbiscan.io/tx/${txHash}\",\n [Chain.ARBITRUM_TESTNET_SEPOLIA]: \"https://sepolia.arbiscan.io/tx/${txHash}\",\n};\n\nexport function txExplorerUrl(chainId: Chain, txHash: string) {\n return TX_EXPLORER_URLS[chainId]?.replace(\"${txHash}\", txHash);\n}\n\nconst ACCOUNT_EXPLORER_URLS: Partial<Record<Chain, string>> = {\n [Chain.SOLANA]: \"https://solscan.io/account/${account}\",\n [Chain.ETHEREUM]: \"https://etherscan.io/address/${account}\",\n [Chain.POLYGON]: \"https://polygonscan.com/address/${account}\",\n [Chain.BINANCE]: \"https://bscscan.com/address/${account}\",\n};\n\nexport const accountExplorerUrl = (chainId: Chain, account: string) => {\n return ACCOUNT_EXPLORER_URLS[chainId]?.replace(\"${account}\", account);\n};\n\nexport function searchImageUrl(image: string) {\n return `https://lens.google.com/uploadbyurl?url=${encodeURIComponent(image)}`;\n}\n\nexport function searchTwitterUrl(q: string) {\n return `https://x.com/search?q=${encodeURIComponent(q)}`;\n}\n\nexport function twitterUserUrl(username: string) {\n return `https://x.com/${username}`;\n}\n\nexport function twitterTweetUrl(id: string) {\n return `https://x.com/${id}`;\n}\n\nexport function twitterMediaUrl(id: string) {\n return `https://x.com/${id}`;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const windowGuard = (cb: Function) => {\n if (typeof window !== \"undefined\") {\n cb();\n }\n};\n\nexport const getGlobalObject = () => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n // @ts-ignore\n if (typeof global !== \"undefined\") {\n // @ts-ignore\n return global;\n }\n throw new Error(\"cannot find the global object\");\n};\n\n/// get timestamp\nexport const getTimestamp = (): number => {\n if (typeof window !== \"undefined\") {\n // @ts-ignore\n const timeOffset = getGlobalObject()?.__LIBERFI_timestamp_offset;\n if (typeof timeOffset === \"number\") {\n return Date.now() + (timeOffset || 0);\n }\n }\n return Date.now();\n};\n","export { default as version } from \"./version\";\nexport * from \"./chain\";\nexport * from \"./dateTime\";\nexport * from \"./fetch\";\nexport * from \"./number\";\nexport * from \"./string\";\nexport * from \"./symbol\";\nexport * from \"./tokenProtocols\";\nexport * from \"./urls\";\nexport * from \"./window\";\n\nexport { throttle, debounce } from \"lodash-es\";\n"],"mappings":"0nBAOI,OAAO,QAAW,cACpB,OAAO,oBAAsB,OAAO,qBAAuB,CAAC,EAC5D,OAAO,oBAAoB,mBAAmB,EAAI,SAGpD,IAAOA,EAAQ,QCZf,OAAS,SAAAC,MAAa,oBAEf,IAAMC,EAAWC,GAA4B,SAASA,CAAO,EAEvDC,GAAWD,GAA4B,KAAKA,EAAQ,SAAS,EAAE,CAAC,GAEhEE,GAAgBF,GAEzB,OAAOA,GAAY,UACnBA,EAAQ,WAAW,IAAI,GACvB,gBAAgB,KAAKA,EAAQ,MAAM,CAAC,CAAC,EAE9BD,EAAQC,CAAO,EACjBA,EAGIG,GAAaH,GACL,CACjBF,EAAM,wBACNA,EAAM,yBACNA,EAAM,cACNA,EAAM,eACNA,EAAM,iBACNA,EAAM,eACR,EACkB,SAAS,GAAGE,CAAO,EAAW,EAGrCI,GAAYJ,GAChB,CAACF,EAAM,OAAQA,EAAM,cAAeA,EAAM,cAAc,EAAE,SAC/D,GAAGE,CAAO,EACZ,EAGIK,EAA6C,CACjD,CAACP,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,eAAe,EAAG,kBACzB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,WAAW,EAAG,cACrB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,WAAW,EAAG,cACrB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,UAAU,EAAG,aACpB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,EAAE,EAAG,KACZ,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,EAAE,EAAG,KACZ,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,UAAU,EAAG,aACpB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,aAAa,EAAG,gBACvB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,qBAAqB,EAAG,wBAC/B,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,UAAU,EAAG,aACpB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,eAAe,EAAG,kBACzB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,aAAa,EAAG,gBACvB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,UAAU,EAAG,aACpB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,aAAa,EAAG,gBACvB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,GAAG,EAAG,MACb,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,SAAS,EAAG,YACnB,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,QAAQ,EAAG,WAClB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,YAAY,EAAG,eACtB,CAACA,EAAM,WAAW,EAAG,cACrB,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,MAAM,EAAG,SAChB,CAACA,EAAM,OAAO,EAAG,UACjB,CAACA,EAAM,IAAI,EAAG,OACd,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,KAAK,EAAG,QACf,CAACA,EAAM,IAAI,EAAG,MAChB,EAEO,SAASQ,GAAUN,EAAoC,CAC5D,IAAMO,EAAOF,EAAWL,CAAO,EAC/B,OAAOO,EACH,4CAA4C,mBAAmBA,CAAI,CAAC,OACpE,MACN,CAEO,SAASC,GAAUR,EAAoC,CAC5D,OAAOK,EAAWL,CAAO,CAC3B,CAEO,SAASS,GAAcF,EAAiC,CAC7D,IAAMG,EAAW,OAAO,KAAKL,CAAU,EAAE,KACtCM,GAAQN,EAAWM,CAAY,IAAMJ,CACxC,EACA,OAAOG,GAAiC,MAC1C,CC3OA,IAAME,EAAM,KAAK,IAAI,EAEfC,EAAS,GACTC,EAAO,GAAKD,EACZE,EAAM,GAAKD,EACXE,EAAO,IAAMD,EAENE,GACXC,GAC6B,CAC7B,IAAMC,EAAe,KAAK,MAAMD,EAAe,GAAI,EAC7CE,EAAQ,KAAK,MAAMD,EAAe,IAAI,EACtCE,EAAU,KAAK,MAAOF,EAAe,KAAQ,EAAE,EAC/CG,EAAUH,EAAe,GAC/B,MAAO,CAACC,EAAOC,EAASC,CAAO,CACjC,EAGaC,GAAqBC,GAAqC,CACrE,IAAMC,EAAOD,aAAqB,KAAOA,EAAY,IAAI,KAAKA,CAAS,EACjEE,EAAOD,EAAK,YAAY,EACxBE,EAAQ,OAAOF,EAAK,SAAS,EAAI,CAAC,EAAE,SAAS,EAAG,GAAG,EACnDG,EAAM,OAAOH,EAAK,QAAQ,CAAC,EAAE,SAAS,EAAG,GAAG,EAC5CL,EAAQ,OAAOK,EAAK,SAAS,CAAC,EAAE,SAAS,EAAG,GAAG,EAC/CJ,EAAU,OAAOI,EAAK,WAAW,CAAC,EAAE,SAAS,EAAG,GAAG,EACnDH,EAAU,OAAOG,EAAK,WAAW,CAAC,EAAE,SAAS,EAAG,GAAG,EACzD,MAAO,GAAGC,CAAI,IAAIC,CAAK,IAAIC,CAAG,IAAIR,CAAK,IAAIC,CAAO,IAAIC,CAAO,EAC/D,EAEO,SAASO,GACdC,EACAC,EACM,CACN,IAAMC,EAAcD,GAAa,IAAI,KAC/BE,EAAa,IAAI,KAAKD,CAAW,EACvC,OAAAC,EAAW,QAAQD,EAAY,QAAQ,EAAIF,CAAI,EACxCG,CACT,CAEA,SAASC,EAA2BT,EAAsB,CACxD,MAAI,CAACA,GAAQ,OAAO,MAAMA,CAAI,GAAKA,GAAQ,EAClCb,EAELa,EAAO,KACFA,EAAO,IAETA,CACT,CAEA,SAASU,EAAqBV,EAA8C,CAC1E,GAAI,CAACA,EACH,OAAOb,EAET,GAAI,OAAOa,GAAS,SAClB,OAAOS,EAA2BT,CAAI,EAExC,GAAI,OAAOA,GAAS,SAAU,CAC5B,IAAMW,EAAS,KAAK,MAAMX,CAAI,EAC9B,OAAOS,EAA2BE,CAAM,CAC1C,CACA,OAAIX,aAAgB,KACXA,EAAK,QAAQ,EAEfb,CACT,CAEO,SAASyB,GACdZ,EACQ,CACR,IAAMa,EAAc,KAAK,OACtB,KAAK,IAAI,EAAIH,EAAqBV,CAAI,GAAK,GAC9C,EACA,OAAIa,GAAetB,EAEV,GADO,KAAK,MAAMsB,EAActB,CAAI,CAC5B,IAEbsB,GAAevB,EAEV,GADM,KAAK,MAAMuB,EAAcvB,CAAG,CAC3B,IAEZuB,GAAexB,EAEV,GADO,KAAK,MAAMwB,EAAcxB,CAAI,CAC5B,IAEbwB,GAAezB,EAEV,GADS,KAAK,MAAMyB,EAAczB,CAAM,CAC9B,IAEZ,GAAGyB,CAAW,GACvB,CAEO,SAASC,EACdf,EACAgB,EACQ,CACR,IAAMC,EAAcD,EAChBA,aAAe,KACbA,EAAI,QAAQ,EACZA,EACF,KAAK,IAAI,EACPE,EACJlB,aAAqB,KAAOA,EAAU,QAAQ,EAAIA,EAC9CmB,EAAqBF,EAAcC,EACzC,OAAO,KAAK,MAAMC,EAAqB,GAAI,CAC7C,CAWA,IAAMC,EAAsB,CAC1B,QAAS,WACT,WAAY,OACZ,WAAY,OACZ,SAAU,OACV,QAAS,OACT,SAAU,MACZ,EAUO,SAASC,GACdrB,EACAsB,EAAqC,CAAC,EAC9B,CACR,IAAMxB,EAAUiB,EAAaf,CAAS,EAEhCuB,EAAe,CACnB,QAASD,EAAQ,SAAWF,EAAoB,QAChD,WAAYE,EAAQ,YAAcF,EAAoB,WACtD,WAAYE,EAAQ,YAAcF,EAAoB,WACtD,SAAUE,EAAQ,UAAYF,EAAoB,SAClD,QAASE,EAAQ,SAAWF,EAAoB,QAChD,SAAUE,EAAQ,UAAYF,EAAoB,QACpD,EAEM/B,EAAS,GACTC,EAAO,GAAKD,EACZE,EAAM,GAAKD,EACXE,EAAO,IAAMD,EAEnB,GAAIO,EAAU,GACZ,OAAOyB,EAAa,QAEtB,GAAIzB,EAAUT,EACZ,OAAOkC,EAAa,WAAW,QAAQ,MAAOzB,EAAQ,SAAS,CAAC,EAElE,GAAIA,EAAUR,EAAM,CAClB,IAAMO,EAAU,KAAK,MAAMC,EAAUT,CAAM,EAC3C,OAAOkC,EAAa,WAAW,QAAQ,MAAO1B,EAAQ,SAAS,CAAC,CAClE,CACA,GAAIC,EAAUP,EAAK,CACjB,IAAMK,EAAQ,KAAK,MAAME,EAAUR,CAAI,EACvC,OAAOiC,EAAa,SAAS,QAAQ,MAAO3B,EAAM,SAAS,CAAC,CAC9D,CACA,GAAIE,EAAUN,EAAM,CAClB,IAAMc,EAAO,KAAK,MAAMR,EAAUP,CAAG,EACrC,OAAOgC,EAAa,QAAQ,QAAQ,MAAOjB,EAAK,SAAS,CAAC,CAC5D,CACA,IAAMkB,EAAQ,KAAK,MAAM1B,EAAUN,CAAI,EACvC,OAAO+B,EAAa,SAAS,QAAQ,MAAOC,EAAM,SAAS,CAAC,CAC9D,CAQO,SAASC,GACdC,EACAJ,EAAqC,CAAC,EAC9B,CACR,IAAMxB,EAAU,KAAK,MAAM4B,EAAM,GAAI,EACrC,OAAOC,EAAmB7B,EAASwB,CAAO,CAC5C,CAeO,SAASK,EACdD,EACAJ,EAAqC,CAAC,EAC9B,CACR,IAAMC,EAAe,CACnB,QAASD,EAAQ,SAAWF,EAAoB,QAChD,WAAYE,EAAQ,YAAcF,EAAoB,WACtD,WAAYE,EAAQ,YAAcF,EAAoB,WACtD,SAAUE,EAAQ,UAAYF,EAAoB,SAClD,QAASE,EAAQ,SAAWF,EAAoB,QAChD,SAAUE,EAAQ,UAAYF,EAAoB,QACpD,EAEM/B,EAAS,GACTC,EAAO,GAAKD,EACZE,EAAM,GAAKD,EACXE,EAAO,IAAMD,EAEnB,GAAImC,EAAM,GACR,OAAOH,EAAa,QAEtB,GAAIG,EAAMrC,EACR,OAAOkC,EAAa,WAAW,QAAQ,MAAOG,EAAI,SAAS,CAAC,EAE9D,GAAIA,EAAMpC,EAAM,CACd,IAAMO,EAAU,KAAK,MAAM6B,EAAMrC,CAAM,EACvC,OAAOkC,EAAa,WAAW,QAAQ,MAAO1B,EAAQ,SAAS,CAAC,CAClE,CACA,GAAI6B,EAAMnC,EAAK,CACb,IAAMK,EAAQ,KAAK,MAAM8B,EAAMpC,CAAI,EACnC,OAAOiC,EAAa,SAAS,QAAQ,MAAO3B,EAAM,SAAS,CAAC,CAC9D,CACA,GAAI8B,EAAMlC,EAAM,CACd,IAAMc,EAAO,KAAK,MAAMoB,EAAMnC,CAAG,EACjC,OAAOgC,EAAa,QAAQ,QAAQ,MAAOjB,EAAK,SAAS,CAAC,CAC5D,CACA,IAAMkB,EAAQ,KAAK,MAAME,EAAMlC,CAAI,EACnC,OAAO+B,EAAa,SAAS,QAAQ,MAAOC,EAAM,SAAS,CAAC,CAC9D,CC9OA,OAAS,YAAAI,MAAgB,oBAEzB,SAAsBC,EACpBC,EACAC,EACY,QAAAC,EAAA,sBACZ,GAAI,CAACF,EAAI,WAAW,MAAM,EACxB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,IAAMG,EAAW,MAAM,MAAMH,EAAKI,EAAAC,EAAA,GAC7BJ,GAD6B,CAIhC,QAASK,EAAeL,EAAQ,QAASA,EAAQ,MAAM,CACzD,EAAC,EAED,GAAIE,EAAS,GAEX,OADY,MAAMA,EAAS,KAAK,EAGhC,GAAI,CACF,IAAMI,EAAW,MAAMJ,EAAS,KAAK,EACrC,MAAIA,EAAS,SAAW,IAChB,IAAIK,EACRD,EAAS,SAAWA,EAAS,MAAQJ,EAAS,WAC9CI,EAAS,IACX,EAEI,IAAI,MAAMA,EAAS,SAAWA,EAAS,MAAQJ,EAAS,UAAU,CAC1E,OAASM,EAAG,CACV,MAAMA,CACR,CAEJ,GAEA,SAASH,EACPI,EAAuB,CAAC,EACxBC,EACa,CAEb,IAAMC,EAAW,IAAI,QAAQF,CAAO,EAGpC,OAAKE,EAAS,IAAI,cAAc,IAC1BD,IAAW,SACbC,EAAS,OAAO,eAAgB,gCAAgC,EAEhEA,EAAS,OAAO,eAAgB,mCAAmC,GAIhEA,CACT,CAEA,SAAsBC,GACpBb,EACAC,EACY,QAAAC,EAAA,sBACZ,OAAO,MAAMH,EAAWC,EAAKK,EAAA,CAC3B,OAAQ,OACLJ,EACJ,CACH,GAEA,SAAsBa,GACpBd,EACAe,EACAd,EACY,QAAAC,EAAA,sBACZ,OAAO,MAAMH,EAAWC,EAAKK,EAAA,CAC3B,OAAQ,OACR,KAAM,KAAK,UAAUU,CAAI,GACtBd,EACJ,CACH,GAEA,SAAsBe,GACpBhB,EACAe,EACAd,EACY,QAAAC,EAAA,sBACZ,OAAO,MAAMH,EAAWC,EAAKK,EAAA,CAC3B,OAAQ,MACR,KAAM,KAAK,UAAUU,CAAI,GACtBd,EACJ,CACH,GAEA,SAAsBgB,GACpBjB,EACAC,EACY,QAAAC,EAAA,sBACZ,OAAO,MAAMH,EAAWC,EAAKK,EAAA,CAC3B,OAAQ,UACLJ,EACJ,CACH,GAEA,SAAsBiB,GACpBlB,EACAmB,EACY,QAAAjB,EAAA,sBACZ,OAAO,MAAMH,EAAWC,EAAKmB,CAAI,CACnC,GCzGA,OAAOC,MAAe,eAEf,IAAMC,EAAN,cAA4BC,CAAU,CAC3C,YAAYC,EAAuBC,EAAe,CAChD,GAAI,CACF,MAAMD,GAAA,KAAAA,EAAO,EAAGC,CAAI,CACtB,OAASC,EAAG,CACV,QAAQ,MAAM,kCAAmCA,CAAC,EAClD,MAAM,EAAGD,CAAI,CACf,CACF,CACF,EAMaE,EAAiBH,GAAiB,CAC7C,GACgB,OAAOA,GAApB,UAA2B,CAAC,MAAMA,CAAG,GACtCA,aAAeF,GACfE,aAAeD,EAEf,MAAO,GAET,GAAiB,OAAOC,GAApB,SACF,MAAO,GAET,IAAMI,EAAW,OAAO,WAAWJ,CAAG,EACtC,MAAO,CAAC,MAAMI,CAAQ,CACxB,EAEaC,GAAsBL,IACnB,OAAOA,GAApB,UAA2B,CAAC,CAACA,IAC9BG,EAA2B,OAAOH,GAApB,SAA0B,OAAOA,CAAG,EAAIA,CAAG,EAE9CM,GAAmB,CAACC,EAAoB,KACnD,8BAA8B,KAAKA,CAAS,EAMjCC,GAAe,CAC1BR,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EAAYD,EAAI,GAAG,IAAK,EAC1BA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,CAAC,EACNA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRE,EAAqCF,EAAK,CAAC,EAC3CG,EAAgCH,CAAG,EAE7C,OAAI,OAAOC,CAAS,IAAM,EAAU,GAAGA,CAAS,GAC5CF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqB,GAAGA,CAAS,EAEvD,EAEaG,GAAgB,CAC3BhB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EAAYD,EAAI,GAAG,IAAK,EAC1BA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,CAAC,EACNA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRE,EAAqCF,EAAK,CAAC,EAC3CG,EAAgCH,CAAG,EAE7C,OAAI,OAAOC,CAAS,IAAM,EAAU,GAAGA,CAAS,GAC5CF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqB,GAAGA,CAAS,EAEvD,EAEaI,GAAgB,CAC3BjB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EAAYD,EAAI,GAAG,IAAK,EAC1BA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,CAAC,EACNA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRA,EAAI,cAAc,EAAGb,EAAU,UAAU,EAAE,SAAS,EACpDa,EAAI,GAAG,GAAG,EACRE,EAAqCF,EAAK,CAAC,EAC3CG,EAAgCH,EAAK,CAAC,EAEhD,OAAI,OAAOC,CAAS,IAAM,EAAU,GAAGA,CAAS,GAC5CF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqB,GAAGA,CAAS,EAEvD,EAEaK,GAAkB,CAC7BlB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EAAYD,EAAI,GAAG,IAAK,EAC1B,KACAA,EAAI,GAAG,CAAC,EACN,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIE,EAAqCF,EAAK,CAAC,CAAC,GAChD,IAAIG,EAAgCH,CAAG,CAAC,GAElD,OAAaC,IAAT,KAA2BA,EAC3BF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqBA,CAE3C,EAEaM,GAAmB,CAC9BnB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EACbU,EAAaR,EAAI,IAAI,GAAG,EAAE,aAAab,EAAU,UAAU,EAAE,MAAM,GAAG,EAEtEc,EACJD,EAAI,GAAG,IAAI,GAAKA,EAAI,GAAG,IAAK,EACxB,KACAA,EAAI,GAAG,CAAC,EACN,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,IAAI,EACT,IAAIG,EAAgCK,CAAU,CAAC,GAC/C,IAAIC,EAAgBT,EAAK,CACvB,WAAY,IACZ,kBAAmB,EACrB,CAAC,CAAC,GAEhB,OAAaC,IAAT,KAA2BA,EAC3BF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqBA,CAE3C,EAEaS,GAAmB,CAC9BtB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EACbU,EAAaR,EAAI,IAAI,GAAG,EAAE,aAAab,EAAU,UAAU,EAAE,MAAM,GAAG,EAEtEc,EACJD,EAAI,GAAG,IAAI,GAAKA,EAAI,GAAG,IAAK,EACxB,KACAA,EAAI,GAAG,CAAC,EACN,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9C,IAAIgB,EAAgCK,EAAY,CAAC,CAAC,GAE9D,OAAaP,IAAT,KAA2BA,EAC3BF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqBA,CAE3C,EAEaU,GAAmB,CAC9BvB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EACJD,EAAI,GAAG,IAAI,GAAKA,EAAI,GAAG,IAAK,EACxB,KACAA,EAAI,GAAG,CAAC,EACN,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIE,EAAqCF,EAAK,CAAC,CAAC,GAChD,IAAIG,EAAgCH,CAAG,CAAC,GAEpD,OAAaC,IAAT,KAA2BA,EAC3BF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqBA,CAE3C,EAEaW,GAAmB,CAC9BxB,EAAuB,GACvBS,EAA+B,CAAE,mBAAoB,EAAM,IACxD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EAEbG,EACJD,EAAI,GAAG,IAAI,GAAKA,EAAI,GAAG,IAAK,EACxB,KACAA,EAAI,GAAG,GAAG,EACR,IAAIA,EAAI,cAAc,EAAGb,EAAU,UAAU,CAAC,GAC9Ca,EAAI,GAAG,GAAG,EACR,IAAIE,EAAqCF,EAAK,CAAC,CAAC,GAChD,IAAIG,EAAgCH,EAAK,CAAC,CAAC,GAErD,OAAaC,IAAT,KAA2BA,EAC3BF,EAAiB,IAAIE,CAAS,GAC7BJ,GAAA,MAAAA,EAAS,mBACP,IAAII,CAAS,GADqBA,CAE3C,EAMaY,GAAc,CACzBzB,EAAuB,GACvBS,EAA8B,CAAE,cAAe,EAAK,IACjD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,GAAIU,EAAG,GAAG,CAAC,EAAG,MAAO,KAErB,IAAME,EAAMF,EAAG,IAAI,EACb,CAAE,cAAAgB,CAAc,EAAIjB,EAc1B,MAAO,GAZWG,EAAI,GAAG,IAAI,EACzBe,EAAyCf,EAAKc,EAAgB,EAAI,CAAC,EACnEd,EAAI,GAAG,CAAC,EACNc,EACEZ,EAAqCF,EAAK,CAAC,EAC3CgB,EAAwChB,EAAK,CAAC,EAChDA,EAAI,GAAG,GAAG,GAAKA,EAAI,GAAG,GAAG,EACvBE,EAAqCF,EAAKc,EAAgB,EAAI,CAAC,EAC/Dd,EAAI,GAAG,GAAG,EACRE,EAAqCF,EAAK,CAAC,EAC3CG,EAAgCH,CAAG,CAE1B,EACrB,EAEaiB,GAAiB,CAC5B7B,EAAuB,GACvBS,EAA8B,CAAE,cAAe,EAAK,IACjD,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,GAAIU,EAAG,GAAG,CAAC,EAAG,MAAO,KAErB,IAAME,EAAMF,EAAG,IAAI,EACb,CAAE,cAAAgB,CAAc,EAAIjB,EAc1B,MAAO,IAZWG,EAAI,GAAG,IAAI,EACzBe,EAAyCf,EAAKc,EAAgB,EAAI,CAAC,EACnEd,EAAI,GAAG,CAAC,EACNc,EACEZ,EAAqCF,EAAK,CAAC,EAC3CgB,EAAwChB,EAAK,CAAC,EAChDA,EAAI,GAAG,GAAG,GAAKA,EAAI,GAAG,GAAG,EACvBE,EAAqCF,EAAKc,EAAgB,EAAI,CAAC,EAC/Dd,EAAI,GAAG,GAAG,EACRE,EAAqCF,EAAK,CAAC,EAC3CG,EAAgCH,CAAG,CAEzB,EACtB,EAeakB,GAAgB,CAC3B9B,EAAuB,GACvBS,EAAgC,CAAC,IAC9B,CA9UL,IAAAsB,EAAAC,EA+UE,GAAI,CAAC7B,EAAcH,CAAG,EAAG,MAAO,OAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EACbuB,EAAOtB,EAAW,IAAMF,GAAA,MAAAA,EAAS,mBAAqB,IAAM,GAElE,OAAIG,EAAI,GAAG,IAAI,EAAU,KACrBA,EAAI,GAAG,GAAG,EACL,GAAGqB,CAAI,GAAGC,EAAiBtB,GAAKmB,EAAAtB,GAAA,YAAAA,EAAS,YAAT,KAAAsB,EAAsB,CAAC,CAAC,GAC7DnB,EAAI,GAAG,GAAG,EACL,GAAGqB,CAAI,GAAGC,EAAiBtB,GAAKoB,EAAAvB,GAAA,YAAAA,EAAS,YAAT,KAAAuB,EAAsB,CAAC,CAAC,GAC1D,GAAGC,CAAI,WAChB,EAEMC,EAAmB,CAACxB,EAAeyB,IACvC,GAAGzB,EAAG,MAAM,GAAG,EAAE,cAAcyB,EAAWpC,EAAU,aAAa,EAAE,SAAS,CAAC,IAMlEqC,GAAmB,CAC9BpC,EAAuB,GACvBS,EAAmC,CAAE,mBAAoB,EAAK,IAC3D,CACH,GAAI,CAACN,EAAcH,CAAG,EAAG,MAAO,KAEhC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAC1BW,EAAWD,EAAG,GAAG,CAAC,EAClBE,EAAMF,EAAG,IAAI,EACbuB,EAAOtB,EAAW,IAAMF,GAAA,MAAAA,EAAS,mBAAqB,IAAM,GAElE,OAAIG,EAAI,GAAG,GAAI,EAAU,KACrBA,EAAI,GAAG,EAAE,EACJ,GAAGqB,CAAI,GAAGnB,EAAqCF,EAAK,CAAC,CAAC,IAC3DA,EAAI,GAAG,GAAG,EACL,GAAGqB,CAAI,GAAGnB,EAAqCF,EAAK,CAAC,CAAC,IAC3DA,EAAI,GAAG,GAAG,EACL,GAAGqB,CAAI,GAAGnB,EAAqCF,EAAK,CAAC,CAAC,IACxD,GAAGqB,CAAI,UAChB,EAEaI,GAAc,CAACrC,EAAuB,KAAO,CACxD,GAAI,CAACG,EAAcH,CAAG,EAAG,MAAO,KAChC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,OAAOU,EAAG,GAAG,GAAG,EACZI,EAAqCJ,EAAI,CAAC,EAC1CK,EAAgCL,CAAE,CACxC,EAEa4B,GAAe,CAACtC,EAAuB,KAAO,CACzD,GAAI,CAACG,EAAcH,CAAG,EAAG,MAAO,KAChC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,OAAOU,EAAG,GAAG,GAAG,EACZI,EAAqCJ,EAAI,CAAC,EAC1CK,EACEL,EAAG,IAAI,GAAG,EAAE,aAAaX,EAAU,UAAU,EAAE,MAAM,GAAG,EACxD,CACF,CACN,EAEawC,GAAe,CAACvC,EAAuB,KAAO,CACzD,GAAI,CAACG,EAAcH,CAAG,EAAG,MAAO,KAChC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,OAAOc,EAAqCJ,EAAI,CAAC,CACnD,EAEa8B,GAAgB,CAACxC,EAAuB,KACnDG,EAAcH,CAAG,EAAIc,EAAqCd,EAAK,CAAC,EAAI,KAEzDyC,GAAgB,CAACzC,EAAuB,KAAO,CAC1D,GAAI,CAACG,EAAcH,CAAG,EAAG,MAAO,KAChC,IAAMU,EAAK,IAAIZ,EAAcE,CAAG,EAChC,OAAOU,EAAG,GAAG,GAAG,EACZI,EAAqCJ,EAAI,CAAC,EAC1CK,EACEL,EAAG,IAAI,GAAG,EAAE,aAAaX,EAAU,UAAU,EAAE,MAAM,GAAG,CAC1D,CACN,EAEM2C,EAAkB,CACtB,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACF,EAEM5B,EAAuC,CAC3Cd,EACAmC,EAAoB,EACpBQ,EAAmC5C,EAAU,aAC1C,CAEH,IAAM6C,EADK,IAAI9C,EAAcE,CAAG,EACf,cAAcmC,EAAWQ,CAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,EACxE,OAAAC,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAE,QAAQ,wBAAyB,GAAG,EACjDA,EAAM,KAAK,GAAG,CACvB,EAEM7B,EAAkC,CACtCf,EACAmC,EAAoB,IACjB,CACH,IAAMzB,EAAK,IAAIZ,EAAcE,CAAG,EAChC,OAAOU,EAAG,GAAG,GAAG,EACZA,EAAG,SAAS,EACZA,EAAG,GAAG,GAAG,EACP,GAAGI,EAAqCJ,EAAG,IAAI,GAAG,EAAGyB,CAAS,CAAC,IAC/DzB,EAAG,GAAG,GAAG,EACP,GAAGI,EAAqCJ,EAAG,IAAI,GAAG,EAAGyB,CAAS,CAAC,IAC/DzB,EAAG,GAAG,IAAI,EACR,GAAGI,EAAqCJ,EAAG,UAAU,GAAG,EAAGyB,CAAS,CAAC,IACrE,GAAGrB,EAAqCJ,EAAG,UAAU,IAAI,EAAGyB,CAAS,CAAC,GAClF,EAEMR,EAA2C,CAC/C3B,EACAmC,EAAoB,IACjB,CACH,IAAMzB,EAAK,IAAIZ,EAAcE,CAAG,EAChC,GAAIU,EAAG,GAAG,CAAC,EAAG,MAAO,IACrB,GAAM,CAACmC,EAAaC,CAAW,EAAIpC,EAAG,QAAQ,EAAE,MAAM,GAAG,EACnDqC,EAASD,EAAY,MAAM,EAAE,EAC7BE,EAAoBD,EAAO,UAAW/C,GAAgBA,IAAR,GAAW,EACzDiD,EAAuB,KAAK,IAChCF,EAAO,OAASC,EAChBb,CACF,EACA,MAAO,GAAGrB,EAAqC+B,CAAW,CAAC,KACxD,OAAOH,EAAgBM,CAAiB,CAAC,EACzC,OACCD,EACG,MAAMC,EAAmBA,EAAoBC,CAAoB,EACjE,KAAK,EAAE,EACP,QAAQ,SAAU,EAAE,CACzB,CACJ,EAEMrB,EAA0C,CAC9C5B,EACAmC,IACG,CACH,IAAMe,EAAUlD,EAAI,SAAS,EAAE,MAAM,MAAM,EACrCmD,GACHD,EAAUA,EAAQ,CAAC,EAAE,OAAS,EAAI,GAAKf,EAC1C,OAAOrB,EAAqCd,EAAKmD,CAAoB,CACvE,EAgBMC,EAAwC,CAC5CpD,EACAS,EAAkC,CAAC,IAChC,CACH,GAAM,CACJ,UAAA0B,EAAY,EACZ,IAAAkB,EACA,IAAAC,EACA,kBAAAC,EACA,SAAAZ,EACA,YAAAa,CACF,EAAI/C,EAEEgD,EAAc,CAClB,GAAI1D,EAAU,SACd,KAAMA,EAAU,WAChB,KAAMA,EAAU,WAChB,MAAOA,EAAU,WACnB,EAEMW,EAAK,IAAIZ,EAAcE,CAAG,EAChC,GAAIU,EAAG,GAAG,CAAC,EAAG,OAAO8C,GAA4B,IAEjD,IAAM5C,EAAMF,EAAG,IAAI,EAEnB,OAAI2C,GAAOzC,EAAI,GAAGyC,CAAG,EAAU,IAAIA,CAAG,GAClCC,GAAO1C,EAAI,GAAG0C,CAAG,EAAU,IAAIA,CAAG,GAElCC,EACKzC,EACLF,EACAuB,EACAQ,EAAWc,EAAYd,CAAQ,EAAI,MACrC,GAGcA,EACZ/B,EAAI,cAAcuB,EAAWsB,EAAYd,CAAQ,CAAC,EAClD/B,EAAI,cAAcuB,CAAS,GAChB,SAAS,CAC1B,EAEMd,EAAkB,CACtBrB,EACAS,EAAkC,CAAC,IAChC,CACH,IAAMC,EAAK,IAAIZ,EAAcE,CAAG,EAChC,GAAIU,EAAG,GAAG,CAAC,EAAG,OAAOD,EAAQ,YAAcA,EAAQ,YAAc,GAEjE,GAAM,CAAE,WAAAiD,EAAa,GAAI,EAAIjD,EACvBG,EAAMF,EAAG,IAAI,EACnB,OAAIE,EAAI,GAAG8C,CAAU,EACZN,EAAsC1C,EAAID,CAAO,EAEtDG,EAAI,IAAI,IAAI,EACPF,EAAG,cAAc,CAAC,EAEvBE,EAAI,IAAI,IAAI,EACP,GAAGwC,EAAsC1C,EAAG,IAAI,IAAI,EAAGiD,EAAAC,EAAA,GAAKnD,GAAL,CAAc,UAAW,CAAE,EAAC,CAAC,IAEzFG,EAAI,IAAI,GAAG,EACN,GAAGwC,EAAsC1C,EAAG,IAAI,GAAG,EAAGiD,EAAAC,EAAA,GAAKnD,GAAL,CAAc,UAAW,CAAE,EAAC,CAAC,IAExFG,EAAI,IAAI,GAAG,EACN,GAAGwC,EAAsC1C,EAAG,IAAI,GAAG,EAAGiD,EAAAC,EAAA,GAAKnD,GAAL,CAAc,UAAW,CAAE,EAAC,CAAC,IAExFG,EAAI,IAAI,GAAG,EACN,GAAGwC,EAAsC1C,EAAG,IAAI,GAAG,EAAGiD,EAAAC,EAAA,GAAKnD,GAAL,CAAc,UAAW,CAAE,EAAC,CAAC,IAErF2C,EAAsC1C,EAAID,CAAO,CAC1D,EC5lBO,SAASoD,GAAiBC,EAAqB,CAEpD,IAAMC,EAAuBD,EAAI,YAAY,EAI7C,OADEC,EAAa,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAa,MAAM,CAAC,CAE/D,CAEO,SAASC,GAAqBF,EAAqB,CACxD,OAAOA,EAAI,QAAQ,kBAAmB,OAAO,EAAE,YAAY,CAC7D,CAEO,IAAMG,GAA6B,CAACC,EAAcC,IAAiB,CACxE,QAASC,EAAQ,EAAGA,EAAQF,EAAK,OAAQE,IAAS,CAChD,IAAMC,EAAOH,EAAK,GAAGE,CAAK,EACpBE,EAAOH,EAAK,GAAGC,CAAK,EAC1B,GAAIC,IAASC,EAGb,OAAOF,CACT,CACA,MAAO,EACT,EAEO,SAASG,EAAMC,EAAwB,CAE5C,MADiB,gBACD,KAAKA,CAAK,CAC5B,CAEO,SAASC,GAAYD,EAAwB,CAClD,OAAO,OAAOA,GAAU,UAAYA,EAAM,WAAW,IAAI,GAAKD,EAAMC,CAAK,CAC3E,CCXO,SAASE,GACdC,EACAC,EAAuB,YACvB,CACA,GAAI,CAACD,EACH,MAAO,GAIT,IAAME,EAAMF,EAAO,MAAM,GAAG,EACtBG,EAAOD,EAAI,CAAC,EACZE,EAAOF,EAAI,CAAC,EACZG,EAAQH,EAAI,CAAC,EAGnB,OAAOD,EACJ,QAAQ,OAAQE,CAAI,EACpB,QAAQ,OAAQC,CAAI,EACpB,QAAQ,QAASC,CAAK,CAC3B,CCxCA,OACE,SAAAC,EACA,0BAAAC,MAEK,oBAEA,IAAMC,GAA2B,CACtCC,EACAC,IAC8B,CAC9B,OAAQD,EAAO,CACb,KAAKH,EAAM,OACT,OAAOC,EAAuB,KAAMI,GAClC,IAAI,OAAOA,EAAG,GAAG,EAAE,KAAKD,CAAc,CACxC,EACF,QACE,MACJ,CACF,EAEaE,GAA2BC,GAC/BA,EACJ,MAAM,GAAG,EACT,IAAKC,GAASA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG,ECxBb,OAAS,SAAAC,MAAa,oBAEtB,IAAMC,EAAmD,CACvD,CAACD,EAAM,MAAM,EAAG,kCAChB,CAACA,EAAM,QAAQ,EAAG,oCAClB,CAACA,EAAM,OAAO,EAAG,uCACjB,CAACA,EAAM,OAAO,EAAG,mCACjB,CAACA,EAAM,eAAe,EAAG,2CACzB,CAACA,EAAM,SAAS,EAAG,oCACnB,CAACA,EAAM,IAAI,EAAG,oCACd,CAACA,EAAM,KAAK,EAAG,uCACf,CAACA,EAAM,QAAQ,EAAG,mCAClB,CAACA,EAAM,aAAa,EAAG,wCACvB,CAACA,EAAM,uBAAuB,EAAG,0CACjC,CAACA,EAAM,wBAAwB,EAAG,0CACpC,EAEO,SAASE,GAAcC,EAAgBC,EAAgB,CAjB9D,IAAAC,EAkBE,OAAOA,EAAAJ,EAAiBE,CAAO,IAAxB,YAAAE,EAA2B,QAAQ,YAAaD,EACzD,CAEA,IAAME,GAAwD,CAC5D,CAACN,EAAM,MAAM,EAAG,wCAChB,CAACA,EAAM,QAAQ,EAAG,0CAClB,CAACA,EAAM,OAAO,EAAG,6CACjB,CAACA,EAAM,OAAO,EAAG,wCACnB,EAEaO,GAAqB,CAACJ,EAAgBK,IAAoB,CA5BvE,IAAAH,EA6BE,OAAOA,EAAAC,GAAsBH,CAAO,IAA7B,YAAAE,EAAgC,QAAQ,aAAcG,EAC/D,EAEO,SAASC,GAAeC,EAAe,CAC5C,MAAO,2CAA2C,mBAAmBA,CAAK,CAAC,EAC7E,CAEO,SAASC,GAAiBC,EAAW,CAC1C,MAAO,0BAA0B,mBAAmBA,CAAC,CAAC,EACxD,CAEO,SAASC,GAAeC,EAAkB,CAC/C,MAAO,iBAAiBA,CAAQ,EAClC,CAEO,SAASC,GAAgBC,EAAY,CAC1C,MAAO,iBAAiBA,CAAE,EAC5B,CAEO,SAASC,GAAgBD,EAAY,CAC1C,MAAO,iBAAiBA,CAAE,EAC5B,CCjDO,IAAME,GAAeC,GAAiB,CACvC,OAAO,QAAW,aACpBA,EAAG,CAEP,EAEaC,GAAkB,IAAM,CACnC,GAAI,OAAO,YAAe,YACxB,OAAO,WAET,GAAI,OAAO,MAAS,YAClB,OAAO,KAET,GAAI,OAAO,QAAW,YACpB,OAAO,OAGT,GAAI,OAAO,QAAW,YAEpB,OAAO,OAET,MAAM,IAAI,MAAM,+BAA+B,CACjD,EAGaC,GAAe,IAAc,CA1B1C,IAAAC,EA2BE,GAAI,OAAO,QAAW,YAAa,CAEjC,IAAMC,GAAaD,EAAAF,GAAgB,IAAhB,YAAAE,EAAmB,2BACtC,GAAI,OAAOC,GAAe,SACxB,OAAO,KAAK,IAAI,GAAKA,GAAc,EAEvC,CACA,OAAO,KAAK,IAAI,CAClB,ECxBA,OAAS,YAAAC,GAAU,YAAAC,OAAgB","names":["version_default","Chain","hex2int","chainId","int2hex","parseChainId","isTestnet","isSolana","chainSlugs","chainIcon","slug","chainSlug","chainIdBySlug","foundKey","key","NOW","MINUTE","HOUR","DAY","YEAR","millisecondsToHMS","milliseconds","totalSeconds","hours","minutes","seconds","timestampToString","timestamp","date","year","month","day","subtractDaysFromCurrentDate","days","startDate","currentDate","resultDate","maybeSecondsToMilliseconds","formatToMilliseconds","parsed","formatTimeAgo","diffSeconds","secondsSince","now","currentTime","targetTime","diffInMilliseconds","defaultTranslations","formatReadableTime","options","translations","years","formatAge","age","formatAgeInSeconds","ApiError","request","url","options","__async","response","__spreadProps","__spreadValues","_createHeaders","errorMsg","ApiError","e","headers","method","_headers","get","post","data","put","del","mutate","init","BigNumber","SafeBigNumber","BigNumber","num","base","e","isValidNumber","floatNum","canConvertToNumber","isValidTimeframe","timeframe","formatAmount","options","bn","negative","abs","formatted","stringifyNumberWithGroupingSeparator","stringifyNumberWithAbbreviation","formatAmount2","formatAmount3","formatAmountUSD","formatAmountUSD2","roundedAbs","stringifyAmount","formatAmountUSD3","formatAmountUSD4","formatAmountUSD5","formatPrice","isHighPrecise","stringifyNumberWithLeadingZeroSubscripts","stringifyNumberWithSignificantPrecision","formatPriceUSD","formatPercent","_a","_b","sign","stringifyPercent","precision","formatMultiplier","formatCount","formatCount2","formatCount3","displayCount4","displayCount3","subscriptDigits","rounding","parts","integerPart","decimalPart","digits","firstNonZeroIndex","precisionDigitsCount","matched","significantPrecision","stringifyAmountWithClippingAndCapping","min","max","groupingSeparator","zeroDisplay","roundingMap","acronymMin","__spreadProps","__spreadValues","capitalizeString","str","lowercaseStr","camelCaseToSnakeCase","findLongestCommonSubString","str1","str2","index","ele1","ele2","isHex","value","isHexString","formatSymbol","symbol","formatString","arr","type","base","quote","Chain","SOLANA_TOKEN_PROTOCOLS","parseTokenProtocolFamily","chain","protocolFamily","p","formatTokenProtocolName","protocol","word","Chain","TX_EXPLORER_URLS","txExplorerUrl","chainId","txHash","_a","ACCOUNT_EXPLORER_URLS","accountExplorerUrl","account","searchImageUrl","image","searchTwitterUrl","q","twitterUserUrl","username","twitterTweetUrl","id","twitterMediaUrl","windowGuard","cb","getGlobalObject","getTimestamp","_a","timeOffset","throttle","debounce"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liberfi.io/utils",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Liberfi React SDK utils",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -14,15 +14,17 @@
|
|
|
14
14
|
"@babel/preset-env": "^7.22.9",
|
|
15
15
|
"@babel/preset-typescript": "^7.22.5",
|
|
16
16
|
"@types/jest": "^29.5.3",
|
|
17
|
+
"@types/lodash-es": "^4.17.12",
|
|
17
18
|
"babel-jest": "^29.6.1",
|
|
18
19
|
"jest": "^29.6.1",
|
|
19
20
|
"tsup": "^8.5.0",
|
|
20
21
|
"typescript": "^5.9.2",
|
|
21
|
-
"tsconfig": "0.1.
|
|
22
|
+
"tsconfig": "0.1.4"
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
25
|
"bignumber.js": "^9.3.1",
|
|
25
|
-
"
|
|
26
|
+
"lodash-es": "^4.17.21",
|
|
27
|
+
"@liberfi.io/types": "0.1.5"
|
|
26
28
|
},
|
|
27
29
|
"publishConfig": {
|
|
28
30
|
"access": "public"
|