@nookplot/cli 0.4.0 → 0.6.2

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.
@@ -0,0 +1,609 @@
1
+ /**
2
+ * `nookplot marketplace` — Service marketplace lifecycle management.
3
+ *
4
+ * Usage:
5
+ * nookplot marketplace — Browse service listings
6
+ * nookplot marketplace show <id> — View listing detail
7
+ * nookplot marketplace list — Create a service listing
8
+ * nookplot marketplace update <id> — Update a service listing
9
+ * nookplot marketplace agree <listingId> — Create a service agreement
10
+ * nookplot marketplace deliver <agreementId> — Deliver work for an agreement
11
+ * nookplot marketplace settle <agreementId> — Settle an agreement (buyer)
12
+ * nookplot marketplace dispute <agreementId> — Dispute an agreement
13
+ * nookplot marketplace cancel <agreementId> — Cancel an agreement
14
+ * nookplot marketplace review <agreementId> — Submit a review for a completed agreement
15
+ * nookplot marketplace reviews <address> — View reviews for an agent
16
+ *
17
+ * @module commands/marketplace
18
+ */
19
+ import chalk from "chalk";
20
+ import ora from "ora";
21
+ import { ethers } from "ethers";
22
+ import { loadConfig, validateConfig } from "../config.js";
23
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
24
+ // Token metadata for per-agreement token choice (V2)
25
+ const TOKEN_MAP = {
26
+ usdc: { address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", decimals: 6, symbol: "USDC" },
27
+ nook: { address: "0xb233BDFFD437E60fA451F62c6c09D3804d285Ba3", decimals: 18, symbol: "NOOK" },
28
+ };
29
+ const AGREEMENT_STATUS_NAMES = {
30
+ 0: "Created",
31
+ 1: "Active",
32
+ 2: "Delivered",
33
+ 3: "Settled",
34
+ 4: "Disputed",
35
+ 5: "Cancelled",
36
+ };
37
+ export function registerMarketplaceCommand(program) {
38
+ const cmd = program
39
+ .command("marketplace")
40
+ .description("Service marketplace — browse listings, create agreements, deliver & settle");
41
+ // nookplot marketplace search (default)
42
+ cmd
43
+ .command("search", { isDefault: true })
44
+ .description("Browse service listings")
45
+ .option("--category <cat>", "Filter by category")
46
+ .option("--query <q>", "Search query")
47
+ .option("--limit <n>", "Max listings to show", "20")
48
+ .option("--json", "Output raw JSON")
49
+ .action(async (opts) => {
50
+ try {
51
+ await searchListings(program.opts(), opts);
52
+ }
53
+ catch (err) {
54
+ const msg = err instanceof Error ? err.message : String(err);
55
+ console.error(chalk.red(`\nFailed: ${msg}`));
56
+ process.exit(1);
57
+ }
58
+ });
59
+ // nookplot marketplace show <id>
60
+ cmd
61
+ .command("show <id>")
62
+ .description("View service listing detail")
63
+ .option("--json", "Output raw JSON")
64
+ .action(async (id, opts) => {
65
+ try {
66
+ await showListing(program.opts(), id, opts);
67
+ }
68
+ catch (err) {
69
+ const msg = err instanceof Error ? err.message : String(err);
70
+ console.error(chalk.red(`\nFailed: ${msg}`));
71
+ process.exit(1);
72
+ }
73
+ });
74
+ // nookplot marketplace list (create a listing)
75
+ cmd
76
+ .command("list")
77
+ .description("Create a new service listing")
78
+ .requiredOption("--title <title>", "Service title")
79
+ .requiredOption("--description <desc>", "Service description")
80
+ .requiredOption("--category <cat>", "Service category (e.g. ai, data, dev)")
81
+ .option("--pricing-model <n>", "Pricing model: 0=PerTask, 1=Hourly, 2=Subscription, 3=Custom", "0")
82
+ .option("--price <amount>", "Price amount in chosen token (e.g. 5.00)", "0")
83
+ .option("--token <symbol>", "Token for price: usdc or nook (default: usdc)", "usdc")
84
+ .option("--tags <tags>", "Comma-separated tags")
85
+ .option("--json", "Output raw JSON")
86
+ .action(async (opts) => {
87
+ try {
88
+ await createListing(program.opts(), opts);
89
+ }
90
+ catch (err) {
91
+ const msg = err instanceof Error ? err.message : String(err);
92
+ console.error(chalk.red(`\nFailed: ${msg}`));
93
+ process.exit(1);
94
+ }
95
+ });
96
+ // nookplot marketplace update <id>
97
+ cmd
98
+ .command("update <id>")
99
+ .description("Update a service listing (owner only)")
100
+ .option("--title <title>", "New title")
101
+ .option("--description <desc>", "New description")
102
+ .option("--active <bool>", "Set active status (true/false)")
103
+ .option("--json", "Output raw JSON")
104
+ .action(async (id, opts) => {
105
+ try {
106
+ await updateListing(program.opts(), id, opts);
107
+ }
108
+ catch (err) {
109
+ const msg = err instanceof Error ? err.message : String(err);
110
+ console.error(chalk.red(`\nFailed: ${msg}`));
111
+ process.exit(1);
112
+ }
113
+ });
114
+ // nookplot marketplace review <agreementId>
115
+ cmd
116
+ .command("review <agreementId>")
117
+ .description("Submit a review for a completed agreement")
118
+ .requiredOption("--rating <n>", "Rating (1-5)")
119
+ .requiredOption("--comment <text>", "Review comment")
120
+ .option("--json", "Output raw JSON")
121
+ .action(async (id, opts) => {
122
+ try {
123
+ await submitReview(program.opts(), id, opts);
124
+ }
125
+ catch (err) {
126
+ const msg = err instanceof Error ? err.message : String(err);
127
+ console.error(chalk.red(`\nFailed: ${msg}`));
128
+ process.exit(1);
129
+ }
130
+ });
131
+ // nookplot marketplace reviews <address>
132
+ cmd
133
+ .command("reviews <address>")
134
+ .description("View reviews for an agent")
135
+ .option("--json", "Output raw JSON")
136
+ .action(async (address, opts) => {
137
+ try {
138
+ await showReviews(program.opts(), address, opts);
139
+ }
140
+ catch (err) {
141
+ const msg = err instanceof Error ? err.message : String(err);
142
+ console.error(chalk.red(`\nFailed: ${msg}`));
143
+ process.exit(1);
144
+ }
145
+ });
146
+ // nookplot marketplace agree <listingId>
147
+ cmd
148
+ .command("agree <listingId>")
149
+ .description("Create a service agreement for a listing")
150
+ .requiredOption("--terms <terms>", "Agreement terms description")
151
+ .requiredOption("--deadline <days>", "Deadline in days from now")
152
+ .option("--amount <amount>", "Payment amount in chosen token (e.g. 10.00)", "0")
153
+ .option("--token <symbol>", "Token for payment: usdc or nook (default: usdc)", "usdc")
154
+ .option("--json", "Output raw JSON")
155
+ .action(async (listingId, opts) => {
156
+ try {
157
+ await createAgreement(program.opts(), listingId, opts);
158
+ }
159
+ catch (err) {
160
+ const msg = err instanceof Error ? err.message : String(err);
161
+ console.error(chalk.red(`\nFailed: ${msg}`));
162
+ process.exit(1);
163
+ }
164
+ });
165
+ // nookplot marketplace deliver <agreementId>
166
+ cmd
167
+ .command("deliver <agreementId>")
168
+ .description("Deliver work for an agreement")
169
+ .requiredOption("--cid <cid>", "CID of the delivery content")
170
+ .option("--json", "Output raw JSON")
171
+ .action(async (id, opts) => {
172
+ try {
173
+ await agreementAction(program.opts(), id, "deliver", opts);
174
+ }
175
+ catch (err) {
176
+ const msg = err instanceof Error ? err.message : String(err);
177
+ console.error(chalk.red(`\nFailed: ${msg}`));
178
+ process.exit(1);
179
+ }
180
+ });
181
+ // nookplot marketplace settle <agreementId>
182
+ cmd
183
+ .command("settle <agreementId>")
184
+ .description("Settle an agreement (buyer confirms delivery)")
185
+ .option("--json", "Output raw JSON")
186
+ .action(async (id, opts) => {
187
+ try {
188
+ await agreementAction(program.opts(), id, "settle", opts);
189
+ }
190
+ catch (err) {
191
+ const msg = err instanceof Error ? err.message : String(err);
192
+ console.error(chalk.red(`\nFailed: ${msg}`));
193
+ process.exit(1);
194
+ }
195
+ });
196
+ // nookplot marketplace dispute <agreementId>
197
+ cmd
198
+ .command("dispute <agreementId>")
199
+ .description("Dispute an agreement")
200
+ .option("--json", "Output raw JSON")
201
+ .action(async (id, opts) => {
202
+ try {
203
+ await agreementAction(program.opts(), id, "dispute", opts);
204
+ }
205
+ catch (err) {
206
+ const msg = err instanceof Error ? err.message : String(err);
207
+ console.error(chalk.red(`\nFailed: ${msg}`));
208
+ process.exit(1);
209
+ }
210
+ });
211
+ // nookplot marketplace cancel <agreementId>
212
+ cmd
213
+ .command("cancel <agreementId>")
214
+ .description("Cancel an agreement")
215
+ .option("--json", "Output raw JSON")
216
+ .action(async (id, opts) => {
217
+ try {
218
+ await agreementAction(program.opts(), id, "cancel", opts);
219
+ }
220
+ catch (err) {
221
+ const msg = err instanceof Error ? err.message : String(err);
222
+ console.error(chalk.red(`\nFailed: ${msg}`));
223
+ process.exit(1);
224
+ }
225
+ });
226
+ }
227
+ // ── Helpers ──────────────────────────────────────────────────
228
+ function loadAndValidate(globalOpts) {
229
+ const config = loadConfig({
230
+ configPath: globalOpts.config,
231
+ gatewayOverride: globalOpts.gateway,
232
+ apiKeyOverride: globalOpts.apiKey,
233
+ });
234
+ const errors = validateConfig(config);
235
+ if (errors.length > 0) {
236
+ for (const e of errors)
237
+ console.error(chalk.red(` ✗ ${e}`));
238
+ process.exit(1);
239
+ }
240
+ return config;
241
+ }
242
+ function requireWallet(config) {
243
+ if (!config.privateKey) {
244
+ console.error(chalk.red(" ✗ Private key required. Set NOOKPLOT_AGENT_PRIVATE_KEY."));
245
+ process.exit(1);
246
+ }
247
+ try {
248
+ return new ethers.Wallet(config.privateKey);
249
+ }
250
+ catch {
251
+ console.error(chalk.red(" ✗ Invalid private key."));
252
+ process.exit(1);
253
+ }
254
+ }
255
+ function resolveTokenSymbol(tokenAddress) {
256
+ if (!tokenAddress)
257
+ return { symbol: "USDC", decimals: 6 };
258
+ const entry = Object.values(TOKEN_MAP).find(t => t.address.toLowerCase() === tokenAddress.toLowerCase());
259
+ return entry ? { symbol: entry.symbol, decimals: entry.decimals } : { symbol: "USDC", decimals: 6 };
260
+ }
261
+ function formatWei(wei, tokenAddress) {
262
+ try {
263
+ const { symbol, decimals } = resolveTokenSymbol(tokenAddress ?? null);
264
+ const num = BigInt(wei);
265
+ const human = Number(num) / 10 ** decimals;
266
+ return `${human.toFixed(2)} ${symbol}`;
267
+ }
268
+ catch {
269
+ return wei;
270
+ }
271
+ }
272
+ const PRICING_LABELS = {
273
+ 0: "Per Task",
274
+ 1: "Hourly",
275
+ 2: "Subscription",
276
+ 3: "Custom",
277
+ };
278
+ // ── Read commands ───────────────────────────────────────────
279
+ async function searchListings(globalOpts, cmdOpts) {
280
+ const config = loadAndValidate(globalOpts);
281
+ const spinner = ora("Searching marketplace…").start();
282
+ const params = new URLSearchParams();
283
+ if (cmdOpts.category)
284
+ params.set("category", cmdOpts.category);
285
+ if (cmdOpts.query)
286
+ params.set("q", cmdOpts.query);
287
+ const limit = Math.min(Math.max(parseInt(cmdOpts.limit ?? "20", 10) || 20, 1), 100);
288
+ params.set("first", String(limit));
289
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/marketplace/search?${params.toString()}`, { apiKey: config.apiKey });
290
+ if (isGatewayError(result)) {
291
+ spinner.fail("Failed to search marketplace");
292
+ console.error(chalk.red(` ${result.error}`));
293
+ process.exit(1);
294
+ }
295
+ const { listings } = result.data;
296
+ spinner.succeed(`${listings.length} listing(s) found`);
297
+ if (cmdOpts.json) {
298
+ console.log(JSON.stringify(result.data, null, 2));
299
+ return;
300
+ }
301
+ if (listings.length === 0) {
302
+ console.log(chalk.dim("\n No listings found.\n"));
303
+ return;
304
+ }
305
+ console.log("");
306
+ for (const l of listings) {
307
+ const price = l.priceAmount !== "0" ? formatWei(l.priceAmount, l.tokenAddress) : chalk.dim("Free");
308
+ const pricing = PRICING_LABELS[l.pricingModel] ?? "Custom";
309
+ const status = l.isActive ? chalk.green("Active") : chalk.dim("Inactive");
310
+ console.log(` ${chalk.bold(`#${l.id}`)} ${status} ${chalk.cyan(l.category)} ${chalk.yellow(price)} (${pricing})`);
311
+ console.log(` Provider: ${l.provider.slice(0, 10)}…`);
312
+ if (l.totalCompleted > 0) {
313
+ console.log(` Completed: ${l.totalCompleted} | Disputed: ${l.totalDisputed}`);
314
+ }
315
+ console.log("");
316
+ }
317
+ }
318
+ async function showListing(globalOpts, id, cmdOpts) {
319
+ const config = loadAndValidate(globalOpts);
320
+ const spinner = ora(`Fetching listing #${id}…`).start();
321
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/marketplace/listings/${encodeURIComponent(id)}`, { apiKey: config.apiKey });
322
+ if (isGatewayError(result)) {
323
+ spinner.fail(`Listing #${id} not found`);
324
+ console.error(chalk.red(` ${result.error}`));
325
+ process.exit(1);
326
+ }
327
+ const l = result.data;
328
+ spinner.succeed(`Listing #${l.id}`);
329
+ if (cmdOpts.json) {
330
+ console.log(JSON.stringify(l, null, 2));
331
+ return;
332
+ }
333
+ const price = l.priceAmount !== "0" ? formatWei(l.priceAmount, l.tokenAddress) : "Free";
334
+ const pricing = PRICING_LABELS[l.pricingModel] ?? "Custom";
335
+ console.log("");
336
+ console.log(chalk.bold(` Listing #${l.id}`));
337
+ console.log(` Category: ${l.category}`);
338
+ console.log(` Price: ${chalk.yellow(price)} (${pricing})`);
339
+ console.log(` Provider: ${l.provider}`);
340
+ console.log(` Active: ${l.isActive ? "Yes" : "No"}`);
341
+ console.log(` Completed: ${l.totalCompleted} | Disputed: ${l.totalDisputed}`);
342
+ console.log(` Metadata: ${l.metadataCid}`);
343
+ console.log("");
344
+ }
345
+ // ── Write commands ──────────────────────────────────────────
346
+ async function createListing(globalOpts, cmdOpts) {
347
+ const config = loadAndValidate(globalOpts);
348
+ const wallet = requireWallet(config);
349
+ // Resolve token
350
+ const tokenKey = (cmdOpts.token ?? "usdc").toLowerCase();
351
+ const tokenInfo = TOKEN_MAP[tokenKey];
352
+ if (!tokenInfo) {
353
+ console.error(chalk.red(` ✗ Unknown token "${cmdOpts.token}". Accepted: usdc, nook`));
354
+ process.exit(1);
355
+ }
356
+ const priceFloat = parseFloat(cmdOpts.price ?? "0");
357
+ const priceAmount = priceFloat > 0
358
+ ? String(BigInt(Math.round(priceFloat * 10 ** tokenInfo.decimals)))
359
+ : "0";
360
+ const spinner = ora("Creating service listing…").start();
361
+ // 1. Prepare
362
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/list", {
363
+ apiKey: config.apiKey,
364
+ body: {
365
+ title: cmdOpts.title,
366
+ description: cmdOpts.description,
367
+ category: cmdOpts.category,
368
+ pricingModel: parseInt(cmdOpts.pricingModel ?? "0", 10),
369
+ priceAmount,
370
+ tags: cmdOpts.tags ? cmdOpts.tags.split(",").map(t => t.trim()) : [],
371
+ tokenAddress: tokenInfo.address,
372
+ },
373
+ });
374
+ if (isGatewayError(prepareResult)) {
375
+ spinner.fail("Failed to prepare listing creation");
376
+ console.error(chalk.red(` ${prepareResult.error}`));
377
+ process.exit(1);
378
+ }
379
+ // 2. Sign
380
+ const { forwardRequest, domain, types } = prepareResult.data;
381
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
382
+ // 3. Relay
383
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
384
+ if (isGatewayError(relayResult)) {
385
+ spinner.fail("Failed to relay listing creation");
386
+ console.error(chalk.red(` ${relayResult.error}`));
387
+ process.exit(1);
388
+ }
389
+ if (cmdOpts.json) {
390
+ spinner.stop();
391
+ console.log(JSON.stringify({ title: cmdOpts.title, category: cmdOpts.category, txHash: relayResult.data.txHash }, null, 2));
392
+ return;
393
+ }
394
+ spinner.succeed(chalk.green(`Service listing "${cmdOpts.title}" created`));
395
+ console.log(` Category: ${cmdOpts.category}`);
396
+ if (priceFloat > 0)
397
+ console.log(` Price: ${priceFloat.toFixed(2)} ${tokenInfo.symbol}`);
398
+ console.log(` TX: ${relayResult.data.txHash}`);
399
+ console.log("");
400
+ }
401
+ async function createAgreement(globalOpts, listingId, cmdOpts) {
402
+ const config = loadAndValidate(globalOpts);
403
+ const wallet = requireWallet(config);
404
+ const deadlineDays = parseInt(cmdOpts.deadline, 10);
405
+ if (isNaN(deadlineDays) || deadlineDays < 1) {
406
+ console.error(chalk.red(" ✗ Deadline must be a positive number of days."));
407
+ process.exit(1);
408
+ }
409
+ // Resolve token
410
+ const tokenKey = (cmdOpts.token ?? "usdc").toLowerCase();
411
+ const tokenInfo = TOKEN_MAP[tokenKey];
412
+ if (!tokenInfo) {
413
+ console.error(chalk.red(` ✗ Unknown token "${cmdOpts.token}". Accepted: usdc, nook`));
414
+ process.exit(1);
415
+ }
416
+ const amountFloat = parseFloat(cmdOpts.amount ?? "0");
417
+ const tokenAmount = amountFloat > 0
418
+ ? String(BigInt(Math.round(amountFloat * 10 ** tokenInfo.decimals)))
419
+ : "0";
420
+ const deadlineTs = Math.floor(Date.now() / 1000) + deadlineDays * 86400;
421
+ if (amountFloat > 0) {
422
+ console.log(chalk.dim(`\n Note: Your agent must hold ${amountFloat.toFixed(2)} ${tokenInfo.symbol} and have approved the ServiceMarketplace to deposit the escrow.\n`));
423
+ }
424
+ const spinner = ora(`Creating agreement for listing #${listingId}…`).start();
425
+ // 1. Prepare
426
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/agree", {
427
+ apiKey: config.apiKey,
428
+ body: {
429
+ listingId: parseInt(listingId, 10),
430
+ terms: cmdOpts.terms,
431
+ deadline: deadlineTs,
432
+ tokenAmount,
433
+ tokenAddress: tokenInfo.address,
434
+ },
435
+ });
436
+ if (isGatewayError(prepareResult)) {
437
+ spinner.fail("Failed to prepare agreement");
438
+ console.error(chalk.red(` ${prepareResult.error}`));
439
+ process.exit(1);
440
+ }
441
+ // 2. Sign
442
+ const { forwardRequest, domain, types } = prepareResult.data;
443
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
444
+ // 3. Relay
445
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
446
+ if (isGatewayError(relayResult)) {
447
+ spinner.fail("Failed to relay agreement");
448
+ console.error(chalk.red(` ${relayResult.error}`));
449
+ process.exit(1);
450
+ }
451
+ if (cmdOpts.json) {
452
+ spinner.stop();
453
+ console.log(JSON.stringify({ listingId, txHash: relayResult.data.txHash }, null, 2));
454
+ return;
455
+ }
456
+ spinner.succeed(chalk.green(`Agreement created for listing #${listingId}`));
457
+ console.log(` Deadline: ${new Date(deadlineTs * 1000).toLocaleString()}`);
458
+ if (amountFloat > 0)
459
+ console.log(` Amount: ${amountFloat.toFixed(2)} ${tokenInfo.symbol}`);
460
+ console.log(` TX: ${relayResult.data.txHash}`);
461
+ console.log("");
462
+ }
463
+ async function agreementAction(globalOpts, id, action, cmdOpts) {
464
+ const config = loadAndValidate(globalOpts);
465
+ const wallet = requireWallet(config);
466
+ const actionLabels = {
467
+ deliver: { present: "Delivering work for", past: "Delivered work for" },
468
+ settle: { present: "Settling", past: "Settled" },
469
+ dispute: { present: "Disputing", past: "Disputed" },
470
+ cancel: { present: "Cancelling", past: "Cancelled" },
471
+ };
472
+ const label = actionLabels[action];
473
+ const spinner = ora(`${label.present} agreement #${id}…`).start();
474
+ const body = { agreementId: parseInt(id, 10) };
475
+ if (action === "deliver") {
476
+ if (!cmdOpts.cid) {
477
+ spinner.fail("Delivery CID required for deliver action");
478
+ process.exit(1);
479
+ }
480
+ body.deliveryCid = cmdOpts.cid;
481
+ }
482
+ // 1. Prepare
483
+ const prepareResult = await gatewayRequest(config.gateway, "POST", `/v1/prepare/service/${action}`, { apiKey: config.apiKey, body });
484
+ if (isGatewayError(prepareResult)) {
485
+ spinner.fail(`Failed to prepare ${action}`);
486
+ console.error(chalk.red(` ${prepareResult.error}`));
487
+ process.exit(1);
488
+ }
489
+ // 2. Sign
490
+ const { forwardRequest, domain, types } = prepareResult.data;
491
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
492
+ // 3. Relay
493
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
494
+ if (isGatewayError(relayResult)) {
495
+ spinner.fail(`Failed to relay ${action}`);
496
+ console.error(chalk.red(` ${relayResult.error}`));
497
+ process.exit(1);
498
+ }
499
+ if (cmdOpts.json) {
500
+ spinner.stop();
501
+ console.log(JSON.stringify({ agreementId: id, action, txHash: relayResult.data.txHash }, null, 2));
502
+ return;
503
+ }
504
+ spinner.succeed(chalk.green(`${label.past} agreement #${id}`));
505
+ console.log(` TX: ${relayResult.data.txHash}`);
506
+ console.log("");
507
+ }
508
+ async function updateListing(globalOpts, id, cmdOpts) {
509
+ const config = loadAndValidate(globalOpts);
510
+ const wallet = requireWallet(config);
511
+ if (!cmdOpts.title && !cmdOpts.description && cmdOpts.active === undefined) {
512
+ console.error(chalk.red(" ✗ Provide at least one of --title, --description, or --active."));
513
+ process.exit(1);
514
+ }
515
+ const spinner = ora(`Updating listing #${id}…`).start();
516
+ const body = { listingId: parseInt(id, 10) };
517
+ if (cmdOpts.title)
518
+ body.title = cmdOpts.title;
519
+ if (cmdOpts.description)
520
+ body.description = cmdOpts.description;
521
+ if (cmdOpts.active !== undefined)
522
+ body.active = cmdOpts.active === "true";
523
+ // 1. Prepare
524
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/update", { apiKey: config.apiKey, body });
525
+ if (isGatewayError(prepareResult)) {
526
+ spinner.fail("Failed to prepare listing update");
527
+ console.error(chalk.red(` ${prepareResult.error}`));
528
+ process.exit(1);
529
+ }
530
+ // 2. Sign
531
+ const { forwardRequest, domain, types } = prepareResult.data;
532
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
533
+ // 3. Relay
534
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
535
+ if (isGatewayError(relayResult)) {
536
+ spinner.fail("Failed to relay listing update");
537
+ console.error(chalk.red(` ${relayResult.error}`));
538
+ process.exit(1);
539
+ }
540
+ if (cmdOpts.json) {
541
+ spinner.stop();
542
+ console.log(JSON.stringify({ listingId: id, txHash: relayResult.data.txHash }, null, 2));
543
+ return;
544
+ }
545
+ spinner.succeed(chalk.green(`Listing #${id} updated`));
546
+ console.log(` TX: ${relayResult.data.txHash}`);
547
+ console.log("");
548
+ }
549
+ async function submitReview(globalOpts, agreementId, cmdOpts) {
550
+ const config = loadAndValidate(globalOpts);
551
+ const rating = parseInt(cmdOpts.rating, 10);
552
+ if (isNaN(rating) || rating < 1 || rating > 5) {
553
+ console.error(chalk.red(" ✗ Rating must be between 1 and 5."));
554
+ process.exit(1);
555
+ }
556
+ const spinner = ora(`Submitting review for agreement #${agreementId}…`).start();
557
+ const result = await gatewayRequest(config.gateway, "POST", "/v1/marketplace/reviews", {
558
+ apiKey: config.apiKey,
559
+ body: {
560
+ agreementId: parseInt(agreementId, 10),
561
+ rating,
562
+ comment: cmdOpts.comment,
563
+ },
564
+ });
565
+ if (isGatewayError(result)) {
566
+ spinner.fail("Failed to submit review");
567
+ console.error(chalk.red(` ${result.error}`));
568
+ process.exit(1);
569
+ }
570
+ if (cmdOpts.json) {
571
+ spinner.stop();
572
+ console.log(JSON.stringify(result.data, null, 2));
573
+ return;
574
+ }
575
+ spinner.succeed(chalk.green(`Review submitted for agreement #${agreementId}`));
576
+ console.log(` Rating: ${"★".repeat(rating)}${"☆".repeat(5 - rating)}`);
577
+ console.log("");
578
+ }
579
+ async function showReviews(globalOpts, address, cmdOpts) {
580
+ const config = loadAndValidate(globalOpts);
581
+ const spinner = ora(`Fetching reviews for ${address.slice(0, 10)}…`).start();
582
+ const result = await gatewayRequest(config.gateway, "GET", `/v1/marketplace/reviews/${encodeURIComponent(address)}`, { apiKey: config.apiKey });
583
+ if (isGatewayError(result)) {
584
+ spinner.fail("Failed to fetch reviews");
585
+ console.error(chalk.red(` ${result.error}`));
586
+ process.exit(1);
587
+ }
588
+ const { reviews } = result.data;
589
+ spinner.succeed(`${reviews.length} review(s)`);
590
+ if (cmdOpts.json) {
591
+ console.log(JSON.stringify(result.data, null, 2));
592
+ return;
593
+ }
594
+ if (reviews.length === 0) {
595
+ console.log(chalk.dim("\n No reviews found.\n"));
596
+ return;
597
+ }
598
+ console.log("");
599
+ for (const r of reviews) {
600
+ const stars = chalk.yellow("★".repeat(r.rating) + "☆".repeat(5 - r.rating));
601
+ const date = new Date(r.createdAt).toLocaleDateString();
602
+ console.log(` ${stars} ${chalk.dim(`Agreement #${r.agreementId}`)} ${chalk.dim(date)}`);
603
+ console.log(` ${chalk.dim("by")} ${r.reviewer.slice(0, 10)}…`);
604
+ if (r.comment)
605
+ console.log(` ${r.comment}`);
606
+ console.log("");
607
+ }
608
+ }
609
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/commands/marketplace.ts"],"names":[],"mappings":"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"}