botanary 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +186 -9
  2. package/dist/bin/botanary.js +13 -3
  3. package/dist/bin/botanary.js.map +1 -1
  4. package/dist/package.json +2 -2
  5. package/dist/src/app-url.js +32 -0
  6. package/dist/src/app-url.js.map +1 -0
  7. package/dist/src/cli.js +113 -23
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/commands/agent.js +223 -50
  10. package/dist/src/commands/agent.js.map +1 -1
  11. package/dist/src/commands/mcp.js +136 -5
  12. package/dist/src/commands/mcp.js.map +1 -1
  13. package/dist/src/commands/system.js +109 -12
  14. package/dist/src/commands/system.js.map +1 -1
  15. package/dist/src/commands/utilities.js +44 -0
  16. package/dist/src/commands/utilities.js.map +1 -0
  17. package/dist/src/commands/wallet.js +338 -94
  18. package/dist/src/commands/wallet.js.map +1 -1
  19. package/dist/src/completion.js +69 -0
  20. package/dist/src/completion.js.map +1 -0
  21. package/dist/src/config-store.js +52 -0
  22. package/dist/src/config-store.js.map +1 -0
  23. package/dist/src/context.js +14 -4
  24. package/dist/src/context.js.map +1 -1
  25. package/dist/src/errors.js +116 -0
  26. package/dist/src/errors.js.map +1 -0
  27. package/dist/src/help/examples.js +358 -0
  28. package/dist/src/help/examples.js.map +1 -0
  29. package/dist/src/help/format.js +144 -0
  30. package/dist/src/help/format.js.map +1 -0
  31. package/dist/src/help/groups.js +39 -0
  32. package/dist/src/help/groups.js.map +1 -0
  33. package/dist/src/mcp-snippets.js +6 -0
  34. package/dist/src/mcp-snippets.js.map +1 -1
  35. package/dist/src/outcome.js +63 -0
  36. package/dist/src/outcome.js.map +1 -0
  37. package/dist/src/parser.js +18 -39
  38. package/dist/src/parser.js.map +1 -1
  39. package/dist/src/progress.js +37 -0
  40. package/dist/src/progress.js.map +1 -0
  41. package/dist/src/prompt-doc.js +92 -0
  42. package/dist/src/prompt-doc.js.map +1 -0
  43. package/dist/src/render/accounts.js +21 -0
  44. package/dist/src/render/accounts.js.map +1 -0
  45. package/dist/src/render/activity.js +34 -0
  46. package/dist/src/render/activity.js.map +1 -0
  47. package/dist/src/render/agents.js +42 -0
  48. package/dist/src/render/agents.js.map +1 -0
  49. package/dist/src/render/apis.js +44 -0
  50. package/dist/src/render/apis.js.map +1 -0
  51. package/dist/src/render/balance.js +68 -0
  52. package/dist/src/render/balance.js.map +1 -0
  53. package/dist/src/render/chains.js +52 -0
  54. package/dist/src/render/chains.js.map +1 -0
  55. package/dist/src/render/gas.js +34 -0
  56. package/dist/src/render/gas.js.map +1 -0
  57. package/dist/src/render/grant.js +34 -0
  58. package/dist/src/render/grant.js.map +1 -0
  59. package/dist/src/render/kv.js +60 -0
  60. package/dist/src/render/kv.js.map +1 -0
  61. package/dist/src/render/mandates.js +111 -0
  62. package/dist/src/render/mandates.js.map +1 -0
  63. package/dist/src/render/print.js +18 -0
  64. package/dist/src/render/print.js.map +1 -0
  65. package/dist/src/repl.js +114 -10
  66. package/dist/src/repl.js.map +1 -1
  67. package/dist/src/review.js +55 -0
  68. package/dist/src/review.js.map +1 -0
  69. package/dist/src/settings.js +88 -0
  70. package/dist/src/settings.js.map +1 -0
  71. package/dist/src/update-check.js +85 -0
  72. package/dist/src/update-check.js.map +1 -0
  73. package/dist/src/validate.js +92 -0
  74. package/dist/src/validate.js.map +1 -0
  75. package/package.json +2 -2
@@ -1,16 +1,24 @@
1
1
  import * as clack from '@clack/prompts';
2
- import { fetchComposite, walletApiGet, runLogin, openBrowser, portfolioFreshness, walletSend, resolveMandateForSend, signUnderMandateReal, createSignRequestReal, getSignRequestReal, preflightReal, scopedToAccount, } from 'botanary-mcp';
2
+ import { fetchComposite, walletApiGet, runLogin, openBrowser, portfolioFreshness, walletSend, resolveMandateForSend, signUnderMandateReal, createSignRequestReal, getSignRequestReal, preflightReal, scopedToAccount, GET_ROUTES, } from 'botanary-mcp';
3
3
  import { colors, glyphs } from '../render/colors.js';
4
4
  import { renderTable } from '../render/table.js';
5
5
  import { redactForDisplay } from '../render/redact.js';
6
- function printResult(ctx, data) {
7
- if (ctx.json) {
8
- console.log(JSON.stringify(data));
9
- }
10
- else {
11
- console.log(typeof data === 'string' ? data : JSON.stringify(data, null, 2));
12
- }
13
- }
6
+ import { group } from '../help/groups.js';
7
+ import { printResult } from '../render/print.js';
8
+ import { renderBalance } from '../render/balance.js';
9
+ import { renderActivity } from '../render/activity.js';
10
+ import { renderMandates } from '../render/mandates.js';
11
+ import { renderAgents } from '../render/agents.js';
12
+ import { renderChains } from '../render/chains.js';
13
+ import { renderGas } from '../render/gas.js';
14
+ import { renderAccounts } from '../render/accounts.js';
15
+ import { section } from '../render/kv.js';
16
+ import { step, notify } from '../progress.js';
17
+ import { confirmOrThrow, dryRunPayload, renderReview } from '../review.js';
18
+ import { classifyWalletSend } from '../outcome.js';
19
+ import { assertAddress, assertTierAllows, familyOf, findChain, parseAmount, tokenChoicesFor } from '../validate.js';
20
+ import { CliError, EXIT, invalidArgs, notLoggedIn } from '../errors.js';
21
+ import { appUrl } from '../app-url.js';
14
22
  /** A WalletSession carries `sessionToken` - redact it in any printed output unless --reveal, the same
15
23
  * redact-by-default rule the design spec commits to everywhere. Anything that prints a session (status,
16
24
  * accounts use) must route through this rather than printResult directly. */
@@ -22,14 +30,14 @@ function printSessionResult(ctx, data) {
22
30
  async function requireWalletToken(ctx) {
23
31
  const session = await ctx.runtime.walletSession();
24
32
  if (!session) {
25
- throw new Error('Not logged in - run `botanary login` first.');
33
+ throw notLoggedIn();
26
34
  }
27
35
  return session.sessionToken;
28
36
  }
29
37
  export function registerWalletCommands(program) {
30
- program
38
+ group(program
31
39
  .command('login')
32
- .description('Owner session: device-style browser login')
40
+ .description('Log in as the account owner, in your browser')
33
41
  .action(async () => {
34
42
  const ctx = program.opts().__ctx;
35
43
  const result = await runLogin({
@@ -38,23 +46,41 @@ export function registerWalletCommands(program) {
38
46
  openBrowser,
39
47
  now: () => Date.now(),
40
48
  sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
49
+ // The whole point of the 0.6.0 callback: say the code and the URL NOW, not when the flow ends
50
+ // up to ten minutes later. Without this, an owner whose browser did not open sat in front of a
51
+ // blank terminal holding the one thing they needed hostage until it expired.
52
+ onPrompt: ({ userCode, url, browserOpened }) => {
53
+ notify(ctx, glyphs.info(`Your code: ${colors.bold(userCode)}`));
54
+ notify(ctx, browserOpened
55
+ ? colors.dim(` Opened your browser to approve: ${url}`)
56
+ : colors.warning(` Could not open a browser - open this URL to approve: ${url}`));
57
+ },
41
58
  });
42
59
  if (result.status === 'authorized') {
43
- console.log(glyphs.success(`Logged in${result.session ? ` (account ${result.session.accountId ?? 'default'})` : ''}`));
44
- }
45
- else {
46
- console.log(glyphs.danger(`Login ${result.status}`));
60
+ if (ctx.json) {
61
+ console.log(JSON.stringify({ status: 'authorized', session: result.session ?? null }));
62
+ }
63
+ else {
64
+ console.log(glyphs.success(`Logged in${result.session ? ` (account ${result.session.accountId ?? 'default'})` : ''}`));
65
+ }
66
+ return;
47
67
  }
48
- });
49
- program
68
+ throw new CliError(`Login ${result.status}.`, `login_${result.status}`, EXIT.notAuthenticated, result.status === 'expired' ? 'Run `botanary login` again.' : 'Approve the request in your browser next time.');
69
+ }), 'Wallet');
70
+ group(program
50
71
  .command('logout')
51
- .description('Owner session: revoke and clear the stored session')
72
+ .description('Revoke and clear the stored owner session')
52
73
  .action(async () => {
53
74
  const ctx = program.opts().__ctx;
54
- await ctx.runtime.walletLogout();
55
- console.log(glyphs.success('Logged out.'));
56
- });
57
- program
75
+ await step(ctx, 'Logging out', () => ctx.runtime.walletLogout());
76
+ if (ctx.json) {
77
+ console.log(JSON.stringify({ status: 'logged_out' }));
78
+ }
79
+ else {
80
+ console.log(glyphs.success('Logged out.'));
81
+ }
82
+ }), 'Wallet');
83
+ group(program
58
84
  .command('status')
59
85
  .description('Owner session and this machine\'s agent binding, side by side')
60
86
  .action(async () => {
@@ -68,54 +94,182 @@ export function registerWalletCommands(program) {
68
94
  if (ctx.json)
69
95
  return printSessionResult(ctx, { session, hasAgent });
70
96
  console.log(renderTable(rows));
71
- });
72
- program
97
+ }), 'Wallet');
98
+ group(program
99
+ .command('whoami')
100
+ .description('Who Botanary says you are, in both lanes')
101
+ .action(async () => {
102
+ const ctx = program.opts().__ctx;
103
+ const session = await ctx.runtime.walletSession();
104
+ const hasAgent = await ctx.runtime.store.hasIdentity();
105
+ // An unclaimed agent identity makes GET /agents/me fail, and that is an ANSWER, not an error: it
106
+ // is exactly what "this machine is not a connected agent" looks like. Never let it fail whoami.
107
+ let agent = null;
108
+ let agentError = null;
109
+ if (hasAgent) {
110
+ try {
111
+ agent = await step(ctx, 'Asking Botanary about this agent', () => ctx.runtime.me());
112
+ }
113
+ catch (e) {
114
+ agentError = e instanceof Error ? e.message : String(e);
115
+ }
116
+ }
117
+ const payload = { session, hasAgent, agent, agentError };
118
+ if (ctx.json)
119
+ return printSessionResult(ctx, payload);
120
+ const rows = [
121
+ ['owner', session ? colors.success(`logged in (account ${session.accountId ?? 'default'})`) : colors.muted('not logged in')],
122
+ ['agent key', hasAgent ? colors.success('present on this machine') : colors.muted('none on this machine')],
123
+ [
124
+ 'agent status',
125
+ agent
126
+ ? colors.success(`connected as "${agent.name ?? 'unnamed'}" on account ${agent.accountId ?? '-'}`)
127
+ : colors.muted(agentError ? `not a connected agent (${agentError})` : 'not paired'),
128
+ ],
129
+ ];
130
+ console.log(renderTable(rows));
131
+ }), 'Wallet');
132
+ group(program
133
+ .command('chains')
134
+ .description('Every chain this backend serves, and what each can do')
135
+ .action(async () => {
136
+ const ctx = program.opts().__ctx;
137
+ const token = await requireWalletToken(ctx);
138
+ const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', token));
139
+ printResult(ctx, chains, renderChains);
140
+ }), 'Wallet');
141
+ group(program
142
+ .command('gas')
143
+ .description('Gas methods available for this account on a chain')
144
+ .option('--chain-id <chainId>', 'Chain to check - see `botanary chains`')
145
+ .action(async (opts) => {
146
+ const ctx = program.opts().__ctx;
147
+ const token = await requireWalletToken(ctx);
148
+ const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', token));
149
+ const chain = findChain(chains, opts.chainId ?? ctx.chain);
150
+ // EVM chains are chainId-keyed and non-EVM chains are key-keyed, and GET /gas/methods takes
151
+ // whichever applies - never both, and never a chainId invented for a chain that has none.
152
+ const query = chain.chainId === null ? `key=${encodeURIComponent(chain.key)}` : `chainId=${chain.chainId}`;
153
+ const methods = await step(ctx, 'Reading gas methods', () => ctx.runtime.api.get(`/v1/gas/methods?${query}`, token));
154
+ printResult(ctx, methods, (data) => renderGas(data, `${chain.name} (${chain.key})`));
155
+ }), 'Wallet');
156
+ group(program
73
157
  .command('balance')
74
- .description('Owner\'s balances across chains (wallet_portfolio)')
158
+ .description('What this account holds, across every chain')
75
159
  .action(async () => {
76
160
  const ctx = program.opts().__ctx;
77
161
  const token = await requireWalletToken(ctx);
78
- const result = await fetchComposite(ctx.runtime.api, token, [
162
+ const result = await step(ctx, 'Reading balances', () => fetchComposite(ctx.runtime.api, token, [
79
163
  { key: 'balance', path: '/v1/balance' },
80
164
  { key: 'chains', path: '/v1/chains' },
81
- ]);
165
+ ]));
82
166
  const freshness = portfolioFreshness(result.data.balance);
83
- printResult(ctx, { ...result.data, freshness });
84
- });
85
- program
167
+ printResult(ctx, { ...result.data, freshness }, (data) => renderBalance(data, { verbose: ctx.verbose }));
168
+ }), 'Wallet');
169
+ group(program
86
170
  .command('send')
87
- .description('Send tokens from the owner\'s own account (lane arbitration decides who signs)')
88
- .option('--recipient <address>')
89
- .option('--amount <amount>')
90
- .option('--token <symbol>')
91
- .option('--chain-id <chainId>')
171
+ .description('Send tokens from an account you own')
172
+ .option('--recipient <address>', 'Destination address (0x... on EVM)')
173
+ .option('--amount <amount>', 'Amount in display units, e.g. 25')
174
+ .option('--token <symbol>', 'Token symbol, e.g. USDC')
175
+ .option('--chain-id <chainId>', 'Chain to send on - see `botanary chains`')
92
176
  .action(async (opts) => {
93
177
  const ctx = program.opts().__ctx;
94
- let { recipient, amount, token: tokenSymbol, chainId } = opts;
95
- if (!ctx.noInteractive && (!recipient || !amount || !tokenSymbol || !chainId)) {
96
- const answers = await clack.group({
97
- amount: () => clack.text({ message: 'Amount?', placeholder: '25', initialValue: amount }),
98
- token: () => clack.text({ message: 'Token?', placeholder: 'USDC', initialValue: tokenSymbol }),
99
- recipient: () => clack.text({ message: 'To?', placeholder: '0xAb12...9F3', initialValue: recipient }),
100
- chainId: () => clack.text({ message: 'Chain ID?', placeholder: '8453', initialValue: chainId }),
101
- }, { onCancel: () => { clack.cancel('Cancelled.'); process.exit(0); } });
102
- ({ recipient, amount, token: tokenSymbol, chainId } = answers);
178
+ const walletToken = await requireWalletToken(ctx);
179
+ // Validate required inputs before making network calls. If chain-id is not specified and we're
180
+ // not in interactive mode, fail immediately with missing input - do not fetch chains first.
181
+ let amountRaw = opts.amount;
182
+ let tokenSymbol = opts.token;
183
+ let recipient = opts.recipient;
184
+ const chainId = opts.chainId ?? ctx.chain;
185
+ if (!ctx.interactive && (!chainId || !amountRaw || !tokenSymbol || !recipient)) {
186
+ throw invalidArgs('Missing required input', 'Use --amount, --token, --recipient, and --chain-id, or run in an interactive terminal.');
103
187
  }
104
- if (!recipient || !amount || !tokenSymbol || !chainId) {
105
- throw new Error('Missing required input: --recipient, --amount, --token, --chain-id (or run interactively).');
188
+ const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', walletToken));
189
+ const chain = findChain(chains, chainId);
190
+ assertTierAllows(chain, 'send');
191
+ const family = familyOf(chain.namespace);
192
+ if (ctx.interactive && (!amountRaw || !tokenSymbol || !recipient)) {
193
+ const balance = await step(ctx, 'Reading balances', () => ctx.runtime.api.get('/v1/balance', walletToken));
194
+ const choices = tokenChoicesFor(balance, chain.chainRef);
195
+ const answers = await clack.group({
196
+ amount: () => clack.text({
197
+ message: 'Amount?',
198
+ placeholder: '25',
199
+ initialValue: amountRaw,
200
+ // Validate at the prompt too, so a typo is caught where it was made rather than three
201
+ // steps later inside a build call.
202
+ validate: (value) => {
203
+ const parsed = Number(String(value).trim());
204
+ return Number.isFinite(parsed) && parsed > 0 ? undefined : 'A positive number, e.g. 25';
205
+ },
206
+ }),
207
+ token: () => choices.length
208
+ ? clack.select({
209
+ message: `Token? (held on ${chain.name})`,
210
+ options: choices.map((choice) => ({ value: choice.symbol, label: `${choice.symbol} (${choice.amount})` })),
211
+ })
212
+ : clack.text({ message: 'Token?', placeholder: 'USDC', initialValue: tokenSymbol }),
213
+ recipient: () => clack.text({
214
+ message: 'To?',
215
+ placeholder: family === 'evm' ? '0xAb12...9F3' : 'address',
216
+ initialValue: recipient,
217
+ }),
218
+ }, {
219
+ onCancel: () => {
220
+ clack.cancel('Cancelled.');
221
+ throw new CliError('Cancelled - nothing was signed and nothing was sent.', 'cancelled', EXIT.error);
222
+ },
223
+ });
224
+ amountRaw = answers.amount;
225
+ tokenSymbol = answers.token;
226
+ recipient = answers.recipient;
106
227
  }
107
- const chainIdNum = Number(chainId);
228
+ const amount = parseAmount(amountRaw);
229
+ if (!tokenSymbol)
230
+ throw invalidArgs('--token is required.', 'A token symbol, e.g. USDC. See `botanary balance`.');
231
+ const to = assertAddress(recipient, family);
108
232
  const input = {
109
- recipient,
110
- amount: Number(amount),
233
+ recipient: to,
234
+ amount,
111
235
  tokenSymbol,
112
- chainId: chainIdNum,
113
- chainKey: String(chainIdNum),
236
+ chainId: chain.chainId ?? Number.NaN,
237
+ chainKey: chain.key,
114
238
  };
115
- const walletToken = await requireWalletToken(ctx);
116
239
  const session = await ctx.runtime.walletSession();
117
- const mandate = await resolveMandateForSend(ctx.runtime, input);
118
- const result = await walletSend({
240
+ const mandate = await step(ctx, 'Checking mandates', () => resolveMandateForSend(ctx.runtime, input));
241
+ const lane = mandate.accountId !== null && mandate.accountId === (session?.accountId ?? '') && mandate.inBounds
242
+ ? 'mandate'
243
+ : 'browser';
244
+ const rows = [
245
+ { label: 'amount', value: `${amount} ${tokenSymbol}` },
246
+ { label: 'to', value: to },
247
+ { label: 'chain', value: `${chain.name} (${chain.key}, ${chain.tier})` },
248
+ {
249
+ label: 'signed by',
250
+ value: lane === 'mandate'
251
+ ? "this machine's mandate, locally, with no browser"
252
+ : 'you, in your browser',
253
+ },
254
+ ];
255
+ const warnings = [];
256
+ // The backend's own reason, not re-authored here: it is the only sentence that can honestly say
257
+ // WHY the mandate lane was not taken.
258
+ if (lane === 'browser' && mandate.accountId !== null && mandate.accountId !== (session?.accountId ?? '')) {
259
+ warnings.push(`Mandate is bound to account ${mandate.accountId}, but you are logged into account ${session?.accountId ?? 'default'}.`);
260
+ }
261
+ else if (lane === 'browser' && mandate.accountId !== null && mandate.reason) {
262
+ warnings.push(mandate.reason);
263
+ }
264
+ if (chain.testnet)
265
+ warnings.push('This is a testnet chain.');
266
+ if (ctx.dryRun) {
267
+ const payload = dryRunPayload('Review this payment', rows, warnings);
268
+ printResult(ctx, payload, () => `${renderReview('Dry run - nothing will be sent', rows, warnings)}`);
269
+ return;
270
+ }
271
+ await confirmOrThrow(ctx, 'Review this payment', rows, warnings);
272
+ const result = await step(ctx, lane === 'mandate' ? 'Signing under your mandate' : 'Waiting for your approval', () => walletSend({
119
273
  mandateAccountId: mandate.accountId,
120
274
  mandateInBounds: mandate.inBounds,
121
275
  mandateBoundsReason: mandate.reason,
@@ -127,97 +281,187 @@ export function registerWalletCommands(program) {
127
281
  now: () => Date.now(),
128
282
  sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
129
283
  preflight: preflightReal(ctx.runtime, walletToken),
130
- }, input);
131
- printResult(ctx, result);
132
- });
133
- program
284
+ // Same reason as login's onPrompt: the approval URL is useless once the wait is over.
285
+ onHandoff: ({ url, browserOpened }) => {
286
+ notify(ctx, browserOpened
287
+ ? glyphs.info(`Opened your browser to approve: ${url}`)
288
+ : glyphs.warning(`Could not open a browser - approve here: ${url}`));
289
+ },
290
+ }, input));
291
+ const outcome = classifyWalletSend(result);
292
+ ctx.outcome.exit = outcome.exit;
293
+ printResult(ctx, result, () => {
294
+ const lines = [typeof result.text === 'string' ? result.text : JSON.stringify(result)];
295
+ if (outcome.note)
296
+ lines.push(colors.dim(outcome.note));
297
+ return lines.join('\n');
298
+ });
299
+ }), 'Wallet');
300
+ group(program
134
301
  .command('activity')
135
- .description('Owner\'s recent sends, swaps, and yield transactions (wallet_activity)')
302
+ .description('Recent sends, swaps and yield transactions')
136
303
  .action(async () => {
137
304
  const ctx = program.opts().__ctx;
138
305
  const token = await requireWalletToken(ctx);
139
306
  const session = await ctx.runtime.walletSession();
140
- const result = await fetchComposite(ctx.runtime.api, token, [
307
+ const result = await step(ctx, 'Reading activity', () => fetchComposite(ctx.runtime.api, token, [
141
308
  { key: 'history', path: scopedToAccount('/v1/history', session?.accountId ?? null) },
142
- ]);
143
- printResult(ctx, result.data);
144
- });
145
- program
309
+ ]));
310
+ printResult(ctx, result.data, renderActivity);
311
+ }), 'Wallet');
312
+ group(program
146
313
  .command('markets')
147
- .description('Public market data - prices and symbols (wallet_markets)')
314
+ .description('Public market data: prices and symbols')
148
315
  .action(async () => {
149
316
  const ctx = program.opts().__ctx;
150
317
  const token = await requireWalletToken(ctx);
151
- const result = await fetchComposite(ctx.runtime.api, token, [{ key: 'tokens', path: '/v1/markets/tokens' }]);
318
+ const result = await step(ctx, 'Reading markets', () => fetchComposite(ctx.runtime.api, token, [{ key: 'tokens', path: '/v1/markets/tokens' }]));
152
319
  printResult(ctx, result.data);
153
- });
154
- program
320
+ }), 'Wallet');
321
+ group(program
155
322
  .command('yield')
156
- .description('Yield pools, a shortlist, and this account\'s farm positions (wallet_yield)')
323
+ .description('Yield pools, a shortlist, and this account\'s positions')
157
324
  .action(async () => {
158
325
  const ctx = program.opts().__ctx;
159
326
  const token = await requireWalletToken(ctx);
160
327
  const session = await ctx.runtime.walletSession();
161
- const result = await fetchComposite(ctx.runtime.api, token, [
328
+ const result = await step(ctx, 'Reading yield', () => fetchComposite(ctx.runtime.api, token, [
162
329
  { key: 'pools', path: '/v1/yield/pools' },
163
330
  { key: 'shortlist', path: '/v1/yield/shortlist' },
164
331
  { key: 'positions', path: scopedToAccount('/v1/farm/positions', session?.accountId ?? null) },
165
- ]);
332
+ ]));
166
333
  printResult(ctx, {
167
334
  ...result.data,
168
335
  scopeCaveats: 'shortlist is ranked off your own holdings server-side and is not scoped by accounts use.',
169
336
  });
170
- });
171
- program
337
+ }), 'Wallet');
338
+ const mandates = group(program
172
339
  .command('mandates')
173
- .description(`What the agent lane may spend unattended (wallet_mandates). ${colors.warning('Testnet only, pre-mainnet.')}`)
340
+ .description('What the agent lane may spend unattended (testnet only)')
174
341
  .action(async () => {
175
342
  const ctx = program.opts().__ctx;
176
343
  const token = await requireWalletToken(ctx);
177
344
  const session = await ctx.runtime.walletSession();
178
- const result = await fetchComposite(ctx.runtime.api, token, [
345
+ const result = await step(ctx, 'Reading mandates', () => fetchComposite(ctx.runtime.api, token, [
179
346
  { key: 'delegations', path: scopedToAccount('/v1/delegations', session?.accountId ?? null) },
180
347
  { key: 'mandates', path: scopedToAccount('/v1/mandates', session?.accountId ?? null) },
181
- ]);
182
- if (!ctx.json)
183
- console.log(glyphs.warning('Mandates are testnet-only and pre-mainnet - nothing here is enforced on mainnet yet.'));
184
- printResult(ctx, result.data);
348
+ ]));
349
+ printResult(ctx, result.data, renderMandates);
350
+ }), 'Wallet');
351
+ mandates
352
+ .command('suggest')
353
+ .description('Suggest a bounded mandate for each agent that has none')
354
+ .action(async () => {
355
+ const ctx = program.opts().__ctx;
356
+ const token = await requireWalletToken(ctx);
357
+ const session = await ctx.runtime.walletSession();
358
+ const result = await step(ctx, 'Reading agents and mandates', () => fetchComposite(ctx.runtime.api, token, [
359
+ { key: 'agents', path: scopedToAccount('/v1/agents', session?.accountId ?? null) },
360
+ { key: 'delegations', path: scopedToAccount('/v1/delegations', session?.accountId ?? null) },
361
+ ]));
362
+ const agents = Array.isArray(result.data.agents) ? result.data.agents : [];
363
+ const delegations = Array.isArray(result.data.delegations) ? result.data.delegations : [];
364
+ const granted = new Set(delegations.map((d) => String(d.delegateeAddress ?? '').toLowerCase()));
365
+ const suggestions = agents
366
+ .filter((agent) => !granted.has(String(agent.address ?? '').toLowerCase()))
367
+ .map((agent) => ({
368
+ agentId: String(agent.id ?? ''),
369
+ agentName: String(agent.name ?? 'unnamed'),
370
+ // NEVER defaulted: naming a chain the backend did not state would invent the single most
371
+ // consequential fact in a spending suggestion - WHERE the authority would exist.
372
+ chainId: typeof agent.chainId === 'number' ? agent.chainId : null,
373
+ rationale: 'This agent is connected but has no mandate, so it can do nothing unattended.',
374
+ // Plain link, no query string, deliberately. The FE's mandates page reads exactly ONE param,
375
+ // `?pair`, and treats it as a PAIRING CODE - it pre-fills the pairing dialog with it
376
+ // (MandatesPage.tsx:222, `setPairCode(code)`). Putting an agent id there would pre-fill that
377
+ // dialog with a value that can never pair, so the owner would get a failed pairing attempt
378
+ // instead of a grant screen: worse than no deep link at all. `?agent=` is read by nothing.
379
+ // Until the FE accepts an agent id, the honest link is the page itself.
380
+ grantUrl: appUrl(ctx.runtime.apiBaseUrl, 'mandates'),
381
+ }));
382
+ const payload = {
383
+ suggestions,
384
+ note: agents.length === 0
385
+ ? 'No agents are connected to this account yet. Run `botanary agent pair` on the machine you want to connect.'
386
+ : 'Suggestions only. Granting happens in Botanary, and never widens an existing grant.',
387
+ };
388
+ printResult(ctx, payload, () => suggestions.length
389
+ ? [
390
+ section('Suggested mandates'),
391
+ ...suggestions.map((s) => ` ${s.agentName} (${s.agentId})\n ${s.rationale}\n ${s.grantUrl}`),
392
+ colors.dim(` ${payload.note}`),
393
+ ].join('\n')
394
+ : `${section('Suggested mandates')}\n${colors.muted(` ${payload.note}`)}`);
185
395
  });
186
- program
396
+ group(program
187
397
  .command('agents')
188
- .description('Connected agents and any pending approval requests (wallet_agents)')
398
+ .description('Connected agents and any pending approval requests')
189
399
  .action(async () => {
190
400
  const ctx = program.opts().__ctx;
191
401
  const token = await requireWalletToken(ctx);
192
402
  const session = await ctx.runtime.walletSession();
193
- const result = await fetchComposite(ctx.runtime.api, token, [
403
+ const result = await step(ctx, 'Reading agents', () => fetchComposite(ctx.runtime.api, token, [
194
404
  { key: 'agents', path: scopedToAccount('/v1/agents', session?.accountId ?? null) },
195
405
  { key: 'requests', path: scopedToAccount('/v1/agents/requests', session?.accountId ?? null) },
196
- ]);
197
- printResult(ctx, result.data);
406
+ ]));
407
+ printResult(ctx, result.data, renderAgents);
408
+ }), 'Wallet');
409
+ group(program
410
+ .command('open [target]')
411
+ .description('Open Botanary in your browser')
412
+ .action(async (target) => {
413
+ const ctx = program.opts().__ctx;
414
+ const url = appUrl(ctx.runtime.apiBaseUrl, target);
415
+ const opened = await openBrowser(url);
416
+ printResult(ctx, { url, opened }, () => opened ? glyphs.success(`Opened ${url}`) : glyphs.warning(`Could not open a browser - go to ${url}`));
417
+ }), 'Wallet');
418
+ const accounts = group(program
419
+ .command('accounts')
420
+ .description('Manage which owner account subsequent commands use'), 'Wallet');
421
+ accounts
422
+ .command('list')
423
+ .description('Every account this login can see')
424
+ .action(async () => {
425
+ const ctx = program.opts().__ctx;
426
+ const token = await requireWalletToken(ctx);
427
+ const session = await ctx.runtime.walletSession();
428
+ const list = await step(ctx, 'Reading accounts', () => ctx.runtime.api.get('/v1/accounts', token));
429
+ printResult(ctx, list, (data) => renderAccounts(data, session?.accountId ?? null));
198
430
  });
199
- const accounts = program.command('accounts').description('Manage which owner account subsequent commands use');
200
431
  accounts
201
432
  .command('use <accountId>')
202
433
  .description('Switch the active account (wallet_use_account)')
203
434
  .action(async (accountId) => {
204
435
  const ctx = program.opts().__ctx;
205
436
  const token = await requireWalletToken(ctx);
206
- const list = await ctx.runtime.api.get('/v1/accounts', token);
437
+ const list = await step(ctx, 'Switching account', () => ctx.runtime.api.get('/v1/accounts', token));
207
438
  if (!Array.isArray(list) || !list.some((a) => a.id === accountId)) {
208
- throw new Error(`No such account id: ${accountId}`);
439
+ throw invalidArgs(`No such account id: ${accountId}`, 'Use `botanary accounts list` to see your account ids.');
209
440
  }
210
441
  const session = await ctx.runtime.walletSessionStore.switchAccount(accountId);
211
442
  printSessionResult(ctx, { session });
212
443
  });
213
- program
214
- .command('api <path>')
215
- .description('Read any GET endpoint in the frozen OpenAPI contract, authenticated as the owner (wallet_api_get)')
216
- .action(async (path) => {
444
+ group(program
445
+ .command('api [path]')
446
+ .description('Read any documented GET endpoint as the owner')
447
+ .option('--list [filter]', 'List the documented GET routes instead of calling one')
448
+ .action(async (path, opts) => {
217
449
  const ctx = program.opts().__ctx;
450
+ if (opts.list !== undefined) {
451
+ const filter = typeof opts.list === 'string' ? opts.list.toLowerCase() : '';
452
+ const routes = GET_ROUTES.filter((route) => route.toLowerCase().includes(filter));
453
+ printResult(ctx, routes, () => [
454
+ section(`Documented GET routes${filter ? ` matching "${filter}"` : ''}`),
455
+ ...routes.map((route) => ` ${route}`),
456
+ colors.dim(` ${routes.length} of ${GET_ROUTES.length}. Call one with \`botanary api <path>\`.`),
457
+ ].join('\n'));
458
+ return;
459
+ }
460
+ if (!path)
461
+ throw invalidArgs('A path is required.', 'e.g. `botanary api /chains`, or `botanary api --list`.');
218
462
  const token = await requireWalletToken(ctx);
219
- const result = await walletApiGet({ api: ctx.runtime.api, token }, path, 'GET');
463
+ const result = await step(ctx, `GET ${path}`, () => walletApiGet({ api: ctx.runtime.api, token }, path, 'GET'));
220
464
  printResult(ctx, result);
221
- });
465
+ }), 'Wallet');
222
466
  }
223
467
  //# sourceMappingURL=wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,SAAS,WAAW,CAAC,GAAe,EAAE,IAAa;IACjD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;8EAE8E;AAC9E,SAAS,kBAAkB,CAAC,GAAe,EAAE,IAAqC;IAChF,MAAM,OAAO,GAAI,IAAgD,EAAE,OAAO,IAAK,IAAkC,CAAC;IAClH,MAAM,KAAK,GAAI,OAAiD,EAAE,YAAY,CAAC;IAC/E,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAe;IAC/C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;YACpB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB;YACrC,WAAW;YACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrD,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,IAAI,GAAuB;YAC/B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7H,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SACtF,CAAC;QACF,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,kBAAkB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1D,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;YACvC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;SACtC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC,uBAAuB,CAAC;SAC/B,MAAM,CAAC,mBAAmB,CAAC;SAC3B,MAAM,CAAC,kBAAkB,CAAC;SAC1B,MAAM,CAAC,sBAAsB,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAC/B;gBACE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;gBACzF,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;gBAC9F,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;gBACrG,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;aAChG,EACD,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;YACF,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAsB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;QAChH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,KAAK,GAAc;YACvB,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,WAAW;YACX,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;SAC7B,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B;YACE,gBAAgB,EAAE,OAAO,CAAC,SAAS;YACnC,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,mBAAmB,EAAE,OAAO,CAAC,MAAM;YACnC,eAAe,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;YACzC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAM,EAAE,CAAC,CAAC;YAC7E,iBAAiB,EAAE,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;YAClE,cAAc,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;YAC5D,WAAW;YACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;SACnD,EACD,KAAK,CACN,CAAC;QACF,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1D,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;SACrF,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAC7G,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6EAA6E,CAAC;SAC1F,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1D,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACzC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACjD,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,oBAAoB,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;SAC9F,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,EAAE;YACf,GAAG,MAAM,CAAC,IAAI;YACd,YAAY,EAAE,0FAA0F;SACzG,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,+DAA+D,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC;SAC1H,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1D,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,CAAC,iBAAiB,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;YAC5F,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;SACvF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,sFAAsF,CAAC,CAAC,CAAC;QACnI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;YAC1D,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;YAClF,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,qBAAqB,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,EAAE;SAC9F,CAAC,CAAC;QACH,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC;IAC/G,QAAQ;SACL,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;QAClC,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAwB,cAAc,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9E,kBAAkB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,mGAAmG,CAAC;SAChH,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAe,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAChF,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"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"}