UNPKG

@suiware/ai-tools

Version:

Pluggable tools for Vercel AI SDK which allow AI assistants to interact with Sui Network and perform various actions.

175 lines (172 loc) 5.36 kB
import { getSetting, SuiService, __async, __pow } from './chunk-UXHRSDY6.mjs'; import BigNumber from 'bignumber.js'; import { SuiClient, getFullnodeUrl } from '@mysten/sui/client'; import { NAVISDKClient, NAVX, Sui, vSui, USDT, WETH, CETUS, haSui, WBTC, AUSD, wUSDC, nUSDC, ETH, USDY, NS, LorenzoBTC, DEEP, FDUSD, BLUE, BUCK, suiUSDT, stSUI, suiBTC, WSOL, LBTC, WAL } from 'navi-sdk'; function formatBalance(balance, decimals) { return BigNumber(balance.toString()).shiftedBy(-decimals).toFixed(8); } function disableConsoleLog() { const originalConsoleLog = console.log; console.log = () => { }; return originalConsoleLog; } function enableConsoleLog(originalConsoleLog) { console.log = originalConsoleLog; } var SUPPORTED_COINS = [ NAVX, Sui, vSui, USDT, WETH, CETUS, haSui, WBTC, AUSD, wUSDC, nUSDC, ETH, USDY, NS, LorenzoBTC, DEEP, FDUSD, BLUE, BUCK, suiUSDT, stSUI, suiBTC, WSOL, LBTC, WAL ]; // src/services/NaviService.ts var NaviService = class _NaviService { constructor() { const privateKey = getSetting("SUI_PRIVATE_KEY"); if (!SuiService.isValidPrivateKey(privateKey)) { throw new Error("Invalid SUI_PRIVATE_KEY in the config"); } const suiNetwork = getSetting("SUI_NETWORK"); this.naviClient = new NAVISDKClient({ privateKeyList: [privateKey], networkType: suiNetwork }); this.account = this.naviClient.accounts[0]; this.suiClient = new SuiClient({ url: getFullnodeUrl(suiNetwork) }); } getSuiClient() { return this.suiClient; } getAddress() { return this.account.address; } getAllBalances() { return __async(this, null, function* () { const allBalances = yield this.naviClient.getAllBalances(); return _NaviService.getSupportedCoins().map((x) => ({ [_NaviService.naviUsdcToUsdc(x.symbol)]: allBalances[x.address] })); }); } swap(sourceToken, targetToken, amount) { return __async(this, null, function* () { if (this.naviClient.networkType !== "mainnet") { throw new Error("Only mainnet is supported"); } const sourceTokenMetadata = _NaviService.getSupportedCoinBySymbol(sourceToken); const targetTokenMetadata = _NaviService.getSupportedCoinBySymbol(targetToken); const amountIn = (typeof amount === "string" ? parseFloat(amount) : amount) * __pow(10, sourceTokenMetadata.decimal); return yield this.account.swap( sourceTokenMetadata.address, targetTokenMetadata.address, amountIn, 0 ); }); } transfer(token, targetAddress, amount) { return __async(this, null, function* () { const sourceTokenMetadata = _NaviService.getSupportedCoinBySymbol(token); const amountIn = (typeof amount === "string" ? parseFloat(amount) : amount) * __pow(10, sourceTokenMetadata.decimal); return yield this.account.sendCoin( sourceTokenMetadata.address, targetAddress, amountIn ); }); } getWalletNonZeroCoins() { return __async(this, null, function* () { const allBalances = yield this.suiClient.getAllBalances({ owner: this.account.address }); const coinBalances = {}; for (const { coinType, totalBalance } of allBalances) { if (parseFloat(totalBalance) == 0) { continue; } const coinInfo = this.getSupportedCoinByAddress(coinType); if (coinInfo) { coinBalances[coinInfo.symbol] = formatBalance( totalBalance, coinInfo.decimal ); continue; } const coinMetadata = yield this.fetchCoinMetadata(coinType); if (coinMetadata) { coinBalances[coinMetadata.symbol] = formatBalance( totalBalance, coinMetadata.decimals ); continue; } const decimal = yield this.account.getCoinDecimal(coinType); coinBalances[coinType] = formatBalance(totalBalance, decimal); } return coinBalances; }); } getWalletBalance() { return __async(this, null, function* () { return yield this.naviClient.accounts[0].getWalletBalance(); }); } static getSupportedCoins() { return SUPPORTED_COINS; } static isSupportedCoin(symbol) { return this.getSupportedCoins().some( (coin) => this.naviUsdcToUsdc(coin.symbol).toUpperCase() === symbol.toUpperCase() ); } static getSupportedCoinBySymbol(symbol) { return this.getSupportedCoins().find( (coin) => this.naviUsdcToUsdc(coin.symbol).toUpperCase() === symbol.toUpperCase() ); } static getMissingSupportedCoin(symbol) { return this.getSupportedCoins().find( (coin) => this.naviUsdcToUsdc(coin.symbol).toUpperCase() !== symbol.toUpperCase() ); } getSupportedCoinByAddress(address) { const naviCoins = _NaviService.getSupportedCoins(); return naviCoins.find((x) => x.address === address); } fetchCoinMetadata(coinType) { return __async(this, null, function* () { return this.suiClient.getCoinMetadata({ coinType }); }); } static naviUsdcToUsdc(symbol) { return symbol === "nUSDC" ? "USDC" : symbol; } }; export { NaviService, disableConsoleLog, enableConsoleLog }; //# sourceMappingURL=chunk-BF2YFHSF.mjs.map //# sourceMappingURL=chunk-BF2YFHSF.mjs.map