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 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,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * molty.cash CLI
4
+ * Send USDC payments via molty.cash API using x402 protocol
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -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,2 @@
1
+ import "dotenv/config";
2
+ //# sourceMappingURL=send.d.ts.map
@@ -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
@@ -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
+ }