awal 2.0.3 → 2.8.0
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 +16 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/balance.test.d.ts +2 -0
- package/dist/commands/__tests__/balance.test.d.ts.map +1 -0
- package/dist/commands/__tests__/balance.test.js +245 -0
- package/dist/commands/__tests__/balance.test.js.map +1 -0
- package/dist/commands/__tests__/telemetry.test.d.ts +2 -0
- package/dist/commands/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/commands/__tests__/telemetry.test.js +79 -0
- package/dist/commands/__tests__/telemetry.test.js.map +1 -0
- package/dist/commands/__tests__/trade.test.d.ts +2 -0
- package/dist/commands/__tests__/trade.test.d.ts.map +1 -0
- package/dist/commands/__tests__/trade.test.js +147 -0
- package/dist/commands/__tests__/trade.test.js.map +1 -0
- package/dist/commands/address.d.ts.map +1 -1
- package/dist/commands/address.js +22 -5
- package/dist/commands/address.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +48 -5
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/balance.d.ts +16 -0
- package/dist/commands/balance.d.ts.map +1 -1
- package/dist/commands/balance.js +92 -28
- package/dist/commands/balance.js.map +1 -1
- package/dist/commands/bazaar.d.ts.map +1 -1
- package/dist/commands/bazaar.js +57 -29
- package/dist/commands/bazaar.js.map +1 -1
- package/dist/commands/persistence.d.ts +3 -0
- package/dist/commands/persistence.d.ts.map +1 -0
- package/dist/commands/persistence.js +75 -0
- package/dist/commands/persistence.js.map +1 -0
- package/dist/commands/quit.d.ts +3 -0
- package/dist/commands/quit.d.ts.map +1 -0
- package/dist/commands/quit.js +91 -0
- package/dist/commands/quit.js.map +1 -0
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +34 -14
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/telemetry.d.ts +3 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +41 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/trade.d.ts +13 -0
- package/dist/commands/trade.d.ts.map +1 -1
- package/dist/commands/trade.js +22 -20
- package/dist/commands/trade.js.map +1 -1
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +22 -0
- package/dist/constants.js.map +1 -0
- package/dist/formatters/output.d.ts +3 -2
- package/dist/formatters/output.d.ts.map +1 -1
- package/dist/formatters/output.js +14 -7
- package/dist/formatters/output.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/ipcClient.d.ts.map +1 -1
- package/dist/ipcClient.js +4 -3
- package/dist/ipcClient.js.map +1 -1
- package/dist/utils/addressValidation.d.ts +14 -1
- package/dist/utils/addressValidation.d.ts.map +1 -1
- package/dist/utils/addressValidation.js +16 -1
- package/dist/utils/addressValidation.js.map +1 -1
- package/dist/utils/chainValidation.d.ts +11 -0
- package/dist/utils/chainValidation.d.ts.map +1 -0
- package/dist/utils/chainValidation.js +29 -0
- package/dist/utils/chainValidation.js.map +1 -0
- package/dist/utils/configManager.d.ts +9 -0
- package/dist/utils/configManager.d.ts.map +1 -0
- package/dist/utils/configManager.js +46 -0
- package/dist/utils/configManager.js.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +14 -10
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/parseAmount.d.ts +11 -1
- package/dist/utils/parseAmount.d.ts.map +1 -1
- package/dist/utils/parseAmount.js +36 -1
- package/dist/utils/parseAmount.js.map +1 -1
- package/dist/utils/serverManager.js +1 -1
- package/package.json +16 -7
- package/server-bundle/bundle-electron.js +75 -11
- package/server-bundle/package.json +1 -1
- package/server-bundle/preload.js +1 -1
- package/dist/commands/discover.d.ts +0 -3
- package/dist/commands/discover.d.ts.map +0 -1
- package/dist/commands/discover.js +0 -76
- package/dist/commands/discover.js.map +0 -1
- package/dist/utils/bazaarCache.d.ts +0 -32
- package/dist/utils/bazaarCache.d.ts.map +0 -1
- package/dist/utils/bazaarCache.js +0 -118
- package/dist/utils/bazaarCache.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { setPersistence, readConfig } from '../utils/configManager.js';
|
|
4
|
+
import { formatJson, formatSuccess, formatInfo } from '../formatters/output.js';
|
|
5
|
+
export function createPersistenceCommand() {
|
|
6
|
+
const persistence = new Command('persistence').description('Manage wallet window persistence after client disconnect');
|
|
7
|
+
persistence
|
|
8
|
+
.command('disable')
|
|
9
|
+
.description('Disable persistence (window closes immediately on client disconnect)')
|
|
10
|
+
.option('--json', 'Output as JSON')
|
|
11
|
+
.action((options) => {
|
|
12
|
+
const config = readConfig();
|
|
13
|
+
if (!config.persistence) {
|
|
14
|
+
if (options.json) {
|
|
15
|
+
console.log(formatJson({ persistence: false, changed: false }));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log(chalk.dim('Persistence is already disabled.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
setPersistence(false);
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(formatJson({ persistence: false, changed: true }));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(formatSuccess('Persistence disabled'));
|
|
27
|
+
console.log(chalk.dim('The wallet window will now close immediately when a client disconnects,\n' +
|
|
28
|
+
'even if other processes are still running. This means each new session\n' +
|
|
29
|
+
'will require a cold start.'));
|
|
30
|
+
});
|
|
31
|
+
persistence
|
|
32
|
+
.command('enable')
|
|
33
|
+
.description('Enable persistence (window stays open after client disconnect)')
|
|
34
|
+
.option('--json', 'Output as JSON')
|
|
35
|
+
.action((options) => {
|
|
36
|
+
const config = readConfig();
|
|
37
|
+
if (config.persistence) {
|
|
38
|
+
if (options.json) {
|
|
39
|
+
console.log(formatJson({ persistence: true, changed: false }));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.dim('Persistence is already enabled.'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setPersistence(true);
|
|
46
|
+
if (options.json) {
|
|
47
|
+
console.log(formatJson({ persistence: true, changed: true }));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
console.log(formatSuccess('Persistence enabled'));
|
|
51
|
+
console.log(chalk.dim('The wallet window will now stay open after a client disconnects,\n' +
|
|
52
|
+
'allowing other sessions to reuse it without a cold start.'));
|
|
53
|
+
});
|
|
54
|
+
persistence
|
|
55
|
+
.command('status')
|
|
56
|
+
.description('Check current persistence setting')
|
|
57
|
+
.option('--json', 'Output as JSON')
|
|
58
|
+
.action((options) => {
|
|
59
|
+
const config = readConfig();
|
|
60
|
+
if (options.json) {
|
|
61
|
+
console.log(formatJson({ persistence: config.persistence }));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (config.persistence) {
|
|
65
|
+
console.log(formatInfo('Persistence is currently enabled.'));
|
|
66
|
+
console.log(chalk.dim('To disable, run: npx awal persistence disable'));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(formatInfo('Persistence is currently disabled.'));
|
|
70
|
+
console.log(chalk.dim('To enable, run: npx awal persistence enable'));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return persistence;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/commands/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quit.d.ts","sourceRoot":"","sources":["../../src/commands/quit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,iBAAiB,IAAI,OAAO,CAgE3C"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getPrimaryProcessPid } from '../utils/processCheck.js';
|
|
4
|
+
import { formatError } from '../utils/errors.js';
|
|
5
|
+
import { formatJson, formatSuccess, formatInfo, formatWarning } from '../formatters/output.js';
|
|
6
|
+
/**
|
|
7
|
+
* Checks whether a process is still alive using kill signal 0.
|
|
8
|
+
*/
|
|
9
|
+
function isProcessAlive(pid) {
|
|
10
|
+
try {
|
|
11
|
+
process.kill(pid, 0);
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Waits for a process to exit by polling its liveness.
|
|
20
|
+
* Returns true if the process exited within the timeout.
|
|
21
|
+
*/
|
|
22
|
+
async function waitForExit(pid, timeoutMs, intervalMs = 200) {
|
|
23
|
+
const start = Date.now();
|
|
24
|
+
while (Date.now() - start < timeoutMs) {
|
|
25
|
+
if (!isProcessAlive(pid)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
export function createQuitCommand() {
|
|
33
|
+
return new Command('quit')
|
|
34
|
+
.description('Quit the wallet application')
|
|
35
|
+
.option('--json', 'Output as JSON')
|
|
36
|
+
.action(async (options) => {
|
|
37
|
+
const pid = getPrimaryProcessPid();
|
|
38
|
+
if (pid === null) {
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(formatJson({ status: 'not_running', message: 'Wallet is not running' }));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
console.log(formatInfo('Wallet is not running'));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const spinner = ora('Shutting down wallet...').start();
|
|
47
|
+
try {
|
|
48
|
+
// Try graceful shutdown first
|
|
49
|
+
process.kill(pid, 'SIGTERM');
|
|
50
|
+
const exited = await waitForExit(pid, 3000);
|
|
51
|
+
if (!exited) {
|
|
52
|
+
// Electron on macOS often doesn't exit from SIGTERM alone; force kill
|
|
53
|
+
process.kill(pid, 'SIGKILL');
|
|
54
|
+
await waitForExit(pid, 2000);
|
|
55
|
+
}
|
|
56
|
+
spinner.stop();
|
|
57
|
+
if (!isProcessAlive(pid)) {
|
|
58
|
+
if (options.json) {
|
|
59
|
+
console.log(formatJson({ status: 'stopped', pid }));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(formatSuccess('Wallet stopped'));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (options.json) {
|
|
66
|
+
console.log(formatJson({ status: 'timeout', pid, message: 'Process may still be shutting down' }));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(formatWarning('Wallet may still be shutting down'));
|
|
70
|
+
}
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
// If the process is already gone, that's success, not failure
|
|
76
|
+
if (!isProcessAlive(pid)) {
|
|
77
|
+
spinner.stop();
|
|
78
|
+
if (options.json) {
|
|
79
|
+
console.log(formatJson({ status: 'stopped', pid }));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log(formatSuccess('Wallet stopped'));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
spinner.fail('Failed to quit wallet');
|
|
86
|
+
console.error(formatError(error));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=quit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quit.js","sourceRoot":"","sources":["../../src/commands/quit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAoI3C"}
|
package/dist/commands/send.js
CHANGED
|
@@ -5,26 +5,38 @@ import { normalize } from 'viem/ens';
|
|
|
5
5
|
import { sendIpcRequest } from '../ipcClient.js';
|
|
6
6
|
import { requireAuth } from '../utils/authCheck.js';
|
|
7
7
|
import { formatError } from '../utils/errors.js';
|
|
8
|
-
import { formatJson, formatSuccess
|
|
9
|
-
import { isEthAddress, isEnsName } from '../utils/addressValidation.js';
|
|
10
|
-
import {
|
|
8
|
+
import { formatJson, formatSuccess } from '../formatters/output.js';
|
|
9
|
+
import { isEthAddress, isEnsName, isSolanaAddress } from '../utils/addressValidation.js';
|
|
10
|
+
import { parseAmountForAsset, formatAmount } from '../utils/parseAmount.js';
|
|
11
|
+
import { isSolanaChain, validateAssetChain } from '../utils/chainValidation.js';
|
|
11
12
|
import { getMainnetClient } from '../utils/viemClient.js';
|
|
13
|
+
import { getExplorerLabel } from '../constants.js';
|
|
12
14
|
export function createSendCommand() {
|
|
13
15
|
return new Command('send')
|
|
14
|
-
.description('Send
|
|
16
|
+
.description('Send tokens to an address')
|
|
15
17
|
.argument('<amount>', 'Amount to send (e.g., "$0.01", "0.01", or atomic units)')
|
|
16
|
-
.argument('<recipient>', 'Recipient address (0x...) or ENS domain')
|
|
17
|
-
.option('--chain <chain>', 'Blockchain network (default: base)', 'base')
|
|
18
|
+
.argument('<recipient>', 'Recipient address (0x... for EVM, Base58 for Solana) or ENS domain')
|
|
19
|
+
.option('--chain <chain>', 'Blockchain network: base, base-sepolia, polygon, solana, solana-devnet (default: base).', 'base')
|
|
20
|
+
.option('--asset <asset>', 'Asset to send: USDC (default), ETH, SOL', 'USDC')
|
|
18
21
|
.option('--json', 'Output as JSON')
|
|
19
22
|
.action(async (amount, recipient, options) => {
|
|
20
23
|
const spinner = ora('Preparing transaction...').start();
|
|
21
24
|
try {
|
|
22
25
|
// Check authentication first
|
|
23
26
|
await requireAuth();
|
|
27
|
+
const asset = (options.asset || 'USDC').toUpperCase();
|
|
28
|
+
const isSolana = isSolanaChain(options.chain);
|
|
29
|
+
// Validate asset/chain compatibility
|
|
30
|
+
const chainError = validateAssetChain(asset, options.chain);
|
|
31
|
+
if (chainError) {
|
|
32
|
+
spinner.fail('Invalid configuration');
|
|
33
|
+
console.error(chalk.red(chainError));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
24
36
|
// Parse amount to atomic units
|
|
25
37
|
let atomicAmount;
|
|
26
38
|
try {
|
|
27
|
-
atomicAmount =
|
|
39
|
+
atomicAmount = parseAmountForAsset(amount, asset);
|
|
28
40
|
}
|
|
29
41
|
catch (error) {
|
|
30
42
|
spinner.fail('Invalid amount');
|
|
@@ -32,15 +44,21 @@ export function createSendCommand() {
|
|
|
32
44
|
process.exit(1);
|
|
33
45
|
}
|
|
34
46
|
// Validate recipient address format
|
|
35
|
-
if (
|
|
47
|
+
if (isSolana) {
|
|
48
|
+
if (!isSolanaAddress(recipient)) {
|
|
49
|
+
spinner.fail('Invalid recipient');
|
|
50
|
+
console.error(chalk.red('Recipient must be a valid Solana address (Base58 encoded, 32-44 chars)'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (!isEthAddress(recipient) && !isEnsName(recipient)) {
|
|
36
55
|
spinner.fail('Invalid recipient');
|
|
37
56
|
console.error(chalk.red('Recipient must be a valid Ethereum address (0x...) or ENS domain'));
|
|
38
57
|
process.exit(1);
|
|
39
58
|
}
|
|
40
|
-
const recipientIsEns = isEnsName(recipient);
|
|
41
59
|
let resolvedRecipient = recipient;
|
|
42
60
|
let ensName;
|
|
43
|
-
if (
|
|
61
|
+
if (!isSolana && isEnsName(recipient)) {
|
|
44
62
|
spinner.text = `Resolving ${recipient}...`;
|
|
45
63
|
try {
|
|
46
64
|
const mainnetClient = getMainnetClient();
|
|
@@ -61,10 +79,12 @@ export function createSendCommand() {
|
|
|
61
79
|
process.exit(1);
|
|
62
80
|
}
|
|
63
81
|
}
|
|
64
|
-
|
|
82
|
+
const displayAmount = formatAmount(atomicAmount, asset);
|
|
83
|
+
spinner.text = `Sending ${displayAmount} to ${ensName || resolvedRecipient}...`;
|
|
65
84
|
const data = {
|
|
66
85
|
recipient: resolvedRecipient,
|
|
67
86
|
amountAtomic: atomicAmount,
|
|
87
|
+
asset,
|
|
68
88
|
chain: options.chain,
|
|
69
89
|
};
|
|
70
90
|
const result = (await sendIpcRequest('send-transaction', data));
|
|
@@ -79,18 +99,18 @@ export function createSendCommand() {
|
|
|
79
99
|
}
|
|
80
100
|
// Text output
|
|
81
101
|
if (ensName) {
|
|
82
|
-
console.log(formatSuccess(`Successfully sent ${
|
|
102
|
+
console.log(formatSuccess(`Successfully sent ${displayAmount} to ${ensName}`));
|
|
83
103
|
console.log(chalk.gray(`Resolved address: ${resolvedRecipient}`));
|
|
84
104
|
}
|
|
85
105
|
else {
|
|
86
|
-
console.log(formatSuccess(`Successfully sent ${
|
|
106
|
+
console.log(formatSuccess(`Successfully sent ${displayAmount} to ${recipient}`));
|
|
87
107
|
}
|
|
88
108
|
console.log(chalk.gray(`Chain: ${result.chain}`));
|
|
89
109
|
if (result.transactionHash) {
|
|
90
110
|
console.log(chalk.gray(`Transaction: ${result.transactionHash}`));
|
|
91
111
|
}
|
|
92
112
|
if (result.blockExplorerUrl) {
|
|
93
|
-
console.log(chalk.cyan(`\
|
|
113
|
+
console.log(chalk.cyan(`\n${getExplorerLabel(options.chain)}: ${result.blockExplorerUrl}`));
|
|
94
114
|
}
|
|
95
115
|
}
|
|
96
116
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,sBAAsB,IAAI,OAAO,CAwChD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { readConfig, setTelemetry } from '../utils/configManager.js';
|
|
4
|
+
import { formatSuccess, formatInfo } from '../formatters/output.js';
|
|
5
|
+
export function createTelemetryCommand() {
|
|
6
|
+
const telemetry = new Command('telemetry').description('Manage analytics and health check metrics');
|
|
7
|
+
telemetry
|
|
8
|
+
.command('disable')
|
|
9
|
+
.description('Opt out of analytics and health check metrics')
|
|
10
|
+
.action(() => {
|
|
11
|
+
setTelemetry(true);
|
|
12
|
+
console.log(formatSuccess('Telemetry disabled'));
|
|
13
|
+
console.log(formatInfo('Analytics and health check metrics have been turned off.'));
|
|
14
|
+
console.log(chalk.dim('To re-enable, run: npx awal telemetry enable'));
|
|
15
|
+
});
|
|
16
|
+
telemetry
|
|
17
|
+
.command('enable')
|
|
18
|
+
.description('Opt back in to analytics and health check metrics')
|
|
19
|
+
.action(() => {
|
|
20
|
+
setTelemetry(false);
|
|
21
|
+
console.log(formatSuccess('Telemetry enabled'));
|
|
22
|
+
console.log(formatInfo('Analytics and health check metrics have been turned on.'));
|
|
23
|
+
console.log(chalk.dim('To disable, run: npx awal telemetry disable'));
|
|
24
|
+
});
|
|
25
|
+
telemetry
|
|
26
|
+
.command('status')
|
|
27
|
+
.description('Check current telemetry preference')
|
|
28
|
+
.action(() => {
|
|
29
|
+
const config = readConfig();
|
|
30
|
+
if (config.telemetryDisabled) {
|
|
31
|
+
console.log(formatInfo('Telemetry is currently disabled.'));
|
|
32
|
+
console.log(chalk.dim('To re-enable, run: npx awal telemetry enable'));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(formatInfo('Telemetry is currently enabled.'));
|
|
36
|
+
console.log(chalk.dim('To disable, run: npx awal telemetry disable'));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return telemetry;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CACpD,2CAA2C,CAC5C,CAAC;IAEF,SAAS;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/commands/trade.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
export declare const TOKEN_ALIASES: Record<string, {
|
|
3
|
+
decimals: number;
|
|
4
|
+
display: string;
|
|
5
|
+
}>;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a token for display purposes only.
|
|
8
|
+
* The IPC handler will resolve addresses and decimals from chain.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveTokenDisplay(token: string): {
|
|
11
|
+
token: string;
|
|
12
|
+
decimals: number;
|
|
13
|
+
display: string;
|
|
14
|
+
} | null;
|
|
2
15
|
export declare function createTradeCommand(): Command;
|
|
3
16
|
//# sourceMappingURL=trade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAI/E,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsB7D;AA+CD,wBAAgB,kBAAkB,IAAI,OAAO,CAuH5C"}
|
package/dist/commands/trade.js
CHANGED
|
@@ -4,19 +4,20 @@ import ora from 'ora';
|
|
|
4
4
|
import { sendIpcRequest } from '../ipcClient.js';
|
|
5
5
|
import { requireAuth } from '../utils/authCheck.js';
|
|
6
6
|
import { formatError } from '../utils/errors.js';
|
|
7
|
-
import { formatJson, formatSuccess } from '../formatters/output.js';
|
|
7
|
+
import { formatJson, formatSuccess, formatUsdcAmount } from '../formatters/output.js';
|
|
8
8
|
import { isEthAddress } from '../utils/addressValidation.js';
|
|
9
|
+
import { getExplorerLabel } from '../constants.js';
|
|
9
10
|
// Known token aliases for display formatting
|
|
10
|
-
const TOKEN_ALIASES = {
|
|
11
|
+
export const TOKEN_ALIASES = {
|
|
11
12
|
usdc: { decimals: 6, display: 'USDC' },
|
|
12
13
|
eth: { decimals: 18, display: 'ETH' },
|
|
13
|
-
|
|
14
|
+
pol: { decimals: 18, display: 'POL' },
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Resolve a token for display purposes only.
|
|
17
18
|
* The IPC handler will resolve addresses and decimals from chain.
|
|
18
19
|
*/
|
|
19
|
-
function resolveTokenDisplay(token) {
|
|
20
|
+
export function resolveTokenDisplay(token) {
|
|
20
21
|
const lower = token.toLowerCase();
|
|
21
22
|
// Check if it's an alias
|
|
22
23
|
if (TOKEN_ALIASES[lower]) {
|
|
@@ -47,7 +48,8 @@ function formatAmountForDisplay(amount, display) {
|
|
|
47
48
|
return `${amount} ${display}`;
|
|
48
49
|
}
|
|
49
50
|
if (display === 'USDC') {
|
|
50
|
-
|
|
51
|
+
const atomicUnits = Math.floor(num * 1_000_000);
|
|
52
|
+
return formatUsdcAmount(atomicUnits);
|
|
51
53
|
}
|
|
52
54
|
return `${num} ${display}`;
|
|
53
55
|
}
|
|
@@ -55,26 +57,26 @@ function formatAmountForDisplay(amount, display) {
|
|
|
55
57
|
* Formats atomic units as a human-readable amount for display
|
|
56
58
|
*/
|
|
57
59
|
function formatAtomicAmount(atomicUnits, decimals, display) {
|
|
58
|
-
const num = Number(atomicUnits);
|
|
59
|
-
const readable = num / 10 ** decimals;
|
|
60
60
|
if (display === 'USDC') {
|
|
61
|
-
return
|
|
61
|
+
return formatUsdcAmount(atomicUnits);
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
const num = Number(atomicUnits);
|
|
64
|
+
const readable = num / 10 ** decimals;
|
|
64
65
|
return `${readable.toFixed(6)} ${display}`;
|
|
65
66
|
}
|
|
66
67
|
export function createTradeCommand() {
|
|
67
68
|
return new Command('trade')
|
|
68
|
-
.description('Swap tokens
|
|
69
|
+
.description('Swap tokens via CDP Swap API.\n\n' +
|
|
69
70
|
'Examples:\n' +
|
|
70
|
-
' npx awal trade $1 usdc eth
|
|
71
|
-
' npx awal trade 0.50 usdc eth
|
|
72
|
-
' npx awal trade 0.01 eth usdc
|
|
73
|
-
' npx awal trade
|
|
71
|
+
' npx awal trade $1 usdc eth # Swap $1 USDC for ETH on Base\n' +
|
|
72
|
+
' npx awal trade 0.50 usdc eth # Swap $0.50 USDC for ETH\n' +
|
|
73
|
+
' npx awal trade 0.01 eth usdc # Swap 0.01 ETH for USDC\n' +
|
|
74
|
+
' npx awal trade $1 usdc pol --chain polygon # Swap $1 USDC for POL on Polygon\n' +
|
|
75
|
+
' npx awal trade 100 0x... 0x... # Swap using contract addresses')
|
|
74
76
|
.argument('<amount>', 'Amount to swap (e.g., "$1.00", "0.50", "500000")')
|
|
75
|
-
.argument('<from>', 'Source token: alias (usdc, eth,
|
|
76
|
-
.argument('<to>', 'Destination token: alias (usdc, eth,
|
|
77
|
-
.option('-c, --chain <chain>', 'Blockchain network', 'base')
|
|
77
|
+
.argument('<from>', 'Source token: alias (usdc, eth, pol) or contract address (0x...)')
|
|
78
|
+
.argument('<to>', 'Destination token: alias (usdc, eth, pol) or contract address (0x...)')
|
|
79
|
+
.option('-c, --chain <chain>', 'Blockchain network: base, base-sepolia, polygon (default: base).', 'base')
|
|
78
80
|
.option('-s, --slippage <bps>', 'Slippage tolerance in basis points (100 = 1%)', '100')
|
|
79
81
|
.option('--json', 'Output result as JSON')
|
|
80
82
|
.action(async (amount, from, to, options) => {
|
|
@@ -87,12 +89,12 @@ export function createTradeCommand() {
|
|
|
87
89
|
const toResolved = resolveTokenDisplay(to);
|
|
88
90
|
if (!fromResolved) {
|
|
89
91
|
spinner.fail('Invalid token');
|
|
90
|
-
console.error(chalk.red(`Unknown token: ${from}. Use
|
|
92
|
+
console.error(chalk.red(`Unknown token: ${from}. Use USDC, ETH, POL, or a valid 0x address.`));
|
|
91
93
|
process.exit(1);
|
|
92
94
|
}
|
|
93
95
|
if (!toResolved) {
|
|
94
96
|
spinner.fail('Invalid token');
|
|
95
|
-
console.error(chalk.red(`Unknown token: ${to}. Use
|
|
97
|
+
console.error(chalk.red(`Unknown token: ${to}. Use USDC, ETH, POL, or a valid 0x address.`));
|
|
96
98
|
process.exit(1);
|
|
97
99
|
}
|
|
98
100
|
if (fromResolved.token.toLowerCase() === toResolved.token.toLowerCase()) {
|
|
@@ -145,7 +147,7 @@ export function createTradeCommand() {
|
|
|
145
147
|
console.log(chalk.gray(`Transaction: ${result.transactionHash}`));
|
|
146
148
|
}
|
|
147
149
|
if (result.blockExplorerUrl) {
|
|
148
|
-
console.log(chalk.cyan(`\
|
|
150
|
+
console.log(chalk.cyan(`\n${getExplorerLabel(options.chain)}: ${result.blockExplorerUrl}`));
|
|
149
151
|
}
|
|
150
152
|
}
|
|
151
153
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../src/commands/trade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the AWAL CLI.
|
|
3
|
+
*/
|
|
4
|
+
export declare const ASSET_DECIMALS: Record<string, number>;
|
|
5
|
+
export declare const SOLANA_CHAINS: Set<string>;
|
|
6
|
+
export declare const POLYGON_CHAINS: Set<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Returns the appropriate block explorer label for a given chain.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getExplorerLabel(chain: string): string;
|
|
11
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjD,CAAC;AAEF,eAAO,MAAM,aAAa,aAAuC,CAAC;AAElE,eAAO,MAAM,cAAc,aAAuB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the AWAL CLI.
|
|
3
|
+
*/
|
|
4
|
+
export const ASSET_DECIMALS = {
|
|
5
|
+
USDC: 6,
|
|
6
|
+
ETH: 18,
|
|
7
|
+
POL: 18,
|
|
8
|
+
SOL: 9,
|
|
9
|
+
};
|
|
10
|
+
export const SOLANA_CHAINS = new Set(['solana', 'solana-devnet']);
|
|
11
|
+
export const POLYGON_CHAINS = new Set(['polygon']);
|
|
12
|
+
/**
|
|
13
|
+
* Returns the appropriate block explorer label for a given chain.
|
|
14
|
+
*/
|
|
15
|
+
export function getExplorerLabel(chain) {
|
|
16
|
+
if (SOLANA_CHAINS.has(chain))
|
|
17
|
+
return 'View on Solscan';
|
|
18
|
+
if (POLYGON_CHAINS.has(chain))
|
|
19
|
+
return 'View on Polygonscan';
|
|
20
|
+
return 'View on Basescan';
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACvD,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,qBAAqB,CAAC;IAC5D,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -32,12 +32,13 @@ export declare function formatWarning(message: string): string;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare function formatInfo(message: string): string;
|
|
34
34
|
/**
|
|
35
|
-
* Formats USDC atomic units to human-readable format
|
|
35
|
+
* Formats USDC atomic units to human-readable format.
|
|
36
|
+
* Shows up to 6 decimal places to handle sub-cent amounts.
|
|
36
37
|
*/
|
|
37
38
|
export declare function formatUsdcAmount(atomicUnits: number | string): string;
|
|
38
39
|
/**
|
|
39
40
|
* Formats asset balance based on asset type and decimals.
|
|
40
|
-
* USDC shows
|
|
41
|
+
* USDC shows with up to 6 decimal places; ETH/SOL show with appropriate precision.
|
|
41
42
|
*/
|
|
42
43
|
export declare function formatAssetBalance(asset: string, raw: string, decimals: number): string;
|
|
43
44
|
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/formatters/output.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACzD,MAAM,CAmCR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/formatters/output.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACzD,MAAM,CAmCR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAavF"}
|