From c819c75e6001b377875aec547473f646b7436a7d Mon Sep 17 00:00:00 2001 From: "Leon.Zhang" Date: Wed, 8 Jul 2026 19:30:55 +0800 Subject: [PATCH 1/4] Migrate package scope to sun-protocol --- CHANGELOG.md | 8 +- LICENSE | 2 +- README.md | 4 +- package-lock.json | 72 ++++------ package.json | 4 +- src/commands/liquidity.ts | 2 +- src/commands/pool.ts | 2 +- src/commands/sunpump.ts | 10 +- src/lib/command.ts | 2 +- src/lib/context.ts | 2 +- src/lib/tokens.ts | 2 +- src/lib/wallet.ts | 4 +- test/bin.test.d.ts | 2 - test/bin.test.d.ts.map | 1 - test/bin.test.js | 106 --------------- test/bin.test.js.map | 1 - test/commands/registration.test.d.ts | 2 - test/commands/registration.test.d.ts.map | 1 - test/commands/registration.test.js | 98 -------------- test/commands/registration.test.js.map | 1 - test/lib/confirm.test.d.ts | 2 - test/lib/confirm.test.d.ts.map | 1 - test/lib/confirm.test.js | 24 ---- test/lib/confirm.test.js.map | 1 - test/lib/context.test.d.ts | 1 - test/lib/context.test.d.ts.map | 1 - test/lib/context.test.js | 92 ------------- test/lib/context.test.js.map | 1 - test/lib/context.test.ts | 2 +- test/lib/output.test.d.ts | 2 - test/lib/output.test.d.ts.map | 1 - test/lib/output.test.js | 126 ------------------ test/lib/output.test.js.map | 1 - test/lib/wallet.test.d.ts | 1 - test/lib/wallet.test.d.ts.map | 1 - test/lib/wallet.test.js | 162 ----------------------- test/lib/wallet.test.js.map | 1 - test/lib/wallet.test.ts | 2 +- 38 files changed, 47 insertions(+), 701 deletions(-) delete mode 100644 test/bin.test.d.ts delete mode 100644 test/bin.test.d.ts.map delete mode 100644 test/bin.test.js delete mode 100644 test/bin.test.js.map delete mode 100644 test/commands/registration.test.d.ts delete mode 100644 test/commands/registration.test.d.ts.map delete mode 100644 test/commands/registration.test.js delete mode 100644 test/commands/registration.test.js.map delete mode 100644 test/lib/confirm.test.d.ts delete mode 100644 test/lib/confirm.test.d.ts.map delete mode 100644 test/lib/confirm.test.js delete mode 100644 test/lib/confirm.test.js.map delete mode 100644 test/lib/context.test.d.ts delete mode 100644 test/lib/context.test.d.ts.map delete mode 100644 test/lib/context.test.js delete mode 100644 test/lib/context.test.js.map delete mode 100644 test/lib/output.test.d.ts delete mode 100644 test/lib/output.test.d.ts.map delete mode 100644 test/lib/output.test.js delete mode 100644 test/lib/output.test.js.map delete mode 100644 test/lib/wallet.test.d.ts delete mode 100644 test/lib/wallet.test.d.ts.map delete mode 100644 test/lib/wallet.test.js delete mode 100644 test/lib/wallet.test.js.map diff --git a/CHANGELOG.md b/CHANGELOG.md index a04936f..5f60f1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to `@bankofai/sun-cli` are documented in this file. Format +All notable changes to `@sun-protocol/sun-cli` are documented in this file. Format loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). @@ -88,7 +88,7 @@ All write commands go through `writeAction`: wallet check → signed summary → ### Companion release -[`sunpump-agent-skill`](https://github.com/BofAI/skills/tree/main/sunpump-agent-skill) +[`sunpump-agent-skill`](https://github.com/sun-protocol/skills/tree/main/sunpump-agent-skill) **v1.2.0** ships in parallel — pins this CLI version, documents the new `buy/sell/quote-*/state` commands as the pre-launch trade path with `sun swap` as the post-launch path, and updates pre-validation checklists to enforce @@ -97,6 +97,6 @@ as the post-launch path, and updates pre-validation checklists to enforce Install: ```bash -npm install -g @bankofai/sun-cli@^1.2.0 -npx skills add BofAI/skills +npm install -g @sun-protocol/sun-cli@^1.2.0 +npx skills add sun-protocol/skills ``` diff --git a/LICENSE b/LICENSE index a59c54f..ec1cf51 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 BOA +Copyright (c) 2026 SUN Protocol Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 0bafd3d..4397ba6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ > A CLI for AI-driven and human-operated DeFi workflows on TRON via the **SUN.IO / SUNSWAP** ecosystem. -`@bankofai/sun-cli` connects your terminal, scripts, or AI agents to SUN.IO. Use it to **query** prices, pools, farms, and history; **quote** swap routes; and **execute** swaps, liquidity ops, and contract calls — all with machine-friendly output for automation. +`@sun-protocol/sun-cli` connects your terminal, scripts, or AI agents to SUN.IO. Use it to **query** prices, pools, farms, and history; **quote** swap routes; and **execute** swaps, liquidity ops, and contract calls — all with machine-friendly output for automation. --- @@ -54,7 +54,7 @@ ## Installation ```bash -npm install -g @bankofai/sun-cli +npm install -g @sun-protocol/sun-cli ``` Requires Node.js **20+**. diff --git a/package-lock.json b/package-lock.json index 6b052d2..f34639e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { - "name": "@bankofai/sun-cli", - "version": "1.2.0", + "name": "@sun-protocol/sun-cli", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@bankofai/sun-cli", - "version": "1.2.0", + "name": "@sun-protocol/sun-cli", + "version": "1.2.1", "license": "MIT", "dependencies": { - "@bankofai/agent-wallet": "^2.3.0", - "@bankofai/sun-kit": "^1.1.0", "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1", + "@bankofai/agent-wallet": "^2.3.0", + "@sun-protocol/sun-kit": "^1.1.0", "chalk": "^4.1.2", "cli-table3": "^0.6.5", "commander": "^12.1.0", @@ -545,47 +545,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bankofai/agent-wallet": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@bankofai/agent-wallet/-/agent-wallet-2.3.0.tgz", - "integrity": "sha512-Jezo0ffhZrsF0HQMV74wTJlLUtHoY4d7TeYbjqjkWketCqBdhiX9/90hS4qwk99QZwnbt+1HRUschOaSA1wkRw==", - "license": "MIT", - "dependencies": { - "@inquirer/prompts": "^8.3.0", - "@noble/curves": "^1.9.1", - "bs58check": "^4.0.0", - "viem": "^2.0.0", - "zod": "^3.22.0" - }, - "bin": { - "agent-wallet": "dist/delivery/bin.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@bankofai/sun-kit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@bankofai/sun-kit/-/sun-kit-1.1.0.tgz", - "integrity": "sha512-1aBKKuvRxXWdJ7TboC2KkkaOnlzuCKJNGQdwZSZP0V3Oevq27GUCJlRoMFM+FHR3zjTAUZelYa3CKHzlMgOIxw==", - "license": "MIT", - "dependencies": { - "@sun-protocol/permit2-sdk": "^1.0.0", - "@sun-protocol/universal-router-sdk": "^1.0.1", - "viem": "^2.0.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "tronweb": "^6.2.1" - }, - "peerDependenciesMeta": { - "tronweb": { - "optional": true - } - } - }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -1762,6 +1721,25 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@bankofai/agent-wallet": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@bankofai/agent-wallet/-/agent-wallet-2.3.0.tgz", + "integrity": "sha512-Jezo0ffhZrsF0HQMV74wTJlLUtHoY4d7TeYbjqjkWketCqBdhiX9/90hS4qwk99QZwnbt+1HRUschOaSA1wkRw==", + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^8.3.0", + "@noble/curves": "^1.9.1", + "bs58check": "^4.0.0", + "viem": "^2.0.0", + "zod": "^3.22.0" + }, + "bin": { + "agent-wallet": "dist/delivery/bin.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@scure/base": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz", diff --git a/package.json b/package.json index ae1d325..6250c49 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@bankofai/sun-cli", + "name": "@sun-protocol/sun-cli", "version": "1.2.1", "description": "CLI tool for SUN.IO / SUNSWAP on TRON — for humans and AI agents", "main": "dist/bin.js", @@ -42,7 +42,7 @@ }, "dependencies": { "@bankofai/agent-wallet": "^2.3.0", - "@bankofai/sun-kit": "^1.1.0", + "@sun-protocol/sun-kit": "^1.1.0", "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1", "chalk": "^4.1.2", diff --git a/src/commands/liquidity.ts b/src/commands/liquidity.ts index 78effc5..cd14636 100644 --- a/src/commands/liquidity.ts +++ b/src/commands/liquidity.ts @@ -16,7 +16,7 @@ import { WTRX_MAINNET, WTRX_NILE, createReadonlyTronWeb, -} from '@bankofai/sun-kit' +} from '@sun-protocol/sun-kit' const V2_ROUTERS: Record = { mainnet: SUNSWAP_V2_MAINNET_ROUTER, diff --git a/src/commands/pool.ts b/src/commands/pool.ts index 9b7879f..491d4de 100644 --- a/src/commands/pool.ts +++ b/src/commands/pool.ts @@ -3,7 +3,7 @@ import { getNetwork } from '../lib/context' import { readApiAction } from '../lib/command' import { formatUsd, formatPct, formatTime } from '../lib/output' import { tryResolveTokenAddress } from '../lib/tokens' -import { TRX_ADDRESS, WTRX_MAINNET, WTRX_NILE } from '@bankofai/sun-kit' +import { TRX_ADDRESS, WTRX_MAINNET, WTRX_NILE } from '@sun-protocol/sun-kit' function resolveTokenForPoolQuery(input: string | undefined, network: string): string | undefined { if (!input) return undefined diff --git a/src/commands/sunpump.ts b/src/commands/sunpump.ts index ec97261..1516c79 100644 --- a/src/commands/sunpump.ts +++ b/src/commands/sunpump.ts @@ -132,7 +132,9 @@ const holderTable = { return [ h.holderAddress ?? h.address ?? h.userAddress ?? '-', h.holderType ?? '-', - h.decimals ? formatAmount(h.amount ?? h.balance, h.decimals) : fmtNum(h.balance ?? h.amount, 2), + h.decimals + ? formatAmount(h.amount ?? h.balance, h.decimals) + : fmtNum(h.balance ?? h.amount, 2), pct, ] }, @@ -601,7 +603,6 @@ export function registerSunpumpCommands(program: Command) { }) }) - // -------------------------- launch (agent token launch) ------------------ sp.command('launch') .description( @@ -702,9 +703,7 @@ export function registerSunpumpCommands(program: Command) { // -------------------------- trade (buy/sell/quote/state) ----------------- sp.command('state ') - .description( - 'Show SunPump token state (0 NOT_EXIST, 1 TRADING, 2 READY_TO_LAUNCH, 3 LAUNCHED)', - ) + .description('Show SunPump token state (0 NOT_EXIST, 1 TRADING, 2 READY_TO_LAUNCH, 3 LAUNCHED)') .action(async (tokenAddress: string) => { try { const network = getNetwork() @@ -941,5 +940,4 @@ export function registerSunpumpCommands(program: Command) { }, }) }) - } diff --git a/src/lib/command.ts b/src/lib/command.ts index aadb985..db075c6 100644 --- a/src/lib/command.ts +++ b/src/lib/command.ts @@ -2,7 +2,7 @@ * Command helpers — eliminate boilerplate in write/read command handlers. */ -import type { SunKit, SunAPI } from '@bankofai/sun-kit' +import type { SunKit, SunAPI } from '@sun-protocol/sun-kit' import { getKit, getApi, ensureWallet } from './context' import { output, diff --git a/src/lib/context.ts b/src/lib/context.ts index 80bee6e..cf35af3 100644 --- a/src/lib/context.ts +++ b/src/lib/context.ts @@ -2,7 +2,7 @@ * Global application context — lazily initializes SunAPI, SunKit, and wallet. */ -import { SunAPI, SunKit } from '@bankofai/sun-kit' +import { SunAPI, SunKit } from '@sun-protocol/sun-kit' import { initWallet, getWallet, isWalletConfigured } from './wallet' let _api: SunAPI | null = null diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index 26131db..96e5549 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -3,7 +3,7 @@ * Provides a unified way to resolve token symbols to addresses across all commands. */ -import { TRX_ADDRESS, WTRX_MAINNET, WTRX_NILE } from '@bankofai/sun-kit' +import { TRX_ADDRESS, WTRX_MAINNET, WTRX_NILE } from '@sun-protocol/sun-kit' export interface TokenInfo { symbol: string diff --git a/src/lib/wallet.ts b/src/lib/wallet.ts index b05764a..e262ded 100644 --- a/src/lib/wallet.ts +++ b/src/lib/wallet.ts @@ -1,5 +1,5 @@ -import type { Wallet } from '@bankofai/sun-kit' -import { createReadonlyTronWeb } from '@bankofai/sun-kit' +import type { Wallet } from '@sun-protocol/sun-kit' +import { createReadonlyTronWeb } from '@sun-protocol/sun-kit' import { resolveWalletProvider, type Wallet as BaseWallet, diff --git a/test/bin.test.d.ts b/test/bin.test.d.ts deleted file mode 100644 index a72db14..0000000 --- a/test/bin.test.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {} -//# sourceMappingURL=bin.test.d.ts.map diff --git a/test/bin.test.d.ts.map b/test/bin.test.d.ts.map deleted file mode 100644 index 5b06898..0000000 --- a/test/bin.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bin.test.d.ts","sourceRoot":"","sources":["bin.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/bin.test.js b/test/bin.test.js deleted file mode 100644 index 732e9dc..0000000 --- a/test/bin.test.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict' -Object.defineProperty(exports, '__esModule', { value: true }) -describe('bin root wallet flags', () => { - const originalArgv = process.argv - const originalEnv = process.env - beforeEach(() => { - jest.resetModules() - jest.clearAllMocks() - process.argv = [...originalArgv] - process.env = { ...originalEnv } - delete process.env.AGENT_WALLET_PRIVATE_KEY - delete process.env.AGENT_WALLET_MNEMONIC - delete process.env.AGENT_WALLET_MNEMONIC_ACCOUNT_INDEX - delete process.env.AGENT_WALLET_PASSWORD - delete process.env.AGENT_WALLET_DIR - }) - afterAll(() => { - process.argv = originalArgv - process.env = originalEnv - }) - function mockBinWithWalletCommand(onRun) { - const completed = new Promise((resolve, reject) => { - const registerWalletCommands = (program) => { - program - .command('wallet') - .command('address') - .action(async () => { - try { - await onRun() - resolve() - } catch (err) { - reject(err) - } - }) - } - jest.doMock('../src/commands/wallet', () => ({ - registerWalletCommands, - })) - const noop = () => undefined - jest.doMock('../src/commands/price', () => ({ registerPriceCommand: noop })) - jest.doMock('../src/commands/swap', () => ({ registerSwapCommands: noop })) - jest.doMock('../src/commands/token', () => ({ registerTokenCommands: noop })) - jest.doMock('../src/commands/pool', () => ({ registerPoolCommands: noop })) - jest.doMock('../src/commands/protocol', () => ({ registerProtocolCommands: noop })) - jest.doMock('../src/commands/tx', () => ({ registerTxCommands: noop })) - jest.doMock('../src/commands/position', () => ({ registerPositionCommands: noop })) - jest.doMock('../src/commands/pair', () => ({ registerPairCommands: noop })) - jest.doMock('../src/commands/farm', () => ({ registerFarmCommands: noop })) - jest.doMock('../src/commands/liquidity', () => ({ registerLiquidityCommands: noop })) - jest.doMock('../src/commands/contract', () => ({ registerContractCommands: noop })) - require('../src/bin') - }) - return completed - } - it('maps root wallet flags into env for the current invocation', async () => { - process.argv = [ - 'node', - 'src/bin.ts', - '-k', - 'flag-private-key', - '-i', - '7', - '-p', - 'flag-password', - '-d', - '/tmp/flag-wallet', - 'wallet', - 'address', - ] - await mockBinWithWalletCommand(() => { - expect(process.env.AGENT_WALLET_PRIVATE_KEY).toBe('flag-private-key') - expect(process.env.AGENT_WALLET_MNEMONIC_ACCOUNT_INDEX).toBe('7') - expect(process.env.AGENT_WALLET_PASSWORD).toBe('flag-password') - expect(process.env.AGENT_WALLET_DIR).toBe('/tmp/flag-wallet') - }) - }) - it('lets root wallet flags override existing env values', async () => { - process.env.AGENT_WALLET_PRIVATE_KEY = 'env-private-key' - process.env.AGENT_WALLET_MNEMONIC = 'env mnemonic' - process.env.AGENT_WALLET_MNEMONIC_ACCOUNT_INDEX = '1' - process.env.AGENT_WALLET_PASSWORD = 'env-password' - process.env.AGENT_WALLET_DIR = '/tmp/env-wallet' - process.argv = [ - 'node', - 'src/bin.ts', - '-m', - 'flag mnemonic', - '-i', - '3', - '-p', - 'flag-password', - '-d', - '/tmp/flag-wallet', - 'wallet', - 'address', - ] - await mockBinWithWalletCommand(() => { - expect(process.env.AGENT_WALLET_PRIVATE_KEY).toBe('env-private-key') - expect(process.env.AGENT_WALLET_MNEMONIC).toBe('flag mnemonic') - expect(process.env.AGENT_WALLET_MNEMONIC_ACCOUNT_INDEX).toBe('3') - expect(process.env.AGENT_WALLET_PASSWORD).toBe('flag-password') - expect(process.env.AGENT_WALLET_DIR).toBe('/tmp/flag-wallet') - }) - }) -}) -//# sourceMappingURL=bin.test.js.map diff --git a/test/bin.test.js.map b/test/bin.test.js.map deleted file mode 100644 index 5d4733a..0000000 --- a/test/bin.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bin.test.js","sourceRoot":"","sources":["bin.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/commands/registration.test.d.ts b/test/commands/registration.test.d.ts deleted file mode 100644 index f8590f7..0000000 --- a/test/commands/registration.test.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {} -//# sourceMappingURL=registration.test.d.ts.map diff --git a/test/commands/registration.test.d.ts.map b/test/commands/registration.test.d.ts.map deleted file mode 100644 index b7e3174..0000000 --- a/test/commands/registration.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"registration.test.d.ts","sourceRoot":"","sources":["registration.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/commands/registration.test.js b/test/commands/registration.test.js deleted file mode 100644 index 34f0bee..0000000 --- a/test/commands/registration.test.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict' -Object.defineProperty(exports, '__esModule', { value: true }) -const commander_1 = require('commander') -const wallet_1 = require('../../src/commands/wallet') -const price_1 = require('../../src/commands/price') -const swap_1 = require('../../src/commands/swap') -const token_1 = require('../../src/commands/token') -const pool_1 = require('../../src/commands/pool') -const protocol_1 = require('../../src/commands/protocol') -const tx_1 = require('../../src/commands/tx') -const position_1 = require('../../src/commands/position') -const pair_1 = require('../../src/commands/pair') -const farm_1 = require('../../src/commands/farm') -const liquidity_1 = require('../../src/commands/liquidity') -const contract_1 = require('../../src/commands/contract') -function getCommandNames(program) { - return program.commands.map((cmd) => cmd.name()) -} -function getSubcommandNames(program, parentName) { - const parent = program.commands.find((c) => c.name() === parentName) - if (!parent) return [] - return parent.commands.map((cmd) => cmd.name()) -} -describe('command registration', () => { - let program - beforeEach(() => { - program = new commander_1.Command() - program.exitOverride() // prevent process.exit - }) - it('registers all top-level command groups', () => { - ;(0, wallet_1.registerWalletCommands)(program) - ;(0, price_1.registerPriceCommand)(program) - ;(0, swap_1.registerSwapCommands)(program) - ;(0, token_1.registerTokenCommands)(program) - ;(0, pool_1.registerPoolCommands)(program) - ;(0, protocol_1.registerProtocolCommands)(program) - ;(0, tx_1.registerTxCommands)(program) - ;(0, position_1.registerPositionCommands)(program) - ;(0, pair_1.registerPairCommands)(program) - ;(0, farm_1.registerFarmCommands)(program) - ;(0, liquidity_1.registerLiquidityCommands)(program) - ;(0, contract_1.registerContractCommands)(program) - const names = getCommandNames(program) - expect(names).toContain('wallet') - expect(names).toContain('price') - expect(names).toContain('swap') - expect(names).toContain('token') - expect(names).toContain('pool') - expect(names).toContain('protocol') - expect(names).toContain('tx') - expect(names).toContain('position') - expect(names).toContain('pair') - expect(names).toContain('farm') - expect(names).toContain('liquidity') - expect(names).toContain('contract') - }) - it('registers wallet subcommands', () => { - ;(0, wallet_1.registerWalletCommands)(program) - const subs = getSubcommandNames(program, 'wallet') - expect(subs).toContain('address') - expect(subs).toContain('balances') - }) - it('registers liquidity subcommands including V3 collect and V4', () => { - ;(0, liquidity_1.registerLiquidityCommands)(program) - const subs = getSubcommandNames(program, 'liquidity') - // V2 - expect(subs).toContain('v2:add') - expect(subs).toContain('v2:remove') - // V3 - expect(subs).toContain('v3:mint') - expect(subs).toContain('v3:increase') - expect(subs).toContain('v3:decrease') - expect(subs).toContain('v3:collect') - // V4 - expect(subs).toContain('v4:mint') - expect(subs).toContain('v4:increase') - expect(subs).toContain('v4:decrease') - expect(subs).toContain('v4:collect') - expect(subs).toContain('v4:info') - }) - it('registers pool subcommands', () => { - ;(0, pool_1.registerPoolCommands)(program) - const subs = getSubcommandNames(program, 'pool') - expect(subs).toContain('list') - expect(subs).toContain('search') - expect(subs).toContain('top-apy') - expect(subs).toContain('hooks') - expect(subs).toContain('vol-history') - expect(subs).toContain('liq-history') - }) - it('registers contract subcommands', () => { - ;(0, contract_1.registerContractCommands)(program) - const subs = getSubcommandNames(program, 'contract') - expect(subs).toContain('read') - expect(subs).toContain('send') - }) -}) -//# sourceMappingURL=registration.test.js.map diff --git a/test/commands/registration.test.js.map b/test/commands/registration.test.js.map deleted file mode 100644 index f66103d..0000000 --- a/test/commands/registration.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"registration.test.js","sourceRoot":"","sources":["registration.test.ts"],"names":[],"mappings":";;AAAA,yCAAmC;AACnC,sDAAkE;AAClE,oDAA+D;AAC/D,kDAA8D;AAC9D,oDAAgE;AAChE,kDAA8D;AAC9D,0DAAsE;AACtE,8CAA0D;AAC1D,0DAAsE;AACtE,kDAA8D;AAC9D,kDAA8D;AAC9D,4DAAwE;AACxE,0DAAsE;AAEtE,SAAS,eAAe,CAAC,OAAgB;IACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB,EAAE,UAAkB;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAA;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACjD,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,OAAgB,CAAA;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;QACvB,OAAO,CAAC,YAAY,EAAE,CAAA,CAAC,uBAAuB;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAA;QAC/B,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAA;QAC9B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAA;QACjC,IAAA,uBAAkB,EAAC,OAAO,CAAC,CAAA;QAC3B,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAA;QACjC,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAA;QAClC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAA;QAEjC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,IAAA,qCAAyB,EAAC,OAAO,CAAC,CAAA;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACrD,KAAK;QACL,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACnC,KAAK;QACL,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,KAAK;QACL,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAA;QAC7B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAA;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} \ No newline at end of file diff --git a/test/lib/confirm.test.d.ts b/test/lib/confirm.test.d.ts deleted file mode 100644 index e9b73f7..0000000 --- a/test/lib/confirm.test.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {} -//# sourceMappingURL=confirm.test.d.ts.map diff --git a/test/lib/confirm.test.d.ts.map b/test/lib/confirm.test.d.ts.map deleted file mode 100644 index 39e1e61..0000000 --- a/test/lib/confirm.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"confirm.test.d.ts","sourceRoot":"","sources":["confirm.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/lib/confirm.test.js b/test/lib/confirm.test.js deleted file mode 100644 index f2f5b16..0000000 --- a/test/lib/confirm.test.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict' -Object.defineProperty(exports, '__esModule', { value: true }) -const confirm_1 = require('../../src/lib/confirm') -const output_1 = require('../../src/lib/output') -describe('confirm', () => { - afterEach(() => { - ;(0, confirm_1.setAutoConfirm)(false) - ;(0, output_1.setJsonMode)(false) - }) - it('returns true when --yes flag is set', async () => { - ;(0, confirm_1.setAutoConfirm)(true) - expect(await (0, confirm_1.confirm)('Do this?')).toBe(true) - }) - it('returns true when --json mode is active', async () => { - ;(0, output_1.setJsonMode)(true) - expect(await (0, confirm_1.confirm)('Do this?')).toBe(true) - }) - it('returns true when both --yes and --json are set', async () => { - ;(0, confirm_1.setAutoConfirm)(true) - ;(0, output_1.setJsonMode)(true) - expect(await (0, confirm_1.confirm)('Do this?')).toBe(true) - }) -}) -//# sourceMappingURL=confirm.test.js.map diff --git a/test/lib/confirm.test.js.map b/test/lib/confirm.test.js.map deleted file mode 100644 index 785285e..0000000 --- a/test/lib/confirm.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"confirm.test.js","sourceRoot":"","sources":["confirm.test.ts"],"names":[],"mappings":";;AAAA,mDAA+D;AAC/D,iDAAkD;AAElD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAA,wBAAc,EAAC,KAAK,CAAC,CAAA;QACrB,IAAA,oBAAW,EAAC,KAAK,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,IAAA,wBAAc,EAAC,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,MAAM,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QACjB,MAAM,CAAC,MAAM,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,IAAA,wBAAc,EAAC,IAAI,CAAC,CAAA;QACpB,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;QACjB,MAAM,CAAC,MAAM,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} \ No newline at end of file diff --git a/test/lib/context.test.d.ts b/test/lib/context.test.d.ts deleted file mode 100644 index eff5943..0000000 --- a/test/lib/context.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=context.test.d.ts.map diff --git a/test/lib/context.test.d.ts.map b/test/lib/context.test.d.ts.map deleted file mode 100644 index 6ae71d4..0000000 --- a/test/lib/context.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["context.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/lib/context.test.js b/test/lib/context.test.js deleted file mode 100644 index 43d6fcf..0000000 --- a/test/lib/context.test.js +++ /dev/null @@ -1,92 +0,0 @@ -'use strict' -describe('context', () => { - beforeEach(() => { - jest.resetModules() - jest.clearAllMocks() - delete process.env.TRON_NETWORK - delete process.env.TRONGRID_API_KEY - delete process.env.TRON_GRID_API_KEY - delete process.env.TRON_RPC_URL - }) - function loadContextModule(options) { - const wallet = options?.wallet ?? { type: 'agent-wallet' } - const initWallet = jest.fn().mockResolvedValue(undefined) - const getWallet = jest.fn().mockReturnValue(wallet) - const isWalletConfigured = jest.fn().mockReturnValue(options?.walletConfigured ?? true) - const SunAPI = jest.fn().mockImplementation(() => ({ kind: 'api-instance' })) - const SunKit = jest.fn().mockImplementation((config) => ({ kind: 'kit-instance', config })) - jest.doMock('../../src/lib/wallet', () => ({ - initWallet, - getWallet, - isWalletConfigured, - })) - jest.doMock('@bankofai/sun-kit', () => ({ - SunAPI, - SunKit, - })) - const contextModule = require('../../src/lib/context') - return { - contextModule, - initWallet, - getWallet, - isWalletConfigured, - SunAPI, - SunKit, - wallet, - } - } - it('lazily initializes SunKit once and reuses the same instance', async () => { - process.env.TRON_NETWORK = 'nile' - process.env.TRONGRID_API_KEY = 'grid-key' - process.env.TRON_RPC_URL = 'https://rpc.local' - const { contextModule, initWallet, getWallet, SunKit, wallet } = loadContextModule() - const first = await contextModule.getKit() - const second = await contextModule.getKit() - expect(initWallet).toHaveBeenCalledTimes(1) - expect(getWallet).toHaveBeenCalledTimes(1) - expect(SunKit).toHaveBeenCalledTimes(1) - expect(first).toBe(second) - expect(first).toEqual({ - kind: 'kit-instance', - config: { - wallet, - network: 'nile', - tronGridApiKey: 'grid-key', - rpcUrl: 'https://rpc.local', - }, - }) - }) - it('creates SunKit without a wallet when none is configured', async () => { - process.env.TRON_GRID_API_KEY = 'fallback-key' - const { contextModule, getWallet, SunKit } = loadContextModule({ - walletConfigured: false, - }) - const kit = await contextModule.getKit() - expect(getWallet).not.toHaveBeenCalled() - expect(SunKit).toHaveBeenCalledWith({ - wallet: undefined, - network: 'mainnet', - tronGridApiKey: 'fallback-key', - rpcUrl: undefined, - }) - expect(kit.config.wallet).toBeUndefined() - }) - it('throws from ensureWallet when initialization completes without a wallet', async () => { - const { contextModule, initWallet, isWalletConfigured } = loadContextModule({ - walletConfigured: false, - }) - await expect(contextModule.ensureWallet()).rejects.toThrow( - 'Wallet required. Set agent-wallet credentials before running this command.', - ) - expect(initWallet).toHaveBeenCalledTimes(1) - expect(isWalletConfigured).toHaveBeenCalledTimes(1) - }) - it('caches SunAPI instances', () => { - const { contextModule, SunAPI } = loadContextModule() - const first = contextModule.getApi() - const second = contextModule.getApi() - expect(SunAPI).toHaveBeenCalledTimes(1) - expect(first).toBe(second) - }) -}) -//# sourceMappingURL=context.test.js.map diff --git a/test/lib/context.test.js.map b/test/lib/context.test.js.map deleted file mode 100644 index 9b5beff..0000000 --- a/test/lib/context.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"context.test.js","sourceRoot":"","sources":["context.test.ts"],"names":[],"mappings":";AAAA,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;QACnC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,SAAS,iBAAiB,CAAC,OAG1B;QACC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAA;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QACnD,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,gBAAgB,IAAI,IAAI,CAAC,CAAA;QAEvF,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAE3F,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,UAAU;YACV,SAAS;YACT,kBAAkB;SACnB,CAAC,CAAC,CAAA;QAEH,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;YACtC,MAAM;YACN,MAAM;SACP,CAAC,CAAC,CAAA;QAEH,MAAM,aAAa,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;QACtD,OAAO;YACL,aAAa;YACb,UAAU;YACV,SAAS;YACT,kBAAkB;YAClB,MAAM;YACN,MAAM;YACN,MAAM;SACP,CAAA;IACH,CAAC;IAED,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAA;QACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAA;QAE9C,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAA;QAEpF,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAA;QAE3C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE;gBACN,MAAM;gBACN,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,UAAU;gBAC1B,MAAM,EAAE,mBAAmB;aAC5B;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,cAAc,CAAA;QAE9C,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC;YAC7D,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,CAAA;QAExC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;YAClC,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,cAAc,EAAE,cAAc;YAC9B,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,CAAC;YAC1E,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CACxD,4EAA4E,CAC7E,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAA;QAErD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAA;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAA;QAErC,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} \ No newline at end of file diff --git a/test/lib/context.test.ts b/test/lib/context.test.ts index 4206842..eb25d26 100644 --- a/test/lib/context.test.ts +++ b/test/lib/context.test.ts @@ -26,7 +26,7 @@ describe('context', () => { isWalletConfigured, })) - jest.doMock('@bankofai/sun-kit', () => ({ + jest.doMock('@sun-protocol/sun-kit', () => ({ SunAPI, SunKit, })) diff --git a/test/lib/output.test.d.ts b/test/lib/output.test.d.ts deleted file mode 100644 index e677611..0000000 --- a/test/lib/output.test.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {} -//# sourceMappingURL=output.test.d.ts.map diff --git a/test/lib/output.test.d.ts.map b/test/lib/output.test.d.ts.map deleted file mode 100644 index 7acc54e..0000000 --- a/test/lib/output.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"output.test.d.ts","sourceRoot":"","sources":["output.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/lib/output.test.js b/test/lib/output.test.js deleted file mode 100644 index 14462d0..0000000 --- a/test/lib/output.test.js +++ /dev/null @@ -1,126 +0,0 @@ -'use strict' -Object.defineProperty(exports, '__esModule', { value: true }) -const output_1 = require('../../src/lib/output') -describe('filterFields', () => { - afterEach(() => (0, output_1.setFields)(null)) - it('returns original data when no fields are set', () => { - const data = { a: 1, b: 2, c: 3 } - expect((0, output_1.filterFields)(data)).toEqual(data) - }) - it('filters object to only specified fields', () => { - ;(0, output_1.setFields)(['a', 'c']) - expect((0, output_1.filterFields)({ a: 1, b: 2, c: 3 })).toEqual({ a: 1, c: 3 }) - }) - it('filters each item in an array', () => { - ;(0, output_1.setFields)(['name']) - const data = [ - { name: 'Alice', age: 30 }, - { name: 'Bob', age: 25 }, - ] - expect((0, output_1.filterFields)(data)).toEqual([{ name: 'Alice' }, { name: 'Bob' }]) - }) - it('returns primitive values unchanged', () => { - ;(0, output_1.setFields)(['a']) - expect((0, output_1.filterFields)('hello')).toBe('hello') - expect((0, output_1.filterFields)(42)).toBe(42) - expect((0, output_1.filterFields)(null)).toBe(null) - }) - it('ignores fields that do not exist on the object', () => { - ;(0, output_1.setFields)(['x', 'y']) - expect((0, output_1.filterFields)({ a: 1, b: 2 })).toEqual({}) - }) -}) -describe('extractList', () => { - it('returns arrays directly', () => { - expect((0, output_1.extractList)([1, 2, 3])).toEqual([1, 2, 3]) - }) - it('extracts .list wrapper', () => { - expect((0, output_1.extractList)({ list: [1, 2] })).toEqual([1, 2]) - }) - it('extracts .rows wrapper', () => { - expect((0, output_1.extractList)({ rows: [1, 2] })).toEqual([1, 2]) - }) - it('extracts .data wrapper', () => { - expect((0, output_1.extractList)({ data: [1, 2] })).toEqual([1, 2]) - }) - it('extracts .tokens wrapper', () => { - expect((0, output_1.extractList)({ tokens: [{ a: 1 }] })).toEqual([{ a: 1 }]) - }) - it('extracts .pools wrapper', () => { - expect((0, output_1.extractList)({ pools: [{ a: 1 }] })).toEqual([{ a: 1 }]) - }) - it('returns null for non-list objects', () => { - expect((0, output_1.extractList)({ foo: 'bar' })).toBeNull() - }) - it('returns null for primitives', () => { - expect((0, output_1.extractList)('hello')).toBeNull() - expect((0, output_1.extractList)(42)).toBeNull() - }) -}) -describe('outputJson compact format', () => { - let stdoutData - beforeEach(() => { - stdoutData = '' - jest.spyOn(process.stdout, 'write').mockImplementation((chunk) => { - stdoutData += chunk - return true - }) - ;(0, output_1.setJsonMode)(true) - ;(0, output_1.setFields)(null) - }) - afterEach(() => { - jest.restoreAllMocks() - ;(0, output_1.setJsonMode)(false) - }) - it('outputs compact JSON without pretty-printing', () => { - ;(0, output_1.outputJson)({ key: 'value', nested: { a: 1 } }) - expect(stdoutData).toBe('{"key":"value","nested":{"a":1}}\n') - // No spaces or newlines inside the JSON - expect(stdoutData).not.toContain(' ') - }) -}) -describe('outputError structured codes', () => { - let stdoutData - beforeEach(() => { - stdoutData = '' - jest.spyOn(process.stdout, 'write').mockImplementation((chunk) => { - stdoutData += chunk - return true - }) - ;(0, output_1.setJsonMode)(true) - }) - afterEach(() => { - jest.restoreAllMocks() - ;(0, output_1.setJsonMode)(false) - process.exitCode = undefined - }) - it('includes error code in JSON output', () => { - ;(0, output_1.outputError)('Wallet required', new Error('Set AGENT_WALLET_PRIVATE_KEY')) - const parsed = JSON.parse(stdoutData) - expect(parsed.code).toBe('WALLET_NOT_CONFIGURED') - expect(parsed.error).toBe('Wallet required') - expect(parsed.detail).toBe('Set AGENT_WALLET_PRIVATE_KEY') - }) - it('uses error object code if available', () => { - const err = new Error('Pool not found') - err.code = 'POOL_NOT_FOUND' - ;(0, output_1.outputError)('Operation failed', err) - const parsed = JSON.parse(stdoutData) - expect(parsed.code).toBe('POOL_NOT_FOUND') - }) - it('classifies network errors', () => { - ;(0, output_1.outputError)('Request failed', new Error('fetch failed: ECONNREFUSED')) - const parsed = JSON.parse(stdoutData) - expect(parsed.code).toBe('NETWORK_ERROR') - }) - it('falls back to UNKNOWN_ERROR', () => { - ;(0, output_1.outputError)('Something went wrong') - const parsed = JSON.parse(stdoutData) - expect(parsed.code).toBe('UNKNOWN_ERROR') - }) - it('sets exit code to 1', () => { - ;(0, output_1.outputError)('fail') - expect(process.exitCode).toBe(1) - }) -}) -//# sourceMappingURL=output.test.js.map diff --git a/test/lib/output.test.js.map b/test/lib/output.test.js.map deleted file mode 100644 index 611ea83..0000000 --- a/test/lib/output.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"output.test.js","sourceRoot":"","sources":["output.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/lib/wallet.test.d.ts b/test/lib/wallet.test.d.ts deleted file mode 100644 index e19d236..0000000 --- a/test/lib/wallet.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=wallet.test.d.ts.map diff --git a/test/lib/wallet.test.d.ts.map b/test/lib/wallet.test.d.ts.map deleted file mode 100644 index efdf5e5..0000000 --- a/test/lib/wallet.test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"wallet.test.d.ts","sourceRoot":"","sources":["wallet.test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/test/lib/wallet.test.js b/test/lib/wallet.test.js deleted file mode 100644 index 309cea2..0000000 --- a/test/lib/wallet.test.js +++ /dev/null @@ -1,162 +0,0 @@ -'use strict' -describe('wallet', () => { - const originalEnv = process.env - beforeEach(() => { - jest.resetModules() - jest.clearAllMocks() - process.env = { ...originalEnv } - delete process.env.AGENT_WALLET_PASSWORD - delete process.env.AGENT_WALLET_DIR - delete process.env.AGENT_WALLET_PRIVATE_KEY - delete process.env.AGENT_WALLET_MNEMONIC - delete process.env.AGENT_WALLET_MNEMONIC_ACCOUNT_INDEX - delete process.env.AGENT_WALLET_PASSWORD - delete process.env.AGENT_WALLET_DIR - }) - afterAll(() => { - process.env = originalEnv - }) - function loadWalletModule(options) { - const activeWallet = options?.activeWallet ?? { - getAddress: jest.fn().mockResolvedValue('TWalletAddress'), - signTransaction: jest.fn().mockResolvedValue('{"txID":"signed"}'), - signMessage: jest.fn().mockResolvedValue('signed-message'), - signTypedData: jest.fn().mockResolvedValue('0xsignedtypeddata'), - } - const tronWeb = options?.tronWeb ?? { - address: { - toHex: jest.fn().mockReturnValue('41abc'), - fromHex: jest.fn().mockReturnValue('TWalletAddress'), - }, - trx: { - sendRawTransaction: jest.fn().mockResolvedValue({ result: true, txid: 'tx-123' }), - }, - } - const provider = { - getActiveWallet: options?.getActiveWalletError - ? jest.fn().mockRejectedValue(options.getActiveWalletError) - : jest - .fn() - .mockResolvedValue( - options?.getActiveWalletValue === undefined - ? activeWallet - : options.getActiveWalletValue, - ), - } - const resolveWalletProvider = jest.fn().mockReturnValue(provider) - const createReadonlyTronWeb = jest.fn().mockResolvedValue(tronWeb) - jest.doMock('@bankofai/agent-wallet', () => ({ - resolveWalletProvider, - })) - jest.doMock('@bankofai/sun-kit', () => ({ - createReadonlyTronWeb, - })) - const walletModule = require('../../src/lib/wallet') - return { - walletModule, - activeWallet, - tronWeb, - provider, - resolveWalletProvider, - createReadonlyTronWeb, - } - } - it('leaves wallet unconfigured when the wallet provider cannot resolve an active wallet', async () => { - const { walletModule, resolveWalletProvider, provider } = loadWalletModule({ - getActiveWalletError: new Error('No active wallet'), - }) - await walletModule.initWallet() - expect(walletModule.isWalletConfigured()).toBe(false) - expect(resolveWalletProvider).toHaveBeenCalledWith({ network: 'tron' }) - expect(provider.getActiveWallet).toHaveBeenCalledTimes(1) - expect(() => walletModule.getWallet()).toThrow('No wallet configured') - }) - it('leaves wallet unconfigured when the wallet provider returns null', async () => { - const { walletModule, resolveWalletProvider, provider } = loadWalletModule({ - getActiveWalletValue: null, - }) - await walletModule.initWallet() - expect(walletModule.isWalletConfigured()).toBe(false) - expect(resolveWalletProvider).toHaveBeenCalledWith({ network: 'tron' }) - expect(provider.getActiveWallet).toHaveBeenCalledTimes(1) - expect(() => walletModule.getWallet()).toThrow('No wallet configured') - }) - it('initializes agent-wallet and exposes address', async () => { - process.env.AGENT_WALLET_PRIVATE_KEY = 'private-key' - process.env.AGENT_WALLET_DIR = '/tmp/agent-wallet' - const { walletModule, resolveWalletProvider, provider } = loadWalletModule() - await walletModule.initWallet() - expect(resolveWalletProvider).toHaveBeenCalledWith({ network: 'tron' }) - expect(provider.getActiveWallet).toHaveBeenCalledTimes(1) - expect(process.env.AGENT_WALLET_PRIVATE_KEY).toBe('private-key') - expect(process.env.AGENT_WALLET_DIR).toBe('/tmp/agent-wallet') - await expect(walletModule.getWalletAddress()).resolves.toBe('TWalletAddress') - }) - it('builds tronWeb with the active wallet as default address', async () => { - process.env.AGENT_WALLET_PASSWORD = 'secret' - const { walletModule, tronWeb, createReadonlyTronWeb } = loadWalletModule() - await walletModule.initWallet() - const wallet = walletModule.getWallet() - const resolvedTronWeb = await wallet.getTronWeb('nile') - expect(createReadonlyTronWeb).toHaveBeenCalledWith('nile') - expect(resolvedTronWeb).toBe(tronWeb) - expect(tronWeb.address.toHex).toHaveBeenCalledWith('TWalletAddress') - expect(tronWeb.address.fromHex).toHaveBeenCalledWith('41abc') - expect(tronWeb.defaultAddress).toEqual({ - hex: '41abc', - base58: 'TWalletAddress', - }) - }) - it('signs, broadcasts, and normalizes typed-data signatures', async () => { - process.env.AGENT_WALLET_PASSWORD = 'secret' - const { walletModule, activeWallet, tronWeb } = loadWalletModule({ - activeWallet: { - getAddress: jest.fn().mockResolvedValue('TWalletAddress'), - signTransaction: jest.fn().mockResolvedValue('{"txID":"signed","raw_data":{"x":1}}'), - signMessage: jest.fn().mockResolvedValue('signed-message'), - signTypedData: jest.fn().mockResolvedValue('0xdeadbeef'), - }, - tronWeb: { - address: { - toHex: jest.fn().mockReturnValue('41abc'), - fromHex: jest.fn().mockReturnValue('TWalletAddress'), - }, - trx: { - sendRawTransaction: jest.fn().mockResolvedValue({ result: true, txid: 'tx-999' }), - }, - }, - }) - await walletModule.initWallet() - const wallet = walletModule.getWallet() - await expect( - wallet.signAndBroadcast({ transaction: { raw_data: { contract: [] } } }, 'mainnet'), - ).resolves.toEqual({ result: true, txid: 'tx-999' }) - expect(activeWallet.signTransaction).toHaveBeenCalledWith({ raw_data: { contract: [] } }) - expect(tronWeb.trx.sendRawTransaction).toHaveBeenCalledWith({ - txID: 'signed', - raw_data: { x: 1 }, - }) - await expect( - wallet.signTypedData( - 'Permit', - { name: 'Sun', chainId: 1, verifyingContract: 'TContract' }, - { Permit: [{ name: 'owner', type: 'address' }] }, - { owner: 'TWalletAddress' }, - ), - ).resolves.toBe('deadbeef') - expect(activeWallet.signTypedData).toHaveBeenCalledWith({ - domain: { name: 'Sun', chainId: 1, verifyingContract: 'TContract' }, - types: { - EIP712Domain: [ - { name: 'name', type: 'string' }, - { name: 'chainId', type: 'uint256' }, - { name: 'verifyingContract', type: 'address' }, - ], - Permit: [{ name: 'owner', type: 'address' }], - }, - primaryType: 'Permit', - message: { owner: 'TWalletAddress' }, - }) - }) -}) -//# sourceMappingURL=wallet.test.js.map diff --git a/test/lib/wallet.test.js.map b/test/lib/wallet.test.js.map deleted file mode 100644 index 43bdd5c..0000000 --- a/test/lib/wallet.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"wallet.test.js","sourceRoot":"","sources":["wallet.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/lib/wallet.test.ts b/test/lib/wallet.test.ts index 5e2ca49..d94e33b 100644 --- a/test/lib/wallet.test.ts +++ b/test/lib/wallet.test.ts @@ -60,7 +60,7 @@ describe('wallet', () => { resolveWalletProvider, })) - jest.doMock('@bankofai/sun-kit', () => ({ + jest.doMock('@sun-protocol/sun-kit', () => ({ createReadonlyTronWeb, })) From a111cb5e23286cca520293fd6ec047e272944305 Mon Sep 17 00:00:00 2001 From: "Leon.Zhang" Date: Thu, 9 Jul 2026 14:58:05 +0800 Subject: [PATCH 2/4] Bump package version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f34639e..42f5af9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sun-protocol/sun-cli", - "version": "1.2.1", + "version": "1.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sun-protocol/sun-cli", - "version": "1.2.1", + "version": "1.2.2", "license": "MIT", "dependencies": { "@scure/bip32": "^2.0.1", diff --git a/package.json b/package.json index 6250c49..65c9762 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sun-protocol/sun-cli", - "version": "1.2.1", + "version": "1.2.2", "description": "CLI tool for SUN.IO / SUNSWAP on TRON — for humans and AI agents", "main": "dist/bin.js", "type": "commonjs", From e72d42450a5e5229c112c04bdaf286d64319ff4a Mon Sep 17 00:00:00 2001 From: "Leon.Zhang" Date: Thu, 9 Jul 2026 15:14:44 +0800 Subject: [PATCH 3/4] Update sun-kit dependency version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 42f5af9..791e9b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1", "@bankofai/agent-wallet": "^2.3.0", - "@sun-protocol/sun-kit": "^1.1.0", + "@sun-protocol/sun-kit": "^1.2.0", "chalk": "^4.1.2", "cli-table3": "^0.6.5", "commander": "^12.1.0", diff --git a/package.json b/package.json index 65c9762..c512c07 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "dependencies": { "@bankofai/agent-wallet": "^2.3.0", - "@sun-protocol/sun-kit": "^1.1.0", + "@sun-protocol/sun-kit": "^1.2.0", "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1", "chalk": "^4.1.2", From ea0ee7a31975adb5004ddd8f46aed4d48938d5f3 Mon Sep 17 00:00:00 2001 From: "Leon.Zhang" Date: Thu, 9 Jul 2026 16:49:58 +0800 Subject: [PATCH 4/4] Allow dry-run without wallet --- src/lib/command.ts | 10 +++++----- test/lib/command.test.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/lib/command.ts b/src/lib/command.ts index db075c6..15fb19e 100644 --- a/src/lib/command.ts +++ b/src/lib/command.ts @@ -188,16 +188,16 @@ export interface WriteActionOpts { export async function writeAction(opts: WriteActionOpts): Promise { try { - await ensureWallet() - const kit = await getKit() - const network = - typeof opts.summary.Network === 'string' ? String(opts.summary.Network) : undefined - if (_dryRun) { output({ dryRun: true, action: opts.title, params: opts.summary }) return } + await ensureWallet() + const kit = await getKit() + const network = + typeof opts.summary.Network === 'string' ? String(opts.summary.Network) : undefined + printSummary(opts.title, opts.summary) const confirmed = await confirm(opts.confirmMsg) diff --git a/test/lib/command.test.ts b/test/lib/command.test.ts index 75d4639..adf7c4e 100644 --- a/test/lib/command.test.ts +++ b/test/lib/command.test.ts @@ -141,6 +141,34 @@ describe('command helpers', () => { Tronscan: 'https://nile.tronscan.org/#/transaction/tx1', }) }) + + it('does not require a wallet for dry-run write actions', async () => { + const { commandModule, ensureWallet, getKit, output, confirm, withSpinner } = + loadCommandModule() + const execute = jest.fn() + + commandModule.setDryRun(true) + + await commandModule.writeAction({ + title: 'Swap Preview', + summary: { Network: 'mainnet', Amount: '1000000' }, + confirmMsg: 'Execute?', + spinnerLabel: 'Executing...', + errorLabel: 'Swap failed', + execute, + }) + + expect(output).toHaveBeenCalledWith({ + dryRun: true, + action: 'Swap Preview', + params: { Network: 'mainnet', Amount: '1000000' }, + }) + expect(ensureWallet).not.toHaveBeenCalled() + expect(getKit).not.toHaveBeenCalled() + expect(confirm).not.toHaveBeenCalled() + expect(withSpinner).not.toHaveBeenCalled() + expect(execute).not.toHaveBeenCalled() + }) }) describe('parseApiResponse', () => {