moltycash 7.0.0 → 8.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 CHANGED
@@ -27,8 +27,10 @@ function showHelp() {
27
27
  USDC payments, hiring, and gigs via molty.cash API
28
28
 
29
29
  COMMANDS:
30
- human <tip|hire>
31
- gig <subcommand>
30
+ human <tip|hire>
31
+ gig <subcommand>
32
+ session <create|status>
33
+ reward <balance|claim>
32
34
 
33
35
  HUMAN SUBCOMMANDS:
34
36
  human tip <username> <amount> [--network <base|solana|stellar|tempo|monad|worldchain|skale>]
@@ -50,6 +52,14 @@ HUMAN TIP EXAMPLES:
50
52
  moltycash human tip 0xmesuthere 50¢
51
53
  moltycash human tip 0xmesuthere 100¢ --network solana
52
54
 
55
+ SESSION SUBCOMMANDS (1¢ x402 mints a 24h wallet session token):
56
+ session create Pay 1¢ to mint a session token (cached locally)
57
+ session status Show cached session for current wallet
58
+
59
+ REWARD SUBCOMMANDS (require an active session):
60
+ reward balance Show $moltycash balance + tier info
61
+ reward claim --destination <0x...> Claim all $moltycash to a Base EVM address
62
+
53
63
  HUMAN HIRE EXAMPLES:
54
64
  moltycash human hire 0xmesuthere "Write an X Article about molty.cash"
55
65
  moltycash human hire 0xmesuthere "Make a TikTok" --service tiktok_paid_promotion
@@ -120,6 +130,14 @@ function main() {
120
130
  const commandArgs = args.slice(1);
121
131
  runCommand("gig.js", commandArgs);
122
132
  }
133
+ else if (command === "session") {
134
+ const commandArgs = args.slice(1);
135
+ runCommand("session.js", commandArgs);
136
+ }
137
+ else if (command === "reward") {
138
+ const commandArgs = args.slice(1);
139
+ runCommand("reward.js", commandArgs);
140
+ }
123
141
  else {
124
142
  console.error(`\n❌ Unknown command: ${command}\n`);
125
143
  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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface SessionEntry {
2
+ session_token: string;
3
+ session_wallet: string;
4
+ session_expires_at: number;
5
+ }
6
+ export declare function readCachedSession(walletAddress: string): SessionEntry | null;
7
+ export declare function writeCachedSession(entry: SessionEntry): void;
8
+ export declare function clearCachedSession(walletAddress: string): void;
9
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../lib/session.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,YAAY;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAoBD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAS5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAI5D;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAI9D"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Wallet session token cache + helpers for the moltycash CLI.
3
+ *
4
+ * The session token is a 24h credential proving wallet ownership. Used by
5
+ * payer-side A2A methods that previously required MOLTY_IDENTITY_TOKEN:
6
+ * gig get / created / review, reward balance / claim
7
+ *
8
+ * Cache file: ~/.config/moltycash/session.json (keyed by wallet address so
9
+ * different wallets keep distinct tokens).
10
+ *
11
+ * Issuance: this CLI calls session.create on the molty.cash A2A endpoint,
12
+ * which costs 1¢ x402. Or any tip/hire/gig.create paid by the same wallet
13
+ * will return a session token piggy-backed onto its response — captured by
14
+ * the human.ts / gig.ts handlers and persisted via writeCachedSession.
15
+ */
16
+ import { homedir } from 'os';
17
+ import { join } from 'path';
18
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
19
+ const CACHE_DIR = join(homedir(), '.config', 'moltycash');
20
+ const CACHE_FILE = join(CACHE_DIR, 'session.json');
21
+ function readCache() {
22
+ try {
23
+ if (!existsSync(CACHE_FILE))
24
+ return {};
25
+ const raw = readFileSync(CACHE_FILE, 'utf-8');
26
+ const parsed = JSON.parse(raw);
27
+ return typeof parsed === 'object' && parsed ? parsed : {};
28
+ }
29
+ catch {
30
+ return {};
31
+ }
32
+ }
33
+ function writeCache(cache) {
34
+ if (!existsSync(CACHE_DIR))
35
+ mkdirSync(CACHE_DIR, { recursive: true });
36
+ writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2), { mode: 0o600 });
37
+ }
38
+ export function readCachedSession(walletAddress) {
39
+ const key = walletAddress.toLowerCase();
40
+ const cache = readCache();
41
+ const entry = cache[key];
42
+ if (!entry)
43
+ return null;
44
+ // Treat as expired if within 60s of exp — give the caller margin to use it.
45
+ const nowSec = Math.floor(Date.now() / 1000);
46
+ if (entry.session_expires_at - 60 <= nowSec)
47
+ return null;
48
+ return entry;
49
+ }
50
+ export function writeCachedSession(entry) {
51
+ const cache = readCache();
52
+ cache[entry.session_wallet.toLowerCase()] = entry;
53
+ writeCache(cache);
54
+ }
55
+ export function clearCachedSession(walletAddress) {
56
+ const cache = readCache();
57
+ delete cache[walletAddress.toLowerCase()];
58
+ writeCache(cache);
59
+ }
60
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../lib/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAUnD,SAAS,SAAS;IACd,IAAI,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAY;IAC5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACnD,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,4EAA4E;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,kBAAkB,GAAG,EAAE,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IAClD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;IAClD,UAAU,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACpD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "dotenv/config";
2
+ //# sourceMappingURL=reward.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward.d.ts","sourceRoot":"","sources":["../reward.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
package/dist/reward.js ADDED
@@ -0,0 +1,108 @@
1
+ import "dotenv/config";
2
+ import minimist from "minimist";
3
+ import axios from "axios";
4
+ import { privateKeyToAccount } from "viem/accounts";
5
+ import { readCachedSession } from "./lib/session.js";
6
+ const privateKey = process.env.EVM_PRIVATE_KEY;
7
+ const baseURL = process.env.RESOURCE_SERVER_URL || "https://api.molty.cash";
8
+ let rpcIdCounter = 1;
9
+ function getSessionTokenOrDie() {
10
+ if (!privateKey || !privateKey.startsWith("0x")) {
11
+ console.error("❌ EVM_PRIVATE_KEY required (the wallet that owns the session)");
12
+ process.exit(1);
13
+ }
14
+ const account = privateKeyToAccount(privateKey);
15
+ const cached = readCachedSession(account.address);
16
+ if (!cached) {
17
+ console.error(`❌ No active session for ${account.address}.`);
18
+ console.error(` Run: npx moltycash session create (pays 1¢ to mint a 24h session token)`);
19
+ process.exit(1);
20
+ }
21
+ return { token: cached.session_token, wallet: cached.session_wallet };
22
+ }
23
+ async function a2aCall(method, params, sessionToken) {
24
+ const response = await axios.post(`${baseURL}/a2a`, {
25
+ jsonrpc: "2.0",
26
+ id: rpcIdCounter++,
27
+ method,
28
+ params,
29
+ }, {
30
+ headers: {
31
+ "Content-Type": "application/json",
32
+ "X-Molty-Session-Token": sessionToken,
33
+ },
34
+ });
35
+ if (response.data.error) {
36
+ const err = response.data.error;
37
+ const e = new Error(err.message || "A2A request failed");
38
+ e.code = err.code;
39
+ e.data = err.data;
40
+ throw e;
41
+ }
42
+ return response.data.result;
43
+ }
44
+ async function handleBalance() {
45
+ const { token, wallet } = getSessionTokenOrDie();
46
+ console.log(`🔍 Reading reward balance for ${wallet}...`);
47
+ const result = await a2aCall("reward.balance", {}, token);
48
+ console.log("");
49
+ console.log(`Molty wallet: ${result.molty_wallet || '(no wallet yet)'}`);
50
+ console.log(`$moltycash balance: ${(result.balance_tokens || 0).toLocaleString()}`);
51
+ if (result.balance_usd > 0) {
52
+ const u = result.balance_usd;
53
+ console.log(`USD value (≈): ${u >= 0.01 ? `$${u.toFixed(2)}` : '< $0.01'}`);
54
+ }
55
+ console.log(`Current tier: index ${result.current_tier_index ?? '-'} (rate ${((result.current_rate ?? 0) * 100).toFixed(0)}%)`);
56
+ if (result.next_tier_min_tokens) {
57
+ console.log(`Next tier at: ${result.next_tier_min_tokens.toLocaleString()} tokens (rate ${(result.next_tier_rate * 100).toFixed(0)}%)`);
58
+ }
59
+ console.log(`Claim threshold: ${result.claim_threshold_tokens.toLocaleString()} tokens OR $${result.claim_threshold_usd.toLocaleString()} USD`);
60
+ console.log(`Claimable now: ${result.claimable ? 'YES' : 'no — below threshold'}`);
61
+ if (result.rewards_paused)
62
+ console.log(`⚠️ Rewards are currently paused.`);
63
+ }
64
+ async function handleClaim(args) {
65
+ const destination = args.destination || args.to;
66
+ if (!destination || typeof destination !== 'string' || !/^0x[a-fA-F0-9]{40}$/.test(destination)) {
67
+ console.error("❌ --destination <0x...> is required (Base EVM address that receives the $moltycash)");
68
+ process.exit(1);
69
+ }
70
+ const { token, wallet } = getSessionTokenOrDie();
71
+ console.log(`🎁 Claiming $moltycash for ${wallet} → ${destination}...`);
72
+ const result = await a2aCall("reward.claim", { destination }, token);
73
+ console.log("");
74
+ console.log(`✅ Claimed ${result.claimed_tokens.toLocaleString()} $moltycash`);
75
+ console.log(` Destination: ${result.destination}`);
76
+ console.log(` Tx: ${result.tx_hash}`);
77
+ console.log(` Explorer: https://basescan.org/tx/${result.tx_hash}`);
78
+ }
79
+ const args = minimist(process.argv.slice(2));
80
+ const subcommand = args._[0];
81
+ async function main() {
82
+ try {
83
+ switch (subcommand) {
84
+ case "balance":
85
+ await handleBalance();
86
+ break;
87
+ case "claim":
88
+ await handleClaim(args);
89
+ break;
90
+ default:
91
+ console.error("Usage:");
92
+ console.error(" moltycash reward balance");
93
+ console.error(" moltycash reward claim --destination <0x...>");
94
+ console.error("");
95
+ console.error("Both commands require an active session — run `moltycash session create` first if you don't have one.");
96
+ process.exit(1);
97
+ }
98
+ }
99
+ catch (err) {
100
+ const msg = err.response?.data?.error?.message || err.message;
101
+ console.error(`❌ ${msg || "Reward command failed"}`);
102
+ if (err.data)
103
+ console.error(` data: ${JSON.stringify(err.data)}`);
104
+ process.exit(1);
105
+ }
106
+ }
107
+ main();
108
+ //# sourceMappingURL=reward.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward.js","sourceRoot":"","sources":["../reward.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "dotenv/config";
2
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../session.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
@@ -0,0 +1,109 @@
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 { writeCachedSession, readCachedSession } from "./lib/session.js";
8
+ const privateKey = process.env.EVM_PRIVATE_KEY;
9
+ const baseURL = process.env.RESOURCE_SERVER_URL || "https://api.molty.cash";
10
+ const X402_EXTENSION_URI = "https://github.com/google-a2a/a2a-x402/v0.1";
11
+ let rpcIdCounter = 1;
12
+ async function a2aCall(method, params) {
13
+ const response = await axios.post(`${baseURL}/a2a`, {
14
+ jsonrpc: "2.0",
15
+ id: rpcIdCounter++,
16
+ method,
17
+ params,
18
+ }, {
19
+ headers: {
20
+ "Content-Type": "application/json",
21
+ "X-A2A-Extensions": X402_EXTENSION_URI,
22
+ },
23
+ });
24
+ if (response.data.error)
25
+ throw new Error(response.data.error.message || "A2A request failed");
26
+ return response.data.result;
27
+ }
28
+ async function handleSessionCreate() {
29
+ if (!privateKey || !privateKey.startsWith("0x")) {
30
+ console.error("❌ EVM_PRIVATE_KEY required (Base wallet 0x...)");
31
+ process.exit(1);
32
+ }
33
+ const account = privateKeyToAccount(privateKey);
34
+ console.log(`🔧 Wallet: ${account.address}`);
35
+ const client = new x402Client();
36
+ registerExactEvmScheme(client, { signer: account });
37
+ console.log("💳 Phase 1: requesting 1¢ auth payment challenge...");
38
+ const phase1 = await a2aCall("session.create", {});
39
+ if (!phase1.id)
40
+ throw new Error("Missing task ID in Phase 1 response");
41
+ const paymentRequired = phase1.status?.message?.metadata?.["x402.payment.required"];
42
+ if (!paymentRequired)
43
+ throw new Error("No payment requirements found");
44
+ console.log("🔐 Phase 2: signing 1¢ payment + submitting...");
45
+ const signedPayment = await client.createPaymentPayload(paymentRequired);
46
+ const phase2 = await a2aCall("session.create", {
47
+ taskId: phase1.id,
48
+ payment: signedPayment,
49
+ });
50
+ // Extract session_token from task artifacts
51
+ const artifacts = phase2.artifacts || [];
52
+ let issued = null;
53
+ for (const a of artifacts) {
54
+ if (a.data) {
55
+ try {
56
+ const parsed = JSON.parse(Buffer.from(a.data, "base64").toString());
57
+ if (parsed.session_token) {
58
+ issued = parsed;
59
+ break;
60
+ }
61
+ }
62
+ catch { /* ignore */ }
63
+ }
64
+ }
65
+ if (!issued)
66
+ throw new Error("session_token not found in Phase 2 artifacts");
67
+ writeCachedSession(issued);
68
+ const expiresIn = Math.max(0, issued.session_expires_at - Math.floor(Date.now() / 1000));
69
+ console.log(`✅ Session token cached for wallet ${issued.session_wallet}`);
70
+ console.log(` Expires in ${Math.floor(expiresIn / 3600)}h ${Math.floor((expiresIn % 3600) / 60)}m`);
71
+ }
72
+ const args = minimist(process.argv.slice(2));
73
+ const subcommand = args._[0];
74
+ async function main() {
75
+ try {
76
+ switch (subcommand) {
77
+ case "create":
78
+ await handleSessionCreate();
79
+ break;
80
+ case "status": {
81
+ if (!privateKey) {
82
+ console.error("❌ EVM_PRIVATE_KEY required");
83
+ process.exit(1);
84
+ }
85
+ const account = privateKeyToAccount(privateKey);
86
+ const cached = readCachedSession(account.address);
87
+ if (!cached) {
88
+ console.log(`No active session for ${account.address}. Run: moltycash session create`);
89
+ }
90
+ else {
91
+ const expiresIn = Math.max(0, cached.session_expires_at - Math.floor(Date.now() / 1000));
92
+ console.log(`Wallet: ${cached.session_wallet}`);
93
+ console.log(`Expires in ${Math.floor(expiresIn / 3600)}h ${Math.floor((expiresIn % 3600) / 60)}m`);
94
+ }
95
+ break;
96
+ }
97
+ default:
98
+ console.error("Usage: moltycash session <create|status>");
99
+ process.exit(1);
100
+ }
101
+ }
102
+ catch (err) {
103
+ const msg = err.response?.data?.error?.message || err.message;
104
+ console.error(`❌ ${msg || "Session command failed"}`);
105
+ process.exit(1);
106
+ }
107
+ }
108
+ main();
109
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moltycash",
3
- "version": "7.0.0",
3
+ "version": "8.0.0",
4
4
  "description": "CLI tool for sending USDC payments and managing gigs via molty.cash using x402 and MPP protocols",
5
5
  "type": "module",
6
6
  "bin": {