UNPKG

@suiware/ai-tools

Version:

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

1 lines 5.12 kB
{"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"]}