moltycash 1.0.2 → 2.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/dist/cli.js +23 -6
- package/dist/cli.js.map +1 -1
- package/dist/gig.d.ts +2 -0
- package/dist/gig.d.ts.map +1 -0
- package/dist/gig.js +511 -0
- package/dist/gig.js.map +1 -0
- package/dist/send.js +50 -51
- package/dist/send.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -24,16 +24,29 @@ function showHelp() {
|
|
|
24
24
|
║ molty.cash CLI ║
|
|
25
25
|
╚════════════════════════════════════════════════════════════╝
|
|
26
26
|
|
|
27
|
-
Send USDC payments via molty.cash API
|
|
27
|
+
Send USDC payments and manage gigs via molty.cash API
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
COMMANDS:
|
|
30
|
+
send <molty_name> <amount> [--network <base|solana>]
|
|
31
|
+
gig <subcommand>
|
|
31
32
|
|
|
32
|
-
EXAMPLES:
|
|
33
|
+
SEND EXAMPLES:
|
|
33
34
|
moltycash send mesut 1¢
|
|
34
35
|
moltycash send alice 50¢
|
|
35
36
|
moltycash send bob 100¢ --network solana
|
|
36
|
-
|
|
37
|
+
|
|
38
|
+
GIG SUBCOMMANDS:
|
|
39
|
+
gig create "<task>" --price <amount> [--quantity <n>] [--network <base|solana>]
|
|
40
|
+
gig my-gigs List your created gigs
|
|
41
|
+
gig get <gig_id> Get gig details
|
|
42
|
+
gig dispute <gig_id> <claim_id> ["reason"]
|
|
43
|
+
gig disputes List all disputed claims
|
|
44
|
+
gig resolve <gig_id> <claim_id> <approve|reject>
|
|
45
|
+
|
|
46
|
+
GIG EXAMPLES:
|
|
47
|
+
moltycash gig create "Post about molty.cash" --price 0.1 --quantity 5
|
|
48
|
+
moltycash gig my-gigs
|
|
49
|
+
moltycash gig get ppp_123
|
|
37
50
|
|
|
38
51
|
AMOUNT FORMATS:
|
|
39
52
|
1¢ Cents notation (recommended)
|
|
@@ -48,7 +61,7 @@ OPTIONS:
|
|
|
48
61
|
ENVIRONMENT VARIABLES:
|
|
49
62
|
SVM_PRIVATE_KEY Your Solana private key
|
|
50
63
|
EVM_PRIVATE_KEY Your Base/EVM private key
|
|
51
|
-
MOLTY_IDENTITY_TOKEN
|
|
64
|
+
MOLTY_IDENTITY_TOKEN Identity token (required for gig commands)
|
|
52
65
|
|
|
53
66
|
If only one key is set, that network is used automatically.
|
|
54
67
|
If both are set, you must specify --network.
|
|
@@ -87,6 +100,10 @@ function main() {
|
|
|
87
100
|
const commandArgs = args.slice(1);
|
|
88
101
|
runCommand("send.js", commandArgs);
|
|
89
102
|
}
|
|
103
|
+
else if (command === "gig") {
|
|
104
|
+
const commandArgs = args.slice(1);
|
|
105
|
+
runCommand("gig.js", commandArgs);
|
|
106
|
+
}
|
|
90
107
|
else {
|
|
91
108
|
console.error(`\n❌ Unknown command: ${command}\n`);
|
|
92
109
|
console.error(`Run 'moltycash --help' to see available commands.\n`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,0EAA0E;AAC1E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;IACjC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
package/dist/gig.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gig.d.ts","sourceRoot":"","sources":["../gig.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
package/dist/gig.js
ADDED
|
@@ -0,0 +1,511 @@
|
|
|
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
|
+
let rpcIdCounter = 1;
|
|
16
|
+
/**
|
|
17
|
+
* Parse amount from various formats:
|
|
18
|
+
* - "50¢" -> 0.50
|
|
19
|
+
* - "$0.5" or "$0.50" -> 0.50
|
|
20
|
+
* - "0.5" -> 0.50
|
|
21
|
+
*/
|
|
22
|
+
function parseAmount(amountStr) {
|
|
23
|
+
const trimmed = amountStr.trim();
|
|
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
|
+
if (trimmed.startsWith("$")) {
|
|
32
|
+
const dollarPart = trimmed.slice(1);
|
|
33
|
+
if (/^\d+$/.test(dollarPart)) {
|
|
34
|
+
const dollars = parseInt(dollarPart, 10);
|
|
35
|
+
const cents = dollars * 100;
|
|
36
|
+
throw new Error(`Dollar amounts like $${dollars} can be interpreted as shell variables. Please use ${cents}¢ instead.`);
|
|
37
|
+
}
|
|
38
|
+
const dollars = parseFloat(dollarPart);
|
|
39
|
+
if (isNaN(dollars)) {
|
|
40
|
+
throw new Error(`Invalid dollar amount: ${amountStr}`);
|
|
41
|
+
}
|
|
42
|
+
return dollars;
|
|
43
|
+
}
|
|
44
|
+
const amount = parseFloat(trimmed);
|
|
45
|
+
if (isNaN(amount)) {
|
|
46
|
+
throw new Error(`Invalid amount: ${amountStr}`);
|
|
47
|
+
}
|
|
48
|
+
return amount;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Send A2A JSON-RPC 2.0 request
|
|
52
|
+
*/
|
|
53
|
+
async function a2aCall(method, params, extraHeaders) {
|
|
54
|
+
const headers = {
|
|
55
|
+
"Content-Type": "application/json",
|
|
56
|
+
...(identityToken && { "X-Molty-Identity-Token": identityToken }),
|
|
57
|
+
...extraHeaders,
|
|
58
|
+
};
|
|
59
|
+
const response = await axios.post(`${baseURL}/a2a`, {
|
|
60
|
+
jsonrpc: "2.0",
|
|
61
|
+
id: rpcIdCounter++,
|
|
62
|
+
method,
|
|
63
|
+
params,
|
|
64
|
+
}, { headers });
|
|
65
|
+
if (response.data.error) {
|
|
66
|
+
throw new Error(response.data.error.message || "A2A request failed");
|
|
67
|
+
}
|
|
68
|
+
return response.data.result;
|
|
69
|
+
}
|
|
70
|
+
// ───── x402 helpers ─────
|
|
71
|
+
async function createSignedClient() {
|
|
72
|
+
const client = new x402Client();
|
|
73
|
+
const hasEvmKey = !!privateKey;
|
|
74
|
+
const hasSvmKey = !!svmPrivateKey;
|
|
75
|
+
if (!hasEvmKey && !hasSvmKey) {
|
|
76
|
+
console.error("\u274c No private keys found. Set EVM_PRIVATE_KEY or SVM_PRIVATE_KEY.");
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
if (hasEvmKey) {
|
|
80
|
+
if (!privateKey.startsWith("0x")) {
|
|
81
|
+
console.error("\u274c EVM_PRIVATE_KEY must start with '0x'");
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const account = privateKeyToAccount(privateKey);
|
|
85
|
+
registerExactEvmScheme(client, { signer: account });
|
|
86
|
+
}
|
|
87
|
+
if (hasSvmKey) {
|
|
88
|
+
const privateKeyBytes = bs58.decode(svmPrivateKey);
|
|
89
|
+
const solanaSigner = await createKeyPairSignerFromBytes(privateKeyBytes);
|
|
90
|
+
registerExactSvmScheme(client, { signer: solanaSigner });
|
|
91
|
+
}
|
|
92
|
+
return client;
|
|
93
|
+
}
|
|
94
|
+
async function earnerCall(method, params) {
|
|
95
|
+
const client = await createSignedClient();
|
|
96
|
+
// Phase 1: Get payment requirements
|
|
97
|
+
const phase1 = await a2aCall(method, params, { "X-A2A-Extensions": X402_EXTENSION_URI });
|
|
98
|
+
const paymentRequired = phase1.status?.message?.metadata?.["x402.payment.required"];
|
|
99
|
+
if (!paymentRequired)
|
|
100
|
+
throw new Error("No payment requirements in response");
|
|
101
|
+
// Phase 2: Sign and submit payment
|
|
102
|
+
const signedPayment = await client.createPaymentPayload(paymentRequired);
|
|
103
|
+
const phase2 = await a2aCall(method, { ...params, taskId: phase1.id, payment: signedPayment }, { "X-A2A-Extensions": X402_EXTENSION_URI });
|
|
104
|
+
// Extract result from artifact
|
|
105
|
+
const artifacts = phase2.artifacts || [];
|
|
106
|
+
for (const artifact of artifacts) {
|
|
107
|
+
if (artifact.data) {
|
|
108
|
+
try {
|
|
109
|
+
return JSON.parse(Buffer.from(artifact.data, "base64").toString());
|
|
110
|
+
}
|
|
111
|
+
catch { }
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return phase2;
|
|
115
|
+
}
|
|
116
|
+
// ───── Payer subcommands ─────
|
|
117
|
+
async function handleCreate(args) {
|
|
118
|
+
const perGigUsdAmount = args.price;
|
|
119
|
+
const quantity = args.quantity || 1;
|
|
120
|
+
const task = args._.slice(1).join(" ").trim();
|
|
121
|
+
if (!perGigUsdAmount || !task) {
|
|
122
|
+
console.error('Usage: moltycash gig create "<task>" --price <value> [--quantity <n>] [--network <base|solana>]');
|
|
123
|
+
console.error('\nExample: moltycash gig create "Take a photo of your local coffee shop" --price 0.1 --quantity 10 --network base');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
let amount;
|
|
127
|
+
let perPostPrice;
|
|
128
|
+
try {
|
|
129
|
+
perPostPrice = parseAmount(String(perGigUsdAmount));
|
|
130
|
+
const qty = parseInt(String(quantity), 10);
|
|
131
|
+
if (isNaN(qty) || qty < 1)
|
|
132
|
+
throw new Error("Quantity must be a positive integer");
|
|
133
|
+
if (perPostPrice <= 0)
|
|
134
|
+
throw new Error("Per-gig USD amount must be greater than 0");
|
|
135
|
+
amount = perPostPrice * qty;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error(`\u274c ${error.message}`);
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
if (task.length > 500) {
|
|
142
|
+
console.error(`\u274c Task description too long (${task.length} chars). Max 500 characters.`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
// Setup x402 signer
|
|
146
|
+
const hasEvmKey = !!privateKey;
|
|
147
|
+
const hasSvmKey = !!svmPrivateKey;
|
|
148
|
+
let useSolana;
|
|
149
|
+
if (args.network) {
|
|
150
|
+
if (!["base", "solana"].includes(args.network.toLowerCase())) {
|
|
151
|
+
console.error("Network must be either 'base' or 'solana'");
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
useSolana = args.network.toLowerCase() === "solana";
|
|
155
|
+
if (useSolana && !hasSvmKey) {
|
|
156
|
+
console.error("\u274c Missing SVM_PRIVATE_KEY environment variable (needed for --network solana)");
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
if (!useSolana && !hasEvmKey) {
|
|
160
|
+
console.error("\u274c Missing EVM_PRIVATE_KEY environment variable (needed for --network base)");
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
if (hasEvmKey && hasSvmKey) {
|
|
166
|
+
console.error("\u274c Both EVM_PRIVATE_KEY and SVM_PRIVATE_KEY are set");
|
|
167
|
+
console.error(" Please specify which network to use with --network <base|solana>");
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
else if (hasSvmKey) {
|
|
171
|
+
useSolana = true;
|
|
172
|
+
console.log("\u2139\ufe0f Auto-detected network: Solana");
|
|
173
|
+
}
|
|
174
|
+
else if (hasEvmKey) {
|
|
175
|
+
useSolana = false;
|
|
176
|
+
console.log("\u2139\ufe0f Auto-detected network: Base");
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.error("\u274c No private keys found");
|
|
180
|
+
console.error(" Set EVM_PRIVATE_KEY (for Base) or SVM_PRIVATE_KEY (for Solana)");
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const client = new x402Client();
|
|
185
|
+
if (useSolana) {
|
|
186
|
+
console.log("\n\ud83d\udd27 Creating Solana signer...");
|
|
187
|
+
const privateKeyBytes = bs58.decode(svmPrivateKey);
|
|
188
|
+
const solanaSigner = await createKeyPairSignerFromBytes(privateKeyBytes);
|
|
189
|
+
console.log(`\u2705 Solana signer created: ${solanaSigner.address}`);
|
|
190
|
+
registerExactSvmScheme(client, { signer: solanaSigner });
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log("\n\ud83d\udd27 Creating Base signer...");
|
|
194
|
+
if (!privateKey.startsWith("0x")) {
|
|
195
|
+
console.error("\u274c EVM_PRIVATE_KEY must start with '0x'");
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
const account = privateKeyToAccount(privateKey);
|
|
199
|
+
console.log(`\u2705 Base signer created: ${account.address}`);
|
|
200
|
+
registerExactEvmScheme(client, { signer: account });
|
|
201
|
+
}
|
|
202
|
+
const totalSlots = Math.floor(amount / perPostPrice);
|
|
203
|
+
console.log(`\n\ud83c\udfaf Creating gig: ${totalSlots} slot(s) at ${perPostPrice} USDC each (total: ${amount} USDC)`);
|
|
204
|
+
console.log(` Network: ${useSolana ? "Solana" : "Base"}`);
|
|
205
|
+
console.log(` Task: ${task}`);
|
|
206
|
+
console.log();
|
|
207
|
+
// Phase 1: Get payment requirements
|
|
208
|
+
console.log("\ud83d\udcb3 Phase 1: Requesting payment requirements...");
|
|
209
|
+
const phase1Result = await a2aCall("gig.create", { amount, per_post_price: perPostPrice, task }, { "X-A2A-Extensions": X402_EXTENSION_URI });
|
|
210
|
+
if (!phase1Result.id) {
|
|
211
|
+
throw new Error("Missing task ID in response");
|
|
212
|
+
}
|
|
213
|
+
const paymentRequired = phase1Result.status?.message?.metadata?.["x402.payment.required"];
|
|
214
|
+
if (!paymentRequired) {
|
|
215
|
+
throw new Error("No payment requirements found in response");
|
|
216
|
+
}
|
|
217
|
+
// Phase 2: Sign and submit payment
|
|
218
|
+
console.log("\ud83d\udd10 Phase 2: Signing payment...");
|
|
219
|
+
const signedPayment = await client.createPaymentPayload(paymentRequired);
|
|
220
|
+
console.log("\ud83d\udce4 Submitting signed payment...\n");
|
|
221
|
+
const phase2Result = await a2aCall("gig.create", {
|
|
222
|
+
amount,
|
|
223
|
+
per_post_price: perPostPrice,
|
|
224
|
+
task,
|
|
225
|
+
taskId: phase1Result.id,
|
|
226
|
+
payment: signedPayment,
|
|
227
|
+
}, { "X-A2A-Extensions": X402_EXTENSION_URI });
|
|
228
|
+
// Extract gig details from completed task artifacts
|
|
229
|
+
const artifacts = phase2Result.artifacts || [];
|
|
230
|
+
for (const artifact of artifacts) {
|
|
231
|
+
if (artifact.data) {
|
|
232
|
+
try {
|
|
233
|
+
const data = JSON.parse(Buffer.from(artifact.data, "base64").toString());
|
|
234
|
+
console.log(`\u2705 Gig created!`);
|
|
235
|
+
console.log(` ID: ${data.gig_id}`);
|
|
236
|
+
console.log(` Slots: ${data.total_slots}`);
|
|
237
|
+
console.log(` Per post: ${data.per_post_price} USDC`);
|
|
238
|
+
console.log(` Task: ${data.task}`);
|
|
239
|
+
console.log(` Deadline: ${data.deadline}`);
|
|
240
|
+
if (data.transaction_hash) {
|
|
241
|
+
console.log(` TXN: ${data.transaction_hash}`);
|
|
242
|
+
}
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// ignore parse errors
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Fallback: print status message
|
|
251
|
+
const msg = phase2Result.status?.message?.parts
|
|
252
|
+
?.filter((p) => p.kind === "text")
|
|
253
|
+
.map((p) => p.text)
|
|
254
|
+
.join("\n");
|
|
255
|
+
console.log(`\u2705 ${msg || "Gig created"}`);
|
|
256
|
+
}
|
|
257
|
+
async function handleMyGigs() {
|
|
258
|
+
console.log("\n\ud83d\udccb Fetching your gigs...\n");
|
|
259
|
+
const result = await a2aCall("gig.my_created", {});
|
|
260
|
+
const gigs = result.gigs || [];
|
|
261
|
+
if (gigs.length === 0) {
|
|
262
|
+
console.log("No gigs created yet.");
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
console.log(`Found ${gigs.length} gig(s):\n`);
|
|
266
|
+
for (const b of gigs) {
|
|
267
|
+
const statusIcon = b.status === "open" ? "\ud83d\udfe2" : b.status === "completed" ? "\u2705" : "\u23f0";
|
|
268
|
+
console.log(` ${statusIcon} ${b.id} [${b.status}]`);
|
|
269
|
+
console.log(` ${b.task}`);
|
|
270
|
+
console.log(` ${b.amount} USDC (${b.per_post_price}/post) \u2014 ${b.claimed_slots}/${b.total_slots} claimed`);
|
|
271
|
+
console.log(` Deadline: ${b.deadline}`);
|
|
272
|
+
console.log();
|
|
273
|
+
}
|
|
274
|
+
console.log(`Use 'moltycash gig get <gig_id>' for full details.`);
|
|
275
|
+
}
|
|
276
|
+
async function handleGet(args) {
|
|
277
|
+
if (args._.length < 2) {
|
|
278
|
+
console.error("Usage: moltycash gig get <gig_id>");
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
const gigId = args._[1];
|
|
282
|
+
console.log(`\n\ud83d\udccb Fetching gig ${gigId}...\n`);
|
|
283
|
+
const result = await a2aCall("gig.get", { gig_id: gigId });
|
|
284
|
+
const statusIcon = result.status === "open" ? "\ud83d\udfe2" : result.status === "completed" ? "\u2705" : "\u23f0";
|
|
285
|
+
console.log(`${statusIcon} ${result.id} [${result.status}]`);
|
|
286
|
+
console.log(` Task: ${result.task}`);
|
|
287
|
+
console.log(` Amount: ${result.amount} USDC (${result.per_post_price} per post)`);
|
|
288
|
+
console.log(` Slots: ${result.claimed_slots} claimed / ${result.assigned_slots} assigned / ${result.total_slots} total`);
|
|
289
|
+
console.log(` Remaining: ${result.remaining_slots}`);
|
|
290
|
+
console.log(` Network: ${result.payment_network}`);
|
|
291
|
+
console.log(` Deadline: ${result.deadline}`);
|
|
292
|
+
console.log(` Created: ${result.created_at}`);
|
|
293
|
+
if (result.settlement_txn_hash) {
|
|
294
|
+
console.log(` TXN: ${result.settlement_txn_hash}`);
|
|
295
|
+
}
|
|
296
|
+
const claims = result.claims || [];
|
|
297
|
+
if (claims.length > 0) {
|
|
298
|
+
console.log(`\n Claims (${claims.length}):`);
|
|
299
|
+
for (const c of claims) {
|
|
300
|
+
const claimIcon = c.status === "completed" ? "\u2705"
|
|
301
|
+
: c.status === "approved" ? "\u23f3"
|
|
302
|
+
: c.status === "pending_review" ? "\ud83d\udd0d"
|
|
303
|
+
: c.status === "assigned" ? "\ud83d\udd12"
|
|
304
|
+
: c.status === "rejected" ? "\u274c"
|
|
305
|
+
: c.status === "final_rejected" ? "\u26d4"
|
|
306
|
+
: c.status === "disputed" ? "\u26a0\ufe0f"
|
|
307
|
+
: "\u2022";
|
|
308
|
+
console.log(` ${claimIcon} @${c.claimer_molty} \u2014 ${c.status} \u2014 ${c.amount} USDC`);
|
|
309
|
+
if (c.proof) {
|
|
310
|
+
console.log(` Proof: ${c.proof}`);
|
|
311
|
+
}
|
|
312
|
+
if (c.ai_review_result?.reason) {
|
|
313
|
+
console.log(` AI: ${c.ai_review_result.reason}`);
|
|
314
|
+
}
|
|
315
|
+
if (c.status === "assigned" && c.assignment_deadline) {
|
|
316
|
+
console.log(` Submit by: ${c.assignment_deadline}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
console.log(`\n No claims yet.`);
|
|
322
|
+
}
|
|
323
|
+
console.log();
|
|
324
|
+
}
|
|
325
|
+
async function handleReview(args) {
|
|
326
|
+
if (args._.length < 4) {
|
|
327
|
+
console.error('Usage: moltycash gig review <gig_id> <claim_id> <approve|reject> ["reason"]');
|
|
328
|
+
console.error('\nExample: moltycash gig review ppp_123 claim_abc approve');
|
|
329
|
+
console.error('Example: moltycash gig review ppp_123 claim_abc reject "Does not match the task"');
|
|
330
|
+
process.exit(1);
|
|
331
|
+
}
|
|
332
|
+
const gigId = args._[1];
|
|
333
|
+
const claimId = args._[2];
|
|
334
|
+
const action = args._[3];
|
|
335
|
+
const reason = args._[4] || undefined;
|
|
336
|
+
if (!["approve", "reject"].includes(action)) {
|
|
337
|
+
console.error(`\u274c Action must be 'approve' or 'reject', got '${action}'`);
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
console.log(`\n\u2696\ufe0f Reviewing claim ${claimId} on gig ${gigId}...`);
|
|
341
|
+
console.log(` Action: ${action}`);
|
|
342
|
+
if (reason)
|
|
343
|
+
console.log(` Reason: ${reason}`);
|
|
344
|
+
console.log();
|
|
345
|
+
const result = await a2aCall("gig.review", {
|
|
346
|
+
gig_id: gigId,
|
|
347
|
+
claim_id: claimId,
|
|
348
|
+
action,
|
|
349
|
+
...(reason && { reason }),
|
|
350
|
+
});
|
|
351
|
+
console.log(`\u2705 Review submitted!`);
|
|
352
|
+
console.log(` Claim: ${result.claim_id}`);
|
|
353
|
+
console.log(` Status: ${result.status}`);
|
|
354
|
+
if (result.message) {
|
|
355
|
+
console.log(` ${result.message}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// ───── Earner subcommands ─────
|
|
359
|
+
async function handleList() {
|
|
360
|
+
console.log("\n\ud83d\udccb Fetching available gigs...\n");
|
|
361
|
+
const result = await earnerCall("gig.list", {});
|
|
362
|
+
if (!result.eligible) {
|
|
363
|
+
console.log(`\u274c Not eligible: ${result.reason}`);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const gigs = result.gigs || [];
|
|
367
|
+
if (gigs.length === 0) {
|
|
368
|
+
console.log("No open gigs available.");
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
console.log(`Found ${gigs.length} gig(s):\n`);
|
|
372
|
+
for (const g of gigs) {
|
|
373
|
+
console.log(` \ud83d\udfe2 ${g.id}`);
|
|
374
|
+
console.log(` ${g.task}`);
|
|
375
|
+
console.log(` ${g.per_post_price} USDC/post \u2014 ${g.remaining_slots} slot(s) left`);
|
|
376
|
+
console.log(` Deadline: ${g.deadline}`);
|
|
377
|
+
console.log();
|
|
378
|
+
}
|
|
379
|
+
console.log(`Use 'moltycash gig pick <gig_id>' to reserve a slot.`);
|
|
380
|
+
}
|
|
381
|
+
async function handlePick(args) {
|
|
382
|
+
if (args._.length < 2) {
|
|
383
|
+
console.error("Usage: moltycash gig pick <gig_id>");
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
const gigId = args._[1];
|
|
387
|
+
console.log(`\n\ud83c\udfaf Picking gig ${gigId}...\n`);
|
|
388
|
+
const result = await earnerCall("gig.pick", { gig_id: gigId });
|
|
389
|
+
console.log(`\u2705 Slot reserved!`);
|
|
390
|
+
console.log(` Claim: ${result.claim_id}`);
|
|
391
|
+
console.log(` Gig: ${result.gig_id}`);
|
|
392
|
+
console.log(` Submit proof by: ${result.assignment_deadline}`);
|
|
393
|
+
console.log(` Remaining slots: ${result.remaining_slots}`);
|
|
394
|
+
}
|
|
395
|
+
async function handleSubmit(args) {
|
|
396
|
+
if (args._.length < 3) {
|
|
397
|
+
console.error("Usage: moltycash gig submit <gig_id> <proof_url>");
|
|
398
|
+
process.exit(1);
|
|
399
|
+
}
|
|
400
|
+
const gigId = args._[1];
|
|
401
|
+
const proof = args._[2];
|
|
402
|
+
console.log(`\n\ud83d\udce4 Submitting proof for gig ${gigId}...\n`);
|
|
403
|
+
const result = await earnerCall("gig.submit_proof", { gig_id: gigId, proof });
|
|
404
|
+
console.log(`\u2705 Proof submitted!`);
|
|
405
|
+
console.log(` Claim: ${result.claim_id}`);
|
|
406
|
+
console.log(` Status: ${result.status}`);
|
|
407
|
+
if (result.message)
|
|
408
|
+
console.log(` ${result.message}`);
|
|
409
|
+
}
|
|
410
|
+
async function handleMyClaims() {
|
|
411
|
+
console.log("\n\ud83d\udccb Fetching your claims...\n");
|
|
412
|
+
const result = await earnerCall("gig.my_accepted", {});
|
|
413
|
+
const assignments = result.assignments || [];
|
|
414
|
+
if (assignments.length === 0) {
|
|
415
|
+
console.log("No active claims.");
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
console.log(`Found ${assignments.length} claim(s):\n`);
|
|
419
|
+
for (const a of assignments) {
|
|
420
|
+
const icon = a.status === "completed" ? "\u2705"
|
|
421
|
+
: a.status === "approved" ? "\u23f3"
|
|
422
|
+
: a.status === "pending_review" ? "\ud83d\udd0d"
|
|
423
|
+
: a.status === "assigned" ? "\ud83d\udd12"
|
|
424
|
+
: a.status === "rejected" ? "\u274c"
|
|
425
|
+
: a.status === "final_rejected" ? "\u26d4"
|
|
426
|
+
: a.status === "disputed" ? "\u26a0\ufe0f"
|
|
427
|
+
: "\u2022";
|
|
428
|
+
console.log(` ${icon} ${a.claim_id} [${a.status}]`);
|
|
429
|
+
console.log(` Gig: ${a.gig_id} \u2014 ${a.task}`);
|
|
430
|
+
console.log(` ${a.per_post_price} USDC`);
|
|
431
|
+
if (a.message)
|
|
432
|
+
console.log(` ${a.message}`);
|
|
433
|
+
console.log();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
async function handleDisputeEarner(args) {
|
|
437
|
+
if (args._.length < 4) {
|
|
438
|
+
console.error('Usage: moltycash gig dispute <gig_id> <claim_id> "reason"');
|
|
439
|
+
process.exit(1);
|
|
440
|
+
}
|
|
441
|
+
const gigId = args._[1];
|
|
442
|
+
const claimId = args._[2];
|
|
443
|
+
const reason = args._.slice(3).join(" ");
|
|
444
|
+
console.log(`\n\u2696\ufe0f Disputing claim ${claimId} on gig ${gigId}...\n`);
|
|
445
|
+
const result = await earnerCall("gig.earner_dispute", { gig_id: gigId, claim_id: claimId, reason });
|
|
446
|
+
console.log(`\u2705 Dispute resolved!`);
|
|
447
|
+
console.log(` Claim: ${result.claim_id}`);
|
|
448
|
+
console.log(` Status: ${result.status}`);
|
|
449
|
+
if (result.message)
|
|
450
|
+
console.log(` ${result.message}`);
|
|
451
|
+
}
|
|
452
|
+
// ───── Main ─────
|
|
453
|
+
const args = minimist(process.argv.slice(2));
|
|
454
|
+
if (!identityToken) {
|
|
455
|
+
console.error("\u274c Missing MOLTY_IDENTITY_TOKEN environment variable");
|
|
456
|
+
console.error(" All gig commands require an identity token.");
|
|
457
|
+
console.error(" Get yours at: https://molty.cash (Profile > Identity Token)");
|
|
458
|
+
process.exit(1);
|
|
459
|
+
}
|
|
460
|
+
const subcommand = args._[0];
|
|
461
|
+
if (!subcommand) {
|
|
462
|
+
console.error("Usage: moltycash gig <create|my-gigs|get|review|list|pick|submit|my-claims|dispute>");
|
|
463
|
+
process.exit(1);
|
|
464
|
+
}
|
|
465
|
+
async function main() {
|
|
466
|
+
try {
|
|
467
|
+
switch (subcommand) {
|
|
468
|
+
case "create":
|
|
469
|
+
await handleCreate(args);
|
|
470
|
+
break;
|
|
471
|
+
case "my-gigs":
|
|
472
|
+
await handleMyGigs();
|
|
473
|
+
break;
|
|
474
|
+
case "get":
|
|
475
|
+
await handleGet(args);
|
|
476
|
+
break;
|
|
477
|
+
case "review":
|
|
478
|
+
await handleReview(args);
|
|
479
|
+
break;
|
|
480
|
+
case "list":
|
|
481
|
+
await handleList();
|
|
482
|
+
break;
|
|
483
|
+
case "pick":
|
|
484
|
+
await handlePick(args);
|
|
485
|
+
break;
|
|
486
|
+
case "submit":
|
|
487
|
+
await handleSubmit(args);
|
|
488
|
+
break;
|
|
489
|
+
case "my-claims":
|
|
490
|
+
await handleMyClaims();
|
|
491
|
+
break;
|
|
492
|
+
case "dispute":
|
|
493
|
+
await handleDisputeEarner(args);
|
|
494
|
+
break;
|
|
495
|
+
default:
|
|
496
|
+
console.error(`\u274c Unknown subcommand: ${subcommand}`);
|
|
497
|
+
console.error("Available: create, my-gigs, get, review, list, pick, submit, my-claims, dispute");
|
|
498
|
+
process.exit(1);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
const errMsg = error.response?.data?.error?.message || error.response?.data?.msg || error.message;
|
|
503
|
+
console.error(`\u274c ${errMsg || "Command failed"}`);
|
|
504
|
+
if (error.response) {
|
|
505
|
+
console.error(" Status:", error.response.status);
|
|
506
|
+
}
|
|
507
|
+
process.exit(1);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
main();
|
|
511
|
+
//# sourceMappingURL=gig.js.map
|
package/dist/gig.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gig.js","sourceRoot":"","sources":["../gig.ts"],"names":[],"mappings":"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"}
|
package/dist/send.js
CHANGED
|
@@ -2,7 +2,7 @@ import "dotenv/config";
|
|
|
2
2
|
import minimist from "minimist";
|
|
3
3
|
import axios from "axios";
|
|
4
4
|
import { privateKeyToAccount } from "viem/accounts";
|
|
5
|
-
import { x402Client
|
|
5
|
+
import { x402Client } from "@x402/core/client";
|
|
6
6
|
import { registerExactEvmScheme } from "@x402/evm/exact/client";
|
|
7
7
|
import { registerExactSvmScheme } from "@x402/svm/exact/client";
|
|
8
8
|
import { createKeyPairSignerFromBytes } from "@solana/kit";
|
|
@@ -11,6 +11,7 @@ const privateKey = process.env.EVM_PRIVATE_KEY;
|
|
|
11
11
|
const svmPrivateKey = process.env.SVM_PRIVATE_KEY;
|
|
12
12
|
const baseURL = process.env.RESOURCE_SERVER_URL || "https://api.molty.cash";
|
|
13
13
|
const identityToken = process.env.MOLTY_IDENTITY_TOKEN;
|
|
14
|
+
const X402_EXTENSION_URI = "https://github.com/google-a2a/a2a-x402/v0.1";
|
|
14
15
|
/**
|
|
15
16
|
* Parse amount from various formats:
|
|
16
17
|
* - "50¢" -> 0.50
|
|
@@ -125,15 +126,14 @@ else {
|
|
|
125
126
|
}
|
|
126
127
|
}
|
|
127
128
|
async function main() {
|
|
128
|
-
// Create x402
|
|
129
|
-
const
|
|
130
|
-
const client = new x402HTTPClient(baseClient);
|
|
129
|
+
// Create x402 client
|
|
130
|
+
const client = new x402Client();
|
|
131
131
|
if (useSolana) {
|
|
132
132
|
console.log("\n🔧 Creating Solana signer...");
|
|
133
133
|
const privateKeyBytes = bs58.decode(svmPrivateKey);
|
|
134
134
|
const solanaSigner = await createKeyPairSignerFromBytes(privateKeyBytes);
|
|
135
135
|
console.log(`✅ Solana signer created: ${solanaSigner.address}`);
|
|
136
|
-
registerExactSvmScheme(
|
|
136
|
+
registerExactSvmScheme(client, { signer: solanaSigner });
|
|
137
137
|
}
|
|
138
138
|
else {
|
|
139
139
|
console.log("\n🔧 Creating Base signer...");
|
|
@@ -143,7 +143,7 @@ async function main() {
|
|
|
143
143
|
}
|
|
144
144
|
const account = privateKeyToAccount(privateKey);
|
|
145
145
|
console.log(`✅ Base signer created: ${account.address}`);
|
|
146
|
-
registerExactEvmScheme(
|
|
146
|
+
registerExactEvmScheme(client, { signer: account });
|
|
147
147
|
}
|
|
148
148
|
console.log(`\n💸 Sending ${amount} USDC to @${moltyUsername}...`);
|
|
149
149
|
console.log(` API: ${baseURL}/a2a`);
|
|
@@ -154,57 +154,53 @@ async function main() {
|
|
|
154
154
|
console.log();
|
|
155
155
|
const headers = {
|
|
156
156
|
"Content-Type": "application/json",
|
|
157
|
+
"X-A2A-Extensions": X402_EXTENSION_URI,
|
|
157
158
|
...(identityToken && { "X-Molty-Identity-Token": identityToken }),
|
|
158
159
|
};
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
molty: moltyUsername,
|
|
165
|
-
amount,
|
|
166
|
-
description: `Payment via moltycash-cli (${useSolana ? "Solana" : "Base"})`,
|
|
167
|
-
meta: { agent_name: "moltycash-cli" },
|
|
168
|
-
},
|
|
160
|
+
const payParams = {
|
|
161
|
+
molty: moltyUsername,
|
|
162
|
+
amount,
|
|
163
|
+
description: `Payment via moltycash-cli (${useSolana ? "Solana" : "Base"})`,
|
|
164
|
+
meta: { agent_name: "moltycash-cli" },
|
|
169
165
|
};
|
|
170
166
|
try {
|
|
171
|
-
//
|
|
172
|
-
console.log("💳 Requesting payment requirements...");
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
console.log(`✅ ${response.data?.result?.status?.message?.parts?.[0]?.text || "Request completed"}`);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// Extract payment requirements from 402 response
|
|
185
|
-
paymentRequired = client.getPaymentRequiredResponse((name) => response.headers[name.toLowerCase()], response.data);
|
|
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");
|
|
186
177
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
throw error;
|
|
193
|
-
}
|
|
178
|
+
const phase1Result = phase1Response.data.result;
|
|
179
|
+
if (!phase1Result.id) {
|
|
180
|
+
throw new Error("Missing task ID in response");
|
|
194
181
|
}
|
|
195
|
-
|
|
196
|
-
|
|
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...");
|
|
197
188
|
const signedPayment = await client.createPaymentPayload(paymentRequired);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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");
|
|
206
202
|
}
|
|
207
|
-
const result =
|
|
203
|
+
const result = phase2Response.data.result;
|
|
208
204
|
// Extract details from task artifacts
|
|
209
205
|
const artifacts = result.artifacts || [];
|
|
210
206
|
for (const artifact of artifacts) {
|
|
@@ -212,8 +208,8 @@ async function main() {
|
|
|
212
208
|
try {
|
|
213
209
|
const data = JSON.parse(Buffer.from(artifact.data, "base64").toString());
|
|
214
210
|
console.log(`✅ ${data.amount} USDC sent to @${data.molty || moltyUsername}`);
|
|
215
|
-
if (data.
|
|
216
|
-
console.log(`🔗 TXN: ${data.
|
|
211
|
+
if (data.txn_id) {
|
|
212
|
+
console.log(`🔗 TXN: ${data.txn_id}`);
|
|
217
213
|
}
|
|
218
214
|
if (data.network) {
|
|
219
215
|
console.log(`💳 Network: ${data.network}`);
|
|
@@ -221,6 +217,9 @@ async function main() {
|
|
|
221
217
|
if (data.receipt) {
|
|
222
218
|
console.log(`📄 Receipt: ${data.receipt}`);
|
|
223
219
|
}
|
|
220
|
+
if (data.x_handle) {
|
|
221
|
+
console.log(`🐦 X: @${data.x_handle}`);
|
|
222
|
+
}
|
|
224
223
|
return;
|
|
225
224
|
}
|
|
226
225
|
catch {
|
package/dist/send.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../send.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../send.ts"],"names":[],"mappings":"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"}
|