{"version":3,"sources":["../src/services/SuinsService.ts","../src/ai/tools/suiTransferTool.ts"],"names":[],"mappings":";;;;;;AAIO,IAAM,eAAN,MAAmB;AAAA,EAIxB,YAAY,SAAsB,EAAA;AAChC,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AAEjB,IAAK,IAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACjC,QAAQ,IAAK,CAAA,SAAA;AAAA,MACb,OAAA,EAAS,WAAW,aAAa;AAAA,KAClC,CAAA;AAAA;AACH,EAEa,iBAAiB,IAAsC,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAClE,MAAA,MAAM,UAAa,GAAA,MAAM,IAAK,CAAA,WAAA,CAAY,cAAc,IAAI,CAAA;AAC5D,MAAA,OAAA,CAAO,yCAAY,aAAiB,KAAA,IAAA;AAAA,KACtC,CAAA;AAAA;AAAA,EAEA,OAAc,iBAAiB,IAAuB,EAAA;AACpD,IAAA,OAAO,KAAK,QAAS,CAAA,MAAM,CAAK,IAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA;AAEvD,CAAA;;;AClBO,IAAM,kBAAkB,IAAK,CAAA;AAAA,EAClC,WACE,EAAA,oEAAA;AAAA,EACF,UAAA,EAAY,EAAE,MAAO,CAAA;AAAA,IACnB,IAAA,EAAM,CACH,CAAA,MAAA,EACA,CAAA,MAAA,CAAO,CAAC,KAAkB,KAAA,WAAA,CAAY,eAAgB,CAAA,KAAK,CAAG,EAAA;AAAA,MAC7D,OAAS,EAAA;AAAA,KACV,CACA,CAAA,QAAA;AAAA,MACC;AAAA,KACF;AAAA,IACF,MAAQ,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,SAAS,mBAAmB,CAAA;AAAA,IAC/C,OAAA,EAAS,CACN,CAAA,MAAA,EACA,CAAA,MAAA;AAAA,MACC,CAAC,UACC,UAAW,CAAA,iBAAA,CAAkB,KAAK,CAClC,IAAA,YAAA,CAAa,iBAAiB,KAAK,CAAA;AAAA,MACrC,EAAE,SAAS,qBAAsB;AAAA,KAElC,CAAA,QAAA;AAAA,MACC;AAAA;AACF,GACH,CAAA;AAAA,EACD,OAAA,EAAS,CAAO,EAAA,KAA8B,OAA9B,CAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAA8B,WAA9B,EAAE,IAAA,EAAM,MAAQ,EAAA,OAAA,EAAc,EAAA;AAG5C,IAAA,MAAM,qBAAqB,iBAAkB,EAAA;AAE7C,IAAM,MAAA,WAAA,GAAc,IAAI,WAAY,EAAA;AAEpC,IAAA,IAAI,eAAiC,GAAA,OAAA;AAErC,IAAI,IAAA,YAAA,CAAa,gBAAiB,CAAA,OAAO,CAAG,EAAA;AAC1C,MAAA,MAAM,YAAe,GAAA,IAAI,YAAa,CAAA,WAAA,CAAY,cAAc,CAAA;AAChE,MAAkB,eAAA,GAAA,MAAM,YAAa,CAAA,gBAAA,CAAiB,OAAO,CAAA;AAC7D,MAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAc,WAAA,EAAA,OAAO,CAAY,UAAA,CAAA,CAAA;AAAA;AACnD;AAGF,IAAI,IAAA,eAAA,IAAmB,WAAY,CAAA,UAAA,EAAc,EAAA;AAC/C,MAAM,MAAA,IAAI,MAAM,yCAAyC,CAAA;AAAA;AAG3D,IAAM,MAAA,QAAA,GAAW,MAAM,WAAY,CAAA,QAAA;AAAA,MACjC,IAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,gBAAA,CAAiB,kBAAkB,CAAA;AAEnC,IAAO,OAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACV;AAAA,GACF;AACF,CAAC","file":"chunk-RUKH23MU.mjs","sourcesContent":["import { SuiClient } from '@mysten/sui/client'\nimport { SuinsClient } from '@mysten/suins'\nimport { getSetting } from '../core/utils/environment'\n\nexport class SuinsService {\n  private suinsClient: SuinsClient\n  private suiClient: SuiClient\n\n  constructor(suiClient: SuiClient) {\n    this.suiClient = suiClient\n\n    this.suinsClient = new SuinsClient({\n      client: this.suiClient,\n      network: getSetting('SUI_NETWORK') as 'mainnet' | 'testnet',\n    })\n  }\n\n  public async resolveSuinsName(name: string): Promise<string | null> {\n    const nameRecord = await this.suinsClient.getNameRecord(name)\n    return nameRecord?.targetAddress || null\n  }\n\n  public static isValidSuinsName(name: string): boolean {\n    return name.endsWith('.sui') || name.startsWith('@')\n  }\n}\n","import { tool } from 'ai'\nimport z from 'zod'\nimport { disableConsoleLog, enableConsoleLog } from '../../core/utils/utils'\nimport { NaviService } from '../../services/NaviService'\nimport { SuiService } from '../../services/SuiService'\nimport { SuinsService } from '../../services/SuinsService'\n\nexport const suiTransferTool = tool({\n  description:\n    'Transfer the amount of the specified coin to the specified address',\n  parameters: z.object({\n    coin: z\n      .string()\n      .refine((value: string) => NaviService.isSupportedCoin(value), {\n        message: 'The coin not supported',\n      })\n      .describe(\n        'The target address. Suins names starting with @ or ending with .sui are supported.'\n      ),\n    amount: z.number().describe('The amount of SUI'),\n    address: z\n      .string()\n      .refine(\n        (value: string) =>\n          SuiService.isValidSuiAddress(value) ||\n          SuinsService.isValidSuinsName(value),\n        { message: 'Invalid Sui address' }\n      )\n      .describe(\n        'The target address. Suins names starting with @ or ending with .sui are supported.'\n      ),\n  }),\n  execute: async ({ coin, amount, address }) => {\n    // We need to suppress the Navi's console log messages to prevent polluting the output.\n    // See https://github.com/naviprotocol/navi-sdk/issues/82\n    const originalConsoleLog = disableConsoleLog()\n\n    const naviService = new NaviService()\n\n    let resolvedAddress: string | null = address\n    // If it's a Suins name, try to resolve it a Sui address.\n    if (SuinsService.isValidSuinsName(address)) {\n      const suinsService = new SuinsService(naviService.getSuiClient())\n      resolvedAddress = await suinsService.resolveSuinsName(address)\n      if (!resolvedAddress) {\n        throw new Error(`Suins name ${address} not found`)\n      }\n    }\n\n    if (resolvedAddress == naviService.getAddress()) {\n      throw new Error('You cannot transfer to your own address')\n    }\n\n    const txDigest = await naviService.transfer(\n      coin,\n      resolvedAddress as `0x{string}`,\n      amount\n    )\n\n    // Get the logs back.\n    enableConsoleLog(originalConsoleLog)\n\n    return {\n      digest: txDigest,\n    }\n  },\n})\n"]}