@clawmarket.cc/marketcc 0.4.3 → 0.5.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/commands/browse.d.ts +2 -0
- package/dist/commands/browse.js +40 -0
- package/dist/commands/browse.js.map +1 -0
- package/dist/commands/buy.d.ts +2 -0
- package/dist/commands/buy.js +97 -0
- package/dist/commands/buy.js.map +1 -0
- package/dist/commands/download.d.ts +2 -0
- package/dist/commands/download.js +58 -0
- package/dist/commands/download.js.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createClient } from '../lib/api.js';
|
|
2
|
+
import { handleApiError } from '../lib/errors.js';
|
|
3
|
+
import { renderTable } from '../lib/table.js';
|
|
4
|
+
export default function registerBrowse(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('browse')
|
|
7
|
+
.description('Browse marketplace listings')
|
|
8
|
+
.option('-p, --page <number>', 'Page number', '1')
|
|
9
|
+
.option('-l, --limit <number>', 'Items per page', '20')
|
|
10
|
+
.option('-s, --search <term>', 'Search by title')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
try {
|
|
13
|
+
const client = await createClient();
|
|
14
|
+
let path = `/api/marketplace?page=${opts.page}&limit=${opts.limit}`;
|
|
15
|
+
if (opts.search) {
|
|
16
|
+
path += `&search=${encodeURIComponent(opts.search)}`;
|
|
17
|
+
}
|
|
18
|
+
const data = await client.request('GET', path, undefined, false);
|
|
19
|
+
if (data.items.length === 0) {
|
|
20
|
+
console.log('No listings found.');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const headers = ['ID', 'Title', 'Price (SOL)', 'Provider', 'Status'];
|
|
24
|
+
const widths = [38, 30, 14, 16, 10];
|
|
25
|
+
const rows = data.items.map((l) => [
|
|
26
|
+
l.id,
|
|
27
|
+
l.title,
|
|
28
|
+
l.price_sol === 0 ? 'Free' : String(l.price_sol),
|
|
29
|
+
l.profiles?.display_name || 'Unknown',
|
|
30
|
+
l.status,
|
|
31
|
+
]);
|
|
32
|
+
renderTable(headers, rows, widths);
|
|
33
|
+
console.log(`\nShowing ${data.items.length} of ${data.total} listings (page ${data.page})`);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
handleApiError(err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=browse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse.js","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiB9C,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,qBAAqB,EAAE,aAAa,EAAE,GAAG,CAAC;SACjD,MAAM,CAAC,sBAAsB,EAAE,gBAAgB,EAAE,IAAI,CAAC;SACtD,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAsD,EAAE,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YAEpC,IAAI,IAAI,GAAG,yBAAyB,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,IAAI,WAAW,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAmB,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAEnF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChD,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,SAAS;gBACrC,CAAC,CAAC,MAAM;aACT,CAAC,CAAC;YAEH,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,OAAO,IAAI,CAAC,KAAK,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import qrcode from 'qrcode-terminal';
|
|
2
|
+
import { createAuthenticatedClient } from '../lib/api.js';
|
|
3
|
+
import { handleApiError } from '../lib/errors.js';
|
|
4
|
+
function sleep(ms) {
|
|
5
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
}
|
|
7
|
+
function formatCountdown(ms) {
|
|
8
|
+
const totalSec = Math.max(0, Math.floor(ms / 1000));
|
|
9
|
+
const min = Math.floor(totalSec / 60);
|
|
10
|
+
const sec = totalSec % 60;
|
|
11
|
+
return `${min}:${String(sec).padStart(2, '0')}`;
|
|
12
|
+
}
|
|
13
|
+
function printAccessKey(accessKey) {
|
|
14
|
+
console.log('');
|
|
15
|
+
console.log('\x1b[1m\x1b[32mYour access key (save this — it will not be shown again):\x1b[0m');
|
|
16
|
+
console.log(` ${accessKey}`);
|
|
17
|
+
console.log('');
|
|
18
|
+
console.log('To download, run:');
|
|
19
|
+
console.log(` marketcc download ${accessKey}`);
|
|
20
|
+
}
|
|
21
|
+
export default function registerBuy(program) {
|
|
22
|
+
program
|
|
23
|
+
.command('buy <listing-id>')
|
|
24
|
+
.description('Purchase a marketplace listing')
|
|
25
|
+
.action(async (listingId) => {
|
|
26
|
+
try {
|
|
27
|
+
const client = await createAuthenticatedClient();
|
|
28
|
+
console.log('Creating payment session...');
|
|
29
|
+
const session = await client.request('POST', '/api/payments/sessions', { listing_id: listingId });
|
|
30
|
+
// Free listing — already confirmed
|
|
31
|
+
if (session.status === 'confirmed' && session.access_key) {
|
|
32
|
+
console.log('Free listing — no payment needed!');
|
|
33
|
+
printAccessKey(session.access_key);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Paid listing — show QR and poll
|
|
37
|
+
console.log(`\nAmount: ${session.amount_sol} SOL`);
|
|
38
|
+
console.log(`Recipient: ${session.recipient_address}`);
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log('Scan this QR code with your Solana wallet (Phantom, Solflare, etc.):');
|
|
41
|
+
console.log('');
|
|
42
|
+
// Render QR code in terminal
|
|
43
|
+
await new Promise((resolve) => {
|
|
44
|
+
qrcode.generate(session.solana_pay_url, { small: true }, (code) => {
|
|
45
|
+
console.log(code);
|
|
46
|
+
resolve();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log(`Solana Pay URL: ${session.solana_pay_url}`);
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log('Waiting for payment...');
|
|
53
|
+
// Poll for confirmation
|
|
54
|
+
const expiresAt = new Date(session.expires_at).getTime();
|
|
55
|
+
while (true) {
|
|
56
|
+
const remaining = expiresAt - Date.now();
|
|
57
|
+
if (remaining <= 0) {
|
|
58
|
+
console.log('\nSession expired. Run `marketcc buy` again to retry.');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
await sleep(3000);
|
|
62
|
+
let status;
|
|
63
|
+
try {
|
|
64
|
+
status = await client.request('GET', `/api/payments/sessions/${session.id}/status`);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Network error — keep polling
|
|
68
|
+
process.stdout.write('.');
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (status.status === 'confirmed') {
|
|
72
|
+
console.log('');
|
|
73
|
+
if (status.tx_signature) {
|
|
74
|
+
console.log(`\x1b[1m\x1b[32mPayment confirmed!\x1b[0m Transaction: ${status.tx_signature}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log('\x1b[1m\x1b[32mPayment confirmed!\x1b[0m');
|
|
78
|
+
}
|
|
79
|
+
if (status.access_key) {
|
|
80
|
+
printAccessKey(status.access_key);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (status.status === 'expired') {
|
|
85
|
+
console.log('\nSession expired. Run `marketcc buy` again to retry.');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
// Still pending — show countdown
|
|
89
|
+
process.stdout.write(`\rWaiting for payment... ${formatCountdown(remaining)} remaining `);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
handleApiError(err);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=buy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buy.js","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { writeFile } from 'fs/promises';
|
|
2
|
+
import { handleApiError } from '../lib/errors.js';
|
|
3
|
+
import { loadConfig, getApiUrl } from '../lib/config.js';
|
|
4
|
+
export default function registerDownload(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('download <access-key>')
|
|
7
|
+
.description('Download a purchased file using an access key')
|
|
8
|
+
.option('-o, --output <path>', 'Output file path')
|
|
9
|
+
.action(async (accessKey, opts) => {
|
|
10
|
+
try {
|
|
11
|
+
const config = await loadConfig();
|
|
12
|
+
const baseUrl = getApiUrl(config);
|
|
13
|
+
console.log('Redeeming access key...');
|
|
14
|
+
// Get download URL (no auth needed — key is the auth)
|
|
15
|
+
const res = await fetch(`${baseUrl}/api/files/download?key=${encodeURIComponent(accessKey)}`);
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
if (res.status === 404) {
|
|
18
|
+
console.error('Error: Invalid or already used access key.');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const errBody = await res.json().catch(() => null);
|
|
22
|
+
const msg = errBody?.error?.message || 'Failed to redeem access key';
|
|
23
|
+
console.error(`Error: ${msg}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const { download_url } = (await res.json());
|
|
27
|
+
console.log('Downloading file...');
|
|
28
|
+
// Download the actual file from the signed URL
|
|
29
|
+
const fileRes = await fetch(download_url);
|
|
30
|
+
if (!fileRes.ok) {
|
|
31
|
+
console.error('Error: Failed to download file.');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const buffer = Buffer.from(await fileRes.arrayBuffer());
|
|
35
|
+
// Determine output filename
|
|
36
|
+
let outputPath = opts.output;
|
|
37
|
+
if (!outputPath) {
|
|
38
|
+
// Extract filename from signed URL path
|
|
39
|
+
try {
|
|
40
|
+
const urlObj = new URL(download_url);
|
|
41
|
+
const pathSegments = urlObj.pathname.split('/').filter(Boolean);
|
|
42
|
+
outputPath = pathSegments[pathSegments.length - 1] || 'download';
|
|
43
|
+
// Decode URL-encoded characters
|
|
44
|
+
outputPath = decodeURIComponent(outputPath);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
outputPath = 'download';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
await writeFile(outputPath, buffer);
|
|
51
|
+
console.log(`\nDownloaded: ${outputPath} (${buffer.length} bytes)`);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
handleApiError(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ import registerEdit from './commands/edit.js';
|
|
|
7
7
|
import registerWhoami from './commands/whoami.js';
|
|
8
8
|
import registerLogin from './commands/login.js';
|
|
9
9
|
import registerLogout from './commands/logout.js';
|
|
10
|
+
import registerBrowse from './commands/browse.js';
|
|
11
|
+
import registerBuy from './commands/buy.js';
|
|
12
|
+
import registerDownload from './commands/download.js';
|
|
10
13
|
const R = '\x1b[31m';
|
|
11
14
|
const O = '\x1b[38;5;208m';
|
|
12
15
|
const Y = '\x1b[33m';
|
|
@@ -28,7 +31,7 @@ const program = new Command();
|
|
|
28
31
|
program
|
|
29
32
|
.name('marketcc')
|
|
30
33
|
.description('CLI for ClawMarket — upload and manage files')
|
|
31
|
-
.version('0.4.
|
|
34
|
+
.version('0.4.4')
|
|
32
35
|
.action(() => {
|
|
33
36
|
const D = '\x1b[2m';
|
|
34
37
|
const B = '\x1b[1m';
|
|
@@ -45,5 +48,8 @@ registerLs(program);
|
|
|
45
48
|
registerEdit(program);
|
|
46
49
|
registerWhoami(program);
|
|
47
50
|
registerLogout(program);
|
|
51
|
+
registerBrowse(program);
|
|
52
|
+
registerBuy(program);
|
|
53
|
+
registerDownload(program);
|
|
48
54
|
program.parse();
|
|
49
55
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,cAAc,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clawmarket.cc/marketcc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "CLI for ClawMarket — upload and manage files",
|
|
6
6
|
"type": "module",
|
|
@@ -26,11 +26,13 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"chalk": "^5.3.0",
|
|
29
|
-
"commander": "^12.0.0"
|
|
29
|
+
"commander": "^12.0.0",
|
|
30
|
+
"qrcode-terminal": "^0.12.0"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/node": "^22.0.0",
|
|
33
34
|
"@types/prompts": "^2.4.9",
|
|
35
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
34
36
|
"@vitest/coverage-v8": "^3.0.0",
|
|
35
37
|
"tsx": "^4.19.0",
|
|
36
38
|
"typescript": "^5.7.0",
|