@clawapps/cli 0.6.0 → 0.6.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/README.md +86 -123
- package/dist/commands/balance.d.ts +3 -0
- package/dist/commands/balance.js +31 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.js +143 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/helpers/resolve-credentials.d.ts +12 -0
- package/dist/commands/helpers/resolve-credentials.js +29 -0
- package/dist/commands/helpers/resolve-credentials.js.map +1 -0
- package/dist/commands/login-code.d.ts +5 -0
- package/dist/commands/login-code.js +25 -0
- package/dist/commands/login-code.js.map +1 -0
- package/dist/commands/login-poll.d.ts +5 -0
- package/dist/commands/login-poll.js +30 -0
- package/dist/commands/login-poll.js.map +1 -0
- package/dist/commands/login.d.ts +3 -5
- package/dist/commands/login.js +66 -128
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +3 -18
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/send.d.ts +8 -0
- package/dist/commands/send.js +112 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/sessions.d.ts +6 -0
- package/dist/commands/sessions.js +36 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/index.js +49 -34
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +4 -15
- package/dist/lib/config.js +6 -21
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/login-service.d.ts +23 -0
- package/dist/lib/login-service.js +68 -0
- package/dist/lib/login-service.js.map +1 -0
- package/dist/lib/relay-client.d.ts +25 -0
- package/dist/lib/relay-client.js +113 -0
- package/dist/lib/relay-client.js.map +1 -0
- package/dist/lib/sse-parser.d.ts +12 -0
- package/dist/lib/sse-parser.js +61 -0
- package/dist/lib/sse-parser.js.map +1 -0
- package/dist/lib/types.d.ts +17 -27
- package/package.json +3 -2
- package/dist/auth/apple.d.ts +0 -5
- package/dist/auth/apple.js +0 -15
- package/dist/auth/apple.js.map +0 -1
- package/dist/auth/exchange.d.ts +0 -6
- package/dist/auth/exchange.js +0 -25
- package/dist/auth/exchange.js.map +0 -1
- package/dist/auth/google.d.ts +0 -5
- package/dist/auth/google.js +0 -16
- package/dist/auth/google.js.map +0 -1
- package/dist/auth/login-server.d.ts +0 -10
- package/dist/auth/login-server.js +0 -62
- package/dist/auth/login-server.js.map +0 -1
- package/dist/auth/payment-server.d.ts +0 -10
- package/dist/auth/payment-server.js +0 -66
- package/dist/auth/payment-server.js.map +0 -1
- package/dist/auth/qr-poll.d.ts +0 -32
- package/dist/auth/qr-poll.js +0 -72
- package/dist/auth/qr-poll.js.map +0 -1
- package/dist/auth/server.d.ts +0 -17
- package/dist/auth/server.js +0 -102
- package/dist/auth/server.js.map +0 -1
- package/dist/commands/credit.d.ts +0 -1
- package/dist/commands/credit.js +0 -28
- package/dist/commands/credit.js.map +0 -1
- package/dist/commands/helpers/ensure-token.d.ts +0 -6
- package/dist/commands/helpers/ensure-token.js +0 -29
- package/dist/commands/helpers/ensure-token.js.map +0 -1
- package/dist/commands/membership.d.ts +0 -1
- package/dist/commands/membership.js +0 -28
- package/dist/commands/membership.js.map +0 -1
- package/dist/commands/payment-grant.d.ts +0 -5
- package/dist/commands/payment-grant.js +0 -132
- package/dist/commands/payment-grant.js.map +0 -1
- package/dist/commands/recharge-credits.d.ts +0 -1
- package/dist/commands/recharge-credits.js +0 -10
- package/dist/commands/recharge-credits.js.map +0 -1
- package/dist/commands/subscribe.d.ts +0 -1
- package/dist/commands/subscribe.js +0 -10
- package/dist/commands/subscribe.js.map +0 -1
- package/dist/commands/token.d.ts +0 -1
- package/dist/commands/token.js +0 -17
- package/dist/commands/token.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -1
- package/dist/commands/whoami.js +0 -59
- package/dist/commands/whoami.js.map +0 -1
- package/dist/html/callback.d.ts +0 -12
- package/dist/html/callback.js +0 -246
- package/dist/html/callback.js.map +0 -1
- package/dist/html/logo-data.d.ts +0 -1
- package/dist/html/logo-data.js +0 -2
- package/dist/html/logo-data.js.map +0 -1
- package/dist/lib/api.d.ts +0 -13
- package/dist/lib/api.js +0 -26
- package/dist/lib/api.js.map +0 -1
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { createServer } from 'node:http';
|
|
2
|
-
import { URL } from 'node:url';
|
|
3
|
-
import { CONFIG } from '../lib/config.js';
|
|
4
|
-
import { getSuccessHtml, getErrorHtml } from '../html/callback.js';
|
|
5
|
-
/**
|
|
6
|
-
* Start a local HTTP server that receives payment grant result from the web page redirect.
|
|
7
|
-
* The web page redirects to: http://localhost:{port}/callback?payment_token=xxx&auto_payment=1
|
|
8
|
-
*/
|
|
9
|
-
export function startPaymentCallbackServer() {
|
|
10
|
-
return new Promise((resolveServer, rejectServer) => {
|
|
11
|
-
let resultResolve;
|
|
12
|
-
let resultReject;
|
|
13
|
-
const resultPromise = new Promise((resolve, reject) => {
|
|
14
|
-
resultResolve = resolve;
|
|
15
|
-
resultReject = reject;
|
|
16
|
-
});
|
|
17
|
-
const server = createServer((req, res) => {
|
|
18
|
-
const port = server.address().port;
|
|
19
|
-
const url = new URL(req.url || '/', `http://localhost:${port}`);
|
|
20
|
-
if (url.pathname === '/callback') {
|
|
21
|
-
const paymentToken = url.searchParams.get('payment_token');
|
|
22
|
-
const autoPayment = url.searchParams.get('auto_payment');
|
|
23
|
-
const isAutoPayment = autoPayment === '1';
|
|
24
|
-
if (paymentToken || isAutoPayment) {
|
|
25
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
26
|
-
res.end(getSuccessHtml());
|
|
27
|
-
resultResolve({
|
|
28
|
-
payment_token: paymentToken || undefined,
|
|
29
|
-
auto_payment: isAutoPayment,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
34
|
-
res.end(getErrorHtml('Missing payment token. Please try again.'));
|
|
35
|
-
resultReject(new Error('Callback missing payment token'));
|
|
36
|
-
}
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
40
|
-
res.end('Not found');
|
|
41
|
-
});
|
|
42
|
-
server.listen(0, '127.0.0.1', () => {
|
|
43
|
-
const addr = server.address();
|
|
44
|
-
const timeout = setTimeout(() => {
|
|
45
|
-
resultReject(new Error('Payment grant timed out. Please try again.'));
|
|
46
|
-
server.close();
|
|
47
|
-
}, CONFIG.AUTH_TIMEOUT_MS);
|
|
48
|
-
resultPromise.finally(() => {
|
|
49
|
-
clearTimeout(timeout);
|
|
50
|
-
setTimeout(() => server.close(), 500);
|
|
51
|
-
});
|
|
52
|
-
resolveServer({
|
|
53
|
-
port: addr.port,
|
|
54
|
-
result: resultPromise,
|
|
55
|
-
close: () => {
|
|
56
|
-
clearTimeout(timeout);
|
|
57
|
-
server.close();
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
server.on('error', (err) => {
|
|
62
|
-
rejectServer(err);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=payment-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payment-server.js","sourceRoot":"","sources":["../../src/auth/payment-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnE;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IAKxC,OAAO,IAAI,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;QACjD,IAAI,aAAmD,CAAC;QACxD,IAAI,YAAoC,CAAC;QAEzC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxE,aAAa,GAAG,OAAO,CAAC;YACxB,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YACxE,MAAM,IAAI,GAAI,MAAM,CAAC,OAAO,EAAuB,CAAC,IAAI,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAEhE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAEzD,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,CAAC;gBAE1C,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;oBAClC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;oBAC1B,aAAc,CAAC;wBACb,aAAa,EAAE,YAAY,IAAI,SAAS;wBACxC,YAAY,EAAE,aAAa;qBAC5B,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC,CAAC;oBAClE,YAAa,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO;YACT,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAsB,CAAC;YAElD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,YAAa,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YAE3B,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE;gBACzB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,GAAG,EAAE;oBACV,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,YAAY,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/auth/qr-poll.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export interface CreateLoginCodeResult {
|
|
2
|
-
code: string;
|
|
3
|
-
expires_at: string;
|
|
4
|
-
qr_url: string;
|
|
5
|
-
}
|
|
6
|
-
export interface CreatePaymentCodeResult {
|
|
7
|
-
code: string;
|
|
8
|
-
type: string;
|
|
9
|
-
skill_id: string;
|
|
10
|
-
expires_at: string;
|
|
11
|
-
qr_url: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Call POST /agent/create-login-code to create a login code on the server.
|
|
15
|
-
* No authentication required.
|
|
16
|
-
*/
|
|
17
|
-
export declare function createLoginCode(): Promise<CreateLoginCodeResult>;
|
|
18
|
-
/**
|
|
19
|
-
* Call POST /agent/create-payment-code to create a payment code on the server.
|
|
20
|
-
* Requires authentication (Bearer token).
|
|
21
|
-
*/
|
|
22
|
-
export declare function createPaymentCode(token: string, skillId: string, type?: string): Promise<CreatePaymentCodeResult>;
|
|
23
|
-
/**
|
|
24
|
-
* Display a QR code in the terminal.
|
|
25
|
-
*/
|
|
26
|
-
export declare function displayQRCode(url: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Poll the agent auth-code verification API.
|
|
29
|
-
* Resolves with the response data when the code is verified.
|
|
30
|
-
* Rejects on timeout or error.
|
|
31
|
-
*/
|
|
32
|
-
export declare function pollAuthCode<T>(code: string, type: 'login' | 'payment', timeoutMs?: number): Promise<T>;
|
package/dist/auth/qr-poll.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import qrcode from 'qrcode-terminal';
|
|
2
|
-
import { CONFIG } from '../lib/config.js';
|
|
3
|
-
/**
|
|
4
|
-
* Call POST /agent/create-login-code to create a login code on the server.
|
|
5
|
-
* No authentication required.
|
|
6
|
-
*/
|
|
7
|
-
export async function createLoginCode() {
|
|
8
|
-
const res = await fetch(CONFIG.AGENT_CREATE_LOGIN_CODE, { method: 'POST' });
|
|
9
|
-
const json = await res.json();
|
|
10
|
-
if (json.code === 'OK' && json.data?.code === 0 && json.data.data) {
|
|
11
|
-
return json.data.data;
|
|
12
|
-
}
|
|
13
|
-
throw new Error(json.data?.message || 'Failed to create login code');
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Call POST /agent/create-payment-code to create a payment code on the server.
|
|
17
|
-
* Requires authentication (Bearer token).
|
|
18
|
-
*/
|
|
19
|
-
export async function createPaymentCode(token, skillId, type = 'one_time') {
|
|
20
|
-
const url = `${CONFIG.AGENT_CREATE_PAYMENT_CODE}?skill_id=${encodeURIComponent(skillId)}&type=${encodeURIComponent(type)}`;
|
|
21
|
-
const res = await fetch(url, {
|
|
22
|
-
method: 'POST',
|
|
23
|
-
headers: { 'Authorization': `Bearer ${token}` },
|
|
24
|
-
});
|
|
25
|
-
const json = await res.json();
|
|
26
|
-
if (json.code === 'OK' && json.data?.code === 0 && json.data.data) {
|
|
27
|
-
return json.data.data;
|
|
28
|
-
}
|
|
29
|
-
throw new Error(json.data?.message || 'Failed to create payment code');
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Display a QR code in the terminal.
|
|
33
|
-
*/
|
|
34
|
-
export function displayQRCode(url) {
|
|
35
|
-
qrcode.generate(url, { small: true });
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Poll the agent auth-code verification API.
|
|
39
|
-
* Resolves with the response data when the code is verified.
|
|
40
|
-
* Rejects on timeout or error.
|
|
41
|
-
*/
|
|
42
|
-
export function pollAuthCode(code, type, timeoutMs = CONFIG.AUTH_TIMEOUT_MS) {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const url = `${CONFIG.AGENT_AUTH_CODE}?code=${encodeURIComponent(code)}&type=${type}`;
|
|
45
|
-
const startTime = Date.now();
|
|
46
|
-
async function poll() {
|
|
47
|
-
if (Date.now() - startTime >= timeoutMs) {
|
|
48
|
-
reject(new Error('Verification timed out. Please try again.'));
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
try {
|
|
52
|
-
const res = await fetch(url);
|
|
53
|
-
const json = await res.json();
|
|
54
|
-
// Outer envelope: code "OK", then check inner code
|
|
55
|
-
if (json.code === 'OK' && json.data) {
|
|
56
|
-
if (json.data.code === 0 && json.data.data) {
|
|
57
|
-
resolve(json.data.data);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
// Inner code non-zero (e.g. 4007 "Code not found"), keep polling
|
|
61
|
-
}
|
|
62
|
-
// Other responses, keep polling
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Network error, keep polling
|
|
66
|
-
}
|
|
67
|
-
setTimeout(poll, CONFIG.AUTH_POLL_INTERVAL_MS);
|
|
68
|
-
}
|
|
69
|
-
poll();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=qr-poll.js.map
|
package/dist/auth/qr-poll.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qr-poll.js","sourceRoot":"","sources":["../../src/auth/qr-poll.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/server.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { AuthProvider, ODTokens } from '../lib/types.js';
|
|
2
|
-
export interface CallbackResult {
|
|
3
|
-
provider: AuthProvider;
|
|
4
|
-
/** For Google: the Google access_token; For Apple: not used */
|
|
5
|
-
googleAccessToken?: string;
|
|
6
|
-
/** For Apple: OD tokens come directly in the callback */
|
|
7
|
-
odTokens?: ODTokens;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Start a local HTTP server to receive the OAuth callback.
|
|
11
|
-
* Returns a promise that resolves with the callback result.
|
|
12
|
-
*/
|
|
13
|
-
export declare function startCallbackServer(provider: AuthProvider): Promise<{
|
|
14
|
-
port: number;
|
|
15
|
-
result: Promise<CallbackResult>;
|
|
16
|
-
close: () => void;
|
|
17
|
-
}>;
|
package/dist/auth/server.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { createServer } from 'node:http';
|
|
2
|
-
import { URL } from 'node:url';
|
|
3
|
-
import { CONFIG } from '../lib/config.js';
|
|
4
|
-
import { getGoogleCallbackHtml, getSuccessHtml, getErrorHtml } from '../html/callback.js';
|
|
5
|
-
function handleRequest(ctx, req, res) {
|
|
6
|
-
const url = new URL(req.url || '/', `http://localhost:${ctx.port}`);
|
|
7
|
-
// Google: /callback serves HTML that extracts token from hash
|
|
8
|
-
if (url.pathname === '/callback' && ctx.provider === 'google') {
|
|
9
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
10
|
-
res.end(getGoogleCallbackHtml(ctx.port));
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
// Google: /token receives the token POSTed by the callback HTML page
|
|
14
|
-
if (url.pathname === '/token' && req.method === 'POST') {
|
|
15
|
-
let body = '';
|
|
16
|
-
req.on('data', (chunk) => { body += chunk; });
|
|
17
|
-
req.on('end', () => {
|
|
18
|
-
try {
|
|
19
|
-
const data = JSON.parse(body);
|
|
20
|
-
const accessToken = data.access_token;
|
|
21
|
-
if (!accessToken) {
|
|
22
|
-
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
23
|
-
res.end(JSON.stringify({ error: 'Missing access_token' }));
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
27
|
-
res.end(JSON.stringify({ ok: true }));
|
|
28
|
-
ctx.resolve({ provider: 'google', googleAccessToken: accessToken });
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
32
|
-
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
// Apple: /callback receives OD tokens as query params
|
|
38
|
-
if (url.pathname === '/callback' && ctx.provider === 'apple') {
|
|
39
|
-
const accessToken = url.searchParams.get('access_token');
|
|
40
|
-
const refreshToken = url.searchParams.get('refresh_token');
|
|
41
|
-
if (!accessToken || !refreshToken) {
|
|
42
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
43
|
-
res.end(getErrorHtml('Missing tokens in callback. Please try again.'));
|
|
44
|
-
ctx.reject(new Error('Apple callback missing tokens'));
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
48
|
-
res.end(getSuccessHtml());
|
|
49
|
-
ctx.resolve({
|
|
50
|
-
provider: 'apple',
|
|
51
|
-
odTokens: { access_token: accessToken, refresh_token: refreshToken },
|
|
52
|
-
});
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
// Fallback
|
|
56
|
-
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
57
|
-
res.end('Not found');
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Start a local HTTP server to receive the OAuth callback.
|
|
61
|
-
* Returns a promise that resolves with the callback result.
|
|
62
|
-
*/
|
|
63
|
-
export function startCallbackServer(provider) {
|
|
64
|
-
return new Promise((resolveServer, rejectServer) => {
|
|
65
|
-
let resultResolve;
|
|
66
|
-
let resultReject;
|
|
67
|
-
const resultPromise = new Promise((resolve, reject) => {
|
|
68
|
-
resultResolve = resolve;
|
|
69
|
-
resultReject = reject;
|
|
70
|
-
});
|
|
71
|
-
const server = createServer((req, res) => {
|
|
72
|
-
handleRequest({ port: server.address().port, provider, resolve: resultResolve, reject: resultReject }, req, res);
|
|
73
|
-
});
|
|
74
|
-
// Bind to 127.0.0.1 only for security, port 0 = system assigns
|
|
75
|
-
server.listen(0, '127.0.0.1', () => {
|
|
76
|
-
const addr = server.address();
|
|
77
|
-
// Set up timeout
|
|
78
|
-
const timeout = setTimeout(() => {
|
|
79
|
-
resultReject(new Error('Authentication timed out. Please try again.'));
|
|
80
|
-
server.close();
|
|
81
|
-
}, CONFIG.AUTH_TIMEOUT_MS);
|
|
82
|
-
// When result resolves or rejects, clean up
|
|
83
|
-
resultPromise.finally(() => {
|
|
84
|
-
clearTimeout(timeout);
|
|
85
|
-
// Give the browser a moment to receive the response
|
|
86
|
-
setTimeout(() => server.close(), 500);
|
|
87
|
-
});
|
|
88
|
-
resolveServer({
|
|
89
|
-
port: addr.port,
|
|
90
|
-
result: resultPromise,
|
|
91
|
-
close: () => {
|
|
92
|
-
clearTimeout(timeout);
|
|
93
|
-
server.close();
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
server.on('error', (err) => {
|
|
98
|
-
rejectServer(err);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=server.js.map
|
package/dist/auth/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/auth/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function creditCommand(): Promise<void>;
|
package/dist/commands/credit.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import open from 'open';
|
|
3
|
-
import { loadCredentials } from '../lib/credentials.js';
|
|
4
|
-
import { CONFIG } from '../lib/config.js';
|
|
5
|
-
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
6
|
-
export async function creditCommand() {
|
|
7
|
-
const credentials = await loadCredentials();
|
|
8
|
-
if (!credentials) {
|
|
9
|
-
console.log(chalk.yellow('Not logged in. Run `clawapps login` first.'));
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const token = await ensureValidToken(credentials);
|
|
13
|
-
if (!token) {
|
|
14
|
-
console.log(chalk.red('Session expired. Please run `clawapps login` again.'));
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const url = `${CONFIG.CLAW_WEB_BASE}/credit?access_token=${encodeURIComponent(token.access_token)}&refresh_token=${encodeURIComponent(token.refresh_token)}`;
|
|
18
|
-
console.log(chalk.gray('Opening credit recharge page...'));
|
|
19
|
-
try {
|
|
20
|
-
await open(url);
|
|
21
|
-
console.log(chalk.green('Page opened in your browser.'));
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
console.log(chalk.yellow('Could not open browser automatically.'));
|
|
25
|
-
console.log(chalk.gray(`Please open this URL manually:\n${url}`));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=credit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../src/commands/credit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,wBAAwB,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;IAE7J,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Credentials } from '../../lib/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Validates the current token, refreshes if expired.
|
|
4
|
-
* Returns updated credentials or null if session is invalid.
|
|
5
|
-
*/
|
|
6
|
-
export declare function ensureValidToken(credentials: Credentials): Promise<Credentials | null>;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { apiGet, apiPost } from '../../lib/api.js';
|
|
2
|
-
import { saveCredentials } from '../../lib/credentials.js';
|
|
3
|
-
import { CONFIG } from '../../lib/config.js';
|
|
4
|
-
/**
|
|
5
|
-
* Validates the current token, refreshes if expired.
|
|
6
|
-
* Returns updated credentials or null if session is invalid.
|
|
7
|
-
*/
|
|
8
|
-
export async function ensureValidToken(credentials) {
|
|
9
|
-
// Try current token
|
|
10
|
-
const res = await apiGet(CONFIG.CLAW_ME, credentials.access_token);
|
|
11
|
-
if (res.ok)
|
|
12
|
-
return credentials;
|
|
13
|
-
// Token expired — try refresh
|
|
14
|
-
if (res.status === 401) {
|
|
15
|
-
const refreshRes = await apiPost(CONFIG.CLAW_REFRESH, { refresh_token: credentials.refresh_token });
|
|
16
|
-
if (!refreshRes.ok)
|
|
17
|
-
return null;
|
|
18
|
-
const newTokens = refreshRes.data.data;
|
|
19
|
-
const updated = {
|
|
20
|
-
...credentials,
|
|
21
|
-
access_token: newTokens.access_token,
|
|
22
|
-
refresh_token: newTokens.refresh_token,
|
|
23
|
-
};
|
|
24
|
-
await saveCredentials(updated);
|
|
25
|
-
return updated;
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=ensure-token.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-token.js","sourceRoot":"","sources":["../../../src/commands/helpers/ensure-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAwB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAwB;IAExB,oBAAoB;IACpB,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,MAAM,CAAC,OAAO,EACd,WAAW,CAAC,YAAY,CACzB,CAAC;IAEF,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC;IAE/B,8BAA8B;IAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,OAAO,CAC9B,MAAM,CAAC,YAAY,EACnB,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAC7C,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,MAAM,OAAO,GAAgB;YAC3B,GAAG,WAAW;YACd,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,aAAa,EAAE,SAAS,CAAC,aAAa;SACvC,CAAC;QAEF,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function membershipCommand(): Promise<void>;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import open from 'open';
|
|
3
|
-
import { loadCredentials } from '../lib/credentials.js';
|
|
4
|
-
import { CONFIG } from '../lib/config.js';
|
|
5
|
-
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
6
|
-
export async function membershipCommand() {
|
|
7
|
-
const credentials = await loadCredentials();
|
|
8
|
-
if (!credentials) {
|
|
9
|
-
console.log(chalk.yellow('Not logged in. Run `clawapps login` first.'));
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
const token = await ensureValidToken(credentials);
|
|
13
|
-
if (!token) {
|
|
14
|
-
console.log(chalk.red('Session expired. Please run `clawapps login` again.'));
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const url = `${CONFIG.CLAW_WEB_BASE}/membership?access_token=${encodeURIComponent(token.access_token)}&refresh_token=${encodeURIComponent(token.refresh_token)}`;
|
|
18
|
-
console.log(chalk.gray('Opening membership subscription page...'));
|
|
19
|
-
try {
|
|
20
|
-
await open(url);
|
|
21
|
-
console.log(chalk.green('Page opened in your browser.'));
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
console.log(chalk.yellow('Could not open browser automatically.'));
|
|
25
|
-
console.log(chalk.gray(`Please open this URL manually:\n${url}`));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=membership.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"membership.js","sourceRoot":"","sources":["../../src/commands/membership.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;IAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,4BAA4B,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;IAEjK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import ora from 'ora';
|
|
3
|
-
import { loadCredentials } from '../lib/credentials.js';
|
|
4
|
-
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
5
|
-
import { createPaymentCode, displayQRCode, pollAuthCode } from '../auth/qr-poll.js';
|
|
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) {
|
|
83
|
-
const credentials = await loadCredentials();
|
|
84
|
-
if (!credentials) {
|
|
85
|
-
console.log(chalk.yellow('Not logged in. Run `clawapps login` first.'));
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
const validated = await ensureValidToken(credentials);
|
|
89
|
-
if (!validated) {
|
|
90
|
-
console.log(chalk.red('Session expired. Please run `clawapps login` again.'));
|
|
91
|
-
process.exit(1);
|
|
92
|
-
}
|
|
93
|
-
// Create payment code via API and display QR code
|
|
94
|
-
let paymentCode;
|
|
95
|
-
try {
|
|
96
|
-
paymentCode = await createPaymentCode(validated.access_token, skillId);
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
100
|
-
console.error(chalk.red(`\nFailed to create payment code: ${message}`));
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
console.log(chalk.gray('\nScan the QR code to authorize payment:\n'));
|
|
104
|
-
displayQRCode(paymentCode.qr_url);
|
|
105
|
-
console.log(chalk.gray(`\nOr visit: ${paymentCode.qr_url}\n`));
|
|
106
|
-
console.log(chalk.yellow('Waiting for QR code verification (valid for 3 minutes)...\n'));
|
|
107
|
-
const spinner = ora('Waiting for payment confirmation...').start();
|
|
108
|
-
try {
|
|
109
|
-
const result = await pollAuthCode(paymentCode.code, 'payment');
|
|
110
|
-
spinner.stop();
|
|
111
|
-
if (result.one_time_pay_token) {
|
|
112
|
-
console.log(chalk.green('\nPayment grant confirmed!'));
|
|
113
|
-
console.log(chalk.gray(`Payment Token: ${result.one_time_pay_token}`));
|
|
114
|
-
console.log(chalk.gray(`Auto Payment: ${result.auto_pay_enabled ? 'enabled' : 'disabled'}`));
|
|
115
|
-
}
|
|
116
|
-
else if (result.auto_pay_enabled) {
|
|
117
|
-
console.log(chalk.green('\nAuto-pay is enabled, proceeding...'));
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
console.error(chalk.red('\nPayment grant failed: no payment token received.'));
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
catch (err) {
|
|
125
|
-
spinner.stop();
|
|
126
|
-
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
127
|
-
console.error(chalk.red(`\nPayment grant failed: ${message}`));
|
|
128
|
-
console.error(chalk.yellow('QR code has expired. Please run `clawapps payment-grant <skill_id>` to generate a new one.'));
|
|
129
|
-
process.exit(1);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=payment-grant.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payment-grant.js","sourceRoot":"","sources":["../../src/commands/payment-grant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function rechargeCreditsCommand(): Promise<void>;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { CONFIG } from '../lib/config.js';
|
|
3
|
-
import { displayQRCode } from '../auth/qr-poll.js';
|
|
4
|
-
export async function rechargeCreditsCommand() {
|
|
5
|
-
const url = `${CONFIG.CLAW_WEB_BASE}/credit`;
|
|
6
|
-
console.log(chalk.yellow('\nInsufficient credits. Please scan the QR code to recharge.\n'));
|
|
7
|
-
displayQRCode(url);
|
|
8
|
-
console.log(chalk.gray(`\nOr visit: ${url}\n`));
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=recharge-credits.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recharge-credits.js","sourceRoot":"","sources":["../../src/commands/recharge-credits.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,sBAAsB;IAC1C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,SAAS,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC,CAAC;IAC5F,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function subscribeCommand(): Promise<void>;
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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/commands/token.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function tokenCommand(): Promise<void>;
|
package/dist/commands/token.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { loadCredentials } from '../lib/credentials.js';
|
|
3
|
-
import { ensureValidToken } from './helpers/ensure-token.js';
|
|
4
|
-
export async function tokenCommand() {
|
|
5
|
-
const credentials = await loadCredentials();
|
|
6
|
-
if (!credentials) {
|
|
7
|
-
console.error(chalk.red('Not logged in. Please run `clawapps login` first.'));
|
|
8
|
-
process.exit(1);
|
|
9
|
-
}
|
|
10
|
-
const validated = await ensureValidToken(credentials);
|
|
11
|
-
if (!validated) {
|
|
12
|
-
console.error(chalk.red('Session expired and could not be refreshed. Please run `clawapps login` to re-authenticate.'));
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
console.log(validated.access_token);
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=token.js.map
|