moltycash 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/LICENSE +21 -0
- package/README.md +57 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +97 -0
- package/dist/cli.js.map +1 -0
- package/dist/send.d.ts +2 -0
- package/dist/send.d.ts.map +1 -0
- package/dist/send.js +250 -0
- package/dist/send.js.map +1 -0
- package/package.json +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Snack Money
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# moltycash
|
|
2
|
+
|
|
3
|
+
Send USDC to any [molty.cash](https://molty.cash) user from the command line. Supports Base and Solana via the [x402](https://x402.org) protocol.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g moltycash
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or with Homebrew:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
brew install molty-cash/tap/moltycash
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
moltycash send <molty_name> <amount> [--network <base|solana>]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Examples
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
moltycash send mesut 1¢
|
|
27
|
+
moltycash send alice 50¢
|
|
28
|
+
moltycash send bob 100¢ --network solana
|
|
29
|
+
moltycash send charlie 0.5 --network base
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Amount formats
|
|
33
|
+
|
|
34
|
+
| Format | Example | Value |
|
|
35
|
+
|--------|---------|-------|
|
|
36
|
+
| Cents | `50¢` | $0.50 |
|
|
37
|
+
| Dollar | `$0.50` | $0.50 |
|
|
38
|
+
| Decimal | `0.5` | $0.50 |
|
|
39
|
+
|
|
40
|
+
## Environment variables
|
|
41
|
+
|
|
42
|
+
| Variable | Description |
|
|
43
|
+
|----------|-------------|
|
|
44
|
+
| `EVM_PRIVATE_KEY` | Base wallet private key (`0x...`) |
|
|
45
|
+
| `SVM_PRIVATE_KEY` | Solana wallet private key (base58) |
|
|
46
|
+
| `MOLTY_IDENTITY_TOKEN` | Optional — appear as verified sender |
|
|
47
|
+
|
|
48
|
+
If only one key is set, that network is used automatically. If both are set, use `--network`.
|
|
49
|
+
|
|
50
|
+
## Links
|
|
51
|
+
|
|
52
|
+
- [molty.cash](https://molty.cash)
|
|
53
|
+
- [x402.org](https://x402.org)
|
|
54
|
+
|
|
55
|
+
## License
|
|
56
|
+
|
|
57
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* molty.cash CLI
|
|
4
|
+
* Send USDC payments via molty.cash API using x402 protocol
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from "child_process";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
import { dirname, join } from "path";
|
|
9
|
+
import { readFileSync, existsSync } from "fs";
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
// Read version from package.json (works from both dist/ and project root)
|
|
13
|
+
const pkgPath = existsSync(join(__dirname, "package.json"))
|
|
14
|
+
? join(__dirname, "package.json")
|
|
15
|
+
: join(__dirname, "../package.json");
|
|
16
|
+
const packageJson = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
17
|
+
const VERSION = packageJson.version;
|
|
18
|
+
function showVersion() {
|
|
19
|
+
console.log(`moltycash v${VERSION}`);
|
|
20
|
+
}
|
|
21
|
+
function showHelp() {
|
|
22
|
+
console.log(`
|
|
23
|
+
╔════════════════════════════════════════════════════════════╗
|
|
24
|
+
║ molty.cash CLI ║
|
|
25
|
+
╚════════════════════════════════════════════════════════════╝
|
|
26
|
+
|
|
27
|
+
Send USDC payments via molty.cash API
|
|
28
|
+
|
|
29
|
+
USAGE:
|
|
30
|
+
moltycash send <molty_name> <amount> [--network <base|solana>]
|
|
31
|
+
|
|
32
|
+
EXAMPLES:
|
|
33
|
+
moltycash send mesut 1¢
|
|
34
|
+
moltycash send alice 50¢
|
|
35
|
+
moltycash send bob 100¢ --network solana
|
|
36
|
+
moltycash send charlie 0.5 --network base
|
|
37
|
+
|
|
38
|
+
AMOUNT FORMATS:
|
|
39
|
+
1¢ Cents notation (recommended)
|
|
40
|
+
$0.5 Dollar notation (use quotes)
|
|
41
|
+
0.5 Decimal USDC
|
|
42
|
+
|
|
43
|
+
OPTIONS:
|
|
44
|
+
--help, -h Show this help message
|
|
45
|
+
--version, -v Show version number
|
|
46
|
+
--network Specify network (base or solana)
|
|
47
|
+
|
|
48
|
+
ENVIRONMENT VARIABLES:
|
|
49
|
+
SVM_PRIVATE_KEY Your Solana private key
|
|
50
|
+
EVM_PRIVATE_KEY Your Base/EVM private key
|
|
51
|
+
MOLTY_IDENTITY_TOKEN Optional identity token for verified sender
|
|
52
|
+
|
|
53
|
+
If only one key is set, that network is used automatically.
|
|
54
|
+
If both are set, you must specify --network.
|
|
55
|
+
|
|
56
|
+
DOCUMENTATION:
|
|
57
|
+
https://molty.cash
|
|
58
|
+
|
|
59
|
+
`);
|
|
60
|
+
}
|
|
61
|
+
function runCommand(command, args) {
|
|
62
|
+
const scriptPath = join(__dirname, command);
|
|
63
|
+
const child = spawn("node", [scriptPath, ...args], {
|
|
64
|
+
stdio: "inherit",
|
|
65
|
+
env: process.env,
|
|
66
|
+
});
|
|
67
|
+
child.on("error", (error) => {
|
|
68
|
+
console.error(`Failed to start command: ${error.message}`);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
});
|
|
71
|
+
child.on("exit", (code) => {
|
|
72
|
+
process.exit(code || 0);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function main() {
|
|
76
|
+
const args = process.argv.slice(2);
|
|
77
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
|
|
78
|
+
showHelp();
|
|
79
|
+
process.exit(0);
|
|
80
|
+
}
|
|
81
|
+
if (args[0] === "--version" || args[0] === "-v") {
|
|
82
|
+
showVersion();
|
|
83
|
+
process.exit(0);
|
|
84
|
+
}
|
|
85
|
+
const command = args[0];
|
|
86
|
+
if (command === "send") {
|
|
87
|
+
const commandArgs = args.slice(1);
|
|
88
|
+
runCommand("send.js", commandArgs);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.error(`\n❌ Unknown command: ${command}\n`);
|
|
92
|
+
console.error(`Run 'moltycash --help' to see available commands.\n`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
main();
|
|
97
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/send.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../send.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
package/dist/send.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import minimist from "minimist";
|
|
3
|
+
import axios from "axios";
|
|
4
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
5
|
+
import { x402Client } from "@x402/core/client";
|
|
6
|
+
import { registerExactEvmScheme } from "@x402/evm/exact/client";
|
|
7
|
+
import { registerExactSvmScheme } from "@x402/svm/exact/client";
|
|
8
|
+
import { createKeyPairSignerFromBytes } from "@solana/kit";
|
|
9
|
+
import bs58 from "bs58";
|
|
10
|
+
const privateKey = process.env.EVM_PRIVATE_KEY;
|
|
11
|
+
const svmPrivateKey = process.env.SVM_PRIVATE_KEY;
|
|
12
|
+
const baseURL = process.env.RESOURCE_SERVER_URL || "https://api.molty.cash";
|
|
13
|
+
const identityToken = process.env.MOLTY_IDENTITY_TOKEN;
|
|
14
|
+
const X402_EXTENSION_URI = "https://github.com/google-a2a/a2a-x402/v0.1";
|
|
15
|
+
/**
|
|
16
|
+
* Parse amount from various formats:
|
|
17
|
+
* - "50¢" -> 0.50
|
|
18
|
+
* - "$0.5" or "$0.50" -> 0.50
|
|
19
|
+
* - "0.5" -> 0.50
|
|
20
|
+
*/
|
|
21
|
+
function parseAmount(amountStr) {
|
|
22
|
+
const trimmed = amountStr.trim();
|
|
23
|
+
// Handle cents notation (50¢)
|
|
24
|
+
if (trimmed.endsWith("¢")) {
|
|
25
|
+
const cents = parseFloat(trimmed.slice(0, -1));
|
|
26
|
+
if (isNaN(cents)) {
|
|
27
|
+
throw new Error(`Invalid cents amount: ${amountStr}`);
|
|
28
|
+
}
|
|
29
|
+
return cents / 100;
|
|
30
|
+
}
|
|
31
|
+
// Handle dollar notation ($0.5 or $0.50)
|
|
32
|
+
if (trimmed.startsWith("$")) {
|
|
33
|
+
const dollarPart = trimmed.slice(1);
|
|
34
|
+
// Check if it looks like a shell positional parameter ($1, $2, $10, etc.)
|
|
35
|
+
if (/^\d+$/.test(dollarPart)) {
|
|
36
|
+
const dollars = parseInt(dollarPart, 10);
|
|
37
|
+
const cents = dollars * 100;
|
|
38
|
+
throw new Error(`Dollar amounts like $${dollars} can be interpreted as shell variables. Please use ${cents}¢ instead.`);
|
|
39
|
+
}
|
|
40
|
+
const dollars = parseFloat(dollarPart);
|
|
41
|
+
if (isNaN(dollars)) {
|
|
42
|
+
throw new Error(`Invalid dollar amount: ${amountStr}`);
|
|
43
|
+
}
|
|
44
|
+
return dollars;
|
|
45
|
+
}
|
|
46
|
+
// Handle plain decimal (0.5)
|
|
47
|
+
const amount = parseFloat(trimmed);
|
|
48
|
+
if (isNaN(amount)) {
|
|
49
|
+
throw new Error(`Invalid amount: ${amountStr}`);
|
|
50
|
+
}
|
|
51
|
+
return amount;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate molty username
|
|
55
|
+
*/
|
|
56
|
+
function validateMoltyUsername(username) {
|
|
57
|
+
if (!/^[a-zA-Z0-9_-]{1,30}$/.test(username)) {
|
|
58
|
+
throw new Error(`Invalid molty username: ${username}. Must be 1-30 alphanumeric characters, underscores, or hyphens.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const args = minimist(process.argv.slice(2));
|
|
62
|
+
let moltyUsername;
|
|
63
|
+
let amount;
|
|
64
|
+
if (args._.length < 2) {
|
|
65
|
+
console.error("Usage: moltycash send <molty_name> <amount> [--network <base|solana>]");
|
|
66
|
+
console.error("\nExamples:");
|
|
67
|
+
console.error(" moltycash send mesut 1¢");
|
|
68
|
+
console.error(" moltycash send alice 50¢");
|
|
69
|
+
console.error(" moltycash send bob 100¢ --network solana");
|
|
70
|
+
console.error(" moltycash send charlie 0.5 --network base");
|
|
71
|
+
console.error("\nAmount formats: 100¢ (cents - recommended), 0.5 (decimal)");
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
moltyUsername = args._[0];
|
|
76
|
+
validateMoltyUsername(moltyUsername);
|
|
77
|
+
amount = parseAmount(String(args._[1]));
|
|
78
|
+
if (amount <= 0) {
|
|
79
|
+
throw new Error("Amount must be greater than 0");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(`❌ ${error.message}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
// Check which private keys are available
|
|
87
|
+
const hasEvmKey = !!privateKey;
|
|
88
|
+
const hasSvmKey = !!svmPrivateKey;
|
|
89
|
+
// Determine network based on provided arg or auto-detect
|
|
90
|
+
let useSolana;
|
|
91
|
+
const allowedNetworks = ["base", "solana"];
|
|
92
|
+
if (args.network) {
|
|
93
|
+
if (!allowedNetworks.includes(args.network.toLowerCase())) {
|
|
94
|
+
console.error(`Network must be either 'base' or 'solana'`);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
useSolana = args.network.toLowerCase() === "solana";
|
|
98
|
+
if (useSolana && !hasSvmKey) {
|
|
99
|
+
console.error("❌ Missing SVM_PRIVATE_KEY environment variable (needed for --network solana)");
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
if (!useSolana && !hasEvmKey) {
|
|
103
|
+
console.error("❌ Missing EVM_PRIVATE_KEY environment variable (needed for --network base)");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Auto-detect from available keys
|
|
109
|
+
if (hasEvmKey && hasSvmKey) {
|
|
110
|
+
console.error("❌ Both EVM_PRIVATE_KEY and SVM_PRIVATE_KEY are set");
|
|
111
|
+
console.error(" Please specify which network to use with --network <base|solana>");
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
else if (hasSvmKey) {
|
|
115
|
+
useSolana = true;
|
|
116
|
+
console.log("ℹ️ Auto-detected network: Solana");
|
|
117
|
+
}
|
|
118
|
+
else if (hasEvmKey) {
|
|
119
|
+
useSolana = false;
|
|
120
|
+
console.log("ℹ️ Auto-detected network: Base");
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.error("❌ No private keys found");
|
|
124
|
+
console.error(" Set EVM_PRIVATE_KEY (for Base) or SVM_PRIVATE_KEY (for Solana)");
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function main() {
|
|
129
|
+
// Create x402 client
|
|
130
|
+
const client = new x402Client();
|
|
131
|
+
if (useSolana) {
|
|
132
|
+
console.log("\n🔧 Creating Solana signer...");
|
|
133
|
+
const privateKeyBytes = bs58.decode(svmPrivateKey);
|
|
134
|
+
const solanaSigner = await createKeyPairSignerFromBytes(privateKeyBytes);
|
|
135
|
+
console.log(`✅ Solana signer created: ${solanaSigner.address}`);
|
|
136
|
+
registerExactSvmScheme(client, { signer: solanaSigner });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log("\n🔧 Creating Base signer...");
|
|
140
|
+
if (!privateKey.startsWith("0x")) {
|
|
141
|
+
console.error("❌ EVM_PRIVATE_KEY must start with '0x'");
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
const account = privateKeyToAccount(privateKey);
|
|
145
|
+
console.log(`✅ Base signer created: ${account.address}`);
|
|
146
|
+
registerExactEvmScheme(client, { signer: account });
|
|
147
|
+
}
|
|
148
|
+
console.log(`\n💸 Sending ${amount} USDC to @${moltyUsername}...`);
|
|
149
|
+
console.log(` API: ${baseURL}/a2a`);
|
|
150
|
+
console.log(` Network: ${useSolana ? "Solana" : "Base"}`);
|
|
151
|
+
if (identityToken) {
|
|
152
|
+
console.log(` 🔐 Sending as verified sender`);
|
|
153
|
+
}
|
|
154
|
+
console.log();
|
|
155
|
+
const headers = {
|
|
156
|
+
"Content-Type": "application/json",
|
|
157
|
+
"X-A2A-Extensions": X402_EXTENSION_URI,
|
|
158
|
+
...(identityToken && { "X-Molty-Identity-Token": identityToken }),
|
|
159
|
+
};
|
|
160
|
+
const payParams = {
|
|
161
|
+
molty: moltyUsername,
|
|
162
|
+
amount,
|
|
163
|
+
description: `Payment via moltycash-cli (${useSolana ? "Solana" : "Base"})`,
|
|
164
|
+
meta: { agent_name: "moltycash-cli" },
|
|
165
|
+
};
|
|
166
|
+
try {
|
|
167
|
+
// Phase 1: Get payment requirements
|
|
168
|
+
console.log("💳 Phase 1: Requesting payment requirements...");
|
|
169
|
+
const phase1Response = await axios.post(`${baseURL}/a2a`, {
|
|
170
|
+
jsonrpc: "2.0",
|
|
171
|
+
id: 1,
|
|
172
|
+
method: "molty.send",
|
|
173
|
+
params: payParams,
|
|
174
|
+
}, { headers });
|
|
175
|
+
if (phase1Response.data.error) {
|
|
176
|
+
throw new Error(phase1Response.data.error.message || "A2A request failed");
|
|
177
|
+
}
|
|
178
|
+
const phase1Result = phase1Response.data.result;
|
|
179
|
+
if (!phase1Result.id) {
|
|
180
|
+
throw new Error("Missing task ID in response");
|
|
181
|
+
}
|
|
182
|
+
const paymentRequired = phase1Result.status?.message?.metadata?.["x402.payment.required"];
|
|
183
|
+
if (!paymentRequired) {
|
|
184
|
+
throw new Error("No payment requirements found in response");
|
|
185
|
+
}
|
|
186
|
+
// Phase 2: Sign and submit payment
|
|
187
|
+
console.log("🔐 Phase 2: Signing payment...");
|
|
188
|
+
const signedPayment = await client.createPaymentPayload(paymentRequired);
|
|
189
|
+
console.log("📤 Submitting signed payment...\n");
|
|
190
|
+
const phase2Response = await axios.post(`${baseURL}/a2a`, {
|
|
191
|
+
jsonrpc: "2.0",
|
|
192
|
+
id: 2,
|
|
193
|
+
method: "molty.send",
|
|
194
|
+
params: {
|
|
195
|
+
...payParams,
|
|
196
|
+
taskId: phase1Result.id,
|
|
197
|
+
payment: signedPayment,
|
|
198
|
+
},
|
|
199
|
+
}, { headers });
|
|
200
|
+
if (phase2Response.data.error) {
|
|
201
|
+
throw new Error(phase2Response.data.error.message || "Payment failed");
|
|
202
|
+
}
|
|
203
|
+
const result = phase2Response.data.result;
|
|
204
|
+
// Extract details from task artifacts
|
|
205
|
+
const artifacts = result.artifacts || [];
|
|
206
|
+
for (const artifact of artifacts) {
|
|
207
|
+
if (artifact.data) {
|
|
208
|
+
try {
|
|
209
|
+
const data = JSON.parse(Buffer.from(artifact.data, "base64").toString());
|
|
210
|
+
console.log(`✅ ${data.amount} USDC sent to @${data.molty || moltyUsername}`);
|
|
211
|
+
if (data.txn_id) {
|
|
212
|
+
console.log(`🔗 TXN: ${data.txn_id}`);
|
|
213
|
+
}
|
|
214
|
+
if (data.network) {
|
|
215
|
+
console.log(`💳 Network: ${data.network}`);
|
|
216
|
+
}
|
|
217
|
+
if (data.receipt) {
|
|
218
|
+
console.log(`📄 Receipt: ${data.receipt}`);
|
|
219
|
+
}
|
|
220
|
+
if (data.x_handle) {
|
|
221
|
+
console.log(`🐦 X: @${data.x_handle}`);
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// ignore parse errors
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Fallback: print status message
|
|
231
|
+
const msg = result.status?.message?.parts
|
|
232
|
+
?.filter((p) => p.kind === "text")
|
|
233
|
+
.map((p) => p.text)
|
|
234
|
+
.join("\n");
|
|
235
|
+
console.log(`✅ ${msg || "Payment sent"}`);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const errMsg = error.response?.data?.error?.message || error.response?.data?.msg || error.message;
|
|
239
|
+
console.error(`❌ ${errMsg || "Payment failed"}`);
|
|
240
|
+
if (error.response) {
|
|
241
|
+
console.error(" Status:", error.response.status);
|
|
242
|
+
}
|
|
243
|
+
else if (error.message && !errMsg) {
|
|
244
|
+
console.error(" Error:", error.message);
|
|
245
|
+
}
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
main();
|
|
250
|
+
//# sourceMappingURL=send.js.map
|
package/dist/send.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../send.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "moltycash",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool for sending USDC payments via molty.cash API using x402 protocol",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"moltycash": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/cli.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"moltycash",
|
|
17
|
+
"molty",
|
|
18
|
+
"usdc",
|
|
19
|
+
"payments",
|
|
20
|
+
"crypto",
|
|
21
|
+
"x402",
|
|
22
|
+
"solana",
|
|
23
|
+
"base",
|
|
24
|
+
"cli"
|
|
25
|
+
],
|
|
26
|
+
"author": "molty.cash",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/moltycash/moltycash-cli.git"
|
|
31
|
+
},
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/moltycash/moltycash-cli/issues"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/moltycash/moltycash-cli#readme",
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc",
|
|
38
|
+
"prepublishOnly": "yarn build"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@solana/kit": "^2.3.0",
|
|
42
|
+
"@x402/core": "^2.0.0",
|
|
43
|
+
"@x402/evm": "^2.0.0",
|
|
44
|
+
"@x402/svm": "^2.0.0",
|
|
45
|
+
"axios": "^1.13.2",
|
|
46
|
+
"bs58": "^6.0.0",
|
|
47
|
+
"dotenv": "^16.5.0",
|
|
48
|
+
"minimist": "^1.2.8",
|
|
49
|
+
"viem": "^2.38.6"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/minimist": "^1.2.5",
|
|
53
|
+
"@types/node": "^24.0.12",
|
|
54
|
+
"tsx": "^4.20.6",
|
|
55
|
+
"typescript": "^5.9.3"
|
|
56
|
+
}
|
|
57
|
+
}
|