@clawmarket.cc/marketcc 0.2.5 → 0.3.1
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/edit.js +26 -51
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/init.js +14 -46
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.js +28 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +17 -11
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/ls.js +15 -21
- package/dist/commands/ls.js.map +1 -1
- package/dist/commands/upload.js +26 -53
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/whoami.js +6 -28
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.js +4 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +0 -1
- package/dist/lib/api.js +0 -22
- package/dist/lib/api.js.map +1 -1
- package/package.json +11 -15
- package/postinstall.js +2 -3
package/dist/commands/edit.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createInterface } from 'readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'process';
|
|
2
3
|
import { createAuthenticatedClient } from '../lib/api.js';
|
|
3
4
|
import { handleApiError } from '../lib/errors.js';
|
|
4
5
|
export default function registerEdit(program) {
|
|
@@ -6,61 +7,35 @@ export default function registerEdit(program) {
|
|
|
6
7
|
.command('edit <id>')
|
|
7
8
|
.description('Edit a file listing')
|
|
8
9
|
.action(async (id) => {
|
|
10
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
9
11
|
try {
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
type: 'text',
|
|
28
|
-
name: 'description',
|
|
29
|
-
message: 'New description (enter to keep current):',
|
|
30
|
-
initial: file.description || '',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
type: 'confirm',
|
|
34
|
-
name: 'isListed',
|
|
35
|
-
message: 'List on marketplace?',
|
|
36
|
-
initial: file.is_listed,
|
|
37
|
-
},
|
|
38
|
-
]);
|
|
39
|
-
if (answers.price === undefined)
|
|
12
|
+
const title = await rl.question('New title (leave empty to skip): ');
|
|
13
|
+
const description = await rl.question('New description (leave empty to skip): ');
|
|
14
|
+
const priceSol = await rl.question('New price in SOL (leave empty to skip): ');
|
|
15
|
+
const status = await rl.question('New status (active/inactive, leave empty to skip): ');
|
|
16
|
+
rl.close();
|
|
17
|
+
const updates = {};
|
|
18
|
+
if (title)
|
|
19
|
+
updates.title = title;
|
|
20
|
+
if (description)
|
|
21
|
+
updates.description = description;
|
|
22
|
+
if (priceSol)
|
|
23
|
+
updates.price_sol = parseFloat(priceSol);
|
|
24
|
+
if (status)
|
|
25
|
+
updates.status = status;
|
|
26
|
+
if (Object.keys(updates).length === 0) {
|
|
27
|
+
console.log('No changes specified.');
|
|
40
28
|
return;
|
|
41
|
-
const patch = {};
|
|
42
|
-
const newPriceSol = answers.price;
|
|
43
|
-
if (newPriceSol !== currentPriceSol) {
|
|
44
|
-
const priceLamports = BigInt(Math.round(parseFloat(newPriceSol) * 1_000_000_000));
|
|
45
|
-
patch.price_lamports = priceLamports.toString();
|
|
46
|
-
}
|
|
47
|
-
if (answers.title !== (file.title || '')) {
|
|
48
|
-
patch.title = answers.title;
|
|
49
|
-
}
|
|
50
|
-
if (answers.description !== (file.description || '')) {
|
|
51
|
-
patch.description = answers.description;
|
|
52
|
-
}
|
|
53
|
-
if (answers.isListed !== file.is_listed) {
|
|
54
|
-
patch.is_listed = answers.isListed;
|
|
55
29
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
console.log(
|
|
30
|
+
const client = await createAuthenticatedClient();
|
|
31
|
+
const result = await client.request('PUT', `/api/marketplace/${id}`, updates);
|
|
32
|
+
console.log(`\nListing updated!`);
|
|
33
|
+
console.log(`Title: ${result.title}`);
|
|
34
|
+
console.log(`Price: ${result.price_sol} SOL`);
|
|
35
|
+
console.log(`Status: ${result.status}`);
|
|
62
36
|
}
|
|
63
37
|
catch (err) {
|
|
38
|
+
rl.close();
|
|
64
39
|
handleApiError(err);
|
|
65
40
|
}
|
|
66
41
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;YACjF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC,CAAC;YAExF,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,OAAO,GAA4B,EAAE,CAAC;YAC5C,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACjC,IAAI,WAAW;gBAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;YACnD,IAAI,QAAQ;gBAAE,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YAEpC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAKhC,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAE7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { createInterface } from 'readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'process';
|
|
3
|
+
import { ApiClient } from '../lib/api.js';
|
|
3
4
|
import { saveConfig, getDefaultApiUrl } from '../lib/config.js';
|
|
4
5
|
import { handleApiError } from '../lib/errors.js';
|
|
5
6
|
export default function registerInit(program) {
|
|
@@ -7,53 +8,20 @@ export default function registerInit(program) {
|
|
|
7
8
|
.command('init')
|
|
8
9
|
.description('Create a new account or log in with an existing API key')
|
|
9
10
|
.action(async () => {
|
|
11
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
10
12
|
try {
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (hasKey) {
|
|
21
|
-
const { apiKey } = await prompts({
|
|
22
|
-
type: 'text',
|
|
23
|
-
name: 'apiKey',
|
|
24
|
-
message: 'Enter your API key:',
|
|
25
|
-
});
|
|
26
|
-
if (!apiKey)
|
|
27
|
-
return;
|
|
28
|
-
const apiUrl = getDefaultApiUrl();
|
|
29
|
-
const client = new ApiClient(apiUrl, apiKey);
|
|
30
|
-
const me = await client.request('GET', '/api/providers/me');
|
|
31
|
-
await saveConfig({ api_key: apiKey, api_url: apiUrl });
|
|
32
|
-
console.log(`\nLogged in as ${me.first_name} (${me.wallet_address})`);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
const { firstName } = await prompts({
|
|
36
|
-
type: 'text',
|
|
37
|
-
name: 'firstName',
|
|
38
|
-
message: 'Enter your first name:',
|
|
39
|
-
});
|
|
40
|
-
if (!firstName)
|
|
41
|
-
return;
|
|
42
|
-
const { walletAddress } = await prompts({
|
|
43
|
-
type: 'text',
|
|
44
|
-
name: 'walletAddress',
|
|
45
|
-
message: 'Enter your Solana wallet address:',
|
|
46
|
-
});
|
|
47
|
-
if (!walletAddress)
|
|
48
|
-
return;
|
|
49
|
-
const client = await createClient();
|
|
50
|
-
const result = await client.request('POST', '/api/providers/register', { wallet_address: walletAddress, first_name: firstName }, false);
|
|
51
|
-
await saveConfig({ api_key: result.api_key });
|
|
52
|
-
console.log(`\nAccount created! Your API key:\n\n ${result.api_key}\n`);
|
|
53
|
-
console.log('This key is stored in ~/.marketcc/config.json');
|
|
54
|
-
}
|
|
13
|
+
const email = await rl.question('Email: ');
|
|
14
|
+
const password = await rl.question('Password (min 8 chars): ');
|
|
15
|
+
const displayName = await rl.question('Display name: ');
|
|
16
|
+
rl.close();
|
|
17
|
+
const client = new ApiClient(getDefaultApiUrl());
|
|
18
|
+
const result = await client.request('POST', '/api/auth/signup', { email, password, display_name: displayName }, false);
|
|
19
|
+
await saveConfig({ api_key: result.api_key });
|
|
20
|
+
console.log(`\nAccount created! Welcome, ${result.user.display_name}.`);
|
|
21
|
+
console.log('Your API key has been saved.');
|
|
55
22
|
}
|
|
56
23
|
catch (err) {
|
|
24
|
+
rl.close();
|
|
57
25
|
handleApiError(err);
|
|
58
26
|
}
|
|
59
27
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAExD,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAGhC,MAAM,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YAEtF,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createInterface } from 'readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'process';
|
|
3
|
+
import { ApiClient } from '../lib/api.js';
|
|
4
|
+
import { saveConfig, getDefaultApiUrl } from '../lib/config.js';
|
|
5
|
+
import { handleApiError } from '../lib/errors.js';
|
|
6
|
+
export default function registerLogin(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('login')
|
|
9
|
+
.description('Log in with an existing account')
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
12
|
+
try {
|
|
13
|
+
const email = await rl.question('Email: ');
|
|
14
|
+
const password = await rl.question('Password: ');
|
|
15
|
+
rl.close();
|
|
16
|
+
const client = new ApiClient(getDefaultApiUrl());
|
|
17
|
+
const result = await client.request('POST', '/api/auth/login', { email, password }, false);
|
|
18
|
+
await saveConfig({ api_key: result.api_key });
|
|
19
|
+
console.log(`\nLogged in! Welcome back, ${result.user.display_name}.`);
|
|
20
|
+
console.log('Your API key has been saved.');
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
rl.close();
|
|
24
|
+
handleApiError(err);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAEjD,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAGhC,MAAM,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YAE1D,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createInterface } from 'readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'process';
|
|
2
3
|
import { clearConfig } from '../lib/config.js';
|
|
3
4
|
export default function registerLogout(program) {
|
|
4
5
|
program
|
|
5
6
|
.command('logout')
|
|
6
7
|
.description('Log out and remove stored config')
|
|
7
8
|
.action(async () => {
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
10
|
+
try {
|
|
11
|
+
const answer = await rl.question('Are you sure you want to log out? (y/N): ');
|
|
12
|
+
rl.close();
|
|
13
|
+
if (answer.toLowerCase() !== 'y') {
|
|
14
|
+
console.log('Cancelled.');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
await clearConfig();
|
|
18
|
+
console.log('Logged out. Config removed.');
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
rl.close();
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
18
24
|
});
|
|
19
25
|
}
|
|
20
26
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC;YAC9E,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/ls.js
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
1
|
import { createAuthenticatedClient } from '../lib/api.js';
|
|
2
2
|
import { handleApiError } from '../lib/errors.js';
|
|
3
|
+
import { renderTable } from '../lib/table.js';
|
|
3
4
|
export default function registerLs(program) {
|
|
4
5
|
program
|
|
5
6
|
.command('ls')
|
|
6
7
|
.description('List your uploaded files')
|
|
7
|
-
.
|
|
8
|
-
.action(async (opts) => {
|
|
8
|
+
.action(async () => {
|
|
9
9
|
try {
|
|
10
10
|
const client = await createAuthenticatedClient();
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
13
|
-
console.log(
|
|
11
|
+
const listings = await client.request('GET', '/api/providers/me/listings');
|
|
12
|
+
if (listings.length === 0) {
|
|
13
|
+
console.log('No listings found. Use `marketcc upload <file>` to create one.');
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const title = (f.title || '(untitled)').substring(0, 28).padEnd(30);
|
|
27
|
-
const price = `${(Number(f.price_lamports) / 1e9).toFixed(4)} SOL`.padEnd(12);
|
|
28
|
-
const status = (f.is_listed ? 'listed' : 'unlisted').padEnd(10);
|
|
29
|
-
const created = f.created_at.substring(0, 10);
|
|
30
|
-
console.log(`${id.padEnd(8)} ${title} ${price} ${status} ${created}`);
|
|
31
|
-
}
|
|
16
|
+
const headers = ['ID', 'Title', 'Price (SOL)', 'Status', 'Created'];
|
|
17
|
+
const widths = [38, 30, 14, 10, 22];
|
|
18
|
+
const rows = listings.map((l) => [
|
|
19
|
+
l.id,
|
|
20
|
+
l.title,
|
|
21
|
+
String(l.price_sol),
|
|
22
|
+
l.status,
|
|
23
|
+
new Date(l.created_at).toLocaleDateString(),
|
|
24
|
+
]);
|
|
25
|
+
renderTable(headers, rows, widths);
|
|
32
26
|
}
|
|
33
27
|
catch (err) {
|
|
34
28
|
handleApiError(err);
|
package/dist/commands/ls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAU9C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAY,KAAK,EAAE,4BAA4B,CAAC,CAAC;YAEtF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK;gBACP,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnB,CAAC,CAAC,MAAM;gBACR,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE;aAC5C,CAAC,CAAC;YAEH,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/upload.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { readFile } from '
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { basename } from 'path';
|
|
3
|
+
import { createInterface } from 'readline/promises';
|
|
4
|
+
import { stdin, stdout } from 'process';
|
|
5
5
|
import { createAuthenticatedClient } from '../lib/api.js';
|
|
6
6
|
import { handleApiError } from '../lib/errors.js';
|
|
7
7
|
export default function registerUpload(program) {
|
|
@@ -9,61 +9,34 @@ export default function registerUpload(program) {
|
|
|
9
9
|
.command('upload <file>')
|
|
10
10
|
.description('Upload a markdown file to the marketplace')
|
|
11
11
|
.action(async (filePath) => {
|
|
12
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
12
13
|
try {
|
|
13
|
-
if (!existsSync(filePath)) {
|
|
14
|
-
console.error(`File not found: ${filePath}`);
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
if (!filePath.endsWith('.md')) {
|
|
18
|
-
console.error('File must have .md extension.');
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
const client = await createAuthenticatedClient();
|
|
22
|
-
const filename = basename(filePath);
|
|
23
|
-
const defaultTitle = filename.replace(/\.md$/, '');
|
|
24
|
-
const answers = await prompts([
|
|
25
|
-
{
|
|
26
|
-
type: 'text',
|
|
27
|
-
name: 'price',
|
|
28
|
-
message: 'Price in SOL:',
|
|
29
|
-
validate: (v) => {
|
|
30
|
-
const n = parseFloat(v);
|
|
31
|
-
return !isNaN(n) && n > 0 ? true : 'Enter a positive number';
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
type: 'text',
|
|
36
|
-
name: 'title',
|
|
37
|
-
message: 'Title:',
|
|
38
|
-
initial: defaultTitle,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
type: 'text',
|
|
42
|
-
name: 'description',
|
|
43
|
-
message: 'Description (optional):',
|
|
44
|
-
},
|
|
45
|
-
]);
|
|
46
|
-
if (!answers.price)
|
|
47
|
-
return;
|
|
48
|
-
const priceLamports = BigInt(Math.round(parseFloat(answers.price) * 1_000_000_000));
|
|
49
14
|
const fileBuffer = await readFile(filePath);
|
|
50
|
-
const
|
|
15
|
+
const fileName = basename(filePath);
|
|
16
|
+
const title = await rl.question('Title: ');
|
|
17
|
+
const description = await rl.question('Description (optional): ');
|
|
18
|
+
const priceSol = await rl.question('Price (SOL): ');
|
|
19
|
+
const solanaAddress = await rl.question('Solana wallet address: ');
|
|
20
|
+
const totalLicenses = await rl.question('Total licenses (leave empty for unlimited): ');
|
|
21
|
+
rl.close();
|
|
22
|
+
const client = await createAuthenticatedClient();
|
|
51
23
|
const formData = new FormData();
|
|
52
|
-
formData.append('file',
|
|
53
|
-
formData.append('
|
|
54
|
-
if (
|
|
55
|
-
formData.append('
|
|
56
|
-
|
|
57
|
-
|
|
24
|
+
formData.append('file', new Blob([fileBuffer]), fileName);
|
|
25
|
+
formData.append('title', title);
|
|
26
|
+
if (description)
|
|
27
|
+
formData.append('description', description);
|
|
28
|
+
formData.append('price_sol', priceSol);
|
|
29
|
+
formData.append('solana_address', solanaAddress);
|
|
30
|
+
if (totalLicenses)
|
|
31
|
+
formData.append('total_licenses', totalLicenses);
|
|
58
32
|
const result = await client.uploadMultipart('/api/files/upload', formData);
|
|
59
|
-
|
|
60
|
-
console.log(
|
|
61
|
-
console.log(`
|
|
62
|
-
console.log(`
|
|
63
|
-
console.log(` Price: ${priceDisplay} SOL`);
|
|
64
|
-
console.log(` URL: https://clawmarket.cc/file/${result.id}`);
|
|
33
|
+
console.log(`\nUploaded! Listing ID: ${result.id}`);
|
|
34
|
+
console.log(`Title: ${result.title}`);
|
|
35
|
+
console.log(`Price: ${result.price_sol} SOL`);
|
|
36
|
+
console.log(`Status: ${result.status}`);
|
|
65
37
|
}
|
|
66
38
|
catch (err) {
|
|
39
|
+
rl.close();
|
|
67
40
|
handleApiError(err);
|
|
68
41
|
}
|
|
69
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QACjC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC;YAExF,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YAEjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC1D,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,IAAI,WAAW;gBAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC7D,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YACjD,IAAI,aAAa;gBAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAKxC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;YAElC,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -1,39 +1,17 @@
|
|
|
1
1
|
import { createAuthenticatedClient } from '../lib/api.js';
|
|
2
|
-
import { loadConfig, getApiKey } from '../lib/config.js';
|
|
3
2
|
import { handleApiError } from '../lib/errors.js';
|
|
4
|
-
function maskApiKey(key) {
|
|
5
|
-
if (key.length <= 8)
|
|
6
|
-
return key;
|
|
7
|
-
return key.substring(0, 4) + '***...' + key.substring(key.length - 3);
|
|
8
|
-
}
|
|
9
|
-
function formatDate(iso) {
|
|
10
|
-
const d = new Date(iso);
|
|
11
|
-
return d.toLocaleDateString('en-US', {
|
|
12
|
-
year: 'numeric',
|
|
13
|
-
month: 'long',
|
|
14
|
-
day: 'numeric',
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
3
|
export default function registerWhoami(program) {
|
|
18
4
|
program
|
|
19
5
|
.command('whoami')
|
|
20
6
|
.description('Show current account info')
|
|
21
|
-
.
|
|
22
|
-
.option('--show-key', 'Show full API key')
|
|
23
|
-
.action(async (opts) => {
|
|
7
|
+
.action(async () => {
|
|
24
8
|
try {
|
|
25
9
|
const client = await createAuthenticatedClient();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
const config = await loadConfig();
|
|
32
|
-
const apiKey = getApiKey(config) || '';
|
|
33
|
-
console.log(` Provider: ${me.first_name}`);
|
|
34
|
-
console.log(` Wallet: ${me.wallet_address}`);
|
|
35
|
-
console.log(` API Key: ${opts.showKey ? apiKey : maskApiKey(apiKey)}`);
|
|
36
|
-
console.log(` Member since: ${formatDate(me.created_at)}`);
|
|
10
|
+
const profile = await client.request('GET', '/api/providers/me');
|
|
11
|
+
console.log(`ID: ${profile.id}`);
|
|
12
|
+
console.log(`Display name: ${profile.display_name}`);
|
|
13
|
+
console.log(`Listings: ${profile.listing_count}`);
|
|
14
|
+
console.log(`Member since: ${new Date(profile.created_at).toLocaleDateString()}`);
|
|
37
15
|
}
|
|
38
16
|
catch (err) {
|
|
39
17
|
handleApiError(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAKjC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YAE/B,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,14 +2,11 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import registerInit from './commands/init.js';
|
|
4
4
|
import registerUpload from './commands/upload.js';
|
|
5
|
-
import registerUploadBot from './commands/upload-bot.js';
|
|
6
|
-
import registerDownload from './commands/download.js';
|
|
7
5
|
import registerLs from './commands/ls.js';
|
|
8
6
|
import registerEdit from './commands/edit.js';
|
|
9
|
-
import registerGet from './commands/get.js';
|
|
10
7
|
import registerWhoami from './commands/whoami.js';
|
|
8
|
+
import registerLogin from './commands/login.js';
|
|
11
9
|
import registerLogout from './commands/logout.js';
|
|
12
|
-
import registerSetupKeys from './commands/setup-keys.js';
|
|
13
10
|
const R = '\x1b[31m';
|
|
14
11
|
const O = '\x1b[38;5;208m';
|
|
15
12
|
const Y = '\x1b[33m';
|
|
@@ -30,8 +27,8 @@ function printCrab() {
|
|
|
30
27
|
const program = new Command();
|
|
31
28
|
program
|
|
32
29
|
.name('marketcc')
|
|
33
|
-
.description('CLI for ClawMarket — upload
|
|
34
|
-
.version('0.
|
|
30
|
+
.description('CLI for ClawMarket — upload and manage files')
|
|
31
|
+
.version('0.3.1')
|
|
35
32
|
.action(() => {
|
|
36
33
|
const D = '\x1b[2m';
|
|
37
34
|
const B = '\x1b[1m';
|
|
@@ -42,14 +39,11 @@ program
|
|
|
42
39
|
console.log('');
|
|
43
40
|
});
|
|
44
41
|
registerInit(program);
|
|
42
|
+
registerLogin(program);
|
|
45
43
|
registerUpload(program);
|
|
46
|
-
registerUploadBot(program);
|
|
47
|
-
registerDownload(program);
|
|
48
44
|
registerLs(program);
|
|
49
45
|
registerEdit(program);
|
|
50
|
-
registerGet(program);
|
|
51
46
|
registerWhoami(program);
|
|
52
47
|
registerLogout(program);
|
|
53
|
-
registerSetupKeys(program);
|
|
54
48
|
program.parse();
|
|
55
49
|
//# 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,
|
|
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;AAElD,MAAM,CAAC,GAAG,UAAU,CAAC;AACrB,MAAM,CAAC,GAAG,gBAAgB,CAAC;AAC3B,MAAM,CAAC,GAAG,UAAU,CAAC;AACrB,MAAM,CAAC,GAAG,SAAS,CAAC;AAEpB,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,GAAG,SAAS,CAAC;IACpB,MAAM,CAAC,GAAG,SAAS,CAAC;IAEpB,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export declare class ApiClient {
|
|
|
8
8
|
private apiKey?;
|
|
9
9
|
constructor(baseUrl: string, apiKey?: string | undefined);
|
|
10
10
|
request<T>(method: string, path: string, body?: unknown, auth?: boolean): Promise<T>;
|
|
11
|
-
requestRaw(method: string, path: string): Promise<Response>;
|
|
12
11
|
uploadMultipart<T>(path: string, formData: FormData): Promise<T>;
|
|
13
12
|
}
|
|
14
13
|
export declare function createClient(): Promise<ApiClient>;
|
package/dist/lib/api.js
CHANGED
|
@@ -44,28 +44,6 @@ export class ApiClient {
|
|
|
44
44
|
}
|
|
45
45
|
return (await res.json());
|
|
46
46
|
}
|
|
47
|
-
async requestRaw(method, path) {
|
|
48
|
-
const headers = {};
|
|
49
|
-
if (this.apiKey) {
|
|
50
|
-
headers['X-API-Key'] = this.apiKey;
|
|
51
|
-
}
|
|
52
|
-
const url = `${this.baseUrl}${path}`;
|
|
53
|
-
const res = await fetch(url, { method, headers });
|
|
54
|
-
if (!res.ok) {
|
|
55
|
-
let errBody;
|
|
56
|
-
try {
|
|
57
|
-
errBody = (await res.json());
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
throw new ApiClientError(res.status, 'UNKNOWN', res.statusText);
|
|
61
|
-
}
|
|
62
|
-
const errObj = typeof errBody.error === 'object' ? errBody.error : null;
|
|
63
|
-
const code = errObj?.code || (typeof errBody.error === 'string' ? errBody.error : 'UNKNOWN');
|
|
64
|
-
const message = errObj?.message || errBody.message || res.statusText;
|
|
65
|
-
throw new ApiClientError(res.status, code, message);
|
|
66
|
-
}
|
|
67
|
-
return res;
|
|
68
|
-
}
|
|
69
47
|
async uploadMultipart(path, formData) {
|
|
70
48
|
const headers = {};
|
|
71
49
|
if (this.apiKey) {
|
package/dist/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO/D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE9B;IACA;IAFT,YACS,UAAkB,EAClB,SAAiB,EACxB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,eAAU,GAAV,UAAU,CAAQ;QAClB,cAAS,GAAT,SAAS,CAAQ;QAIxB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,SAAS;IAEV;IACA;IAFV,YACU,OAAe,EACf,MAAe;QADf,YAAO,GAAP,OAAO,CAAQ;QACf,WAAM,GAAN,MAAM,CAAS;IACtB,CAAC;IAEJ,KAAK,CAAC,OAAO,CACX,MAAc,EACd,IAAY,EACZ,IAAc,EACd,IAAI,GAAG,IAAI;QAEX,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,OAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC7F,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC;YACrE,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clawmarket.cc/marketcc",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "CLI for ClawMarket — upload and manage files",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"bin": {
|
|
7
8
|
"marketcc": "./dist/index.js"
|
|
@@ -9,30 +10,26 @@
|
|
|
9
10
|
"scripts": {
|
|
10
11
|
"build": "tsc",
|
|
11
12
|
"dev": "tsx src/index.ts",
|
|
12
|
-
"test": "vitest run",
|
|
13
|
-
"test:watch": "vitest",
|
|
14
|
-
"test:coverage": "vitest run --coverage",
|
|
13
|
+
"test": "vitest run --config src/__tests__/vitest.config.ts",
|
|
14
|
+
"test:watch": "vitest --config src/__tests__/vitest.config.ts",
|
|
15
|
+
"test:coverage": "vitest run --config src/__tests__/vitest.config.ts --coverage",
|
|
15
16
|
"prepublishOnly": "npm run build",
|
|
16
17
|
"postinstall": "node postinstall.js"
|
|
17
18
|
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/clawmarket-cc/ClawMarket.git"
|
|
22
|
+
},
|
|
18
23
|
"engines": {
|
|
19
24
|
"node": ">=20.0.0"
|
|
20
25
|
},
|
|
21
26
|
"dependencies": {
|
|
22
|
-
"archiver": "^7.0.1",
|
|
23
27
|
"chalk": "^5.3.0",
|
|
24
|
-
"commander": "^12.0.0"
|
|
25
|
-
"ora": "^8.0.0",
|
|
26
|
-
"prompts": "^2.4.2",
|
|
27
|
-
"tar": "^7.0.0",
|
|
28
|
-
"unzipper": "^0.12.3",
|
|
29
|
-
"yaml": "^2.8.0"
|
|
28
|
+
"commander": "^12.0.0"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
|
-
"@types/archiver": "^7.0.0",
|
|
33
31
|
"@types/node": "^22.0.0",
|
|
34
32
|
"@types/prompts": "^2.4.9",
|
|
35
|
-
"@types/unzipper": "^0.10.11",
|
|
36
33
|
"@vitest/coverage-v8": "^3.0.0",
|
|
37
34
|
"tsx": "^4.19.0",
|
|
38
35
|
"typescript": "^5.7.0",
|
|
@@ -46,7 +43,6 @@
|
|
|
46
43
|
"marketcc",
|
|
47
44
|
"openclaw",
|
|
48
45
|
"marketplace",
|
|
49
|
-
"bots",
|
|
50
46
|
"cli"
|
|
51
47
|
],
|
|
52
48
|
"license": "MIT"
|
package/postinstall.js
CHANGED
|
@@ -25,12 +25,11 @@ console.log('');
|
|
|
25
25
|
console.log(crab);
|
|
26
26
|
console.log('');
|
|
27
27
|
console.log(` ${BOLD}${ORANGE}🦀 Welcome to ClawMarket${RESET}`);
|
|
28
|
-
console.log(` ${DIM}The marketplace for OpenClaw
|
|
28
|
+
console.log(` ${DIM}The marketplace for OpenClaw files${RESET}`);
|
|
29
29
|
console.log('');
|
|
30
30
|
console.log(` ${CYAN}Get started:${RESET}`);
|
|
31
31
|
console.log(` ${WHITE}$ marketcc init${RESET} ${DIM}Set up configuration${RESET}`);
|
|
32
|
-
console.log(` ${WHITE}$ marketcc
|
|
33
|
-
console.log(` ${WHITE}$ marketcc upload ./my-bot${RESET} ${DIM}Publish your first bot${RESET}`);
|
|
32
|
+
console.log(` ${WHITE}$ marketcc upload file.md${RESET} ${DIM}Publish your first file${RESET}`);
|
|
34
33
|
console.log('');
|
|
35
34
|
console.log(` ${DIM}Docs: https://clawmarket.cc${RESET}`);
|
|
36
35
|
console.log('');
|