@clawapps/cli 0.4.0 → 0.6.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/login.d.ts +5 -1
- package/dist/commands/login.js +87 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/payment-grant.d.ts +5 -1
- package/dist/commands/payment-grant.js +77 -1
- package/dist/commands/payment-grant.js.map +1 -1
- package/dist/commands/subscribe.d.ts +1 -0
- package/dist/commands/subscribe.js +10 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/index.js +17 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/login.d.ts
CHANGED
package/dist/commands/login.js
CHANGED
|
@@ -5,7 +5,92 @@ import { apiGet } from '../lib/api.js';
|
|
|
5
5
|
import { CONFIG } from '../lib/config.js';
|
|
6
6
|
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
7
7
|
import { createLoginCode, displayQRCode, pollAuthCode } from '../auth/qr-poll.js';
|
|
8
|
-
export async function loginCommand() {
|
|
8
|
+
export async function loginCommand(options) {
|
|
9
|
+
// --wait <code>: poll for login result only
|
|
10
|
+
if (options.wait) {
|
|
11
|
+
return loginWait(options.wait);
|
|
12
|
+
}
|
|
13
|
+
// --url-only: create code, output JSON, exit immediately
|
|
14
|
+
if (options.urlOnly) {
|
|
15
|
+
return loginUrlOnly();
|
|
16
|
+
}
|
|
17
|
+
// Default: interactive mode (QR + poll)
|
|
18
|
+
return loginInteractive();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* --url-only: create login code, output JSON to stdout, exit immediately.
|
|
22
|
+
* Agent workflow: parse JSON to get code and qr_url.
|
|
23
|
+
*/
|
|
24
|
+
async function loginUrlOnly() {
|
|
25
|
+
// Check if already logged in
|
|
26
|
+
const existing = await loadCredentials();
|
|
27
|
+
if (existing) {
|
|
28
|
+
try {
|
|
29
|
+
const validated = await ensureValidToken(existing);
|
|
30
|
+
if (validated) {
|
|
31
|
+
const res = await apiGet(CONFIG.CLAW_ME, validated.access_token);
|
|
32
|
+
if (res.ok) {
|
|
33
|
+
const user = res.data.data;
|
|
34
|
+
console.log(JSON.stringify({
|
|
35
|
+
status: 'already_logged_in',
|
|
36
|
+
user: user.email || user.name || 'user',
|
|
37
|
+
access_token: validated.access_token,
|
|
38
|
+
}));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Token invalid, continue to create login code
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
let loginCode;
|
|
48
|
+
try {
|
|
49
|
+
loginCode = await createLoginCode();
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
53
|
+
console.log(JSON.stringify({ status: 'error', message }));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
console.log(JSON.stringify({
|
|
57
|
+
status: 'pending',
|
|
58
|
+
code: loginCode.code,
|
|
59
|
+
qr_url: loginCode.qr_url,
|
|
60
|
+
expires_at: loginCode.expires_at,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* --wait <code>: poll for login result, save credentials on success.
|
|
65
|
+
*/
|
|
66
|
+
async function loginWait(code) {
|
|
67
|
+
try {
|
|
68
|
+
const result = await pollAuthCode(code, 'login');
|
|
69
|
+
await saveCredentials({
|
|
70
|
+
provider: 'google',
|
|
71
|
+
access_token: result.access_token,
|
|
72
|
+
refresh_token: result.refresh_token,
|
|
73
|
+
logged_in_at: new Date().toISOString(),
|
|
74
|
+
});
|
|
75
|
+
const userRes = await apiGet(CONFIG.CLAW_ME, result.access_token);
|
|
76
|
+
const user = userRes.ok ? userRes.data.data : null;
|
|
77
|
+
console.log(JSON.stringify({
|
|
78
|
+
status: 'success',
|
|
79
|
+
access_token: result.access_token,
|
|
80
|
+
user: user ? (user.email || user.name || 'user') : null,
|
|
81
|
+
email: user?.email || null,
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
86
|
+
console.log(JSON.stringify({ status: 'expired', message }));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Default interactive mode: display QR code + poll with spinner.
|
|
92
|
+
*/
|
|
93
|
+
async function loginInteractive() {
|
|
9
94
|
// Check if already logged in, refresh token if needed
|
|
10
95
|
const existing = await loadCredentials();
|
|
11
96
|
if (existing) {
|
|
@@ -44,7 +129,7 @@ export async function loginCommand() {
|
|
|
44
129
|
const result = await pollAuthCode(loginCode.code, 'login');
|
|
45
130
|
// Save credentials
|
|
46
131
|
await saveCredentials({
|
|
47
|
-
provider: 'google',
|
|
132
|
+
provider: 'google',
|
|
48
133
|
access_token: result.access_token,
|
|
49
134
|
refresh_token: result.refresh_token,
|
|
50
135
|
logged_in_at: new Date().toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAwB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,83 @@ import ora from 'ora';
|
|
|
3
3
|
import { loadCredentials } from '../lib/credentials.js';
|
|
4
4
|
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
5
5
|
import { createPaymentCode, displayQRCode, pollAuthCode } from '../auth/qr-poll.js';
|
|
6
|
-
export async function paymentGrantCommand(skillId) {
|
|
6
|
+
export async function paymentGrantCommand(skillId, options) {
|
|
7
|
+
// --wait <code>: poll for payment result only
|
|
8
|
+
if (options.wait) {
|
|
9
|
+
return paymentWait(options.wait);
|
|
10
|
+
}
|
|
11
|
+
// --url-only: create code, output JSON, exit immediately
|
|
12
|
+
if (options.urlOnly) {
|
|
13
|
+
return paymentUrlOnly(skillId);
|
|
14
|
+
}
|
|
15
|
+
// Default: interactive mode
|
|
16
|
+
return paymentInteractive(skillId);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* --url-only: create payment code, output JSON to stdout, exit immediately.
|
|
20
|
+
*/
|
|
21
|
+
async function paymentUrlOnly(skillId) {
|
|
22
|
+
const credentials = await loadCredentials();
|
|
23
|
+
if (!credentials) {
|
|
24
|
+
console.log(JSON.stringify({ status: 'error', message: 'Not logged in. Run `clawapps login` first.' }));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
const validated = await ensureValidToken(credentials);
|
|
28
|
+
if (!validated) {
|
|
29
|
+
console.log(JSON.stringify({ status: 'error', message: 'Session expired. Please run `clawapps login` again.' }));
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
let paymentCode;
|
|
33
|
+
try {
|
|
34
|
+
paymentCode = await createPaymentCode(validated.access_token, skillId);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
38
|
+
console.log(JSON.stringify({ status: 'error', message }));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
console.log(JSON.stringify({
|
|
42
|
+
status: 'pending',
|
|
43
|
+
code: paymentCode.code,
|
|
44
|
+
qr_url: paymentCode.qr_url,
|
|
45
|
+
skill_id: paymentCode.skill_id,
|
|
46
|
+
expires_at: paymentCode.expires_at,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* --wait <code>: poll for payment result.
|
|
51
|
+
*/
|
|
52
|
+
async function paymentWait(code) {
|
|
53
|
+
try {
|
|
54
|
+
const result = await pollAuthCode(code, 'payment');
|
|
55
|
+
if (result.one_time_pay_token) {
|
|
56
|
+
console.log(JSON.stringify({
|
|
57
|
+
status: 'success',
|
|
58
|
+
one_time_pay_token: result.one_time_pay_token,
|
|
59
|
+
auto_pay_enabled: result.auto_pay_enabled,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
else if (result.auto_pay_enabled) {
|
|
63
|
+
console.log(JSON.stringify({
|
|
64
|
+
status: 'success',
|
|
65
|
+
auto_pay_enabled: true,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(JSON.stringify({ status: 'error', message: 'No payment token received.' }));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
75
|
+
console.log(JSON.stringify({ status: 'expired', message }));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Default interactive mode: display QR code + poll with spinner.
|
|
81
|
+
*/
|
|
82
|
+
async function paymentInteractive(skillId) {
|
|
7
83
|
const credentials = await loadCredentials();
|
|
8
84
|
if (!credentials) {
|
|
9
85
|
console.log(chalk.yellow('Not logged in. Run `clawapps login` first.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-grant.js","sourceRoot":"","sources":["../../src/commands/payment-grant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"payment-grant.js","sourceRoot":"","sources":["../../src/commands/payment-grant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function subscribeCommand(): Promise<void>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { CONFIG } from '../lib/config.js';
|
|
3
|
+
import { displayQRCode } from '../auth/qr-poll.js';
|
|
4
|
+
export async function subscribeCommand() {
|
|
5
|
+
const url = `${CONFIG.CLAW_WEB_BASE}/membership`;
|
|
6
|
+
console.log(chalk.yellow('\nScan the QR code to subscribe membership.\n'));
|
|
7
|
+
displayQRCode(url);
|
|
8
|
+
console.log(chalk.gray(`\nOr visit: ${url}\n`));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=subscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,aAAa,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC3E,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,20 +2,21 @@ import { Command } from 'commander';
|
|
|
2
2
|
import { loginCommand } from './commands/login.js';
|
|
3
3
|
import { logoutCommand } from './commands/logout.js';
|
|
4
4
|
import { whoamiCommand } from './commands/whoami.js';
|
|
5
|
-
import { creditCommand } from './commands/credit.js';
|
|
6
|
-
import { membershipCommand } from './commands/membership.js';
|
|
7
5
|
import { tokenCommand } from './commands/token.js';
|
|
8
6
|
import { paymentGrantCommand } from './commands/payment-grant.js';
|
|
9
7
|
import { rechargeCreditsCommand } from './commands/recharge-credits.js';
|
|
8
|
+
import { subscribeCommand } from './commands/subscribe.js';
|
|
10
9
|
const program = new Command();
|
|
11
10
|
program
|
|
12
11
|
.name('clawapps')
|
|
13
|
-
.description('ClawApps CLI -
|
|
14
|
-
.version('0.
|
|
12
|
+
.description('ClawApps CLI - Authenticate, manage payments, and recharge credits via QR code')
|
|
13
|
+
.version('0.6.0');
|
|
15
14
|
program
|
|
16
15
|
.command('login')
|
|
17
|
-
.description('Log in
|
|
18
|
-
.
|
|
16
|
+
.description('Log in via QR code (scan to authenticate, valid for 3 minutes)')
|
|
17
|
+
.option('--url-only', 'Output login URL as JSON and exit (for agent integration)')
|
|
18
|
+
.option('--wait <code>', 'Poll for login result using a previously created code')
|
|
19
|
+
.action((options) => loginCommand(options));
|
|
19
20
|
program
|
|
20
21
|
.command('logout')
|
|
21
22
|
.description('Log out of your ClawApps account')
|
|
@@ -24,26 +25,24 @@ program
|
|
|
24
25
|
.command('whoami')
|
|
25
26
|
.description('Show your ClawApps account info')
|
|
26
27
|
.action(whoamiCommand);
|
|
27
|
-
program
|
|
28
|
-
.command('credit')
|
|
29
|
-
.description('Open credit recharge page in browser')
|
|
30
|
-
.action(creditCommand);
|
|
31
|
-
program
|
|
32
|
-
.command('membership')
|
|
33
|
-
.description('Open membership subscription page in browser')
|
|
34
|
-
.action(membershipCommand);
|
|
35
28
|
program
|
|
36
29
|
.command('token')
|
|
37
|
-
.description('Print
|
|
30
|
+
.description('Print valid access token (auto-refreshes if expired)')
|
|
38
31
|
.action(tokenCommand);
|
|
39
32
|
program
|
|
40
33
|
.command('payment-grant')
|
|
41
|
-
.description('
|
|
34
|
+
.description('Authorize skill payment via QR code (valid for 3 minutes)')
|
|
42
35
|
.argument('<skill_id>', 'The skill ID to grant payment for')
|
|
43
|
-
.
|
|
36
|
+
.option('--url-only', 'Output payment URL as JSON and exit (for agent integration)')
|
|
37
|
+
.option('--wait <code>', 'Poll for payment result using a previously created code')
|
|
38
|
+
.action((skillId, options) => paymentGrantCommand(skillId, options));
|
|
44
39
|
program
|
|
45
40
|
.command('recharge-credits')
|
|
46
|
-
.description('Display QR code
|
|
41
|
+
.description('Display QR code to recharge credits')
|
|
47
42
|
.action(rechargeCreditsCommand);
|
|
43
|
+
program
|
|
44
|
+
.command('subscribe')
|
|
45
|
+
.description('Display QR code to subscribe membership')
|
|
46
|
+
.action(subscribeCommand);
|
|
48
47
|
program.parse();
|
|
49
48
|
//# 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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,gFAAgF,CAAC;KAC7F,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,YAAY,EAAE,2DAA2D,CAAC;KACjF,MAAM,CAAC,eAAe,EAAE,uDAAuD,CAAC;KAChF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,2DAA2D,CAAC;KACxE,QAAQ,CAAC,YAAY,EAAE,mCAAmC,CAAC;KAC3D,MAAM,CAAC,YAAY,EAAE,6DAA6D,CAAC;KACnF,MAAM,CAAC,eAAe,EAAE,yDAAyD,CAAC;KAClF,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAElC,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|