{"version":3,"sources":["../src/core/utils/utils.ts","../src/core/config/coins.ts","../src/services/NaviService.ts"],"names":[],"mappings":";;;;;AAEO,SAAS,aAAA,CACd,SACA,QACA,EAAA;AAEA,EAAO,OAAA,SAAA,CAAU,OAAQ,CAAA,QAAA,EAAU,CAAA,CAAE,UAAU,CAAC,QAAQ,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA;AACrE;AAEO,SAAS,iBAAoB,GAAA;AAClC,EAAA,MAAM,qBAAqB,OAAQ,CAAA,GAAA;AACnC,EAAA,OAAA,CAAQ,MAAM,MAAM;AAAA,GAAC;AACrB,EAAO,OAAA,kBAAA;AACT;AACO,SAAS,iBAAiB,kBAAyB,EAAA;AACxD,EAAA,OAAA,CAAQ,GAAM,GAAA,kBAAA;AAChB;ACYO,IAAM,eAA8B,GAAA;AAAA,EACzC,IAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA;;;AC9Ca,IAAA,WAAA,GAAN,MAAM,YAAY,CAAA;AAAA,EAKvB,WAAc,GAAA;AACZ,IAAM,MAAA,UAAA,GAAa,WAAW,iBAAiB,CAAA;AAC/C,IAAA,IAAI,CAAC,UAAA,CAAW,iBAAkB,CAAA,UAAU,CAAG,EAAA;AAC7C,MAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA;AAAA;AAGzD,IAAM,MAAA,UAAA,GAAa,WAAW,aAAa,CAAA;AAE3C,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,aAAc,CAAA;AAAA,MAClC,cAAA,EAAgB,CAAC,UAAU,CAAA;AAAA,MAC3B,WAAa,EAAA;AAAA,KACd,CAAA;AAED,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAK,UAAW,CAAA,QAAA,CAAS,CAAC,CAAA;AAEzC,IAAK,IAAA,CAAA,SAAA,GAAY,IAAI,SAAU,CAAA;AAAA,MAC7B,GAAA,EAAK,eAAe,UAAU;AAAA,KAC/B,CAAA;AAAA;AACH,EAEO,YAAe,GAAA;AACpB,IAAA,OAAO,IAAK,CAAA,SAAA;AAAA;AACd,EAEO,UAAa,GAAA;AAClB,IAAA,OAAO,KAAK,OAAQ,CAAA,OAAA;AAAA;AACtB,EAEa,cAAiB,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5B,MAAA,MAAM,WAAc,GAAA,MAAM,IAAK,CAAA,UAAA,CAAW,cAAe,EAAA;AAEzD,MAAA,OAAO,YAAY,CAAA,iBAAA,EAAoB,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,QACjD,CAAC,aAAY,cAAe,CAAA,CAAA,CAAE,MAAM,CAAC,GAAG,WAAY,CAAA,CAAA,CAAE,OAAO;AAAA,OAC7D,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA;AAAA,EAEa,IAAA,CACX,WACA,EAAA,WAAA,EACA,MACA,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACA,MAAI,IAAA,IAAA,CAAK,UAAW,CAAA,WAAA,KAAgB,SAAW,EAAA;AAC7C,QAAM,MAAA,IAAI,MAAM,2BAA2B,CAAA;AAAA;AAG7C,MAAM,MAAA,mBAAA,GACJ,YAAY,CAAA,wBAAA,CAAyB,WAAW,CAAA;AAClD,MAAM,MAAA,mBAAA,GACJ,YAAY,CAAA,wBAAA,CAAyB,WAAW,CAAA;AAElD,MAAM,MAAA,QAAA,GAAA,CACH,OAAO,MAAW,KAAA,QAAA,GAAW,WAAW,MAAM,CAAA,GAAI,MACnD,IAAA,KAAA,CAAA,EAAA,EAAM,mBAAqB,CAAA,OAAA,CAAA;AAE7B,MAAO,OAAA,MAAM,KAAK,OAAQ,CAAA,IAAA;AAAA,QACxB,mBAAqB,CAAA,OAAA;AAAA,QACrB,mBAAqB,CAAA,OAAA;AAAA,QACrB,QAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,CAAA;AAAA;AAAA,EAEa,QAAA,CACX,KACA,EAAA,aAAA,EACA,MACA,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACA,MAAM,MAAA,mBAAA,GAAsB,YAAY,CAAA,wBAAA,CAAyB,KAAK,CAAA;AAItE,MAAM,MAAA,QAAA,GAAA,CACH,OAAO,MAAW,KAAA,QAAA,GAAW,WAAW,MAAM,CAAA,GAAI,MACnD,IAAA,KAAA,CAAA,EAAA,EAAM,mBAAqB,CAAA,OAAA,CAAA;AAE7B,MAAO,OAAA,MAAM,KAAK,OAAQ,CAAA,QAAA;AAAA,QACxB,mBAAqB,CAAA,OAAA;AAAA,QACrB,aAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,CAAA;AAAA;AAAA,EAEM,qBAAwB,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5B,MAAA,MAAM,WAAc,GAAA,MAAM,IAAK,CAAA,SAAA,CAAU,cAAe,CAAA;AAAA,QACtD,KAAA,EAAO,KAAK,OAAQ,CAAA;AAAA,OACrB,CAAA;AAED,MAAA,MAAM,eAAuC,EAAC;AAE9C,MAAA,KAAA,MAAW,EAAE,QAAA,EAAU,YAAa,EAAA,IAAK,WAAa,EAAA;AACpD,QAAI,IAAA,UAAA,CAAW,YAAY,CAAA,IAAK,CAAG,EAAA;AACjC,UAAA;AAAA;AAGF,QAAM,MAAA,QAAA,GAAW,IAAK,CAAA,yBAAA,CAA0B,QAAQ,CAAA;AACxD,QAAA,IAAI,QAAU,EAAA;AACZ,UAAa,YAAA,CAAA,QAAA,CAAS,MAAM,CAAI,GAAA,aAAA;AAAA,YAC9B,YAAA;AAAA,YACA,QAAS,CAAA;AAAA,WACX;AACA,UAAA;AAAA;AAGF,QAAA,MAAM,YAAe,GAAA,MAAM,IAAK,CAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1D,QAAA,IAAI,YAAc,EAAA;AAChB,UAAa,YAAA,CAAA,YAAA,CAAa,MAAM,CAAI,GAAA,aAAA;AAAA,YAClC,YAAA;AAAA,YACA,YAAa,CAAA;AAAA,WACf;AACA,UAAA;AAAA;AAGF,QAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,eAAe,QAAQ,CAAA;AAC1D,QAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,aAAc,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA;AAG9D,MAAO,OAAA,YAAA;AAAA,KACT,CAAA;AAAA;AAAA,EAEa,gBAAmB,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC9B,MAAA,OAAO,MAAM,IAAK,CAAA,UAAA,CAAW,QAAS,CAAA,CAAC,EAAE,gBAAiB,EAAA;AAAA,KAC5D,CAAA;AAAA;AAAA,EAEA,OAAc,iBAAgC,GAAA;AAC5C,IAAO,OAAA,eAAA;AAAA;AACT,EAEA,OAAc,gBAAgB,MAAgB,EAAA;AAC5C,IAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA;AAAA,MAC9B,CAAC,IACC,KAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAM,CAAE,CAAA,WAAA,EAAkB,KAAA,MAAA,CAAO,WAAY;AAAA,KAC1E;AAAA;AACF,EAEA,OAAc,yBAAyB,MAAgB,EAAA;AACrD,IAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA;AAAA,MAC9B,CAAC,IACC,KAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAM,CAAE,CAAA,WAAA,EAAkB,KAAA,MAAA,CAAO,WAAY;AAAA,KAC1E;AAAA;AACF,EAEA,OAAc,wBAAwB,MAAgB,EAAA;AACpD,IAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA;AAAA,MAC9B,CAAC,IACC,KAAA,IAAA,CAAK,cAAe,CAAA,IAAA,CAAK,MAAM,CAAE,CAAA,WAAA,EAAkB,KAAA,MAAA,CAAO,WAAY;AAAA,KAC1E;AAAA;AACF,EAEO,0BAA0B,OAAiB,EAAA;AAChD,IAAM,MAAA,SAAA,GAAY,aAAY,iBAAkB,EAAA;AAEhD,IAAA,OAAO,UAAU,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,YAAY,OAAO,CAAA;AAAA;AACpD,EAEa,kBACX,QAC8B,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC9B,MAAA,OAAO,IAAK,CAAA,SAAA,CAAU,eAAgB,CAAA,EAAE,UAAoB,CAAA;AAAA,KAC9D,CAAA;AAAA;AAAA,EAEA,OAAe,eAAe,MAAgB,EAAA;AAC5C,IAAO,OAAA,MAAA,KAAW,UAAU,MAAS,GAAA,MAAA;AAAA;AAEzC","file":"chunk-BF2YFHSF.mjs","sourcesContent":["import BigNumber from 'bignumber.js'\n\nexport function formatBalance(\n  balance: bigint | number | string,\n  decimals: number\n) {\n  // Number(totalBalance) / Math.pow(10, decimal);\n  return BigNumber(balance.toString()).shiftedBy(-decimals).toFixed(8)\n}\n\nexport function disableConsoleLog() {\n  const originalConsoleLog = console.log\n  console.log = () => {}\n  return originalConsoleLog\n}\nexport function enableConsoleLog(originalConsoleLog: any) {\n  console.log = originalConsoleLog\n}\n\nexport function isWbtcShortStructAddress(address: string) {\n  return (\n    address ===\n    '0x27792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN'\n  )\n}\n","import {\n  AUSD,\n  BLUE,\n  BUCK,\n  CETUS,\n  CoinInfo,\n  DEEP,\n  ETH,\n  FDUSD,\n  haSui,\n  LBTC,\n  LorenzoBTC,\n  NAVX,\n  NS,\n  nUSDC,\n  stSUI,\n  Sui,\n  suiBTC,\n  suiUSDT,\n  USDT,\n  USDY,\n  vSui,\n  WAL,\n  WBTC,\n  WETH,\n  WSOL,\n  wUSDC,\n} from 'navi-sdk'\n\nexport const SUPPORTED_COINS: CoinInfo[] = [\n  NAVX,\n  Sui,\n  vSui,\n  USDT,\n  WETH,\n  CETUS,\n  haSui,\n  WBTC,\n  AUSD,\n  wUSDC,\n  nUSDC,\n  ETH,\n  USDY,\n  NS,\n  LorenzoBTC,\n  DEEP,\n  FDUSD,\n  BLUE,\n  BUCK,\n  suiUSDT,\n  stSUI,\n  suiBTC,\n  WSOL,\n  LBTC,\n  WAL,\n]\n","import { CoinMetadata, getFullnodeUrl, SuiClient } from '@mysten/sui/client'\nimport { AccountManager, NAVISDKClient } from 'navi-sdk'\nimport { CoinInfo } from 'navi-sdk/dist/types'\nimport { SUPPORTED_COINS } from '../core/config/coins'\nimport { getSetting } from '../core/utils/environment'\nimport { formatBalance } from '../core/utils/utils'\nimport { TSuiNetwork } from '../types/TSuiNetwork'\nimport { SuiService } from './SuiService'\n\nexport class NaviService {\n  private naviClient: NAVISDKClient\n  private suiClient: SuiClient\n  private account: AccountManager\n\n  constructor() {\n    const privateKey = getSetting('SUI_PRIVATE_KEY') as string\n    if (!SuiService.isValidPrivateKey(privateKey)) {\n      throw new Error('Invalid SUI_PRIVATE_KEY in the config')\n    }\n\n    const suiNetwork = getSetting('SUI_NETWORK') as TSuiNetwork\n\n    this.naviClient = new NAVISDKClient({\n      privateKeyList: [privateKey],\n      networkType: suiNetwork,\n    })\n\n    this.account = this.naviClient.accounts[0]\n\n    this.suiClient = new SuiClient({\n      url: getFullnodeUrl(suiNetwork),\n    })\n  }\n\n  public getSuiClient() {\n    return this.suiClient\n  }\n\n  public getAddress() {\n    return this.account.address\n  }\n\n  public async getAllBalances() {\n    const allBalances = await this.naviClient.getAllBalances()\n\n    return NaviService.getSupportedCoins().map((x) => ({\n      [NaviService.naviUsdcToUsdc(x.symbol)]: allBalances[x.address],\n    }))\n  }\n\n  public async swap(\n    sourceToken: string,\n    targetToken: string,\n    amount: string | number\n  ) {\n    if (this.naviClient.networkType !== 'mainnet') {\n      throw new Error('Only mainnet is supported')\n    }\n\n    const sourceTokenMetadata =\n      NaviService.getSupportedCoinBySymbol(sourceToken)\n    const targetTokenMetadata =\n      NaviService.getSupportedCoinBySymbol(targetToken)\n\n    const amountIn =\n      (typeof amount === 'string' ? parseFloat(amount) : amount) *\n      10 ** sourceTokenMetadata!.decimal\n\n    return await this.account.swap(\n      sourceTokenMetadata!.address,\n      targetTokenMetadata!.address,\n      amountIn,\n      0\n    )\n  }\n\n  public async transfer(\n    token: string,\n    targetAddress: string,\n    amount: string | number\n  ) {\n    const sourceTokenMetadata = NaviService.getSupportedCoinBySymbol(token)\n\n    // @todo: Add target address validation/ conversion from suins.\n\n    const amountIn =\n      (typeof amount === 'string' ? parseFloat(amount) : amount) *\n      10 ** sourceTokenMetadata!.decimal\n\n    return await this.account.sendCoin(\n      sourceTokenMetadata!.address,\n      targetAddress,\n      amountIn\n    )\n  }\n\n  async getWalletNonZeroCoins() {\n    const allBalances = await this.suiClient.getAllBalances({\n      owner: this.account.address,\n    })\n\n    const coinBalances: Record<string, string> = {}\n\n    for (const { coinType, totalBalance } of allBalances) {\n      if (parseFloat(totalBalance) == 0) {\n        continue\n      }\n\n      const coinInfo = this.getSupportedCoinByAddress(coinType)\n      if (coinInfo) {\n        coinBalances[coinInfo.symbol] = formatBalance(\n          totalBalance,\n          coinInfo.decimal\n        )\n        continue\n      }\n\n      const coinMetadata = await this.fetchCoinMetadata(coinType)\n      if (coinMetadata) {\n        coinBalances[coinMetadata.symbol] = formatBalance(\n          totalBalance,\n          coinMetadata.decimals\n        )\n        continue\n      }\n\n      const decimal = await this.account.getCoinDecimal(coinType)\n      coinBalances[coinType] = formatBalance(totalBalance, decimal)\n    }\n\n    return coinBalances\n  }\n\n  public async getWalletBalance() {\n    return await this.naviClient.accounts[0].getWalletBalance()\n  }\n\n  public static getSupportedCoins(): CoinInfo[] {\n    return SUPPORTED_COINS\n  }\n\n  public static isSupportedCoin(symbol: string) {\n    return this.getSupportedCoins().some(\n      (coin) =>\n        this.naviUsdcToUsdc(coin.symbol).toUpperCase() === symbol.toUpperCase()\n    )\n  }\n\n  public static getSupportedCoinBySymbol(symbol: string) {\n    return this.getSupportedCoins().find(\n      (coin) =>\n        this.naviUsdcToUsdc(coin.symbol).toUpperCase() === symbol.toUpperCase()\n    )\n  }\n\n  public static getMissingSupportedCoin(symbol: string) {\n    return this.getSupportedCoins().find(\n      (coin) =>\n        this.naviUsdcToUsdc(coin.symbol).toUpperCase() !== symbol.toUpperCase()\n    )\n  }\n\n  public getSupportedCoinByAddress(address: string) {\n    const naviCoins = NaviService.getSupportedCoins()\n\n    return naviCoins.find((x) => x.address === address)\n  }\n\n  public async fetchCoinMetadata(\n    coinType: string\n  ): Promise<CoinMetadata | null> {\n    return this.suiClient.getCoinMetadata({ coinType: coinType })\n  }\n\n  private static naviUsdcToUsdc(symbol: string) {\n    return symbol === 'nUSDC' ? 'USDC' : symbol\n  }\n}\n"]}