@antseed/cli 0.1.149 → 0.1.151
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 +38 -19
- package/dist/cli/commands/buyer/activity.d.ts +3 -0
- package/dist/cli/commands/buyer/activity.d.ts.map +1 -0
- package/dist/cli/commands/buyer/activity.js +555 -0
- package/dist/cli/commands/buyer/activity.js.map +1 -0
- package/dist/cli/commands/buyer/daemon.d.ts +13 -0
- package/dist/cli/commands/buyer/daemon.d.ts.map +1 -0
- package/dist/cli/commands/buyer/daemon.js +39 -0
- package/dist/cli/commands/buyer/daemon.js.map +1 -0
- package/dist/cli/commands/buyer/deposit.d.ts +8 -0
- package/dist/cli/commands/buyer/deposit.d.ts.map +1 -1
- package/dist/cli/commands/buyer/deposit.js +338 -25
- package/dist/cli/commands/buyer/deposit.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/start.d.ts.map +1 -1
- package/dist/cli/commands/buyer/start.js +44 -2
- package/dist/cli/commands/buyer/start.js.map +1 -1
- package/dist/cli/commands/buyer/sweep.d.ts.map +1 -1
- package/dist/cli/commands/buyer/sweep.js +17 -17
- package/dist/cli/commands/buyer/sweep.js.map +1 -1
- package/dist/cli/commands/payments.d.ts.map +1 -1
- package/dist/cli/commands/payments.js +29 -34
- package/dist/cli/commands/payments.js.map +1 -1
- package/dist/cli/commands/seller/start.d.ts.map +1 -1
- package/dist/cli/commands/seller/start.js +4 -1
- package/dist/cli/commands/seller/start.js.map +1 -1
- package/dist/cli/commands/seller/start.test.js +15 -0
- package/dist/cli/commands/seller/start.test.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +2 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/loader.test.js +18 -0
- package/dist/config/loader.test.js.map +1 -1
- package/dist/config/types.d.ts +7 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/generated/baked-defaults.d.ts +15 -0
- package/dist/generated/baked-defaults.d.ts.map +1 -0
- package/dist/generated/baked-defaults.js +15 -0
- package/dist/generated/baked-defaults.js.map +1 -0
- package/dist/plugins/manager.d.ts +1 -0
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +15 -4
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/manager.test.d.ts +2 -0
- package/dist/plugins/manager.test.d.ts.map +1 -0
- package/dist/plugins/manager.test.js +15 -0
- package/dist/plugins/manager.test.js.map +1 -0
- package/dist/proxy/buyer-proxy.d.ts +12 -1
- package/dist/proxy/buyer-proxy.d.ts.map +1 -1
- package/dist/proxy/buyer-proxy.js +75 -2
- package/dist/proxy/buyer-proxy.js.map +1 -1
- package/dist/proxy/buyer-proxy.test.js +96 -7
- package/dist/proxy/buyer-proxy.test.js.map +1 -1
- package/dist/proxy/deposit-watcher.d.ts +125 -0
- package/dist/proxy/deposit-watcher.d.ts.map +1 -0
- package/dist/proxy/deposit-watcher.js +306 -0
- package/dist/proxy/deposit-watcher.js.map +1 -0
- package/dist/proxy/deposit-watcher.test.d.ts +2 -0
- package/dist/proxy/deposit-watcher.test.d.ts.map +1 -0
- package/dist/proxy/deposit-watcher.test.js +173 -0
- package/dist/proxy/deposit-watcher.test.js.map +1 -0
- package/dist/proxy/request-utils.js +4 -3
- package/dist/proxy/request-utils.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/daemon.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,IAAY,EACZ,IAAkB,EAClB,SAAS,GAAG,MAAM;IAElB,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,oBAAoB,IAAI,GAAG,IAAI,EAAE,EAAE;YACpD,GAAG,IAAI;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;SACvC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY,EAAE,SAAS,GAAG,KAAK;IAC5E,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IAC/D,IAAI,CAAC,GAAG,EAAE,EAAE;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAA+B,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1G,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAA;IACvE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC7C,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;QACjC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAgC;KAChE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAA6B;IAClF,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,0BAA0B,EAAE;QAC9D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,EAAE,KAAK,CAAC,CAAA;IACT,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAA4B,CAAA;IAC3E,OAAO,IAAI,EAAE,EAAE,KAAK,IAAI,CAAA;AAC1B,CAAC"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
export interface DepositCommandOptions {
|
|
3
|
+
amount?: string;
|
|
4
|
+
watch: boolean;
|
|
5
|
+
onchain?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function runDepositAction(cmd: Command, options: DepositCommandOptions): Promise<void>;
|
|
2
8
|
export declare function registerBuyerDepositCommand(buyerCmd: Command): void;
|
|
9
|
+
/** Hidden top-level alias: `antseed deposit` → `antseed buyer deposit`. */
|
|
10
|
+
export declare function registerDepositAlias(program: Command): void;
|
|
3
11
|
//# sourceMappingURL=deposit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deposit.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deposit.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8BxC,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAySD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DlG;AASD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAQnE;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK3D"}
|
|
@@ -1,38 +1,351 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
+
import QRCode from 'qrcode';
|
|
3
4
|
import { getGlobalOptions } from '../types.js';
|
|
4
5
|
import { loadConfig } from '../../../config/loader.js';
|
|
5
|
-
import { createDepositsClient,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
import { loadCryptoContext, createDepositsClient, createDepositRelayClient, requireCryptoConfig, formatUsdc, parseUsdcToBaseUnits, } from '../../payment-utils.js';
|
|
7
|
+
import { AntseedNode, peerRelaysSweeps } from '@antseed/node';
|
|
8
|
+
import { parseBootstrapList, toBootstrapConfig } from '@antseed/node/discovery';
|
|
9
|
+
import { buildBuyerBootstrapEntries } from './start.js';
|
|
10
|
+
import { DepositWatcher, } from '../../../proxy/deposit-watcher.js';
|
|
11
|
+
import { daemonDepositsStatus, daemonSetWatchMode } from './daemon.js';
|
|
12
|
+
const DAEMON_STATUS_POLL_MS = 1_000;
|
|
13
|
+
const BALANCE_CHECK_INTERVAL_MS = 5_000;
|
|
14
|
+
const MAX_PEERS_TO_CONNECT = 4;
|
|
15
|
+
const PAYMENTS_PORT = 3118;
|
|
16
|
+
function sleep(ms) {
|
|
17
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
/** EIP-681 payment request: opens a prefilled USDC transfer in mobile wallets. */
|
|
20
|
+
function buildPaymentUri(usdcAddress, evmChainId, address, amountBaseUnits) {
|
|
21
|
+
const base = `ethereum:${usdcAddress}@${evmChainId}/transfer?address=${address}`;
|
|
22
|
+
return amountBaseUnits ? `${base}&uint256=${amountBaseUnits.toString()}` : base;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Serve the connected-wallet deposit page for the duration of the watch, for
|
|
26
|
+
* users who prefer funding from a browser-extension wallet over sending to
|
|
27
|
+
* the hot wallet. Returns null when the port is taken (e.g. the desktop app's
|
|
28
|
+
* portal is running) — the QR/address flow works regardless.
|
|
29
|
+
*/
|
|
30
|
+
async function startWebCheckout(dataDir, amountUsdc) {
|
|
31
|
+
try {
|
|
32
|
+
const { createServer } = await import('@antseed/payments');
|
|
33
|
+
let done = false;
|
|
34
|
+
const rawHex = process.env['ANTSEED_IDENTITY_HEX'] || undefined;
|
|
35
|
+
const identityHex = rawHex ? rawHex.replace(/^0x/i, '') : undefined;
|
|
36
|
+
const server = await createServer({
|
|
37
|
+
port: PAYMENTS_PORT,
|
|
38
|
+
dataDir,
|
|
39
|
+
identityHex,
|
|
40
|
+
onPaymentCompleted: () => { done = true; },
|
|
41
|
+
});
|
|
42
|
+
await server.listen({ port: PAYMENTS_PORT, host: '127.0.0.1' });
|
|
43
|
+
const token = server.bearerToken ?? '';
|
|
44
|
+
const params = new URLSearchParams();
|
|
45
|
+
if (token)
|
|
46
|
+
params.set('token', token);
|
|
47
|
+
params.set('page', 'pay');
|
|
48
|
+
params.set('action', 'deposit');
|
|
49
|
+
const amount = Number(amountUsdc);
|
|
50
|
+
if (Number.isFinite(amount) && amount > 0)
|
|
51
|
+
params.set('amount', String(amount));
|
|
52
|
+
return { url: `http://127.0.0.1:${PAYMENTS_PORT}?${params.toString()}`, completed: () => done };
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ─── Watch rendering ───
|
|
59
|
+
/** Render a watcher event onto the spinner; returns true when the flow is done. */
|
|
60
|
+
function renderEvent(spinner, event) {
|
|
61
|
+
switch (event.phase) {
|
|
62
|
+
case 'received':
|
|
63
|
+
spinner.text = `Received ${formatUsdc(BigInt(event.amountBaseUnits ?? '0'))} USDC in the hot wallet — sweeping into deposits...`;
|
|
64
|
+
return false;
|
|
65
|
+
case 'sweeping':
|
|
66
|
+
spinner.text = `Sweeping ${formatUsdc(BigInt(event.amountBaseUnits ?? '0'))} USDC into your deposits balance...`;
|
|
67
|
+
return false;
|
|
68
|
+
case 'deferred':
|
|
69
|
+
spinner.text = 'Deposit deferred: your deposits balance is at its credit limit. Funds stay in the wallet and sweep when headroom frees up.';
|
|
70
|
+
return false;
|
|
71
|
+
case 'error':
|
|
72
|
+
spinner.text = `${event.error ?? 'Sweep attempt failed'} (retrying automatically)`;
|
|
73
|
+
return false;
|
|
74
|
+
case 'credited':
|
|
75
|
+
spinner.succeed(chalk.green(`Deposited ${formatUsdc(BigInt(event.amountBaseUnits ?? '0'))} USDC into your credits.`));
|
|
76
|
+
if (event.txHash)
|
|
77
|
+
console.log(chalk.dim(`Transaction: ${event.txHash}`));
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function printFinalBalance(config, address) {
|
|
82
|
+
try {
|
|
83
|
+
const depositsClient = createDepositsClient(config);
|
|
84
|
+
const balance = await depositsClient.getBuyerBalance(address);
|
|
85
|
+
console.log(chalk.dim(`Deposits available: ${formatUsdc(balance.available)} USDC (total ${formatUsdc(balance.available + balance.reserved)} USDC)`));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// best-effort display only
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function makeWatchContext(config, dataDir, address, amountUsdc) {
|
|
92
|
+
const depositsClient = createDepositsClient(config);
|
|
93
|
+
const depositsTotal = async () => {
|
|
14
94
|
try {
|
|
15
|
-
|
|
95
|
+
const balance = await depositsClient.getBuyerBalance(address);
|
|
96
|
+
return balance.available + balance.reserved;
|
|
16
97
|
}
|
|
17
98
|
catch {
|
|
18
|
-
|
|
19
|
-
process.exit(1);
|
|
99
|
+
return null;
|
|
20
100
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
101
|
+
};
|
|
102
|
+
const web = await startWebCheckout(dataDir, amountUsdc);
|
|
103
|
+
return { config, address, web, depositsTotal, initialTotal: await depositsTotal() };
|
|
104
|
+
}
|
|
105
|
+
function printWebCheckoutHint(web) {
|
|
106
|
+
if (!web)
|
|
107
|
+
return;
|
|
108
|
+
console.log(` Prefer a browser wallet? Open: ${chalk.bold(web.url)}`);
|
|
109
|
+
console.log(chalk.dim(' (connect MetaMask / Coinbase Wallet / Rabby there — funds go straight into your deposits)'));
|
|
110
|
+
console.log('');
|
|
111
|
+
}
|
|
112
|
+
/** Non-sweep completion check shared by both watch loops. Returns a success message or null. */
|
|
113
|
+
async function checkExternalCompletion(ctx, sweeping) {
|
|
114
|
+
if (ctx.web?.completed())
|
|
115
|
+
return 'Deposit completed from the browser wallet.';
|
|
116
|
+
if (ctx.initialTotal === null || sweeping)
|
|
117
|
+
return null;
|
|
118
|
+
const total = await ctx.depositsTotal();
|
|
119
|
+
if (total !== null && total > ctx.initialTotal) {
|
|
120
|
+
return `Deposits balance increased by ${formatUsdc(total - ctx.initialTotal)} USDC.`;
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/** Watch through the running buyer daemon's watcher (the normal path). */
|
|
125
|
+
async function watchViaDaemon(ctx, port) {
|
|
126
|
+
await daemonSetWatchMode(port, 'active');
|
|
127
|
+
// discardStdin would put the TTY in raw mode for the whole (long-lived)
|
|
128
|
+
// watch, which stops the terminal from ever delivering SIGINT on Ctrl+C.
|
|
129
|
+
const spinner = ora({
|
|
130
|
+
text: 'Waiting for USDC to arrive (Ctrl+C to stop watching — funds sweep automatically either way)...',
|
|
131
|
+
discardStdin: false,
|
|
132
|
+
}).start();
|
|
133
|
+
let demoted = false;
|
|
134
|
+
const demote = () => {
|
|
135
|
+
if (demoted)
|
|
136
|
+
return Promise.resolve();
|
|
137
|
+
demoted = true;
|
|
138
|
+
// Not a hard stop: the daemon keeps a slow background watch, so a
|
|
139
|
+
// transfer that lands after Ctrl+C is still swept automatically.
|
|
140
|
+
return daemonSetWatchMode(port, 'background').catch(() => { });
|
|
141
|
+
};
|
|
142
|
+
process.on('SIGINT', () => {
|
|
143
|
+
spinner.info('Stopped watching. The connection keeps sweeping incoming USDC in the background.');
|
|
144
|
+
// Let the demote request land, but never hang the exit on it.
|
|
145
|
+
setTimeout(() => process.exit(0), 2_000);
|
|
146
|
+
void demote().finally(() => process.exit(0));
|
|
147
|
+
});
|
|
148
|
+
const finish = async (message) => {
|
|
149
|
+
if (message)
|
|
150
|
+
spinner.succeed(chalk.green(message));
|
|
151
|
+
await demote();
|
|
152
|
+
await printFinalBalance(ctx.config, ctx.address);
|
|
153
|
+
process.exit(0);
|
|
154
|
+
};
|
|
155
|
+
let lastSeq = 0;
|
|
156
|
+
const initial = await daemonDepositsStatus(port);
|
|
157
|
+
if (initial?.status?.lastEvent)
|
|
158
|
+
lastSeq = initial.status.lastEvent.seq;
|
|
159
|
+
let lastBalanceCheckAt = 0;
|
|
160
|
+
for (;;) {
|
|
161
|
+
await sleep(DAEMON_STATUS_POLL_MS);
|
|
162
|
+
const current = await daemonDepositsStatus(port);
|
|
163
|
+
if (!current) {
|
|
164
|
+
spinner.text = 'Lost contact with the buyer connection — waiting for it to come back...';
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const event = current.status?.lastEvent;
|
|
168
|
+
if (event && event.seq > lastSeq) {
|
|
169
|
+
lastSeq = event.seq;
|
|
170
|
+
if (renderEvent(spinner, event))
|
|
171
|
+
await finish();
|
|
31
172
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
173
|
+
const sweeping = current.status?.sweepInFlight === true || event?.phase === 'sweeping';
|
|
174
|
+
if (Date.now() - lastBalanceCheckAt > BALANCE_CHECK_INTERVAL_MS) {
|
|
175
|
+
lastBalanceCheckAt = Date.now();
|
|
176
|
+
const message = await checkExternalCompletion(ctx, sweeping);
|
|
177
|
+
if (message)
|
|
178
|
+
await finish(message);
|
|
35
179
|
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/** No daemon: watch locally and sweep through an ephemeral node. */
|
|
183
|
+
async function watchStandalone(ctx, dataDir, crypto) {
|
|
184
|
+
// discardStdin: see watchViaDaemon — raw-mode stdin would swallow Ctrl+C.
|
|
185
|
+
const spinner = ora({ text: 'Waiting for USDC to arrive (Ctrl+C to stop watching)...', discardStdin: false }).start();
|
|
186
|
+
const { config, address } = ctx;
|
|
187
|
+
let node = null;
|
|
188
|
+
let latestReceipt = null;
|
|
189
|
+
const ensureNode = async () => {
|
|
190
|
+
if (node)
|
|
191
|
+
return node;
|
|
192
|
+
const bootstrapNodes = toBootstrapConfig(parseBootstrapList(buildBuyerBootstrapEntries(config.network?.bootstrapNodes)));
|
|
193
|
+
node = new AntseedNode({ role: 'buyer', bootstrapNodes, allowPrivateIPs: true, dataDir });
|
|
194
|
+
await node.start();
|
|
195
|
+
node.on('sweep:receipt', (event) => {
|
|
196
|
+
latestReceipt = event.payload;
|
|
197
|
+
});
|
|
198
|
+
const relayers = (await node.discoverPeers()).filter(peerRelaysSweeps);
|
|
199
|
+
await Promise.allSettled(relayers.slice(0, MAX_PEERS_TO_CONNECT).map((peer) => node.connectToPeer(peer)));
|
|
200
|
+
return node;
|
|
201
|
+
};
|
|
202
|
+
let credited = false;
|
|
203
|
+
const watcher = new DepositWatcher({
|
|
204
|
+
wallet: (await loadCryptoContext(dataDir)).wallet,
|
|
205
|
+
address,
|
|
206
|
+
depositsClient: createDepositsClient(config),
|
|
207
|
+
relayClient: createDepositRelayClient(config),
|
|
208
|
+
usdcAddress: crypto.usdcContractAddress,
|
|
209
|
+
evmChainId: crypto.evmChainId,
|
|
210
|
+
depositRelayAddress: crypto.depositRelayAddress,
|
|
211
|
+
dispatch: async (payload) => (await ensureNode()).dispatchSweepRequest(payload),
|
|
212
|
+
connectRelayers: async () => {
|
|
213
|
+
const n = await ensureNode();
|
|
214
|
+
const relayers = (await n.discoverPeers()).filter(peerRelaysSweeps);
|
|
215
|
+
await Promise.allSettled(relayers.slice(0, MAX_PEERS_TO_CONNECT).map((peer) => n.connectToPeer(peer)));
|
|
216
|
+
},
|
|
217
|
+
getReceipt: async (authNonce) => latestReceipt && latestReceipt.authNonce === authNonce ? latestReceipt : null,
|
|
218
|
+
onEvent: (event) => {
|
|
219
|
+
if (renderEvent(spinner, event))
|
|
220
|
+
credited = true;
|
|
221
|
+
},
|
|
222
|
+
idleIntervalMs: null,
|
|
223
|
+
});
|
|
224
|
+
process.on('SIGINT', () => {
|
|
225
|
+
watcher.stop();
|
|
226
|
+
spinner.info('Stopped watching. Funds already sent stay safe in the hot wallet — run `antseed buyer sweep` to deposit them.');
|
|
227
|
+
// Let the ephemeral node close cleanly, but never hang the exit on it.
|
|
228
|
+
setTimeout(() => process.exit(0), 2_000);
|
|
229
|
+
void (node ? node.stop().catch(() => { }) : Promise.resolve()).then(() => process.exit(0));
|
|
230
|
+
});
|
|
231
|
+
watcher.promote();
|
|
232
|
+
let lastBalanceCheckAt = 0;
|
|
233
|
+
let externalMessage = null;
|
|
234
|
+
while (!credited && !externalMessage) {
|
|
235
|
+
await sleep(DAEMON_STATUS_POLL_MS);
|
|
236
|
+
if (Date.now() - lastBalanceCheckAt > BALANCE_CHECK_INTERVAL_MS) {
|
|
237
|
+
lastBalanceCheckAt = Date.now();
|
|
238
|
+
externalMessage = await checkExternalCompletion(ctx, watcher.status().sweepInFlight);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
watcher.stop();
|
|
242
|
+
if (externalMessage)
|
|
243
|
+
spinner.succeed(chalk.green(externalMessage));
|
|
244
|
+
await printFinalBalance(config, address);
|
|
245
|
+
if (node)
|
|
246
|
+
await node.stop().catch(() => { });
|
|
247
|
+
process.exit(0);
|
|
248
|
+
}
|
|
249
|
+
// ─── Legacy direct on-chain deposit (hot wallet pays gas) ───
|
|
250
|
+
async function depositOnchain(config, dataDir, amount) {
|
|
251
|
+
let amountBaseUnits;
|
|
252
|
+
try {
|
|
253
|
+
amountBaseUnits = parseUsdcToBaseUnits(amount);
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
console.error(chalk.red('Error: Amount must be a positive number.'));
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
const { wallet, address } = await loadCryptoContext(dataDir);
|
|
260
|
+
const depositsClient = createDepositsClient(config);
|
|
261
|
+
console.log(chalk.dim(`Wallet: ${address}`));
|
|
262
|
+
console.log(chalk.dim(`Amount: ${formatUsdc(amountBaseUnits)} USDC (${amountBaseUnits} base units)`));
|
|
263
|
+
const spinner = ora('Depositing USDC into deposits contract...').start();
|
|
264
|
+
try {
|
|
265
|
+
const txHash = await depositsClient.deposit(wallet, address, amountBaseUnits);
|
|
266
|
+
spinner.succeed(chalk.green(`Deposited ${formatUsdc(amountBaseUnits)} USDC into deposits contract`));
|
|
267
|
+
console.log(chalk.dim(`Transaction: ${txHash}`));
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
spinner.fail(chalk.red(`Deposit failed: ${err.message}`));
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// ─── Command ───
|
|
275
|
+
export async function runDepositAction(cmd, options) {
|
|
276
|
+
const globalOpts = getGlobalOptions(cmd);
|
|
277
|
+
const config = await loadConfig(globalOpts.config);
|
|
278
|
+
try {
|
|
279
|
+
if (options.onchain) {
|
|
280
|
+
await depositOnchain(config, globalOpts.dataDir, options.onchain);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const crypto = requireCryptoConfig(config);
|
|
284
|
+
const { address } = await loadCryptoContext(globalOpts.dataDir);
|
|
285
|
+
const amountBaseUnits = options.amount ? parseUsdcToBaseUnits(options.amount) : null;
|
|
286
|
+
const uri = buildPaymentUri(crypto.usdcContractAddress, crypto.evmChainId, address, amountBaseUnits);
|
|
287
|
+
console.log('');
|
|
288
|
+
console.log(chalk.bold('Deposit USDC on Base'));
|
|
289
|
+
console.log(chalk.dim('Scan with a mobile wallet, or send USDC to the address below.'));
|
|
290
|
+
console.log('');
|
|
291
|
+
console.log(await QRCode.toString(uri, { type: 'terminal', small: true }));
|
|
292
|
+
console.log(` Address: ${chalk.bold(address)}`);
|
|
293
|
+
if (amountBaseUnits)
|
|
294
|
+
console.log(` Amount: ${formatUsdc(amountBaseUnits)} USDC`);
|
|
295
|
+
console.log(chalk.yellow(' Only send USDC on the Base network to this address.'));
|
|
296
|
+
console.log(chalk.dim(' Incoming USDC is swept into your deposits balance by the relayer network (fixed ~$0.05 fee, no ETH needed).'));
|
|
297
|
+
console.log('');
|
|
298
|
+
if (!crypto.depositRelayAddress) {
|
|
299
|
+
console.log(chalk.yellow('Automatic deposit is not available on this chain (no deposit relay).'));
|
|
300
|
+
console.log(chalk.dim('After funding, run `antseed buyer deposit --onchain <amount>` (requires ETH for gas).'));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (!options.watch) {
|
|
304
|
+
console.log(chalk.dim('Not watching (--no-watch). A running buyer connection sweeps incoming USDC automatically;'));
|
|
305
|
+
console.log(chalk.dim('without one, run `antseed buyer sweep` once the funds arrive.'));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
const ctx = await makeWatchContext(config, globalOpts.dataDir, address, options.amount ?? null);
|
|
309
|
+
printWebCheckoutHint(ctx.web);
|
|
310
|
+
const proxyPort = config.buyer.proxyPort;
|
|
311
|
+
const daemon = await daemonDepositsStatus(proxyPort);
|
|
312
|
+
if (daemon?.watcher) {
|
|
313
|
+
await watchViaDaemon(ctx, proxyPort);
|
|
314
|
+
}
|
|
315
|
+
else if (daemon) {
|
|
316
|
+
// A daemon is running but has no watcher (payments disabled, or it
|
|
317
|
+
// predates deposit watching). An ephemeral node here would collide
|
|
318
|
+
// with the daemon's peerId, so hand off to the manual command.
|
|
319
|
+
console.log(chalk.yellow('The running buyer connection cannot watch deposits (payments disabled or older version).'));
|
|
320
|
+
console.log(chalk.dim('Once the funds arrive, run `antseed buyer sweep` to deposit them.'));
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
await watchStandalone(ctx, globalOpts.dataDir, { ...crypto, depositRelayAddress: crypto.depositRelayAddress });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
catch (err) {
|
|
327
|
+
console.error(chalk.red(`Deposit failed: ${err.message}`));
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function addDepositOptions(cmd) {
|
|
332
|
+
return cmd
|
|
333
|
+
.option('--amount <usdc>', 'Amount to prefill in the QR payment request and browser checkout')
|
|
334
|
+
.option('--no-watch', 'Print the address and QR code without waiting for funds')
|
|
335
|
+
.option('--onchain <usdc>', 'Legacy direct deposit: send <usdc> from the hot wallet on-chain (requires ETH for gas)');
|
|
336
|
+
}
|
|
337
|
+
export function registerBuyerDepositCommand(buyerCmd) {
|
|
338
|
+
addDepositOptions(buyerCmd
|
|
339
|
+
.command('deposit')
|
|
340
|
+
.description('Show your USDC funding address and QR code — incoming funds deposit into your credits automatically (gasless)')).action(async (options) => {
|
|
341
|
+
await runDepositAction(buyerCmd, options);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
/** Hidden top-level alias: `antseed deposit` → `antseed buyer deposit`. */
|
|
345
|
+
export function registerDepositAlias(program) {
|
|
346
|
+
addDepositOptions(program.command('deposit', { hidden: true }))
|
|
347
|
+
.action(async (options) => {
|
|
348
|
+
await runDepositAction(program, options);
|
|
36
349
|
});
|
|
37
350
|
}
|
|
38
351
|
//# sourceMappingURL=deposit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,UAAU,2BAA2B,CAAC,QAAiB;IAC3D,QAAQ;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,4FAA4F,CAAC;SACzG,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,eAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEpD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,WAAW,UAAU,eAAe,cAAc,CAAC,CAAC,CAAC;QAEtF,MAAM,OAAO,GAAG,GAAG,CAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,WAAW,8BAA8B,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/deposit.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;AAazC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB5D"}
|
|
@@ -6,6 +6,7 @@ import { registerBuyerSweepCommand } from './sweep.js';
|
|
|
6
6
|
import { registerBuyerBalanceCommand } from './balance.js';
|
|
7
7
|
import { registerBuyerConnectionCommand } from './connection.js';
|
|
8
8
|
import { registerBuyerChannelsCommand } from './channels.js';
|
|
9
|
+
import { registerBuyerActivityCommand } from './activity.js';
|
|
9
10
|
import { registerBuyerMeteringCommand } from './metering.js';
|
|
10
11
|
import { registerBuyerEmissionsCommand } from './emissions.js';
|
|
11
12
|
export function registerBuyerCommands(program) {
|
|
@@ -20,6 +21,7 @@ export function registerBuyerCommands(program) {
|
|
|
20
21
|
registerBuyerBalanceCommand(buyerCmd);
|
|
21
22
|
registerBuyerConnectionCommand(buyerCmd);
|
|
22
23
|
registerBuyerChannelsCommand(buyerCmd);
|
|
24
|
+
registerBuyerActivityCommand(buyerCmd);
|
|
23
25
|
registerBuyerMeteringCommand(buyerCmd);
|
|
24
26
|
registerBuyerEmissionsCommand(buyerCmd);
|
|
25
27
|
}
|
|
@@ -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,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,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,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/buyer/start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBxC,OAAO,EAA+B,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAQ9D,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAA;CACpC,GAAG,qBAAqB,CASxB;AAED,wBAAgB,oCAAoC,CAAC,WAAW,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE3E;AAED,wBAAgB,0BAA0B,CACxC,wBAAwB,EAAE,MAAM,EAAE,GAAG,SAAS,EAC9C,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,EAAE,CAiBV;AAyED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAiC7F;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAwWjE"}
|
|
@@ -6,13 +6,14 @@ import { homedir } from 'node:os';
|
|
|
6
6
|
import { createConnection } from 'node:net';
|
|
7
7
|
import { getGlobalOptions } from '../types.js';
|
|
8
8
|
import { loadConfig } from '../../../config/loader.js';
|
|
9
|
-
import { AntseedNode, DepositsClient, getInstance, resolveChainConfig } from '@antseed/node';
|
|
9
|
+
import { AntseedNode, DepositRelayClient, DepositsClient, getInstance, peerRelaysSweeps, resolveChainConfig } from '@antseed/node';
|
|
10
10
|
import { OFFICIAL_BOOTSTRAP_NODES, parseBootstrapList, toBootstrapConfig } from '@antseed/node/discovery';
|
|
11
11
|
import { setupShutdownHandler } from '../../shutdown.js';
|
|
12
12
|
import { loadRouterPlugin, loadVerifierPlugin, buildPluginConfig, getPackageVersions } from '../../../plugins/loader.js';
|
|
13
13
|
import { ensurePluginsUpToDate } from '../../../plugins/drift.js';
|
|
14
14
|
import { resolvePluginPackage } from '../../../plugins/registry.js';
|
|
15
15
|
import { BuyerProxy } from '../../../proxy/buyer-proxy.js';
|
|
16
|
+
import { DepositWatcher } from '../../../proxy/deposit-watcher.js';
|
|
16
17
|
import { curatedVerifierIds, resolveVerifierPolicy } from '../../../plugins/verifier.js';
|
|
17
18
|
import { resolveEffectiveBuyerConfig } from '../../../config/effective.js';
|
|
18
19
|
export function buildBuyerRuntimeOverridesFromFlags(options) {
|
|
@@ -341,7 +342,7 @@ export function registerBuyerStartCommand(buyerCmd) {
|
|
|
341
342
|
console.log(chalk.yellow(` pinned peer: ${pinnedPeerId} (router bypassed)`));
|
|
342
343
|
}
|
|
343
344
|
else {
|
|
344
|
-
console.log(chalk.yellow(' pinned peer: none — model-only requests
|
|
345
|
+
console.log(chalk.yellow(' pinned peer: none — model-only requests use the configured Price + Trust ranking'));
|
|
345
346
|
console.log(chalk.dim(' Explicit session pin: antseed network browse → antseed buyer connection set --peer <peerId>'));
|
|
346
347
|
console.log(chalk.dim(' Explicit request pin: x-antseed-pin-peer: <peerId> header'));
|
|
347
348
|
console.log(chalk.dim(' Explicit model pin: <peerId>@<model>'));
|
|
@@ -451,6 +452,46 @@ export function registerBuyerStartCommand(buyerCmd) {
|
|
|
451
452
|
process.exit(1);
|
|
452
453
|
}
|
|
453
454
|
}
|
|
455
|
+
// Hot-wallet deposit watcher (auto-sweep): incoming USDC is swept into
|
|
456
|
+
// the deposits balance gaslessly via the relayer network. Skipped when
|
|
457
|
+
// another daemon owns the proxy port — it already runs a watcher, and a
|
|
458
|
+
// second signer against the same wallet would race it.
|
|
459
|
+
let depositWatcher = null;
|
|
460
|
+
const depositRelayAddress = cryptoOverrides?.depositRelayAddress || chainConfig.depositRelayAddress;
|
|
461
|
+
if (ownsProxyListener && paymentsConfig?.enabled && depositRelayAddress) {
|
|
462
|
+
const identity = node.identity;
|
|
463
|
+
depositWatcher = new DepositWatcher({
|
|
464
|
+
wallet: identity.wallet,
|
|
465
|
+
address: identity.wallet.address,
|
|
466
|
+
depositsClient: new DepositsClient({
|
|
467
|
+
rpcUrl: chainConfig.rpcUrl,
|
|
468
|
+
...(chainConfig.fallbackRpcUrls ? { fallbackRpcUrls: chainConfig.fallbackRpcUrls } : {}),
|
|
469
|
+
contractAddress: chainConfig.depositsContractAddress,
|
|
470
|
+
usdcAddress: chainConfig.usdcContractAddress,
|
|
471
|
+
evmChainId: chainConfig.evmChainId,
|
|
472
|
+
}),
|
|
473
|
+
relayClient: new DepositRelayClient({
|
|
474
|
+
rpcUrl: chainConfig.rpcUrl,
|
|
475
|
+
...(chainConfig.fallbackRpcUrls ? { fallbackRpcUrls: chainConfig.fallbackRpcUrls } : {}),
|
|
476
|
+
contractAddress: depositRelayAddress,
|
|
477
|
+
evmChainId: chainConfig.evmChainId,
|
|
478
|
+
}),
|
|
479
|
+
usdcAddress: chainConfig.usdcContractAddress,
|
|
480
|
+
evmChainId: chainConfig.evmChainId,
|
|
481
|
+
depositRelayAddress,
|
|
482
|
+
dispatch: (payload) => node.dispatchSweepRequest(payload),
|
|
483
|
+
connectRelayers: async () => {
|
|
484
|
+
const relayers = (await node.discoverPeers()).filter(peerRelaysSweeps);
|
|
485
|
+
await Promise.allSettled(relayers.slice(0, 4).map((peer) => node.connectToPeer(peer)));
|
|
486
|
+
},
|
|
487
|
+
getReceipt: async (authNonce) => proxy.getSweepReceipt(authNonce),
|
|
488
|
+
});
|
|
489
|
+
proxy.setDepositWatcher(depositWatcher);
|
|
490
|
+
if (effectiveBuyerConfig.autoSweep !== false) {
|
|
491
|
+
depositWatcher.startIdle();
|
|
492
|
+
console.log(chalk.dim('Auto-sweep: watching the hot wallet — incoming USDC deposits automatically (buyer.autoSweep=false disables).'));
|
|
493
|
+
}
|
|
494
|
+
}
|
|
454
495
|
const proxyUrl = `http://localhost:${proxyPort}`;
|
|
455
496
|
console.log('');
|
|
456
497
|
if (toolHints.length > 0) {
|
|
@@ -470,6 +511,7 @@ export function registerBuyerStartCommand(buyerCmd) {
|
|
|
470
511
|
console.log('');
|
|
471
512
|
setupShutdownHandler(async () => {
|
|
472
513
|
nodeSpinner.start('Shutting down...');
|
|
514
|
+
depositWatcher?.stop();
|
|
473
515
|
if (ownsProxyListener)
|
|
474
516
|
await proxy.stop();
|
|
475
517
|
await node.stop();
|