awal 1.0.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 +84 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +32 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/address.d.ts +3 -0
- package/dist/commands/address.d.ts.map +1 -0
- package/dist/commands/address.js +33 -0
- package/dist/commands/address.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +76 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/balance.d.ts +3 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +72 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/bazaar.d.ts +3 -0
- package/dist/commands/bazaar.d.ts.map +1 -0
- package/dist/commands/bazaar.js +134 -0
- package/dist/commands/bazaar.js.map +1 -0
- package/dist/commands/discover.d.ts +3 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +76 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/pay.d.ts +3 -0
- package/dist/commands/pay.d.ts.map +1 -0
- package/dist/commands/pay.js +78 -0
- package/dist/commands/pay.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +144 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/show.d.ts +3 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +31 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +89 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/trade.d.ts +3 -0
- package/dist/commands/trade.d.ts.map +1 -0
- package/dist/commands/trade.js +163 -0
- package/dist/commands/trade.js.map +1 -0
- package/dist/formatters/output.d.ts +38 -0
- package/dist/formatters/output.d.ts.map +1 -0
- package/dist/formatters/output.js +83 -0
- package/dist/formatters/output.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/ipcClient.d.ts +14 -0
- package/dist/ipcClient.d.ts.map +1 -0
- package/dist/ipcClient.js +127 -0
- package/dist/ipcClient.js.map +1 -0
- package/dist/utils/authCheck.d.ts +13 -0
- package/dist/utils/authCheck.d.ts.map +1 -0
- package/dist/utils/authCheck.js +34 -0
- package/dist/utils/authCheck.js.map +1 -0
- package/dist/utils/errors.d.ts +21 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +76 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/processCheck.d.ts +11 -0
- package/dist/utils/processCheck.d.ts.map +1 -0
- package/dist/utils/processCheck.js +68 -0
- package/dist/utils/processCheck.js.map +1 -0
- package/dist/utils/serverManager.d.ts +10 -0
- package/dist/utils/serverManager.d.ts.map +1 -0
- package/dist/utils/serverManager.js +167 -0
- package/dist/utils/serverManager.js.map +1 -0
- package/package.json +50 -0
- package/server-bundle/assets/fallback.html +112 -0
- package/server-bundle/assets/icon.png +0 -0
- package/server-bundle/assets/menubar-iconTemplate.png +0 -0
- package/server-bundle/assets/menubar-iconTemplate@2x.png +0 -0
- package/server-bundle/bundle-electron.js +22 -0
- package/server-bundle/package.json +15 -0
- package/server-bundle/preload.js +1 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import envPaths from 'env-paths';
|
|
2
|
+
import { spawn, execSync } from 'child_process';
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, cpSync } from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { getPrimaryProcessPid } from './processCheck.js';
|
|
7
|
+
const paths = envPaths('awal');
|
|
8
|
+
// This will be updated by the build script
|
|
9
|
+
const BUNDLE_VERSION = '1.0.0';
|
|
10
|
+
function getServerPaths() {
|
|
11
|
+
const dataDir = paths.data;
|
|
12
|
+
const bundleDir = path.join(dataDir, 'server');
|
|
13
|
+
// Electron binary location depends on platform
|
|
14
|
+
const electronBinName = process.platform === 'win32' ? 'electron.cmd' : 'electron';
|
|
15
|
+
return {
|
|
16
|
+
dataDir,
|
|
17
|
+
bundleDir,
|
|
18
|
+
versionFile: path.join(bundleDir, '.version'),
|
|
19
|
+
electronBin: path.join(bundleDir, 'node_modules', '.bin', electronBinName),
|
|
20
|
+
bundleElectron: path.join(bundleDir, 'bundle-electron.js'),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Checks if the server bundle is installed and up to date
|
|
25
|
+
*/
|
|
26
|
+
async function isServerInstalled() {
|
|
27
|
+
const { versionFile, electronBin, bundleElectron } = getServerPaths();
|
|
28
|
+
// Check all required files exist
|
|
29
|
+
if (!existsSync(versionFile) || !existsSync(electronBin) || !existsSync(bundleElectron)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// Check version matches
|
|
33
|
+
try {
|
|
34
|
+
const installedVersion = readFileSync(versionFile, 'utf-8').trim();
|
|
35
|
+
return installedVersion === BUNDLE_VERSION;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the path to the bundled server files within the npm package
|
|
43
|
+
*/
|
|
44
|
+
function getPackageBundleDir() {
|
|
45
|
+
// This file is at dist/utils/serverManager.js
|
|
46
|
+
// Server bundle is at server-bundle/
|
|
47
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
48
|
+
return path.join(__dirname, '..', '..', 'server-bundle');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Installs the server bundle to the user's data directory
|
|
52
|
+
*/
|
|
53
|
+
async function installServer(onProgress) {
|
|
54
|
+
const { bundleDir, versionFile, dataDir } = getServerPaths();
|
|
55
|
+
const packageBundleDir = getPackageBundleDir();
|
|
56
|
+
// Verify package bundle exists
|
|
57
|
+
if (!existsSync(packageBundleDir)) {
|
|
58
|
+
throw new Error(`Server bundle not found at ${packageBundleDir}. Package may be corrupted.`);
|
|
59
|
+
}
|
|
60
|
+
// Create data directory if needed
|
|
61
|
+
if (!existsSync(dataDir)) {
|
|
62
|
+
mkdirSync(dataDir, { recursive: true, mode: 0o700 });
|
|
63
|
+
}
|
|
64
|
+
// Copy bundled server files from package
|
|
65
|
+
onProgress?.('Copying server bundle...');
|
|
66
|
+
// Remove existing bundle if present
|
|
67
|
+
if (existsSync(bundleDir)) {
|
|
68
|
+
// Use rm -rf for cross-platform removal
|
|
69
|
+
try {
|
|
70
|
+
execSync(`rm -rf "${bundleDir}"`, { stdio: 'pipe' });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Fallback: try to overwrite
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
cpSync(packageBundleDir, bundleDir, { recursive: true });
|
|
77
|
+
// Install Electron (the heavy dependency)
|
|
78
|
+
onProgress?.('Installing Electron runtime (one-time setup, may take a minute)...');
|
|
79
|
+
await new Promise((resolve, reject) => {
|
|
80
|
+
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
81
|
+
const child = spawn(npmCmd, ['install', '--omit=dev'], {
|
|
82
|
+
cwd: bundleDir,
|
|
83
|
+
stdio: 'inherit',
|
|
84
|
+
shell: process.platform === 'win32',
|
|
85
|
+
});
|
|
86
|
+
child.on('error', (err) => reject(new Error(`npm install failed: ${err.message}`)));
|
|
87
|
+
child.on('exit', (code) => {
|
|
88
|
+
if (code === 0) {
|
|
89
|
+
resolve();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
reject(new Error(`npm install failed with exit code ${code}`));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// Write version marker
|
|
97
|
+
writeFileSync(versionFile, BUNDLE_VERSION, { mode: 0o600 });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Spawns the Electron server process in the background
|
|
101
|
+
*/
|
|
102
|
+
async function spawnServer() {
|
|
103
|
+
const { electronBin, bundleElectron } = getServerPaths();
|
|
104
|
+
// Verify electron exists
|
|
105
|
+
if (!existsSync(electronBin)) {
|
|
106
|
+
throw new Error(`Electron not found at ${electronBin}. Try reinstalling with: rm -rf ~/.local/share/awal && awal status`);
|
|
107
|
+
}
|
|
108
|
+
const child = spawn(electronBin, [bundleElectron], {
|
|
109
|
+
detached: true,
|
|
110
|
+
stdio: 'ignore',
|
|
111
|
+
env: {
|
|
112
|
+
...process.env,
|
|
113
|
+
STARTED_BY_CLI: 'true',
|
|
114
|
+
WALLET_STANDALONE: 'true',
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
// Don't wait for child, detach it
|
|
118
|
+
child.unref();
|
|
119
|
+
// Wait for server to initialize (poll for lock file)
|
|
120
|
+
const maxWaitMs = 30000;
|
|
121
|
+
const pollIntervalMs = 500;
|
|
122
|
+
const startTime = Date.now();
|
|
123
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
124
|
+
await new Promise(r => setTimeout(r, pollIntervalMs));
|
|
125
|
+
if (getPrimaryProcessPid() !== null) {
|
|
126
|
+
// Server is running, give it time to fully initialize
|
|
127
|
+
// (Electron + React app + IPC handlers)
|
|
128
|
+
await new Promise(r => setTimeout(r, 8000));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
throw new Error('Server failed to start within timeout');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Ensures the server is running, installing if needed
|
|
136
|
+
* @returns true if server is running, false on failure
|
|
137
|
+
*/
|
|
138
|
+
export async function ensureServerRunning(onInstalling, onStarting) {
|
|
139
|
+
// Check if already running
|
|
140
|
+
if (getPrimaryProcessPid() !== null) {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
// Install if needed
|
|
145
|
+
if (!(await isServerInstalled())) {
|
|
146
|
+
onInstalling?.();
|
|
147
|
+
await installServer((msg) => {
|
|
148
|
+
// Progress messages are logged by the install process via stdio: 'inherit'
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Start server
|
|
152
|
+
onStarting?.();
|
|
153
|
+
await spawnServer();
|
|
154
|
+
return getPrimaryProcessPid() !== null;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error('Failed to start server:', error instanceof Error ? error.message : error);
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Checks if the wallet is running
|
|
163
|
+
*/
|
|
164
|
+
export function isWalletRunning() {
|
|
165
|
+
return getPrimaryProcessPid() !== null;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=serverManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverManager.js","sourceRoot":"","sources":["../../src/utils/serverManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "awal",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Coinbase Wallet CLI for payments and crypto",
|
|
6
|
+
"bin": "./dist/index.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/",
|
|
9
|
+
"server-bundle/"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsx src/index.ts",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
16
|
+
"lint": "eslint src --ext .ts",
|
|
17
|
+
"format": "prettier --write src/**/*.ts"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"chalk": "^5.3.0",
|
|
21
|
+
"commander": "^12.0.0",
|
|
22
|
+
"env-paths": "^3.0.0",
|
|
23
|
+
"ora": "^8.0.0",
|
|
24
|
+
"viem": "^2.37.3",
|
|
25
|
+
"zod": "^3.23.8"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.17.57",
|
|
29
|
+
"tsx": "^4.20.3",
|
|
30
|
+
"typescript": "5.8.3"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/coinbase/awal"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"wallet",
|
|
41
|
+
"coinbase",
|
|
42
|
+
"crypto",
|
|
43
|
+
"payments",
|
|
44
|
+
"x402",
|
|
45
|
+
"usdc",
|
|
46
|
+
"cli"
|
|
47
|
+
],
|
|
48
|
+
"author": "Coinbase",
|
|
49
|
+
"license": "Apache-2.0"
|
|
50
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Payments MCP - Connection Error</title>
|
|
7
|
+
<style>
|
|
8
|
+
* {
|
|
9
|
+
margin: 0;
|
|
10
|
+
padding: 0;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
body {
|
|
15
|
+
font-family: -apple-system, Inter, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
16
|
+
background: rgb(255, 255, 255);
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
min-height: 100vh;
|
|
21
|
+
padding: 32px;
|
|
22
|
+
text-align: center;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.icon {
|
|
26
|
+
width: 60px;
|
|
27
|
+
height: 60px;
|
|
28
|
+
margin: 0 auto 24px;
|
|
29
|
+
border-radius: 50%;
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
font-size: 40px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
h1 {
|
|
37
|
+
color: #1f2937;
|
|
38
|
+
font-size: 24px;
|
|
39
|
+
margin-bottom: 12px;
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
p {
|
|
44
|
+
color: rgb(91, 97, 110);
|
|
45
|
+
font-size: 16px;
|
|
46
|
+
font-weight: 400;
|
|
47
|
+
line-height: 24px;
|
|
48
|
+
margin-bottom: 24px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.button {
|
|
52
|
+
background: rgb(0, 82, 255);
|
|
53
|
+
border-radius: 56px;
|
|
54
|
+
border: none;
|
|
55
|
+
color: white;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
font-size: 16px;
|
|
58
|
+
font-weight: 600;
|
|
59
|
+
height: 56px;
|
|
60
|
+
line-height: 24px;
|
|
61
|
+
padding: 0 32px;
|
|
62
|
+
transition: all 0.2s;
|
|
63
|
+
width: 100%;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.button:hover {
|
|
67
|
+
background: rgb(0, 72, 224);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.button:active {
|
|
71
|
+
background: rgb(0, 67, 209);
|
|
72
|
+
transform: scale(0.98);
|
|
73
|
+
}
|
|
74
|
+
</style>
|
|
75
|
+
</head>
|
|
76
|
+
<body>
|
|
77
|
+
<div>
|
|
78
|
+
<div class="icon">⚠️</div>
|
|
79
|
+
<h1>Connection Error</h1>
|
|
80
|
+
<p>
|
|
81
|
+
Unable to connect to the Payments MCP service.
|
|
82
|
+
<br />
|
|
83
|
+
Please check your connection and try again.
|
|
84
|
+
</p>
|
|
85
|
+
|
|
86
|
+
<button class="button" onclick="retryConnection()">Retry connection</button>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<script>
|
|
90
|
+
function retryConnection() {
|
|
91
|
+
const button = document.querySelector('.button');
|
|
92
|
+
|
|
93
|
+
button.disabled = true;
|
|
94
|
+
button.textContent = 'Retrying...';
|
|
95
|
+
|
|
96
|
+
// Add a minimum delay so the "Retrying..." state is visible and doesn't feel buggy
|
|
97
|
+
setTimeout(() => {
|
|
98
|
+
// Tell Electron to reload the wallet URL
|
|
99
|
+
if (window.electron && window.electron.sendIPC) {
|
|
100
|
+
// Send IPC message to reload the wallet URL
|
|
101
|
+
// If successful, Electron will navigate to the wallet
|
|
102
|
+
// If it fails, the did-fail-load handler will show this fallback page again
|
|
103
|
+
window.electron.sendIPC('reload-wallet-url');
|
|
104
|
+
} else {
|
|
105
|
+
// If not in Electron, just reload the page to retry connection
|
|
106
|
+
window.location.reload();
|
|
107
|
+
}
|
|
108
|
+
}, 1000);
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
</body>
|
|
112
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|