@antseed/cli 0.1.162 → 0.1.163
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.
- package/README.md +65 -6
- package/dist/cli/commands/ants/dashboard.d.ts +1 -1
- package/dist/cli/commands/ants/dashboard.d.ts.map +1 -1
- package/dist/cli/commands/ants/dashboard.js +35 -4
- package/dist/cli/commands/ants/dashboard.js.map +1 -1
- package/dist/cli/commands/ants/dashboard.test.js +39 -2
- package/dist/cli/commands/ants/dashboard.test.js.map +1 -1
- package/dist/cli/commands/ants/positions.d.ts.map +1 -1
- package/dist/cli/commands/ants/positions.js +2 -0
- package/dist/cli/commands/ants/positions.js.map +1 -1
- package/dist/cli/commands/ants/rewards.d.ts.map +1 -1
- package/dist/cli/commands/ants/rewards.js +4 -0
- package/dist/cli/commands/ants/rewards.js.map +1 -1
- package/dist/cli/commands/ants/shared.d.ts +5 -3
- package/dist/cli/commands/ants/shared.d.ts.map +1 -1
- package/dist/cli/commands/ants/shared.js +5 -3
- package/dist/cli/commands/ants/shared.js.map +1 -1
- package/dist/cli/commands/ants/shared.test.js +22 -1
- package/dist/cli/commands/ants/shared.test.js.map +1 -1
- package/dist/cli/commands/buyer/index.d.ts.map +1 -1
- package/dist/cli/commands/buyer/index.js +2 -0
- package/dist/cli/commands/buyer/index.js.map +1 -1
- package/dist/cli/commands/buyer/set-authorized-wallet.d.ts +43 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.d.ts.map +1 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.js +114 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.js.map +1 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.test.d.ts +2 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.test.d.ts.map +1 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.test.js +127 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.test.js.map +1 -0
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -21,7 +21,8 @@ Command-line interface and web dashboard for the AntSeed Network — a P2P netwo
|
|
|
21
21
|
| `antseed seller pool withdraw <id...> [--accept-slashing]` | Withdraw positions, with a slashing estimate and confirmation for early exits |
|
|
22
22
|
| `antseed seller rewards [claim]` | View or claim all seller rewards |
|
|
23
23
|
| **ANTS staking** | |
|
|
24
|
-
| `antseed ants` | Open the local ANTS staking dashboard
|
|
24
|
+
| `antseed ants` | Open the local ANTS staking dashboard; the connected browser wallet is the acting account (`--port`, `--no-open`) |
|
|
25
|
+
| `antseed ants --address 0x...` | Pin the dashboard to one account. Transactions require that account's browser wallet, or its authorized operator for buyer actions. Does not use the local wallet. |
|
|
25
26
|
| `antseed ants status` | Protocol phase, epoch countdown, balances, stake, claimable rewards |
|
|
26
27
|
| `antseed ants stake <ants> --agent <id> --epochs <n>` | Stake ANTS into any registered seller pool |
|
|
27
28
|
| `antseed ants positions` | List open lANTS positions with state, pending rewards, and exit slash |
|
|
@@ -42,6 +43,7 @@ Command-line interface and web dashboard for the AntSeed Network — a P2P netwo
|
|
|
42
43
|
| `antseed buyer activity` | Activity summary: tokens, spend history, savings, channels, claimable ANTS |
|
|
43
44
|
| `antseed buyer deposit --onchain <usdc>` | Direct on-chain deposit from the hot wallet (requires ETH for gas) |
|
|
44
45
|
| `antseed buyer withdraw <amount>` | Withdraw USDC from deposits |
|
|
46
|
+
| `antseed buyer set-authorized-wallet [--self]` | Authorize an external wallet in the browser, or authorize the buyer wallet itself |
|
|
45
47
|
| `antseed buyer balance` | Check wallet and deposit balance |
|
|
46
48
|
| `antseed network browse` | Browse peers, models, and pricing (same catalog as `/v1/models`) |
|
|
47
49
|
| **Session** | |
|
|
@@ -362,14 +364,45 @@ ANTS pool positions.
|
|
|
362
364
|
### ANTS Staking Dashboard and Commands
|
|
363
365
|
|
|
364
366
|
`antseed ants` starts a local dashboard on `http://127.0.0.1:3119` and opens it
|
|
365
|
-
in your browser.
|
|
366
|
-
|
|
367
|
+
in your browser. Browse pools before connecting; once you connect a browser
|
|
368
|
+
wallet it becomes the acting account for staking, positions and seller
|
|
369
|
+
actions, and every transaction is approved in that wallet. The dashboard binds
|
|
370
|
+
to localhost only and requires the one-time session token embedded in the URL
|
|
367
371
|
it prints, so no other page can act with your wallet. Pass `--no-open` to
|
|
368
|
-
print the URL only, or `--port` to change the port.
|
|
372
|
+
print the URL only, or `--port` to change the port. Buyer rewards follow the
|
|
373
|
+
connected wallet too: a wallet that is a buyer account in its own right sees
|
|
374
|
+
its own usage and legacy buyer rewards. If the wallet is instead the on-chain
|
|
375
|
+
authorized operator of the local identity's buyer account (the one in
|
|
376
|
+
`--data-dir`), that buyer account's rewards are shown, and the existing
|
|
377
|
+
payments flow can authorize such an operator.
|
|
378
|
+
|
|
379
|
+
`antseed ants --address 0x...` pins the dashboard to one account instead.
|
|
380
|
+
Seller and position actions then require that account's wallet, buyer reward
|
|
381
|
+
actions require its current deposits operator, and switching browser wallets
|
|
382
|
+
does not change the pinned account. It does not use the local wallet, load or
|
|
383
|
+
create a local identity, or offer the local authorization flow. Buyer rewards
|
|
384
|
+
and positions created by staking them belong to the authorized operator; pin
|
|
385
|
+
the operator's address to manage those positions.
|
|
369
386
|
|
|
370
387
|
Pool statistics, volume history, and closed positions come from the Antscan
|
|
371
|
-
indexer (`payments.crypto.explorerApiUrl`)
|
|
372
|
-
|
|
388
|
+
indexer (`payments.crypto.explorerApiUrl`). Positions, personal pool totals, and
|
|
389
|
+
staking rewards share its paginated `/api/staking/positions?include=rewards`
|
|
390
|
+
response, including closed positions with unclaimed rewards. Power and status
|
|
391
|
+
are included by default; there is no separate live-mode request. Wallet totals
|
|
392
|
+
are calculated across all pages rather than treating page totals as wallet totals.
|
|
393
|
+
Claims and restaking still validate positions and amounts on-chain.
|
|
394
|
+
|
|
395
|
+
The configured Antscan deployment must include Antscan PR #8 and complete its
|
|
396
|
+
reward backfill. Stale or incomplete rewards appear as unavailable, not zero;
|
|
397
|
+
JSON reward amounts can be `null`. Live-state failures do not discard usable
|
|
398
|
+
indexed rewards. Position/personal-pool reads show an error instead of repeating
|
|
399
|
+
per-position RPC calls when the configured indexer is unavailable. An explicitly
|
|
400
|
+
unconfigured indexer retains direct chain reads for local setups.
|
|
401
|
+
|
|
402
|
+
During a dashboard session, confirmed transactions temporarily block older
|
|
403
|
+
position/reward snapshots until Antscan catches up. This marker is in memory,
|
|
404
|
+
not saved to disk or shared with later CLI invocations. After a restart, indexed
|
|
405
|
+
amounts remain estimates at the displayed source block, not transaction quotes.
|
|
373
406
|
|
|
374
407
|
Everything the dashboard does is also a command under `antseed ants`, so the
|
|
375
408
|
dashboard is optional:
|
|
@@ -495,6 +528,32 @@ Point your AI tools (Claude Code, Codex, etc.) at `http://localhost:8377` as the
|
|
|
495
528
|
|
|
496
529
|
While `antseed buyer start` is running, this sweeping happens automatically in the background (disable with `buyer.autoSweep: false` in your config). `antseed buyer sweep` triggers the same gasless sweep manually, and `antseed buyer deposit --onchain <usdc>` remains for direct on-chain deposits from a hot wallet that holds ETH. (The `antseed payments` web portal is retired.)
|
|
497
530
|
|
|
531
|
+
### Set an authorized wallet
|
|
532
|
+
|
|
533
|
+
```bash
|
|
534
|
+
# Recommended: open the secure local page, connect an external wallet,
|
|
535
|
+
# and approve the transaction from that wallet.
|
|
536
|
+
antseed buyer set-authorized-wallet
|
|
537
|
+
|
|
538
|
+
# Print the secure local URL without opening the browser automatically.
|
|
539
|
+
antseed buyer set-authorized-wallet --no-open
|
|
540
|
+
|
|
541
|
+
# Alternatively, make the buyer hot wallet its own authorized wallet.
|
|
542
|
+
antseed buyer set-authorized-wallet --self
|
|
543
|
+
|
|
544
|
+
# Select the same buyer identity/config used for your deposits:
|
|
545
|
+
antseed --data-dir ~/.antseed-buyer --config ~/.antseed-buyer/config.json buyer set-authorized-wallet
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
By default, the command opens the same **Set authorized wallet** browser flow used by AI VPN. The local buyer identity signs the deposits contract's EIP-712 authorization, then the connected external wallet submits `setOperator` and pays ETH gas. The CLI prints the localhost URL as a fallback and waits for confirmation before shutting down the local server. Use `--no-open` to print the URL without launching the browser.
|
|
549
|
+
|
|
550
|
+
With `--self`, the CLI makes the buyer hot wallet its own authorized wallet. The buyer signs and submits the transaction, so it must have ETH on the configured chain. Both modes respect the selected data directory, identity environment override, and payment chain/contract configuration. The command does not accept an arbitrary address: connect an external wallet to prove control, or explicitly choose the buyer wallet with `--self`.
|
|
551
|
+
|
|
552
|
+
**The authorized wallet gains control of withdrawals and future authorization transfers.** Choose a wallet you control. Initial authorization is only possible when no authorized wallet is set. Self-authorization sends no transaction when the buyer wallet is already authorized and rejects replacement of a different existing wallet. Changing it later requires an operator-transfer transaction from the current authorized wallet, not the buyer identity.
|
|
553
|
+
|
|
554
|
+
`antseed buyer withdraw` still submits from the buyer identity. If you authorize an external wallet, withdraw from that wallet through AI VPN's payments UI (for the same buyer identity) or the deposits contract, not through the current CLI withdrawal command. To use CLI withdrawal, the buyer identity itself must be the authorized wallet. Setting an operator does not resolve other withdrawal constraints, such as reserved funds or insufficient available balance.
|
|
555
|
+
|
|
556
|
+
|
|
498
557
|
### Configuration
|
|
499
558
|
|
|
500
559
|
```json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAUtC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuDlE"}
|
|
@@ -1,23 +1,53 @@
|
|
|
1
|
+
import { Option, InvalidArgumentError } from 'commander';
|
|
2
|
+
import { getAddress, ZeroAddress } from 'ethers';
|
|
1
3
|
import chalk from 'chalk';
|
|
2
4
|
import { createAntsServer } from '@antseed/ants';
|
|
3
5
|
import { loadAntsContext } from './shared.js';
|
|
4
6
|
export const DEFAULT_ANTS_PORT = 3119;
|
|
7
|
+
function dashboardAddress(value) {
|
|
8
|
+
try {
|
|
9
|
+
const address = getAddress(value);
|
|
10
|
+
if (address !== ZeroAddress)
|
|
11
|
+
return address;
|
|
12
|
+
}
|
|
13
|
+
catch { }
|
|
14
|
+
throw new InvalidArgumentError('Expected a non-zero Ethereum address.');
|
|
15
|
+
}
|
|
5
16
|
export function registerAntsDashboardAction(antsCmd) {
|
|
6
17
|
antsCmd
|
|
7
18
|
.option('-p, --port <port>', 'dashboard port', String(DEFAULT_ANTS_PORT))
|
|
8
19
|
.option('--no-open', 'do not open the browser automatically')
|
|
20
|
+
.addOption(new Option('--address <address>', 'pin the dashboard to one account; the connected wallet must be that account (or its authorized operator for buyer actions)').argParser(dashboardAddress))
|
|
21
|
+
.hook('preSubcommand', () => {
|
|
22
|
+
if (antsCmd.opts().address)
|
|
23
|
+
antsCmd.error('--address only applies to the dashboard, not transaction subcommands.');
|
|
24
|
+
})
|
|
9
25
|
.action(async (options) => {
|
|
10
26
|
const port = Number(options.port) || DEFAULT_ANTS_PORT;
|
|
11
27
|
try {
|
|
12
|
-
const { ctx, chain, dataDir, configPath } = await loadAntsContext(antsCmd);
|
|
13
|
-
const
|
|
28
|
+
const { ctx, chain, dataDir, configPath } = await loadAntsContext(antsCmd, { address: options.address });
|
|
29
|
+
const selectedAddress = options.address ? ctx.address : undefined;
|
|
30
|
+
let payments;
|
|
31
|
+
const server = await createAntsServer({ port, dataDir, configPath, chain, browserWallet: true, address: ctx.address, selectedAddress, onAuthorize: options.address ? undefined : async () => {
|
|
32
|
+
if (!payments) {
|
|
33
|
+
const { createServer } = await import('@antseed/payments');
|
|
34
|
+
payments = await createServer({ port: 0, dataDir, configPath, chainOverrides: { ...chain } });
|
|
35
|
+
await payments.listen({ port: 0, host: '127.0.0.1' });
|
|
36
|
+
}
|
|
37
|
+
const bound = payments.server.address();
|
|
38
|
+
if (!bound || typeof bound === 'string')
|
|
39
|
+
throw new Error('Payments server is not listening.');
|
|
40
|
+
const params = new URLSearchParams({ token: payments.bearerToken, page: 'pay', action: 'authorize' });
|
|
41
|
+
const { default: open } = await import('open');
|
|
42
|
+
await open(`http://127.0.0.1:${bound.port}?${params}`);
|
|
43
|
+
} });
|
|
14
44
|
const url = await server.listen();
|
|
15
45
|
console.log('');
|
|
16
46
|
console.log(chalk.bold('ANTS staking dashboard'));
|
|
17
|
-
console.log(`
|
|
47
|
+
console.log(selectedAddress ? ` Selected account: ${selectedAddress}` : ` Buyer account: ${ctx.address}`);
|
|
18
48
|
console.log(` Chain: ${chain.chainId} (${chain.rpcUrl})`);
|
|
19
49
|
console.log(` URL: ${chalk.cyan(url)}`);
|
|
20
|
-
console.log(chalk.dim(' The URL carries a one-time session token;
|
|
50
|
+
console.log(chalk.dim(' The URL carries a one-time session token; connect your wallet in the browser to approve transactions.'));
|
|
21
51
|
console.log(chalk.dim(' Every dashboard action has a CLI equivalent: antseed ants --help. Press Ctrl+C to stop.'));
|
|
22
52
|
console.log('');
|
|
23
53
|
if (options.open) {
|
|
@@ -31,6 +61,7 @@ export function registerAntsDashboardAction(antsCmd) {
|
|
|
31
61
|
}
|
|
32
62
|
const shutdown = async () => {
|
|
33
63
|
await server.close();
|
|
64
|
+
await payments?.close();
|
|
34
65
|
process.exit(0);
|
|
35
66
|
};
|
|
36
67
|
process.on('SIGINT', () => { void shutdown(); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import assert from 'node:assert/strict';
|
|
2
2
|
import test from 'node:test';
|
|
3
|
-
import { Command } from 'commander';
|
|
3
|
+
import { Command, CommanderError } from 'commander';
|
|
4
4
|
import { DEFAULT_ANTS_PORT, registerAntsDashboardAction } from './dashboard.js';
|
|
5
|
-
test('antseed ants
|
|
5
|
+
test('antseed ants registers a port, --no-open and an optional --address pin', () => {
|
|
6
6
|
const ants = new Command('ants');
|
|
7
7
|
registerAntsDashboardAction(ants);
|
|
8
8
|
const port = ants.options.find((option) => option.long === '--port');
|
|
@@ -10,5 +10,42 @@ test('antseed ants defaults to the dashboard with a port and --no-open switch',
|
|
|
10
10
|
assert.equal(port.defaultValue, String(DEFAULT_ANTS_PORT));
|
|
11
11
|
assert.equal(DEFAULT_ANTS_PORT, 3119);
|
|
12
12
|
assert.ok(ants.options.some((option) => option.long === '--no-open'));
|
|
13
|
+
assert.ok(ants.options.some((option) => option.long === '--address'));
|
|
14
|
+
assert.ok(!ants.options.some((option) => option.long === '--local-address'));
|
|
15
|
+
});
|
|
16
|
+
test('help and CLI subcommands work without dashboard flags', async () => {
|
|
17
|
+
let output = '';
|
|
18
|
+
const command = new Command('ants').exitOverride().configureOutput({ writeOut: text => { output += text; } });
|
|
19
|
+
registerAntsDashboardAction(command);
|
|
20
|
+
await assert.rejects(command.parseAsync(['--help'], { from: 'user' }), error => error instanceof CommanderError && error.exitCode === 0);
|
|
21
|
+
assert.match(output, /--address/);
|
|
22
|
+
let ran = false;
|
|
23
|
+
command.command('status').action(() => { ran = true; });
|
|
24
|
+
await command.parseAsync(['status'], { from: 'user' });
|
|
25
|
+
assert.equal(ran, true);
|
|
26
|
+
});
|
|
27
|
+
function dashboardCommand() {
|
|
28
|
+
const command = new Command('ants').exitOverride().configureOutput({ writeErr: () => { } });
|
|
29
|
+
registerAntsDashboardAction(command);
|
|
30
|
+
command.action(() => { });
|
|
31
|
+
return command;
|
|
32
|
+
}
|
|
33
|
+
test('plain antseed ants parses without an account flag', () => {
|
|
34
|
+
const command = dashboardCommand().parse([], { from: 'user' });
|
|
35
|
+
assert.equal(command.opts().address, undefined);
|
|
36
|
+
});
|
|
37
|
+
test('--address validates and checksums the pinned account', () => {
|
|
38
|
+
const address = '0x00000000000000000000000000000000000000ab';
|
|
39
|
+
const command = dashboardCommand();
|
|
40
|
+
command.parse(['--address', address], { from: 'user' });
|
|
41
|
+
assert.equal(command.opts().address, '0x00000000000000000000000000000000000000AB');
|
|
42
|
+
for (const value of ['bad', '0x0000000000000000000000000000000000000000']) {
|
|
43
|
+
assert.throws(() => dashboardCommand().parse(['--address', value], { from: 'user' }), /non-zero Ethereum address/);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
test('--address cannot silently apply to CLI transaction subcommands', () => {
|
|
47
|
+
const command = dashboardCommand();
|
|
48
|
+
command.command('stake').action(() => assert.fail('Must not run a transaction subcommand'));
|
|
49
|
+
assert.throws(() => command.parse(['--address', '0x00000000000000000000000000000000000000ab', 'stake'], { from: 'user' }), /only applies to the dashboard/);
|
|
13
50
|
});
|
|
14
51
|
//# sourceMappingURL=dashboard.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/dashboard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positions.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/positions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAGzE,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,mBAAmB,CAAC,GAAG,MAAM,CAG5G;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"positions.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/positions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAGzE,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,UAAU,GAAG,mBAAmB,CAAC,GAAG,MAAM,CAG5G;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCnE"}
|
|
@@ -17,6 +17,8 @@ export function registerAntsPositionsCommand(antsCmd) {
|
|
|
17
17
|
const view = await positions(ctx);
|
|
18
18
|
if (options.json)
|
|
19
19
|
return printJson(view);
|
|
20
|
+
if (view.rewardSource?.error)
|
|
21
|
+
console.log(chalk.yellow(`Staking rewards unavailable: ${view.rewardSource.error}`));
|
|
20
22
|
if (view.positions.length === 0) {
|
|
21
23
|
console.log(chalk.yellow('No staking positions for this wallet.'));
|
|
22
24
|
console.log(chalk.dim('Stake with: antseed ants stake <amount> --agent <agentId> --epochs <n>'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positions.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/positions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5D,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,QAAwE;IAClG,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC5E,OAAO,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAAgB;IAC3D,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QACvG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7I,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,CAAC,EAAE;gBACX,QAAQ,CAAC,OAAO;gBAChB,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACjC,QAAQ,CAAC,eAAe;gBACxB,QAAQ,CAAC,aAAa;gBACtB,QAAQ,CAAC,eAAe;gBACxB,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;gBACvE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBACjC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClC,WAAW,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,YAAY,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,4BAA4B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACjK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,6BAA6B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAChO,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
1
|
+
{"version":3,"file":"positions.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/positions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewards.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/rewards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAoE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGzI,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAsD,CAAC;AAEzG,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,EAAE,CAE/F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAG/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQ9D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"rewards.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/rewards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAoE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGzI,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAsD,CAAC;AAEzG,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,YAAY,EAAE,CAE/F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAG/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQ9D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyEjE"}
|
|
@@ -36,6 +36,10 @@ export function registerAntsRewardsCommand(antsCmd) {
|
|
|
36
36
|
console.log(` ${label.padEnd(28)} ${chalk.green(ants(amount).padStart(24))} ${chalk.dim(note)}`);
|
|
37
37
|
};
|
|
38
38
|
line('Staker pool rewards', view.staker.total, view.staker.positions.length ? `${view.staker.positions.length} position(s)` : '');
|
|
39
|
+
if (view.staker.source?.error)
|
|
40
|
+
console.log(chalk.yellow(` ${view.staker.source.error}`));
|
|
41
|
+
else if (view.staker.source?.indexedBlock !== undefined)
|
|
42
|
+
console.log(chalk.dim(` Antscan checkpoint: block ${view.staker.source.indexedBlock}; claims are verified live.`));
|
|
39
43
|
line('Seller usage rewards', view.sellerUsage.total, view.sellerUsage.agentId ? `agent ${view.sellerUsage.agentId}` : 'no seller agent');
|
|
40
44
|
line('Buyer usage rewards', view.buyerUsage.total, view.buyerUsage.operator && !view.buyerUsage.claimable ? `paid to operator ${view.buyerUsage.operator}` : '');
|
|
41
45
|
line('Legacy seller emissions', view.legacy.seller, view.legacy.contract ?? '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/rewards.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAA0C,MAAM,eAAe,CAAC;AACzI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEzG,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,OAA+C;IAC7E,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC9F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,mBAAmB,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC,EAAE;QAC/G,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,YAAY,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE;QAC3F,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,MAAM,CAAC,WAAW,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE;QACxF,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,gBAAgB,CAAC,MAAM,yBAAyB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;KAC7H,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,YAAY,CAAC,MAAM,iBAAiB,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gFAAgF,CAAC,CAAC;IAEjG,UAAU;SACP,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QACrG,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"rewards.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/rewards.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,12 @@ export interface AntsCommandContext {
|
|
|
8
8
|
dataDir: string;
|
|
9
9
|
configPath: string;
|
|
10
10
|
}
|
|
11
|
-
/** Build the ANTS service context from the CLI config and the node identity wallet. */
|
|
12
|
-
export declare function loadAntsContext(command: Command
|
|
11
|
+
/** Build the ANTS service context from the CLI config and the node identity wallet, or for an explicit external account without a signer. */
|
|
12
|
+
export declare function loadAntsContext(command: Command, options?: {
|
|
13
|
+
address?: string;
|
|
14
|
+
}): Promise<AntsCommandContext>;
|
|
13
15
|
export declare function printJson(value: unknown): void;
|
|
14
|
-
export declare function ants(baseUnits: string | bigint, digits?: number): string;
|
|
16
|
+
export declare function ants(baseUnits: string | bigint | null, digits?: number): string;
|
|
15
17
|
export declare function explorerTx(evmChainId: number, hash: string): string;
|
|
16
18
|
/** Spinner-backed reporter: each step becomes a line, transaction hashes are printed dimmed. */
|
|
17
19
|
export declare function spinnerReporter(spinner: Ora, evmChainId: number): StepReporter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAA4B,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAA4B,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6IAA6I;AAC7I,wBAAsB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAUvH;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,MAAM,SAAI,GAAG,MAAM,CAE1E;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAU9E;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjL;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlI;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEhD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYhE;AAED,+EAA+E;AAC/E,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAEnE"}
|
|
@@ -4,12 +4,14 @@ import { AntsContext, formatAnts, jsonReplacer } from '@antseed/ants';
|
|
|
4
4
|
import { getGlobalOptions } from '../types.js';
|
|
5
5
|
import { loadConfig } from '../../../config/loader.js';
|
|
6
6
|
import { loadCryptoContext, requireCryptoConfig } from '../../payment-utils.js';
|
|
7
|
-
/** Build the ANTS service context from the CLI config and the node identity wallet. */
|
|
8
|
-
export async function loadAntsContext(command) {
|
|
7
|
+
/** Build the ANTS service context from the CLI config and the node identity wallet, or for an explicit external account without a signer. */
|
|
8
|
+
export async function loadAntsContext(command, options = {}) {
|
|
9
9
|
const global = getGlobalOptions(command);
|
|
10
10
|
const config = await loadConfig(global.config);
|
|
11
11
|
const chain = requireCryptoConfig(config);
|
|
12
|
-
const
|
|
12
|
+
const identity = options.address ? undefined : await loadCryptoContext(global.dataDir);
|
|
13
|
+
const wallet = identity?.wallet;
|
|
14
|
+
const address = options.address ?? wallet.address;
|
|
13
15
|
const ctx = new AntsContext({ chain, address, signer: wallet });
|
|
14
16
|
await ctx.selectRpc();
|
|
15
17
|
return { ctx, chain: ctx.chain, dataDir: global.dataDir, configPath: global.config };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAqB,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAUhF,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import assert from 'node:assert/strict';
|
|
2
2
|
import test from 'node:test';
|
|
3
|
-
import {
|
|
3
|
+
import { mkdtemp, readdir, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { AntsContext } from '@antseed/ants';
|
|
8
|
+
import { Wallet } from 'ethers';
|
|
9
|
+
import { ants, epochDate, explorerTx, loadAntsContext, parseIds, pct, usdc } from './shared.js';
|
|
10
|
+
test('dashboard selection loads an existing identity without creating one, or skips identity for an explicit address', async (context) => {
|
|
11
|
+
context.mock.method(AntsContext.prototype, 'selectRpc', async () => { });
|
|
12
|
+
const dataDir = await mkdtemp(join(tmpdir(), 'ants-dashboard-context-'));
|
|
13
|
+
context.after(() => rm(dataDir, { recursive: true, force: true }));
|
|
14
|
+
const command = new Command('ants').option('--data-dir <directory>', '', dataDir).option('--config <file>', '', join(dataDir, 'config.json'));
|
|
15
|
+
const wallet = Wallet.createRandom();
|
|
16
|
+
const external = await loadAntsContext(command, { address: wallet.address });
|
|
17
|
+
assert.equal(external.ctx.address, wallet.address);
|
|
18
|
+
assert.equal(external.ctx.signer, undefined);
|
|
19
|
+
assert.deepEqual(await readdir(dataDir), []);
|
|
20
|
+
await writeFile(join(dataDir, 'identity.key'), wallet.privateKey.slice(2));
|
|
21
|
+
const integrated = await loadAntsContext(command);
|
|
22
|
+
assert.equal(integrated.ctx.address, wallet.address);
|
|
23
|
+
assert.equal(await integrated.ctx.signer?.getAddress(), wallet.address);
|
|
24
|
+
});
|
|
4
25
|
test('parseIds turns positional strings into numbers', () => {
|
|
5
26
|
assert.deepEqual(parseIds(['1', '7']), [1, 7]);
|
|
6
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/ants/shared.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB5D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { registerBuyerStartCommand } from './start.js';
|
|
2
2
|
import { registerBuyerStatusCommand } from './status.js';
|
|
3
3
|
import { registerBuyerDepositCommand } from './deposit.js';
|
|
4
|
+
import { registerBuyerSetAuthorizedWalletCommand } from './set-authorized-wallet.js';
|
|
4
5
|
import { registerBuyerWithdrawCommand } from './withdraw.js';
|
|
5
6
|
import { registerBuyerSweepCommand } from './sweep.js';
|
|
6
7
|
import { registerBuyerBalanceCommand } from './balance.js';
|
|
@@ -17,6 +18,7 @@ export function registerBuyerCommands(program) {
|
|
|
17
18
|
registerBuyerStatusCommand(buyerCmd);
|
|
18
19
|
registerBuyerDepositCommand(buyerCmd);
|
|
19
20
|
registerBuyerWithdrawCommand(buyerCmd);
|
|
21
|
+
registerBuyerSetAuthorizedWalletCommand(buyerCmd);
|
|
20
22
|
registerBuyerSweepCommand(buyerCmd);
|
|
21
23
|
registerBuyerBalanceCommand(buyerCmd);
|
|
22
24
|
registerBuyerConnectionCommand(buyerCmd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACrC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACrC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,uCAAuC,CAAC,QAAQ,CAAC,CAAC;IAClD,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACtC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IACvC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { DepositsClient } from '@antseed/node';
|
|
3
|
+
import type { CryptoContext } from '../../payment-utils.js';
|
|
4
|
+
interface SetSelfAuthorizedWalletInput {
|
|
5
|
+
context: Pick<CryptoContext, 'wallet' | 'address'>;
|
|
6
|
+
client: Pick<DepositsClient, 'getOperator' | 'getOperatorNonce' | 'setOperator'>;
|
|
7
|
+
evmChainId: number;
|
|
8
|
+
depositsContractAddress: string;
|
|
9
|
+
sign: (wallet: CryptoContext['wallet'], chainId: number, contract: string, operator: string, nonce: bigint) => Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
interface AuthorizationServer {
|
|
12
|
+
bearerToken?: string;
|
|
13
|
+
server: {
|
|
14
|
+
address: () => string | {
|
|
15
|
+
port: number;
|
|
16
|
+
} | null;
|
|
17
|
+
};
|
|
18
|
+
listen: (options: {
|
|
19
|
+
port: number;
|
|
20
|
+
host: string;
|
|
21
|
+
}) => Promise<unknown>;
|
|
22
|
+
close: () => Promise<unknown>;
|
|
23
|
+
}
|
|
24
|
+
interface BrowserAuthorizationInput {
|
|
25
|
+
dataDir: string;
|
|
26
|
+
configPath?: string;
|
|
27
|
+
openBrowser?: (url: string) => Promise<unknown>;
|
|
28
|
+
createServer: (options: {
|
|
29
|
+
port: number;
|
|
30
|
+
dataDir: string;
|
|
31
|
+
configPath?: string;
|
|
32
|
+
onPaymentCompleted: () => void;
|
|
33
|
+
}) => Promise<AuthorizationServer>;
|
|
34
|
+
log?: (message: string) => void;
|
|
35
|
+
}
|
|
36
|
+
export declare function buildAuthorizedWalletUrl(port: number, token: string): string;
|
|
37
|
+
/** Open the existing wallet-connected authorization page and wait for confirmation. */
|
|
38
|
+
export declare function runBrowserWalletAuthorization(input: BrowserAuthorizationInput): Promise<void>;
|
|
39
|
+
/** Initial self-authorization only: changing an existing wallet requires the current operator. */
|
|
40
|
+
export declare function setSelfAuthorizedWallet(input: SetSelfAuthorizedWalletInput): Promise<string | null>;
|
|
41
|
+
export declare function registerBuyerSetAuthorizedWalletCommand(buyerCmd: Command): void;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=set-authorized-wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-authorized-wallet.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/set-authorized-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,UAAU,4BAA4B;IACpC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,kBAAkB,GAAG,aAAa,CAAC,CAAC;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChI;AAED,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,MAAM,GAAG;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5D,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,YAAY,EAAE,CAAC,OAAO,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;KAChC,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAOD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG5E;AAED,uFAAuF;AACvF,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BnG;AAED,kGAAkG;AAClG,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzG;AAED,wBAAgB,uCAAuC,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAuD/E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { ZeroAddress } from 'ethers';
|
|
4
|
+
import { getGlobalOptions } from '../types.js';
|
|
5
|
+
export function buildAuthorizedWalletUrl(port, token) {
|
|
6
|
+
const params = new URLSearchParams({ token, page: 'pay', action: 'authorize' });
|
|
7
|
+
return `http://127.0.0.1:${port}?${params.toString()}`;
|
|
8
|
+
}
|
|
9
|
+
/** Open the existing wallet-connected authorization page and wait for confirmation. */
|
|
10
|
+
export async function runBrowserWalletAuthorization(input) {
|
|
11
|
+
const log = input.log ?? console.log;
|
|
12
|
+
let complete;
|
|
13
|
+
const completed = new Promise((resolve) => { complete = resolve; });
|
|
14
|
+
const server = await input.createServer({
|
|
15
|
+
port: 0,
|
|
16
|
+
dataDir: input.dataDir,
|
|
17
|
+
...(input.configPath ? { configPath: input.configPath } : {}),
|
|
18
|
+
onPaymentCompleted: complete,
|
|
19
|
+
});
|
|
20
|
+
try {
|
|
21
|
+
await server.listen({ port: 0, host: '127.0.0.1' });
|
|
22
|
+
const bound = server.server.address();
|
|
23
|
+
if (!bound || typeof bound === 'string')
|
|
24
|
+
throw new Error('Wallet authorization server is not listening.');
|
|
25
|
+
if (!server.bearerToken)
|
|
26
|
+
throw new Error('Wallet authorization server did not provide a session token.');
|
|
27
|
+
const url = buildAuthorizedWalletUrl(bound.port, server.bearerToken);
|
|
28
|
+
log(`Open this secure local page to connect the authorized wallet:\n${url}`);
|
|
29
|
+
if (input.openBrowser) {
|
|
30
|
+
try {
|
|
31
|
+
await input.openBrowser(url);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
log('Could not open a browser automatically; open the URL above manually.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
await completed;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await server.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Initial self-authorization only: changing an existing wallet requires the current operator. */
|
|
44
|
+
export async function setSelfAuthorizedWallet(input) {
|
|
45
|
+
const { wallet, address: buyer } = input.context;
|
|
46
|
+
const current = await input.client.getOperator(buyer);
|
|
47
|
+
if (current.toLowerCase() === buyer.toLowerCase())
|
|
48
|
+
return null;
|
|
49
|
+
if (current.toLowerCase() !== ZeroAddress) {
|
|
50
|
+
throw new Error(`Authorized wallet is already set to ${current}. Only that wallet can transfer authorization; the buyer identity cannot replace it.`);
|
|
51
|
+
}
|
|
52
|
+
const nonce = await input.client.getOperatorNonce(buyer);
|
|
53
|
+
const signature = await input.sign(wallet, input.evmChainId, input.depositsContractAddress, buyer, nonce);
|
|
54
|
+
return input.client.setOperator(wallet, buyer, buyer, nonce, signature);
|
|
55
|
+
}
|
|
56
|
+
export function registerBuyerSetAuthorizedWalletCommand(buyerCmd) {
|
|
57
|
+
buyerCmd
|
|
58
|
+
.command('set-authorized-wallet')
|
|
59
|
+
.description('Authorize an external wallet in the browser, or authorize the buyer wallet with --self')
|
|
60
|
+
.option('--self', 'authorize the buyer hot wallet itself (requires ETH for gas)', false)
|
|
61
|
+
.option('--no-open', 'print the secure local URL without opening a browser')
|
|
62
|
+
.addHelpText('after', '\nBy default, opens the AI VPN wallet flow so the connected external wallet submits the transaction and pays gas. --self instead makes the buyer hot wallet its own authorized wallet. The authorized wallet controls withdrawals and future authorization transfers.')
|
|
63
|
+
.action(async (options) => {
|
|
64
|
+
let spinner;
|
|
65
|
+
try {
|
|
66
|
+
if (options.self && !options.open)
|
|
67
|
+
throw new Error('--no-open cannot be used with --self.');
|
|
68
|
+
const globalOpts = getGlobalOptions(buyerCmd);
|
|
69
|
+
if (!options.self) {
|
|
70
|
+
const { createServer } = await import('@antseed/payments');
|
|
71
|
+
const openBrowser = options.open ? (await import('open')).default : undefined;
|
|
72
|
+
await runBrowserWalletAuthorization({
|
|
73
|
+
dataDir: globalOpts.dataDir,
|
|
74
|
+
configPath: globalOpts.config,
|
|
75
|
+
createServer,
|
|
76
|
+
...(openBrowser ? { openBrowser } : {}),
|
|
77
|
+
log: (message) => console.log(chalk.dim(message)),
|
|
78
|
+
});
|
|
79
|
+
console.log(chalk.green('Authorized wallet confirmed.'));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const { loadConfig } = await import('../../../config/loader.js');
|
|
83
|
+
const { loadCryptoContext, createDepositsClient, requireCryptoConfig } = await import('../../payment-utils.js');
|
|
84
|
+
const { makeDepositsDomain, signSetOperator } = await import('@antseed/node');
|
|
85
|
+
const config = await loadConfig(globalOpts.config);
|
|
86
|
+
const crypto = requireCryptoConfig(config);
|
|
87
|
+
const context = await loadCryptoContext(globalOpts.dataDir);
|
|
88
|
+
console.log(chalk.dim(`Buyer: ${context.address}`));
|
|
89
|
+
console.log(chalk.dim(`Chain: ${crypto.evmChainId} | Deposits: ${crypto.depositsContractAddress}`));
|
|
90
|
+
console.log(chalk.yellow('The buyer wallet will control withdrawals and future authorization transfers.'));
|
|
91
|
+
console.log(chalk.dim('The buyer wallet must have ETH on this chain to pay gas.'));
|
|
92
|
+
spinner = ora('Authorizing buyer wallet...').start();
|
|
93
|
+
const txHash = await setSelfAuthorizedWallet({
|
|
94
|
+
context,
|
|
95
|
+
client: createDepositsClient(config),
|
|
96
|
+
evmChainId: crypto.evmChainId,
|
|
97
|
+
depositsContractAddress: crypto.depositsContractAddress,
|
|
98
|
+
sign: (wallet, chainId, contract, operator, nonce) => signSetOperator(wallet, makeDepositsDomain(chainId, contract), { operator, nonce }),
|
|
99
|
+
});
|
|
100
|
+
spinner.succeed(chalk.green(txHash ? 'Buyer wallet authorized.' : 'Buyer wallet is already authorized; no transaction sent.'));
|
|
101
|
+
if (txHash)
|
|
102
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const message = `Failed to set authorized wallet: ${err.message}`;
|
|
106
|
+
if (spinner)
|
|
107
|
+
spinner.fail(chalk.red(message));
|
|
108
|
+
else
|
|
109
|
+
console.error(chalk.red(message));
|
|
110
|
+
process.exitCode = 1;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=set-authorized-wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-authorized-wallet.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/set-authorized-wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-authorized-wallet.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/set-authorized-wallet.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import test from 'node:test';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { Wallet, ZeroAddress } from 'ethers';
|
|
5
|
+
import { buildAuthorizedWalletUrl, registerBuyerSetAuthorizedWalletCommand, runBrowserWalletAuthorization, setSelfAuthorizedWallet, } from './set-authorized-wallet.js';
|
|
6
|
+
const buyer = '0x2222222222222222222222222222222222222222';
|
|
7
|
+
const otherOperator = '0x3333333333333333333333333333333333333333';
|
|
8
|
+
const contract = '0x4444444444444444444444444444444444444444';
|
|
9
|
+
const wallet = new Wallet('0x' + '01'.repeat(32));
|
|
10
|
+
const context = { wallet, address: buyer };
|
|
11
|
+
function selfAuthorizationFixture(current = ZeroAddress) {
|
|
12
|
+
const calls = [];
|
|
13
|
+
return {
|
|
14
|
+
calls,
|
|
15
|
+
input: {
|
|
16
|
+
context,
|
|
17
|
+
evmChainId: 8453,
|
|
18
|
+
depositsContractAddress: contract,
|
|
19
|
+
client: {
|
|
20
|
+
getOperator: async (address) => { calls.push(['getOperator', address]); return current; },
|
|
21
|
+
getOperatorNonce: async (address) => { calls.push(['getOperatorNonce', address]); return 9007199254740993n; },
|
|
22
|
+
setOperator: async (...args) => { calls.push(['setOperator', ...args]); return '0xtx'; },
|
|
23
|
+
},
|
|
24
|
+
sign: async (...args) => { calls.push(['sign', ...args]); return '0xsig'; },
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
test('self authorization signs the live nonce and sets the buyer as operator', async () => {
|
|
29
|
+
const { input, calls } = selfAuthorizationFixture();
|
|
30
|
+
assert.equal(await setSelfAuthorizedWallet(input), '0xtx');
|
|
31
|
+
assert.deepEqual(calls, [
|
|
32
|
+
['getOperator', buyer],
|
|
33
|
+
['getOperatorNonce', buyer],
|
|
34
|
+
['sign', wallet, 8453, contract, buyer, 9007199254740993n],
|
|
35
|
+
['setOperator', wallet, buyer, buyer, 9007199254740993n, '0xsig'],
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
test('self authorization is an idempotent no-op when the buyer is already authorized', async () => {
|
|
39
|
+
const { input, calls } = selfAuthorizationFixture(buyer);
|
|
40
|
+
assert.equal(await setSelfAuthorizedWallet(input), null);
|
|
41
|
+
assert.deepEqual(calls, [['getOperator', buyer]]);
|
|
42
|
+
});
|
|
43
|
+
test('self authorization cannot replace a different authorized wallet', async () => {
|
|
44
|
+
const { input, calls } = selfAuthorizationFixture(otherOperator);
|
|
45
|
+
await assert.rejects(setSelfAuthorizedWallet(input), /Only that wallet can transfer authorization/);
|
|
46
|
+
assert.deepEqual(calls, [['getOperator', buyer]]);
|
|
47
|
+
});
|
|
48
|
+
test('RPC, signing, and transaction failures propagate without retries', async () => {
|
|
49
|
+
for (const stage of ['getOperator', 'getOperatorNonce', 'sign', 'setOperator']) {
|
|
50
|
+
const { input, calls } = selfAuthorizationFixture();
|
|
51
|
+
const fail = async () => { throw new Error(`${stage} failed`); };
|
|
52
|
+
if (stage === 'sign')
|
|
53
|
+
input.sign = fail;
|
|
54
|
+
else
|
|
55
|
+
input.client[stage] = fail;
|
|
56
|
+
await assert.rejects(setSelfAuthorizedWallet(input), new RegExp(`${stage} failed`));
|
|
57
|
+
assert.equal(calls.filter(([name]) => name === 'setOperator').length, 0);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
test('builds a secure local wallet authorization URL', () => {
|
|
61
|
+
assert.equal(buildAuthorizedWalletUrl(4321, 'secret token'), 'http://127.0.0.1:4321?token=secret+token&page=pay&action=authorize');
|
|
62
|
+
});
|
|
63
|
+
test('browser flow opens the connected-wallet page, waits for completion, and closes', async () => {
|
|
64
|
+
const calls = [];
|
|
65
|
+
let onPaymentCompleted;
|
|
66
|
+
await runBrowserWalletAuthorization({
|
|
67
|
+
dataDir: '/tmp/buyer',
|
|
68
|
+
configPath: '/tmp/config.json',
|
|
69
|
+
createServer: async (options) => {
|
|
70
|
+
calls.push(['createServer', options.port, options.dataDir, options.configPath]);
|
|
71
|
+
onPaymentCompleted = options.onPaymentCompleted;
|
|
72
|
+
return {
|
|
73
|
+
bearerToken: 'token',
|
|
74
|
+
server: { address: () => ({ port: 4321 }) },
|
|
75
|
+
listen: async (options) => { calls.push(['listen', options]); },
|
|
76
|
+
close: async () => { calls.push(['close']); },
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
openBrowser: async (url) => {
|
|
80
|
+
calls.push(['openBrowser', url]);
|
|
81
|
+
onPaymentCompleted?.();
|
|
82
|
+
},
|
|
83
|
+
log: (message) => { calls.push(['log', message]); },
|
|
84
|
+
});
|
|
85
|
+
assert.deepEqual(calls, [
|
|
86
|
+
['createServer', 0, '/tmp/buyer', '/tmp/config.json'],
|
|
87
|
+
['listen', { port: 0, host: '127.0.0.1' }],
|
|
88
|
+
['log', 'Open this secure local page to connect the authorized wallet:\nhttp://127.0.0.1:4321?token=token&page=pay&action=authorize'],
|
|
89
|
+
['openBrowser', 'http://127.0.0.1:4321?token=token&page=pay&action=authorize'],
|
|
90
|
+
['close'],
|
|
91
|
+
]);
|
|
92
|
+
});
|
|
93
|
+
test('browser flow can print the URL without opening a browser', async () => {
|
|
94
|
+
let complete;
|
|
95
|
+
const opened = [];
|
|
96
|
+
await runBrowserWalletAuthorization({
|
|
97
|
+
dataDir: '/tmp/buyer',
|
|
98
|
+
createServer: async (options) => {
|
|
99
|
+
complete = options.onPaymentCompleted;
|
|
100
|
+
return {
|
|
101
|
+
bearerToken: 'token',
|
|
102
|
+
server: { address: () => ({ port: 4321 }) },
|
|
103
|
+
listen: async () => { queueMicrotask(complete); },
|
|
104
|
+
close: async () => { },
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
log: (message) => { opened.push(message); },
|
|
108
|
+
});
|
|
109
|
+
assert.equal(opened.length, 1);
|
|
110
|
+
assert.match(opened[0], /http:\/\/127\.0\.0\.1:4321/);
|
|
111
|
+
});
|
|
112
|
+
test('command defaults to browser authorization and exposes explicit self and no-open flags', () => {
|
|
113
|
+
let help = '';
|
|
114
|
+
const program = new Command().exitOverride().configureOutput({
|
|
115
|
+
writeOut: (value) => { help += value; },
|
|
116
|
+
writeErr: () => { },
|
|
117
|
+
});
|
|
118
|
+
const buyerCmd = program.command('buyer');
|
|
119
|
+
registerBuyerSetAuthorizedWalletCommand(buyerCmd);
|
|
120
|
+
const command = buyerCmd.commands[0];
|
|
121
|
+
assert.equal(command.name(), 'set-authorized-wallet');
|
|
122
|
+
assert.equal(command.registeredArguments.length, 0);
|
|
123
|
+
assert.deepEqual(command.options.map((option) => option.long), ['--self', '--no-open']);
|
|
124
|
+
command.outputHelp();
|
|
125
|
+
assert.match(help, /connected external wallet.*--self.*buyer hot wallet/s);
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=set-authorized-wallet.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-authorized-wallet.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/set-authorized-wallet.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antseed/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.163",
|
|
4
4
|
"description": "Antseed Network CLI and Web Dashboard",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"qrcode": "^1.5.4",
|
|
25
25
|
"reflect-metadata": "^0.2.2",
|
|
26
26
|
"@antseed/ant-agent": "0.1.35",
|
|
27
|
-
"@antseed/ants": "0.1.
|
|
27
|
+
"@antseed/ants": "0.1.6",
|
|
28
|
+
"@antseed/node": "0.2.123",
|
|
28
29
|
"@antseed/api-adapter": "0.1.48",
|
|
29
|
-
"@antseed/
|
|
30
|
-
"@antseed/payments": "0.1.49",
|
|
30
|
+
"@antseed/payments": "0.1.50",
|
|
31
31
|
"@antseed/provider-core": "0.2.54"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|