@moonpay/cli 0.2.4 → 0.3.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/index.js +135 -23
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/skills/moonpay-auth/SKILL.md +64 -0
- package/skills/moonpay-buy-crypto/SKILL.md +44 -0
- package/skills/moonpay-check-wallet/SKILL.md +45 -0
- package/skills/moonpay-discover-tokens/SKILL.md +54 -0
- package/skills/moonpay-env/SKILL.md +57 -0
- package/skills/moonpay-portfolio-report/SKILL.md +49 -0
- package/skills/moonpay-rug-check/SKILL.md +59 -0
- package/skills/moonpay-swap-tokens/SKILL.md +73 -0
- package/skills/moonpay-token-brief/SKILL.md +47 -0
- package/skills/moonpay-virtual-account/SKILL.md +173 -0
package/dist/index.js
CHANGED
|
@@ -331,17 +331,17 @@ var require_nacl_fast = __commonJS({
|
|
|
331
331
|
}
|
|
332
332
|
var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
|
|
333
333
|
function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
|
|
334
|
-
var
|
|
334
|
+
var z12 = new Uint8Array(16), x = new Uint8Array(64);
|
|
335
335
|
var u, i;
|
|
336
|
-
for (i = 0; i < 16; i++)
|
|
337
|
-
for (i = 0; i < 8; i++)
|
|
336
|
+
for (i = 0; i < 16; i++) z12[i] = 0;
|
|
337
|
+
for (i = 0; i < 8; i++) z12[i] = n[i];
|
|
338
338
|
while (b >= 64) {
|
|
339
|
-
crypto_core_salsa20(x,
|
|
339
|
+
crypto_core_salsa20(x, z12, k, sigma);
|
|
340
340
|
for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];
|
|
341
341
|
u = 1;
|
|
342
342
|
for (i = 8; i < 16; i++) {
|
|
343
|
-
u = u + (
|
|
344
|
-
|
|
343
|
+
u = u + (z12[i] & 255) | 0;
|
|
344
|
+
z12[i] = u & 255;
|
|
345
345
|
u >>>= 8;
|
|
346
346
|
}
|
|
347
347
|
b -= 64;
|
|
@@ -349,30 +349,30 @@ var require_nacl_fast = __commonJS({
|
|
|
349
349
|
mpos += 64;
|
|
350
350
|
}
|
|
351
351
|
if (b > 0) {
|
|
352
|
-
crypto_core_salsa20(x,
|
|
352
|
+
crypto_core_salsa20(x, z12, k, sigma);
|
|
353
353
|
for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];
|
|
354
354
|
}
|
|
355
355
|
return 0;
|
|
356
356
|
}
|
|
357
357
|
function crypto_stream_salsa20(c, cpos, b, n, k) {
|
|
358
|
-
var
|
|
358
|
+
var z12 = new Uint8Array(16), x = new Uint8Array(64);
|
|
359
359
|
var u, i;
|
|
360
|
-
for (i = 0; i < 16; i++)
|
|
361
|
-
for (i = 0; i < 8; i++)
|
|
360
|
+
for (i = 0; i < 16; i++) z12[i] = 0;
|
|
361
|
+
for (i = 0; i < 8; i++) z12[i] = n[i];
|
|
362
362
|
while (b >= 64) {
|
|
363
|
-
crypto_core_salsa20(x,
|
|
363
|
+
crypto_core_salsa20(x, z12, k, sigma);
|
|
364
364
|
for (i = 0; i < 64; i++) c[cpos + i] = x[i];
|
|
365
365
|
u = 1;
|
|
366
366
|
for (i = 8; i < 16; i++) {
|
|
367
|
-
u = u + (
|
|
368
|
-
|
|
367
|
+
u = u + (z12[i] & 255) | 0;
|
|
368
|
+
z12[i] = u & 255;
|
|
369
369
|
u >>>= 8;
|
|
370
370
|
}
|
|
371
371
|
b -= 64;
|
|
372
372
|
cpos += 64;
|
|
373
373
|
}
|
|
374
374
|
if (b > 0) {
|
|
375
|
-
crypto_core_salsa20(x,
|
|
375
|
+
crypto_core_salsa20(x, z12, k, sigma);
|
|
376
376
|
for (i = 0; i < b; i++) c[cpos + i] = x[i];
|
|
377
377
|
}
|
|
378
378
|
return 0;
|
|
@@ -1252,12 +1252,12 @@ var require_nacl_fast = __commonJS({
|
|
|
1252
1252
|
for (a = 0; a < 16; a++) o[a] = c[a];
|
|
1253
1253
|
}
|
|
1254
1254
|
function crypto_scalarmult(q, n, p) {
|
|
1255
|
-
var
|
|
1255
|
+
var z12 = new Uint8Array(32);
|
|
1256
1256
|
var x = new Float64Array(80), r, i;
|
|
1257
1257
|
var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf();
|
|
1258
|
-
for (i = 0; i < 31; i++)
|
|
1259
|
-
|
|
1260
|
-
|
|
1258
|
+
for (i = 0; i < 31; i++) z12[i] = n[i];
|
|
1259
|
+
z12[31] = n[31] & 127 | 64;
|
|
1260
|
+
z12[0] &= 248;
|
|
1261
1261
|
unpack25519(x, p);
|
|
1262
1262
|
for (i = 0; i < 16; i++) {
|
|
1263
1263
|
b[i] = x[i];
|
|
@@ -1265,7 +1265,7 @@ var require_nacl_fast = __commonJS({
|
|
|
1265
1265
|
}
|
|
1266
1266
|
a[0] = d[0] = 1;
|
|
1267
1267
|
for (i = 254; i >= 0; --i) {
|
|
1268
|
-
r =
|
|
1268
|
+
r = z12[i >>> 3] >>> (i & 7) & 1;
|
|
1269
1269
|
sel25519(a, b, r);
|
|
1270
1270
|
sel25519(c, d, r);
|
|
1271
1271
|
A(e, a, c);
|
|
@@ -2282,7 +2282,7 @@ var CONFIG_PATH = path.join(CONFIG_DIR, "config.json");
|
|
|
2282
2282
|
var CREDENTIALS_PATH = path.join(CONFIG_DIR, "credentials.json");
|
|
2283
2283
|
var LOCK_PATH = path.join(CONFIG_DIR, ".credentials.lock");
|
|
2284
2284
|
var CALLBACK_PORT = 3847;
|
|
2285
|
-
var CALLBACK_URL = `http://
|
|
2285
|
+
var CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;
|
|
2286
2286
|
var DEFAULT_CONFIG = {
|
|
2287
2287
|
baseUrl: "https://agents.moonpay.com",
|
|
2288
2288
|
clientId: "mooniq_zin3s5jz3olzkdfxpmbeaogv"
|
|
@@ -2423,7 +2423,7 @@ async function login(config) {
|
|
|
2423
2423
|
} else if (code2) {
|
|
2424
2424
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
2425
2425
|
res.end(
|
|
2426
|
-
`<!DOCTYPE html><html><head><meta charset="utf-8"><title>MoonPay Agents</title></head><body style="font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa"><img src="https://agents.moonpay.com/
|
|
2426
|
+
`<!DOCTYPE html><html><head><meta charset="utf-8"><title>MoonPay Agents</title></head><body style="font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa"><img src="https://agents.moonpay.com/logos/moonpay.jpg" alt="MoonPay" style="width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem" /><h1 style="margin:0 0 0.5rem;font-size:1.5rem;font-weight:600">Your agent has money now.</h1><p style="color:#a1a1aa;margin:0;font-size:1rem">You can close this tab and return to the terminal.</p></body></html>`
|
|
2427
2427
|
);
|
|
2428
2428
|
resolveCallback(code2);
|
|
2429
2429
|
} else {
|
|
@@ -4310,6 +4310,115 @@ var messageSign = createTool(messageSignSchema, async (params) => {
|
|
|
4310
4310
|
return { signature: bs584.encode(signatureBytes) };
|
|
4311
4311
|
});
|
|
4312
4312
|
|
|
4313
|
+
// src/tools/skill/server.ts
|
|
4314
|
+
import { readdirSync as readdirSync3, readFileSync as readFileSync5, existsSync as existsSync3, mkdirSync as mkdirSync4, cpSync } from "fs";
|
|
4315
|
+
import { join as join5, dirname } from "path";
|
|
4316
|
+
import { homedir as homedir4 } from "os";
|
|
4317
|
+
import { fileURLToPath } from "url";
|
|
4318
|
+
function getSkillsDir() {
|
|
4319
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
4320
|
+
const distDir = dirname(__filename);
|
|
4321
|
+
return join5(distDir, "..", "skills");
|
|
4322
|
+
}
|
|
4323
|
+
function getClaudeSkillsDir() {
|
|
4324
|
+
return join5(homedir4(), ".claude", "skills");
|
|
4325
|
+
}
|
|
4326
|
+
function listBundledSkills() {
|
|
4327
|
+
const dir = getSkillsDir();
|
|
4328
|
+
if (!existsSync3(dir)) return [];
|
|
4329
|
+
return readdirSync3(dir, { withFileTypes: true }).filter((e) => e.isDirectory() && e.name.startsWith("moonpay-")).map((e) => {
|
|
4330
|
+
const md = readFileSync5(join5(dir, e.name, "SKILL.md"), "utf-8");
|
|
4331
|
+
const descMatch = md.match(/^description:\s*(.+)$/m);
|
|
4332
|
+
return {
|
|
4333
|
+
name: e.name,
|
|
4334
|
+
description: descMatch?.[1]?.replace(/^["']|["']$/g, "") ?? ""
|
|
4335
|
+
};
|
|
4336
|
+
}).sort((a, b) => a.name.localeCompare(b.name));
|
|
4337
|
+
}
|
|
4338
|
+
function readSkill(name) {
|
|
4339
|
+
const skillPath = join5(getSkillsDir(), name, "SKILL.md");
|
|
4340
|
+
if (!existsSync3(skillPath)) {
|
|
4341
|
+
throw new Error(`Skill "${name}" not found. Run \`mp skill list\` to see available skills.`);
|
|
4342
|
+
}
|
|
4343
|
+
return readFileSync5(skillPath, "utf-8");
|
|
4344
|
+
}
|
|
4345
|
+
function installSkills(force) {
|
|
4346
|
+
const srcDir = getSkillsDir();
|
|
4347
|
+
const destDir = getClaudeSkillsDir();
|
|
4348
|
+
const skills = listBundledSkills();
|
|
4349
|
+
mkdirSync4(destDir, { recursive: true });
|
|
4350
|
+
return skills.map((s) => {
|
|
4351
|
+
const dest = join5(destDir, s.name);
|
|
4352
|
+
if (existsSync3(dest) && !force) {
|
|
4353
|
+
return { name: s.name, installed: false };
|
|
4354
|
+
}
|
|
4355
|
+
cpSync(join5(srcDir, s.name), dest, { recursive: true, force: true });
|
|
4356
|
+
return { name: s.name, installed: true };
|
|
4357
|
+
});
|
|
4358
|
+
}
|
|
4359
|
+
|
|
4360
|
+
// src/tools/skill/list/schema.ts
|
|
4361
|
+
import { z as z9 } from "zod";
|
|
4362
|
+
var skillListSchema = defineToolSchema({
|
|
4363
|
+
name: "skill_list",
|
|
4364
|
+
description: "List available AI skills for Claude Code and other agents",
|
|
4365
|
+
input: z9.object({}),
|
|
4366
|
+
output: z9.array(
|
|
4367
|
+
z9.object({
|
|
4368
|
+
name: z9.string(),
|
|
4369
|
+
description: z9.string()
|
|
4370
|
+
})
|
|
4371
|
+
)
|
|
4372
|
+
});
|
|
4373
|
+
|
|
4374
|
+
// src/tools/skill/list/tool.ts
|
|
4375
|
+
var skillList = createTool(skillListSchema, async () => {
|
|
4376
|
+
return listBundledSkills();
|
|
4377
|
+
});
|
|
4378
|
+
|
|
4379
|
+
// src/tools/skill/retrieve/schema.ts
|
|
4380
|
+
import { z as z10 } from "zod";
|
|
4381
|
+
var skillRetrieveSchema = defineToolSchema({
|
|
4382
|
+
name: "skill_retrieve",
|
|
4383
|
+
description: "Get the full instructions for a specific skill",
|
|
4384
|
+
input: z10.object({
|
|
4385
|
+
name: z10.string().describe("Skill name (e.g. moonpay-swap-tokens)")
|
|
4386
|
+
}),
|
|
4387
|
+
output: z10.object({
|
|
4388
|
+
name: z10.string(),
|
|
4389
|
+
content: z10.string()
|
|
4390
|
+
})
|
|
4391
|
+
});
|
|
4392
|
+
|
|
4393
|
+
// src/tools/skill/retrieve/tool.ts
|
|
4394
|
+
var skillRetrieve = createTool(skillRetrieveSchema, async (params) => {
|
|
4395
|
+
return {
|
|
4396
|
+
name: params.name,
|
|
4397
|
+
content: readSkill(params.name)
|
|
4398
|
+
};
|
|
4399
|
+
});
|
|
4400
|
+
|
|
4401
|
+
// src/tools/skill/install/schema.ts
|
|
4402
|
+
import { z as z11 } from "zod";
|
|
4403
|
+
var skillInstallSchema = defineToolSchema({
|
|
4404
|
+
name: "skill_install",
|
|
4405
|
+
description: "Install AI skills to ~/.claude/skills/ for Claude Code",
|
|
4406
|
+
input: z11.object({
|
|
4407
|
+
force: z11.boolean().describe("Overwrite existing skills")
|
|
4408
|
+
}),
|
|
4409
|
+
output: z11.array(
|
|
4410
|
+
z11.object({
|
|
4411
|
+
name: z11.string(),
|
|
4412
|
+
installed: z11.boolean()
|
|
4413
|
+
})
|
|
4414
|
+
)
|
|
4415
|
+
});
|
|
4416
|
+
|
|
4417
|
+
// src/tools/skill/install/tool.ts
|
|
4418
|
+
var skillInstall = createTool(skillInstallSchema, async (params) => {
|
|
4419
|
+
return installSkills(params.force);
|
|
4420
|
+
});
|
|
4421
|
+
|
|
4313
4422
|
// src/index.ts
|
|
4314
4423
|
var LOCAL_TOOLS = [
|
|
4315
4424
|
walletCreate,
|
|
@@ -4318,14 +4427,17 @@ var LOCAL_TOOLS = [
|
|
|
4318
4427
|
walletRetrieve,
|
|
4319
4428
|
walletDelete,
|
|
4320
4429
|
transactionSign,
|
|
4321
|
-
messageSign
|
|
4430
|
+
messageSign,
|
|
4431
|
+
skillList,
|
|
4432
|
+
skillRetrieve,
|
|
4433
|
+
skillInstall
|
|
4322
4434
|
];
|
|
4323
4435
|
var require2 = createRequire(import.meta.url);
|
|
4324
4436
|
var { version } = require2("../package.json");
|
|
4325
4437
|
var getUpdateNotice = startVersionCheck(version);
|
|
4326
4438
|
var DEFAULT_BASE_URL = "https://agents.moonpay.com";
|
|
4327
4439
|
var program = new Command();
|
|
4328
|
-
program.name("moonpay").description("MoonPay CLI \u2014 non-custodial crypto tools").version(version).option("-f, --format <type>", "Output format: json, compact, or table", "json");
|
|
4440
|
+
program.name("moonpay").description("MoonPay CLI \u2014 non-custodial crypto tools\n\n Run `mp skill install` to install AI skills for Claude Code.").version(version).option("-f, --format <type>", "Output format: json, compact, or table", "json");
|
|
4329
4441
|
function getFormat() {
|
|
4330
4442
|
const fmt = program.opts().format;
|
|
4331
4443
|
if (fmt === "json" || fmt === "compact" || fmt === "table") return fmt;
|